decocms 4.460.0 → 4.460.1

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 (359) hide show
  1. package/dist/client/assets/{AlertCircle-CO6inmNg.js → AlertCircle-Bwq8KEBx.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CApVXWTz.js → AreaChart-zApCYsTt.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-B8UnGYhG.js → ArrowLeft-DF1MB-yY.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-B18RgHnP.js → ArrowUp-DANCvuNH.js} +1 -1
  5. package/dist/client/assets/{Building02-Dmjq05D1.js → Building02-DAVL-muq.js} +1 -1
  6. package/dist/client/assets/{CartesianChart-Cpp-FiJT.js → CartesianChart-dSDQyKjJ.js} +1 -1
  7. package/dist/client/assets/{Check-DflKvLuX.js → Check-DSlEjG95.js} +1 -1
  8. package/dist/client/assets/{CheckCircle-UV6jcSdL.js → CheckCircle-X8Bvezxf.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-C9OLU7pl.js → ChevronUp-CwiD8_PP.js} +1 -1
  10. package/dist/client/assets/{Copy01-BSo_lYTe.js → Copy01-BLyny6EP.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-DPlKO5Cv.js → CreditCard01-CJ0bYMMs.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-SLBacfPj.js → DotsVertical-0-Fv8V_v.js} +1 -1
  13. package/dist/client/assets/{ErrorBarContext-CdtNGaLY.js → ErrorBarContext-C7O0hN52.js} +1 -1
  14. package/dist/client/assets/{Image01-4N1iChYj.js → Image01-CXA18o-u.js} +1 -1
  15. package/dist/client/assets/{Key01-eMYBRWWN.js → Key01-C5r5ygvJ.js} +1 -1
  16. package/dist/client/assets/{Line-xrmbleyU.js → Line-D0DXMJU0.js} +1 -1
  17. package/dist/client/assets/{Link01-r0Q6vSL3.js → Link01-CIHnq4tC.js} +1 -1
  18. package/dist/client/assets/{LinkBroken01-BFDA4BvC.js → LinkBroken01-B7IISXJz.js} +1 -1
  19. package/dist/client/assets/{LinkExternal01-Zc5e3RJ3.js → LinkExternal01-D_oHJ00a.js} +1 -1
  20. package/dist/client/assets/{Monitor01-CshL0Mjr.js → Monitor01-mAT8Z8eh.js} +1 -1
  21. package/dist/client/assets/{Palette-Cj8X33PC.js → Palette-DLNxq7Bc.js} +1 -1
  22. package/dist/client/assets/{Plus-CuabNbw1.js → Plus-BeYeCL3X.js} +1 -1
  23. package/dist/client/assets/{SearchMd-BT0xOVJ4.js → SearchMd-Cq9my8IN.js} +1 -1
  24. package/dist/client/assets/{Sector-BTRmxdkF.js → Sector-iXlBHnm7.js} +1 -1
  25. package/dist/client/assets/{ShoppingBag01-C56E9Cr5.js → ShoppingBag01-BoK7G-Iw.js} +1 -1
  26. package/dist/client/assets/{Sun-BZD5r25P.js → Sun-BtYMn7fq.js} +1 -1
  27. package/dist/client/assets/{Tool01-Clh2JKqc.js → Tool01-CltZDEUO.js} +1 -1
  28. package/dist/client/assets/{Trash01-DlWd7fsc.js → Trash01-F8pY0oTr.js} +1 -1
  29. package/dist/client/assets/{Upload01-DeYG5Wu1.js → Upload01-CNS3XReB.js} +1 -1
  30. package/dist/client/assets/{User01-DXEthK_f.js → User01-DieqTmmW.js} +1 -1
  31. package/dist/client/assets/{UserSquare-CaFmUcUJ.js → UserSquare-C3jJqQBX.js} +1 -1
  32. package/dist/client/assets/{Users01-DTiueiuk.js → Users01-dmJ6JUNW.js} +1 -1
  33. package/dist/client/assets/{X-DGsMQ15_.js → X-BZjIdPNW.js} +1 -1
  34. package/dist/client/assets/{XAxis-DdWgc6R-.js → XAxis-BjZsTBMH.js} +1 -1
  35. package/dist/client/assets/{XClose-KAMCGuVj.js → XClose-De0E1dDZ.js} +1 -1
  36. package/dist/client/assets/{ZoomOut-BGVwn12H.js → ZoomOut-ba2TdIY0.js} +1 -1
  37. package/dist/client/assets/{access-gate-BhaPuGNN.js → access-gate-DgB3O6Uy.js} +1 -1
  38. package/dist/client/assets/{add-connection-dialog-as-69W7W.js → add-connection-dialog-9578Hvli.js} +1 -1
  39. package/dist/client/assets/{agent-analytics-DwnCv2aL.js → agent-analytics-DXWm3-Ie.js} +1 -1
  40. package/dist/client/assets/agent-app-BvWEkBrk.js +1 -0
  41. package/dist/client/assets/{agent-assets-BxNWD09a.js → agent-assets-D02fwKMD.js} +1 -1
  42. package/dist/client/assets/{agent-automation-B-qmkCRc.js → agent-automation-odyQL0Sf.js} +1 -1
  43. package/dist/client/assets/{agent-automations-tAY1xF4V.js → agent-automations-DSQBo4dd.js} +1 -1
  44. package/dist/client/assets/{agent-connect-sources-BhLRSqZR.js → agent-connect-sources-BmjXPmu8.js} +1 -1
  45. package/dist/client/assets/agent-deck-DaexGUFs.js +1 -0
  46. package/dist/client/assets/{agent-e2e-BgCXQPMo.js → agent-e2e-CH029T3x.js} +1 -1
  47. package/dist/client/assets/{agent-experiments-nF9dzwrT.js → agent-experiments-CIXXoM--.js} +1 -1
  48. package/dist/client/assets/{agent-file-BqvA4qvs.js → agent-file-0PttI3lD.js} +1 -1
  49. package/dist/client/assets/{agent-hosting-CVtUgrlh.js → agent-hosting-BYHHL6Gg.js} +1 -1
  50. package/dist/client/assets/{agent-icon-DEJDgJKr.js → agent-icon-BZIbsiYY.js} +1 -1
  51. package/dist/client/assets/agent-library-BD8rtF4a.js +1 -0
  52. package/dist/client/assets/agent-library-file-DLW0UHG_.js +1 -0
  53. package/dist/client/assets/{agent-monitor-Bqch130e.js → agent-monitor-X7wTqeQd.js} +1 -1
  54. package/dist/client/assets/{agent-overview-BmSnBXZi.js → agent-overview--sOAu5Qg.js} +1 -1
  55. package/dist/client/assets/agent-settings-BfN4n_gg.js +1 -0
  56. package/dist/client/assets/agent-site-editor-code-BnUp93x-.js +2 -0
  57. package/dist/client/assets/{agent-site-editor-content--EC8mmeP.js → agent-site-editor-content-Q-uP1Z8H.js} +3 -3
  58. package/dist/client/assets/{agent-site-editor-BHa6Wf-r.js → agent-site-editor-dfLDgzcY.js} +1 -1
  59. package/dist/client/assets/{agent-site-editor-preview-XBrbwJSa.js → agent-site-editor-preview-BJl3A9UQ.js} +3 -3
  60. package/dist/client/assets/agent-view-D5SNt4Zf.js +1 -0
  61. package/dist/client/assets/{agent-view-guard-B5-2uxYl.js → agent-view-guard-CWyvwMLl.js} +1 -1
  62. package/dist/client/assets/{agents-list-CJcgdMt6.js → agents-list-DW32flnl.js} +1 -1
  63. package/dist/client/assets/{ai-providers-D4ox3qtu.js → ai-providers-8th0DVAo.js} +1 -1
  64. package/dist/client/assets/{alert-DYSdAzsu.js → alert-bLQAWu8z.js} +1 -1
  65. package/dist/client/assets/{alert-dialog-DbfJ99VN.js → alert-dialog-CfueUAed.js} +1 -1
  66. package/dist/client/assets/{analytics-sections-DLz6mntd.js → analytics-sections-DFIaFVDw.js} +1 -1
  67. package/dist/client/assets/{api-keys-BhjuRDWg.js → api-keys-BSwxa1BY.js} +1 -1
  68. package/dist/client/assets/api-keys-BZ8eXpKx.js +1 -0
  69. package/dist/client/assets/app-editor-Dt5uFvrE.js +1 -0
  70. package/dist/client/assets/{asset-utils-DI6eAjWe.js → asset-utils-BCEgAGhG.js} +1 -1
  71. package/dist/client/assets/{auth-BB3_nlWc.js → auth-D16jVI0T.js} +1 -1
  72. package/dist/client/assets/{auth-catchall-CrCQ97Cu.js → auth-catchall-B9TIPdRj.js} +1 -1
  73. package/dist/client/assets/{auth-entry-DQUnXOrR.js → auth-entry-D8mzjrB8.js} +1 -1
  74. package/dist/client/assets/{auth-split-layout-Q-LkeCrk.js → auth-split-layout-DZij9jqo.js} +1 -1
  75. package/dist/client/assets/{authenticate-and-persist-oauth-C1cpYR7k.js → authenticate-and-persist-oauth-sTLpQl9W.js} +1 -1
  76. package/dist/client/assets/{automation-list-row-COBgy2LT.js → automation-list-row-Do6s_taP.js} +1 -1
  77. package/dist/client/assets/{automation-runs-BK_d41Jj.js → automation-runs-Dr89UOnj.js} +1 -1
  78. package/dist/client/assets/{automations-BACBnkPR.js → automations-CTIaWZK-.js} +1 -1
  79. package/dist/client/assets/{autosend-DHbC0OwM.js → autosend-CW_H-m_V.js} +1 -1
  80. package/dist/client/assets/{avatar-DODmHr21.js → avatar-GIhiE58_.js} +1 -1
  81. package/dist/client/assets/{badge-BSEUE8qb.js → badge-BzmW1tZl.js} +1 -1
  82. package/dist/client/assets/{block-document-Cn2IZv6E.js → block-document-CrbQ3LI-.js} +1 -1
  83. package/dist/client/assets/{blocks-preview-workspace-context-BHjDCKeE.js → blocks-preview-workspace-context-C2aK2LPU.js} +1 -1
  84. package/dist/client/assets/{blog-schema-DzC21Nw0.js → blog-schema-BV9qDV8v.js} +1 -1
  85. package/dist/client/assets/{buckets-kQxu-ruC.js → buckets-BrLUrzA_.js} +1 -1
  86. package/dist/client/assets/{build-improve-prompt-doc-Di_n9Ru9.js → build-improve-prompt-doc-DJ8_1uCv.js} +1 -1
  87. package/dist/client/assets/{calendar-C9mWZfZe.js → calendar-18LAD4S0.js} +1 -1
  88. package/dist/client/assets/{capability-load-error-88c6L-px.js → capability-load-error-B9PdS7Em.js} +1 -1
  89. package/dist/client/assets/{category-editor-BDPRFhyh.js → category-editor-B2Jtz1BX.js} +1 -1
  90. package/dist/client/assets/{chart-DqmLUObJ.js → chart-Crql182N.js} +1 -1
  91. package/dist/client/assets/{chat-context-D2Uba2eY.js → chat-context-BjIxvyYo.js} +1 -1
  92. package/dist/client/assets/{chat-draft-nD9sRYmc.js → chat-draft-CUQZrE44.js} +1 -1
  93. package/dist/client/assets/{checkbox-DuFJG33E.js → checkbox-CqQh238S.js} +1 -1
  94. package/dist/client/assets/{choose-editor-CT71eEdg.js → choose-editor-BvNRmUBr.js} +1 -1
  95. package/dist/client/assets/claim-phase-copy-C6vFKCUa.js +1 -0
  96. package/dist/client/assets/{cli-auth-success-CMeRfuMb.js → cli-auth-success-Zosal7jq.js} +1 -1
  97. package/dist/client/assets/{client-icons-CDxRn-hB.js → client-icons-DiI1PGNA.js} +1 -1
  98. package/dist/client/assets/{collapsible-2T9qzVNn.js → collapsible-BSLDVjTX.js} +1 -1
  99. package/dist/client/assets/{collection-detail-DTD1NQY3.js → collection-detail-D17_8lBA.js} +1 -1
  100. package/dist/client/assets/{collection-display-button-BbQUEBlL.js → collection-display-button-B2N9j5fO.js} +1 -1
  101. package/dist/client/assets/{collection-search--26vqrZa.js → collection-search-CtPjeP58.js} +1 -1
  102. package/dist/client/assets/{collection-table-wrapper-DCH8FEEt.js → collection-table-wrapper-CMPytVUu.js} +1 -1
  103. package/dist/client/assets/{collection-tabs-DagHE-HY.js → collection-tabs-UdZzxm44.js} +1 -1
  104. package/dist/client/assets/{column-rules-Cu6FkvXS.js → column-rules-Lyt6M58d.js} +1 -1
  105. package/dist/client/assets/{combobox-S4Bxybva.js → combobox-Cp3dBrLf.js} +1 -1
  106. package/dist/client/assets/{command-BMw6uC9-.js → command-B_DApSOs.js} +1 -1
  107. package/dist/client/assets/{companion-mcps-section-qES6v4vK.js → companion-mcps-section-BV5qk-pm.js} +1 -1
  108. package/dist/client/assets/{config-CviRr7Ez.js → config-Boh65DSy.js} +1 -1
  109. package/dist/client/assets/{connect-Bjf9yNJ3.js → connect-C4r7BZs2.js} +1 -1
  110. package/dist/client/assets/{connect-layout-Ck_N1G1f.js → connect-layout-CLgdudmm.js} +1 -1
  111. package/dist/client/assets/{connection-4K6p7PGK.js → connection-Bsvehrve.js} +1 -1
  112. package/dist/client/assets/{connection-card-ByXuS476.js → connection-card-a9F0JDCk.js} +1 -1
  113. package/dist/client/assets/{connection-detail-waZowG0W.js → connection-detail-DBVrdMn0.js} +1 -1
  114. package/dist/client/assets/{connection-form-helpers-US5LomVa.js → connection-form-helpers-B80eqZsh.js} +1 -1
  115. package/dist/client/assets/{connections-0gRe1Tnu.js → connections-oTSbzLZr.js} +1 -1
  116. package/dist/client/assets/{context-BMtXEsRL.js → context-UHXO5m7I.js} +1 -1
  117. package/dist/client/assets/{context-menu-CVcBoVn_.js → context-menu-BAGgSkt8.js} +1 -1
  118. package/dist/client/assets/{core.esm-BKBFvPcW.js → core.esm-CCVGmAi6.js} +1 -1
  119. package/dist/client/assets/{create-organization-dialog-BwCYKY3y.js → create-organization-dialog-D8REaVpf.js} +1 -1
  120. package/dist/client/assets/{daily-pulse-CyMJ0kug.js → daily-pulse-BhtHCMCm.js} +1 -1
  121. package/dist/client/assets/{decopilot-DDjNLUKt.js → decopilot-DT0wSrxE.js} +1 -1
  122. package/dist/client/assets/{device-hint-CnzfzWcq.js → device-hint-CaubfRXe.js} +1 -1
  123. package/dist/client/assets/{dialog-BiE_Qj0b.js → dialog-jLhjO4AC.js} +1 -1
  124. package/dist/client/assets/{discover-BkIu0eOU.js → discover-lhiKgkbN.js} +1 -1
  125. package/dist/client/assets/{domain-settings-BIZai3Z3.js → domain-settings-Dhq6-N9I.js} +1 -1
  126. package/dist/client/assets/{download-app-dialog-Bp2LFEhW.js → download-app-dialog-6llot6XK.js} +1 -1
  127. package/dist/client/assets/{drawer-BK1UaGO3.js → drawer-DaKnWM0v.js} +1 -1
  128. package/dist/client/assets/{editor-Bw0Zpi5c.js → editor-DJMANchm.js} +1 -1
  129. package/dist/client/assets/{empty-state-B1hBxq5f.js → empty-state-CGdF8IF7.js} +1 -1
  130. package/dist/client/assets/{empty-state-LDw0F9lM.js → empty-state-kHLVD28I.js} +1 -1
  131. package/dist/client/assets/{extract-connection-data-Ct7lFSGd.js → extract-connection-data-CjcTbDWD.js} +1 -1
  132. package/dist/client/assets/{feature-gate-DKh0mjoH.js → feature-gate-De4Mqgr2.js} +1 -1
  133. package/dist/client/assets/{feature-paywall-Ci-k2zkG.js → feature-paywall-Cvdx5GXl.js} +1 -1
  134. package/dist/client/assets/{file-explorer-GIa-hWbv.js → file-explorer-XcerEvDO.js} +1 -1
  135. package/dist/client/assets/{file-preview-BOaYWTFN.js → file-preview-Jk5Q4Qbv.js} +1 -1
  136. package/dist/client/assets/{file-share-button-BoY9JXrz.js → file-share-button-CTiImP_h.js} +1 -1
  137. package/dist/client/assets/{file-type-icon-CuBjqaGD.js → file-type-icon-9riFO5Pw.js} +1 -1
  138. package/dist/client/assets/flat-project-CXWOJ7ze.js +1 -0
  139. package/dist/client/assets/{folder-icon-CemUja5V.js → folder-icon-BqITTWWb.js} +1 -1
  140. package/dist/client/assets/{form-jzofsj5U.js → form-C06ZUHhD.js} +1 -1
  141. package/dist/client/assets/{gateway-client-CTRfA9Js.js → gateway-client-MpGS4TU5.js} +1 -1
  142. package/dist/client/assets/{general-CxT0d4XM.js → general-DT74TZ4l.js} +1 -1
  143. package/dist/client/assets/{home-BwqjmywK.js → home-uWtlM6Dh.js} +1 -1
  144. package/dist/client/assets/{icon-button-DOuIQPAH.js → icon-button-Cck0B_Y8.js} +1 -1
  145. package/dist/client/assets/{index-DRJ3DSOC.js → index-B6H2kdy8.js} +1 -1
  146. package/dist/client/assets/{index-CY34v6Na.js → index-BIzube1-.js} +1 -1
  147. package/dist/client/assets/{index-4hGIjOLY.js → index-BKfTvxBr.js} +1 -1
  148. package/dist/client/assets/{index-BOFYM3I3.js → index-C02d7irT.js} +1 -1
  149. package/dist/client/assets/{index-Wqa3a93L.js → index-C6MkpS-N.js} +1 -1
  150. package/dist/client/assets/{index-DrL0LhJ_.js → index-CB6KNiqK.js} +1 -1
  151. package/dist/client/assets/{index-_GVj9btr.js → index-CKasvOVG.js} +2 -2
  152. package/dist/client/assets/{index-BPOERS6-.js → index-CMHjLGlt.js} +1 -1
  153. package/dist/client/assets/{index-q38sMtXI.js → index-CRSu29Wr.js} +1 -1
  154. package/dist/client/assets/{index-CuK9kkYl.js → index-CWypSe6T.js} +1 -1
  155. package/dist/client/assets/{index-CrubH2ku.js → index-CeyKA8ar.js} +1 -1
  156. package/dist/client/assets/{index-DLNZx7CL.js → index-Co-YmMMX.js} +1 -1
  157. package/dist/client/assets/{index-DUzKFiiy.js → index-D1_pFght.js} +1 -1
  158. package/dist/client/assets/{index-bPDDrfzN.js → index-DAZs6pJh.js} +1 -1
  159. package/dist/client/assets/{index-d6nJeaNH.js → index-DmD0S00R.js} +3 -3
  160. package/dist/client/assets/{index-redirect-B_N3QKHE.js → index-redirect-Dq2hDKf8.js} +1 -1
  161. package/dist/client/assets/{infiniteQueryObserver-DlEB3cFH.js → infiniteQueryObserver-BGenoBHR.js} +1 -1
  162. package/dist/client/assets/{infra-billing-nVK-KfKb.js → infra-billing-DOCQCYsu.js} +1 -1
  163. package/dist/client/assets/{input-Dc98dM4d.js → input-BsigxaMe.js} +3 -3
  164. package/dist/client/assets/{input-CYR-ecYb.js → input-CgiUsNpH.js} +1 -1
  165. package/dist/client/assets/{input-BSc0-5vm.js → input-Uu3nGbPg.js} +1 -1
  166. package/dist/client/assets/{integration-icon-Bv72Mom1.js → integration-icon-BS9kLO6T.js} +1 -1
  167. package/dist/client/assets/{label-Cj86qsUH.js → label-DEi4Yn9x.js} +1 -1
  168. package/dist/client/assets/{layout-o9iC4bYz.js → layout-DOWTHVCD.js} +1 -1
  169. package/dist/client/assets/{legacy-agents-deep-CDFDs7i4.js → legacy-agents-deep-BNSUWU9i.js} +1 -1
  170. package/dist/client/assets/{legacy-main-redirect-CK8FMBhk.js → legacy-main-redirect-D3je0eyt.js} +1 -1
  171. package/dist/client/assets/library-DlWGLZCc.js +1 -0
  172. package/dist/client/assets/{library-tab-CSfKZODd.js → library-tab-BFzXlMy1.js} +1 -1
  173. package/dist/client/assets/{login-D8pvVtCB.js → login-xsOv7kiK.js} +1 -1
  174. package/dist/client/assets/{markdown-BvMMnkAP.js → markdown-aMMhxCcV.js} +1 -1
  175. package/dist/client/assets/{mcp-app-renderer-fhalPBVj.js → mcp-app-renderer-BAvYKhUE.js} +1 -1
  176. package/dist/client/assets/{mcp-oauth-CPp0zS75.js → mcp-oauth-C_mgPfFr.js} +1 -1
  177. package/dist/client/assets/{members-6K2fNd3L.js → members-BXuopLq5.js} +1 -1
  178. package/dist/client/assets/{memory-Bocqcnkv.js → memory-7O8FpyhY.js} +1 -1
  179. package/dist/client/assets/{mini-report-page-BVMATOF0.js → mini-report-page-3vNr5UPx.js} +1 -1
  180. package/dist/client/assets/{mock-board-DUPyXJgX.js → mock-board-LQT2Beyj.js} +1 -1
  181. package/dist/client/assets/{monaco-editor-Cem7yZq_.js → monaco-editor-Bsrq2Ypn.js} +1 -1
  182. package/dist/client/assets/{monitoring-stats-row-3pNpz_Po.js → monitoring-stats-row-D89ZI5nt.js} +1 -1
  183. package/dist/client/assets/{multi-select-CBmJhpxZ.js → multi-select-CRPfBr_s.js} +1 -1
  184. package/dist/client/assets/{mustache-Cee-3oah.js → mustache-3yr2i0u2.js} +1 -1
  185. package/dist/client/assets/{new-project-dialog-DRVj0P6g.js → new-project-dialog-DnJwhuSO.js} +1 -1
  186. package/dist/client/assets/{oauth-callback-BeLgYq4W.js → oauth-callback-CsNKoz4A.js} +1 -1
  187. package/dist/client/assets/{oauth-callback-ai-provider-CEWmLCzR.js → oauth-callback-ai-provider-DgXA4IHF.js} +1 -1
  188. package/dist/client/assets/{onboarding-aK-Aumz6.js → onboarding-CwPLyV2F.js} +1 -1
  189. package/dist/client/assets/{openai-conversation-nrisAFCF.js → openai-conversation-BR9OwIqP.js} +1 -1
  190. package/dist/client/assets/{optimistic-project-sidebar-views-BgrzP8LK.js → optimistic-project-sidebar-views-CVr5lldC.js} +1 -1
  191. package/dist/client/assets/{org-file-open-context-BwPyPLEh.js → org-file-open-context-DNrylVB6.js} +1 -1
  192. package/dist/client/assets/{organization-choice-CG0bbbVM.js → organization-choice-D7mLhgkE.js} +1 -1
  193. package/dist/client/assets/{orgs-BPLgiRGC.js → orgs-DXEoFtga.js} +1 -1
  194. package/dist/client/assets/{page-seo-form-CljXRtge.js → page-seo-form-CgT-GNzb.js} +1 -1
  195. package/dist/client/assets/{pair-CY9aP3bo.js → pair-vtWitlGL.js} +1 -1
  196. package/dist/client/assets/{plan-ladder-DapYk4hV.js → plan-ladder-DPoDtzx4.js} +1 -1
  197. package/dist/client/assets/{popover-D9pWfxJO.js → popover-Dz-LRJRo.js} +1 -1
  198. package/dist/client/assets/{post-calendar-BqXGpoXI.js → post-calendar-Cjmj1wor.js} +1 -1
  199. package/dist/client/assets/{post-editor-CU_D2Tl5.js → post-editor-CHsD7rXF.js} +1 -1
  200. package/dist/client/assets/{preview-content-B5bLtr9J.js → preview-content-kgtHTMM7.js} +1 -1
  201. package/dist/client/assets/{preview-dialog-qIpFp9QF.js → preview-dialog-Dlw5VUA6.js} +1 -1
  202. package/dist/client/assets/{preview-panel-BABBrCDp.js → preview-panel-BKEe4Tf3.js} +1 -1
  203. package/dist/client/assets/{profile-C9s1BDLe.js → profile-4HBGZ28y.js} +1 -1
  204. package/dist/client/assets/{project-app-view-C_gwtvAy.js → project-app-view-CeFj07T4.js} +1 -1
  205. package/dist/client/assets/{project-feed-E7BJsJqz.js → project-feed-D_uxA4xX.js} +1 -1
  206. package/dist/client/assets/{project-icon-Crnm9CYl.js → project-icon-DV3OuzUB.js} +1 -1
  207. package/dist/client/assets/project-reports-Ynh6Ow__.js +1 -0
  208. package/dist/client/assets/project-tasks-uuDgMbhr.js +1 -0
  209. package/dist/client/assets/{projects-CVJ6wcCI.js → projects-C8tXcpeX.js} +1 -1
  210. package/dist/client/assets/{projects-empty-state-BkzChIaG.js → projects-empty-state-BrFXaR7R.js} +1 -1
  211. package/dist/client/assets/{prompts-DajLPlC5.js → prompts-DPlpMwas.js} +1 -1
  212. package/dist/client/assets/record-editor-DDWYNsfR.js +1 -0
  213. package/dist/client/assets/{redirect-editor-B1EXJChR.js → redirect-editor-DfLhkR2y.js} +1 -1
  214. package/dist/client/assets/reports-6fiaHn5I.js +1 -0
  215. package/dist/client/assets/{reports-T3NBJ22g.js → reports-BkhThZB1.js} +1 -1
  216. package/dist/client/assets/{reports-onboarding-BhmrnVdL.js → reports-onboarding-Cx9VF6KJ.js} +1 -1
  217. package/dist/client/assets/{reports-tab-GIuwkx72.js → reports-tab-Ducu1saq.js} +2 -2
  218. package/dist/client/assets/{repositories-CrBCHNWt.js → repositories-BOyyjXV0.js} +1 -1
  219. package/dist/client/assets/{repository-binding-lWBOOLGu.js → repository-binding-CJoSfdT8.js} +1 -1
  220. package/dist/client/assets/{repository-import-picker-CRdohCCA.js → repository-import-picker-Cyu0s0t1.js} +1 -1
  221. package/dist/client/assets/{repository-picker-nUaCUvdQ.js → repository-picker-9elwEdUY.js} +1 -1
  222. package/dist/client/assets/{require-capability-gqnfEPJB.js → require-capability-CawdILDA.js} +1 -1
  223. package/dist/client/assets/{required-auth-layout-DydTEOO7.js → required-auth-layout-Dgp9q2kH.js} +1 -1
  224. package/dist/client/assets/{reset-password-D01o6hX-.js → reset-password-VFRsbnuq.js} +1 -1
  225. package/dist/client/assets/{resizable-DNM6R7oJ.js → resizable-5gMiQDis.js} +1 -1
  226. package/dist/client/assets/{resolve-tab-icon-DRfIZ6cf.js → resolve-tab-icon-CSu-Wt6q.js} +1 -1
  227. package/dist/client/assets/{review-settings-xdXqQ-Fr.js → review-settings-Dfftlr75.js} +1 -1
  228. package/dist/client/assets/{rich-text-link-control-DVwVKobw.js → rich-text-link-control-B39VJrD6.js} +1 -1
  229. package/dist/client/assets/{roles-Dcr-WCiV.js → roles-CzMxKipG.js} +1 -1
  230. package/dist/client/assets/{route-mUJzOubz.js → route-BA9iqhAJ.js} +1 -1
  231. package/dist/client/assets/{route-BJsZS4n0.js → route-ClVjCWPK.js} +1 -1
  232. package/dist/client/assets/route-unuL6shI.js +1 -0
  233. package/dist/client/assets/{runnable-block-editor-B6_thi71.js → runnable-block-editor-CisjX4wI.js} +2 -2
  234. package/dist/client/assets/{sandbox-lifecycle-context-Bo7fsq-I.js → sandbox-lifecycle-context-BpAOw8Pc.js} +1 -1
  235. package/dist/client/assets/{schema-BRSVyS4n.js → schema-D8Nur-Ic.js} +1 -1
  236. package/dist/client/assets/{scroll-area-CPgJ4PRu.js → scroll-area-B_9q7TaB.js} +1 -1
  237. package/dist/client/assets/{search-input-BORmBqXA.js → search-input-DcsA8UpS.js} +1 -1
  238. package/dist/client/assets/{search-toggle-CDBJ_dcm.js → search-toggle-VTKdQ9qv.js} +1 -1
  239. package/dist/client/assets/{secret-picker-B-7G1MEj.js → secret-picker-CS3SmrPR.js} +1 -1
  240. package/dist/client/assets/{secrets-D4gvzFSi.js → secrets-Cebfw7AJ.js} +1 -1
  241. package/dist/client/assets/{sections-editor-DwhpsltU.js → sections-editor-BKgIO5zf.js} +1 -1
  242. package/dist/client/assets/{select-GyUC-zPO.js → select-BqjP1WH1.js} +1 -1
  243. package/dist/client/assets/{select-model-CNt1j8fx.js → select-model-D0LHFB-0.js} +1 -1
  244. package/dist/client/assets/{seo-editor-DTz9iaca.js → seo-editor-BEscDiZm.js} +1 -1
  245. package/dist/client/assets/{separator-CHD1qhYH.js → separator-DoQbXsf8.js} +1 -1
  246. package/dist/client/assets/{settings-tab-qwRT8IMw.js → settings-tab-C-Gh7RPZ.js} +1 -1
  247. package/dist/client/assets/{sheet-D-P3SyoA.js → sheet-ZkDrnlR0.js} +1 -1
  248. package/dist/client/assets/{shell-layout-Ch3jsP8V.js → shell-layout-e3i0KgLH.js} +1 -1
  249. package/dist/client/assets/{skills-Dopz8CCU.js → skills-k4071nlm.js} +1 -1
  250. package/dist/client/assets/{sso-K_elPM96.js → sso-p2L6QUqE.js} +1 -1
  251. package/dist/client/assets/{suggestion-ilFzFR9L.js → suggestion-B5u3RkM8.js} +1 -1
  252. package/dist/client/assets/{switch-lvjDGHVD.js → switch-Cp3b6q15.js} +1 -1
  253. package/dist/client/assets/{synced-repos-DxikPW4L.js → synced-repos-BoVQf_Zw.js} +1 -1
  254. package/dist/client/assets/{tab-icon-glyph-B0KPgtWi.js → tab-icon-glyph-BNGx0Ojf.js} +1 -1
  255. package/dist/client/assets/{table-BdFIzjbt.js → table-DiqRKg4U.js} +1 -1
  256. package/dist/client/assets/{tabs-IqJyRysQ.js → tabs-DD9ZuaRX.js} +1 -1
  257. package/dist/client/assets/{task-board-C801HvIg.js → task-board-CeNT1V7W.js} +1 -1
  258. package/dist/client/assets/{task-route-CyL9XVdL.js → task-route-C89uT8-3.js} +1 -1
  259. package/dist/client/assets/{task-status-Dj8oT1Uy.js → task-status-bHEF9z1v.js} +1 -1
  260. package/dist/client/assets/{taskboard-analytics-DULw_HqO.js → taskboard-analytics-D_oFFDPV.js} +1 -1
  261. package/dist/client/assets/{tasks-ACHOod_4.js → tasks-C6ASdvVE.js} +1 -1
  262. package/dist/client/assets/tasks-CXTamdum.js +1 -0
  263. package/dist/client/assets/{textarea-CC50zNgC.js → textarea-C-nPS0c9.js} +1 -1
  264. package/dist/client/assets/{thread-analytics-BdWBoZIU.js → thread-analytics-CRNK9R8J.js} +1 -1
  265. package/dist/client/assets/{thread-button-CRCH5kP6.js → thread-button-DoUjK4rU.js} +1 -1
  266. package/dist/client/assets/{thread-intent-D0eb-CDH.js → thread-intent-CC7_jbWH.js} +1 -1
  267. package/dist/client/assets/{thread-route-CFzi0zOb.js → thread-route-C24EhL25.js} +1 -1
  268. package/dist/client/assets/{thread-route-DHZZvuwU.js → thread-route-Cz208JwB.js} +1 -1
  269. package/dist/client/assets/{thread-sheet-body-Dx13bluX.js → thread-sheet-body-BwABaVfa.js} +1 -1
  270. package/dist/client/assets/{toggle-group-BuPI0M2U.js → toggle-group-tCoEln5L.js} +1 -1
  271. package/dist/client/assets/{toolbar-icon-button-BfNpw4zx.js → toolbar-icon-button-C5My_BL2.js} +1 -1
  272. package/dist/client/assets/{tooltip-B1qgpGKd.js → tooltip-RXXIG6PP.js} +1 -1
  273. package/dist/client/assets/{track-BGVo0D3h.js → track-Deq6RA-r.js} +1 -1
  274. package/dist/client/assets/{types-B84YBG-v.js → types-CkP1cVw4.js} +1 -1
  275. package/dist/client/assets/{usage-stats-C217RJWN.js → usage-stats-D2gc3pFt.js} +1 -1
  276. package/dist/client/assets/{use-ai-providers-CNfcuhbm.js → use-ai-providers-B6m8zNQz.js} +1 -1
  277. package/dist/client/assets/{use-automations-DXzzwS6R.js → use-automations-C4YjAjsc.js} +1 -1
  278. package/dist/client/assets/{use-autosave-BUI65Ewy.js → use-autosave-BUVkfe_n.js} +1 -1
  279. package/dist/client/assets/{use-chat-layout-state-c0Lav_OC.js → use-chat-layout-state-B4xMxcQs.js} +1 -1
  280. package/dist/client/assets/{use-clock-tick-DSTzgavn.js → use-clock-tick-DXXKn8fg.js} +1 -1
  281. package/dist/client/assets/{use-connect-companion-DVZ6s_4W.js → use-connect-companion-B2Cd3MWO.js} +1 -1
  282. package/dist/client/assets/{use-connection-BwVENpGY.js → use-connection-B3Ahwqn1.js} +1 -1
  283. package/dist/client/assets/{use-copy-Cf0vUQZI.js → use-copy-BFC0JW2G.js} +1 -1
  284. package/dist/client/assets/{use-create-virtual-mcp-DfJ29f6U.js → use-create-virtual-mcp-B8UX16SS.js} +1 -1
  285. package/dist/client/assets/{use-date-fns-locale-CCGctwId.js → use-date-fns-locale-CunIaWKC.js} +1 -1
  286. package/dist/client/assets/{use-debounced-autosave-CHhzTZ2F.js → use-debounced-autosave-cD3HDYvc.js} +1 -1
  287. package/dist/client/assets/{use-debounced-value-RVFqx3uz.js → use-debounced-value-_b0fcNs9.js} +1 -1
  288. package/dist/client/assets/{use-deco-credits-CcpEDSit.js → use-deco-credits-DN9htai7.js} +1 -1
  289. package/dist/client/assets/{use-decopilot-events-BU1FrPBU.js → use-decopilot-events-CpFjr9fT.js} +1 -1
  290. package/dist/client/assets/{use-delete-connection--dFUfH47.js → use-delete-connection-FwqrchUi.js} +1 -1
  291. package/dist/client/assets/{use-deployment-admin-Bu2LMCoe.js → use-deployment-admin-BYXOuYN3.js} +1 -1
  292. package/dist/client/assets/{use-fast-preview-draft-url-BpffEGVm.js → use-fast-preview-draft-url-B7MS8K62.js} +1 -1
  293. package/dist/client/assets/{use-file-configs-DRWnu9JI.js → use-file-configs-XMg3XdK_.js} +1 -1
  294. package/dist/client/assets/{use-infinite-scroll-C1cd5Np9.js → use-infinite-scroll-D2jXx5A-.js} +1 -1
  295. package/dist/client/assets/{use-join-requests-CFxgxy6-.js → use-join-requests-DTGQRKjO.js} +1 -1
  296. package/dist/client/assets/{use-main-panel-tabs-BRpiX296.js → use-main-panel-tabs-R4lgrftk.js} +1 -1
  297. package/dist/client/assets/{use-mcp-auth-status-CsbN4RE8.js → use-mcp-auth-status-aEKGkZKx.js} +1 -1
  298. package/dist/client/assets/{use-mcp-client-MBQakoPd.js → use-mcp-client-DXtwZUd4.js} +1 -1
  299. package/dist/client/assets/{use-mcp-prompts-DlsTWV5M.js → use-mcp-prompts-V-JFTbEA.js} +1 -1
  300. package/dist/client/assets/{use-mcp-tools-DUbmBIMM.js → use-mcp-tools-I7CHR5BB.js} +1 -1
  301. package/dist/client/assets/{use-members-BHOqnjBC.js → use-members-BSpHRww4.js} +1 -1
  302. package/dist/client/assets/{use-mobile-GjgRyNrU.js → use-mobile-BdZZD7Tz.js} +1 -1
  303. package/dist/client/assets/{use-navigate-to-agent-BVLRuti4.js → use-navigate-to-agent-BpN4LZtw.js} +1 -1
  304. package/dist/client/assets/use-new-blocks-editor-DYMIA9_-.js +1 -0
  305. package/dist/client/assets/{use-open-billing-url-D4iOVnZV.js → use-open-billing-url-BimuwssW.js} +1 -1
  306. package/dist/client/assets/{use-open-library-file-Donc5FRL.js → use-open-library-file-MRt9qoCU.js} +1 -1
  307. package/dist/client/assets/{use-org-auth-client-CgObMpFu.js → use-org-auth-client-DaftjGwc.js} +1 -1
  308. package/dist/client/assets/{use-org-fs-H22nJ8UQ.js → use-org-fs-Cctc8dpI.js} +1 -1
  309. package/dist/client/assets/{use-org-repo-syncs-DqPGl3jf.js → use-org-repo-syncs-Cl7ehlsj.js} +1 -1
  310. package/dist/client/assets/{use-org-sso-p449JELW.js → use-org-sso-BFoA7zI8.js} +1 -1
  311. package/dist/client/assets/{use-organization-roles-g1wplT3k.js → use-organization-roles-Fcabgnys.js} +1 -1
  312. package/dist/client/assets/{use-organization-settings-D6G7Joi1.js → use-organization-settings-CTH2FLYt.js} +1 -1
  313. package/dist/client/assets/{use-panel-navigate-BN6TJ3pz.js → use-panel-navigate-ChKQuyzg.js} +1 -1
  314. package/dist/client/assets/{use-project-scope-BGFTa5Uu.js → use-project-scope-BNMOg_TP.js} +1 -1
  315. package/dist/client/assets/{use-releases-BLP_qU2x.js → use-releases-CEzlXNda.js} +1 -1
  316. package/dist/client/assets/{use-reports-diagnostic-CN_9DvSB.js → use-reports-diagnostic-_tfbNF7P.js} +1 -1
  317. package/dist/client/assets/{use-secrets-h3kAVAEc.js → use-secrets-BfB4f-GR.js} +1 -1
  318. package/dist/client/assets/{use-section-preview-base-Cll7BHGX.js → use-section-preview-base-sXwPOS4w.js} +1 -1
  319. package/dist/client/assets/{use-session-runtime-D511U5U9.js → use-session-runtime-am7EZkpb.js} +1 -1
  320. package/dist/client/assets/{use-tags-tINfEJsv.js → use-tags-C7ZMSyaF.js} +1 -1
  321. package/dist/client/assets/{use-task-board-analytics-DNOpDPJw.js → use-task-board-analytics-DTJFOC5T.js} +1 -1
  322. package/dist/client/assets/{use-task-board-events-BYkf2Lo3.js → use-task-board-events-B0I3DOXt.js} +1 -1
  323. package/dist/client/assets/{use-task-metadata-BbkXArNg.js → use-task-metadata-D21Ff689.js} +1 -1
  324. package/dist/client/assets/{use-thread-analytics-mrMnXZXo.js → use-thread-analytics-DnDJMc58.js} +1 -1
  325. package/dist/client/assets/{use-thread-outputs-CNe60jol.js → use-thread-outputs-D-4kfZb6.js} +1 -1
  326. package/dist/client/assets/useInfiniteQuery-BreCnVcG.js +1 -0
  327. package/dist/client/assets/{useQueries-iZyKasSZ.js → useQueries-DD0TCqOp.js} +1 -1
  328. package/dist/client/assets/useSuspenseInfiniteQuery-FLboDA8y.js +1 -0
  329. package/dist/client/assets/{users-CLY8r7h_.js → users-DLyqmOIu.js} +1 -1
  330. package/dist/client/assets/{utils-Cuq1Pk3z.js → utils-CBNVWDsD.js} +1 -1
  331. package/dist/client/assets/{variant-calendar-uxD0Ftgo.js → variant-calendar-Cym8q58z.js} +1 -1
  332. package/dist/client/assets/{variant-matcher-override-DtJ4r59E.js → variant-matcher-override-Ddw0Yj6_.js} +1 -1
  333. package/dist/client/assets/{view-mode-toggle-eCmHobnl.js → view-mode-toggle-ic-G5WKX.js} +1 -1
  334. package/dist/client/assets/{virtual-mcp-BUAnetZd.js → virtual-mcp-C8FYHITa.js} +1 -1
  335. package/dist/client/index.html +1 -1
  336. package/dist/server/cli.js +1 -1
  337. package/dist/server/server.js +1 -1
  338. package/package.json +1 -1
  339. package/dist/client/assets/agent-app-jwWH-3nv.js +0 -1
  340. package/dist/client/assets/agent-deck-Bs1bdzXx.js +0 -1
  341. package/dist/client/assets/agent-library-D4WKDdLz.js +0 -1
  342. package/dist/client/assets/agent-library-file-CD1a0Po8.js +0 -1
  343. package/dist/client/assets/agent-settings-CCnd7-bY.js +0 -1
  344. package/dist/client/assets/agent-site-editor-code-ClSuagFu.js +0 -2
  345. package/dist/client/assets/agent-view-CHQVQ1xX.js +0 -1
  346. package/dist/client/assets/api-keys-I9s6MA94.js +0 -1
  347. package/dist/client/assets/app-editor-BhRj6zfU.js +0 -1
  348. package/dist/client/assets/claim-phase-copy-BSvjfi1v.js +0 -1
  349. package/dist/client/assets/flat-project-COkb96Ds.js +0 -1
  350. package/dist/client/assets/library-i2kmoNvP.js +0 -1
  351. package/dist/client/assets/project-reports-CDKYWfE1.js +0 -1
  352. package/dist/client/assets/project-tasks-r5-EJe10.js +0 -1
  353. package/dist/client/assets/record-editor-sODHkBaX.js +0 -1
  354. package/dist/client/assets/reports-hX8Kjy3l.js +0 -1
  355. package/dist/client/assets/route-CQjse9L4.js +0 -1
  356. package/dist/client/assets/tasks-OMmRRDhx.js +0 -1
  357. package/dist/client/assets/use-new-blocks-editor-0y9nzZSi.js +0 -1
  358. package/dist/client/assets/useInfiniteQuery-DtQ-1vLo.js +0 -1
  359. package/dist/client/assets/useSuspenseInfiniteQuery-Du59Bicl.js +0 -1
