decocms 4.499.3 → 4.499.4

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 (367) hide show
  1. package/dist/client/assets/{ActiveShapeUtils-DgcQq6OT.js → ActiveShapeUtils-CdFbjrR7.js} +1 -1
  2. package/dist/client/assets/{AlertCircle-CKip96zJ.js → AlertCircle-D64F5QZT.js} +1 -1
  3. package/dist/client/assets/{AreaChart-D-FKmMV3.js → AreaChart-CYq0YnIM.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-DWXC5SxX.js → ArrowLeft-EtQNZvkL.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-Dg7Kez2q.js → ArrowUp-BmL0BCqN.js} +1 -1
  6. package/dist/client/assets/{BarChart-BI8-_eKz.js → BarChart-BUo0UZBI.js} +1 -1
  7. package/dist/client/assets/{Building02-BhbGM34V.js → Building02-BYNzIC0_.js} +1 -1
  8. package/dist/client/assets/{CategoricalChart-Nb2-Y2lc.js → CategoricalChart-gICvYmdu.js} +1 -1
  9. package/dist/client/assets/{CheckCircle-CHf8-Blx.js → CheckCircle-CH2lIoTv.js} +1 -1
  10. package/dist/client/assets/{ChevronSelectorVertical-B8uBkzm6.js → ChevronSelectorVertical-CKkMIQxq.js} +1 -1
  11. package/dist/client/assets/{ChevronUp-DdJdulw6.js → ChevronUp-DAOjkMPN.js} +1 -1
  12. package/dist/client/assets/{Copy01-Tr_gU1aK.js → Copy01-m_uwkeCD.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-Cv44glOw.js → CreditCard01-KdIaDPg-.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-9_2O7H2x.js → DotsVertical-KRHoqp1L.js} +1 -1
  15. package/dist/client/assets/{ErrorBarContext-CSAzz0sp.js → ErrorBarContext-DIkwMkDv.js} +1 -1
  16. package/dist/client/assets/{Globe04-D3iPe8Pc.js → Globe04-CHfMY--P.js} +1 -1
  17. package/dist/client/assets/{Image01-BfROTBI_.js → Image01-B9K7stDA.js} +1 -1
  18. package/dist/client/assets/{Key01-BeLvSel3.js → Key01-c7pIbph9.js} +1 -1
  19. package/dist/client/assets/{Link01-Cej02QtC.js → Link01-DTA9h0Tu.js} +1 -1
  20. package/dist/client/assets/{LinkBroken01-C4y5s5BD.js → LinkBroken01-mDg_NFsQ.js} +1 -1
  21. package/dist/client/assets/{Monitor01-CDLuLXD2.js → Monitor01-tGDWsmdz.js} +1 -1
  22. package/dist/client/assets/{Play-WH2tJGci.js → Play-BLgdJi2k.js} +1 -1
  23. package/dist/client/assets/{Plus-B7ghEA56.js → Plus-pPXfDuHo.js} +1 -1
  24. package/dist/client/assets/{SearchMd-DyqBdeBV.js → SearchMd-DeQ9Yg2y.js} +1 -1
  25. package/dist/client/assets/{Sector-CR2hSKiQ.js → Sector-BRuBdQGv.js} +1 -1
  26. package/dist/client/assets/{ShoppingBag01-BZ853zJ_.js → ShoppingBag01-B29gM6zx.js} +1 -1
  27. package/dist/client/assets/{Sun-uTZ6vkYv.js → Sun-D1zmKedp.js} +1 -1
  28. package/dist/client/assets/{SwitchHorizontal01-CaMjqXcB.js → SwitchHorizontal01-DqVKqG_v.js} +1 -1
  29. package/dist/client/assets/{Tool01-DznnxM5_.js → Tool01-lGWsEi__.js} +1 -1
  30. package/dist/client/assets/{Trash01-_5jcVImt.js → Trash01-DiDmAdCb.js} +1 -1
  31. package/dist/client/assets/{Upload01-thivCY-D.js → Upload01-DMts0djm.js} +1 -1
  32. package/dist/client/assets/{User01-B9FM9Mf_.js → User01-_d4aL8so.js} +1 -1
  33. package/dist/client/assets/{UserSquare-CyTwJikM.js → UserSquare-DEMY8dZu.js} +1 -1
  34. package/dist/client/assets/{Users01-BZbPKUiW.js → Users01-BXstoO15.js} +1 -1
  35. package/dist/client/assets/{XAxis-CD5mzHHS.js → XAxis-D8Y5Kl9D.js} +1 -1
  36. package/dist/client/assets/{XClose-CfzTTVMn.js → XClose-2vYA1mGz.js} +1 -1
  37. package/dist/client/assets/{ZoomOut-C1q2p3OF.js → ZoomOut-Dncux2m4.js} +1 -1
  38. package/dist/client/assets/{access-gate-Bxq1Hlbn.js → access-gate-D8G3JOM8.js} +1 -1
  39. package/dist/client/assets/{add-connection-dialog-BGTbgW-i.js → add-connection-dialog-B5koNYc3.js} +1 -1
  40. package/dist/client/assets/{agent-analytics-CDewKQCM.js → agent-analytics-DLUHcg3e.js} +1 -1
  41. package/dist/client/assets/agent-app-DzLJcblb.js +1 -0
  42. package/dist/client/assets/{agent-assets-DfijL9Fx.js → agent-assets-B1bgJ5fo.js} +1 -1
  43. package/dist/client/assets/{agent-automation-BvBJkvGT.js → agent-automation-Bv-uIzMa.js} +1 -1
  44. package/dist/client/assets/{agent-automations-9wDIPFhf.js → agent-automations-DF7i-4sf.js} +1 -1
  45. package/dist/client/assets/{agent-connect-sources-DXnppISv.js → agent-connect-sources-lkHg-cNh.js} +1 -1
  46. package/dist/client/assets/agent-deck-BZEp8fRL.js +1 -0
  47. package/dist/client/assets/{agent-e2e-CP-dgiPD.js → agent-e2e-B14Xfx41.js} +1 -1
  48. package/dist/client/assets/{agent-experiments-BsCiftRb.js → agent-experiments-DZm0rMa9.js} +1 -1
  49. package/dist/client/assets/{agent-file-DQXP6Kie.js → agent-file-DqhHVftY.js} +1 -1
  50. package/dist/client/assets/{agent-hosting-lv0YqG7F.js → agent-hosting-DW8hkmOy.js} +1 -1
  51. package/dist/client/assets/{agent-icon-BzQJojFn.js → agent-icon-DsEoh1uc.js} +1 -1
  52. package/dist/client/assets/agent-library-Pk0IAtu0.js +1 -0
  53. package/dist/client/assets/agent-library-file-Dv8aM-7k.js +1 -0
  54. package/dist/client/assets/{agent-monitor-DIWW-oja.js → agent-monitor-AJmZ909K.js} +1 -1
  55. package/dist/client/assets/{agent-overview-zU7UtX4N.js → agent-overview-C_GU16D4.js} +1 -1
  56. package/dist/client/assets/agent-settings-OLjHIWXV.js +1 -0
  57. package/dist/client/assets/{agent-site-editor-6IARQa9S.js → agent-site-editor-DEB1cxAk.js} +1 -1
  58. package/dist/client/assets/agent-site-editor-code-CsFcTfpY.js +2 -0
  59. package/dist/client/assets/{agent-site-editor-content-BoR7A3J6.js → agent-site-editor-content-Dz7QiUBS.js} +3 -3
  60. package/dist/client/assets/{agent-site-editor-preview-CHew1bNX.js → agent-site-editor-preview-Bmq9D0yU.js} +3 -3
  61. package/dist/client/assets/{agent-view-guard-3DhesBoI.js → agent-view-guard-CXRvnSDZ.js} +1 -1
  62. package/dist/client/assets/agent-view-zjcLXSYx.js +1 -0
  63. package/dist/client/assets/{agents-list-dewnUR-7.js → agents-list-CsftxeY4.js} +1 -1
  64. package/dist/client/assets/{ai-providers-Bk7GpeLu.js → ai-providers-BBzQl4jb.js} +1 -1
  65. package/dist/client/assets/{alert-Cr5T7eOh.js → alert-Dy4dU1R7.js} +1 -1
  66. package/dist/client/assets/{alert-dialog-CAM3tof4.js → alert-dialog-BURK0-VV.js} +1 -1
  67. package/dist/client/assets/{analytics-sections-DOa20DSv.js → analytics-sections-DEh2Id4y.js} +1 -1
  68. package/dist/client/assets/api-keys-B2p99l9x.js +1 -0
  69. package/dist/client/assets/{api-keys-D9dIGDrT.js → api-keys-CjTAbVY8.js} +1 -1
  70. package/dist/client/assets/app-editor-CmySzZMn.js +1 -0
  71. package/dist/client/assets/{asset-utils-koOjLbnD.js → asset-utils-CAN25Z2R.js} +1 -1
  72. package/dist/client/assets/{auth-CZA10nCD.js → auth-4ol_FgC8.js} +1 -1
  73. package/dist/client/assets/{auth-catchall-D9UTG4dS.js → auth-catchall-DxIzjexT.js} +1 -1
  74. package/dist/client/assets/{auth-entry-_sycQOT3.js → auth-entry-Duu0pw9M.js} +1 -1
  75. package/dist/client/assets/{auth-split-layout-Ch6Z-FVb.js → auth-split-layout-DTCIfCq3.js} +1 -1
  76. package/dist/client/assets/{authenticate-and-persist-oauth-CxfxW_rA.js → authenticate-and-persist-oauth-DhKApzWO.js} +1 -1
  77. package/dist/client/assets/{automation-list-row-B8-Gomxx.js → automation-list-row-Cdl0VdqB.js} +1 -1
  78. package/dist/client/assets/{automation-runs-BnEMFtu-.js → automation-runs-DYfkPQkf.js} +1 -1
  79. package/dist/client/assets/{automations-CoFLQY3y.js → automations-C09hGDxa.js} +1 -1
  80. package/dist/client/assets/{autosend-DutXByr0.js → autosend-CZXcTLSS.js} +1 -1
  81. package/dist/client/assets/{avatar-DeVcKUjn.js → avatar-NvpT5YGL.js} +1 -1
  82. package/dist/client/assets/{badge-BRYJjM8m.js → badge-BeAl2FZH.js} +1 -1
  83. package/dist/client/assets/{block-document-Mhky6a-Y.js → block-document-DZ5eZnd4.js} +1 -1
  84. package/dist/client/assets/{blocks-preview-workspace-context-DzJ8SMZ1.js → blocks-preview-workspace-context-DZFHbEt5.js} +1 -1
  85. package/dist/client/assets/{blog-schema-CAX9wXaL.js → blog-schema-CW5b1zW6.js} +1 -1
  86. package/dist/client/assets/{board-analytics-D110DxNA.js → board-analytics-Dxe4o8ip.js} +1 -1
  87. package/dist/client/assets/{buckets-C9rFvK2M.js → buckets-CHH4zUVE.js} +1 -1
  88. package/dist/client/assets/{build-improve-prompt-doc-DR2Es921.js → build-improve-prompt-doc-DtDq3oLF.js} +1 -1
  89. package/dist/client/assets/{calendar-CKSj2y-l.js → calendar-BTm6tG9I.js} +1 -1
  90. package/dist/client/assets/{capability-load-error-C29lQbTt.js → capability-load-error-_NmD-cOl.js} +1 -1
  91. package/dist/client/assets/{category-editor-zrsILNC7.js → category-editor-DYUGLxsQ.js} +1 -1
  92. package/dist/client/assets/{chart-BGPsHSIz.js → chart-Ca9eR_5Y.js} +1 -1
  93. package/dist/client/assets/{chat-context-B7ixwukH.js → chat-context-DPuof8Lx.js} +1 -1
  94. package/dist/client/assets/{chat-draft-BrKCO6YT.js → chat-draft-CoTQGBD-.js} +1 -1
  95. package/dist/client/assets/{checkbox-CVc_t6AM.js → checkbox-B5y_PGOi.js} +1 -1
  96. package/dist/client/assets/{choose-editor-DXM40rwk.js → choose-editor-DIX9TXPq.js} +1 -1
  97. package/dist/client/assets/{claim-phase-copy-DhUnD0f3.js → claim-phase-copy-BFw44X02.js} +1 -1
  98. package/dist/client/assets/{cli-auth-success-B_LhHRr2.js → cli-auth-success-C6re7iuj.js} +1 -1
  99. package/dist/client/assets/{client-icons-CeVn-7HQ.js → client-icons-CPh76puz.js} +1 -1
  100. package/dist/client/assets/{collapsible-RIZMF3og.js → collapsible-B1qwBokh.js} +1 -1
  101. package/dist/client/assets/{collection-detail-BNdoguU8.js → collection-detail-wRbiZfyr.js} +1 -1
  102. package/dist/client/assets/{collection-display-button-B05GAPuS.js → collection-display-button-BUb3CJ9K.js} +1 -1
  103. package/dist/client/assets/{collection-search-BhTdq2ic.js → collection-search-CxS-WOiV.js} +1 -1
  104. package/dist/client/assets/{collection-table-wrapper-iLWfdfAw.js → collection-table-wrapper-DieyB_hA.js} +1 -1
  105. package/dist/client/assets/{collection-tabs-hvD3R6sE.js → collection-tabs-KA7T80MC.js} +1 -1
  106. package/dist/client/assets/{column-rules-BmNAI4d1.js → column-rules-CI9Lb7JH.js} +1 -1
  107. package/dist/client/assets/{combobox-BP3ADxyT.js → combobox-Dtc7uzBz.js} +1 -1
  108. package/dist/client/assets/{command-CfJ_yZL1.js → command-Bv9q3oXB.js} +1 -1
  109. package/dist/client/assets/{companion-mcps-section-vz_F8aij.js → companion-mcps-section-yLUv_IVZ.js} +1 -1
  110. package/dist/client/assets/{config-qgEB96wk.js → config-HoNqSkEt.js} +1 -1
  111. package/dist/client/assets/{connect-layout-Df-yaTtv.js → connect-layout-CaGlUaZ7.js} +1 -1
  112. package/dist/client/assets/{connect-CmA_24Lv.js → connect-x3ItRenb.js} +1 -1
  113. package/dist/client/assets/{connection-BjQqCa6n.js → connection-C1oBRXZ9.js} +1 -1
  114. package/dist/client/assets/{connection-card-B5kZBtAI.js → connection-card-ChCwtZgM.js} +1 -1
  115. package/dist/client/assets/{connection-detail-llruLhvc.js → connection-detail-D2UPCyZx.js} +1 -1
  116. package/dist/client/assets/{connection-form-helpers-BiaAn5T-.js → connection-form-helpers-Co-FH2GL.js} +1 -1
  117. package/dist/client/assets/{connections-Rhsq_PHY.js → connections-dkoZ4UmD.js} +1 -1
  118. package/dist/client/assets/{context-k9qseXLi.js → context-L3sdAYq1.js} +1 -1
  119. package/dist/client/assets/{context-menu-B1iKTjcY.js → context-menu-ci_wm1iD.js} +1 -1
  120. package/dist/client/assets/{core.esm-BDr1jUfa.js → core.esm-DBwtvJuA.js} +1 -1
  121. package/dist/client/assets/{create-organization-dialog-C3LOlpX9.js → create-organization-dialog-5xMTV1HD.js} +1 -1
  122. package/dist/client/assets/{daily-pulse-D0hL2Mgc.js → daily-pulse-Daf5yGVF.js} +1 -1
  123. package/dist/client/assets/{device-hint-JTf0kvkS.js → device-hint-BrWR2ybl.js} +1 -1
  124. package/dist/client/assets/{discover-BYjmCOgU.js → discover-DQJMsLOC.js} +1 -1
  125. package/dist/client/assets/{domain-settings-8ti6F4Nt.js → domain-settings-BDkTtrtZ.js} +1 -1
  126. package/dist/client/assets/{drawer-NA8X67Cn.js → drawer-DgE1Osed.js} +1 -1
  127. package/dist/client/assets/{editor-D7dKbHsZ.js → editor-Cy4QovB4.js} +1 -1
  128. package/dist/client/assets/{empty-state-DZ11Jnto.js → empty-state-CUrIt7uA.js} +1 -1
  129. package/dist/client/assets/{empty-state-CXB5kfzH.js → empty-state-DYMOp3h6.js} +1 -1
  130. package/dist/client/assets/{extract-connection-data-BTRj6ggn.js → extract-connection-data-CILHH2Xu.js} +1 -1
  131. package/dist/client/assets/{feature-gate-DUnCy-Qc.js → feature-gate-YfudQg0F.js} +1 -1
  132. package/dist/client/assets/{feature-paywall-BtZlJS8N.js → feature-paywall-DRC24-WT.js} +1 -1
  133. package/dist/client/assets/{file-explorer-ahAqk6OL.js → file-explorer-Dn5VXdTz.js} +1 -1
  134. package/dist/client/assets/{file-preview-DLq_TOpg.js → file-preview-BOfVvGBK.js} +1 -1
  135. package/dist/client/assets/{file-share-button-Boymlg-_.js → file-share-button-Ds1jkcUw.js} +1 -1
  136. package/dist/client/assets/{file-type-icon-CR_8nRKJ.js → file-type-icon-DGZn7b1q.js} +1 -1
  137. package/dist/client/assets/flat-project-DohBB_k-.js +1 -0
  138. package/dist/client/assets/{folder-icon-BKmLVsTk.js → folder-icon-NJlrSxZ7.js} +1 -1
  139. package/dist/client/assets/{form-BBSMmS7M.js → form-5FKfuXwS.js} +1 -1
  140. package/dist/client/assets/{general-C_ztpdNf.js → general-BdG9aUE5.js} +1 -1
  141. package/dist/client/assets/{home-B4BBGMuj.js → home-Rt2zQeR1.js} +1 -1
  142. package/dist/client/assets/{icon-button-DkGaGjbK.js → icon-button-BIVgkjge.js} +1 -1
  143. package/dist/client/assets/{index-JcJUDiMG.js → index-807EZ9UE.js} +1 -1
  144. package/dist/client/assets/{index-BFNmnlkM.js → index-BFhkoNSH.js} +1 -1
  145. package/dist/client/assets/{index-Dv-VqjPz.js → index-CPTOUBV5.js} +1 -1
  146. package/dist/client/assets/{index-BEWyz4IL.js → index-CVUxtkJO.js} +1 -1
  147. package/dist/client/assets/{index-CvkEkbZF.js → index-Cgvxdf_Q.js} +2 -2
  148. package/dist/client/assets/{index-Cz6k2mHL.js → index-CnJlMbWp.js} +1 -1
  149. package/dist/client/assets/{index-DNz5LfZo.js → index-D2YD4wQb.js} +1 -1
  150. package/dist/client/assets/{index-m_iMIYWi.js → index-DCV1G4Vi.js} +3 -3
  151. package/dist/client/assets/{index-C6YI2JtB.js → index-DPnYGLNH.js} +1 -1
  152. package/dist/client/assets/{index-CIkbTjtJ.js → index-DQzSsgCm.js} +1 -1
  153. package/dist/client/assets/{index-wv7M3764.js → index-DsrMcmtK.js} +1 -1
  154. package/dist/client/assets/{index-CtrX9wjc.js → index-KYovqQVt.js} +1 -1
  155. package/dist/client/assets/{index-redirect-uIRRxmIA.js → index-redirect-Bn1MaA0x.js} +1 -1
  156. package/dist/client/assets/{index-CWwSTXul.js → index-urrD3slz.js} +1 -1
  157. package/dist/client/assets/{infiniteQueryObserver-D-zgijef.js → infiniteQueryObserver-DwnyW_tg.js} +1 -1
  158. package/dist/client/assets/{infra-billing-B_ALAMr6.js → infra-billing-C7Gt7pP6.js} +1 -1
  159. package/dist/client/assets/{input-ChjC7XxY.js → input-BvEtvuLy.js} +3 -3
  160. package/dist/client/assets/{input-BqrqWGgY.js → input-D1FQHGyA.js} +1 -1
  161. package/dist/client/assets/{integration-icon-Cie7dlB4.js → integration-icon-B9BPa6xZ.js} +1 -1
  162. package/dist/client/assets/{jira-icon-B-lNy42i.js → jira-icon-BPd8rXDD.js} +1 -1
  163. package/dist/client/assets/{label-B7m6NrjR.js → label-8JLWVV6w.js} +1 -1
  164. package/dist/client/assets/{layout-Gg6sfuOK.js → layout-CteePcNB.js} +1 -1
  165. package/dist/client/assets/{legacy-agents-deep-BSjkPeUW.js → legacy-agents-deep-BU9G_qyx.js} +1 -1
  166. package/dist/client/assets/{legacy-main-redirect-DGr5DSt-.js → legacy-main-redirect--KMXMJZX.js} +1 -1
  167. package/dist/client/assets/library-Bk-wI1G3.js +1 -0
  168. package/dist/client/assets/{library-tab-Bx7zV5q2.js → library-tab-BFAr00ch.js} +1 -1
  169. package/dist/client/assets/{login-BvuIcKwC.js → login-DI6I_2QT.js} +1 -1
  170. package/dist/client/assets/{markdown-Cyku6Bit.js → markdown-uBKSlcRL.js} +1 -1
  171. package/dist/client/assets/{mcp-app-renderer-_GpfDdeh.js → mcp-app-renderer-CErXUSq-.js} +1 -1
  172. package/dist/client/assets/{mcp-oauth-DeKiTKLu.js → mcp-oauth-AlD-TzSE.js} +1 -1
  173. package/dist/client/assets/{mcp-oauth-oyIK_tB1.js → mcp-oauth-sRx18rfQ.js} +1 -1
  174. package/dist/client/assets/{members-DNBLZQhM.js → members-CPBPwKZ1.js} +1 -1
  175. package/dist/client/assets/{memory-BtqyTWr8.js → memory-CJihkZvO.js} +1 -1
  176. package/dist/client/assets/{mini-report-page-DfIvIWa4.js → mini-report-page-DFzjTxjy.js} +1 -1
  177. package/dist/client/assets/{mock-board-xsoKwtdR.js → mock-board-biK2PfSA.js} +1 -1
  178. package/dist/client/assets/{monaco-editor-BcVwR88i.js → monaco-editor-BsWCzYXO.js} +1 -1
  179. package/dist/client/assets/{monitoring-stats-row-DNdMRFxn.js → monitoring-stats-row-IO7yauKf.js} +1 -1
  180. package/dist/client/assets/{multi-select-CfULd_Rx.js → multi-select-BNjoAfeC.js} +1 -1
  181. package/dist/client/assets/{mustache-o_TIeFdF.js → mustache-rvHVzPnO.js} +1 -1
  182. package/dist/client/assets/{new-project-dialog-CCTwabFu.js → new-project-dialog-BNMMgasu.js} +1 -1
  183. package/dist/client/assets/{oauth-callback-DP4tF534.js → oauth-callback-BeTiKSrh.js} +1 -1
  184. package/dist/client/assets/{oauth-callback-ai-provider-DnRBh9uO.js → oauth-callback-ai-provider-DDLk0zHp.js} +1 -1
  185. package/dist/client/assets/{onboarding-yow8oG4G.js → onboarding-BjDnSa2-.js} +1 -1
  186. package/dist/client/assets/{openai-conversation-d_Xs65HZ.js → openai-conversation-B69u3s77.js} +1 -1
  187. package/dist/client/assets/{optimistic-project-sidebar-views-9OadUgjT.js → optimistic-project-sidebar-views-bgF9KdQy.js} +1 -1
  188. package/dist/client/assets/{organization-choice-CDDi_uTO.js → organization-choice-udNpLdVM.js} +1 -1
  189. package/dist/client/assets/{orgs-CUmDeH_J.js → orgs-BXO2vhOY.js} +1 -1
  190. package/dist/client/assets/{page-seo-form--bS1Q_MY.js → page-seo-form-zD7DmA6N.js} +1 -1
  191. package/dist/client/assets/{pair-Bjrecdzi.js → pair-DIssvTMn.js} +1 -1
  192. package/dist/client/assets/{plan-ladder-B2h7Dujg.js → plan-ladder-CAWIPKc5.js} +1 -1
  193. package/dist/client/assets/{popover-KZcyVDI5.js → popover-13pjOuZU.js} +1 -1
  194. package/dist/client/assets/{post-calendar-Fmw8glqd.js → post-calendar-rAhG8kBe.js} +1 -1
  195. package/dist/client/assets/{post-editor-Dsj5Ibag.js → post-editor-B6gbS3Ci.js} +1 -1
  196. package/dist/client/assets/{preview-content-Dh8Rmbe6.js → preview-content-DLC7444f.js} +1 -1
  197. package/dist/client/assets/{preview-dialog-Bml9zm4Y.js → preview-dialog-CjNOBFAp.js} +1 -1
  198. package/dist/client/assets/{preview-panel-B_1L-tuG.js → preview-panel-ClNcZ7Jq.js} +1 -1
  199. package/dist/client/assets/{product-picker-dialog-DoSgNDYX.js → product-picker-dialog-9jWzS0xD.js} +1 -1
  200. package/dist/client/assets/{profile-DjPOIV3n.js → profile-szk-J5OE.js} +1 -1
  201. package/dist/client/assets/{project-app-view-DhXwsdyH.js → project-app-view-BScfdH5R.js} +1 -1
  202. package/dist/client/assets/{project-feed-Cg0FAsjP.js → project-feed-D8bVgmrv.js} +1 -1
  203. package/dist/client/assets/{project-icon-Da9vkmla.js → project-icon-BEB7bo0T.js} +1 -1
  204. package/dist/client/assets/project-reports-CYk0gIHi.js +1 -0
  205. package/dist/client/assets/project-tasks-T7wij8vs.js +1 -0
  206. package/dist/client/assets/{projects-empty-state-mNzYEnJq.js → projects-empty-state-GodmIrGy.js} +1 -1
  207. package/dist/client/assets/{projects--BD3Pi5O.js → projects-zc5zuYNt.js} +1 -1
  208. package/dist/client/assets/{prompts-867OeL4C.js → prompts-C1AIYXZy.js} +1 -1
  209. package/dist/client/assets/record-editor-D8HTL-dd.js +1 -0
  210. package/dist/client/assets/redirect-editor-C5Fcvp6l.js +1 -0
  211. package/dist/client/assets/reports-BZvTaNDE.js +1 -0
  212. package/dist/client/assets/{reports-CDcs9KF3.js → reports-Cd8g8CNj.js} +1 -1
  213. package/dist/client/assets/{reports-onboarding-C1hpBv4P.js → reports-onboarding-8b6ysmBv.js} +1 -1
  214. package/dist/client/assets/{reports-tab-ChkUNvxL.js → reports-tab-BI41LuK6.js} +2 -2
  215. package/dist/client/assets/{repositories-cVNrUSk6.js → repositories-SY3BCP97.js} +1 -1
  216. package/dist/client/assets/{repository-binding-Diab2gJI.js → repository-binding-OIkiiBn_.js} +1 -1
  217. package/dist/client/assets/{repository-import-picker-CAPqT49B.js → repository-import-picker-BD05Qbz9.js} +1 -1
  218. package/dist/client/assets/{repository-picker-wpyEK2Xc.js → repository-picker-DHYERC22.js} +1 -1
  219. package/dist/client/assets/{require-capability-BVRaCsRX.js → require-capability-HLF-G2Gn.js} +1 -1
  220. package/dist/client/assets/{required-auth-layout-BlMmzcBE.js → required-auth-layout-COVLs567.js} +1 -1
  221. package/dist/client/assets/{reset-password-DEXRYELW.js → reset-password-D3tROrku.js} +1 -1
  222. package/dist/client/assets/{resizable-B1DqKMtx.js → resizable-CYK8YYKx.js} +1 -1
  223. package/dist/client/assets/{resolve-tab-icon-B4Xubt6P.js → resolve-tab-icon-DRYlqyoT.js} +1 -1
  224. package/dist/client/assets/{review-settings-x4SlctNv.js → review-settings-DpOwh6kJ.js} +1 -1
  225. package/dist/client/assets/{rich-text-link-control-C0PrMBov.js → rich-text-link-control-yKpCLxk-.js} +1 -1
  226. package/dist/client/assets/{roles-C7UEXuzR.js → roles-H-ySJM8T.js} +1 -1
  227. package/dist/client/assets/route-0IOE_iwR.js +1 -0
  228. package/dist/client/assets/{route-BZiixBAG.js → route-DYvSeMz7.js} +1 -1
  229. package/dist/client/assets/{route-DZ6_uTYn.js → route-Dr_7m0Tv.js} +1 -1
  230. package/dist/client/assets/{runnable-block-editor-BbKz7DQH.js → runnable-block-editor-B77rsBAp.js} +1 -1
  231. package/dist/client/assets/{sandbox-lifecycle-context-DOC3PBsO.js → sandbox-lifecycle-context-cevNxEEE.js} +1 -1
  232. package/dist/client/assets/{schema-3_3MP7ZZ.js → schema-CLUxJ2Aq.js} +1 -1
  233. package/dist/client/assets/{scroll-area-ClRSjtLV.js → scroll-area-BerbxwSa.js} +1 -1
  234. package/dist/client/assets/{search-input-9d3onxt-.js → search-input-Eqbgvt1Z.js} +1 -1
  235. package/dist/client/assets/{search-toggle-BFbMmpZT.js → search-toggle-DjnCmeKu.js} +1 -1
  236. package/dist/client/assets/{secret-picker-4GV6jMAI.js → secret-picker-D_IInK4O.js} +1 -1
  237. package/dist/client/assets/{secrets-DWQ4G6Sx.js → secrets-ChTLi-FR.js} +1 -1
  238. package/dist/client/assets/{sections-editor-DLdVQU9n.js → sections-editor-BcCRV-fD.js} +1 -1
  239. package/dist/client/assets/{select-BYlHrgDe.js → select-CTpu637-.js} +1 -1
  240. package/dist/client/assets/{select-model-1_S8Jip8.js → select-model-BwS3mp6E.js} +1 -1
  241. package/dist/client/assets/{seo-editor-DcLNXiwq.js → seo-editor-CL5enOUs.js} +1 -1
  242. package/dist/client/assets/{separator-DtFDelDc.js → separator-BHuQN-Ab.js} +1 -1
  243. package/dist/client/assets/{settings-tab-D92XwErA.js → settings-tab-CHZtgFBe.js} +1 -1
  244. package/dist/client/assets/{sheet-Dt9lpT7b.js → sheet-C6FCafA6.js} +1 -1
  245. package/dist/client/assets/{shell-layout-Bv5Sek6Y.js → shell-layout-CGyXmROi.js} +1 -1
  246. package/dist/client/assets/{skills-6-fiePmJ.js → skills-F5Uw4Pv1.js} +1 -1
  247. package/dist/client/assets/{slider-CKduu4Fn.js → slider-d3xYNxIE.js} +1 -1
  248. package/dist/client/assets/{sortable.esm-DPSFDajj.js → sortable.esm-C6z3vfiq.js} +1 -1
  249. package/dist/client/assets/{sso-DkPhSrvw.js → sso-CmIeF-7l.js} +1 -1
  250. package/dist/client/assets/{suggestion-DOpLmNQe.js → suggestion-TsE32nPi.js} +1 -1
  251. package/dist/client/assets/{switch-AEq1Ywu_.js → switch-TCI26U0b.js} +1 -1
  252. package/dist/client/assets/{symbol-C4xjMjdj.js → symbol-Bmeb5mrx.js} +1 -1
  253. package/dist/client/assets/{synced-repos-DoTaXu1d.js → synced-repos-CFRe6JC2.js} +1 -1
  254. package/dist/client/assets/{tab-icon-glyph-D0kyNG52.js → tab-icon-glyph-gi6BIarB.js} +1 -1
  255. package/dist/client/assets/{table-xlf7vkj_.js → table-pVUW2rwH.js} +1 -1
  256. package/dist/client/assets/{tabs-D7DC2cRI.js → tabs-BE3vAj8m.js} +1 -1
  257. package/dist/client/assets/{task-board-BdDYkWlj.js → task-board-90M9g_fi.js} +1 -1
  258. package/dist/client/assets/{task-route-CUv19cmC.js → task-route-CS8UQngR.js} +1 -1
  259. package/dist/client/assets/{task-status-DBiu_sll.js → task-status-C9ibacuz.js} +1 -1
  260. package/dist/client/assets/taskboard-analytics-D8c5pILu.js +1 -0
  261. package/dist/client/assets/tasks-B9K3xklH.js +1 -0
  262. package/dist/client/assets/{tasks-CqusizRk.js → tasks-BqDBNIqA.js} +1 -1
  263. package/dist/client/assets/{textarea-I3De7vqg.js → textarea-BpAK_nVQ.js} +1 -1
  264. package/dist/client/assets/{thread-analytics-CRKk825k.js → thread-analytics-DIkW4P-1.js} +1 -1
  265. package/dist/client/assets/{thread-button-DXETp5tJ.js → thread-button-EBdfzXFx.js} +1 -1
  266. package/dist/client/assets/{thread-intent-C-TbGTua.js → thread-intent-CRpeRnx2.js} +1 -1
  267. package/dist/client/assets/{thread-route-D_yIM5gK.js → thread-route-Ck1dYsiI.js} +1 -1
  268. package/dist/client/assets/{thread-route-BhnTkbv5.js → thread-route-zMAwqLeS.js} +1 -1
  269. package/dist/client/assets/{thread-sheet-body-BY8IWwzS.js → thread-sheet-body-CT23RfVg.js} +1 -1
  270. package/dist/client/assets/{time-range-picker-L6TIyBjU.js → time-range-picker-dZaUQ5ot.js} +1 -1
  271. package/dist/client/assets/{toggle-group-Br_OBwpv.js → toggle-group-Cmucm9d_.js} +1 -1
  272. package/dist/client/assets/{tool-namespace-KxcOJjNS.js → tool-namespace-W6oSGBwY.js} +1 -1
  273. package/dist/client/assets/{toolbar-icon-button-CzlG5jfK.js → toolbar-icon-button-D_zSUxYE.js} +1 -1
  274. package/dist/client/assets/{tooltip-CQtbKEbv.js → tooltip-CiYSgLFK.js} +1 -1
  275. package/dist/client/assets/{tooltipContext-CRvwH17A.js → tooltipContext-Daig5_qo.js} +1 -1
  276. package/dist/client/assets/{track-DSZ6JNAX.js → track-BNVgjI-e.js} +1 -1
  277. package/dist/client/assets/{types-C1Mw_99A.js → types-DzWYDlOK.js} +1 -1
  278. package/dist/client/assets/{url-slug-CTpJRedE.js → url-slug-BtTWMETT.js} +1 -1
  279. package/dist/client/assets/{usage-stats-CUfUVubb.js → usage-stats-BZiqC0Eq.js} +1 -1
  280. package/dist/client/assets/{use-ai-providers-CjzrdRNJ.js → use-ai-providers-D_-p2XHZ.js} +1 -1
  281. package/dist/client/assets/{use-automations-rSR1F0M4.js → use-automations-AknZaEXT.js} +1 -1
  282. package/dist/client/assets/{use-autosave-DMLPE4t_.js → use-autosave-DOY-TitN.js} +1 -1
  283. package/dist/client/assets/{use-chat-layout-state-C79Hg2yc.js → use-chat-layout-state-BGJ7hecp.js} +1 -1
  284. package/dist/client/assets/{use-chat-navigation-BRFRCeuv.js → use-chat-navigation-Dn06-EpQ.js} +1 -1
  285. package/dist/client/assets/{use-clock-tick-BXc6ohp1.js → use-clock-tick-vjL0x3S6.js} +1 -1
  286. package/dist/client/assets/{use-connect-companion-DSYtVNc7.js → use-connect-companion-Cfgp9MjD.js} +1 -1
  287. package/dist/client/assets/{use-connection-BHRfoOud.js → use-connection-BReUf0ym.js} +1 -1
  288. package/dist/client/assets/{use-copy-Csln4Pda.js → use-copy-BA_1zlIX.js} +1 -1
  289. package/dist/client/assets/{use-create-virtual-mcp-CUR-7WWu.js → use-create-virtual-mcp-mFuwkPSo.js} +1 -1
  290. package/dist/client/assets/{use-date-fns-locale-DLPMhDmo.js → use-date-fns-locale-BtKmaD89.js} +1 -1
  291. package/dist/client/assets/{use-debounced-autosave-DdZOXKrA.js → use-debounced-autosave-BgCQLSRj.js} +1 -1
  292. package/dist/client/assets/{use-debounced-value-C_VfXq2U.js → use-debounced-value-DppivyxK.js} +1 -1
  293. package/dist/client/assets/{use-deco-credits-PK7G7t4U.js → use-deco-credits-C6g5nuGf.js} +1 -1
  294. package/dist/client/assets/{use-decopilot-events-3d9-CwOW.js → use-decopilot-events-BAyb-mQF.js} +1 -1
  295. package/dist/client/assets/{use-delete-connection-CDExFOVk.js → use-delete-connection-xCFE_9as.js} +1 -1
  296. package/dist/client/assets/{use-deployment-admin-CvxHuxOS.js → use-deployment-admin-k8c5st8B.js} +1 -1
  297. package/dist/client/assets/{use-ensure-project-folder-CiixVwYS.js → use-ensure-project-folder-C-CBLCjO.js} +1 -1
  298. package/dist/client/assets/{use-fast-preview-draft-url-nXHVGGIA.js → use-fast-preview-draft-url-DpZxJT8R.js} +1 -1
  299. package/dist/client/assets/{use-file-configs-BUqTgf7p.js → use-file-configs-D-lKeneW.js} +1 -1
  300. package/dist/client/assets/{use-infinite-scroll-CGgZOckb.js → use-infinite-scroll-BKpwTLbY.js} +1 -1
  301. package/dist/client/assets/{use-join-requests-BnD3GHpg.js → use-join-requests-BFtAo-Nh.js} +1 -1
  302. package/dist/client/assets/{use-main-panel-tabs-D2yVxw9s.js → use-main-panel-tabs-DeC1fHi6.js} +1 -1
  303. package/dist/client/assets/{use-mcp-auth-status-D-wQ9FWj.js → use-mcp-auth-status-I_Qut9IE.js} +1 -1
  304. package/dist/client/assets/{use-mcp-client-CBoRmtFo.js → use-mcp-client-BnJ4CmVv.js} +1 -1
  305. package/dist/client/assets/{use-mcp-prompts-C3H87HP4.js → use-mcp-prompts-pprT3y3c.js} +1 -1
  306. package/dist/client/assets/{use-mcp-tools-BfdbHPtH.js → use-mcp-tools-nBYl_9Cj.js} +1 -1
  307. package/dist/client/assets/{use-members-DCcQy8NS.js → use-members-CjMEwjKK.js} +1 -1
  308. package/dist/client/assets/{use-mobile-DHDQrS92.js → use-mobile-CaE2VxXh.js} +1 -1
  309. package/dist/client/assets/{use-navigate-to-agent-CBJVz0YU.js → use-navigate-to-agent-C9CNI3wT.js} +1 -1
  310. package/dist/client/assets/use-new-blocks-editor-Dhap32-H.js +1 -0
  311. package/dist/client/assets/{use-open-billing-url-DYalJRBM.js → use-open-billing-url-C77XyoLh.js} +1 -1
  312. package/dist/client/assets/{use-org-auth-client-CQhEfpFE.js → use-org-auth-client-CA-MyDFx.js} +1 -1
  313. package/dist/client/assets/{use-org-fs-CR48g8_P.js → use-org-fs-BvswiWhM.js} +1 -1
  314. package/dist/client/assets/{use-org-repo-syncs-C4CqaNPe.js → use-org-repo-syncs-BZsUkIPj.js} +1 -1
  315. package/dist/client/assets/{use-org-sso-DqlYZMd5.js → use-org-sso-uVC0Aeyi.js} +1 -1
  316. package/dist/client/assets/{use-organization-roles-Co0Vqzi3.js → use-organization-roles-DHpuUweO.js} +1 -1
  317. package/dist/client/assets/{use-organization-settings-BoQ-3bUn.js → use-organization-settings-CcdWKIZG.js} +1 -1
  318. package/dist/client/assets/{use-panel-navigate-5IaTMf0W.js → use-panel-navigate-BwaxzeCI.js} +1 -1
  319. package/dist/client/assets/{use-project-scope-DhGkOd7x.js → use-project-scope-DIXfNogh.js} +1 -1
  320. package/dist/client/assets/{use-releases-B2i3mkXU.js → use-releases-By4PMCal.js} +1 -1
  321. package/dist/client/assets/{use-reports-diagnostic-Z-QISjJo.js → use-reports-diagnostic-Bh5K_gdR.js} +1 -1
  322. package/dist/client/assets/{use-sandbox-events-4HFbLlVd.js → use-sandbox-events-BuzKGb6t.js} +1 -1
  323. package/dist/client/assets/{use-secrets-ObT7hB_J.js → use-secrets-Be9wdGLq.js} +1 -1
  324. package/dist/client/assets/{use-section-preview-base-CKThWLiS.js → use-section-preview-base-Dah5aW9A.js} +1 -1
  325. package/dist/client/assets/{use-tags-BBeLFk4l.js → use-tags-CPiAfrfw.js} +1 -1
  326. package/dist/client/assets/{use-task-board-analytics-BnXBdPT0.js → use-task-board-analytics-BzVxQLaZ.js} +1 -1
  327. package/dist/client/assets/{use-task-board-events-Dmw0mTzd.js → use-task-board-events-AoW8CB16.js} +1 -1
  328. package/dist/client/assets/{use-task-board-item-prs-C8Xn9Vf_.js → use-task-board-item-prs-Cm1nLJbF.js} +1 -1
  329. package/dist/client/assets/{use-task-board-items-xt5k2e3E.js → use-task-board-items-YxLDtbf_.js} +1 -1
  330. package/dist/client/assets/{use-task-metadata-BtIFipqq.js → use-task-metadata-B9JzZCwZ.js} +1 -1
  331. package/dist/client/assets/{use-thread-analytics-D9xOHQFN.js → use-thread-analytics-DKolGKrG.js} +1 -1
  332. package/dist/client/assets/{use-thread-outputs-v6L6hLPo.js → use-thread-outputs-BeW_ZEj9.js} +1 -1
  333. package/dist/client/assets/useInfiniteQuery-CXvSW1zP.js +1 -0
  334. package/dist/client/assets/{useQueries-D7sPNAbk.js → useQueries-C5yFykqS.js} +1 -1
  335. package/dist/client/assets/useSuspenseInfiniteQuery-CFJbE4jf.js +1 -0
  336. package/dist/client/assets/{users-CohA04WM.js → users-BPaHw_X_.js} +1 -1
  337. package/dist/client/assets/{utils-CZAlkiGL.js → utils-D8EfxtqS.js} +1 -1
  338. package/dist/client/assets/{variant-calendar-YlhockIc.js → variant-calendar-Bo3CCQPM.js} +1 -1
  339. package/dist/client/assets/{variant-matcher-override-Ch08PbYs.js → variant-matcher-override-B8Xy0hwV.js} +1 -1
  340. package/dist/client/assets/{view-mode-toggle-6GOtrYS3.js → view-mode-toggle-CHGut8Gu.js} +1 -1
  341. package/dist/client/assets/{virtual-mcp-BvdMl-5h.js → virtual-mcp-DgndW5tn.js} +1 -1
  342. package/dist/client/assets/{watch-sse-pool-CuB8RiNq.js → watch-sse-pool-DNUoCrky.js} +1 -1
  343. package/dist/client/index.html +1 -1
  344. package/dist/server/server.js +2 -2
  345. package/package.json +1 -1
  346. package/dist/client/assets/agent-app-BP_zJSbn.js +0 -1
  347. package/dist/client/assets/agent-deck-RzemuGl7.js +0 -1
  348. package/dist/client/assets/agent-library-CC0bjZj1.js +0 -1
  349. package/dist/client/assets/agent-library-file-BSlUtfTI.js +0 -1
  350. package/dist/client/assets/agent-settings-6NCbPPF8.js +0 -1
  351. package/dist/client/assets/agent-site-editor-code-CKJCcxe8.js +0 -2
  352. package/dist/client/assets/agent-view-B3KFsBPm.js +0 -1
  353. package/dist/client/assets/api-keys-CO4qUFEE.js +0 -1
  354. package/dist/client/assets/app-editor-C1ZLULDh.js +0 -1
  355. package/dist/client/assets/flat-project-B34hikno.js +0 -1
  356. package/dist/client/assets/library-BQTdBCeN.js +0 -1
  357. package/dist/client/assets/project-reports-D7AvO1-d.js +0 -1
  358. package/dist/client/assets/project-tasks-Bkis008g.js +0 -1
  359. package/dist/client/assets/record-editor-ujycT1Q2.js +0 -1
  360. package/dist/client/assets/redirect-editor-COyH32KW.js +0 -1
  361. package/dist/client/assets/reports-BdmJCm1H.js +0 -1
  362. package/dist/client/assets/route-C1lmUe_X.js +0 -1
  363. package/dist/client/assets/taskboard-analytics-Bea9cC2r.js +0 -1
  364. package/dist/client/assets/tasks-BX3JKxDq.js +0 -1
  365. package/dist/client/assets/use-new-blocks-editor-BtqPnhyC.js +0 -1
  366. package/dist/client/assets/useInfiniteQuery-DVc0gFuD.js +0 -1
  367. package/dist/client/assets/useSuspenseInfiniteQuery-kmxM7DtM.js +0 -1
@@ -171,7 +171,7 @@ Keep both indexes concise \u2014 a curated list of durable facts and one-line po
171
171
  'jira_created_issue_keys',
172
172
  CASE WHEN ${X} @> ${Y} THEN ${X} ELSE ${X} || ${Y} END
173
173
  )`,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).returning(FQ`metadata->'jira_created_issue_keys'`.as("keys")).executeTakeFirst();if(!J)throw Error(`Thread ${$} not found`);return J.keys}async pinRuntimeIfUnset($,Z,Q){let Y=await this.db.updateTable("threads").set({harness_id:Q.harnessId,branch:FQ`coalesce(${FQ.ref("branch")}, ${Q.branch})`,updated_at:new Date().toISOString(),...Q.messageStorageVersion!==void 0?{message_storage_version:Q.messageStorageVersion}:{}}).where("id","=",$).where("organization_id","=",Z).where("harness_id","is",null).returningAll().executeTakeFirst();if(Y)return{thread:this.threadFromDbRow(Y),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async repinDecopilotToClaudeCode($,Z,Q){let Y=await this.db.updateTable("threads").set({harness_id:"claude-code",branch:FQ`case when ${FQ.ref("branch")} is null or ${FQ.ref("branch")} = 'ephemeral' then ${Q} else ${FQ.ref("branch")} end`,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("harness_id","=","decopilot").returningAll().executeTakeFirst();if(Y)return{thread:this.threadFromDbRow(Y),claimed:!0};return{thread:await this.get($,Z),claimed:!1}}async stampRuntimeIfAbsent($,Z,Q){return!!await this.db.updateTable("threads").set({metadata:FQ`coalesce(${FQ.ref("metadata")}, '{}'::jsonb)