@@ -3726,7 +3726,7 @@ ${J.join(`
3726
3726
  `)}`:X}function qs6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
3727
3727
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var HJ8=200,Ls6=12,ws6,Es6=300,y_0=3;var rL1=D(()=>{J7();r$();f_0();ws6={aheadBy:0,behindBy:0,files:[]}});function Is6($){if(!$||$.includes(".."))return!1;return Ms6.test($)}function UJ8($){return Vs6.includes($)}function sL1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Is6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function aL1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Ms6,Vs6;var NJ8=D(()=>{Ms6=/^[\w./@-]+$/;Vs6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function A50($,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 DJ8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new jP(b7);let J=await pj($.storage,X,Y);if(J&&await MD($.storage,J)){let F=await gU($,J,{forceRefresh:!0}).catch((U)=>{throw new jP(U instanceof Error?U.message:b7)});await BJ8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new jP("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await fm({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:b7;throw new jP(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await uU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=_w$(F instanceof Error?F.message:String(F));throw U?new jP(N):F});await BJ8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function BJ8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=$n($),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 KE(K,ks6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var ks6=10485760,jP;var eL1=D(()=>{gW();I_0();B$0();KF0();L10();J7();jP=class jP extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Cs6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Ss6.test(Z))throw Error(`Invalid branch name: ${$}`)}function wg($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(vs6)])}async function xs6($,Z){let Q=$.var.studioContext,Y=tY(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=Cf(G?.metadata?.runtime);if(W)return W;let K=UR0(Z.virtualMcpMetadata),H=K==="cms"?await _L1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)D$0(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function fs6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await f7($.var.studioContext)}catch{return null}}function Jn($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function R50($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=A50(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=J0(Y);return vm(Y,J.id,X)}function ZO1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=nL$(Z);if(Y!==void 0)return $.json({error:Q},429,{...kZ,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof a6)return $.json({error:Q},409,kZ);let X=cW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,kZ)}return $.json({error:Q},502,kZ)}async function $O1($,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 wJ8($){try{let Z=await R50($),Q=await tL1(Z,$.get("vmClaim").branch);return $.json(Q,200,kZ)}catch(Z){return ZO1($,Z)}}function T50($,Z){let Y=(h_0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return h_0.set($,X),X.finally(()=>{if(h_0.get($)===X)h_0.delete($)}),Y}async function EQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,kZ);let Y=Q?.runner??Jn($);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",...kZ}})}}let L=await B.text(),O=Q?.redactRepoDir?ys6(L):L,w=B.headers.get("content-type")??"application/json";return new Response(O,{status:B.status,headers:{"content-type":w,...kZ}})};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 L=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${L}`},502)}}function ys6($){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 jJ8($,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 gs6($){return EJ8.includes($)}var Ss6,_s6=524288,LJ8=65536,vs6=1e4,OJ8=2000,bs6,h_0,kZ,EJ8,PJ8=()=>{let $=new Z1;$.use("/:virtualMcpId/:branch/*",bs6),$.post("/:virtualMcpId/:branch/write",(Q)=>EQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:wg(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>EQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:wg(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>EQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:wg(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>EQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:wg(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>EQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:wg(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>EQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:wg(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>EQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:wg(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 EQ(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 EQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>EQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>EQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!gs6(Y))return Q.json({error:`step must be one of: ${EJ8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await _L1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await fs6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,kZ);if(Y==="start"){let G=J0(Q.var.studioContext),W=Dd(X.virtualMcpMetadata);try{await WR0({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 EQ(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 qL(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 jX8(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 wJ8(Q);return Z(Q)});let Z=(Q)=>EQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(OJ8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return wJ8(Q);return EQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(OJ8)])})}),$.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 R50(Q),G=await oL1(J,Y.branch,X.base);return Q.json(G,200,kZ)}catch(X){return ZO1(Q,X)}return EQ(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,kZ);let Y=Jn(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return T50(X,async()=>{try{await vL1(W,Y,X);let K=A50(J,G);if(K)await DJ8(W,Y,X,K)}catch(K){if(K instanceof jP)return Q.json({error:K.message},403,kZ);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,kZ)}return EQ(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 T50(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,kZ);try{let G=await R50(Q);return await FJ8(G,Y.branch,J),Q.json({ok:!0},200,kZ)}catch(G){let W=cW(G)===409||G instanceof a6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,kZ)}});return T50(Y.claimName,()=>EQ(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 T50(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await R50(Q),H=W.base??await K.getDefaultBranch();return await g_0(K,Y.branch,H),Q.json({ok:!0},200,kZ)}catch(W){return ZO1(Q,W)}});let X=Jn(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return T50(J,async()=>{try{await vL1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,kZ)}return EQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/judge-review",a5({maxSize:_s6,onError:(Q)=>Q.json({error:"Payload too large"},413,kZ)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Jn(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,L]=zX8(F)&&N?[F,U]:X?await Promise.all([jJ8(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),jJ8(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await R50(Q);return Promise.all([tL1(w,Y.branch),oL1(w,Y.branch)])})();await _W(K,J0(K).id,"judging whether a change needs review");let O=await RX8(K,B,L,typeof H.language==="string"?H.language:void 0);return Q.json(O,200,kZ)}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,kZ);return Q.json({error:F},502,kZ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=Jn(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 $O1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",a5({maxSize:LJ8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=Jn(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=sL1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=aL1(J,W.resolveType);return $O1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",a5({maxSize:LJ8,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):Ld(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=sL1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!UJ8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=aL1(G,K.resolveType);return $O1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var zJ8=D(()=>{G8();BK();ep();CL1();Bd();LX8();nY();Od();OX8();ZG();jH();wX8();EX8();vZ1();N$0();qX8();J7();q5();rL1();NJ8();FR0();eL1();Ss6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bs6=M_0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=l0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=J0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{Cs6(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=d10({orgId:X.id,virtualMcpId:J,branch:G}),H=await hZ1(Q,G),F=uZ1(H,Y),U=DX8({userId:F,projectRef:K}),N=W.metadata??null,B=await xs6($,{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 L;try{L=await f7(Q)}catch{L=null}if(!L)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:L,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],runtime:B}),Z()});h_0=new Map;kZ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};EJ8=["clone","install","start"]});function AJ8($,Z,Q){let Y=QO1.get($);if(!Y)Y={pending:null,running:!1},QO1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)us6($,Y);return J}async function us6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await ls6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)QO1.delete($)}}async function ls6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Xn(Z,Q),W=await Z.listDecofileEntries(G,Y),K=iL1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let L=pL1(K,N),O=`${JSON.stringify(B,null,2)}
3728
3728
  `;await JJ8(Z.repo,O);let w=L[0]??`${x_0(Y)}/${gL1(N)}.json`;H.push({path:w,content:O});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:O});for(let E of L.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of pL1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await GJ8(Z,F.values(),X),{decofile:B,skipped:L}=L50(N);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:EH(Z.repo),branch:Q,packagePath:Y,blocks:L.map((O)=>O.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:cs6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof a6)||J>=hs6-1)throw N;await U$(L7(2000,200,J,2,0.5))}}}function cs6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return K91(Y,$.deps.coAuthor)}var hs6=3,QO1;var TJ8=D(()=>{kT0();k_0();i4();r$();J7();f_0();QO1=new Map});import{createHmac as RJ8,randomBytes as ms6,timingSafeEqual as ds6}from"crypto";function qJ8(){if(u_0)return u_0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return u_0=$?Buffer.from($):ms6(32),u_0}function YO1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+is6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=RJ8("sha256",qJ8()).update(Y).digest("base64url");return`${Y}.${X}`}function MJ8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(RJ8("sha256",qJ8()).update(Y).digest("base64url"));if(X.length!==J.length||!ds6(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 is6=21600000,u_0=null;var IJ8=D(()=>{s1()});function l_0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function ps6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=l_0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function VJ8($){let Z;try{Z=l_0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=ps6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=l_0(G),K=W&&l_0(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 Gn}from"zod";function ts6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&ns6.test($)}function vJ8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function q50($){let Z=$.get("decofileScope");return vm($.var.studioContext,Z.organizationId,Z.repository)}function M50($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof a6)return $.json({error:Q},409);let Y=cW(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 bJ8(){let $=new Z1;return $.use("/:virtualMcpId/:branch",_J8),$.use("/:virtualMcpId/:branch/*",_J8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await q50(Z),X=await WJ8(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(VJ8(X.decofile),200,{...J,"content-type":"application/json"});let G=YO1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(vJ8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return M50(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 q50(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 M50(Z,X)}}),$.patch("/:virtualMcpId/:branch",rs6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=ss6.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=O50(X.data)}catch(G){if(G instanceof w50)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{V_0(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(yL1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await q50(Z),W=await AJ8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:$n(Y)},J),K=YO1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:vJ8(Z)})}catch(G){return M50(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await q50(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(cW(W)!==409)throw W;await g_0(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(cW(G)===409)return Z.json({error:"merge-conflict"},409);if(cW(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 M50(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await q50(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(cW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return M50(Z,Y)}}),$}var ns6,kJ8=500,SJ8=1048576,CJ8=1024,os6=8388608,rs6,ss6,_J8;var xJ8=D(()=>{FR0();k_0();G8();BK();CL1();I_0();eL1();J7();TJ8();IJ8();rL1();f_0();jH();ns6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;rs6=a5({maxSize:os6,onError:($)=>$.json({error:"Payload too large"},413)}),ss6=Gn.object({set:Gn.record(Gn.string(),Gn.unknown()).optional(),delete:Gn.array(Gn.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=kJ8,{message:`Patch cannot touch more than ${kJ8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=SJ8),{message:`Each block must be at most ${SJ8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=CJ8),{message:`Each block key must be at most ${CJ8} characters`}),_J8=M_0(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(!ts6(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||!MJ8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await lJ(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(!Ld(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=A50(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 fJ8=($)=>{let Z=new Z1;if(Z.use("*",Sp),Z.use("*",WZ8),Z.route("/",JZ8($.voiceSessions)),Z.route("/",xC0()),Z.route("/",mZ8()),Z.route("/",kZ8()),Z.route("/",eY8()),Z.route("/",ZX8()),Z.route("/",iY8()),Z.route("/",sY8()),Z.route("/",nY8()),Z.route("/",T_0()),Z.route("/tools",KX8()),Z.route("/",JX8()),Z.route("/",AY8({kvStorage:$.kvStorage})),Z.route("/",PY8()),Z.route("/fs",fY8({getConnection:$.getNatsConnection})),Z.route("/sandbox",PJ8()),Z.route("/decofile",bJ8()),Z.route("/",cY8()),Z.route("/",gY8()),Z.route("/deco-sites",yC0()),Z.route("/hosting",jZ8()),Z.route("/monitor",qZ8()),Z.route("/sso",kC0()),Z.route("/",R_0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",BZ8()),$.mountDevAssets)Z.route("/dev-assets",lC0({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 AL1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",r48()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of AL1)Z.route(Q,uY8());return Z.route("/mcp",VI0()),Z.route("/mcp/self",E_0()),Z.route("/mcp",CI0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var yJ8=D(()=>{G8();GZ8();KZ8();jC0();DZ8();oB1();EZ8();MZ8();cC0();UP();dB1();$D1();zY8();TY8();yY8();hY8();Y40();xB1();_I0();zL1();lY8();mY8();pY8();tY8();qL1();$X8();QX8();GX8();ML1();HX8();IL1();kI0();zJ8();xJ8()});import{z as jg}from"zod";class XO1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new uJ8.Kvm(c_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:c_0.StorageType.Memory,ttl:lJ8.nanos(hD),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"?hJ8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await U$(200);continue}let G=gJ8.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 U$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,gJ8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new R1(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"?hJ8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var c_0,uJ8,lJ8,gJ8,hJ8;var cJ8=D(()=>{kJ();rU();r$();c_0=C(IK(),1),uJ8=C(PA(),1),lJ8=C(gP(),1),gJ8=new TextEncoder,hJ8=jg.discriminatedUnion("state",[jg.object({state:jg.literal("ready"),agentId:jg.string()}),jg.object({state:jg.literal("creating"),expiresAt:jg.number()})])});import{z as Wn}from"zod";function as6($){return{model:$.model,instructions:`${iM$}
3729
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class JO1{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:as6({...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:Wn.object({session:Wn.object({id:Wn.string().min(1)}),transport:Wn.object({type:Wn.literal("webrtc"),sdp:Wn.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var mJ8=D(()=>{rU()});var dJ8;var iJ8=D(()=>{dJ8=[{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 GO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:mM$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:dJ8.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:hD/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 pJ8=D(()=>{rU();iJ8()});import{z as KJ}from"zod";import{createHash as es6,createHmac as $a6}from"crypto";class m_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=es6("sha256").update(JSON.stringify(GO1($))).digest("hex"),this.conversationKey=$a6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new m_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=KJ.object({agents:KJ.array(KJ.object({agent_id:KJ.string(),name:KJ.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 KJ.object({platform_settings:KJ.object({auth:KJ.object({enable_auth:KJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...GO1(this.config)},AbortSignal.timeout(15000));return KJ.object({agent_id:KJ.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 KJ.object({token:KJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return KJ.object({token:KJ.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 nJ8=D(()=>{pJ8()});import{createHmac as Za6,timingSafeEqual as Qa6}from"crypto";import{z as Kn}from"zod";function oJ8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Za6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function rJ8($,Z){let Q=Buffer.from(JSON.stringify(tJ8.parse($))).toString("base64url");return`${Q}.${oJ8(Q,Z)}`}function sJ8($,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(oJ8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Qa6(W,G))return null;try{let K=tJ8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+hD)return null;return K.data}catch{return null}}var tJ8;var aJ8=D(()=>{rU();tJ8=Kn.object({sessionId:Kn.string().uuid(),organizationId:Kn.string().min(1).max(256),userId:Kn.string().min(1).max(256),threadId:Kn.string().min(1).max(256),expiresAt:Kn.number().int().positive()})});import{z as WO1}from"zod";function eJ8($,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 KO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var KO1;var $G8=D(()=>{KO1=WO1.object({provider:WO1.enum(["elevenlabs","openai"]),model:WO1.string().trim().min(1).max(128)})});import{createHash as Ya6}from"crypto";import{z as Hn}from"zod";function Fn($){return`user.${Ya6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class FO1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new ZG8.Kvm(i_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:i_0.StorageType.Memory,ttl:QG8.nanos(hD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(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=eJ8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+hD},W=rJ8(G,this.deps.secret),K=await this.kv(),H=Fn(G),F=await K.get(H),U=F?.operation==="PUT"?d_0.parse(F.json()):null,N=HO1.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 R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let L=await J.createSession({language:Q,model:X.model,safetyIdentifier:Fn($)});return{token:W,...L,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=sJ8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=Fn(Q),J=await Y.get(X),G=J?.operation==="PUT"?d_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,HO1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(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=Fn(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?d_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,HO1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(Fn($));if(Q?.operation==="PUT"&&d_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Fn($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var i_0,ZG8,QG8,d_0,HO1;var YG8=D(()=>{kJ();rU();aJ8();$G8();i_0=C(IK(),1),ZG8=C(PA(),1),QG8=C(gP(),1),d_0=Hn.object({sessionId:Hn.string().uuid(),expiresAt:Hn.number(),connected:Hn.boolean().optional(),conversation:KO1.optional(),characters:Hn.number().int().nonnegative(),requests:Hn.number().int().nonnegative()}),HO1=new TextEncoder});function Xa6($){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 Ja6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},XG8=()=>{let $=new Z1;return $.use("*",Ja6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await LG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Xa6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var JG8=D(()=>{G8();s1();AS0()});import{z as y1}from"zod";function CN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function La6($){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 Oa6($,Z,Q){try{return JSON.parse($)}catch{throw new KG8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function wa6($){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:Oa6(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 ja6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?GU(Q.function.parameters):GU({type:"object",properties:{}});return[Q.function.name,p$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Ea6($){if(!$)return;return{openai:{response_format:$}}}function Pa6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function GG8($,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 WG8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Ga6=256,Wa6,Ka6,Ha6,Fa6,Ua6,Na6,Ba6,Da6,KG8,HG8,FG8;var UG8=D(()=>{n4();G8();ep();iH();Wa6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Ka6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Ha6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Ka6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Fa6=y1.object({type:y1.literal("text")}),Ua6=y1.object({type:y1.literal("json_object")}),Na6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),Ba6=y1.union([Fa6,Ua6,Na6]),Da6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Ha6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Wa6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:Ba6.optional(),user:y1.string().optional()});KG8=class KG8 extends Error{constructor($){super($);this.name="MessageConversionError"}};HG8=new Z1;HG8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(CN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(CN("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(CN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Da6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(CN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=La6(J.model);if(!G)return $.json(CN("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)=>vz(E.providerId));if(!j)return $.json(CN("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(CN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=wa6(J.messages),N=J.tools?ja6(J.tools):void 0,B=Ea6(J.response_format),L=Pa6(),O=Math.floor(Date.now()/1000);if(J.stream)return qL($,async(w)=>{let j=GG8(F,U,N,J,B,$.req.raw.signal);try{let E=bd(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:L,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:L,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>=Ga6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,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:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:WG8(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=GG8(F,U,N,J,B,$.req.raw.signal),j=await jE(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:L,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:WG8(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(CN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(CN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(CN(X.message,"server_error"),500)}});FG8=HG8});function za6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function NG8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=l0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!zZ(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||C9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(vA(U)!==J)continue;if(!za6(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 BG8=D(()=>{G8();K3()});var LG8;var DG8=D(()=>{LG8={name:"decocms",version:"4.460.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function Ra6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Ta6}}var OG8,Ta6="https://ph.studio.decocms.com",wG8;var jG8=D(()=>{G8();es();Fy();k9();s1();PB1();DG8();OG8=new Z1;OG8.get("/",($)=>{let Z={version:LG8.version,theme:I9$(),...YH().logo&&{logo:YH().logo},...rD()&&{internalUrl:an1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:i58(),posthog:Ra6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:KF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});wG8=OG8});function Eg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function UO1($){return(Eg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function EG8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Eg($))}&sz=${Z}`}function qa6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function PG8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=qa6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as A$}from"zod";var Ma6,zG8;var AG8=D(()=>{Ma6=A$.object({check_id:A$.string(),title:A$.string(),description:A$.string().optional(),impact:A$.string().optional(),why:A$.string().optional(),category:A$.string(),severity:A$.string(),value_band:A$.string().optional(),value_driver:A$.string().optional(),controllability:A$.string().optional(),pages:A$.array(A$.string()),tasks:A$.array(A$.string()),evidence:A$.string(),sample_scope:A$.string().optional(),sources:A$.array(A$.string())}),zG8=A$.object({domain:A$.string(),brand:A$.string(),favicon:A$.string().optional(),scanned_at:A$.string().nullable(),lang:A$.string(),score:A$.number().nullable(),band:A$.string().nullable(),totals:A$.object({measured:A$.number(),registry_total:A$.number(),passed:A$.number(),failed:A$.number(),blocked:A$.number()}),buckets:A$.array(A$.object({id:A$.enum(["critical","important","worth"]),label:A$.string(),items:A$.array(Ma6)})),passing:A$.object({count:A$.number(),items:A$.array(A$.object({check_id:A$.string(),title:A$.string()}))}),not_measured:A$.object({count:A$.number(),groups:A$.array(A$.object({reason:A$.string(),label:A$.string(),count:A$.number(),checks:A$.array(A$.string())}))}),categories:A$.array(A$.object({key:A$.string(),label:A$.string(),score:A$.number().nullable(),band:A$.string().nullable(),pass:A$.number(),fail:A$.number()})),screenshots:A$.array(A$.object({url:A$.string(),page_type:A$.string().optional(),viewport:A$.enum(["desktop","mobile"]),image_url:A$.string()}))})});function TG8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${vW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function p_0($,Z={}){let Q=await fetch(TG8($,"",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 zG8.parse(await Q.json())}async function RG8($,Z={}){let Q=await fetch(TG8($,".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 NO1=D(()=>{AG8();JD()});import{join as qG8}from"path";async function Va6($){try{let Z=await p_0($,{signal:AbortSignal.timeout(Ia6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||UO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function EG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function ka6($,Z){let Q=Eg($),Y=Z?.brand?.trim()||UO1(Q),X=EG8(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=PG8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${EG(W)}</title>`,`<meta name="description" content="${EG(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="${EG(W)}" />`,`<meta property="og:description" content="${EG(K)}" />`,`<meta property="og:url" content="${EG(G)}" />`,`<meta property="og:image" content="${EG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${EG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${EG(W)}" />`,`<meta name="twitter:description" content="${EG(K)}" />`,`<meta name="twitter:image" content="${EG(H)}" />`,`<meta name="twitter:image:alt" content="${EG(F)}" />`,`<link rel="canonical" href="${EG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${EG(G)}.md" />`,`<link rel="icon" href="${EG(X)}" sizes="any" />`].join(`
3729
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class JO1{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:as6({...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:Wn.object({session:Wn.object({id:Wn.string().min(1)}),transport:Wn.object({type:Wn.literal("webrtc"),sdp:Wn.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var mJ8=D(()=>{rU()});var dJ8;var iJ8=D(()=>{dJ8=[{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 GO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:mM$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:dJ8.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:hD/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 pJ8=D(()=>{rU();iJ8()});import{z as KJ}from"zod";import{createHash as es6,createHmac as $a6}from"crypto";class m_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=es6("sha256").update(JSON.stringify(GO1($))).digest("hex"),this.conversationKey=$a6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new m_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=KJ.object({agents:KJ.array(KJ.object({agent_id:KJ.string(),name:KJ.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 KJ.object({platform_settings:KJ.object({auth:KJ.object({enable_auth:KJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...GO1(this.config)},AbortSignal.timeout(15000));return KJ.object({agent_id:KJ.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 KJ.object({token:KJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return KJ.object({token:KJ.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 nJ8=D(()=>{pJ8()});import{createHmac as Za6,timingSafeEqual as Qa6}from"crypto";import{z as Kn}from"zod";function oJ8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Za6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function rJ8($,Z){let Q=Buffer.from(JSON.stringify(tJ8.parse($))).toString("base64url");return`${Q}.${oJ8(Q,Z)}`}function sJ8($,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(oJ8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Qa6(W,G))return null;try{let K=tJ8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+hD)return null;return K.data}catch{return null}}var tJ8;var aJ8=D(()=>{rU();tJ8=Kn.object({sessionId:Kn.string().uuid(),organizationId:Kn.string().min(1).max(256),userId:Kn.string().min(1).max(256),threadId:Kn.string().min(1).max(256),expiresAt:Kn.number().int().positive()})});import{z as WO1}from"zod";function eJ8($,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 KO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var KO1;var $G8=D(()=>{KO1=WO1.object({provider:WO1.enum(["elevenlabs","openai"]),model:WO1.string().trim().min(1).max(128)})});import{createHash as Ya6}from"crypto";import{z as Hn}from"zod";function Fn($){return`user.${Ya6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class FO1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new ZG8.Kvm(i_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:i_0.StorageType.Memory,ttl:QG8.nanos(hD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(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=eJ8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+hD},W=rJ8(G,this.deps.secret),K=await this.kv(),H=Fn(G),F=await K.get(H),U=F?.operation==="PUT"?d_0.parse(F.json()):null,N=HO1.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 R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let L=await J.createSession({language:Q,model:X.model,safetyIdentifier:Fn($)});return{token:W,...L,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=sJ8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=Fn(Q),J=await Y.get(X),G=J?.operation==="PUT"?d_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,HO1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(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=Fn(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?d_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,HO1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(Fn($));if(Q?.operation==="PUT"&&d_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Fn($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var i_0,ZG8,QG8,d_0,HO1;var YG8=D(()=>{kJ();rU();aJ8();$G8();i_0=C(IK(),1),ZG8=C(PA(),1),QG8=C(gP(),1),d_0=Hn.object({sessionId:Hn.string().uuid(),expiresAt:Hn.number(),connected:Hn.boolean().optional(),conversation:KO1.optional(),characters:Hn.number().int().nonnegative(),requests:Hn.number().int().nonnegative()}),HO1=new TextEncoder});function Xa6($){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 Ja6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},XG8=()=>{let $=new Z1;return $.use("*",Ja6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await LG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Xa6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var JG8=D(()=>{G8();s1();AS0()});import{z as y1}from"zod";function CN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function La6($){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 Oa6($,Z,Q){try{return JSON.parse($)}catch{throw new KG8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function wa6($){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:Oa6(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 ja6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?GU(Q.function.parameters):GU({type:"object",properties:{}});return[Q.function.name,p$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Ea6($){if(!$)return;return{openai:{response_format:$}}}function Pa6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function GG8($,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 WG8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Ga6=256,Wa6,Ka6,Ha6,Fa6,Ua6,Na6,Ba6,Da6,KG8,HG8,FG8;var UG8=D(()=>{n4();G8();ep();iH();Wa6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Ka6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Ha6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Ka6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Fa6=y1.object({type:y1.literal("text")}),Ua6=y1.object({type:y1.literal("json_object")}),Na6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),Ba6=y1.union([Fa6,Ua6,Na6]),Da6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Ha6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Wa6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:Ba6.optional(),user:y1.string().optional()});KG8=class KG8 extends Error{constructor($){super($);this.name="MessageConversionError"}};HG8=new Z1;HG8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(CN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(CN("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(CN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Da6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(CN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=La6(J.model);if(!G)return $.json(CN("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)=>vz(E.providerId));if(!j)return $.json(CN("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(CN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=wa6(J.messages),N=J.tools?ja6(J.tools):void 0,B=Ea6(J.response_format),L=Pa6(),O=Math.floor(Date.now()/1000);if(J.stream)return qL($,async(w)=>{let j=GG8(F,U,N,J,B,$.req.raw.signal);try{let E=bd(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:L,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:L,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>=Ga6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,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:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:WG8(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=GG8(F,U,N,J,B,$.req.raw.signal),j=await jE(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:L,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:WG8(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(CN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(CN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(CN(X.message,"server_error"),500)}});FG8=HG8});function za6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function NG8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=l0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!zZ(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||C9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(vA(U)!==J)continue;if(!za6(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 BG8=D(()=>{G8();K3()});var LG8;var DG8=D(()=>{LG8={name:"decocms",version:"4.460.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function Ra6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Ta6}}var OG8,Ta6="https://ph.studio.decocms.com",wG8;var jG8=D(()=>{G8();es();Fy();k9();s1();PB1();DG8();OG8=new Z1;OG8.get("/",($)=>{let Z={version:LG8.version,theme:I9$(),...YH().logo&&{logo:YH().logo},...rD()&&{internalUrl:an1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:i58(),posthog:Ra6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:KF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});wG8=OG8});function Eg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function UO1($){return(Eg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function EG8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Eg($))}&sz=${Z}`}function qa6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function PG8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=qa6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as A$}from"zod";var Ma6,zG8;var AG8=D(()=>{Ma6=A$.object({check_id:A$.string(),title:A$.string(),description:A$.string().optional(),impact:A$.string().optional(),why:A$.string().optional(),category:A$.string(),severity:A$.string(),value_band:A$.string().optional(),value_driver:A$.string().optional(),controllability:A$.string().optional(),pages:A$.array(A$.string()),tasks:A$.array(A$.string()),evidence:A$.string(),sample_scope:A$.string().optional(),sources:A$.array(A$.string())}),zG8=A$.object({domain:A$.string(),brand:A$.string(),favicon:A$.string().optional(),scanned_at:A$.string().nullable(),lang:A$.string(),score:A$.number().nullable(),band:A$.string().nullable(),totals:A$.object({measured:A$.number(),registry_total:A$.number(),passed:A$.number(),failed:A$.number(),blocked:A$.number()}),buckets:A$.array(A$.object({id:A$.enum(["critical","important","worth"]),label:A$.string(),items:A$.array(Ma6)})),passing:A$.object({count:A$.number(),items:A$.array(A$.object({check_id:A$.string(),title:A$.string()}))}),not_measured:A$.object({count:A$.number(),groups:A$.array(A$.object({reason:A$.string(),label:A$.string(),count:A$.number(),checks:A$.array(A$.string())}))}),categories:A$.array(A$.object({key:A$.string(),label:A$.string(),score:A$.number().nullable(),band:A$.string().nullable(),pass:A$.number(),fail:A$.number()})),screenshots:A$.array(A$.object({url:A$.string(),page_type:A$.string().optional(),viewport:A$.enum(["desktop","mobile"]),image_url:A$.string()}))})});function TG8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${vW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function p_0($,Z={}){let Q=await fetch(TG8($,"",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 zG8.parse(await Q.json())}async function RG8($,Z={}){let Q=await fetch(TG8($,".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 NO1=D(()=>{AG8();JD()});import{join as qG8}from"path";async function Va6($){try{let Z=await p_0($,{signal:AbortSignal.timeout(Ia6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||UO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function EG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function ka6($,Z){let Q=Eg($),Y=Z?.brand?.trim()||UO1(Q),X=EG8(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=PG8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${EG(W)}</title>`,`<meta name="description" content="${EG(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="${EG(W)}" />`,`<meta property="og:description" content="${EG(K)}" />`,`<meta property="og:url" content="${EG(G)}" />`,`<meta property="og:image" content="${EG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${EG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${EG(W)}" />`,`<meta name="twitter:description" content="${EG(K)}" />`,`<meta name="twitter:image" content="${EG(H)}" />`,`<meta name="twitter:image:alt" content="${EG(F)}" />`,`<link rel="canonical" href="${EG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${EG(G)}.md" />`,`<link rel="icon" href="${EG(X)}" sizes="any" />`].join(`
3730
3730
  `)}function Sa6($,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}
3731
3731
  </head>`)}function MG8($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Eg(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(qG8($,"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(`${vW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(Ca6)}),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=Eg(Q.req.param("file").replace(/\.md$/,""));try{let X=await RG8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(_a6)});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=$?qG8($,"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 Va6(Eg(Y)),K=ka6(Y,W);return Q.html(Sa6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Ia6=2500,Ca6=1e4,_a6=1e4;var IG8=D(()=>{G8();JD();NO1();s1()});function n_0($,Z){return fetch(`${vW({})}${$}`,Z)}async function va6($,Z){let Q=await p_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function xa6($){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 ba6,IL,VG8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},kG8;var SG8=D(()=>{G8();U3();JD();NO1();ba6=new Set(["complete","errored","terminated","unknown"]);IL=new Z1;IL.use("*",async($,Z)=>{let Q=await x8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});IL.use("/link-token/*",VG8);IL.use("/suggest",VG8);IL.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 va6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});IL.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}=xa6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await n_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Fj({})}`},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)}});IL.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await n_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${Fj({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:ba6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});IL.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await n_0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});IL.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await n_0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});kG8=IL});var fa6=1048576,BO1;var CG8=D(()=>{G8();BK();s1();JB1();BO1=new Z1;BO1.post("/webhook",a5({maxSize:fa6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=O0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!X58(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=J58(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await G58(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as ya6}from"crypto";function ua6($,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 ya6(Buffer.from(X),Buffer.from(Y))}function la6($,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 _G8($){let Z=new Z1;return Z.post("/webhook",a5({maxSize:ga6,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(!ua6(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"&&!ha6.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 G$0().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=la6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await ca6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function ca6($,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 zf$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var ga6=5242880,ha6;var vG8=D(()=>{G8();BK();ZG();g7();ha6=new Set(["check_suite","issue_comment"])});import{DBOS as LO1,SchedulerMode as ma6}from"@dbos-inc/dbos-sdk";async function ia6(){try{return await pa6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function pa6(){if(!J$0())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (zZ1(),PZ1)),Promise.resolve().then(() => (EZ1(),jZ1))]),Q=await G$0(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=L8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=_R$({sandboxes:J,pools:G,records:await vR$(X,J,G),legacyPools:cT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await bR$(K,HF0(X,new RX(O0().encryptionKey)),{now:W,orgFsLifetimeMs:iT0}),U=0,N=0,B=0;for(let L of H)try{let O=await Y.pushCredentials(L);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 na6($,Z){let Q=await LO1.runStep(ia6,{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 bG8(){if(DO1)return;if(!O0().agentSandboxEnabled||!J$0())return;DO1=LO1.registerWorkflow(na6,{name:"sandboxCredentialPushWorkflow"}),LO1.registerScheduled(DO1,{name:"sandboxCredentialPushWorkflow",crontab:da6,mode:ma6.ExactlyOncePerIntervalWhenActive})}var da6="1-59/10 * * * *",DO1=null;var xG8=D(()=>{cG();TO();W61();pT0();mT0();ZG();s1()});function fG8($){let Z=new DL($.db,new RX($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=Vb$(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 oQ(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 yG8=D(()=>{G8();TO();mQ1();RE();I60()});import{DBOS as EP,SchedulerMode as ta6}from"@dbos-inc/dbos-sdk";function gG8($){wO1=$}function EO1(){if(!wO1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return wO1}function PO1(){let $=EO1();return new DL($.db,new RX($.encryptionKey))}async function ea6($){try{let Z=await PO1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await uH(EO1().db,Z.organizationId);if(!Q)return{integrationId:$,started:0};if((await Q.storage.jiraIntegrations.listAutomations(Z.organizationId)).length===0)return{integrationId:$,started:0};let X=new oQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${ra6}m"`,W=0,K;for(let H=0;H<sa6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await HU1(Q,Z,{issueId:U.id,now:Date.now()})==="started")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,started:W}}catch(Z){return{integrationId:$,started:0,error:Z instanceof Error?Z.message:String(Z)}}}async function $e6($,Z){let Q=await EP.runStep(()=>PO1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>EP.runStep(()=>ea6(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.started>0)console.log(`[jira-trigger] integration ${X.integrationId} started ${X.started} run(s) the webhook missed`)}async function Ze6($,Z){try{let Q=await PO1().getById($);if(!Q?.enabled)return"disabled";let Y=await uH(EO1().db,Q.organizationId);if(!Y)return"disabled";let X=await HU1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="started")console.log(`[jira-trigger] started a run for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no run`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function Qe6($,Z){await EP.sleep(qS0()+aa6),await EP.runStep(()=>Ze6($,Z),{name:"settleJiraMove"})}async function hG8($,Z){if(!jO1)throw Error("[jira-trigger] settle workflow is not registered");await EP.startWorkflow(jO1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function uG8(){if(OO1)return;jO1=EP.registerWorkflow(Qe6,{name:"jiraSettleWorkflow"}),OO1=EP.registerWorkflow($e6,{name:"jiraTriggerSweepWorkflow"}),EP.registerScheduled(OO1,{name:"jiraTriggerSweepWorkflow",crontab:oa6,mode:ta6.ExactlyOncePerIntervalWhenActive})}var oa6="7-59/10 * * * *",ra6=35,sa6=5,aa6=5000,wO1=null,jO1=null,OO1=null;var zO1=D(()=>{TO();I60();od();RE();WU1();MS0()});function lG8($){let Z=new DL($.db,new RX($.encryptionKey));async function Q(X,J){let G=j18(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await hG8(W.id,G)}let Y=new Z1;return Y.post("/webhook/:secret",a5({maxSize:Ye6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var Ye6=1048576;var cG8=D(()=>{G8();BK();TO();zO1();MS0();I60()});function mG8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var dG8,Xe6,Je6,iG8;var pG8=D(()=>{G8();kJ();Yi();Bm();dG8=new Z1,Xe6=["range","if-none-match","if-modified-since"],Je6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];dG8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(kp($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new R1(401,{message:"Authentication required"})}if(!Q)throw new R1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new R1(400,{message:"Missing file key"});let X=await x80(Y,Z);if(!X)throw new R1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&fW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new R1(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 mG8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of Xe6){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 R1(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 R1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Je6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),mG8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});iG8=dG8});var I50=b((Pg)=>{var Ge6=Pg&&Pg.__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]}),We6=Pg&&Pg.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Ge6(Z,$,Q)};Object.defineProperty(Pg,"__esModule",{value:!0});We6(IG(),Pg)});var oG8=b((nG8)=>{Object.defineProperty(nG8,"__esModule",{value:!0});nG8.version=void 0;nG8.version="3.4.0"});var aG8=b((_N)=>{var Ke6=_N&&_N.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(_N,"__esModule",{value:!0});_N.NodeTransport=_N.VERSION=void 0;_N.nodeResolveHost=De6;var e5=I50(),He6=M0("net"),AO1=M0("tls"),Fe6=M0("path"),rG8=M0("fs"),Ue6=Ke6(M0("dns")),Ne6=oG8();_N.VERSION=Ne6.version;var Be6="nats.js";class sG8{socket;version;lang;yields=[];signal=(0,e5.deferred)();closedNotification=(0,e5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=Be6,this.version=_N.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,e5.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 e5.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 e5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new e5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,e5.deferred)(),Q,Y=(0,He6.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,e5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=e5.DataBuffer.concat(...this.yields),X=(0,e5.extractProtocolMessage)(Y);if(X!=="")try{let J=e5.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,e5.deferred)();try{if($=(0,Fe6.resolve)($),!(0,rG8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,rG8.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,e5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new e5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,e5.deferred)();try{let X=(0,AO1.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 e5.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,e5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new e5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,e5.deferred)();try{let Y=(0,AO1.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 e5.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,e5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,e5.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 AO1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,e5.render)($)}`);let Z=(0,e5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,e5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,e5.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}}_N.NodeTransport=sG8;function De6($){let Z=(0,e5.deferred)();return Ue6.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 Y38=b((Q38)=>{Object.defineProperty(Q38,"__esModule",{value:!0});Q38.connect=Le6;var eG8=aG8(),$38=I50(),Z38=I50();function Le6($={}){if((0,Z38.hasWsProtocol)($))return Promise.reject(Z38.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,$38.setTransportFactory)({factory:()=>{return new eG8.NodeTransport},dnsResolveFn:eG8.nodeResolveHost}),$38.NatsConnectionImpl.connect($)}});var X38=b((VL)=>{var we6=VL&&VL.__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]}),je6=VL&&VL.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))we6(Z,$,Q)};Object.defineProperty(VL,"__esModule",{value:!0});VL.connect=void 0;var Ee6=Y38();Object.defineProperty(VL,"connect",{enumerable:!0,get:function(){return Ee6.connect}});je6(I50(),VL)});function K38($){let Z=$?.connectFn??Te6,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 L=0;while(!J)try{Q=await Z({servers:N,timeout:Ae6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${L} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{L++;let O=L7(ze6,Pe6,L-1,2,0.5);await U$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let L=B?.creds?J38.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,L).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=W38.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 Te6($){return G38.connect($)}var J38,G38,W38,Pe6=100,ze6=3000,Ae6=3000;var H38=D(()=>{r$();J38=C(gP(),1),G38=C(X38(),1),W38=C(IK(),1)});function t_0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,Y=$?.updateRecencyOnGet??!1,X=new Map;function J(){if(X.size<=Q)return;let G=Date.now();for(let[W,K]of X)if(K.expiresAt<=G)X.delete(W);while(X.size>Q){let W=X.keys().next().value;if(W===void 0)break;X.delete(W)}}return{get(G){let W=X.get(G);if(!W)return;if(W.expiresAt<=Date.now()){X.delete(G);return}if(Y)X.delete(G),X.set(G,W);return W.value},set(G,W){X.delete(G),X.set(G,{value:W,expiresAt:Date.now()+Z}),J()},delete(G){X.delete(G)},clear(){X.clear()},size(){return X.size}}}function o_0($,Z){return`${$}.${Z}`}class TO1{cache;constructor($){this.cache=t_0({ttlMs:$?.ttlMs??Re6,maxSize:$?.maxSize??qe6})}async get($,Z){return this.cache.get(o_0($,Z))??null}async set($,Z,Q){this.cache.set(o_0($,Z),Q)}async invalidate($,Z){this.cache.delete(o_0($,Z)),this.cache.delete(o_0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Re6=600000,qe6=5000;var F38=()=>{};function r_0($,Z){return`${$}:${Z}`}function RO1($){let Z=t_0({ttlMs:$?.ttlMs??Me6,maxSize:$?.maxSize??Ie6}),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(U38,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(r_0(K,H))},set(K,H,F){Z.set(r_0(K,H),F)},invalidate(K,H){Z.delete(r_0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(U38),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(r_0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var U38="studio.ai-provider-keys.invalidate",Me6=30000,Ie6=5000;var N38=()=>{};class qO1{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 B38=($)=>{let Z;return()=>Z??=$()},MO1,IO1;var D38=D(()=>{S6();MO1=B38(()=>Q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),IO1=B38(()=>Q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function be6($=w38){return{name:GN,subjects:[`${BJ1}.>`],storage:JF.StorageType.File,max_age:Se6,max_bytes:_e6,max_msgs_per_subject:ve6,discard:JF.DiscardPolicy.Old,retention:JF.RetentionPolicy.Limits,duplicate_window:Ce6,num_replicas:$}}class j38{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 L38($){let Z=O38.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function ge6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,ke6().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 he6($,Z){return $.info?.cluster?Z:1}function ue6($){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 VO1{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=be6(X);try{await Y.streams.info(GN),await Y.streams.update(GN,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(GN,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(GN),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await JF.jetstreamManager($),X=he6($,w38);try{await Z(Y,X)}catch(J){if(X<=1||!ue6(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:Di});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=ge6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=jh$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=LJ1(H,{runId:Z}),N=performance.now()-F;MO1().record(N),IO1().add(1,{"org.id":Y??"unknown"}),ye6?.record(N,U.reduce((B,L)=>B+L.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?L38(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:L}=await H.read();if(B)break;if(K(L),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(),fe6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await E8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:L38(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Di}),!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=LJ1(Z,{runId:$,dedup:Q});MO1().record(performance.now()-X),IO1().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=wh$({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"?JF.DeliverPolicy.New:JF.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=_E($),W;try{W=await E8(async()=>{return(await Y.consumers.get(GN,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Di})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=rM0({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(pM0()).pipeThrough(nM0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,L=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",L,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:w,value:j}=await F.read();if(w){L(),O.close();return}let E=j;if(E.kind==="done"){if(J){L(),O.close();return}continue}O.enqueue(E.chunk);return}},cancel(){L()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(GN,{filter:_E($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var JF,O38,Ve6=($)=>{let Z;return()=>Z??=$()},ke6,Se6=86400000000000,Ce6=120000000000,_e6=4294967296,w38,ve6=500000,xe6,fe6,ye6;var E38=D(()=>{r$();OJ1();sM0();tM0();S6();D38();JF=C(IK(),1),O38=C(gP(),1),ke6=Ve6(()=>Q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),w38=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);xe6=process.env.STREAM_ENCODE_TRACE==="1",fe6=process.env.DECOPILOT_STREAM_TRACE==="1";ye6=xe6?new j38:null});function s_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,VF(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 P38=D(()=>{p8()});class kO1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function le6($,Z,Q={}){let Y=$.startsWith("thread:")?bH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function SO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await oU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await FE($,{threadId:X,runBranch:G?.branch}),K=await U10($,Q,Y61(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=le6(W,await NR0($,X),{flat:_f(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 q3(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 z38=D(()=>{J7();nY();g7()});async function A38($,Z,Q){let Y=Z.organizationId;if(!QJ(Z))return!1;if(!Jy(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=bU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await Q5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),w8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var T38=D(()=>{I4();eY();sd();lH();T9()});function te6($){return $ instanceof dX}function R38($,Z){return Z-$>=pe6}class CO1{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??ce6;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??de6,Q=this.options.itemIntervalMs??me6,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()-yQ1),WX1);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()-ne6));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 XX1(this.taskBoard,X,Y),await JX1(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!==$$.progress||QJ(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await SO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!R38(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:$$.progress,to:$$.review,reason:H}}).catch(()=>{}),w8(J,F),await cH(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!==$$.progress||G.assigneeId!==R8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await mH(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),te6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+ie6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==$$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),w8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!R38(ED(Q,Z.reviewCycleStartedAt),Date.now()))return;await cH($,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(!QJ(Y))return!1;let X=Y.assigneeId===R8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await SO1(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 $i(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 A38(G,Y,W))return!0;if(await Gu$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!$X1(W))return!1;return await ad(G,Y,{previewMatchesHead:ZX1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await VE($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var ce6=60000,me6=300000,de6=50,ie6=60000,pe6=900000,ne6=120000;var q38=D(()=>{I4();YM0();z38();XN();n80();lH();T38();T9();lW();KX1();g7();U80();ed()});import{readdir as oe6,rm as a_0}from"fs/promises";import{join as e_0}from"path";async function $v0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-re6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await zg($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await M38($,X,Z);else if(!X.startsWith(".")){let J=e_0($,X),G=await zg(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await M38(J,K,Z)}if((await zg(J)).length===0)await a_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function M38($,Z,Q){let Y=0,X=e_0($,Z),J=await zg(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=e_0(X,W),H=await zg(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=e_0(K,U);await a_0(B,{recursive:!0,force:!0}),Y++}}if((await zg(K)).length===0)await a_0(K,{recursive:!0,force:!0})}if((await zg(X)).length===0)await a_0(X,{recursive:!0,force:!0});return Y}async function zg($){try{return(await oe6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var re6=30;var _O1=()=>{};import{DBOS as vO1,SchedulerMode as se6}from"@dbos-inc/dbos-sdk";async function ee6(){let $=[EK(),Sg(),hN()],Z=0;for(let Q of $)try{Z+=await $v0(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 $05($,Z){await vO1.runStep(()=>ee6(),{name:"monitoringRetention"})}function V38(){if(I38)return;I38=!0;let $=vO1.registerWorkflow($05,{name:"monitoringRetentionWorkflow"});vO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:ae6,mode:se6.ExactlyOncePerIntervalWhenActive})}var ae6="23 4 * * *",I38=!1;var k38=D(()=>{d3();_O1()});function S38($){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 rQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await SA($.db,Z,Y.role);return X.boundAuth=sN1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new B2(Q,void 0,X.boundAuth,Y.role,"self"),IE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var C38=D(()=>{DW();_U()});function Z05(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Q05(){return{services:Z05(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function X05(){for(let $ of Y05)$()}function _38($){let Z=[...bO1.logs,$];bO1={...bO1,logs:Z.length>500?Z.slice(-500):Z},X05()}function xO1(){return J05}var bO1,Y05,J05=!1;var fO1=D(()=>{bO1=Q05(),Y05=new Set});import{EventEmitter as G05}from"events";var yO1;var v38=D(()=>{fO1();yO1=new G05;yO1.on("request",($)=>{_38($)})});function b38(){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=Un(N.params.name),L=N.params.arguments||{},O=Object.keys(L).map((j)=>Un(j)),w=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${K9.tool}${B}${K9.dim}(${w})${K9.reset}`}else if(N.method)J=`${K9.dim}${Un(N.method)}${K9.reset}`}}catch{}}let W=Un(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${K9.mcp}${Un(F.slice(0,12))}\u2026${K9.reset}`}else if(X==="/mcp")W=`${K9.mcp}/mcp${K9.reset}`;else if(X==="/mcp/registry")W=`${K9.mcp}/mcp/registry${K9.reset}`;let K=K05(Y),H=G?"\u25C0":"\u2190";if(!xO1())console.log(`${K9.dim}${H}${K9.reset} ${K}${Y}${K9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=W05(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,L=G?"\u25B6":"\u2192";if(!xO1())console.log(`${K9.dim}${L}${K9.reset} ${K}${Y}${K9.reset} ${W}${J?` ${J}`:""} ${N}${U}${K9.reset} ${K9.duration}${B}${K9.reset}`);yO1.emit("request",{method:Y,path:Un(X),status:U,duration:F,timestamp:new Date})}}}var K9,W05=($)=>{if($>=500)return K9.serverError;if($>=400)return K9.clientError;if($>=300)return K9.redirect;return K9.ok},K05=($)=>{return K9[$]||K9.reset},Un=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var x38=D(()=>{fO1();v38();K9={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 h38}from"crypto";import{mkdir as H05,readdir as F05,rm as f38,stat as u38}from"fs/promises";import{join as hO1,relative as U05}from"path";import{z as Y8}from"zod";function c38($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return hO1(N05,Z)}function m38($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function gO1($,Z){let Q=c38($),Y=m38(Z);return hO1(Q,Y)}function B05($,Z,Q,Y){let X=O0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return h38("sha256",X).update(J).digest("hex")}function g38($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=B05(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${m38(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function d38($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${h38("md5","etag").update(Y).digest("hex")}"`}async function i38($,Z,Q,Y,X){try{let J=await F05($,{withFileTypes:!0});for(let G of J){let W=hO1($,G.name),H=U05(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 i38(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 u38(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:d38(W,F.mtime,F.size)})}catch{}}}}catch{}}function p38($,Z){let Y=J0($).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=c38(Y);await H05(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await i38(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),L=N+W<U.objects.length,O=L?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:L,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=gO1(Y,J.key),W=await u38(G);return{contentType:aB1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:d38(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=HL(J.expiresIn,y38);return{url:g38(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=HL(J.expiresIn,y38);return{url:g38(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=gO1(Y,J.key);try{return await f38(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=gO1(Y,K);try{await f38(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function uO1($,Z,Q){let Y=p38(Z,Q),X=new Pw({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:fZ});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 S3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),YK(X,J,$,"mcp:dev-assets")}async function n38($,Z,Q,Y){let J=p38(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 N05="./data/assets",y38=3600,l38,t38;var o38=D(()=>{s1();Ai();G8();LG0();zi();MJ();FL();cC0();l38=new Z1;l38.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return uO1($.req.raw,Z,Y)});t38=l38});var r38={};Q6(r38,{mountDevRoutes:()=>D05});function D05($,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 uO1(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 n38(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",t38);let Q=new Z1;Q.use("*",YF({mountPath:"/api/dev-assets"})),Q.route("/",lC0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var s38=D(()=>{G8();iB1();cC0();o38()});var WW8={};Q6(WW8,{watchHandler:()=>GW8,resolveCorsOrigin:()=>XW8,isSsoExemptPath:()=>QW8,isAllowedOAuthRedirectUri:()=>JW8,createApp:()=>R05});import{readFileSync as L05}from"fs";import{PrometheusSerializer as O05}from"@opentelemetry/exporter-prometheus";import{DBOS as kL}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as E05,oAuthProtectedResourceMetadata as P05}from"better-auth/plugins";async function w05($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,e38(a38)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),e38(a38)]),Q.release(),!0}catch{return Q.release(!0),!1}}function e38($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function QW8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${MC0}/`)||$.startsWith(`${PC0}/`)}function YW8($){return $==="local.studio.decocms.com"}function XW8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(YW8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function JW8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||YW8($.hostname)}async function R05($={}){let Z=$.database??L8(),Q=!1;Z5.stop().catch((X0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",X0)});let Y,X,J,G,W=new TO1,K,H,F,U=null;if($.disableNats)K=RO1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new Q40,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(X0)=>{return(async()=>{let K0=X0.getReader();try{while(!0){let{done:A0}=await K0.read();if(A0)break}}catch{}finally{K0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=K38();let X0=O0().natsCredsPath,K0;if(X0)try{K0=L05(X0,"utf8")}catch(H8){console.error(`[app] failed to read NATS_CREDS at ${X0}; connecting anonymously`,H8)}U.init(O0().natsUrls,K0?{creds:K0}:void 0);let A0=d$1()?new I$1({getJetStream:()=>U.getJetStream()}):null;A0?.init().catch(()=>{}),Y=A0;let T0=new rZ1({getJetStream:()=>U.getJetStream()});T0.init().catch(()=>{}),X=T0;let H1=new Wy(tY1,{getJetStream:()=>U.getJetStream()}),c$=new Wy(N80,{getJetStream:()=>U.getJetStream()});H1.init().catch(()=>{}),c$.init().catch(()=>{}),J={reads:H1,cards:c$};let t$=new dG1({getJetStream:()=>U.getJetStream()});t$.init().catch(()=>{}),G=t$,K=RO1({getConnection:()=>U.getConnection()}),H=new qO1({getConnection:()=>U.getConnection()}),F=new VO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),M58(U),U.onReady(()=>{A0?.init().catch((H8)=>{console.error("[McpListCache] Deferred init failed:",H8)}),T0.init().catch((H8)=>{console.error("[SkillCatalogCache] Deferred init failed:",H8)}),H1.init().catch((H8)=>{console.error("[PrReadCache] Deferred init failed:",H8)}),c$.init().catch((H8)=>{console.error("[PrCardCache] Deferred init failed:",H8)}),t$.init().catch((H8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",H8)}),K.start(),XD$(()=>U.getConnection()),F.init().catch((H8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",H8)})})}if(PP)await PP();V$1(Y),aZ1(X),oY1(J),iG1(G);let B={storage:new Lu(Z.db),sseHub:Z5,onThreadFinished:async(X0,K0)=>Qi(new R3(Z.db),X0,K0,new lG(Z.db))},L=new yX1(B),O=new R60(Z.db),w=new kO1(O);w.start(),Xu$(H),H.start((X0)=>{fM0(X0),L.execute({type:"CANCEL",taskId:X0}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",K0)})}).catch((X0)=>{console.error("[Decopilot] CancelBroadcast start failed:",X0)}),U?.onReady(()=>{H.start().catch((X0)=>{console.error("[CancelBroadcast] Deferred start failed:",X0)})});let j=()=>U?.getConnection()??null;hB1(j),U?.onReady(()=>hB1(j)),q31(j),U?.onReady(()=>q31(j)),F.init().catch((X0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",X0)}),PP=async()=>{await L.stopAll(),L.dispose(),w.dispose(),H.stop().catch(()=>{}),t98(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),JD$(),G.teardown(),V$1(null),aZ1(null),oY1(null),iG1(null)};let E=new Z1;if(E.use("*",lG1({enabled:(X0)=>Vp(X0,"debug")==="1"})),E.use("*",Av0),E.use("/*",z58({origin:(X0,K0)=>XW8(X0,{baseUrl:O0().baseUrl,requestOrigin:new URL(K0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(X0,K0)=>{if(await K0(),X0.req.path.includes("/files/"))return;if(X0.req.path.includes("/fs/")&&X0.req.path.endsWith("/read"))return;X0.header("X-Frame-Options","DENY"),X0.header("Content-Security-Policy","frame-ancestors 'none'")}),!O0().noTui)E.use("*",b38());E.use("*",async(X0,K0)=>{if(await K0(),zn(X0.req.path))return;if(X0.res.status>=500){let T0=await X0.res.clone().text();console.error(`[5xx Response] ${X0.req.method} ${X0.req.path} - ${X0.res.status}:`,T0)}}),E.get(UX.HEALTH,(X0)=>{if(Q)return X0.json({status:"shutting_down"},503);return X0.json({status:"ok"})}),E.get(UX.HEALTH_LIVE,(X0)=>{return X0.json({status:"ok"})}),E.get(UX.HEALTH_READY,async(X0)=>{if(Q)return X0.json({status:"shutting_down"},503);let K0={};if(K0.postgres={status:await w05(Z.pool)?"up":"down"},U)K0.nats=U.isConnected()?{status:"up"}:{status:"down"};else K0.nats={status:"down"};let A0=K0.postgres.status==="up",T0=A0?200:503;return X0.json({status:A0?"ready":"not_ready",services:K0},T0)}),E.get(UX.METRICS,async(X0)=>{try{let K0=await Mv0.collect(),A0=j05.serialize(K0.resourceMetrics);return X0.text(A0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(K0){return console.error("Failed to collect metrics:",K0),X0.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${UX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(X0)=>{let K0=X0.req.param("queueName");if(!z05.has(K0))return X0.json({error:`Unknown queue: ${K0}`},404);let[A0,T0]=await Promise.all([kL.listQueuedWorkflows({queueName:K0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),kL.listQueuedWorkflows({queueName:K0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return X0.json({queue_length:A0.length,in_flight:T0.length})}),E.route("/api/config",wG8),E.route("/api/_reports",kG8),E.route("/api/_stripe",BO1),E.route("/api/_github",_G8({taskBoard:()=>i,contextFactory:()=>y})),E.route("/api/_git",fp);let T={db:Z.db,encryptionKey:O0().encryptionKey};E.route("/api/_jira",lG8(T)),E.route("/api/_jira",fG8(T)),E.route("/report",MG8($.clientDir)),E.route("/api/auth/custom",p58),E.route("/api/auth/desktop",r58),E.all("/api/auth/admin/*",x98),E.all("/api/auth/*",async(X0)=>{return await x8.handler(X0.req.raw)});let z=o48();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",g60),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",g60),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",A60),E.route("/",$68()),E.use("/oauth-proxy/:connectionId/*",g60),E.all("/oauth-proxy/:connectionId/*",$W8);let A=async(X0)=>{let A0=await A05()(X0.req.raw),T0=await A0.json();return Response.json(T0,A0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",g60),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(X0)=>{let A0=await T05()(X0.req.raw),T0=await A0.json();return Response.json(T0,A0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let f=T58({ttlMs:120000}),_=await t68({db:Z.db,auth:x8,encryption:{key:O0().encryptionKey},observability:{tracer:yL,meter:Q$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});rQ.set(_),ln1({db:Z.db,baseUrl:m5()}),o68({db:Z.db}),e68({db:Z.db}),W58({db:Z.db}),gG8({db:Z.db,encryptionKey:O0().encryptionKey}),Cx$({db:Z.db}),B58({db:Z.db}),Wf$({db:Z.db});let V=YJ0(Z.db),g=new Zs(Z.db),y=S38({db:Z.db});yG1({storage:V,studioContextFactory:y}),kJ1({systemDatabaseUrl:os0(O0().databaseUrl,O0().databasePgSsl),studioContextFactory:y,deps:{runRegistry:L,cancelBroadcast:H,streamBuffer:F,sseHub:Z5}}),AJ1({dispatchRunFn:Fh$,studioContextFactory:y,deps:{runRegistry:L,cancelBroadcast:H,streamBuffer:F,sseHub:Z5}});let u=new Lu(Z.db),i=new R3(Z.db),p=new lG(Z.db),U0=new CO1(i,y,p);if(O0().taskBoardReviewSweeperEnabled){U0.start();let X0=PP;PP=async()=>{await X0?.(),U0.dispose()}}Ch$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let X0=U?.getConnection();return X0?await ZW8.jetstreamManager(X0):null},messageParts:u.messageParts(),resolveRun:async(X0)=>{let K0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",X0).executeTakeFirst();return K0?{orgId:K0.organization_id,createdBy:K0.created_by,version:K0.message_storage_version??1,status:K0.status,runFenceToken:K0.run_fence_token,title:K0.title??null}:null},completeRunIfNotCompleted:async(X0,K0)=>{let A0=await u.completeRunIfNotCompleted(X0,K0);if(s_0(Z5,K0,X0,A0),A0)await Qi(i,X0,K0,p);return A0},markRunRequiresAction:async(X0,K0)=>{let A0=await u.requiresActionIfInProgress(X0,K0);return s_0(Z5,K0,X0,A0),A0},markRunFailed:async(X0,K0,A0,T0)=>{let H1=await u.markRunFailed(X0,K0,A0,T0);if(s_0(Z5,K0,X0,H1),H1)await Qi(i,X0,K0,p);return H1},clearSynthesizedError:async(X0,K0)=>{await u.messageParts().replaceMessageParts(X0,CE(X0,K0),[])},persistTitle:(X0,K0,A0)=>u.update(X0,K0,{title:A0}),onTitleUpdated:async({runId:X0,orgId:K0,title:A0})=>{let T0=await u.get(X0,K0).catch(()=>null);Z5.emit(K0,VF(X0,T0?.status??"in_progress",{title:A0,virtualMcpId:T0?.virtual_mcp_id??void 0,createdBy:T0?.created_by,triggerId:T0?.trigger_id,branch:T0?.branch??null,harnessId:T0?.harness_id??void 0,createdAt:T0?.created_at,updatedAt:T0?.updated_at}))},bumpProgress:async({runId:X0,orgId:K0})=>{await u.bumpProgress(X0,K0)},recordCompleted:async({runId:X0,orgId:K0,distinctId:A0,usage:T0})=>{f1.capture({distinctId:A0,event:"chat_message_completed",groups:{organization:K0},properties:{organization_id:K0,thread_id:X0,transport:"projector",input_tokens:T0.inputTokens,output_tokens:T0.outputTokens,total_tokens:T0.totalTokens}})},recordFailed:async({runId:X0,orgId:K0,distinctId:A0,reason:T0,kind:H1})=>{f1.capture({distinctId:A0,event:"chat_message_failed",groups:{organization:K0},properties:{organization_id:K0,thread_id:X0,transport:"projector",error_category:H1,error_message:T0}})},purgeRun:async(X0)=>{F.purge(X0)}}),yg$({studioContextFactory:y,systemDatabaseUrl:os0(O0().databaseUrl,O0().databasePgSsl),streamBuffer:F}),V38(),cn1(),s68(),Z58(),H58(),uG8(),fx$(),L58(),Kf$(),bG8();let v0=async(X0,K0,A0)=>{let T0=await V.findById(X0,K0);if(!T0)throw Error("Automation not found");return uG1({automationId:T0.id,organizationId:T0.organization_id,triggerId:null})},G0=new bp(V,({automation:X0,trigger:K0,contextMessages:A0,idempotencyKey:T0})=>Z40({automationId:X0.id,organizationId:X0.organization_id,triggerId:K0.id,contextMessages:A0},{idempotencyKey:T0})),N0=[EK(),Sg(),hN()];for(let X0 of N0)$v0(X0).then(()=>{}).catch((K0)=>console.error("[monitoring] Retention cleanup failed:",K0));let o=()=>x8.api.deleteAllExpiredApiKeys().catch((X0)=>console.error("[auth] Expired API key cleanup failed:",X0));o(),setInterval(o,86400000).unref(),E.use("*",async(X0,K0)=>{if(Pv0(X0.req.path))return K0();let A0={measure:async(H1,c$)=>{QK(X0,H1);try{return await c$()}finally{C3(X0,H1)}}},T0=await rQ.create(X0.req.raw,{timings:A0});T0.automationRunner=v0,X0.set("studioContext",T0);try{await K0()}finally{let H1=T0.pendingRevalidations;if(H1.length>0)Promise.race([Promise.allSettled(H1),U$(30000)]).catch((t$)=>console.error("[studio] revalidation cleanup error:",t$))}}),E.use("/api/:org/decopilot/*",Sp),E.use("/api/:org/v1/*",Sp),E.use("/api/:org/files/*",Sp),E.use("*",async(X0,K0)=>{if(QW8(X0.req.path))return K0();let A0=X0.get("studioContext");if(!A0?.organization?.id||!A0?.auth?.user?.id)return K0();if(!(await A0.storage.orgSsoConfig.getByOrgId(A0.organization.id))?.enforced)return K0();if(!await A0.storage.orgSsoSessions.isValid(A0.auth.user.id,A0.organization.id))return X0.json({error:"SSO authentication required for this organization"},403);return K0()});let $0=new Z1;$0.use("*",YF({mountPath:"/api/org-sso"})),$0.route("/",kC0()),E.route("/api/org-sso",$0),E.get("/api/tools/management",(X0)=>{return X0.json({tools:Ws,grouped:N2()})}),E.use("/mcp/*",async(X0,K0)=>{QK(X0,"mcp");try{return await K0()}finally{C3(X0,"mcp")}});let Q0=async(X0,K0)=>{let A0=X0.var.studioContext;if(!A0.auth.user?.id&&!A0.auth.apiKey?.id){let T0=new URL(X0.req.url),H1=X0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),c$=H1?`${H1}://${T0.host}`:T0.origin;return X0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${c$}${T0.pathname}/.well-known/oauth-protected-resource"`}})}return await K0()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),fW()){let{mountDevRoutes:X0}=(s38(),Kv0(r38));X0(E,Q0)}let a=new Z1;a.use("*",YF({mountPath:"/mcp"})),a.route("/",VI0()),E.route("/mcp",a);let Y0=new Z1;Y0.use("*",YF({mountPath:"/mcp/self"})),Y0.route("/",E_0()),E.route("/mcp/self",Y0);let g0=new Z1;g0.use("*",YF({mountPath:"/mcp"})),g0.route("/",CI0()),E.route("/mcp",g0),E.use("/api/:org/models/*",async(X0,K0)=>{QK(X0,"llm_models");try{return await K0()}finally{C3(X0,"llm_models")}});let V0=ZZ8({cancelBroadcast:H,streamBuffer:F,runRegistry:L});E.route("/api",V0),E.route("/api",iG8);let G1=new Z1;G1.use("*",YF({mountPath:"/api"})),G1.route("/",T_0()),E.route("/api",G1),E.route("/api",FG8);let c0=new Z1;c0.use("*",YF({mountPath:"/api"})),c0.route("/",R_0({tokenStorage:g,automationEventDispatcher:G0})),E.route("/api",c0);let w0=new Ys(Z.db),E0=new Z1;E0.use("*",YF({mountPath:"/api"})),E0.route("/",xC0()),E.route("/api",E0),E.route("/api/deco-sites",OZ8()),E.route("/api/deco-apps",XG8());let n0=new Z1;n0.use("*",YF({mountPath:"/api/deco-sites"})),n0.route("/",yC0()),E.route("/api/deco-sites",n0),E.route(MC0,f98()),E.route(oY8,aY8()),E.route("/api/_editor-resolve",NG8()),E.route($98,Z98()),E.route(PC0,O98());let N1=O0(),o0=N1.elevenlabsApiKey?new m_0({apiKey:N1.elevenlabsApiKey,model:N1.elevenlabsVoiceModel,conversationModel:N1.elevenlabsConversationModel,voiceId:N1.elevenlabsVoiceId}):null,_0={openai:N1.openaiLiveApiKey?new JO1({apiKey:N1.openaiLiveApiKey,voice:N1.openaiLiveVoice}):null,elevenlabs:o0?new XO1(o0,()=>U?.getConnection()??null):null},d0=new FO1({adapter:o0,conversationAdapters:_0,defaults:N1,secret:N1.studioJwtSecret??N1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),i0=fJ8({voiceSessions:d0,kvStorage:w0,runRegistry:L,streamBuffer:F,sseHub:Z5,cancelBroadcast:H,tokenStorage:g,automationEventDispatcher:G0,mountDevAssets:fW(),mcpAuth:Q0,oauthProxyHandler:$W8,watchHandler:GW8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((X0)=>{return X0.json({error:"Not Found",path:X0.req.path},404)}),E.onError(YZ8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([Z5.stop(),PP?Promise.resolve(PP()).finally(()=>{PP=null}):Promise.resolve()]),U)await U.drain().catch((X0)=>console.error("[shutdown] NATS drain error:",X0));console.log("[shutdown] Flushing telemetry..."),await FJ().catch((X0)=>console.error("[shutdown] Telemetry flush error:",X0)),console.log("[shutdown] Closing database..."),await m7$(Z).catch((X0)=>console.error("[shutdown] Database close error:",X0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await kL.registerQueue(m3,{partitionQueue:!0,concurrency:bG1,minPollingIntervalMs:xG1}),await kL.registerQueue(c3,{partitionQueue:!0,concurrency:IJ1,priorityEnabled:!0}),await kL.registerQueue(yN,{workerConcurrency:O0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await kL.registerQueue(gN,{workerConcurrency:O0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await kL.registerQueue(fL,{partitionQueue:!0,concurrency:fg$}),await kL.registerQueue(qP,Gf$),await pB1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((X0)=>kL.deleteQueue(X0))),await fG1(Z.pool),FJ$().catch((X0)=>{console.error("[studio-pack-backfill] failed:",X0)}),mn1().catch((X0)=>{console.error("[org-fs] public-sets boot sync kick failed:",X0)})}})}var ZW8,a38=5000,PP=null,$W8=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 rQ.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 Rp(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=H.origin;let N=await T60(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),L;if(Y==="authorize")L=B.authorization_endpoint;else if(Y==="token")L=B.token_endpoint;else if(Y==="register")L=B.registration_endpoint;if(!L)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let O=e48(L);if(O)return O;let w=new URL(L),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let g=w.searchParams.get("redirect_uri");if(g){let y=O0().baseUrl??j.origin;try{if(!JW8(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(w58(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 p=atob(T.slice(6).trim()),U0=p.indexOf(":");if(U0!==-1){let v0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.slice(U0+1));A=v0||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[p,U0]of g.entries())i.append(p,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 p=u,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...g?.slug?{organization_slug:g.slug}:{},...g?.name?{organization_name:g.name}:{}},z=JSON.stringify(p),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let f=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 f.headers.entries())if(!V.includes(g.toLowerCase()))_.set(g,y);if(Y==="token"&&f.ok){let g=await f.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 qp(G.connection_url)??L}catch{i=L}let p={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 j9(X.db,X.vault).upsert(p)}}catch(y){console.error("[oauth-proxy] failed to persist downstream token:",y)}return new Response(g,{status:f.status,statusText:f.statusText,headers:_})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:_})},GW8=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&&(!QN(Y)||!await YN(Z)))return $.json({error:"forbidden"},403);let W=G?cq0:Y;if(G)nD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return qL($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!Z5.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(()=>{Z5.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),Z5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),Z5.remove(W,K),N()})})})},j05,z05,A05=()=>P05(x8),T05=()=>E05(x8);var KW8=D(()=>{r$();s1();dn1();a68();Q58();F58();H40();CY1();O58();U80();k9();Bm();p8();G8();OC0();A58();cG1();U3();_U();BB1();cG();S6();$6();PB1();s58();Q98();w98();MB1();y98();xB1();mB1();dB1();AH();aS0();iB1();XZ8();jC0();yJ8();cJ8();mJ8();nJ8();YG8();oB1();JG8();kI0();Y40();UG8();_I0();IL1();BG8();qL1();jG8();IG8();SG8();CG8();vG8();xG8();yG8();cG8();zO1();$D1();pG8();ML1();zL1();m50();H38();lX();IR0();sY1();R00();M00();nG1();F38();N38();uB1();E38();MM0();P38();yo();Gs();pD();T9();vN1();q38();k38();u30();_O1();d3();nB1();iD();PJ1();u30();iM0();wt0();jt0();C38();Hw();x38();ep();BB1();td();Ni();yM0();ZW8=C(IK(),1);j05=new O05,z05=new Set([m3,c3,yN,gN,fL,qP])});var NW8={};Q6(NW8,{resolveClientDir:()=>C05,resolveAssetPathWithTraversalCheck:()=>UW8,isPathWithinDirectory:()=>FW8,createAssetHandler:()=>_05});import{resolve as V50,dirname as q05,join as M05,extname as I05,basename as V05,sep as HW8}from"path";function k05($,Z){if($===Z||V05($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${HW8}assets${HW8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function FW8($,Z){let Q=V50(Z),Y=V50($);return Y===Q||Y.startsWith(Q+"/")}function UW8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=V50(Z,Q);if(!FW8(Y,Z))return null;return Y}function C05($,Z="../client"){let Q=new URL($),Y=q05(Q.pathname);return V50(Y,Z)}function _05($={}){let{env:Z="production",clientDir:Q=S05,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=UW8({requestPath:W,clientDir:Q});if(!K)return null;let H=M05(K,"index.html"),F=V50(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(I05(K))?[H,F]:[];for(let L of[K,...B])try{let O=Bun.file(L);if(await O.exists())return new Response(O,{headers:k05(L,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var S05="./dist/client";var BW8=()=>{};var DW8={};Q6(DW8,{tryUpgradePreviewWs:()=>h05,tryHandlePreviewHttp:()=>g05,previewWebSocketHandler:()=>u05,parsePreviewBaseDomain:()=>y05,isPreviewWsData:()=>Zv0,extractHandleFromHost:()=>lO1});function x05($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function f05(){return new Response(b05,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function y05($){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 lO1($,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 g05($,Z){let Q=lO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return S50(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Xd)&&x05($))return f05();return X.headers.delete(Xd),X}function S50($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Zv0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function h05($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=lO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return S50(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return S50(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return S50(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 S50(426,"upgrade failed");return}function k50($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var v05=256,b05='<!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>',u05;var LW8=D(()=>{o10();u05={open($){let Z=$.data;if(!Zv0(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)}`),k50($,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)=>{k50($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{k50($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!Zv0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=v05){k50($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!Zv0(Z))return;k50($,Z,1000,"")}}});var EW8={};Q6(EW8,{printBanner:()=>c05,bannerLines:()=>jW8,BANNER_LINES:()=>OW8,BANNER_GRADIENT:()=>wW8});function l05($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function jW8($){let Z=OW8.map((Q,Y)=>{let[X,J,G]=l05(wW8[Y]);return`\x1B[38;2;${X};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function c05($){console.log("");for(let Z of jW8($))console.log(Z);console.log("")}var OW8,wW8;var PW8=D(()=>{OW8=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],wW8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});r$();var $w1="13";function Zw1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:$w1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}r$();import gW8 from"pg";var Qw1=8314027461559302n,hW8=600000,uW8=500;async function Yw1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=hW8}=$,X=$.log??((K)=>console.log(K)),J=new gW8.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",[Qw1.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 U$(uW8)}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)",[Qw1.toString()])}catch{}await J.end().catch(()=>{})}}s1();Nv0();S6();function gK8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function kv0($,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 uw1(){let $=gK8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:kv0($,"--cpu-prof-dir")??process.cwd(),name:kv0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(kv0($,"--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.'}))}_v0();var p50;function ow1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=VP();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(()=>{}),p50=setInterval(()=>void Z().catch(()=>{}),$),p50.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(p50)clearInterval(p50)}}import*as lK8 from"bun:jsc";var{startSamplingProfiler:cK8,samplingProfilerStackTraces:mK8}=lK8;function rw1(){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{cK8()}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=mK8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((L)=>L.sourceURL&&!/Unknown Executable/.test(L.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 sw1(){uw1();let $=[ow1(),tw1(),rw1()];return()=>{for(let Z of $)Z()}}import{existsSync as r05}from"fs";var PG=O0();yw1();var{DBOS:C50,DBOSClient:m05}=await import("@dbos-inc/dbos-sdk");function nO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var d05=[m3,c3,yN,gN,fL,qP],i05=PG.dispatchRole==="worker"?d05:PG.dispatchRole==="api"?[]:void 0;C50.setConfig(Zw1({systemDatabaseUrl:nO1(PG.databaseUrl,PG.databasePgSsl),poolSize:PG.dbosPoolSize,executorID:PG.podName,listenQueues:i05}));var{createApp:p05}=await Promise.resolve().then(() => (KW8(),WW8)),{isServerPath:n05}=await Promise.resolve().then(() => (m50(),Pw1)),{createAssetHandler:t05,resolveClientDir:qW8}=await Promise.resolve().then(() => (BW8(),NW8)),o05=PG.port,zW8=qW8(import.meta.url,"../client"),MW8=r05(zW8)?zW8:qW8(import.meta.url,"../dist/client"),s05=t05({clientDir:MW8,isServerPath:n05}),a05={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function e05($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(a05))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:$15,tryHandlePreviewHttp:Z15,tryUpgradePreviewWs:Q15,previewWebSocketHandler:cO1,isPreviewWsData:mO1}=await Promise.resolve().then(() => (LW8(),DW8)),{getOrInitSharedRunner:IW8}=await Promise.resolve().then(() => (ZG(),iq$)),VW8=$15(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),AW8={baseDomain:VW8??"",getRunner:IW8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())IW8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var Qv0=await p05({clientDir:MW8}),dO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),TW8=process.env.DBOS_CONDUCTOR_URL?.trim();await Yw1({databaseUrl:nO1(PG.databaseUrl,PG.databasePgSsl)},()=>C50.launch({...dO1?{conductorKey:dO1}:{},...dO1&&TW8?{conductorURL:TW8}:{}}));console.log(`[dbos] application version: ${C50.applicationVersion}`);var iO1=5,pO1=0;await E8(async()=>{pO1++;try{return await Qv0.initDbos()}catch($){let Z=pO1>=iO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${pO1}/${iO1} failed, ${Z}`,$),$}},{maxAttempts:iO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!PG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (PW8(),EW8));console.log("");for(let Z of $())console.log(Z)}var Y15=Bun.serve({idleTimeout:0,port:o05,hostname:"0.0.0.0",fetch:async($,Z)=>{if(VW8){let Y=await Q15($,Z,AW8);if(Y===void 0)return;if(Y)return Y;let X=await Z15($,AW8);if(X)return X}let Q=await s05($);if(Q)return e05(Q);return Qv0.fetch($,{server:Z})},websocket:{open($){if(mO1($.data))cO1.open($)},message($,Z){if(mO1($.data))cO1.message($,Z)},close($){if(mO1($.data))cO1.close($)}},development:!1}),X15=sw1();if(PG.localMode)Promise.resolve().then(() => (Fy(),PM0)).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(() => (Fy(),PM0));Z()}catch{}});var RW8=!1;async function J15($){let Z;try{Z=await m05.create({systemDatabaseUrl:nO1(PG.databaseUrl,PG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:c3,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:c3}),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 Yv0($){if(RW8)return;RW8=!0,console.log(`
3732
3732
  [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{X15(),Qv0.markShuttingDown();let J=Jw1(PG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await U$(J),await Y15.stop(!0);let G=C50.executorID;await C50.shutdown(),await J15(G),await Qv0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>Yv0("SIGTERM"));process.on("SIGINT",()=>Yv0("SIGINT"));process.on("SIGHUP",()=>Yv0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),Yv0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.460.0",
3
+ "version": "4.460.1",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c,j as s,M as u}from"./index-_GVj9btr.js";import{C as f}from"./index-CuK9kkYl.js";import{a as x}from"./thread-route-DHZZvuwU.js";import{u as g}from"./use-task-metadata-BbkXArNg.js";import{AppViewContent as h}from"./project-app-view-C_gwtvAy.js";import"./use-mobile-GjgRyNrU.js";import"./thread-button-CRCH5kP6.js";import"./agent-icon-DEJDgJKr.js";import"./AlertCircle-CO6inmNg.js";import"./Tool01-Clh2JKqc.js";import"./ArrowUp-B18RgHnP.js";import"./ArrowLeft-B8UnGYhG.js";import"./LinkBroken01-BFDA4BvC.js";import"./ShoppingBag01-C56E9Cr5.js";import"./ZoomOut-BGVwn12H.js";import"./Building02-Dmjq05D1.js";import"./CheckCircle-UV6jcSdL.js";import"./Check-DflKvLuX.js";import"./ChevronUp-C9OLU7pl.js";import"./UserSquare-CaFmUcUJ.js";import"./Copy01-BSo_lYTe.js";import"./CreditCard01-DPlKO5Cv.js";import"./DotsVertical-SLBacfPj.js";import"./Image01-4N1iChYj.js";import"./Palette-Cj8X33PC.js";import"./XClose-KAMCGuVj.js";import"./Key01-eMYBRWWN.js";import"./Link01-r0Q6vSL3.js";import"./LinkExternal01-Zc5e3RJ3.js";import"./Monitor01-CshL0Mjr.js";import"./Sun-BZD5r25P.js";import"./Plus-CuabNbw1.js";import"./SearchMd-BT0xOVJ4.js";import"./Trash01-DlWd7fsc.js";import"./Upload01-DeYG5Wu1.js";import"./User01-DXEthK_f.js";import"./Users01-DTiueiuk.js";import"./X-DGsMQ15_.js";import"./use-chat-layout-state-c0Lav_OC.js";import"./use-file-configs-DRWnu9JI.js";import"./use-organization-settings-D6G7Joi1.js";import"./schema-BRSVyS4n.js";import"./task-board-C801HvIg.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-BN6TJ3pz.js";import"./use-project-scope-BGFTa5Uu.js";import"./repository-binding-lWBOOLGu.js";import"./use-mcp-client-MBQakoPd.js";import"./auth-BB3_nlWc.js";import"./thread-intent-D0eb-CDH.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-D-P3SyoA.js";import"./tooltip-B1qgpGKd.js";import"./index-Wqa3a93L.js";import"./toolbar-icon-button-BfNpw4zx.js";import"./shell-layout-Ch3jsP8V.js";import"./avatar-DODmHr21.js";import"./download-app-dialog-Bp2LFEhW.js";import"./dialog-BiE_Qj0b.js";import"./use-clock-tick-DSTzgavn.js";import"./command-BMw6uC9-.js";import"./index-q38sMtXI.js";import"./integration-icon-Bv72Mom1.js";import"./project-icon-Crnm9CYl.js";import"./new-project-dialog-DRVj0P6g.js";import"./input-BSc0-5vm.js";import"./label-Cj86qsUH.js";import"./repository-import-picker-CRdohCCA.js";import"./use-navigate-to-agent-BVLRuti4.js";import"./repository-picker-nUaCUvdQ.js";import"./useInfiniteQuery-DtQ-1vLo.js";import"./infiniteQueryObserver-DlEB3cFH.js";import"./collection-search--26vqrZa.js";import"./use-debounced-value-RVFqx3uz.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DydTEOO7.js";import"./autosend-DHbC0OwM.js";import"./use-org-sso-p449JELW.js";import"./resizable-DNM6R7oJ.js";import"./icon-button-DOuIQPAH.js";import"./gateway-client-CTRfA9Js.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-DUbmBIMM.js";import"./sandbox-lifecycle-context-Bo7fsq-I.js";import"./use-session-runtime-D511U5U9.js";import"./chat-context-D2Uba2eY.js";import"./use-decopilot-events-BU1FrPBU.js";import"./use-ai-providers-CNfcuhbm.js";import"./use-open-library-file-Donc5FRL.js";import"./location-DS2HQ7KN.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-fhalPBVj.js";import"./types-B84YBG-v.js";import"./task-route-CyL9XVdL.js";import"./core.esm-BKBFvPcW.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-DVZ6s_4W.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-jzofsj5U.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-iZyKasSZ.js";import"./authenticate-and-persist-oauth-C1cpYR7k.js";import"./mcp-oauth-CPp0zS75.js";import"./track-BGVo0D3h.js";import"./extract-connection-data-Ct7lFSGd.js";import"./connection-4K6p7PGK.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 _o(){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{_o as default};
@@ -1 +0,0 @@
1
- import{c,j as e,aS as b,u as g}from"./index-_GVj9btr.js";import{C as j}from"./index-CuK9kkYl.js";import{F as v,H as S}from"./file-share-button-BoY9JXrz.js";import{u as k,b as y,e as _}from"./use-org-fs-H22nJ8UQ.js";import{S as w}from"./settings-tab-qwRT8IMw.js";import{b as M}from"./thread-route-DHZZvuwU.js";import"./use-mobile-GjgRyNrU.js";import"./thread-button-CRCH5kP6.js";import"./agent-icon-DEJDgJKr.js";import"./AlertCircle-CO6inmNg.js";import"./Tool01-Clh2JKqc.js";import"./ArrowUp-B18RgHnP.js";import"./ArrowLeft-B8UnGYhG.js";import"./LinkBroken01-BFDA4BvC.js";import"./ShoppingBag01-C56E9Cr5.js";import"./ZoomOut-BGVwn12H.js";import"./Building02-Dmjq05D1.js";import"./CheckCircle-UV6jcSdL.js";import"./Check-DflKvLuX.js";import"./ChevronUp-C9OLU7pl.js";import"./UserSquare-CaFmUcUJ.js";import"./Copy01-BSo_lYTe.js";import"./CreditCard01-DPlKO5Cv.js";import"./DotsVertical-SLBacfPj.js";import"./Image01-4N1iChYj.js";import"./Palette-Cj8X33PC.js";import"./XClose-KAMCGuVj.js";import"./Key01-eMYBRWWN.js";import"./Link01-r0Q6vSL3.js";import"./LinkExternal01-Zc5e3RJ3.js";import"./Monitor01-CshL0Mjr.js";import"./Sun-BZD5r25P.js";import"./Plus-CuabNbw1.js";import"./SearchMd-BT0xOVJ4.js";import"./Trash01-DlWd7fsc.js";import"./Upload01-DeYG5Wu1.js";import"./User01-DXEthK_f.js";import"./Users01-DTiueiuk.js";import"./X-DGsMQ15_.js";import"./use-chat-layout-state-c0Lav_OC.js";import"./use-file-configs-DRWnu9JI.js";import"./use-organization-settings-D6G7Joi1.js";import"./schema-BRSVyS4n.js";import"./task-board-C801HvIg.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-BN6TJ3pz.js";import"./use-project-scope-BGFTa5Uu.js";import"./repository-binding-lWBOOLGu.js";import"./use-mcp-client-MBQakoPd.js";import"./auth-BB3_nlWc.js";import"./thread-intent-D0eb-CDH.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-D-P3SyoA.js";import"./tooltip-B1qgpGKd.js";import"./index-Wqa3a93L.js";import"./toolbar-icon-button-BfNpw4zx.js";import"./shell-layout-Ch3jsP8V.js";import"./avatar-DODmHr21.js";import"./download-app-dialog-Bp2LFEhW.js";import"./dialog-BiE_Qj0b.js";import"./use-clock-tick-DSTzgavn.js";import"./command-BMw6uC9-.js";import"./index-q38sMtXI.js";import"./integration-icon-Bv72Mom1.js";import"./project-icon-Crnm9CYl.js";import"./new-project-dialog-DRVj0P6g.js";import"./input-BSc0-5vm.js";import"./label-Cj86qsUH.js";import"./repository-import-picker-CRdohCCA.js";import"./use-navigate-to-agent-BVLRuti4.js";import"./repository-picker-nUaCUvdQ.js";import"./useInfiniteQuery-DtQ-1vLo.js";import"./infiniteQueryObserver-DlEB3cFH.js";import"./collection-search--26vqrZa.js";import"./use-debounced-value-RVFqx3uz.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DydTEOO7.js";import"./autosend-DHbC0OwM.js";import"./use-org-sso-p449JELW.js";import"./resizable-DNM6R7oJ.js";import"./icon-button-DOuIQPAH.js";import"./popover-D9pWfxJO.js";import"./extract-connection-data-Ct7lFSGd.js";import"./metadata-D72DunRR.js";import"./connection-4K6p7PGK.js";import"./chat-context-D2Uba2eY.js";import"./use-decopilot-events-BU1FrPBU.js";import"./use-ai-providers-CNfcuhbm.js";import"./use-open-library-file-Donc5FRL.js";import"./location-DS2HQ7KN.js";import"./build-improve-prompt-doc-Di_n9Ru9.js";import"./empty-state-B1hBxq5f.js";import"./use-date-fns-locale-CCGctwId.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BwVENpGY.js";import"./mcp-oauth-CPp0zS75.js";import"./alert-dialog-DbfJ99VN.js";import"./textarea-CC50zNgC.js";import"./use-debounced-autosave-CHhzTZ2F.js";import"./add-connection-dialog-as-69W7W.js";import"./connection-card-ByXuS476.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-BK1UaGO3.js";import"./form-jzofsj5U.js";import"./select-GyUC-zPO.js";import"./connection-form-helpers-US5LomVa.js";import"./authenticate-and-persist-oauth-C1cpYR7k.js";import"./collection-tabs-DagHE-HY.js";import"./badge-BSEUE8qb.js";import"./use-infinite-scroll-C1cd5Np9.js";import"./useSuspenseInfiniteQuery-Du59Bicl.js";import"./file-type-icon-CuBjqaGD.js";import"./checkbox-DuFJG33E.js";import"./search-input-BORmBqXA.js";import"./use-mcp-auth-status-CsbN4RE8.js";import"./types-B84YBG-v.js";import"./use-mcp-tools-DUbmBIMM.js";import"./use-mcp-prompts-DlsTWV5M.js";import"./utils-CVEq3hMx.js";import"./switch-lvjDGHVD.js";import"./scroll-area-CPgJ4PRu.js";import"./optimistic-project-sidebar-views-BgrzP8LK.js";import"./virtual-mcp-BUAnetZd.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-B-7G1MEj.js";import"./use-secrets-h3kAVAEc.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 Yo(){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{Yo as default};
@@ -1 +0,0 @@
1
- import{c as s,j as e}from"./index-_GVj9btr.js";import{C as a}from"./index-CuK9kkYl.js";import{L as n}from"./library-tab-CSfKZODd.js";import{u as c}from"./use-project-scope-BGFTa5Uu.js";import{p as l}from"./location-DS2HQ7KN.js";import"./use-mobile-GjgRyNrU.js";import"./thread-button-CRCH5kP6.js";import"./agent-icon-DEJDgJKr.js";import"./AlertCircle-CO6inmNg.js";import"./Tool01-Clh2JKqc.js";import"./ArrowUp-B18RgHnP.js";import"./ArrowLeft-B8UnGYhG.js";import"./LinkBroken01-BFDA4BvC.js";import"./ShoppingBag01-C56E9Cr5.js";import"./ZoomOut-BGVwn12H.js";import"./Building02-Dmjq05D1.js";import"./CheckCircle-UV6jcSdL.js";import"./Check-DflKvLuX.js";import"./ChevronUp-C9OLU7pl.js";import"./UserSquare-CaFmUcUJ.js";import"./Copy01-BSo_lYTe.js";import"./CreditCard01-DPlKO5Cv.js";import"./DotsVertical-SLBacfPj.js";import"./Image01-4N1iChYj.js";import"./Palette-Cj8X33PC.js";import"./XClose-KAMCGuVj.js";import"./Key01-eMYBRWWN.js";import"./Link01-r0Q6vSL3.js";import"./LinkExternal01-Zc5e3RJ3.js";import"./Monitor01-CshL0Mjr.js";import"./Sun-BZD5r25P.js";import"./Plus-CuabNbw1.js";import"./SearchMd-BT0xOVJ4.js";import"./Trash01-DlWd7fsc.js";import"./Upload01-DeYG5Wu1.js";import"./User01-DXEthK_f.js";import"./Users01-DTiueiuk.js";import"./X-DGsMQ15_.js";import"./use-chat-layout-state-c0Lav_OC.js";import"./use-file-configs-DRWnu9JI.js";import"./use-organization-settings-D6G7Joi1.js";import"./schema-BRSVyS4n.js";import"./task-board-C801HvIg.js";import"./site-slug-DebpOoQq.js";import"./thread-route-DHZZvuwU.js";import"./use-panel-navigate-BN6TJ3pz.js";import"./thread-intent-D0eb-CDH.js";import"./use-mcp-client-MBQakoPd.js";import"./auth-BB3_nlWc.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-D-P3SyoA.js";import"./tooltip-B1qgpGKd.js";import"./index-Wqa3a93L.js";import"./toolbar-icon-button-BfNpw4zx.js";import"./shell-layout-Ch3jsP8V.js";import"./avatar-DODmHr21.js";import"./download-app-dialog-Bp2LFEhW.js";import"./dialog-BiE_Qj0b.js";import"./use-clock-tick-DSTzgavn.js";import"./command-BMw6uC9-.js";import"./index-q38sMtXI.js";import"./integration-icon-Bv72Mom1.js";import"./project-icon-Crnm9CYl.js";import"./new-project-dialog-DRVj0P6g.js";import"./input-BSc0-5vm.js";import"./label-Cj86qsUH.js";import"./repository-import-picker-CRdohCCA.js";import"./use-navigate-to-agent-BVLRuti4.js";import"./repository-binding-lWBOOLGu.js";import"./repository-picker-nUaCUvdQ.js";import"./useInfiniteQuery-DtQ-1vLo.js";import"./infiniteQueryObserver-DlEB3cFH.js";import"./collection-search--26vqrZa.js";import"./use-debounced-value-RVFqx3uz.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DydTEOO7.js";import"./autosend-DHbC0OwM.js";import"./use-org-sso-p449JELW.js";import"./resizable-DNM6R7oJ.js";import"./icon-button-DOuIQPAH.js";import"./search-toggle-CDBJ_dcm.js";import"./alert-dialog-DbfJ99VN.js";import"./use-open-library-file-Donc5FRL.js";import"./use-org-fs-H22nJ8UQ.js";import"./use-org-repo-syncs-DqPGl3jf.js";import"./textarea-CC50zNgC.js";import"./markdown-BvMMnkAP.js";import"./org-file-open-context-BwPyPLEh.js";import"./file-share-button-BoY9JXrz.js";import"./popover-D9pWfxJO.js";import"./preview-dialog-qIpFp9QF.js";import"./preview-content-B5bLtr9J.js";import"./file-preview-BOaYWTFN.js";import"./utils-Cuq1Pk3z.js";import"./editor-Bw0Zpi5c.js";import"./file-type-icon-CuBjqaGD.js";import"./folder-icon-CemUja5V.js";import"./skill-md-ChfVs4uF.js";import"./empty-state-LDw0F9lM.js";import"./view-mode-toggle-eCmHobnl.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-BdFIzjbt.js";import"./use-members-BHOqnjBC.js";import"./use-org-auth-client-CgObMpFu.js";function co(){const t=s.c(6),{project:o}=c(),p=o?.id??"pending";let r;t[0]!==o?(r=o?l(o):void 0,t[0]=o,t[1]=r):r=t[1];const m=o?.title??void 0;let i;return t[2]!==p||t[3]!==r||t[4]!==m?(i=e.jsx(a.Content,{children:e.jsx(n,{root:r,rootLabel:m},p)}),t[2]=p,t[3]=r,t[4]=m,t[5]=i):i=t[5],i}export{co as default};
@@ -1 +0,0 @@
1
- import{c as a,j as e,u as n}from"./index-_GVj9btr.js";import{C as c}from"./index-CuK9kkYl.js";import{L as l}from"./preview-panel-BABBrCDp.js";import{a as u}from"./use-panel-navigate-BN6TJ3pz.js";import{S as f}from"./settings-tab-qwRT8IMw.js";import{b as h}from"./thread-route-DHZZvuwU.js";import"./use-mobile-GjgRyNrU.js";import"./thread-button-CRCH5kP6.js";import"./agent-icon-DEJDgJKr.js";import"./AlertCircle-CO6inmNg.js";import"./Tool01-Clh2JKqc.js";import"./ArrowUp-B18RgHnP.js";import"./ArrowLeft-B8UnGYhG.js";import"./LinkBroken01-BFDA4BvC.js";import"./ShoppingBag01-C56E9Cr5.js";import"./ZoomOut-BGVwn12H.js";import"./Building02-Dmjq05D1.js";import"./CheckCircle-UV6jcSdL.js";import"./Check-DflKvLuX.js";import"./ChevronUp-C9OLU7pl.js";import"./UserSquare-CaFmUcUJ.js";import"./Copy01-BSo_lYTe.js";import"./CreditCard01-DPlKO5Cv.js";import"./DotsVertical-SLBacfPj.js";import"./Image01-4N1iChYj.js";import"./Palette-Cj8X33PC.js";import"./XClose-KAMCGuVj.js";import"./Key01-eMYBRWWN.js";import"./Link01-r0Q6vSL3.js";import"./LinkExternal01-Zc5e3RJ3.js";import"./Monitor01-CshL0Mjr.js";import"./Sun-BZD5r25P.js";import"./Plus-CuabNbw1.js";import"./SearchMd-BT0xOVJ4.js";import"./Trash01-DlWd7fsc.js";import"./Upload01-DeYG5Wu1.js";import"./User01-DXEthK_f.js";import"./Users01-DTiueiuk.js";import"./X-DGsMQ15_.js";import"./use-chat-layout-state-c0Lav_OC.js";import"./use-file-configs-DRWnu9JI.js";import"./use-organization-settings-D6G7Joi1.js";import"./schema-BRSVyS4n.js";import"./task-board-C801HvIg.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-D0eb-CDH.js";import"./use-mcp-client-MBQakoPd.js";import"./auth-BB3_nlWc.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-BGFTa5Uu.js";import"./repository-binding-lWBOOLGu.js";import"./sheet-D-P3SyoA.js";import"./tooltip-B1qgpGKd.js";import"./index-Wqa3a93L.js";import"./toolbar-icon-button-BfNpw4zx.js";import"./shell-layout-Ch3jsP8V.js";import"./avatar-DODmHr21.js";import"./download-app-dialog-Bp2LFEhW.js";import"./dialog-BiE_Qj0b.js";import"./use-clock-tick-DSTzgavn.js";import"./command-BMw6uC9-.js";import"./index-q38sMtXI.js";import"./integration-icon-Bv72Mom1.js";import"./project-icon-Crnm9CYl.js";import"./new-project-dialog-DRVj0P6g.js";import"./input-BSc0-5vm.js";import"./label-Cj86qsUH.js";import"./repository-import-picker-CRdohCCA.js";import"./use-navigate-to-agent-BVLRuti4.js";import"./repository-picker-nUaCUvdQ.js";import"./useInfiniteQuery-DtQ-1vLo.js";import"./infiniteQueryObserver-DlEB3cFH.js";import"./collection-search--26vqrZa.js";import"./use-debounced-value-RVFqx3uz.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DydTEOO7.js";import"./autosend-DHbC0OwM.js";import"./use-org-sso-p449JELW.js";import"./resizable-DNM6R7oJ.js";import"./icon-button-DOuIQPAH.js";import"./preview-content-B5bLtr9J.js";import"./file-share-button-BoY9JXrz.js";import"./use-org-fs-H22nJ8UQ.js";import"./popover-D9pWfxJO.js";import"./file-preview-BOaYWTFN.js";import"./utils-Cuq1Pk3z.js";import"./editor-Bw0Zpi5c.js";import"./file-type-icon-CuBjqaGD.js";import"./markdown-BvMMnkAP.js";import"./location-DS2HQ7KN.js";import"./org-file-open-context-BwPyPLEh.js";import"./extract-connection-data-Ct7lFSGd.js";import"./metadata-D72DunRR.js";import"./connection-4K6p7PGK.js";import"./chat-context-D2Uba2eY.js";import"./use-decopilot-events-BU1FrPBU.js";import"./use-ai-providers-CNfcuhbm.js";import"./use-open-library-file-Donc5FRL.js";import"./build-improve-prompt-doc-Di_n9Ru9.js";import"./empty-state-B1hBxq5f.js";import"./use-date-fns-locale-CCGctwId.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BwVENpGY.js";import"./mcp-oauth-CPp0zS75.js";import"./alert-dialog-DbfJ99VN.js";import"./textarea-CC50zNgC.js";import"./use-debounced-autosave-CHhzTZ2F.js";import"./add-connection-dialog-as-69W7W.js";import"./connection-card-ByXuS476.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-BK1UaGO3.js";import"./form-jzofsj5U.js";import"./select-GyUC-zPO.js";import"./connection-form-helpers-US5LomVa.js";import"./authenticate-and-persist-oauth-C1cpYR7k.js";import"./collection-tabs-DagHE-HY.js";import"./badge-BSEUE8qb.js";import"./use-infinite-scroll-C1cd5Np9.js";import"./useSuspenseInfiniteQuery-Du59Bicl.js";import"./checkbox-DuFJG33E.js";import"./search-input-BORmBqXA.js";import"./use-mcp-auth-status-CsbN4RE8.js";import"./types-B84YBG-v.js";import"./use-mcp-tools-DUbmBIMM.js";import"./use-mcp-prompts-DlsTWV5M.js";import"./utils-CVEq3hMx.js";import"./switch-lvjDGHVD.js";import"./scroll-area-CPgJ4PRu.js";import"./optimistic-project-sidebar-views-BgrzP8LK.js";import"./virtual-mcp-BUAnetZd.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-B-7G1MEj.js";import"./use-secrets-h3kAVAEc.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 Jr(){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{Jr as default};