174
- || jsonb_build_object('runtime', ${Q}::text)`}).where("id","=",$).where("organization_id","=",Z).where(FQ`coalesce(${FQ.ref("metadata")}, '{}'::jsonb) ->> 'runtime' is null`).returning("id").executeTakeFirst()}async completeRunIfNotCompleted($,Z){let Y=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Y?this.threadFromDbRow(Y):null}async markRunFailed($,Z,Q,Y){let J=(await this.db.updateTable("threads").set({status:"failed",failure_reason:Q,failure_kind:Y,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return J?this.threadFromDbRow(J):null}async failIfNotTerminal($,Z,Q,Y){let J=(await this.db.updateTable("threads").set({status:"failed",failure_reason:Q,failure_kind:Y,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","in",["in_progress","requires_action"]).returningAll().execute())[0];return J?this.threadFromDbRow(J):null}async requiresActionIfInProgress($,Z){let Y=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Y?this.threadFromDbRow(Y):null}async forceFailIfInProgress($,Z,Q){let Y=new Date().toISOString(),X=this.db.updateTable("threads").set({status:"failed",updated_at:Y}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(Q!=null)X=X.where("run_fence_token","=",Q);return((await X.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,Q){let Y=Q?.includeArchived===!0,X=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",Y).orderBy("updated_at","desc");if(Z)X=X.where("created_by","=",Z);let J=Q?.virtualMcpId??Q?.agentId;if(J)X=X.where("virtual_mcp_id","=",J);if(Q?.hasTrigger===!0)X=X.where("trigger_id","is not",null);else if(Q?.hasTrigger===!1)X=X.where("trigger_id","is",null);if(Q?.startDate)X=X.where("updated_at",">=",Q.startDate);if(Q?.endDate)X=X.where("updated_at","<=",Q.endDate);if(Q?.search)X=X.where("title","ilike",`%${bl(Q.search)}%`);if(Q?.status)X=X.where("status","=",Q.status);if(Q?.source)X=X.where(FQ`metadata->>'source'`,"=",Q.source);let G=this.db.selectFrom("threads").select((H)=>H.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",Y);if(Z)G=G.where("created_by","=",Z);if(J)G=G.where("virtual_mcp_id","=",J);if(Q?.hasTrigger===!0)G=G.where("trigger_id","is not",null);else if(Q?.hasTrigger===!1)G=G.where("trigger_id","is",null);if(Q?.startDate)G=G.where("updated_at",">=",Q.startDate);if(Q?.endDate)G=G.where("updated_at","<=",Q.endDate);if(Q?.search)G=G.where("title","ilike",`%${bl(Q.search)}%`);if(Q?.status)G=G.where("status","=",Q.status);if(Q?.source)G=G.where(FQ`metadata->>'source'`,"=",Q.source);if(Q?.limit)X=X.limit(Q.limit);if(Q?.offset)X=X.offset(Q.offset);let[W,K]=await Promise.all([X.execute(),G.executeTakeFirst()]);return{threads:W.map((H)=>this.threadFromDbRow(H)),total:Number(K?.count||0)}}async listByTriggerIds($,Z,Q){if(Z.length===0)return{threads:[],total:0};let Y=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),X=this.db.selectFrom("threads").select((W)=>W.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(Q?.limit)Y=Y.limit(Q.limit);if(Q?.offset)Y=Y.offset(Q.offset);let[J,G]=await Promise.all([Y.execute(),X.executeTakeFirst()]);return{threads:J.map((W)=>this.threadFromDbRow(W)),total:Number(G?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let Q=new Map;if(Z.length===0)return Q;let Y=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let X of Y)Q.set(X.virtual_mcp_id,{last_used_at:d2(X.created_at),last_used_by:X.created_by});return Q}async listWithLastMessage($,Z){let Q=this.db.selectFrom("threads as t").innerJoinLateral((X)=>X.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(X)=>X.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)Q=Q.where("t.created_by","=",Z.createdBy);return(await Q.execute()).map((X)=>({thread:this.threadFromDbRow(X),lastMessage:this.messageFromDbRow({id:X.lm_id,thread_id:X.lm_thread_id,metadata:X.lm_metadata,parts:X.lm_parts,role:X.lm_role,created_at:X.lm_created_at,updated_at:X.lm_updated_at})}))}async listMessages($,Z,Q){if(!await this.get($,Z))return{messages:[],total:0};let X=Q?.sort??"asc",J=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",X).orderBy("id",X),G=this.db.selectFrom("thread_messages").select((H)=>H.fn.count("id").as("count")).where("thread_id","=",$);if(Q?.limit)J=J.limit(Q.limit);if(Q?.offset)J=J.offset(Q.offset);let[W,K]=await Promise.all([J.execute(),G.executeTakeFirst()]);return{messages:W.map((H)=>this.messageFromDbRow(H)),total:Number(K?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:FQ`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let Q=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Q)return null;let Y=(X)=>{if(X==null)return null;let J=(X instanceof Date?X:new Date(X)).getTime();return Number.isNaN(J)?null:J};return{lastProgressAt:Y(Q.last_progress_at),runStartedAt:Y(Q.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set({run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:FQ`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let Q=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(Q==null)return null;return Q instanceof Date?Q:new Date(Q)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,Q,Y){await this.db.updateTable("threads").set({run_acked_seq:Y}).where("id","=",$).where("organization_id","=",Z).where((X)=>X.or([X("run_acked_seq","is",null),X("run_acked_seq","<",Y)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(Q){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,Q)}else Z=$.metadata;return Z=MH(Z)??{},{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?d2($.run_started_at):null,last_progress_at:$.last_progress_at?d2($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,harness_id:$.harness_id??null,metadata:Z,created_at:d2($.created_at),updated_at:d2($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1}}messageFromDbRow($){let Z,Q;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(Y){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,Y),Z=void 0}try{Q=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(Y){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,Y),Q=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:Q,role:$.role,created_at:d2($.created_at),updated_at:d2($.updated_at)}}}var Br=L(()=>{as();rQ();fw();Oe1()});import{sql as No0}from"kysely";function oJ0($){return $ instanceof Error&&$.message.includes(t84)}async function s84($,Z,Q){let X=`${Q.slice(0,o84).replace(/[%_\\]/g,"\\$&")}%`,[J,G]=await Promise.all([$.selectFrom("connections").select("url_slug as slug").where("organization_id","=",Z).where("url_slug","like",X).execute(),$.selectFrom("connection_slug_aliases").select("slug").where("organization_id","=",Z).where("slug","like",X).execute()]),W=new Set([...J,...G].map((H)=>H.slug)),K=1;while(W.has(Ut0(Q,K)))K++;return Ut0(Q,K)}async function sJ0($,Z,Q,Y){let X;for(;;){let J=await s84($,Z,Q);if(J===X)throw new Bo0(J);try{return await Y(J)}catch(G){if(!oJ0(G))throw G;X=J}}}async function rJ0($,Z,Q){let Y=g2.parse(Q);try{await $.transaction().execute(async(X)=>{let J=await X.selectFrom("connections").select(["organization_id","url_slug"]).where("id","=",Z).forUpdate().executeTakeFirst();if(!J)throw Error("Connection not found");if(J.url_slug===Y)return;let G=J.organization_id;if(await X.deleteFrom("connection_slug_aliases").where("organization_id","=",G).where("slug","=",Y).execute(),await X.updateTable("connections").set({url_slug:Y}).where("id","=",Z).execute(),J.url_slug)await X.insertInto("connection_slug_aliases").values({organization_id:G,slug:J.url_slug,connection_id:Z}).onConflict((W)=>W.columns(["organization_id","slug"]).doUpdateSet({connection_id:Z})).execute()})}catch(X){if(oJ0(X))throw new Bo0(Y);throw X}}async function we1($,Z,Q,Y){let X=Y==="project"?No0`c.connection_type = 'VIRTUAL'`:No0`c.connection_type <> 'VIRTUAL'`,{rows:J}=await No0`
174
+ || jsonb_build_object('runtime', ${Q}::text)`}).where("id","=",$).where("organization_id","=",Z).where(FQ`coalesce(${FQ.ref("metadata")}, '{}'::jsonb) ->> 'runtime' is null`).returning("id").executeTakeFirst()}async completeRunIfNotCompleted($,Z){let Y=(await this.db.updateTable("threads").set({status:"completed",run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Y?this.threadFromDbRow(Y):null}async markRunFailed($,Z,Q,Y){let J=(await this.db.updateTable("threads").set({status:"failed",failure_reason:Q,failure_kind:Y,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return J?this.threadFromDbRow(J):null}async failIfNotTerminal($,Z,Q,Y){let J=(await this.db.updateTable("threads").set({status:"failed",failure_reason:Q,failure_kind:Y,run_owner_pod:null,run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","in",["in_progress","requires_action"]).returningAll().execute())[0];return J?this.threadFromDbRow(J):null}async requiresActionIfInProgress($,Z){let Y=(await this.db.updateTable("threads").set({status:"requires_action",run_config:null,run_started_at:null,updated_at:new Date().toISOString()}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress").returningAll().execute())[0];return Y?this.threadFromDbRow(Y):null}async forceFailIfInProgress($,Z,Q){let Y=new Date().toISOString(),X=this.db.updateTable("threads").set({status:"failed",run_owner_pod:null,updated_at:Y}).where("id","=",$).where("organization_id","=",Z).where("status","=","in_progress");if(Q!=null)X=X.where("run_fence_token","=",Q);return((await X.executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete($,Z){await this.db.deleteFrom("threads").where("id","=",$).where("organization_id","=",Z).execute()}async list($,Z,Q){let Y=Q?.includeArchived===!0,X=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",Y).orderBy("updated_at","desc");if(Z)X=X.where("created_by","=",Z);let J=Q?.virtualMcpId??Q?.agentId;if(J)X=X.where("virtual_mcp_id","=",J);if(Q?.hasTrigger===!0)X=X.where("trigger_id","is not",null);else if(Q?.hasTrigger===!1)X=X.where("trigger_id","is",null);if(Q?.startDate)X=X.where("updated_at",">=",Q.startDate);if(Q?.endDate)X=X.where("updated_at","<=",Q.endDate);if(Q?.search)X=X.where("title","ilike",`%${bl(Q.search)}%`);if(Q?.status)X=X.where("status","=",Q.status);if(Q?.source)X=X.where(FQ`metadata->>'source'`,"=",Q.source);let G=this.db.selectFrom("threads").select((H)=>H.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",Y);if(Z)G=G.where("created_by","=",Z);if(J)G=G.where("virtual_mcp_id","=",J);if(Q?.hasTrigger===!0)G=G.where("trigger_id","is not",null);else if(Q?.hasTrigger===!1)G=G.where("trigger_id","is",null);if(Q?.startDate)G=G.where("updated_at",">=",Q.startDate);if(Q?.endDate)G=G.where("updated_at","<=",Q.endDate);if(Q?.search)G=G.where("title","ilike",`%${bl(Q.search)}%`);if(Q?.status)G=G.where("status","=",Q.status);if(Q?.source)G=G.where(FQ`metadata->>'source'`,"=",Q.source);if(Q?.limit)X=X.limit(Q.limit);if(Q?.offset)X=X.offset(Q.offset);let[W,K]=await Promise.all([X.execute(),G.executeTakeFirst()]);return{threads:W.map((H)=>this.threadFromDbRow(H)),total:Number(K?.count||0)}}async listByTriggerIds($,Z,Q){if(Z.length===0)return{threads:[],total:0};let Y=this.db.selectFrom("threads").selectAll().where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z).orderBy("updated_at","desc"),X=this.db.selectFrom("threads").select((W)=>W.fn.count("id").as("count")).where("organization_id","=",$).where("hidden","=",!1).where("trigger_id","in",Z);if(Q?.limit)Y=Y.limit(Q.limit);if(Q?.offset)Y=Y.offset(Q.offset);let[J,G]=await Promise.all([Y.execute(),X.executeTakeFirst()]);return{threads:J.map((W)=>this.threadFromDbRow(W)),total:Number(G?.count||0)}}async findLastUsedByVirtualMcpIds($,Z){let Q=new Map;if(Z.length===0)return Q;let Y=await this.db.selectFrom("threads").distinctOn("virtual_mcp_id").select(["virtual_mcp_id","created_by","created_at"]).where("organization_id","=",$).where("virtual_mcp_id","in",Z).orderBy("virtual_mcp_id").orderBy("created_at","desc").execute();for(let X of Y)Q.set(X.virtual_mcp_id,{last_used_at:d2(X.created_at),last_used_by:X.created_by});return Q}async listWithLastMessage($,Z){let Q=this.db.selectFrom("threads as t").innerJoinLateral((X)=>X.selectFrom("thread_messages as m").selectAll().whereRef("m.thread_id","=","t.id").orderBy("m.created_at","desc").orderBy("m.id","desc").limit(1).as("lm"),(X)=>X.onTrue()).selectAll("t").select(["lm.id as lm_id","lm.thread_id as lm_thread_id","lm.metadata as lm_metadata","lm.parts as lm_parts","lm.role as lm_role","lm.created_at as lm_created_at","lm.updated_at as lm_updated_at"]).where("t.organization_id","=",$).where("t.hidden","=",!1).where("lm.role","=",Z.lastMessageRole).orderBy("lm.created_at","desc").limit(Z.limit);if(Z.createdBy)Q=Q.where("t.created_by","=",Z.createdBy);return(await Q.execute()).map((X)=>({thread:this.threadFromDbRow(X),lastMessage:this.messageFromDbRow({id:X.lm_id,thread_id:X.lm_thread_id,metadata:X.lm_metadata,parts:X.lm_parts,role:X.lm_role,created_at:X.lm_created_at,updated_at:X.lm_updated_at})}))}async listMessages($,Z,Q){if(!await this.get($,Z))return{messages:[],total:0};let X=Q?.sort??"asc",J=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",$).orderBy("created_at",X).orderBy("id",X),G=this.db.selectFrom("thread_messages").select((H)=>H.fn.count("id").as("count")).where("thread_id","=",$);if(Q?.limit)J=J.limit(Q.limit);if(Q?.offset)J=J.offset(Q.offset);let[W,K]=await Promise.all([J.execute(),G.executeTakeFirst()]);return{messages:W.map((H)=>this.messageFromDbRow(H)),total:Number(K?.count||0)}}async bumpProgress($,Z){await this.db.updateTable("threads").set({last_progress_at:FQ`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getProgress($,Z){let Q=await this.db.selectFrom("threads").select(["last_progress_at","run_started_at"]).where("id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Q)return null;let Y=(X)=>{if(X==null)return null;let J=(X instanceof Date?X:new Date(X)).getTime();return Number.isNaN(J)?null:J};return{lastProgressAt:Y(Q.last_progress_at),runStartedAt:Y(Q.run_started_at)}}async getRunFence($){return(await this.db.selectFrom("threads").select("run_fence_token").where("id","=",$).executeTakeFirst())?.run_fence_token??null}async setRunFence($,Z){await this.db.updateTable("threads").set({run_fence_token:Z,run_acked_seq:null,status:"in_progress"}).where("id","=",$).execute()}async setCancelRequested($,Z){await this.db.updateTable("threads").set({cancel_requested_at:FQ`now()`}).where("id","=",$).where("organization_id","=",Z).execute()}async getCancelRequestedAt($){let Q=(await this.db.selectFrom("threads").select("cancel_requested_at").where("id","=",$).executeTakeFirst())?.cancel_requested_at;if(Q==null)return null;return Q instanceof Date?Q:new Date(Q)}async clearCancelRequested($){await this.db.updateTable("threads").set({cancel_requested_at:null}).where("id","=",$).execute()}async bumpAckedSeq($,Z,Q,Y){await this.db.updateTable("threads").set({run_acked_seq:Y}).where("id","=",$).where("organization_id","=",Z).where((X)=>X.or([X("run_acked_seq","is",null),X("run_acked_seq","<",Y)])).execute()}async getAckedSeq($,Z){return(await this.db.selectFrom("threads").select("run_acked_seq").where("id","=",$).where("organization_id","=",Z).executeTakeFirst())?.run_acked_seq??0}threadFromDbRow($){let Z={};if($.metadata!=null)if(typeof $.metadata==="string")try{Z=JSON.parse($.metadata)}catch(Q){console.error(`Failed to parse metadata for thread ${$.id}:`,$.metadata,Q)}else Z=$.metadata;return Z=MH(Z)??{},{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,status:$.status,trigger_id:$.trigger_id??null,context_start_message_id:$.context_start_message_id??null,run_owner_pod:$.run_owner_pod??null,run_config:$.run_config??null,run_started_at:$.run_started_at?d2($.run_started_at):null,last_progress_at:$.last_progress_at?d2($.last_progress_at):null,virtual_mcp_id:$.virtual_mcp_id??"",branch:$.branch??null,harness_id:$.harness_id??null,metadata:Z,created_at:d2($.created_at),updated_at:d2($.updated_at),created_by:$.created_by,updated_by:$.updated_by??void 0,hidden:!!$.hidden,message_storage_version:$.message_storage_version??1}}messageFromDbRow($){let Z,Q;try{Z=$.metadata?JSON.parse($.metadata):void 0}catch(Y){console.error(`Failed to parse metadata for message ${$.id}:`,$.metadata,Y),Z=void 0}try{Q=typeof $.parts==="string"?JSON.parse($.parts):$.parts}catch(Y){console.error(`Failed to parse parts for message ${$.id}:`,$.parts,Y),Q=[]}return{id:$.id,thread_id:$.thread_id,metadata:Z,parts:Q,role:$.role,created_at:d2($.created_at),updated_at:d2($.updated_at)}}}var Br=L(()=>{as();rQ();fw();Oe1()});import{sql as No0}from"kysely";function oJ0($){return $ instanceof Error&&$.message.includes(t84)}async function s84($,Z,Q){let X=`${Q.slice(0,o84).replace(/[%_\\]/g,"\\$&")}%`,[J,G]=await Promise.all([$.selectFrom("connections").select("url_slug as slug").where("organization_id","=",Z).where("url_slug","like",X).execute(),$.selectFrom("connection_slug_aliases").select("slug").where("organization_id","=",Z).where("slug","like",X).execute()]),W=new Set([...J,...G].map((H)=>H.slug)),K=1;while(W.has(Ut0(Q,K)))K++;return Ut0(Q,K)}async function sJ0($,Z,Q,Y){let X;for(;;){let J=await s84($,Z,Q);if(J===X)throw new Bo0(J);try{return await Y(J)}catch(G){if(!oJ0(G))throw G;X=J}}}async function rJ0($,Z,Q){let Y=g2.parse(Q);try{await $.transaction().execute(async(X)=>{let J=await X.selectFrom("connections").select(["organization_id","url_slug"]).where("id","=",Z).forUpdate().executeTakeFirst();if(!J)throw Error("Connection not found");if(J.url_slug===Y)return;let G=J.organization_id;if(await X.deleteFrom("connection_slug_aliases").where("organization_id","=",G).where("slug","=",Y).execute(),await X.updateTable("connections").set({url_slug:Y}).where("id","=",Z).execute(),J.url_slug)await X.insertInto("connection_slug_aliases").values({organization_id:G,slug:J.url_slug,connection_id:Z}).onConflict((W)=>W.columns(["organization_id","slug"]).doUpdateSet({connection_id:Z})).execute()})}catch(X){if(oJ0(X))throw new Bo0(Y);throw X}}async function we1($,Z,Q,Y){let X=Y==="project"?No0`c.connection_type = 'VIRTUAL'`:No0`c.connection_type <> 'VIRTUAL'`,{rows:J}=await No0`
175
175
  SELECT c.id, c.url_slug FROM connections c
176
176
  WHERE c.organization_id = ${Z}
177
177
  AND c.url_slug = ${Q} AND ${X}
@@ -4328,7 +4328,7 @@ ${J.join(`
4328
4328
  `)}`:X}function _55($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
4329
4329
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var dH8=200,P55=12,z55,T55,R55=6,M55=300,Lx0=3;var oE1=L(()=>{O7();UZ0();r$();Dx0();z55={aheadBy:0,behindBy:0,files:[]};T55=/(?:^|\/)\.deco\/blocks\/[^/]+\.json$/i});function b55($){if(!$||$.includes(".."))return!1;return v55.test($)}function nH8($){return x55.includes($)}function sE1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!b55(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function rE1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var v55,x55;var tH8=L(()=>{v55=/^[\w./@-]+$/;x55=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function OZ0($,Z){let Q=$?.repository;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function sH8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new Rz(t7);let J=await qN($.storage,X,Y);if(J&&await DL($.storage,J)){let F=await RN($,J,{forceRefresh:!0}).catch((U)=>{throw new Rz(U instanceof Error?U.message:t7)});await oH8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new Rz("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Ji({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:t7;throw new Rz(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await IN(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=mz$(F instanceof Error?F.message:String(F));throw U?new Rz(N):F});await oH8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function oH8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=kt($),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 UP(K,f55).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var f55=10485760,Rz;var aE1=L(()=>{v3();Xx0();t80();YN0();e$0();O7();Rz=class Rz extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function g55($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!y55.test(Z))throw Error(`Invalid branch name: ${$}`)}function bh($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(u55)])}async function c55($,Z){let Q=$.var.studioContext,Y=LY(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=cy(G?.metadata?.runtime);if(W)return W;let K=KM0(Z.virtualMcpMetadata),H=K==="cms"?await IE1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)o80(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 m55($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await WZ($.var.studioContext)}catch{return null}}function xt($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function jZ0($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=OZ0(Z,Q);if(!X)throw new y0({provider:"github",status:404,message:"Project has no repository"});let J=Y0(Y);return Qi(Y,J.id,X)}function $P1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=YP$(Z);if(Y!==void 0)return $.json({error:Q},429,{...uZ,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof Z5)return $.json({error:Q},409,uZ);let X=OK(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,uZ)}return $.json({error:Q},502,uZ)}async function eE1($,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 eH8($){try{let Z=await jZ0($),Q=await nE1(Z,$.get("vmClaim").branch);return $.json(Q,200,uZ)}catch(Z){return $P1($,Z)}}function wZ0($,Z){let Y=(wx0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return wx0.set($,X),X.finally(()=>{if(wx0.get($)===X)wx0.delete($)}),Y}async function yQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,uZ);let Y=Q?.runner??xt($);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",...uZ}})}}let D=await B.text(),O=Q?.redactRepoDir?d55(D):D,w=B.headers.get("content-type")??"application/json";return new Response(O,{status:B.status,headers:{"content-type":w,...uZ}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((O,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let D=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${D}`},502)}}function d55($){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 $F8($,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 i55($){return ZF8.includes($)}var y55,h55=524288,rH8=65536,u55=1e4,aH8=2000,l55,wx0,uZ,ZF8,QF8=()=>{let $=new Q1;$.use("/:virtualMcpId/:branch/*",l55),$.post("/:virtualMcpId/:branch/write",(Q)=>yQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:bh(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>yQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:bh(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>yQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:bh(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>yQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:bh(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>yQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:bh(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>yQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:bh(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>yQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:bh(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 yQ(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 yQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>yQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>yQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!i55(Y))return Q.json({error:`step must be one of: ${ZF8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await IE1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await m55(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,uZ);if(Y==="start"){let G=Y0(Q.var.studioContext),W=ui(X.virtualMcpMetadata);try{await XM0({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 yQ(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 zO(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 aK8(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 eH8(Q);return Z(Q)});let Z=(Q)=>yQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(aH8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return eH8(Q);return yQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(aH8)])})}),$.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 jZ0(Q),G=await tE1(J,Y.branch,X.base);return Q.json(G,200,uZ)}catch(X){return $P1(Q,X)}return yQ(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,uZ);let Y=xt(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return wZ0(X,async()=>{try{await VE1(W,Y,X);let K=OZ0(J,G);if(K)await sH8(W,Y,X,K)}catch(K){if(K instanceof Rz)return Q.json({error:K.message},403,uZ);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,uZ)}return yQ(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 wZ0(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,uZ);try{let G=await jZ0(Q);return await pH8(G,Y.branch,J),Q.json({ok:!0},200,uZ)}catch(G){let W=OK(G)===409||G instanceof Z5?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,uZ)}});return wZ0(Y.claimName,()=>yQ(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 wZ0(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await jZ0(Q),H=W.base??await K.getDefaultBranch();return await Ox0(K,Y.branch,H),Q.json({ok:!0},200,uZ)}catch(W){return $P1(Q,W)}});let X=xt(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return wZ0(J,async()=>{try{await VE1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,uZ)}return yQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/judge-review",h5({maxSize:h55,onError:(Q)=>Q.json({error:"Payload too large"},413,uZ)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=xt(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=ZH8(F)&&N?[F,U]:X?await Promise.all([$F8(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),$F8(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await jZ0(Q);return Promise.all([nE1(w,Y.branch),tE1(w,Y.branch)])})();await WK(K,Y0(K).id,"judging whether a change needs review");let O=await XH8(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(O,200,uZ)}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,uZ);return Q.json({error:F},502,uZ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=xt(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 eE1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",h5({maxSize:rH8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=xt(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=sE1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=rE1(J,W.resolveType);return eE1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",h5({maxSize:rH8,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):li(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=sE1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!nH8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=rE1(G,K.resolveType);return eE1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var YF8=L(()=>{W8();aK();Vt();ME1();hi();oK8();VQ();ci();sK8();OX();XF();rK8();eK8();hY1();n80();JH8();O7();k5();oE1();tH8();s80();aE1();y55=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;l55=Yx0(async($,Z)=>{let Q=$.var.studioContext;try{p(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=C0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=Y0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{g55(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=V80({orgId:X.id,virtualMcpId:J,branch:G}),H=await nY1(Q,G),F=tY1(H,Y),U=tK8({userId:F,projectRef:K}),N=W.metadata??null,B=await c55($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],runtime:B}),Z();let D;try{D=await WZ(Q)}catch{D=null}if(!D)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:D,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],runtime:B}),Z()});wx0=new Map;uZ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};ZF8=["clone","install","start"]});function XF8($,Z,Q){let Y=ZP1.get($);if(!Y)Y={pending:null,running:!1},ZP1.set($,Y);if(!Y.pending)Y.pending={patches:[],deps:Z};let X=Y.pending;X.deps=Z;let J=new Promise((G,W)=>{X.patches.push({patch:Q,resolve:G,reject:W})});if(!Y.running)n55($,Y);return J}async function n55($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let{sha:Y,accepted:X,conflicts:J}=await s55(Q);for(let G of X)G.resolve(Y);for(let{queued:G,blocks:W}of J)G.reject(new jx0(W))}catch(Y){for(let X of Q.patches)X.reject(Y)}}}finally{if(Z.running=!1,!Z.pending)ZP1.delete($)}}async function t55($,Z,Q,Y){let X=new Map,J=[];for(let W of Q){let K=Bx0(Z,W)[0],H=K?Z.find((F)=>F.path===K):void 0;if(!H)X.set(W,null);else J.push({key:W,stem:H.stem,sha:H.sha})}let G=await iE1($,J,Y);for(let[W,{content:K}]of G.entries()){let H=J[W].key;try{X.set(H,await Gx0(JSON.parse(K)))}catch{X.set(H,JF8)}}return X}async function o55($,Z){let Q=new Map(Z),Y=[],X=[];for(let J of $){let{patch:G}=J,W=Object.entries(G.expect??{}).filter(([K,H])=>{let F=Q.get(K);return F!==JF8&&F!==H}).map(([K])=>K);if(W.length>0){X.push({queued:J,blocks:W});continue}Y.push(J);for(let[K,H]of Object.entries(G.set??{}))if(Q.has(K))Q.set(K,await Gx0(H));for(let K of G.delete??[])if(Q.has(K))Q.set(K,null)}return{accepted:Y,conflicts:X}}async function s55($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await bt(Z,Q),W=await Z.listDecofileEntries(G,Y),K=dE1(W,Y),H=new Set($.patches.flatMap(({patch:j})=>Object.keys(j.expect??{}))),{accepted:F,conflicts:U}=await o55($.patches,H.size>0?await t55(Z,K,H,X):new Map),N=new Map,B=new Set;for(let{patch:j}of F){for(let[E,P]of Object.entries(j.set??{}))N.set(E,P),B.delete(E);for(let E of j.delete??[])B.add(E),N.delete(E)}let D=[],O=new Map(K.map((j)=>[j.path,{stem:j.stem,sha:j.sha}]));for(let[j,E]of N){let P=Bx0(K,j),T=`${JSON.stringify(E,null,2)}
4330
4330
  `;await lH8(Z.repo,T);let z=P[0]??`${Nx0(Y)}/${vE1(j)}.json`;D.push({path:z,content:T});let A=z.slice(z.lastIndexOf("/")+1,-5);O.set(z,{stem:A,content:T});for(let q of P.slice(1))D.push({path:q,deleted:!0}),O.delete(q)}for(let j of B)for(let E of Bx0(K,j))D.push({path:E,deleted:!0}),O.delete(E);if(D.length===0)return{sha:G,accepted:F,conflicts:U};let w=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((j)=>j.type==="blob"&&j.path===w)){let j=await iE1(Z,O.values(),X),{decofile:E,skipped:P}=KZ0(j);if(P.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:JF(Z.repo),branch:Q,packagePath:Y,blocks:P.map((T)=>T.key)});D.push({path:w,content:E})}try{let{sha:j}=await Z.commitFiles({branch:Q,message:r55(N,B,$.deps.coAuthor),expectedHead:G,changes:D});return{sha:j,accepted:F,conflicts:U}}catch(j){if(!(j instanceof Z5)||J>=p55-1)throw j;await F$(I7(2000,200,J,2,0.5))}}}function r55($,Z,Q){let Y=(G)=>{let W=G.slice(0,3).join(", ");return G.length>3?`${W} (+${G.length-3} more)`:W},X=[];if($.size>0)X.push(`update ${Y([...$.keys()])}`);if(Z.size>0)X.push(`delete ${Y([...Z])}`);let J=`chore(decofile): ${X.join("; ")}`;return HQ1(J,Q)}var p55=3,jx0,ZP1,JF8;var GF8=L(()=>{Rq0();UZ0();t4();r$();O7();Dx0();jx0=class jx0 extends Error{blocks;constructor($){super(`Blocks changed since they were loaded: ${$.join(", ")}`);this.blocks=$;this.name="BlockConflictError"}};ZP1=new Map;JF8=Symbol("unreadable")});import{createHmac as WF8,randomBytes as a55,timingSafeEqual as e55}from"crypto";function KF8(){if(Ex0)return Ex0;let $;try{let Z=L0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Ex0=$?Buffer.from($):a55(32),Ex0}function QP1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+$95)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=WF8("sha256",KF8()).update(Y).digest("base64url");return`${Y}.${X}`}function HF8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(WF8("sha256",KF8()).update(Y).digest("base64url"));if(X.length!==J.length||!e55(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 $95=21600000,Ex0=null;var FF8=L(()=>{r1()});function Px0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Z95($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=Px0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function UF8($){let Z;try{Z=Px0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=Z95(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=Px0(G),K=W&&Px0(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 TO}from"zod";function Y95($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Q95.test($)}function OF8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function EZ0($){let Z=$.get("decofileScope");return Qi($.var.studioContext,Z.organizationId,Z.repository)}function PZ0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof jx0)return $.json({error:Q,code:"block-conflict",blocks:Z.blocks},409);if(Z instanceof Z5)return $.json({error:Q},409);let Y=OK(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 wF8(){let $=new Q1;return $.use("/:virtualMcpId/:branch",LF8),$.use("/:virtualMcpId/:branch/*",LF8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await EZ0(Z),X=await cH8(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(UF8(X.decofile),200,{...J,"content-type":"application/json"});let G=QP1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(OF8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return PZ0(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 EZ0(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 PZ0(Z,X)}}),$.patch("/:virtualMcpId/:branch",J95,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=G95.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=_h(X.data)}catch(G){if(G instanceof HZ0)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{Jx0(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(_E1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await EZ0(Z),W=await XF8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:kt(Y)},J),K=QP1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:OF8(Z)})}catch(G){return PZ0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await EZ0(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(OK(W)!==409)throw W;await Ox0(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(OK(G)===409)return Z.json({error:"merge-conflict"},409);if(OK(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 PZ0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await EZ0(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(OK(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return PZ0(Z,Y)}}),$}var Q95,NF8=500,BF8=1048576,DF8=1024,X95=8388608,J95,G95,LF8;var jF8=L(()=>{s80();UZ0();W8();aK();ME1();Xx0();aE1();O7();GF8();FF8();oE1();Dx0();XF();Q95=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;J95=h5({maxSize:X95,onError:($)=>$.json({error:"Payload too large"},413)}),G95=TO.object({set:TO.record(TO.string(),TO.unknown()).optional(),delete:TO.array(TO.string()).optional(),expect:TO.record(TO.string(),TO.string().regex(/^[0-9a-f]{64}$/).nullable()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=NF8,{message:`Patch cannot touch more than ${NF8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=BF8),{message:`Each block must be at most ${BF8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=DF8),{message:`Each block key must be at most ${DF8} characters`}).refine(($)=>Object.keys($.expect??{}).every((Z)=>(Z in($.set??{}))||($.delete??[]).includes(Z)),{message:"Each expected block must be one the patch sets or deletes"}).refine(($)=>Object.keys($.set??{}).every((Z)=>!($.delete??[]).includes(Z)),{message:"A block cannot be both set and deleted in the same patch"}),LF8=Yx0(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(!Y95(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||!HF8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await LG(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(!li(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=OZ0(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 EF8=($)=>{let Z=new Q1;if(Z.use("*",Jt),Z.use("*",dJ8),Z.route("/",cJ8($.voiceSessions)),Z.route("/",Nb0()),Z.route("/",wG8()),Z.route("/",kG8()),Z.route("/",NG8()),Z.route("/",vK8()),Z.route("/",xK8()),Z.route("/",qK8()),Z.route("/",CK8()),Z.route("/",IK8()),Z.route("/",$x0()),Z.route("/tools",cK8()),Z.route("/",hK8()),Z.route("/",JK8({kvStorage:$.kvStorage})),Z.route("/",YK8()),Z.route("/fs",OK8({getConnection:$.getNatsConnection})),Z.route("/sandbox",QF8()),Z.route("/decofile",wF8()),Z.route("/",AK8()),Z.route("/",jK8()),Z.route("/deco-sites",Db0()),Z.route("/hosting",ZG8()),Z.route("/monitor",KG8()),Z.route("/sso",Gb0()),Z.route("/",Zx0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",sJ8()),$.mountDevAssets)Z.route("/dev-assets",jb0({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 wE1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",hQ8()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of wE1)Z.route(Q,PK8());return Z.route("/mcp",mk0()),Z.route("/mcp/self",sb0()),Z.route("/mcp",pk0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var PF8=L(()=>{W8();mJ8();iJ8();ov0();rJ8();iw1();QG8();HG8();Eb0();jz();uw1();jG8();sw1();XK8();GK8();wK8();EK8();t60();Cw1();nk0();OE1();zK8();TK8();MK8();VK8();PE1();bK8();fK8();uK8();zE1();mK8();AE1();dk0();YF8();jF8()});import{z as xh}from"zod";class YP1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new I1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new TF8.Kvm(zx0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:zx0.StorageType.Memory,ttl:RF8.nanos(IL),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"?AF8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await F$(200);continue}let G=zF8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await F$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,zF8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new I1(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"?AF8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var zx0,TF8,RF8,zF8,AF8;var qF8=L(()=>{$G();hN();r$();zx0=C(UH(),1),TF8=C(CT(),1),RF8=C(pz(),1),zF8=new TextEncoder,AF8=xh.discriminatedUnion("state",[xh.object({state:xh.literal("ready"),agentId:xh.string()}),xh.object({state:xh.literal("creating"),expiresAt:xh.number()})])});import{z as ft}from"zod";function W95($){return{model:$.model,instructions:`${NC$}
4331
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class XP1{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:W95({...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:ft.object({session:ft.object({id:ft.string().min(1)}),transport:ft.object({type:ft.literal("webrtc"),sdp:ft.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var MF8=L(()=>{hN()});var IF8;var VF8=L(()=>{IF8=[{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 JP1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:FC$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:IF8.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:IL/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 kF8=L(()=>{hN();VF8()});import{z as vJ}from"zod";import{createHash as K95,createHmac as H95}from"crypto";class Ax0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=K95("sha256").update(JSON.stringify(JP1($))).digest("hex"),this.conversationKey=H95("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Ax0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=vJ.object({agents:vJ.array(vJ.object({agent_id:vJ.string(),name:vJ.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return vJ.object({platform_settings:vJ.object({auth:vJ.object({enable_auth:vJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...JP1(this.config)},AbortSignal.timeout(15000));return vJ.object({agent_id:vJ.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return vJ.object({token:vJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return vJ.object({token:vJ.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var SF8=L(()=>{kF8()});import{createHmac as F95,timingSafeEqual as U95}from"crypto";import{z as yt}from"zod";function _F8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return F95("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function vF8($,Z){let Q=Buffer.from(JSON.stringify(CF8.parse($))).toString("base64url");return`${Q}.${_F8(Q,Z)}`}function bF8($,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(_F8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!U95(W,G))return null;try{let K=CF8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+IL)return null;return K.data}catch{return null}}var CF8;var xF8=L(()=>{hN();CF8=yt.object({sessionId:yt.string().uuid(),organizationId:yt.string().min(1).max(256),userId:yt.string().min(1).max(256),threadId:yt.string().min(1).max(256),expiresAt:yt.number().int().positive()})});import{z as GP1}from"zod";function fF8($,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 WP1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var WP1;var yF8=L(()=>{WP1=GP1.object({provider:GP1.enum(["elevenlabs","openai"]),model:GP1.string().trim().min(1).max(128)})});import{createHash as N95}from"crypto";import{z as gt}from"zod";function ht($){return`user.${N95("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class HP1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new I1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new gF8.Kvm(Rx0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Rx0.StorageType.Memory,ttl:hF8.nanos(IL),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new I1(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=fF8(this.deps.defaults,Y)}catch{throw new I1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new I1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+IL},W=vF8(G,this.deps.secret),K=await this.kv(),H=ht(G),F=await K.get(H),U=F?.operation==="PUT"?Tx0.parse(F.json()):null,N=KP1.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 I1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:ht($)});return{token:W,...D,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=bF8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new I1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=ht(Q),J=await Y.get(X),G=J?.operation==="PUT"?Tx0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new I1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new I1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new I1(409,{message:"Voice session already connected"});try{await Y.update(X,KP1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new I1(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=ht(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Tx0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new I1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new I1(429,{message:"Voice session speech limit reached"});try{await J.update(G,KP1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new I1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(ht($));if(Q?.operation==="PUT"&&Tx0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(ht($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Rx0,gF8,hF8,Tx0,KP1;var uF8=L(()=>{$G();hN();xF8();yF8();Rx0=C(UH(),1),gF8=C(CT(),1),hF8=C(pz(),1),Tx0=gt.object({sessionId:gt.string().uuid(),expiresAt:gt.number(),connected:gt.boolean().optional(),conversation:WP1.optional(),characters:gt.number().int().nonnegative(),requests:gt.number().int().nonnegative()}),KP1=new TextEncoder});function B95($){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 D95=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},lF8=()=>{let $=new Q1;return $.use("*",D95),$.get("/",async(Z)=>{let Q=L0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await hG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:B95(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var cF8=L(()=>{W8();r1();x_0()});import{z as c1}from"zod";function PB($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function R95($){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 q95($,Z,Q){try{return JSON.parse($)}catch{throw new iF8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function M95($){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:q95(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 I95($){let Z=$.map((Q)=>{let Y=Q.function.parameters?nU(Q.function.parameters):nU({type:"object",properties:{}});return[Q.function.name,t$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function V95($){if(!$)return;return{openai:{response_format:$}}}function k95(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function mF8($,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 dF8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var L95=256,O95,w95,j95,E95,P95,z95,A95,T95,iF8,pF8,nF8;var tF8=L(()=>{u4();W8();Vt();VF();O95=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),w95=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),j95=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(w95).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),E95=c1.object({type:c1.literal("text")}),P95=c1.object({type:c1.literal("json_object")}),z95=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),A95=c1.union([E95,P95,z95]),T95=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(j95),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(O95).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:A95.optional(),user:c1.string().optional()});iF8=class iF8 extends Error{constructor($){super($);this.name="MessageConversionError"}};pF8=new Q1;pF8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(PB("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(PB("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(PB("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=T95.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(PB(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=R95(J.model);if(!G)return $.json(PB("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)=>u2(E.providerId));if(!j)return $.json(PB("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(PB(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=M95(J.messages),N=J.tools?I95(J.tools):void 0,B=V95(J.response_format),D=k95(),O=Math.floor(Date.now()/1000);if(J.stream)return zO($,async(w)=>{let j=mF8(F,U,N,J,B,$.req.raw.signal);try{let E=Jp(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=L95)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:dF8(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=mF8(F,U,N,J,B,$.req.raw.signal),j=await CL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:dF8(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(PB("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(PB(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(PB(X.message,"server_error"),500)}});nF8=pF8});function S95($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function oF8(){let $=new Q1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=C0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!G9(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||y9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(i2(U)!==J)continue;if(!S95(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var sF8=L(()=>{W8();tX()});var qx0;var FP1=L(()=>{qx0={name:"decocms",version:"4.499.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0",kysely:"^0.28.12","posthog-node":"^5.0.0"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function v95(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_95}}var rF8,_95="https://ph.studio.decocms.com",aF8;var eF8=L(()=>{W8();ke();Eg();w9();r1();ww1();FP1();rF8=new Q1;rF8.get("/",($)=>{let Z={version:qx0.version,theme:kY$(),...cH().logo&&{logo:cH().logo},...lL()&&{internalUrl:sr1()},...L0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!L0().controlplaneRestUrl&&!!L0().controlplaneServiceToken,hostingControlPlaneGa:L0().hostingControlPlaneGa,monitorEnabled:!!L0().clickhouseAnalyticsUrl&&!!L0().clickhouseAnalyticsPassword,monitorGa:L0().monitorGa,plansEnabled:L0().plansEnabled,auth:bX8(),posthog:v95(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:nF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});aF8=rF8});import{z as q$}from"zod";var b95,$U8;var ZU8=L(()=>{b95=q$.object({check_id:q$.string(),title:q$.string(),description:q$.string().optional(),impact:q$.string().optional(),why:q$.string().optional(),category:q$.string(),severity:q$.string(),value_band:q$.string().optional(),value_driver:q$.string().optional(),controllability:q$.string().optional(),pages:q$.array(q$.string()),tasks:q$.array(q$.string()),evidence:q$.string(),sample_scope:q$.string().optional(),sources:q$.array(q$.string())}),$U8=q$.object({domain:q$.string(),brand:q$.string(),favicon:q$.string().optional(),scanned_at:q$.string().nullable(),lang:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),totals:q$.object({measured:q$.number(),registry_total:q$.number(),passed:q$.number(),failed:q$.number(),blocked:q$.number()}),buckets:q$.array(q$.object({id:q$.enum(["critical","important","worth"]),label:q$.string(),items:q$.array(b95)})),passing:q$.object({count:q$.number(),items:q$.array(q$.object({check_id:q$.string(),title:q$.string()}))}),not_measured:q$.object({count:q$.number(),groups:q$.array(q$.object({reason:q$.string(),label:q$.string(),count:q$.number(),checks:q$.array(q$.string())}))}),categories:q$.array(q$.object({key:q$.string(),label:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),pass:q$.number(),fail:q$.number()})),screenshots:q$.array(q$.object({url:q$.string(),page_type:q$.string().optional(),viewport:q$.enum(["desktop","mobile"]),image_url:q$.string()}))})});function QU8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${KK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Mx0($,Z={}){let Q=await fetch(QU8($,"",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 $U8.parse(await Q.json())}async function YU8($,Z={}){let Q=await fetch(QU8($,".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 UP1=L(()=>{ZU8();aD()});import{join as XU8}from"path";async function f95($){try{let Z=await Mx0($,{signal:AbortSignal.timeout(x95)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||NL1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function mG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function y95($,Z){let Q=Oh($),Y=Z?.brand?.trim()||NL1(Q),X=vZ8(Q,128),G=`${(L0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=bZ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${mG(W)}</title>`,`<meta name="description" content="${mG(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="${mG(W)}" />`,`<meta property="og:description" content="${mG(K)}" />`,`<meta property="og:url" content="${mG(G)}" />`,`<meta property="og:image" content="${mG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mG(W)}" />`,`<meta name="twitter:description" content="${mG(K)}" />`,`<meta name="twitter:image" content="${mG(H)}" />`,`<meta name="twitter:image:alt" content="${mG(F)}" />`,`<link rel="canonical" href="${mG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${mG(G)}.md" />`,`<link rel="icon" href="${mG(X)}" sizes="any" />`].join(`
4331
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class XP1{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:W95({...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:ft.object({session:ft.object({id:ft.string().min(1)}),transport:ft.object({type:ft.literal("webrtc"),sdp:ft.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var MF8=L(()=>{hN()});var IF8;var VF8=L(()=>{IF8=[{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 JP1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:FC$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:IF8.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:IL/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 kF8=L(()=>{hN();VF8()});import{z as vJ}from"zod";import{createHash as K95,createHmac as H95}from"crypto";class Ax0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=K95("sha256").update(JSON.stringify(JP1($))).digest("hex"),this.conversationKey=H95("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Ax0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=vJ.object({agents:vJ.array(vJ.object({agent_id:vJ.string(),name:vJ.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return vJ.object({platform_settings:vJ.object({auth:vJ.object({enable_auth:vJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...JP1(this.config)},AbortSignal.timeout(15000));return vJ.object({agent_id:vJ.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return vJ.object({token:vJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return vJ.object({token:vJ.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var SF8=L(()=>{kF8()});import{createHmac as F95,timingSafeEqual as U95}from"crypto";import{z as yt}from"zod";function _F8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return F95("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function vF8($,Z){let Q=Buffer.from(JSON.stringify(CF8.parse($))).toString("base64url");return`${Q}.${_F8(Q,Z)}`}function bF8($,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(_F8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!U95(W,G))return null;try{let K=CF8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+IL)return null;return K.data}catch{return null}}var CF8;var xF8=L(()=>{hN();CF8=yt.object({sessionId:yt.string().uuid(),organizationId:yt.string().min(1).max(256),userId:yt.string().min(1).max(256),threadId:yt.string().min(1).max(256),expiresAt:yt.number().int().positive()})});import{z as GP1}from"zod";function fF8($,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 WP1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var WP1;var yF8=L(()=>{WP1=GP1.object({provider:GP1.enum(["elevenlabs","openai"]),model:GP1.string().trim().min(1).max(128)})});import{createHash as N95}from"crypto";import{z as gt}from"zod";function ht($){return`user.${N95("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class HP1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new I1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new gF8.Kvm(Rx0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Rx0.StorageType.Memory,ttl:hF8.nanos(IL),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new I1(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=fF8(this.deps.defaults,Y)}catch{throw new I1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new I1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+IL},W=vF8(G,this.deps.secret),K=await this.kv(),H=ht(G),F=await K.get(H),U=F?.operation==="PUT"?Tx0.parse(F.json()):null,N=KP1.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 I1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:ht($)});return{token:W,...D,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=bF8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new I1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=ht(Q),J=await Y.get(X),G=J?.operation==="PUT"?Tx0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new I1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new I1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new I1(409,{message:"Voice session already connected"});try{await Y.update(X,KP1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new I1(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=ht(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Tx0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new I1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new I1(429,{message:"Voice session speech limit reached"});try{await J.update(G,KP1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new I1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(ht($));if(Q?.operation==="PUT"&&Tx0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(ht($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Rx0,gF8,hF8,Tx0,KP1;var uF8=L(()=>{$G();hN();xF8();yF8();Rx0=C(UH(),1),gF8=C(CT(),1),hF8=C(pz(),1),Tx0=gt.object({sessionId:gt.string().uuid(),expiresAt:gt.number(),connected:gt.boolean().optional(),conversation:WP1.optional(),characters:gt.number().int().nonnegative(),requests:gt.number().int().nonnegative()}),KP1=new TextEncoder});function B95($){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 D95=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},lF8=()=>{let $=new Q1;return $.use("*",D95),$.get("/",async(Z)=>{let Q=L0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await hG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:B95(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var cF8=L(()=>{W8();r1();x_0()});import{z as c1}from"zod";function PB($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function R95($){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 q95($,Z,Q){try{return JSON.parse($)}catch{throw new iF8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function M95($){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:q95(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 I95($){let Z=$.map((Q)=>{let Y=Q.function.parameters?nU(Q.function.parameters):nU({type:"object",properties:{}});return[Q.function.name,t$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function V95($){if(!$)return;return{openai:{response_format:$}}}function k95(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function mF8($,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 dF8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var L95=256,O95,w95,j95,E95,P95,z95,A95,T95,iF8,pF8,nF8;var tF8=L(()=>{u4();W8();Vt();VF();O95=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),w95=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),j95=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(w95).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),E95=c1.object({type:c1.literal("text")}),P95=c1.object({type:c1.literal("json_object")}),z95=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),A95=c1.union([E95,P95,z95]),T95=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(j95),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(O95).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:A95.optional(),user:c1.string().optional()});iF8=class iF8 extends Error{constructor($){super($);this.name="MessageConversionError"}};pF8=new Q1;pF8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(PB("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(PB("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(PB("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=T95.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(PB(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=R95(J.model);if(!G)return $.json(PB("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)=>u2(E.providerId));if(!j)return $.json(PB("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(PB(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=M95(J.messages),N=J.tools?I95(J.tools):void 0,B=V95(J.response_format),D=k95(),O=Math.floor(Date.now()/1000);if(J.stream)return zO($,async(w)=>{let j=mF8(F,U,N,J,B,$.req.raw.signal);try{let E=Jp(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=L95)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:dF8(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=mF8(F,U,N,J,B,$.req.raw.signal),j=await CL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:dF8(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(PB("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(PB(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(PB(X.message,"server_error"),500)}});nF8=pF8});function S95($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function oF8(){let $=new Q1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=C0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!G9(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||y9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(i2(U)!==J)continue;if(!S95(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var sF8=L(()=>{W8();tX()});var qx0;var FP1=L(()=>{qx0={name:"decocms",version:"4.499.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0",kysely:"^0.28.12","posthog-node":"^5.0.0"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function v95(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_95}}var rF8,_95="https://ph.studio.decocms.com",aF8;var eF8=L(()=>{W8();ke();Eg();w9();r1();ww1();FP1();rF8=new Q1;rF8.get("/",($)=>{let Z={version:qx0.version,theme:kY$(),...cH().logo&&{logo:cH().logo},...lL()&&{internalUrl:sr1()},...L0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!L0().controlplaneRestUrl&&!!L0().controlplaneServiceToken,hostingControlPlaneGa:L0().hostingControlPlaneGa,monitorEnabled:!!L0().clickhouseAnalyticsUrl&&!!L0().clickhouseAnalyticsPassword,monitorGa:L0().monitorGa,plansEnabled:L0().plansEnabled,auth:bX8(),posthog:v95(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:nF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});aF8=rF8});import{z as q$}from"zod";var b95,$U8;var ZU8=L(()=>{b95=q$.object({check_id:q$.string(),title:q$.string(),description:q$.string().optional(),impact:q$.string().optional(),why:q$.string().optional(),category:q$.string(),severity:q$.string(),value_band:q$.string().optional(),value_driver:q$.string().optional(),controllability:q$.string().optional(),pages:q$.array(q$.string()),tasks:q$.array(q$.string()),evidence:q$.string(),sample_scope:q$.string().optional(),sources:q$.array(q$.string())}),$U8=q$.object({domain:q$.string(),brand:q$.string(),favicon:q$.string().optional(),scanned_at:q$.string().nullable(),lang:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),totals:q$.object({measured:q$.number(),registry_total:q$.number(),passed:q$.number(),failed:q$.number(),blocked:q$.number()}),buckets:q$.array(q$.object({id:q$.enum(["critical","important","worth"]),label:q$.string(),items:q$.array(b95)})),passing:q$.object({count:q$.number(),items:q$.array(q$.object({check_id:q$.string(),title:q$.string()}))}),not_measured:q$.object({count:q$.number(),groups:q$.array(q$.object({reason:q$.string(),label:q$.string(),count:q$.number(),checks:q$.array(q$.string())}))}),categories:q$.array(q$.object({key:q$.string(),label:q$.string(),score:q$.number().nullable(),band:q$.string().nullable(),pass:q$.number(),fail:q$.number()})),screenshots:q$.array(q$.object({url:q$.string(),page_type:q$.string().optional(),viewport:q$.enum(["desktop","mobile"]),image_url:q$.string()}))})});function QU8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${KK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Mx0($,Z={}){let Q=await fetch(QU8($,"",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 $U8.parse(await Q.json())}async function YU8($,Z={}){let Q=await fetch(QU8($,".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 UP1=L(()=>{ZU8();aD()});import{join as XU8}from"path";async function f95($){try{let Z=await Mx0($,{signal:AbortSignal.timeout(x95)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||NL1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function mG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function y95($,Z){let Q=Oh($),Y=Z?.brand?.trim()||NL1(Q),X=vZ8(Q,128),G=`${(L0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=bZ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${mG(W)}</title>`,`<meta name="description" content="${mG(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="${mG(W)}" />`,`<meta property="og:description" content="${mG(K)}" />`,`<meta property="og:url" content="${mG(G)}" />`,`<meta property="og:image" content="${mG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mG(W)}" />`,`<meta name="twitter:description" content="${mG(K)}" />`,`<meta name="twitter:image" content="${mG(H)}" />`,`<meta name="twitter:image:alt" content="${mG(F)}" />`,`<link rel="canonical" href="${mG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${mG(G)}.md" />`,`<link rel="icon" href="${mG(X)}" sizes="any" />`].join(`
4332
4332
  `)}function g95($,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}
4333
4333
  </head>`)}function JU8($){let Z=new Q1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Oh(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(XU8($,"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(`${KK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(h95)}),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=Oh(Q.req.param("file").replace(/\.md$/,""));try{let X=await YU8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(u95)});if(X===null)return Q.text("Deco Score not found",404);return Q.body(X,200,{"Content-Type":"text/markdown; charset=utf-8","Cache-Control":"public, max-age=600, stale-while-revalidate=3600","Access-Control-Allow-Origin":"*"})}catch{return Q.text("Deco Score unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?XU8($,"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 f95(Oh(Y)),K=y95(Y,W);return Q.html(g95(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var x95=2500,h95=1e4,u95=1e4;var GU8=L(()=>{W8();aD();UP1();r1()});function Ix0($,Z){return fetch(`${KK({})}${$}`,Z)}async function l95($,Z){let Q=await Mx0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function m95($){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 c95,RO,WU8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},KU8;var HU8=L(()=>{W8();LK();aD();UP1();c95=new Set(["complete","errored","terminated","unknown"]);RO=new Q1;RO.use("*",async($,Z)=>{let Q=await B4.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});RO.use("/link-token/*",WU8);RO.use("/suggest",WU8);RO.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 l95(Z,Q))}catch{return $.json({error:"report read failed"},502)}});RO.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}=m95(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await Ix0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${OE({})}`},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)}});RO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await Ix0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${OE({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:c95.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});RO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await Ix0(`/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)}});RO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await Ix0(`/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:[]})}});KU8=RO});var d95=1048576,NP1;var FU8=L(()=>{W8();aK();r1();Qw1();NP1=new Q1;NP1.post("/webhook",h5({maxSize:d95,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=L0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!nY8(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=tY8(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await oY8(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as i95}from"crypto";function t95($,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 i95(Buffer.from(X),Buffer.from(Y))}function o95($,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 UU8($){let Z=new Q1;return Z.post("/webhook",h5({maxSize:p95,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(!t95(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"&&!n95.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 l80().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=o95(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await s95($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function s95($,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 Cu$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var p95=5242880,n95;var NU8=L(()=>{W8();aK();OX();kQ();n95=new Set(["check_suite","issue_comment"])});import{DBOS as DP1,SchedulerMode as r95}from"@dbos-inc/dbos-sdk";async function e95(){try{return await $Z5()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function $Z5(){if(!u80())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (RY1(),TY1)),Promise.resolve().then(() => (AY1(),zY1))]),Q=await l80(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=z8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=dV$({sandboxes:J,pools:G,records:await iV$(X,J,G),legacyPools:fq0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await pV$(K,XN0(X,new nX(L0().encryptionKey)),{now:W,orgFsLifetimeMs:hq0}),U=0,N=0,B=0;for(let D of H)try{let O=await Y.pushCredentials(D);U+=O.stored,N+=O.kept}catch(O){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${O instanceof Error?O.message:String(O)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function ZZ5($,Z){let Q=await DP1.runStep(e95,{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 BU8(){if(BP1)return;if(!L0().agentSandboxEnabled||!u80())return;BP1=DP1.registerWorkflow(ZZ5,{name:"sandboxCredentialPushWorkflow"}),DP1.registerScheduled(BP1,{name:"sandboxCredentialPushWorkflow",crontab:a95,mode:r95.ExactlyOncePerIntervalWhenActive})}var a95="1-59/10 * * * *",BP1=null;var DU8=L(()=>{D3();Aw();KZ1();uq0();yq0();OX();r1()});function LU8($){let Z=new FO($.db,new nX($.encryptionKey)),Q=new Q1;return Q.get("/attachments/:token",async(Y)=>{let X=yg$(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 r7(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 OU8=L(()=>{W8();Aw();oJ1();_L()});function Vx0(){try{return L0().jiraSettleSeconds*1000}catch{return bP}}function wU8($,Z){let Q=Z.windowMs??bP,Y=$.at(-1);if(!Y)return null;if(Z.changeId!==void 0&&Y.id!==Z.changeId)return{kind:"superseded"};if(Z.now!==void 0&&Z.now-Y.at<Q)return{kind:"moving"};let X=QZ5($,Q);if((X.id&&Y.toId?X.id===Y.toId:!1)||!X.id&&X.name===Y.to)return{kind:"returned",change:Y};return{kind:"moved",change:Y,from:X}}function QZ5($,Z){for(let Y=$.length-2;Y>=0;Y--){let X=$[Y],J=$[Y+1];if(X&&J&&J.at-X.at>=Z)return{id:X.toId,name:X.to}}let Q=$[0];return{id:Q?.fromId??null,name:Q?.from??null}}var LP1=L(()=>{mL();r1()});function jU8($){if(typeof $!=="object"||$===null)return null;let Z=$;if(Z.webhookEvent!=="jira:issue_updated")return null;let Q=Z.issue?.id,Y=Z.issue?.key,X=Z.changelog?.id;if(typeof Q!=="string"&&typeof Q!=="number"||typeof Y!=="string"||typeof X!=="string"&&typeof X!=="number")return null;let J=Z.changelog?.items?.find((G)=>G.field==="status");if(!J||typeof J.toString!=="string")return null;return{issueId:String(Q),issueKey:Y,toStatus:J.toString,changelogId:String(X)}}async function OP1($,Z,Q){if(!Z.enabled)return"disabled";let Y=Z.organizationId,X=new r7(Z.siteUrl,Z.email,Z.apiToken),J=wU8(await X.listStatusChanges(Q.issueId),{changeId:Q.changelogId,now:Q.now,windowMs:Vx0()});if(!J)return"no_rule";if(J.kind!=="moved")return J.kind;let{change:G,from:W}=J,K=(await $.storage.automations.listJiraTransitionTriggers(Y,{jiraStatus:G.to,activeOnly:!0})).map((N)=>({...N,from:vP(N)})),H=Rd$(K)&&Z.boardId?Td$(await X.getBoardColumnStatusIds(Z.boardId),W.id,G.toId):null,F=Ad$(K,W.name,H);if(!F)return"no_rule";if(!await $.storage.jiraIntegrations.claimTrigger(Y,Q.issueId,G.id))return"duplicate";return await kK({automationId:F.automation_id,organizationId:Y,triggerId:F.id,target:{kind:"jira",issues:[Q.issueId],move:{toStatus:G.to,fromStatus:W.name,movedBy:G.by,movedAt:new Date(G.at).toISOString()},eventKey:G.id}},{idempotencyKey:`jira:${F.id}:${G.id}`}),"fired"}var wP1=L(()=>{MF();_L();up();LP1()});import{DBOS as qz,SchedulerMode as YZ5}from"@dbos-inc/dbos-sdk";function EU8($){EP1=$}function zP1(){if(!EP1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return EP1}function AP1(){let $=zP1();return new FO($.db,new nX($.encryptionKey))}async function KZ5($){try{let Z=await AP1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,fired:0};let Q=await o3(zP1().db,Z.organizationId);if(!Q)return{integrationId:$,fired:0};if((await Q.storage.automations.listJiraTransitionTriggers(Z.organizationId,{activeOnly:!0})).length===0)return{integrationId:$,fired:0};let X=new r7(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${JZ5}m"`,W=0,K;for(let H=0;H<GZ5;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await OP1(Q,Z,{issueId:U.id,now:Date.now()})==="fired")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,fired:W}}catch(Z){return{integrationId:$,fired:0,error:Z instanceof Error?Z.message:String(Z)}}}async function HZ5($,Z){let Q=await qz.runStep(()=>AP1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>qz.runStep(()=>KZ5(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.fired>0)console.log(`[jira-trigger] integration ${X.integrationId} fired ${X.fired} automation(s) the webhook missed`)}async function FZ5($,Z){try{let Q=await AP1().getById($);if(!Q?.enabled)return"disabled";let Y=await o3(zP1().db,Q.organizationId);if(!Y)return"disabled";let X=await OP1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="fired")console.log(`[jira-trigger] fired an automation for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no fire`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function UZ5($,Z){await qz.sleep(Vx0()+WZ5),await qz.runStep(()=>FZ5($,Z),{name:"settleJiraMove"})}async function PU8($,Z){if(!PP1)throw Error("[jira-trigger] settle workflow is not registered");await qz.startWorkflow(PP1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function zU8(){if(jP1)return;PP1=qz.registerWorkflow(UZ5,{name:"jiraSettleWorkflow"}),jP1=qz.registerWorkflow(HZ5,{name:"jiraTriggerSweepWorkflow"}),qz.registerScheduled(jP1,{name:"jiraTriggerSweepWorkflow",crontab:XZ5,mode:YZ5.ExactlyOncePerIntervalWhenActive})}var XZ5="*/5 * * * *",JZ5=20,GZ5=5,WZ5=5000,EP1=null,PP1=null,jP1=null;var TP1=L(()=>{Aw();Lg();_L();LP1();wP1()});function AU8($){let Z=new FO($.db,new nX($.encryptionKey)),Q=Fj($.db);async function Y(J,G){let W=jU8(G);if(!W)return;let K=await Z.getByWebhookSecret(J);if(!K?.enabled)return;if((await Q.listJiraTransitionTriggers(K.organizationId,{activeOnly:!0})).length===0)return;await PU8(K.id,W)}let X=new Q1;return X.post("/webhook/:secret",h5({maxSize:NZ5}),async(J)=>{let G=J.req.param("secret");if(!await Z.getByWebhookSecret(G))return J.json({error:"Unknown webhook"},404);let K;try{K=await J.req.json()}catch{return J.json({error:"Body must be JSON"},400)}return Y(G,K).catch((H)=>{console.error("[jira-webhook] trigger failed",H)}),J.body(null,202)}),X}var NZ5=1048576;var TU8=L(()=>{W8();aK();Aw();TP1();wP1();Ca()});function RU8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var qU8,BZ5,DZ5,MU8;var IU8=L(()=>{W8();$G();kp();bd();qU8=new Q1,BZ5=["range","if-none-match","if-modified-since"],DZ5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];qU8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Xt($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new I1(401,{message:"Authentication required"})}if(!Q)throw new I1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new I1(400,{message:"Missing file key"});let X=await z60(Y,Z);if(!X)throw new I1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&UK()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new I1(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 RU8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of BZ5){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 I1(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 I1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of DZ5){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),RU8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});MU8=qU8});var zZ0=b((fh)=>{var LZ5=fh&&fh.__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]}),OZ5=fh&&fh.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))LZ5(Z,$,Q)};Object.defineProperty(fh,"__esModule",{value:!0});OZ5(rG(),fh)});var SU8=b((VU8)=>{Object.defineProperty(VU8,"__esModule",{value:!0});VU8.version=void 0;VU8.version="3.4.0"});var vU8=b((zB)=>{var wZ5=zB&&zB.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(zB,"__esModule",{value:!0});zB.NodeTransport=zB.VERSION=void 0;zB.nodeResolveHost=TZ5;var Q9=zZ0(),jZ5=I0("net"),RP1=I0("tls"),EZ5=I0("path"),CU8=I0("fs"),PZ5=wZ5(I0("dns")),zZ5=SU8();zB.VERSION=zZ5.version;var AZ5="nats.js";class _U8{socket;version;lang;yields=[];signal=(0,Q9.deferred)();closedNotification=(0,Q9.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=AZ5,this.version=zB.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,Q9.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw Q9.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new Q9.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new Q9.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,Q9.deferred)(),Q,Y=(0,jZ5.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,Q9.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=Q9.DataBuffer.concat(...this.yields),X=(0,Q9.extractProtocolMessage)(Y);if(X!=="")try{let J=Q9.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,Q9.deferred)();try{if($=(0,EZ5.resolve)($),!(0,CU8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,CU8.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,Q9.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new Q9.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,Q9.deferred)();try{let X=(0,RP1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new Q9.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,Q9.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new Q9.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,Q9.deferred)();try{let Y=(0,RP1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new Q9.errors.ConnectionError(Y.message,{cause:Y}))}return Q}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,Q9.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,Q9.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof RP1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,Q9.render)($)}`);let Z=(0,Q9.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,Q9.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,Q9.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}zB.NodeTransport=_U8;function TZ5($){let Z=(0,Q9.deferred)();return PZ5.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 gU8=b((yU8)=>{Object.defineProperty(yU8,"__esModule",{value:!0});yU8.connect=RZ5;var bU8=vU8(),xU8=zZ0(),fU8=zZ0();function RZ5($={}){if((0,fU8.hasWsProtocol)($))return Promise.reject(fU8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,xU8.setTransportFactory)({factory:()=>{return new bU8.NodeTransport},dnsResolveFn:bU8.nodeResolveHost}),xU8.NatsConnectionImpl.connect($)}});var hU8=b((qO)=>{var MZ5=qO&&qO.__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]}),IZ5=qO&&qO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))MZ5(Z,$,Q)};Object.defineProperty(qO,"__esModule",{value:!0});qO.connect=void 0;var VZ5=gU8();Object.defineProperty(qO,"connect",{enumerable:!0,get:function(){return VZ5.connect}});IZ5(zZ0(),qO)});function cU8($){let Z=$?.connectFn??_Z5,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let D=0;while(!J)try{Q=await Z({servers:N,timeout:CZ5,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let O=I7(SZ5,kZ5,D-1,2,0.5);await F$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?kx0.credsAuthenticator(new TextEncoder().encode(B.creds)):B?.user?kx0.usernamePasswordAuthenticator(B.user,B.password):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=lU8.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 _Z5($){return uU8.connect($)}var kx0,uU8,lU8,kZ5=100,SZ5=3000,CZ5=3000;var mU8=L(()=>{r$();kx0=C(pz(),1),uU8=C(hU8(),1),lU8=C(UH(),1)});function Sx0($){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 Cx0($,Z){return`${$}.${Z}`}class qP1{cache;constructor($){this.cache=Sx0({ttlMs:$?.ttlMs??vZ5,maxSize:$?.maxSize??bZ5})}async get($,Z){return this.cache.get(Cx0($,Z))??null}async set($,Z,Q){this.cache.set(Cx0($,Z),Q)}async invalidate($,Z){this.cache.delete(Cx0($,Z)),this.cache.delete(Cx0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var vZ5=600000,bZ5=5000;var dU8=()=>{};function _x0($,Z){return`${$}:${Z}`}function MP1($){let Z=Sx0({ttlMs:$?.ttlMs??xZ5,maxSize:$?.maxSize??fZ5}),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(iU8,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(_x0(K,H))},set(K,H,F){Z.set(_x0(K,H),F)},invalidate(K,H){Z.delete(_x0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(iU8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(_x0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var iU8="studio.ai-provider-keys.invalidate",xZ5=30000,fZ5=5000;var pU8=()=>{};class IP1{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 nU8=($)=>{let Z;return()=>Z??=$()},VP1,kP1;var tU8=L(()=>{v6();VP1=nU8(()=>J$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),kP1=nU8(()=>J$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function mZ5($=rU8){return{name:oN,subjects:[`${gW1}.>`],storage:dF.StorageType.File,max_age:hZ5,max_bytes:lZ5,max_msgs_per_subject:cZ5,discard:dF.DiscardPolicy.Old,retention:dF.RetentionPolicy.Limits,duplicate_window:uZ5,num_replicas:$}}class aU8{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 oU8($){let Z=sU8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function nZ5($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,gZ5().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 tZ5($,Z){return $.info?.cluster?Z:1}function oZ5($){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 SP1{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=mZ5(X);try{await Y.streams.info(oN),await Y.streams.update(oN,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(oN,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(oN),await Y.streams.add(J);else throw G}},Q=await D8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await dF.jetstreamManager($),X=tZ5($,rU8);try{await Z(Y,X)}catch(J){if(X<=1||!oZ5(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:hp});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=nZ5(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=rm$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=uW1(H,{runId:Z}),N=performance.now()-F;VP1().record(N),kP1().add(1,{"org.id":Y??"unknown"}),pZ5?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?oU8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((O)=>setImmediate(O))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),iZ5)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await D8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:oU8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:hp}),!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=uW1(Z,{runId:$,dedup:Q});VP1().record(performance.now()-X),kP1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=sm$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?dF.DeliverPolicy.New:dF.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=_P($),W;try{W=await D8(async()=>{return(await Y.consumers.get(oN,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:hp})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=Wk0({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(Yk0()).pipeThrough(Xk0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:w,value:j}=await F.read();if(w){D(),O.close();return}let E=j;if(E.kind==="done"){if(J){D(),O.close();return}continue}O.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(oN,{filter:_P($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var dF,sU8,yZ5=($)=>{let Z;return()=>Z??=$()},gZ5,hZ5=86400000000000,uZ5=120000000000,lZ5=4294967296,rU8,cZ5=500000,dZ5,iZ5,pZ5;var eU8=L(()=>{r$();lW1();Kk0();Jk0();v6();tU8();dF=C(UH(),1),sU8=C(pz(),1),gZ5=yZ5(()=>J$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),rU8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);dZ5=process.env.STREAM_ENCODE_TRACE==="1",iZ5=process.env.DECOPILOT_STREAM_TRACE==="1";pZ5=dZ5?new aU8:null});function vx0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,NU(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 $N8=L(()=>{R8()});class CP1{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 sZ5($,Z,Q={}){let Y=$.startsWith("thread:")?wF($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function _P1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await yN($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await gN($,{threadId:X,runBranch:G?.branch}),K=await o$0($,Q,YZ1(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=sZ5(W,await HM0($,X),{flat:dy(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 s3(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 ZN8=L(()=>{O7();VQ();kQ()});async function QN8($,Z,Q){let Y=Z.organizationId;if(!IJ(Z))return!1;if(!Og(Q))return!1;if(!await Im($,Y,se))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=F1.shipped,J=await $.storage.taskBoard.update(Z.id,Y,{status:X},Z.updatedBy);return await r5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:X,reason:"pr_merged"}}),w8(Y,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${X}`),!0}var YN8=L(()=>{XG();m8();zX();zp();RF();a5()});function Y75($){return $ instanceof KX}function XN8($,Z){return Z-$>=Z75}class vP1{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??rZ5;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??eZ5,Q=this.options.itemIntervalMs??aZ5,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()-cJ1),D31);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()-Q75));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 N31(this.taskBoard,X,Y),await B31(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!==F1.progress||IJ(W)||W.assigneeId!==F8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await _P1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!XN8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceFromProgress(X,J,F1.review,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:F1.progress,to:F1.review,reason:H}}).catch(()=>{}),w8(J,F),await qF(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!==F1.progress||G.assigneeId!==F8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await yL(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),Y75(G)){await this.returnToBacklog(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+$75)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToBacklog($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==F1.progress)return;let X=await this.taskBoard.returnToBacklogAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:F1.progress,to:F1.intake,reason:Q,retriesSpent:Y.retryAttempts}}).catch(()=>{}),w8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to backlog failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!XN8(CD(Q,Z.reviewCycleStartedAt),Date.now()))return;await qF($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!IJ(Y))return!1;let X=Y.assigneeId===F8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await _P1(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 Rp(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 QN8(G,Y,W))return!0;if(!X)return!1;if(await nu$(G,Y))return!0;if(!K31(W))return!1;return await Tp(G,Y,{previewMatchesHead:H31(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var rZ5=60000,aZ5=300000,eZ5=50,$75=60000,Z75=900000,Q75=120000;var JN8=L(()=>{m8();QV0();ZN8();gL();Vp();RF();YN8();a5();x3();L31();kQ();p40()});async function GN8($,Z,Q=bP){return await KN8($,Z,Q,{})}async function WN8($,Z,Q,Y=bP){return await KN8($,Q,Y,{activityId:Z})}async function KN8($,Z,Q,Y){let X=await $.automations.findActiveBoardColumnTriggers();if(X.length===0)return 0;let J=new Map;for(let K of X){let H=K.automation.organization_id;J.set(H,[...J.get(H)??[],K])}let G=await $.taskBoard.listSettledTransitions({organizationIds:[...J.keys()],since:new Date(Z-X75),settledBefore:new Date(Z-Q),limit:J75,...Y}),W=0;for(let K of G)try{let H=(J.get(K.organizationId)??[]).filter((U)=>U.column_key===K.to&&Date.parse(U.created_at)<Date.parse(K.occurredAt));if(H.length===0)continue;let F=await G75($.taskBoard,K,Q);for(let U of H){if(!Md$(U,{from:F,to:K.to}))continue;if(!await $.automations.claimTriggerFire(U.id,K.activityId))continue;await $.fire({automationId:U.automation_id,organizationId:K.organizationId,triggerId:U.id,target:{kind:"card",itemId:K.itemId,columnKey:K.to,eventKey:K.activityId,movedBy:K.actorId}},{idempotencyKey:`board:${U.id}:${K.activityId}`}),W++}}catch(H){console.error(`[automations] board transition ${K.activityId} failed`,H)}return W}async function G75($,Z,Q){let X=(await $.listActivity(Z.itemId,Z.organizationId)).flatMap((J)=>{let G=J.data;if(J.action!=="status_changed"||typeof G?.to!=="string")return[];let W=typeof G.from==="string"?G.from:null;return W===G.to?[]:[{from:W,to:G.to,occurredAt:J.occurredAt}]});return X.length>0?Id$(X,Q):Z.from}var X75=1800000,J75=200;var HN8=L(()=>{mL()});import{DBOS as Mz,DBOSClient as W75,SchedulerMode as K75}from"@dbos-inc/dbos-sdk";function FN8($){MO=$}async function U75($){if(!MO)return 0;try{return await WN8(MO,$,Date.now(),MO.settleMs)}catch(Z){return console.error(`[automations] settling board move ${$} failed`,Z),0}}async function N75(){if(!MO)return 0;try{return await GN8(MO,Date.now(),MO.settleMs)}catch($){return console.error("[automations] board transition sweep failed",$),0}}async function B75($){await Mz.sleep((MO?.settleMs??bP)+F75),await Mz.runStep(()=>U75($),{name:"settleBoardMove"})}async function D75($,Z){let Q=await Mz.runStep(()=>N75(),{name:"sweepBoardMoves"});if(Q>0)console.log(`[automations] board transition sweep fired ${Q} trigger(s) the settle wait missed`)}async function NN8($){let Z=MO;if(!Z||!xP1)return;if(!await Z.automations.hasActiveBoardColumnTrigger($.taskBoardItemId,$.to))return;let Q=`board-settle:${$.activityId}`;if(!Mz.isWithinWorkflow()){await Mz.startWorkflow(xP1,{workflowID:Q,queueName:vz})($.activityId);return}let Y=await W75.create({systemDatabaseUrl:Z.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:1});try{await Y.enqueue({workflowName:UN8,queueName:vz,workflowID:Q},$.activityId)}finally{await Y.destroy()}}function BN8(){if(bP1)return;xP1=Mz.registerWorkflow(B75,{name:UN8}),bP1=Mz.registerWorkflow(D75,{name:"boardTransitionSweepWorkflow"}),Mz.registerScheduled(bP1,{name:"boardTransitionSweepWorkflow",crontab:H75,mode:K75.ExactlyOncePerIntervalWhenActive})}var H75="*/5 * * * *",F75=2000,MO=null,UN8="boardTransitionSettleWorkflow",xP1=null,bP1=null;var DN8=L(()=>{mL();HN8()});import{readdir as L75,rm as bx0}from"fs/promises";import{join as xx0}from"path";async function fx0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-O75),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await yh($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await LN8($,X,Z);else if(!X.startsWith(".")){let J=xx0($,X),G=await yh(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await LN8(J,K,Z)}if((await yh(J)).length===0)await bx0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function LN8($,Z,Q){let Y=0,X=xx0($,Z),J=await yh(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=xx0(X,W),H=await yh(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=xx0(K,U);await bx0(B,{recursive:!0,force:!0}),Y++}}if((await yh(K)).length===0)await bx0(K,{recursive:!0,force:!0})}if((await yh(X)).length===0)await bx0(X,{recursive:!0,force:!0});return Y}async function yh($){try{return(await L75($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var O75=30;var fP1=()=>{};import{DBOS as yP1,SchedulerMode as w75}from"@dbos-inc/dbos-sdk";async function E75(){let $=[YH(),ph(),kB()],Z=0;for(let Q of $)try{Z+=await fx0(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 P75($,Z){await yP1.runStep(()=>E75(),{name:"monitoringRetention"})}function wN8(){if(ON8)return;ON8=!0;let $=yP1.registerWorkflow(P75,{name:"monitoringRetentionWorkflow"});yP1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:j75,mode:w75.ExactlyOncePerIntervalWhenActive})}var j75="23 4 * * *",ON8=!1;var jN8=L(()=>{PW();fP1()});function EN8($){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 OY.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await qE($.db,Z,Y.role);return X.boundAuth=tO1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new AA(Q,void 0,X.boundAuth,Y.role,"self"),VP(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var PN8=L(()=>{sX();EN()});function zN8(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=AZ0(N.params.name),D=N.params.arguments||{},O=Object.keys(D).map((j)=>AZ0(j)),w=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${N9.tool}${B}${N9.dim}(${w})${N9.reset}`}else if(N.method)J=`${N9.dim}${AZ0(N.method)}${N9.reset}`}}catch{}}let W=AZ0(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${N9.mcp}${AZ0(F.slice(0,12))}\u2026${N9.reset}`}else if(X==="/mcp")W=`${N9.mcp}/mcp${N9.reset}`;else if(X==="/mcp/registry")W=`${N9.mcp}/mcp/registry${N9.reset}`;let K=A75(Y),H=G?"\u25C0":"\u2190";console.log(`${N9.dim}${H}${N9.reset} ${K}${Y}${N9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=z75(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";console.log(`${N9.dim}${D}${N9.reset} ${K}${Y}${N9.reset} ${W}${J?` ${J}`:""} ${N}${U}${N9.reset} ${N9.duration}${B}${N9.reset}`)}}}var N9,z75=($)=>{if($>=500)return N9.serverError;if($>=400)return N9.clientError;if($>=300)return N9.redirect;return N9.ok},A75=($)=>{return N9[$]||N9.reset},AZ0=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var AN8=L(()=>{N9={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as MN8}from"crypto";import{mkdir as T75,readdir as R75,rm as TN8,stat as IN8}from"fs/promises";import{join as hP1,relative as q75}from"path";import{z as Y8}from"zod";function kN8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return hP1(M75,Z)}function SN8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function gP1($,Z){let Q=kN8($),Y=SN8(Z);return hP1(Q,Y)}function I75($,Z,Q,Y){let X=L0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return MN8("sha256",X).update(J).digest("hex")}function qN8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=I75(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${SN8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function CN8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${MN8("md5","etag").update(Y).digest("hex")}"`}async function _N8($,Z,Q,Y,X){try{let J=await R75($,{withFileTypes:!0});for(let G of J){let W=hP1($,G.name),H=q75(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 _N8(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 IN8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:CN8(W,F.mtime,F.size)})}catch{}}}}catch{}}function vN8($,Z){let Y=Y0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Y8.object({prefix:Y8.string().optional(),maxKeys:Y8.number().optional().default(1000),continuationToken:Y8.string().optional(),delimiter:Y8.string().optional()}),outputSchema:Y8.object({objects:Y8.array(Y8.object({key:Y8.string(),size:Y8.number(),lastModified:Y8.string(),etag:Y8.string()})),nextContinuationToken:Y8.string().optional(),isTruncated:Y8.boolean(),commonPrefixes:Y8.array(Y8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=kN8(Y);await T75(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await _N8(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,O=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:O,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Y8.object({key:Y8.string()}),outputSchema:Y8.object({contentType:Y8.string().optional(),contentLength:Y8.number(),lastModified:Y8.string(),etag:Y8.string(),metadata:Y8.record(Y8.string(),Y8.string()).optional()}),handler:async(X)=>{let J=X,G=gP1(Y,J.key),W=await IN8(G);return{contentType:tw1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:CN8(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=YO(J.expiresIn,RN8);return{url:qN8(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=YO(J.expiresIn,RN8);return{url:qN8(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=gP1(Y,J.key);try{return await TN8(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=gP1(Y,K);try{await TN8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function uP1($,Z,Q){let Y=vN8(Z,Q),X=new Tj({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:o9});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 QW({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),gK(X,J,$,"mcp:dev-assets")}async function bN8($,Z,Q,Y){let J=vN8(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 M75="./data/assets",RN8=3600,VN8,xN8;var fN8=L(()=>{r1();sp();W8();FW0();op();ZJ();XO();Eb0();VN8=new Q1;VN8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return uP1($.req.raw,Z,Y)});xN8=VN8});var yN8={};O6(yN8,{mountDevRoutes:()=>V75});function V75($,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 uP1(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 bN8(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",xN8);let Q=new Q1;Q.use("*",cF({mountPath:"/api/dev-assets"})),Q.route("/",jb0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var gN8=L(()=>{W8();lw1();Eb0();fN8()});var tN8={};O6(tN8,{watchHandler:()=>nN8,resolveVoiceSigningSecret:()=>dN8,resolveCorsOrigin:()=>iN8,isSsoExemptPath:()=>mN8,isAllowedOAuthRedirectUri:()=>pN8,createApp:()=>h75});import{readFileSync as k75}from"fs";import{randomBytes as S75}from"crypto";import{PrometheusSerializer as C75}from"@opentelemetry/exporter-prometheus";import{DBOS as AB}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as b75,oAuthProtectedResourceMetadata as x75}from"better-auth/plugins";async function _75($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,uN8(hN8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),uN8(hN8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function uN8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function mN8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${Yb0}/`)||$.startsWith(`${rv0}/`)}function dN8($){let Z=$.studioJwtSecret||$.betterAuthSecret;if(Z)return Z;return console.warn("STUDIO_JWT_SECRET/BETTER_AUTH_SECRET not set - generating a random secret for voice sessions (not persistent across restarts)"),S75(32).toString("base64")}function iN8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function pN8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"}async function h75($={}){let Z=$.database??z8(),Q=!1;g6.stop().catch((H0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",H0)});let Y,X,J,G,W=new qP1,K,H,F,U=null;if($.disableNats)K=MP1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new n60,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(H0)=>{return(async()=>{let J0=H0.getReader();try{while(!0){let{done:P0}=await J0.read();if(P0)break}}catch{}finally{J0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=cU8();let H0=L0().natsCredsPath,J0;if(H0)try{J0=k75(H0,"utf8")}catch(U8){console.error(`[app] failed to read NATS_CREDS at ${H0}; connecting anonymously`,U8)}U.init(L0().natsUrls,{creds:J0,user:L0().natsUser,password:L0().natsPassword});let P0=l61()?new q61({getJetStream:()=>U.getJetStream(),selfListVersion:qx0.version}):null;P0?.init().catch(()=>{}),Y=P0;let z0=new U51({getJetStream:()=>U.getJetStream()});z0.init().catch(()=>{}),X=z0;let w1=new wg(Q31,{getJetStream:()=>U.getJetStream()}),b$=new wg(n40,{getJetStream:()=>U.getJetStream()});w1.init().catch(()=>{}),b$.init().catch(()=>{}),J={reads:w1,cards:b$};let o$=new RH1({getJetStream:()=>U.getJetStream()});o$.init().catch(()=>{}),G=o$,K=MP1({getConnection:()=>U.getConnection()}),H=new IP1({getConnection:()=>U.getConnection()}),F=new SP1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),LX8(U),U.onReady(()=>{P0?.init().catch((U8)=>{console.error("[McpListCache] Deferred init failed:",U8)}),z0.init().catch((U8)=>{console.error("[SkillCatalogCache] Deferred init failed:",U8)}),w1.init().catch((U8)=>{console.error("[PrReadCache] Deferred init failed:",U8)}),b$.init().catch((U8)=>{console.error("[PrCardCache] Deferred init failed:",U8)}),o$.init().catch((U8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",U8)}),K.start(),Oj$(()=>U.getConnection()),F.init().catch((U8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",U8)})})}if(Iz)await Iz();M61(Y),B51(X),L51(()=>U?.getConnection()??null),Y31(J),qH1(G);let B={storage:new xl(Z.db),sseHub:g6,onThreadFinished:async(H0,J0)=>Mp(new t3(Z.db),H0,J0,new B3(Z.db))},D=new GW1(B),O=new z90(Z.db),w=new CP1(O);w.start(),bd$(H),H.start((H0)=>{pV0(H0),D.execute({type:"CANCEL",taskId:H0}).catch((J0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",J0)})}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast start failed:",H0)}),U?.onReady(()=>{H.start().catch((H0)=>{console.error("[CancelBroadcast] Deferred start failed:",H0)})});let j=()=>U?.getConnection()??null;xw1(j),U?.onReady(()=>xw1(j)),JF1(j),U?.onReady(()=>JF1(j)),F.init().catch((H0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",H0)}),Iz=async()=>{await D.stopAll(),D.dispose(),w.dispose(),H.stop().catch(()=>{}),_J8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),wj$(),G.teardown(),M61(null),B51(null),L51(null),Y31(null),qH1(null)};let E=new Q1;if(E.use("*",zH1({enabled:(H0)=>Yt(H0,"debug")==="1"})),E.use("*",Xf0),E.use("/*",FX8({origin:(H0,J0)=>iN8(H0,{baseUrl:L0().baseUrl,requestOrigin:new URL(J0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(H0,J0)=>{if(await J0(),H0.req.path.includes("/files/"))return;if(H0.req.path.includes("/fs/")&&H0.req.path.endsWith("/read"))return;H0.header("X-Frame-Options","DENY"),H0.header("Content-Security-Policy","frame-ancestors 'none'")}),L0().nodeEnv==="development")E.use("*",zN8());E.use("*",async(H0,J0)=>{if(await J0(),ot(H0.req.path))return;if(H0.res.status>=500){let z0=await H0.res.clone().text();console.error(`[5xx Response] ${H0.req.method} ${H0.req.path} - ${H0.res.status}:`,z0)}}),E.get(bX.HEALTH,(H0)=>{if(Q)return H0.json({status:"shutting_down"},503);return H0.json({status:"ok"})}),E.get(bX.HEALTH_LIVE,(H0)=>{return H0.json({status:"ok"})}),E.get(bX.HEALTH_READY,async(H0)=>{if(Q)return H0.json({status:"shutting_down"},503);let J0={};if(J0.postgres={status:await _75(Z.pool)?"up":"down"},U)J0.nats=U.isConnected()?{status:"up"}:{status:"down"};else J0.nats={status:"down"};let P0=J0.postgres.status==="up",z0=P0?200:503;return H0.json({status:P0?"ready":"not_ready",services:J0},z0)}),E.get(bX.METRICS,async(H0)=>{try{let J0=await Kf0.collect(),P0=v75.serialize(J0.resourceMetrics);return H0.text(P0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(J0){return console.error("Failed to collect metrics:",J0),H0.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${bX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(H0)=>{let J0=H0.req.param("queueName");if(!f75.has(J0))return H0.json({error:`Unknown queue: ${J0}`},404);let[P0,z0]=await Promise.all([AB.listQueuedWorkflows({queueName:J0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),AB.listQueuedWorkflows({queueName:J0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return H0.json({queue_length:P0.length,in_flight:z0.length})}),E.route("/api/config",aF8),E.route("/api/_reports",KU8),E.route("/api/_stripe",NP1),E.route("/api/_github",UU8({taskBoard:()=>i,contextFactory:()=>g})),E.route("/api/_git",Ut);let T={db:Z.db,encryptionKey:L0().encryptionKey};E.route("/api/_jira",AU8(T)),E.route("/api/_jira",LU8(T)),E.route("/report",JU8($.clientDir)),E.route("/api/auth/custom",xX8),E.all("/api/auth/admin/*",EJ8),E.all("/api/auth/*",async(H0)=>{return await B4.handler(H0.req.raw)});let z=gQ8();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",_90),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",_90),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",j90),E.route("/",mQ8()),E.use("/oauth-proxy/:connectionId/*",_90),E.all("/oauth-proxy/:connectionId/*",lN8);let A=async(H0)=>{let P0=await y75()(H0.req.raw),z0=await P0.json();return Response.json(z0,P0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",_90),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(H0)=>{let P0=await g75()(H0.req.raw),z0=await P0.json();return Response.json(z0,P0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=NX8({ttlMs:120000}),_=await yY8({db:Z.db,auth:B4,encryption:{key:L0().encryptionKey},observability:{tracer:bO,meter:J$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});OY.set(_),hr1({db:Z.db,baseUrl:N5()}),gY8({db:Z.db}),cY8({db:Z.db}),sY8({db:Z.db}),EU8({db:Z.db,encryptionKey:L0().encryptionKey}),uh$({db:Z.db}),QX8({db:Z.db}),wu$({db:Z.db});let V=Fj(Z.db),y=new _a(Z.db),g=EN8({db:Z.db});OK1({storage:V,studioContextFactory:g,orgContextFactory:(H0)=>o3(Z.db,H0),systemDatabaseUrl:ce(L0().databaseUrl,L0().databasePgSsl)}),eW1({systemDatabaseUrl:ce(L0().databaseUrl,L0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:g6}}),nW1({dispatchRunFn:mm$,studioContextFactory:g,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:g6}});let h=new xl(Z.db),i=new t3(Z.db),n=new B3(Z.db),U0=new vP1(i,g,n);if(L0().taskBoardReviewSweeperEnabled){U0.start();let H0=Iz;Iz=async()=>{await H0?.(),U0.dispose()}}FN8({automations:V,taskBoard:i,fire:kK,systemDatabaseUrl:ce(L0().databaseUrl,L0().databasePgSsl),settleMs:L0().boardTransitionSettleSeconds*1000}),oh$(NN8),Fd$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let H0=U?.getConnection();return H0?await cN8.jetstreamManager(H0):null},messageParts:h.messageParts(),resolveRun:async(H0)=>{let J0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",H0).executeTakeFirst();return J0?{orgId:J0.organization_id,createdBy:J0.created_by,version:J0.message_storage_version??1,status:J0.status,runFenceToken:J0.run_fence_token,title:J0.title??null}:null},completeRunIfNotCompleted:async(H0,J0)=>{let P0=await h.completeRunIfNotCompleted(H0,J0);if(vx0(g6,J0,H0,P0),P0)await Mp(i,H0,J0,n);return P0},markRunRequiresAction:async(H0,J0)=>{let P0=await h.requiresActionIfInProgress(H0,J0);return vx0(g6,J0,H0,P0),P0},markRunFailed:async(H0,J0,P0,z0)=>{let w1=await h.markRunFailed(H0,J0,P0,z0);if(vx0(g6,J0,H0,w1),w1)await Mp(i,H0,J0,n);return w1},clearSynthesizedError:async(H0,J0)=>{await h.messageParts().replaceMessageParts(H0,CP(H0,J0),[])},persistTitle:(H0,J0,P0)=>h.update(H0,J0,{title:P0}),onTitleUpdated:async({runId:H0,orgId:J0,title:P0})=>{let z0=await h.get(H0,J0).catch(()=>null);g6.emit(J0,NU(H0,z0?.status??"in_progress",{title:P0,virtualMcpId:z0?.virtual_mcp_id??void 0,createdBy:z0?.created_by,triggerId:z0?.trigger_id,branch:z0?.branch??null,harnessId:z0?.harness_id??void 0,createdAt:z0?.created_at,updatedAt:z0?.updated_at}))},bumpProgress:async({runId:H0,orgId:J0})=>{await h.bumpProgress(H0,J0)},recordCompleted:async({runId:H0,orgId:J0,distinctId:P0,usage:z0})=>{l1.capture({distinctId:P0,event:"chat_message_completed",groups:{organization:J0},properties:{organization_id:J0,thread_id:H0,transport:"projector",input_tokens:z0.inputTokens,output_tokens:z0.outputTokens,total_tokens:z0.totalTokens}})},recordFailed:async({runId:H0,orgId:J0,distinctId:P0,reason:z0,kind:w1})=>{l1.capture({distinctId:P0,event:"chat_message_failed",groups:{organization:J0},properties:{organization_id:J0,thread_id:H0,transport:"projector",error_category:w1,error_message:z0}})},purgeRun:async(H0)=>{F.purge(H0)}}),Nm$({studioContextFactory:g,systemDatabaseUrl:ce(L0().databaseUrl,L0().databasePgSsl),streamBuffer:F}),wN8(),ur1(),uY8(),dY8(),aY8(),zU8(),BN8(),ih$(),XX8(),ju$(),BU8();let b0=async(H0,J0,P0)=>{let z0=await V.findById(H0,J0);if(!z0)throw Error("Automation not found");return zK1({automationId:z0.id,organizationId:z0.organization_id,triggerId:null})},G0=new Ht(V,({automation:H0,trigger:J0,contextMessages:P0,idempotencyKey:z0})=>kK({automationId:H0.id,organizationId:H0.organization_id,triggerId:J0.id,contextMessages:P0},{idempotencyKey:z0})),N0=[YH(),ph(),kB()];for(let H0 of N0)fx0(H0).then(()=>{}).catch((J0)=>console.error("[monitoring] Retention cleanup failed:",J0));let o=()=>B4.api.deleteAllExpiredApiKeys().catch((H0)=>console.error("[auth] Expired API key cleanup failed:",H0));o(),setInterval(o,86400000).unref(),E.use("*",async(H0,J0)=>{if(Qf0(H0.req.path))return J0();let P0={measure:async(w1,b$)=>{yK(H0,w1);try{return await b$()}finally{YW(H0,w1)}}},z0=await OY.create(H0.req.raw,{timings:P0});z0.automationRunner=b0,H0.set("studioContext",z0);try{await J0()}finally{let w1=z0.pendingRevalidations;if(w1.length>0)Promise.race([Promise.allSettled(w1),F$(30000)]).catch((o$)=>console.error("[studio] revalidation cleanup error:",o$))}}),E.use("/api/:org/decopilot/*",Jt),E.use("/api/:org/v1/*",Jt),E.use("/api/:org/files/*",Jt),E.use("*",async(H0,J0)=>{if(mN8(H0.req.path))return J0();let P0=H0.get("studioContext");if(!P0?.organization?.id||!P0?.auth?.user?.id)return J0();if(!(await P0.storage.orgSsoConfig.getByOrgId(P0.organization.id))?.enforced)return J0();if(!await P0.storage.orgSsoSessions.isValid(P0.auth.user.id,P0.organization.id))return H0.json({error:"SSO authentication required for this organization"},403);return J0()});let e=new Q1;e.use("*",cF({mountPath:"/api/org-sso"})),e.route("/",Gb0()),E.route("/api/org-sso",e),E.get("/api/tools/management",(H0)=>{return H0.json({tools:ya,grouped:PA()})}),E.use("/mcp/*",async(H0,J0)=>{yK(H0,"mcp");try{return await J0()}finally{YW(H0,"mcp")}});let Q0=async(H0,J0)=>{let P0=H0.var.studioContext;if(!P0.auth.user?.id&&!P0.auth.apiKey?.id){let z0=new URL(H0.req.url),w1=H0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),b$=w1?`${w1}://${z0.host}`:z0.origin;return H0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${b$}${z0.pathname}/.well-known/oauth-protected-resource"`}})}return await J0()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),UK()){let{mountDevRoutes:H0}=(gN8(),dx0(yN8));H0(E,Q0)}let $0=new Q1;$0.use("*",cF({mountPath:"/mcp"})),$0.route("/",mk0()),E.route("/mcp",$0);let X0=new Q1;X0.use("*",cF({mountPath:"/mcp/self"})),X0.route("/",sb0()),E.route("/mcp/self",X0);let h0=new Q1;h0.use("*",cF({mountPath:"/mcp"})),h0.route("/",pk0()),E.route("/mcp",h0),E.use("/api/:org/models/*",async(H0,J0)=>{yK(H0,"llm_models");try{return await J0()}finally{YW(H0,"llm_models")}});let k0=gJ8({cancelBroadcast:H,streamBuffer:F,runRegistry:D});E.route("/api",k0),E.route("/api",MU8);let K1=new Q1;K1.use("*",cF({mountPath:"/api"})),K1.route("/",$x0()),E.route("/api",K1),E.route("/api",nF8);let c0=new Q1;c0.use("*",cF({mountPath:"/api"})),c0.route("/",Zx0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",c0);let w0=new va(Z.db),E0=new Q1;E0.use("*",cF({mountPath:"/api"})),E0.route("/",Nb0()),E.route("/api",E0),E.route("/api/deco-sites",eJ8()),E.route("/api/deco-apps",lF8());let n0=new Q1;n0.use("*",cF({mountPath:"/api/deco-sites"})),n0.route("/",Db0()),E.route("/api/deco-sites",n0),E.route(Yb0,PJ8()),E.route(kK8,_K8()),E.route("/api/_editor-resolve",oF8()),E.route(gX8,hX8()),E.route(rv0,$J8());let O1=L0(),o0=O1.elevenlabsApiKey?new Ax0({apiKey:O1.elevenlabsApiKey,model:O1.elevenlabsVoiceModel,conversationModel:O1.elevenlabsConversationModel,voiceId:O1.elevenlabsVoiceId}):null,v0={openai:O1.openaiLiveApiKey?new XP1({apiKey:O1.openaiLiveApiKey,voice:O1.openaiLiveVoice}):null,elevenlabs:o0?new YP1(o0,()=>U?.getConnection()??null):null},d0=new HP1({adapter:o0,conversationAdapters:v0,defaults:O1,secret:dN8(O1),getConnection:()=>U?.getConnection()??null}),i0=EF8({voiceSessions:d0,kvStorage:w0,runRegistry:D,streamBuffer:F,sseHub:g6,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:UK(),mcpAuth:Q0,oauthProxyHandler:lN8,watchHandler:nN8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((H0)=>{return H0.json({error:"Not Found",path:H0.req.path},404)}),E.onError(uJ8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([g6.stop(),Iz?Promise.resolve(Iz()).finally(()=>{Iz=null}):Promise.resolve()]),U)await U.drain().catch((H0)=>console.error("[shutdown] NATS drain error:",H0));console.log("[shutdown] Flushing telemetry..."),await xJ().catch((H0)=>console.error("[shutdown] Telemetry flush error:",H0)),console.log("[shutdown] Closing database..."),await iJ$(Z).catch((H0)=>console.error("[shutdown] Database close error:",H0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await AB.registerQueue(nG,{partitionQueue:!0,concurrency:BK1,minPollingIntervalMs:DK1}),await AB.registerQueue(jW,{partitionQueue:!0,concurrency:rW1,priorityEnabled:!0}),await AB.registerQueue(IB,{workerConcurrency:L0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await AB.registerQueue(VB,{workerConcurrency:L0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await AB.registerQueue(vO,{partitionQueue:!0,concurrency:Um$}),await AB.registerQueue(_z,Ou$),await AB.registerQueue(vz),await cw1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((H0)=>AB.deleteQueue(H0))),await LK1(Z.pool),qK$().catch((H0)=>{console.error("[studio-pack-backfill] failed:",H0)}),Mm(Z.db).catch((H0)=>{console.error("[automations] built-in seed failed:",H0)}),lr1().catch((H0)=>{console.error("[org-fs] public-sets boot sync kick failed:",H0)})}})}var cN8,hN8=5000,Iz=null,lN8=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 OY.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await $t(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=wO1(await W.json());if(!K)K=H.origin;let N=await E90(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),D;if(Y==="authorize")D=B.authorization_endpoint;else if(Y==="token")D=B.token_endpoint;else if(Y==="register")D=B.registration_endpoint;if(!D)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let O=cQ8(D);if(O)return O;let w=new URL(D),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=L0().baseUrl??j.origin;try{if(!pN8(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(GX8(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},P=$.req.header("Content-Type");if(P)E["Content-Type"]=P;let T=$.req.header("Authorization");if(T)E.Authorization=T;let z,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&P?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let n=atob(T.slice(6).trim()),U0=n.indexOf(":");if(U0!==-1){let b0=decodeURIComponent(n.slice(0,U0)),G0=decodeURIComponent(n.slice(U0+1));A=b0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),h=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof h==="string"&&h)q=h;let i=new URLSearchParams;for(let[n,U0]of y.entries())i.append(n,U0.toString());z=i.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),h={};try{h=g?JSON.parse(g):{}}catch{z=g}let i=typeof h==="object"&&h!==null&&!Array.isArray(h);if(z===void 0&&!i)z=g;if(z===void 0){let n=h,U0=n.metadata&&typeof n.metadata==="object"?n.metadata:{};n.metadata={...U0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},z=JSON.stringify(n),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:z,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let h=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,i=null;try{i=await Dz(G.connection_url)??D}catch{i=D}let n={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:h,clientId:A,clientSecret:q,tokenEndpoint:i};await new s5(X.db,X.vault).upsert(n)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},nN8=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&&(!iN(Y)||!await pN(Z)))return $.json({error:"forbidden"},403);let W=G?cI0:Y;if(G)fL({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return zO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!g6.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{g6.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),g6.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),g6.remove(W,K),N()})})})},v75,f75,y75=()=>x75(B4),g75=()=>b75(B4);var oN8=L(()=>{r$();r1();cr1();lY8();iY8();eY8();$50();fG1();JX8();p40();w9();bd();R8();W8();nv0();UX8();AH1();LK();EN();Fw1();D3();v6();Q6();ww1();uX8();ZJ8();Aw1();zJ8();Cw1();hw1();uw1();NK();P90();lw1();lJ8();ov0();PF8();qF8();MF8();SF8();uF8();iw1();cF8();dk0();t60();tF8();nk0();AE1();sF8();PE1();eF8();GU8();HU8();FU8();NU8();DU8();OU8();TU8();TP1();sw1();IU8();zE1();OE1();yZ0();mU8();FP1();BJ();OU0();O$0();J31();F$0();N$0();IH1();dU8();pU8();fw1();eU8();xV0();$N8();Br();fa();xL();a5();_O1();JN8();DN8();XG();Lg();jN8();yK0();fP1();PW();mw1();bL();iW1();yK0();Qk0();Ca();Hr0();PN8();Uj();AN8();Vt();Fw1();Ep();yp();nV0();cN8=C(UH(),1);v75=new C75,f75=new Set([nG,jW,IB,VB,vO,_z])});var eN8={};O6(eN8,{resolveClientDir:()=>p75,resolveAssetPathWithTraversalCheck:()=>aN8,isPathWithinDirectory:()=>rN8,createAssetHandler:()=>n75});import{resolve as TZ0,dirname as u75,join as l75,extname as c75,basename as m75,sep as sN8}from"path";function d75($,Z){if($===Z||m75($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${sN8}assets${sN8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function rN8($,Z){let Q=TZ0(Z),Y=TZ0($);return Y===Q||Y.startsWith(Q+"/")}function aN8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=TZ0(Z,Q);if(!rN8(Y,Z))return null;return Y}function p75($,Z="../client"){let Q=new URL($),Y=u75(Q.pathname);return TZ0(Y,Z)}function n75($={}){let{env:Z="production",clientDir:Q=i75,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=aN8({requestPath:W,clientDir:Q});if(!K)return null;let H=l75(K,"index.html"),F=TZ0(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(c75(K))?[H,F]:[];for(let D of[K,...B])try{let O=Bun.file(D);if(await O.exists())return new Response(O,{headers:d75(D,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var i75="./dist/client";var $B8=()=>{};var ZB8={};O6(ZB8,{tryUpgradePreviewWs:()=>$Q5,tryHandlePreviewHttp:()=>e75,previewWebSocketHandler:()=>ZQ5,parsePreviewBaseDomain:()=>a75,isPreviewWsData:()=>yx0,extractHandleFromHost:()=>lP1});function s75($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function r75(){return new Response(o75,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function a75($){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 lP1($,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 e75($,Z){let Q=lP1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return qZ0(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Ii)&&s75($))return r75();return X.headers.delete(Ii),X}function qZ0($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function yx0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function $Q5($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=lP1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return qZ0(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return qZ0(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return qZ0(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 qZ0(426,"upgrade failed");return}function RZ0($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var t75=256,o75='<!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>',ZQ5;var QB8=L(()=>{v80();ZQ5={open($){let Z=$.data;if(!yx0(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)}`),RZ0($,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)=>{RZ0($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{RZ0($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!yx0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=t75){RZ0($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!yx0(Z))return;RZ0($,Z,1000,"")}}});r$();var $z1="13";function Zz1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:$z1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}r$();import PB8 from"pg";var Qz1=8314027461559302n,zB8=600000,AB8=500;async function Yz1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=zB8}=$,X=$.log??((K)=>console.log(K)),J=new PB8.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",[Qz1.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 F$(AB8)}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)",[Qz1.toString()])}catch{}await J.end().catch(()=>{})}}r1();tx0();v6();function PD8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Uf0($,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 hz1(){let $=PD8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Uf0($,"--cpu-prof-dir")??process.cwd(),name:Uf0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Uf0($,"--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.'}))}Df0();var uZ0;function tz1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=fz();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...Y}))};return Z().catch(()=>{}),uZ0=setInterval(()=>void Z().catch(()=>{}),$),uZ0.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(uZ0)clearInterval(uZ0)}}import*as TD8 from"bun:jsc";var{startSamplingProfiler:RD8,samplingProfilerStackTraces:qD8}=TD8;function oz1(){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{RD8()}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=qD8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function sz1(){hz1();let $=[tz1(),nz1(),oz1()];return()=>{for(let Z of $)Z()}}import{existsSync as HQ5}from"fs";var OW=L0();fz1();var{DBOS:MZ0,DBOSClient:QQ5}=await import("@dbos-inc/dbos-sdk");function nP1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var YQ5=[nG,jW,IB,VB,vO,_z,vz],XQ5=OW.dispatchRole==="worker"?YQ5:OW.dispatchRole==="api"?[]:void 0;MZ0.setConfig(Zz1({systemDatabaseUrl:nP1(OW.databaseUrl,OW.databasePgSsl),poolSize:OW.dbosPoolSize,executorID:OW.podName,listenQueues:XQ5}));var{createApp:JQ5}=await Promise.resolve().then(() => (oN8(),tN8)),{isServerPath:GQ5}=await Promise.resolve().then(() => (yZ0(),Ez1)),{createAssetHandler:WQ5,resolveClientDir:WB8}=await Promise.resolve().then(() => ($B8(),eN8)),KQ5=OW.port,YB8=WB8(import.meta.url,"../client"),KB8=HQ5(YB8)?YB8:WB8(import.meta.url,"../dist/client"),FQ5=WQ5({clientDir:KB8,isServerPath:GQ5}),UQ5={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function NQ5($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(UQ5))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:BQ5,tryHandlePreviewHttp:DQ5,tryUpgradePreviewWs:LQ5,previewWebSocketHandler:cP1,isPreviewWsData:mP1}=await Promise.resolve().then(() => (QB8(),ZB8)),{getOrInitSharedRunner:HB8}=await Promise.resolve().then(() => (OX(),GS$)),FB8=BQ5(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),XB8={baseDomain:FB8??"",getRunner:HB8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())HB8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var gx0=await JQ5({clientDir:KB8}),dP1=process.env.DBOS_CONDUCTOR_KEY?.trim(),JB8=process.env.DBOS_CONDUCTOR_URL?.trim();await Yz1({databaseUrl:nP1(OW.databaseUrl,OW.databasePgSsl)},()=>MZ0.launch({...dP1?{conductorKey:dP1}:{},...dP1&&JB8?{conductorURL:JB8}:{}}));console.log(`[dbos] application version: ${MZ0.applicationVersion}`);var iP1=5,pP1=0;await D8(async()=>{pP1++;try{return await gx0.initDbos()}catch($){let Z=pP1>=iP1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${pP1}/${iP1} failed, ${Z}`,$),$}},{maxAttempts:iP1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});var OQ5=Bun.serve({idleTimeout:0,port:KQ5,hostname:"0.0.0.0",fetch:async($,Z)=>{if(FB8){let Y=await LQ5($,Z,XB8);if(Y===void 0)return;if(Y)return Y;let X=await DQ5($,XB8);if(X)return X}let Q=await FQ5($);if(Q)return NQ5(Q);return gx0.fetch($,{server:Z})},websocket:{open($){if(mP1($.data))cP1.open($)},message($,Z){if(mP1($.data))cP1.message($,Z)},close($){if(mP1($.data))cP1.close($)}},development:!1}),wQ5=sz1();if(OW.localMode)Promise.resolve().then(() => (Eg(),VV0)).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(() => (Eg(),VV0));Z()}catch{}});var GB8=!1;async function jQ5($){let Z;try{Z=await QQ5.create({systemDatabaseUrl:nP1(OW.databaseUrl,OW.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:jW,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:jW}),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 hx0($){if(GB8)return;GB8=!0,console.log(`
4334
4334
  [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{wQ5(),gx0.markShuttingDown();let J=Xz1(OW.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await F$(J),await OQ5.stop(!0);let G=MZ0.executorID;await MZ0.shutdown(),await jQ5(G),await gx0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>hx0("SIGTERM"));process.on("SIGINT",()=>hx0("SIGINT"));process.on("SIGHUP",()=>hx0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),hx0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.499.3",
3
+ "version": "4.499.4",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {