decocms 4.415.0 → 4.415.2

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 (350) hide show
  1. package/dist/client/assets/{AlertCircle-CvaSOOO8.js → AlertCircle-kC7-H0Eq.js} +1 -1
  2. package/dist/client/assets/{AreaChart-C1zWMN3A.js → AreaChart-BRh_r1hb.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-BsqlBCdi.js → ArrowLeft-CmIJpvUZ.js} +1 -1
  4. package/dist/client/assets/{ArrowRight-B6VZdTtP.js → ArrowRight-CSuUxLXs.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-C1c3cSMN.js → ArrowUp-C5ammB5D.js} +1 -1
  6. package/dist/client/assets/{CartesianChart-DT33HVeq.js → CartesianChart-DqoQKbeO.js} +1 -1
  7. package/dist/client/assets/{Check-ClKm876e.js → Check-Dbt8bZ4k.js} +1 -1
  8. package/dist/client/assets/{CheckCircle-B38I9lsp.js → CheckCircle-xh5odl0l.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-BBBSFlle.js → ChevronUp-B2Dk8prO.js} +1 -1
  10. package/dist/client/assets/{Copy01-kb1901QR.js → Copy01-CnzDdpP4.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-DkYuXaNf.js → CreditCard01-BlGIgjeE.js} +1 -1
  12. package/dist/client/assets/{DotsVertical-OXZ2C8qE.js → DotsVertical-B-n3YUHe.js} +1 -1
  13. package/dist/client/assets/{ErrorBarContext-CSFQ9ttu.js → ErrorBarContext-l7sP1UmW.js} +1 -1
  14. package/dist/client/assets/{Image01-xbxm22_Y.js → Image01-J0gfSiuA.js} +1 -1
  15. package/dist/client/assets/{Key01-ZIYydTtn.js → Key01-B8-ttURL.js} +1 -1
  16. package/dist/client/assets/{Line-C_txxRhK.js → Line-CYyv3cvx.js} +1 -1
  17. package/dist/client/assets/{Link01-cXYRJQde.js → Link01-DTEbhjIF.js} +1 -1
  18. package/dist/client/assets/{LinkExternal01-UxTfoueY.js → LinkExternal01-CDf0tC6K.js} +1 -1
  19. package/dist/client/assets/{Monitor01-CINH3FWT.js → Monitor01-CtZ292tS.js} +1 -1
  20. package/dist/client/assets/{Palette-C2svjF4J.js → Palette-D8COKeRn.js} +1 -1
  21. package/dist/client/assets/{Plus-Bv10xzXZ.js → Plus-CtWJxGU_.js} +1 -1
  22. package/dist/client/assets/{SearchMd-DRAIsS0-.js → SearchMd-DkecYIYo.js} +1 -1
  23. package/dist/client/assets/{Sector-TihpQ2pX.js → Sector-BgTyCRZ3.js} +1 -1
  24. package/dist/client/assets/{ShoppingBag01-DsBku-zP.js → ShoppingBag01-Bw6UaPe0.js} +1 -1
  25. package/dist/client/assets/{Sun-CJOAGa8i.js → Sun-Btmv74E4.js} +1 -1
  26. package/dist/client/assets/{Tool01-gY-gdMF4.js → Tool01-Du0jvtC3.js} +1 -1
  27. package/dist/client/assets/{Trash01-DUhLvzYZ.js → Trash01-DoLFc_xg.js} +1 -1
  28. package/dist/client/assets/{Upload01-BsdejHE0.js → Upload01-DkNYZKnb.js} +1 -1
  29. package/dist/client/assets/{User01-B4dCU7oy.js → User01-q3oA7kn7.js} +1 -1
  30. package/dist/client/assets/{UserSquare-BA1qsXhU.js → UserSquare-nJ9f4NF0.js} +1 -1
  31. package/dist/client/assets/{Users01-BLSNtVXz.js → Users01-CZj2rg51.js} +1 -1
  32. package/dist/client/assets/{X-BTpPaU7c.js → X-DcSBITTK.js} +1 -1
  33. package/dist/client/assets/{XAxis-Cj_1oR4W.js → XAxis-DEvYHJUW.js} +1 -1
  34. package/dist/client/assets/{XClose-DnZUIdlK.js → XClose-xx11bGMi.js} +1 -1
  35. package/dist/client/assets/{ZoomOut-DvQpsf4w.js → ZoomOut-Bl9nBv2m.js} +1 -1
  36. package/dist/client/assets/{access-gate-BYf0rE33.js → access-gate-Dzi4fnWH.js} +1 -1
  37. package/dist/client/assets/{add-connection-dialog-BdXnmDrQ.js → add-connection-dialog-eYFdQfcM.js} +1 -1
  38. package/dist/client/assets/{agent-analytics-DQZgiL7L.js → agent-analytics-B_bnmHFX.js} +1 -1
  39. package/dist/client/assets/agent-app-CYw-jdzL.js +1 -0
  40. package/dist/client/assets/{agent-assets-B-r7ioGn.js → agent-assets-CEksftHY.js} +1 -1
  41. package/dist/client/assets/{agent-automation-BkxL2BIZ.js → agent-automation-Bovs-JL8.js} +1 -1
  42. package/dist/client/assets/{agent-automations-pf_bDZZ5.js → agent-automations-DbT9Jgwz.js} +1 -1
  43. package/dist/client/assets/{agent-connect-sources-Do412j4U.js → agent-connect-sources-DC9I3xsN.js} +1 -1
  44. package/dist/client/assets/agent-deck-DwkA2PhU.js +1 -0
  45. package/dist/client/assets/{agent-e2e-Db1tY-Py.js → agent-e2e-DRrN4v4e.js} +1 -1
  46. package/dist/client/assets/{agent-experiments-a-194CZ0.js → agent-experiments-P8pdquwP.js} +1 -1
  47. package/dist/client/assets/{agent-file-DcPThm01.js → agent-file-C1aPPXJy.js} +1 -1
  48. package/dist/client/assets/{agent-git-I5DAbFxV.js → agent-git-5PteGkbf.js} +1 -1
  49. package/dist/client/assets/{agent-hosting-8wURqYK1.js → agent-hosting-BykTv5CP.js} +1 -1
  50. package/dist/client/assets/{agent-icon-BvDKYGuI.js → agent-icon-DEuXrFU-.js} +1 -1
  51. package/dist/client/assets/agent-library-Xj5fQ0LD.js +1 -0
  52. package/dist/client/assets/agent-library-file-D5JsOaVW.js +1 -0
  53. package/dist/client/assets/{agent-monitor-DU5E9xAR.js → agent-monitor-C9czk4CV.js} +1 -1
  54. package/dist/client/assets/{agent-overview-BBH7XkKk.js → agent-overview-D45fWzvn.js} +1 -1
  55. package/dist/client/assets/agent-settings-D6u8Bg4M.js +1 -0
  56. package/dist/client/assets/{agent-site-editor-DSbFppgh.js → agent-site-editor-Dmu94K1N.js} +1 -1
  57. package/dist/client/assets/agent-site-editor-code-Dl48bYZ_.js +2 -0
  58. package/dist/client/assets/{agent-site-editor-content-C6CyUicz.js → agent-site-editor-content-Bl-t6lUo.js} +3 -3
  59. package/dist/client/assets/{agent-site-editor-preview-Bm6vi5GO.js → agent-site-editor-preview-CzVgKErn.js} +3 -3
  60. package/dist/client/assets/agent-view-WwVCrWL4.js +1 -0
  61. package/dist/client/assets/{agent-view-guard-BHFZQ084.js → agent-view-guard-Cpl4t8Wc.js} +1 -1
  62. package/dist/client/assets/{agents-list-BmcrOH9K.js → agents-list-BFK21Yuo.js} +1 -1
  63. package/dist/client/assets/{ai-providers-D07lihCf.js → ai-providers-Cen30ZpE.js} +1 -1
  64. package/dist/client/assets/{alert-CbVRyYdn.js → alert-BgG1hcRk.js} +1 -1
  65. package/dist/client/assets/{alert-dialog-D5AYweb7.js → alert-dialog-BFN3BsEs.js} +1 -1
  66. package/dist/client/assets/{analytics-sections-C7kQuinp.js → analytics-sections-D_Y_StFT.js} +1 -1
  67. package/dist/client/assets/{api-keys-CRcL5tuf.js → api-keys-DR_0hjnW.js} +1 -1
  68. package/dist/client/assets/api-keys-WCS72Fbb.js +1 -0
  69. package/dist/client/assets/app-editor-VfjbCTYl.js +1 -0
  70. package/dist/client/assets/{asset-utils-DxlUH6fM.js → asset-utils-x_rl903X.js} +1 -1
  71. package/dist/client/assets/{auth-DqmsEfIB.js → auth-CkYcqAeJ.js} +1 -1
  72. package/dist/client/assets/{auth-catchall-BMmDsnzK.js → auth-catchall-BUEqZAX1.js} +1 -1
  73. package/dist/client/assets/{auth-entry-B26Aq39u.js → auth-entry-Dy3A6tnR.js} +1 -1
  74. package/dist/client/assets/{auth-split-layout-D5nNb-G8.js → auth-split-layout-CML6YjN7.js} +1 -1
  75. package/dist/client/assets/{authenticate-and-persist-oauth-CtghXoSr.js → authenticate-and-persist-oauth-ER6BM4qa.js} +1 -1
  76. package/dist/client/assets/{automation-list-row-CkyFpQMb.js → automation-list-row-qF4IF2gz.js} +1 -1
  77. package/dist/client/assets/{automation-runs-CoqjOPyS.js → automation-runs-CGa-cFEV.js} +1 -1
  78. package/dist/client/assets/{automations-2UeJll3f.js → automations-CsV63rI9.js} +1 -1
  79. package/dist/client/assets/{autosend-D__v3v-c.js → autosend-B-xGQLGu.js} +1 -1
  80. package/dist/client/assets/{avatar-JoRElFKl.js → avatar-Cvy6LEar.js} +1 -1
  81. package/dist/client/assets/{badge-B0yp_bFb.js → badge-DetyAvFv.js} +1 -1
  82. package/dist/client/assets/{block-document-iObAvspI.js → block-document-CYJ53JSl.js} +1 -1
  83. package/dist/client/assets/{blocks-preview-workspace-context-CroMcTkl.js → blocks-preview-workspace-context-B66bFLbm.js} +1 -1
  84. package/dist/client/assets/{buckets-CdF9xMMp.js → buckets-BMbNhe3B.js} +1 -1
  85. package/dist/client/assets/{build-improve-prompt-doc-CXnpM7kh.js → build-improve-prompt-doc-Ds4R6zCr.js} +1 -1
  86. package/dist/client/assets/{calendar-_lAvk6Nt.js → calendar-DPRgUXmj.js} +1 -1
  87. package/dist/client/assets/{capability-load-error-8qZRldzC.js → capability-load-error-DM7abAa5.js} +1 -1
  88. package/dist/client/assets/{category-editor-fWmRfYwN.js → category-editor-B3RZ0e7d.js} +1 -1
  89. package/dist/client/assets/{chart-B8A_E9YA.js → chart-BuEQCXB-.js} +1 -1
  90. package/dist/client/assets/{chat-context-DCpRbJmR.js → chat-context-Cs0DM81h.js} +1 -1
  91. package/dist/client/assets/{chat-draft-BiPOqsxD.js → chat-draft-RwfJiIVl.js} +1 -1
  92. package/dist/client/assets/{checkbox-DYn5BX_y.js → checkbox-BlXpCA5l.js} +1 -1
  93. package/dist/client/assets/{choose-editor-9psJgCK3.js → choose-editor-Ct-ris_d.js} +1 -1
  94. package/dist/client/assets/{claim-phase-copy-CaNBNXR7.js → claim-phase-copy-cMB-5G3-.js} +1 -1
  95. package/dist/client/assets/{cli-auth-success-B-HmvL0Z.js → cli-auth-success-DxwMrsly.js} +1 -1
  96. package/dist/client/assets/{client-icons-DRAmgBv8.js → client-icons-CD-w53Wj.js} +1 -1
  97. package/dist/client/assets/{collapsible-Bg1MAa8S.js → collapsible-Wp8MlWNs.js} +1 -1
  98. package/dist/client/assets/{collection-detail-CzcE81KP.js → collection-detail-pLn8ZmrH.js} +1 -1
  99. package/dist/client/assets/{collection-display-button-BbOo6z7N.js → collection-display-button-DwdYwL7P.js} +1 -1
  100. package/dist/client/assets/{collection-search-EssCGlF9.js → collection-search-D8A3a74H.js} +1 -1
  101. package/dist/client/assets/{collection-table-wrapper-BktaVXNL.js → collection-table-wrapper-a4JM1X1A.js} +1 -1
  102. package/dist/client/assets/{collection-tabs-C2dMZ-Yz.js → collection-tabs-C6yWjqf8.js} +1 -1
  103. package/dist/client/assets/{combobox-DnOhf0WD.js → combobox-DObm2k8X.js} +1 -1
  104. package/dist/client/assets/{command-DljL6hzf.js → command-AfsFALr5.js} +1 -1
  105. package/dist/client/assets/{companion-mcps-section-DHfjmvo2.js → companion-mcps-section-BQug3QPM.js} +1 -1
  106. package/dist/client/assets/{config-BRt8XM2Q.js → config-C31nyUKU.js} +1 -1
  107. package/dist/client/assets/{connect-COAAkNAe.js → connect-Ps-0woaX.js} +1 -1
  108. package/dist/client/assets/{connect-layout-D_XB9JJD.js → connect-layout-DrnTRC-G.js} +1 -1
  109. package/dist/client/assets/{connection-DZucsf0o.js → connection-DeRv5rki.js} +1 -1
  110. package/dist/client/assets/{connection-card-DrvsNBSo.js → connection-card-COgBNtI5.js} +1 -1
  111. package/dist/client/assets/{connection-detail-DELb5RqN.js → connection-detail-CAOrkrp2.js} +1 -1
  112. package/dist/client/assets/{connection-form-helpers-BOYwqVWG.js → connection-form-helpers-DzCh8Fyg.js} +1 -1
  113. package/dist/client/assets/{connections-BTjmigpS.js → connections-C3Pvtb_x.js} +1 -1
  114. package/dist/client/assets/{context-t3HzYqzN.js → context-CLYUwUzm.js} +1 -1
  115. package/dist/client/assets/{create-organization-dialog-BCIcZ5Ce.js → create-organization-dialog-m6GWowv3.js} +1 -1
  116. package/dist/client/assets/{decopilot-BbS9GPYA.js → decopilot-BLRbUuvu.js} +1 -1
  117. package/dist/client/assets/{dialog-CfIoHDlJ.js → dialog-CpigP_0G.js} +1 -1
  118. package/dist/client/assets/{discover-C6NL6AwE.js → discover-BvFYHKB7.js} +1 -1
  119. package/dist/client/assets/{domain-settings-I8HFU1tc.js → domain-settings-uCc8I4gL.js} +1 -1
  120. package/dist/client/assets/{download-app-dialog-bvP5yIID.js → download-app-dialog-CqWOfc3Q.js} +1 -1
  121. package/dist/client/assets/{drawer-gbdrTv3r.js → drawer-Wo3x06xJ.js} +1 -1
  122. package/dist/client/assets/{editor-CUtbeyZe.js → editor-B1l1xN-R.js} +1 -1
  123. package/dist/client/assets/{empty-state-B7JCSTCX.js → empty-state-Dd__gUXO.js} +1 -1
  124. package/dist/client/assets/{empty-state-B_xAVz84.js → empty-state-HsN3dce3.js} +1 -1
  125. package/dist/client/assets/{extract-connection-data-CHpjURut.js → extract-connection-data-sRLHFO8e.js} +1 -1
  126. package/dist/client/assets/{feature-gate-CSCbG-02.js → feature-gate-coci_eA9.js} +1 -1
  127. package/dist/client/assets/{feature-paywall-BK6fjPbO.js → feature-paywall-HqubjQ02.js} +1 -1
  128. package/dist/client/assets/{file-explorer-BEA-kxcu.js → file-explorer-DY0zUFrZ.js} +1 -1
  129. package/dist/client/assets/{file-preview-Bk7_4BhT.js → file-preview-wPqsh5vK.js} +1 -1
  130. package/dist/client/assets/{file-share-button-CtEMEEnP.js → file-share-button-DIZcq57D.js} +1 -1
  131. package/dist/client/assets/{file-type-icon-C_2K-vjQ.js → file-type-icon-BAbRvEO3.js} +1 -1
  132. package/dist/client/assets/flat-project-CGM6aLEe.js +1 -0
  133. package/dist/client/assets/{folder-icon-D2srQ6r8.js → folder-icon-Dot1jjQ7.js} +1 -1
  134. package/dist/client/assets/{form-Bw-12Nua.js → form-DJuq50sa.js} +1 -1
  135. package/dist/client/assets/{gateway-client-DDRZPNgE.js → gateway-client-B7-Qfe3v.js} +1 -1
  136. package/dist/client/assets/{general-DFurEwpf.js → general-Dgipja2-.js} +1 -1
  137. package/dist/client/assets/{github-repo-22x8y8Tm.js → github-repo-D8GMoLYQ.js} +1 -1
  138. package/dist/client/assets/{home-BEfet_Bo.js → home-mbuvU4fS.js} +1 -1
  139. package/dist/client/assets/{index-CdYIy8eY.js → index-5cuasDox.js} +1 -1
  140. package/dist/client/assets/{index-Ccktnu9A.js → index-BA7VAgtV.js} +1 -1
  141. package/dist/client/assets/{index-Ty5Jzwnf.js → index-BAlIJraL.js} +3 -3
  142. package/dist/client/assets/{index-Cc_Zqhkn.js → index-BLyAkY9g.js} +1 -1
  143. package/dist/client/assets/{index-B1gW_UZi.js → index-BWgjNz3V.js} +1 -1
  144. package/dist/client/assets/{index-CP9MPNu2.js → index-Bt730a_r.js} +1 -1
  145. package/dist/client/assets/{index-BBn8QmOY.js → index-CAr3KF2k.js} +1 -1
  146. package/dist/client/assets/{index-TvCpAFy_.js → index-CfATIDTo.js} +1 -1
  147. package/dist/client/assets/{index-DTVMnS9R.js → index-D3eyET-S.js} +1 -1
  148. package/dist/client/assets/{index-oPco2Z7Q.js → index-DHm3sAos.js} +2 -2
  149. package/dist/client/assets/{index-CBJQH72Z.js → index-DeRupaYL.js} +1 -1
  150. package/dist/client/assets/{index-C23QqnY4.js → index-Di6dssOb.js} +1 -1
  151. package/dist/client/assets/{index-BGw3HTPr.js → index-DlEeRnPz.js} +1 -1
  152. package/dist/client/assets/{index-BBClJhS5.js → index-M93GjJWb.js} +1 -1
  153. package/dist/client/assets/{index-DRvgWruv.js → index-MCRUjgWq.js} +1 -1
  154. package/dist/client/assets/{index-redirect-D8rObEfr.js → index-redirect-C7GDIwb4.js} +1 -1
  155. package/dist/client/assets/{infiniteQueryObserver-BiKAGWol.js → infiniteQueryObserver-BwAQcTzb.js} +1 -1
  156. package/dist/client/assets/{infra-billing-DM30eRIB.js → infra-billing-xSgaA90A.js} +1 -1
  157. package/dist/client/assets/{input-Dk8ExXFi.js → input-B2DqY8Av.js} +1 -1
  158. package/dist/client/assets/{input-ZcuegaFq.js → input-BFf0MDPQ.js} +1 -1
  159. package/dist/client/assets/{input-MYwET4H0.js → input-Bl-eHzaC.js} +1 -1
  160. package/dist/client/assets/{integration-icon-cSotbhTg.js → integration-icon-C95OvdZY.js} +1 -1
  161. package/dist/client/assets/{label-9S9F78nK.js → label-CWrp9ARo.js} +1 -1
  162. package/dist/client/assets/{last-preview-page-BqZ-yKjx.js → last-preview-page-CmStTgKj.js} +1 -1
  163. package/dist/client/assets/{layout-XmYuHyUp.js → layout-XVXFFsem.js} +1 -1
  164. package/dist/client/assets/{legacy-agents-deep-Cos55l5T.js → legacy-agents-deep-D3b1CQ8z.js} +1 -1
  165. package/dist/client/assets/{legacy-main-redirect-SvbBzQfx.js → legacy-main-redirect-DKkmix2W.js} +1 -1
  166. package/dist/client/assets/library-DM9WpcZM.js +1 -0
  167. package/dist/client/assets/{library-tab-jc2e6zcQ.js → library-tab-0tb9G-YP.js} +1 -1
  168. package/dist/client/assets/{login-Dk9tmaQV.js → login-xXS7j6y2.js} +1 -1
  169. package/dist/client/assets/{markdown-D8NZ8Hcx.js → markdown-CpLNy1RX.js} +1 -1
  170. package/dist/client/assets/{mcp-app-renderer-CMM_xZGY.js → mcp-app-renderer-CNIQCA09.js} +1 -1
  171. package/dist/client/assets/{mcp-oauth-Rwm2gO51.js → mcp-oauth-Lt1uEt0B.js} +1 -1
  172. package/dist/client/assets/{members-C7CWAgRC.js → members-B8hITLTy.js} +1 -1
  173. package/dist/client/assets/{message-templates-LZ9bQOkh.js → message-templates-CwyUaWOP.js} +1 -1
  174. package/dist/client/assets/{mini-report-page-Djd5YLq-.js → mini-report-page-De2rcl1M.js} +1 -1
  175. package/dist/client/assets/{mock-board-wLpRW8bx.js → mock-board-Cmt_YWfT.js} +1 -1
  176. package/dist/client/assets/{monaco-editor-gMJT6cpK.js → monaco-editor-DkCAk4Y1.js} +1 -1
  177. package/dist/client/assets/{monitoring-stats-row-DGiOnVB-.js → monitoring-stats-row-D73woEwY.js} +1 -1
  178. package/dist/client/assets/{multi-select-CgJiEc6d.js → multi-select-CbfQ2v2s.js} +1 -1
  179. package/dist/client/assets/{mustache-C_QlIzWy.js → mustache-BqJRJimF.js} +1 -1
  180. package/dist/client/assets/{new-project-dialog-BaZdnvse.js → new-project-dialog-BENzaIpG.js} +1 -1
  181. package/dist/client/assets/{oauth-callback-DKlgv_Gu.js → oauth-callback-DpfxGbSH.js} +1 -1
  182. package/dist/client/assets/{oauth-callback-ai-provider-bpHWEFSR.js → oauth-callback-ai-provider-C5DazrQW.js} +1 -1
  183. package/dist/client/assets/{onboarding-BCfoU2BS.js → onboarding-CSwZhVA8.js} +1 -1
  184. package/dist/client/assets/{optimistic-project-sidebar-views-CmwJxzI1.js → optimistic-project-sidebar-views-B-5DFhs5.js} +1 -1
  185. package/dist/client/assets/{org-file-open-context-Bv73tl5K.js → org-file-open-context-BCKy1EPN.js} +1 -1
  186. package/dist/client/assets/{organization-choice-1eorpCYU.js → organization-choice-D3m4lgCG.js} +1 -1
  187. package/dist/client/assets/{orgs-zhbMCzP-.js → orgs-dD93PQr5.js} +1 -1
  188. package/dist/client/assets/{page-seo-form-CshajZtl.js → page-seo-form-B-Izwzp_.js} +1 -1
  189. package/dist/client/assets/{pair-C-k8zr2J.js → pair-CLpmliBK.js} +1 -1
  190. package/dist/client/assets/{plan-ladder-BlKhVXlg.js → plan-ladder-CsODIV72.js} +1 -1
  191. package/dist/client/assets/{popover-BgkxtrX7.js → popover-CEowmtOx.js} +1 -1
  192. package/dist/client/assets/{post-calendar-B-WdFfky.js → post-calendar-C1qmcGfg.js} +1 -1
  193. package/dist/client/assets/{post-editor-CsDksmyM.js → post-editor-Dq-kTbq7.js} +1 -1
  194. package/dist/client/assets/{preview-content-C6mifSrd.js → preview-content-DNwzEC_K.js} +1 -1
  195. package/dist/client/assets/{preview-dialog-CIYvMHEx.js → preview-dialog-BhZUZz4F.js} +1 -1
  196. package/dist/client/assets/{profile-C0w8Yfz5.js → profile-kbPC_1WN.js} +1 -1
  197. package/dist/client/assets/{project-app-view-Sevz3SK2.js → project-app-view-CfApyY5R.js} +1 -1
  198. package/dist/client/assets/{project-feed-BMtZcRjf.js → project-feed-D3ynHjIB.js} +1 -1
  199. package/dist/client/assets/{project-icon-C29pLjaM.js → project-icon-ChkGwOWc.js} +1 -1
  200. package/dist/client/assets/project-reports-DdsVNB9e.js +1 -0
  201. package/dist/client/assets/project-tasks-D2EeQu7L.js +1 -0
  202. package/dist/client/assets/{projects-B_9wM2AG.js → projects-BXC0oSzS.js} +1 -1
  203. package/dist/client/assets/{projects-empty-state-D2roHEQS.js → projects-empty-state-BBjzNMFV.js} +1 -1
  204. package/dist/client/assets/{prompts-SqPXo2ej.js → prompts-sdO1VJjf.js} +1 -1
  205. package/dist/client/assets/record-editor-B37l2HpJ.js +1 -0
  206. package/dist/client/assets/{redirect-editor-BROySec3.js → redirect-editor-DDXMD1gX.js} +1 -1
  207. package/dist/client/assets/{reports-BAoHRlcZ.js → reports-BAiN8fii.js} +1 -1
  208. package/dist/client/assets/reports-Cc7c-Vbz.js +1 -0
  209. package/dist/client/assets/{reports-onboarding-DuXWRm1J.js → reports-onboarding-CBdWbLMl.js} +1 -1
  210. package/dist/client/assets/{reports-tab-BTG8fjPp.js → reports-tab-DkDH4PST.js} +2 -2
  211. package/dist/client/assets/{repositories-dyiTYnan.js → repositories-C2l2dcf-.js} +1 -1
  212. package/dist/client/assets/{repository-import-picker-OR5DGZp9.js → repository-import-picker-DC9mmGO6.js} +1 -1
  213. package/dist/client/assets/{repository-picker-BSwi4b8i.js → repository-picker-F2OlSGJj.js} +1 -1
  214. package/dist/client/assets/{require-capability-Bqc8OMTK.js → require-capability-BLka8E11.js} +1 -1
  215. package/dist/client/assets/{required-auth-layout-Byop8Zzr.js → required-auth-layout-CFjcjBcb.js} +1 -1
  216. package/dist/client/assets/{reset-password-BJ7ek2C_.js → reset-password-Cop4lNe7.js} +1 -1
  217. package/dist/client/assets/{resizable-3VTCAPsm.js → resizable-BkLrVd37.js} +1 -1
  218. package/dist/client/assets/{resolve-tab-icon-CmlW-pVX.js → resolve-tab-icon-l7zbrRpU.js} +1 -1
  219. package/dist/client/assets/{review-settings-DV0Kgix-.js → review-settings-G29AJopa.js} +1 -1
  220. package/dist/client/assets/{rich-text-link-control-DHguSqou.js → rich-text-link-control-CY2KgSuL.js} +1 -1
  221. package/dist/client/assets/{roles-BddVa5rc.js → roles-Cpd58JKB.js} +1 -1
  222. package/dist/client/assets/{route-BTyvu5tm.js → route-D-np41Rb.js} +1 -1
  223. package/dist/client/assets/{route-Dv07Kl62.js → route-DSZCyqFE.js} +1 -1
  224. package/dist/client/assets/route-xerSimh2.js +1 -0
  225. package/dist/client/assets/{runnable-block-editor-Do2tVSLe.js → runnable-block-editor-duCsymhu.js} +1 -1
  226. package/dist/client/assets/{sandbox-lifecycle-context-DqykpNrC.js → sandbox-lifecycle-context-D0lirKQx.js} +1 -1
  227. package/dist/client/assets/{schema-DN-s_HG6.js → schema-DiX8ky2j.js} +1 -1
  228. package/dist/client/assets/{scroll-area--yTJQfnp.js → scroll-area-DBGj1ceN.js} +1 -1
  229. package/dist/client/assets/{search-input-BNUWPEYj.js → search-input-u9kRB5oS.js} +1 -1
  230. package/dist/client/assets/{search-toggle-QxOnD3UE.js → search-toggle-BFh8VDlA.js} +1 -1
  231. package/dist/client/assets/{secret-picker-B-IAzUKw.js → secret-picker-BRjwyTUe.js} +1 -1
  232. package/dist/client/assets/{secrets-BfsxO5FG.js → secrets-DJczpY8f.js} +1 -1
  233. package/dist/client/assets/{sections-editor-BSMpRRaP.js → sections-editor-DCxU6ocE.js} +1 -1
  234. package/dist/client/assets/{select-BSSRUEpK.js → select-aHTy5z3O.js} +1 -1
  235. package/dist/client/assets/{select-model-BpoA_wtD.js → select-model-kohtsWIk.js} +1 -1
  236. package/dist/client/assets/{seo-editor-BLMg-jAb.js → seo-editor-B-zD2Sai.js} +1 -1
  237. package/dist/client/assets/{separator-B-ZEExAQ.js → separator-Z33kxnB4.js} +1 -1
  238. package/dist/client/assets/{settings-tab-Bjk0NW75.js → settings-tab-CBYL5MBY.js} +1 -1
  239. package/dist/client/assets/{sheet--8zhfSHm.js → sheet-BziqOxJW.js} +1 -1
  240. package/dist/client/assets/{shell-layout-DE5WStxe.js → shell-layout-BNJ06xIX.js} +1 -1
  241. package/dist/client/assets/{skills-5oEukgyq.js → skills-BqCX7EoL.js} +1 -1
  242. package/dist/client/assets/{sso-p_1To1BG.js → sso-CQbaAOnX.js} +1 -1
  243. package/dist/client/assets/{suggestion-tikPUWB4.js → suggestion-Bq0iPeIO.js} +1 -1
  244. package/dist/client/assets/{switch-XXcZ9CO9.js → switch-BPmQbFG7.js} +1 -1
  245. package/dist/client/assets/{synced-repos-6N09TwCW.js → synced-repos-DJvz90BA.js} +1 -1
  246. package/dist/client/assets/{tab-icon-glyph-Cg30pNjq.js → tab-icon-glyph-DuJbvgdd.js} +1 -1
  247. package/dist/client/assets/{table-UDk1rGCz.js → table-A_pHif2D.js} +1 -1
  248. package/dist/client/assets/{tabs-DddEqGpk.js → tabs-D5BpnZQ1.js} +1 -1
  249. package/dist/client/assets/{task-board-BQC0qjBI.js → task-board-BPfcIzWi.js} +1 -1
  250. package/dist/client/assets/{task-route-BIVpLzI_.js → task-route-Djib_ohK.js} +1 -1
  251. package/dist/client/assets/{task-status-5qx4S30L.js → task-status-D6kZ5GWu.js} +1 -1
  252. package/dist/client/assets/{taskboard-analytics-BUkhCXum.js → taskboard-analytics-DZqf-33v.js} +1 -1
  253. package/dist/client/assets/{tasks-B2IZJpCB.js → tasks-DLypzIUh.js} +1 -1
  254. package/dist/client/assets/tasks-kvDxHKT1.js +1 -0
  255. package/dist/client/assets/{textarea-mkcrN5g-.js → textarea-B5y3zgH_.js} +1 -1
  256. package/dist/client/assets/{thread-analytics-BL_w94D4.js → thread-analytics-ToR840kc.js} +1 -1
  257. package/dist/client/assets/{thread-button-DwWAsFW7.js → thread-button-B_HgltO0.js} +1 -1
  258. package/dist/client/assets/{thread-intent-1MB6k5b2.js → thread-intent-DQzWIUxa.js} +1 -1
  259. package/dist/client/assets/{thread-route-CRhZ1osu.js → thread-route-MHfZTnxN.js} +1 -1
  260. package/dist/client/assets/{thread-route-BCeXxLYH.js → thread-route-Y2_k4-xt.js} +1 -1
  261. package/dist/client/assets/{thread-sheet-body-Bo7LPBv_.js → thread-sheet-body-MIvaRayZ.js} +1 -1
  262. package/dist/client/assets/{toggle-group-Cz7RSOBM.js → toggle-group-C_RkFbyJ.js} +1 -1
  263. package/dist/client/assets/{toolbar-icon-button-CiJmHymh.js → toolbar-icon-button-Bwh0s6hU.js} +1 -1
  264. package/dist/client/assets/{tooltip-CF6AcK-h.js → tooltip-BPqQWogJ.js} +1 -1
  265. package/dist/client/assets/{track-OWWDrnQ-.js → track-BLdcCbIC.js} +1 -1
  266. package/dist/client/assets/{types-C-gwtfMH.js → types-DZ6fWkdm.js} +1 -1
  267. package/dist/client/assets/{usage-stats-CBSbrOk_.js → usage-stats-CHkIvIhF.js} +1 -1
  268. package/dist/client/assets/{use-ai-providers-B1JZFVlj.js → use-ai-providers-CMRsxIS9.js} +1 -1
  269. package/dist/client/assets/{use-automations-D_9NQm3c.js → use-automations-C4wi9N8f.js} +1 -1
  270. package/dist/client/assets/{use-autosave-DlgDe-Tc.js → use-autosave-Ba60olkP.js} +1 -1
  271. package/dist/client/assets/{use-chat-layout-state-D4JUtDU_.js → use-chat-layout-state-BN8QGB1z.js} +1 -1
  272. package/dist/client/assets/{use-connect-companion-DeEhFjbg.js → use-connect-companion-DnyTevE1.js} +1 -1
  273. package/dist/client/assets/{use-connection-BSRKwy2j.js → use-connection-BslGkz4t.js} +1 -1
  274. package/dist/client/assets/{use-copy-BOgEqZMm.js → use-copy-DWINQoQI.js} +1 -1
  275. package/dist/client/assets/{use-create-virtual-mcp-zRgZOr46.js → use-create-virtual-mcp-CvoX5fT0.js} +1 -1
  276. package/dist/client/assets/{use-date-fns-locale-DLQqaR-J.js → use-date-fns-locale-CZY-6GKJ.js} +1 -1
  277. package/dist/client/assets/{use-debounced-autosave-D_28bChm.js → use-debounced-autosave-DW-vyaLt.js} +1 -1
  278. package/dist/client/assets/{use-debounced-value-DD9mnPT_.js → use-debounced-value-r4EjWqFM.js} +1 -1
  279. package/dist/client/assets/{use-deco-credits-BVTpTeQe.js → use-deco-credits-BSN3ogiR.js} +1 -1
  280. package/dist/client/assets/{use-decopilot-events-DrrVrYNR.js → use-decopilot-events-BHyBfguX.js} +1 -1
  281. package/dist/client/assets/{use-delete-connection-XxANt-J1.js → use-delete-connection-B2dCIG7y.js} +1 -1
  282. package/dist/client/assets/{use-deployment-admin-2URfC53G.js → use-deployment-admin-bIx5RjSZ.js} +1 -1
  283. package/dist/client/assets/{use-fast-preview-draft-url-DEazNknV.js → use-fast-preview-draft-url-BWG3OEdQ.js} +1 -1
  284. package/dist/client/assets/{use-file-configs-CoaidzsY.js → use-file-configs-7OnkQpu6.js} +1 -1
  285. package/dist/client/assets/{use-infinite-scroll-BPqj-R_X.js → use-infinite-scroll-DyIY-5t_.js} +1 -1
  286. package/dist/client/assets/{use-join-requests-Drw7IeW0.js → use-join-requests-DIo03IWL.js} +1 -1
  287. package/dist/client/assets/{use-main-panel-tabs-qFkwsuao.js → use-main-panel-tabs-BIiT10Rh.js} +1 -1
  288. package/dist/client/assets/{use-mcp-auth-status-CZ-0Pvu1.js → use-mcp-auth-status-BS1CHQR6.js} +1 -1
  289. package/dist/client/assets/{use-mcp-client-DDH2Tr05.js → use-mcp-client-ZKTq8mxe.js} +1 -1
  290. package/dist/client/assets/{use-mcp-prompts-CogjK1bQ.js → use-mcp-prompts-DTJM5ZWp.js} +1 -1
  291. package/dist/client/assets/{use-mcp-tools-B7MXLlq3.js → use-mcp-tools-OwK4Zp5y.js} +1 -1
  292. package/dist/client/assets/{use-members-BLvVhz4X.js → use-members-DFK-1GP_.js} +1 -1
  293. package/dist/client/assets/{use-mobile-BCSnRACa.js → use-mobile-347n7_IQ.js} +1 -1
  294. package/dist/client/assets/{use-navigate-to-agent-DYNDpstL.js → use-navigate-to-agent-CRejd8ZE.js} +1 -1
  295. package/dist/client/assets/use-new-blocks-editor-CK_DIXAr.js +1 -0
  296. package/dist/client/assets/{use-open-billing-url-Dq7moyEm.js → use-open-billing-url-CfpmD4In.js} +1 -1
  297. package/dist/client/assets/{use-org-auth-client-BaoVl8Zl.js → use-org-auth-client-BnRqovXV.js} +1 -1
  298. package/dist/client/assets/{use-org-fs-gM-Wauv_.js → use-org-fs-DC8W-YoT.js} +1 -1
  299. package/dist/client/assets/{use-org-repo-syncs-DFgGELdf.js → use-org-repo-syncs-AqRaTOQw.js} +1 -1
  300. package/dist/client/assets/{use-org-sso-GwZiS-qS.js → use-org-sso-BO74KuQq.js} +1 -1
  301. package/dist/client/assets/{use-organization-roles-CqvDOd51.js → use-organization-roles-CqUgRQcR.js} +1 -1
  302. package/dist/client/assets/{use-organization-settings-mKOaKHuY.js → use-organization-settings-DKqPZnyT.js} +1 -1
  303. package/dist/client/assets/{use-panel-navigate-CQHE_TAW.js → use-panel-navigate-CZC-Bri6.js} +1 -1
  304. package/dist/client/assets/{use-project-native-view-presence-CjADt2wx.js → use-project-native-view-presence-CD1ozlz_.js} +1 -1
  305. package/dist/client/assets/{use-project-scope-UozAP0t-.js → use-project-scope-C-9j3flY.js} +1 -1
  306. package/dist/client/assets/{use-releases-D-iqlxR6.js → use-releases-J-zHWPNJ.js} +1 -1
  307. package/dist/client/assets/{use-reports-diagnostic-CknaDfb_.js → use-reports-diagnostic-rp-SkDPw.js} +1 -1
  308. package/dist/client/assets/{use-secrets-Bl8vA-cD.js → use-secrets-CQTvxcbi.js} +1 -1
  309. package/dist/client/assets/{use-section-preview-base-BqbdcWw1.js → use-section-preview-base-BUOsxaK7.js} +1 -1
  310. package/dist/client/assets/{use-session-runtime-B5XfJc8H.js → use-session-runtime-waDLeiz5.js} +1 -1
  311. package/dist/client/assets/{use-tags-C0g04rDb.js → use-tags-BCTsmQXh.js} +1 -1
  312. package/dist/client/assets/{use-task-board-analytics-DQMIr-R3.js → use-task-board-analytics-B0F_Bodf.js} +1 -1
  313. package/dist/client/assets/{use-task-metadata--2QUxhiK.js → use-task-metadata-L8nncAZD.js} +1 -1
  314. package/dist/client/assets/{use-thread-analytics-CVoZDp6i.js → use-thread-analytics-CjiR5pXD.js} +1 -1
  315. package/dist/client/assets/{use-thread-outputs-CYriWIIs.js → use-thread-outputs-6AE2Ko75.js} +1 -1
  316. package/dist/client/assets/useInfiniteQuery-CBGVnf76.js +1 -0
  317. package/dist/client/assets/{useQueries-tUSXojRG.js → useQueries-Dll0gG_2.js} +1 -1
  318. package/dist/client/assets/useSuspenseInfiniteQuery-Ds4z3m1K.js +1 -0
  319. package/dist/client/assets/{users-DFvmfIoV.js → users-C55Uyfx5.js} +1 -1
  320. package/dist/client/assets/{utils-BaPwSBi2.js → utils-C6tzFhyN.js} +1 -1
  321. package/dist/client/assets/{variant-calendar-sxqpD_Oi.js → variant-calendar-CqaTH_F-.js} +1 -1
  322. package/dist/client/assets/{variant-matcher-override-C-94qzoj.js → variant-matcher-override-ChIqHd1B.js} +1 -1
  323. package/dist/client/assets/{view-mode-toggle-DrlZskFH.js → view-mode-toggle-CYgbAEts.js} +1 -1
  324. package/dist/client/assets/{virtual-mcp-DBFF2brO.js → virtual-mcp-ldI9qh61.js} +1 -1
  325. package/dist/client/index.html +1 -1
  326. package/dist/server/cli.js +143 -143
  327. package/dist/server/migrate-dbos.js +1 -1
  328. package/dist/server/migrate.js +5 -5
  329. package/dist/server/server.js +134 -134
  330. package/package.json +1 -1
  331. package/dist/client/assets/agent-app-C7k2151J.js +0 -1
  332. package/dist/client/assets/agent-deck-CYuHMzf-.js +0 -1
  333. package/dist/client/assets/agent-library-DP9jULfe.js +0 -1
  334. package/dist/client/assets/agent-library-file-C2CuO8zG.js +0 -1
  335. package/dist/client/assets/agent-settings-DBkRHp58.js +0 -1
  336. package/dist/client/assets/agent-site-editor-code-CGBlhTFD.js +0 -2
  337. package/dist/client/assets/agent-view-iS5vUDqd.js +0 -1
  338. package/dist/client/assets/api-keys-DrGX-MFg.js +0 -1
  339. package/dist/client/assets/app-editor-BH13ZfO_.js +0 -1
  340. package/dist/client/assets/flat-project-Bp2uxu0m.js +0 -1
  341. package/dist/client/assets/library-DwuPF4v9.js +0 -1
  342. package/dist/client/assets/project-reports-DLR8Px_E.js +0 -1
  343. package/dist/client/assets/project-tasks-BpKda9bF.js +0 -1
  344. package/dist/client/assets/record-editor-DwoOuklP.js +0 -1
  345. package/dist/client/assets/reports-7388ESEV.js +0 -1
  346. package/dist/client/assets/route-wKh3eUlH.js +0 -1
  347. package/dist/client/assets/tasks-JL_Q5QmF.js +0 -1
  348. package/dist/client/assets/use-new-blocks-editor-DGdBBbiW.js +0 -1
  349. package/dist/client/assets/useInfiniteQuery-U12d5VJc.js +0 -1
  350. package/dist/client/assets/useSuspenseInfiniteQuery-B912YJiX.js +0 -1
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- var M=import.meta.require;var E="13";function R(c){return{name:"decocms",systemDatabaseUrl:c.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:c.poolSize,runAdminServer:!1,executorID:c.executorID,applicationVersion:E,...c.listenQueues!==void 0?{listenQueues:c.listenQueues}:{}}}function X(c,h={}){let{signal:w}=h;if(w?.aborted)return Promise.reject(w.reason);return new Promise((f,y)=>{let J=()=>{clearTimeout(+m),y(w?.reason)},m=P(()=>{w?.removeEventListener("abort",J),f()},c);w?.addEventListener("abort",J,{once:!0})})}var k=2147483647;function P(c,h){if(h=Math.trunc(Math.max(h,0)||0),h<=k){let J=Number(setTimeout(c,h));return{valueOf:()=>J}}let w=Date.now(),f,y=()=>{let J=h-(Date.now()-w);f=J>k?Number(setTimeout(y,k)):Number(setTimeout(c,J))};return y(),{valueOf:()=>f}}import A from"pg";var q=8314027461559302n,p=600000,u=500;async function G(c,h){let{databaseUrl:w,lockTimeoutMs:f=p}=c,y=c.log??((z)=>console.log(z)),J=new A.Client({connectionString:w});await J.connect();let d=Date.now(),m=!1;try{while(!m){if(m=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[q.toString()])).rows[0]?.locked===!0,m)break;if(Date.now()-d>=f)throw Error(`Timed out after ${f}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await X(u)}let z=Date.now()-d;if(z>1000)y(`[dbos] waited ${z}ms for the migration lock; another process migrated first`);return await h()}finally{if(m)try{await J.query("SELECT pg_advisory_unlock($1)",[q.toString()])}catch{}await J.end().catch(()=>{})}}import{homedir as g}from"os";var I=new Set(["all","worker","api"]);function t(c){let h=(c??"").trim();return I.has(h)?h:"all"}var n=new Set(["production","development","test"]);function V(c){let h=(c??"").trim();return n.has(h)?h:"development"}function o(c){return c==="true"||c==="1"}function U(c,h,w){if(h===void 0||h==="")return;let f=Number(h);if(!Number.isSafeInteger(f)||f<=0)throw Error(`${c} must be a positive integer`);if(w!==void 0&&f>w)throw Error(`${c} must be at most ${w}`);return f}function W(c,h,w,f){return U(c,h,f)??w}function l(c){let h={};for(let w of(c??"").split(",")){let f=w.trim();if(!f)continue;let y=f.indexOf("="),J=y>0?f.slice(0,y).trim():"",d=y>0?f.slice(y+1).trim():"";if(!J||!d){console.warn(`STRIPE_PLAN_PRICE_IDS: ignoring unparseable entry "${f}" \u2014 expected price_xxx=planId`);continue}h[J]=d}return h}function v(c,h,w,f){if(h===void 0||h==="")return w;let y=Number(h);if(!Number.isSafeInteger(y)||y<0)throw Error(`${c} must be a non-negative integer`);if(f!==void 0&&y>f)throw Error(`${c} must be at most ${f}`);return y}function Y(c,h){if(c===void 0||c==="")return h;return c==="true"||c==="1"}function O(c){if(!c)return null;try{let w=new URL(c).hostname.replace(/^\[|\]$/g,"");if(w==="localhost"||w==="127.0.0.1"||w==="::1")return null;return c}catch{return null}}function r(c){return c===void 0||c===""||c==="true"||c==="1"}function N(c,h){return c||h}function L(c,h){let w=c.home||h.DATA_DIR||h.DECOCMS_HOME||`${g()}/deco`,f=c.localMode,y=c.nodeEnv||V(h.NODE_ENV),J=h.NATS_URL||"nats://localhost:4222",d={nodeEnv:y,port:W("PORT",c.port||h.PORT,3000,65535),baseUrl:c.baseUrl||h.BASE_URL,publicUrl:N(h.STUDIO_PUBLIC_URL,h.MESH_PUBLIC_URL),dataDir:w,elevenlabsApiKey:h.ELEVENLABS_API_KEY,elevenlabsVoiceId:h.ELEVENLABS_VOICE_ID||"JBFqnCBsd6RMkjVDRZzb",elevenlabsVoiceModel:h.ELEVENLABS_VOICE_MODEL||"eleven_v4_turbo",databasePgSsl:o(h.DATABASE_PG_SSL),databasePoolMax:W("DATABASE_POOL_MAX",h.DATABASE_POOL_MAX,5),dbosPoolSize:W("DBOS_POOL_SIZE",h.DBOS_POOL_SIZE,5),betterAuthSecret:h.BETTER_AUTH_SECRET||"",encryptionKey:h.ENCRYPTION_KEY||"",studioJwtSecret:N(h.STUDIO_JWT_SECRET,h.MESH_JWT_SECRET),localMode:f,disableRateLimit:o(h.DISABLE_RATE_LIMIT),jiraAllowLocalSiteUrl:o(h.JIRA_ALLOW_LOCAL_SITE_URL),studioProvisionSecretKey:h.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(h.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((m)=>m.trim().toLowerCase()).filter(Boolean),taskBoardAdminOrgIds:(h.STUDIO_ADMIN_ORG_IDS??"").split(",").map((m)=>m.trim()).filter(Boolean),deploymentAdminToken:h.DEPLOYMENT_ADMIN_TOKEN||void 0,clickhouseUrl:h.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:U("CLICKHOUSE_MAX_MEMORY_USAGE",h.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:h.MONITORING_OTLP_ENDPOINT,otelServiceName:h.OTEL_SERVICE_NAME||"studio",natsCredsPath:h.NATS_CREDS,configPath:h.CONFIG_PATH||"./config.json",aiGatewayEnabled:o(h.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:h.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:h.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:h.STRIPE_WEBHOOK_SECRET,stripeSecretKey:h.STRIPE_SECRET_KEY,stripeOrgPriceId:h.STRIPE_ORG_PRICE_ID,stripePlanPriceIds:l(h.STRIPE_PLAN_PRICE_IDS),stripePortalConfigurationId:h.STRIPE_PORTAL_CONFIGURATION_ID,stripeTopupProductId:h.STRIPE_TOPUP_PRODUCT_ID,topupFeePercent:v("STUDIO_TOPUP_FEE_PERCENT",h.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:o(h.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:W("STUDIO_FREE_TASKS",h.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:W("STUDIO_MONTHLY_TASKS",h.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:W("STUDIO_MAX_RUNS_PER_TASK",h.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:o(h.ENABLE_DECO_IMPORT),hostingControlPlaneGa:o(h.HOSTING_CONTROL_PLANE_GA),monitorGa:o(h.MONITOR_GA),plansEnabled:o(h.STUDIO_PLANS_ENABLED),mcpCacheEnabled:Y(h.MCP_CACHE_ENABLED,y!=="development"),orgFsPublicSetsJson:h.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:o(h.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:W("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",h.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:W("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",h.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:Y(h.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),sandboxMaxConcurrentHostedRuns:W("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",h.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:h.S3_ENDPOINT,s3Bucket:h.S3_BUCKET,s3Region:h.S3_REGION||"auto",s3AccessKeyId:h.S3_ACCESS_KEY_ID,s3SecretAccessKey:h.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:r(h.S3_FORCE_PATH_STYLE),monitoringS3Bucket:h.MONITORING_S3_BUCKET,monitoringS3Endpoint:h.MONITORING_S3_ENDPOINT,monitoringS3Region:h.MONITORING_S3_REGION,monitoringS3AccessKeyId:h.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:h.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:h.MONITORING_S3_PREFIX,duckdbExtensionDirectory:h.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:h.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:U("DUCKDB_THREADS",h.DUCKDB_THREADS),isCli:!0,noTui:c.noTui===!0,podName:h.POD_NAME||crypto.randomUUID(),dispatchRole:t(N(h.STUDIO_DISPATCH_ROLE,h.MESH_DISPATCH_ROLE)),agentSandboxEnabled:o(h.STUDIO_AGENT_SANDBOX_ENABLED),sandboxStickyHeadRefEnabled:o(h.SANDBOX_STICKY_HEAD_REF),sandboxFlatGitlabRefsEnabled:o(h.SANDBOX_FLAT_GITLAB_REFS),taskBoardRerunReusesPrBranch:Y(h.TASK_BOARD_RERUN_REUSES_PR_BRANCH,!0),sandboxReleaseOnRunEndEnabled:o(h.SANDBOX_RELEASE_ON_RUN_END),sandboxReleaseGraceMs:W("SANDBOX_RELEASE_GRACE_MS",h.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:h.DECO_SUPABASE_URL,decoSupabaseServiceKey:h.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:h.FIRECRAWL_API_KEY,controlplaneRestUrl:h.CONTROLPLANE_REST_URL,controlplaneServiceToken:h.CONTROLPLANE_SERVICE_TOKEN,analyticsDataUrl:h.ANALYTICS_URL,analyticsMasterToken:h.ANALYTICS_MASTER_TOKEN,clickhouseAnalyticsUrl:h.CLICKHOUSE_ANALYTICS_ADDRESS,clickhouseAnalyticsUsername:h.CLICKHOUSE_ANALYTICS_USERNAME||"admin_monitor",clickhouseAnalyticsPassword:h.CLICKHOUSE_ANALYTICS_PASSWORD,oneDollarStatsApiKey:h.ONEDOLLAR_BACKEND_API_KEY,reportsInternalApiUrl:N(h.REPORTS_INTERNAL_API_URL,h.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:N(h.REPORTS_INTERNAL_API_KEY,h.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:h.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:h.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:h.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:h.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:h.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:h.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:h.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY};if(d.plansEnabled&&!d.studioJwtSecret)throw Error("STUDIO_PLANS_ENABLED requires an explicit gateway JWT secret. Set STUDIO_JWT_SECRET (or its legacy alias MESH_JWT_SECRET) to the same value as the gateway's MESH_JWT_SECRET. Refusing to fall back to BETTER_AUTH_SECRET: that mismatch 401s every entitlements call, which every feature gate reads as 'no answer' and fails OPEN.");if(d.plansEnabled&&!d.studioProvisionSecretKey)throw Error("STUDIO_PLANS_ENABLED requires STUDIO_PROVISION_SECRET_KEY, set to the same value as the gateway's STUDIO_PROVISION_KEY. Without it the gateway cannot identify this server, falls back to a per-user membership callback that 401s for any user who never completed the gateway OAuth flow, and every feature gate then fails OPEN.");if(d.plansEnabled&&!d.aiGatewayEnabled)throw Error("STUDIO_PLANS_ENABLED requires DECO_AI_GATEWAY_ENABLED=true. Plans are read from the gateway; with it disabled there is no adapter to ask, so every feature gate fails OPEN on both server and client and the paid product is free fleet-wide.");if(d.plansEnabled&&Object.keys(d.stripePlanPriceIds).length>0&&!d.aiGatewayAdminToken)throw Error("STRIPE_PLAN_PRICE_IDS is set but DECO_AI_GATEWAY_ADMIN_TOKEN is not. The Stripe webhook places the paid tier through the gateway's admin API, so without the token a customer is charged and the entitlement "+"is never granted \u2014 and AI_PLAN_SET cannot repair it, it accepts only "+"'free'.");if(d.plansEnabled&&Object.keys(d.stripePlanPriceIds).length>1&&!d.stripePortalConfigurationId)console.warn("STRIPE_PLAN_PRICE_IDS maps more than one plan but STRIPE_PORTAL_CONFIGURATION_ID is unset. An org that already has a subscription cannot change tier: the account's default portal configuration lists only the legacy plans, not the tiers, so Stripe refuses the update flow. First-time checkout is unaffected.");return{settings:d,externalDatabaseUrl:O(h.DATABASE_URL),externalNatsUrl:O(J),skipMigrations:c.skipMigrations}}var $=null;function Z(){if(!$)s();return $}function s(){if($)return;let c={...process.env},h=L({port:c.PORT||"3000",home:c.DATA_DIR||c.DECOCMS_HOME||"",localMode:c.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:c.DECO_NO_TUI==="true",vitePort:c.VITE_PORT,baseUrl:c.BASE_URL},c);$=Object.freeze({...h.settings,databaseUrl:c.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(c.NATS_URL||"nats://localhost:4222").split(",").map((w)=>w.trim()).filter(Boolean)})}import{Kysely as pw,PostgresDialect as uw}from"kysely";import{Pool as Iw}from"pg";import{createContextKey as yh,metrics as fh,propagation as gc,ROOT_CONTEXT as Ic,SpanStatusCode as tc,trace as Jh}from"@opentelemetry/api";import{logs as dh,SeverityNumber as B}from"@opentelemetry/api-logs";import{OTLPLogExporter as lc}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as mh}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as sc}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as ac}from"@opentelemetry/instrumentation-runtime-node";import{context as _h,propagation as Mh,SpanKind as Ph,SpanStatusCode as Ah}from"@opentelemetry/api";var uh=globalThis.fetch;import{ExportResultCode as hc}from"@opentelemetry/core";import{ExportResultCode as F}from"@opentelemetry/core";import{mkdir as e,rename as a,writeFile as hh}from"fs/promises";import{join as Q}from"path";class j{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(c){this.basePath=c.basePath,this.flushThreshold=c.flushThreshold??1000,this.maxBufferBytes=c.maxBufferBytes??10485760,this.partitionKey=c.partitionKey;let h=c.flushIntervalMs??60000;if(h>0&&h<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((w)=>{console.error("[NDJSONExporter] Timer flush failed:",w)})},h),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(c){if(this.isShutdown)return Promise.resolve({code:F.FAILED});for(let h of c){let w=JSON.stringify(h),f=this.partitionKey?this.partitionKey(h):"";this.bufferItems.push({partition:f,json:w}),this.bufferBytes+=Buffer.byteLength(w,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:F.SUCCESS})).catch((h)=>{return console.error("[NDJSONExporter] Flush failed:",h),{code:F.FAILED}});return Promise.resolve({code:F.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let h=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=h,h}async doFlush(){if(this.bufferItems.length===0)return;let c=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let h=new Map;for(let y of c){let J=h.get(y.partition);if(!J)J=[],h.set(y.partition,J);J.push(y.json)}let w=await Promise.allSettled(Array.from(h.entries()).map(([y,J])=>this.writeNDJSON(J,y).then(()=>y))),f=w.find((y)=>y.status==="rejected");if(f){let y=new Set;for(let d of w)if(d.status==="fulfilled")y.add(d.value);let J=c.filter((d)=>!y.has(d.partition));this.bufferItems=J.concat(this.bufferItems),this.bufferBytes=0;for(let d of this.bufferItems)this.bufferBytes+=Buffer.byteLength(d.json,"utf8")+1;throw f.reason}}async writeNDJSON(c,h){let w=new Date,f=[String(w.getUTCFullYear()),String(w.getUTCMonth()+1).padStart(2,"0"),String(w.getUTCDate()).padStart(2,"0"),String(w.getUTCHours()).padStart(2,"0")],y=h?Q(this.basePath,h,...f):Q(this.basePath,...f);if(!this.knownDirs.has(y))await e(y,{recursive:!0,mode:448}),this.knownDirs.add(y);let J=`${crypto.randomUUID()}.ndjson`,d=Q(y,`.${J}.tmp`),m=Q(y,J),z=c.join(`
2
+ var M=import.meta.require;var E="13";function R(c){return{name:"decocms",systemDatabaseUrl:c.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:c.poolSize,runAdminServer:!1,executorID:c.executorID,applicationVersion:E,...c.listenQueues!==void 0?{listenQueues:c.listenQueues}:{}}}function X(c,h={}){let{signal:w}=h;if(w?.aborted)return Promise.reject(w.reason);return new Promise((f,y)=>{let J=()=>{clearTimeout(+m),y(w?.reason)},m=P(()=>{w?.removeEventListener("abort",J),f()},c);w?.addEventListener("abort",J,{once:!0})})}var k=2147483647;function P(c,h){if(h=Math.trunc(Math.max(h,0)||0),h<=k){let J=Number(setTimeout(c,h));return{valueOf:()=>J}}let w=Date.now(),f,y=()=>{let J=h-(Date.now()-w);f=J>k?Number(setTimeout(y,k)):Number(setTimeout(c,J))};return y(),{valueOf:()=>f}}import A from"pg";var q=8314027461559302n,p=600000,u=500;async function G(c,h){let{databaseUrl:w,lockTimeoutMs:f=p}=c,y=c.log??((z)=>console.log(z)),J=new A.Client({connectionString:w});await J.connect();let d=Date.now(),m=!1;try{while(!m){if(m=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[q.toString()])).rows[0]?.locked===!0,m)break;if(Date.now()-d>=f)throw Error(`Timed out after ${f}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await X(u)}let z=Date.now()-d;if(z>1000)y(`[dbos] waited ${z}ms for the migration lock; another process migrated first`);return await h()}finally{if(m)try{await J.query("SELECT pg_advisory_unlock($1)",[q.toString()])}catch{}await J.end().catch(()=>{})}}import{homedir as g}from"os";var I=new Set(["all","worker","api"]);function t(c){let h=(c??"").trim();return I.has(h)?h:"all"}var n=new Set(["production","development","test"]);function V(c){let h=(c??"").trim();return n.has(h)?h:"development"}function o(c){return c==="true"||c==="1"}function U(c,h,w){if(h===void 0||h==="")return;let f=Number(h);if(!Number.isSafeInteger(f)||f<=0)throw Error(`${c} must be a positive integer`);if(w!==void 0&&f>w)throw Error(`${c} must be at most ${w}`);return f}function W(c,h,w,f){return U(c,h,f)??w}function l(c){let h={};for(let w of(c??"").split(",")){let f=w.trim();if(!f)continue;let y=f.indexOf("="),J=y>0?f.slice(0,y).trim():"",d=y>0?f.slice(y+1).trim():"";if(!J||!d){console.warn(`STRIPE_PLAN_PRICE_IDS: ignoring unparseable entry "${f}" \u2014 expected price_xxx=planId`);continue}h[J]=d}return h}function v(c,h,w,f){if(h===void 0||h==="")return w;let y=Number(h);if(!Number.isSafeInteger(y)||y<0)throw Error(`${c} must be a non-negative integer`);if(f!==void 0&&y>f)throw Error(`${c} must be at most ${f}`);return y}function Y(c,h){if(c===void 0||c==="")return h;return c==="true"||c==="1"}function O(c){if(!c)return null;try{let w=new URL(c).hostname.replace(/^\[|\]$/g,"");if(w==="localhost"||w==="127.0.0.1"||w==="::1")return null;return c}catch{return null}}function r(c){return c===void 0||c===""||c==="true"||c==="1"}function N(c,h){return c||h}function L(c,h){let w=c.home||h.DATA_DIR||h.DECOCMS_HOME||`${g()}/deco`,f=c.localMode,y=c.nodeEnv||V(h.NODE_ENV),J=h.NATS_URL||"nats://localhost:4222",d={nodeEnv:y,port:W("PORT",c.port||h.PORT,3000,65535),baseUrl:c.baseUrl||h.BASE_URL,publicUrl:N(h.STUDIO_PUBLIC_URL,h.MESH_PUBLIC_URL),dataDir:w,elevenlabsApiKey:h.ELEVENLABS_API_KEY,elevenlabsVoiceId:h.ELEVENLABS_VOICE_ID||"JBFqnCBsd6RMkjVDRZzb",elevenlabsVoiceModel:h.ELEVENLABS_VOICE_MODEL||"eleven_v4_turbo",databasePgSsl:o(h.DATABASE_PG_SSL),databasePoolMax:W("DATABASE_POOL_MAX",h.DATABASE_POOL_MAX,5),dbosPoolSize:W("DBOS_POOL_SIZE",h.DBOS_POOL_SIZE,5),betterAuthSecret:h.BETTER_AUTH_SECRET||"",encryptionKey:h.ENCRYPTION_KEY||"",studioJwtSecret:N(h.STUDIO_JWT_SECRET,h.MESH_JWT_SECRET),localMode:f,disableRateLimit:o(h.DISABLE_RATE_LIMIT),jiraAllowLocalSiteUrl:o(h.JIRA_ALLOW_LOCAL_SITE_URL),studioProvisionSecretKey:h.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(h.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((m)=>m.trim().toLowerCase()).filter(Boolean),taskBoardAdminOrgIds:(h.STUDIO_ADMIN_ORG_IDS??"").split(",").map((m)=>m.trim()).filter(Boolean),deploymentAdminToken:h.DEPLOYMENT_ADMIN_TOKEN||void 0,clickhouseUrl:h.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:U("CLICKHOUSE_MAX_MEMORY_USAGE",h.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:h.MONITORING_OTLP_ENDPOINT,otelServiceName:h.OTEL_SERVICE_NAME||"studio",natsCredsPath:h.NATS_CREDS,configPath:h.CONFIG_PATH||"./config.json",aiGatewayEnabled:o(h.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:h.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:h.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:h.STRIPE_WEBHOOK_SECRET,stripeSecretKey:h.STRIPE_SECRET_KEY,stripeOrgPriceId:h.STRIPE_ORG_PRICE_ID,stripePlanPriceIds:l(h.STRIPE_PLAN_PRICE_IDS),stripePortalConfigurationId:h.STRIPE_PORTAL_CONFIGURATION_ID,stripeTopupProductId:h.STRIPE_TOPUP_PRODUCT_ID,topupFeePercent:v("STUDIO_TOPUP_FEE_PERCENT",h.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:o(h.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:W("STUDIO_FREE_TASKS",h.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:W("STUDIO_MONTHLY_TASKS",h.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:W("STUDIO_MAX_RUNS_PER_TASK",h.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:o(h.ENABLE_DECO_IMPORT),hostingControlPlaneGa:o(h.HOSTING_CONTROL_PLANE_GA),monitorGa:o(h.MONITOR_GA),plansEnabled:o(h.STUDIO_PLANS_ENABLED),mcpCacheEnabled:Y(h.MCP_CACHE_ENABLED,y!=="development"),orgFsPublicSetsJson:h.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:o(h.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:W("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",h.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:W("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",h.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:Y(h.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),sandboxMaxConcurrentHostedRuns:W("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",h.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:h.S3_ENDPOINT,s3Bucket:h.S3_BUCKET,s3Region:h.S3_REGION||"auto",s3AccessKeyId:h.S3_ACCESS_KEY_ID,s3SecretAccessKey:h.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:r(h.S3_FORCE_PATH_STYLE),monitoringS3Bucket:h.MONITORING_S3_BUCKET,monitoringS3Endpoint:h.MONITORING_S3_ENDPOINT,monitoringS3Region:h.MONITORING_S3_REGION,monitoringS3AccessKeyId:h.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:h.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:h.MONITORING_S3_PREFIX,duckdbExtensionDirectory:h.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:h.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:U("DUCKDB_THREADS",h.DUCKDB_THREADS),isCli:!0,noTui:c.noTui===!0,podName:h.POD_NAME||crypto.randomUUID(),dispatchRole:t(N(h.STUDIO_DISPATCH_ROLE,h.MESH_DISPATCH_ROLE)),agentSandboxEnabled:o(h.STUDIO_AGENT_SANDBOX_ENABLED),sandboxStickyHeadRefEnabled:o(h.SANDBOX_STICKY_HEAD_REF),taskBoardRerunReusesPrBranch:Y(h.TASK_BOARD_RERUN_REUSES_PR_BRANCH,!0),sandboxReleaseOnRunEndEnabled:o(h.SANDBOX_RELEASE_ON_RUN_END),sandboxReleaseGraceMs:W("SANDBOX_RELEASE_GRACE_MS",h.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:h.DECO_SUPABASE_URL,decoSupabaseServiceKey:h.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:h.FIRECRAWL_API_KEY,controlplaneRestUrl:h.CONTROLPLANE_REST_URL,controlplaneServiceToken:h.CONTROLPLANE_SERVICE_TOKEN,analyticsDataUrl:h.ANALYTICS_URL,analyticsMasterToken:h.ANALYTICS_MASTER_TOKEN,clickhouseAnalyticsUrl:h.CLICKHOUSE_ANALYTICS_ADDRESS,clickhouseAnalyticsUsername:h.CLICKHOUSE_ANALYTICS_USERNAME||"admin_monitor",clickhouseAnalyticsPassword:h.CLICKHOUSE_ANALYTICS_PASSWORD,oneDollarStatsApiKey:h.ONEDOLLAR_BACKEND_API_KEY,reportsInternalApiUrl:N(h.REPORTS_INTERNAL_API_URL,h.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:N(h.REPORTS_INTERNAL_API_KEY,h.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:h.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:h.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:h.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:h.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:h.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:h.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:h.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY};if(d.plansEnabled&&!d.studioJwtSecret)throw Error("STUDIO_PLANS_ENABLED requires an explicit gateway JWT secret. Set STUDIO_JWT_SECRET (or its legacy alias MESH_JWT_SECRET) to the same value as the gateway's MESH_JWT_SECRET. Refusing to fall back to BETTER_AUTH_SECRET: that mismatch 401s every entitlements call, which every feature gate reads as 'no answer' and fails OPEN.");if(d.plansEnabled&&!d.studioProvisionSecretKey)throw Error("STUDIO_PLANS_ENABLED requires STUDIO_PROVISION_SECRET_KEY, set to the same value as the gateway's STUDIO_PROVISION_KEY. Without it the gateway cannot identify this server, falls back to a per-user membership callback that 401s for any user who never completed the gateway OAuth flow, and every feature gate then fails OPEN.");if(d.plansEnabled&&!d.aiGatewayEnabled)throw Error("STUDIO_PLANS_ENABLED requires DECO_AI_GATEWAY_ENABLED=true. Plans are read from the gateway; with it disabled there is no adapter to ask, so every feature gate fails OPEN on both server and client and the paid product is free fleet-wide.");if(d.plansEnabled&&Object.keys(d.stripePlanPriceIds).length>0&&!d.aiGatewayAdminToken)throw Error("STRIPE_PLAN_PRICE_IDS is set but DECO_AI_GATEWAY_ADMIN_TOKEN is not. The Stripe webhook places the paid tier through the gateway's admin API, so without the token a customer is charged and the entitlement "+"is never granted \u2014 and AI_PLAN_SET cannot repair it, it accepts only "+"'free'.");if(d.plansEnabled&&Object.keys(d.stripePlanPriceIds).length>1&&!d.stripePortalConfigurationId)console.warn("STRIPE_PLAN_PRICE_IDS maps more than one plan but STRIPE_PORTAL_CONFIGURATION_ID is unset. An org that already has a subscription cannot change tier: the account's default portal configuration lists only the legacy plans, not the tiers, so Stripe refuses the update flow. First-time checkout is unaffected.");return{settings:d,externalDatabaseUrl:O(h.DATABASE_URL),externalNatsUrl:O(J),skipMigrations:c.skipMigrations}}var $=null;function Z(){if(!$)s();return $}function s(){if($)return;let c={...process.env},h=L({port:c.PORT||"3000",home:c.DATA_DIR||c.DECOCMS_HOME||"",localMode:c.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:c.DECO_NO_TUI==="true",vitePort:c.VITE_PORT,baseUrl:c.BASE_URL},c);$=Object.freeze({...h.settings,databaseUrl:c.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(c.NATS_URL||"nats://localhost:4222").split(",").map((w)=>w.trim()).filter(Boolean)})}import{Kysely as pw,PostgresDialect as uw}from"kysely";import{Pool as Iw}from"pg";import{createContextKey as yh,metrics as fh,propagation as gc,ROOT_CONTEXT as Ic,SpanStatusCode as tc,trace as Jh}from"@opentelemetry/api";import{logs as dh,SeverityNumber as B}from"@opentelemetry/api-logs";import{OTLPLogExporter as lc}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as mh}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as sc}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as ac}from"@opentelemetry/instrumentation-runtime-node";import{context as _h,propagation as Mh,SpanKind as Ph,SpanStatusCode as Ah}from"@opentelemetry/api";var uh=globalThis.fetch;import{ExportResultCode as hc}from"@opentelemetry/core";import{ExportResultCode as F}from"@opentelemetry/core";import{mkdir as e,rename as a,writeFile as hh}from"fs/promises";import{join as Q}from"path";class j{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(c){this.basePath=c.basePath,this.flushThreshold=c.flushThreshold??1000,this.maxBufferBytes=c.maxBufferBytes??10485760,this.partitionKey=c.partitionKey;let h=c.flushIntervalMs??60000;if(h>0&&h<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((w)=>{console.error("[NDJSONExporter] Timer flush failed:",w)})},h),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(c){if(this.isShutdown)return Promise.resolve({code:F.FAILED});for(let h of c){let w=JSON.stringify(h),f=this.partitionKey?this.partitionKey(h):"";this.bufferItems.push({partition:f,json:w}),this.bufferBytes+=Buffer.byteLength(w,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:F.SUCCESS})).catch((h)=>{return console.error("[NDJSONExporter] Flush failed:",h),{code:F.FAILED}});return Promise.resolve({code:F.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let h=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=h,h}async doFlush(){if(this.bufferItems.length===0)return;let c=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let h=new Map;for(let y of c){let J=h.get(y.partition);if(!J)J=[],h.set(y.partition,J);J.push(y.json)}let w=await Promise.allSettled(Array.from(h.entries()).map(([y,J])=>this.writeNDJSON(J,y).then(()=>y))),f=w.find((y)=>y.status==="rejected");if(f){let y=new Set;for(let d of w)if(d.status==="fulfilled")y.add(d.value);let J=c.filter((d)=>!y.has(d.partition));this.bufferItems=J.concat(this.bufferItems),this.bufferBytes=0;for(let d of this.bufferItems)this.bufferBytes+=Buffer.byteLength(d.json,"utf8")+1;throw f.reason}}async writeNDJSON(c,h){let w=new Date,f=[String(w.getUTCFullYear()),String(w.getUTCMonth()+1).padStart(2,"0"),String(w.getUTCDate()).padStart(2,"0"),String(w.getUTCHours()).padStart(2,"0")],y=h?Q(this.basePath,h,...f):Q(this.basePath,...f);if(!this.knownDirs.has(y))await e(y,{recursive:!0,mode:448}),this.knownDirs.add(y);let J=`${crypto.randomUUID()}.ndjson`,d=Q(y,`.${J}.tmp`),m=Q(y,J),z=c.join(`
3
3
  `)+`
4
4
  `;await hh(d,z,{mode:384}),await a(d,m)}}import{ExportResultCode as Jc}from"@opentelemetry/core";import{AggregationTemporality as mc,DataPointType as oc}from"@opentelemetry/sdk-metrics";import{ExportResultCode as $c}from"@opentelemetry/core";var kc=Buffer.byteLength("... [TRUNCATED]","utf8");import{BatchLogRecordProcessor as ow,LoggerProvider as zw}from"@opentelemetry/sdk-logs";import{detectResources as Dw,envDetector as Nw,hostDetector as Zw,osDetector as $w,processDetector as Fw,resourceFromAttributes as Qw}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as kw}from"@opentelemetry/sdk-metrics";import{NOOP_LOGGER as Uc}from"@opentelemetry/api-logs";import{NodeSDK as Uw}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as Bw,SamplingDecision as D}from"@opentelemetry/sdk-trace-base";import{SpanStatusCode as Cc}from"@opentelemetry/api";var oh="__d",zh=yh("Current request"),Wh=1;var b=(c)=>{let w=new URL(c.url).searchParams.get(oh);if(w==="")return crypto.randomUUID();if(!w)w=c.headers.get("x-trace-debug-id");return w};class T{inner;constructor(c){this.inner=c}shouldSample(c,h,w,f,y,J){let d=c.getValue(zh);if(!d){if(this.inner)return this.inner.shouldSample(c,h,w,f,y,J);return{decision:D.RECORD_AND_SAMPLED}}let m=b(d);if(m)return{decision:D.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":m}};if(this.inner){let z=this.inner.shouldSample(c,h,w,f,y,J);if(z.decision===D.RECORD_AND_SAMPLED){let i=crypto.randomUUID();z.attributes={...z.attributes??{},"trace.debug.id":i}}return z}return{decision:D.NOT_RECORD}}toString(){return"DebugSampler"}}class _{ratio;constructor(c){this.ratio=c}shouldSample(){if(Math.random()<this.ratio)return{decision:D.RECORD_AND_SAMPLED};return{decision:D.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}var Hw=new mh({preventServerStart:!0}),Cw=new T(new _(Wh));var S=Jh.getTracer("studio","1.0.0"),K=fh.getMeter("studio","1.0.0"),Dh=dh.getLogger("studio","1.0.0"),x=(c,h,w)=>{let f={},y=w,J=w[w.length-1];if(J!==null&&typeof J==="object"&&!Array.isArray(J)&&!(J instanceof Error)&&Object.getPrototypeOf(J)===Object.prototype)f=J,y=w.slice(0,-1);let d=y.map((m)=>{if(m instanceof Error)return`${m.name}: ${m.message}`;if(typeof m==="object")try{return JSON.stringify(m)}catch{return"[Object]"}return String(m)}).join(" ");Dh.emit({severityNumber:c,severityText:h,body:d,attributes:{"log.source":"console",...f}})},H={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...c)=>{x(B.ERROR,"ERROR",c),H.error(...c)};console.warn=(...c)=>{x(B.WARN,"WARN",c),H.warn(...c)};console.debug=(...c)=>{x(B.DEBUG,"DEBUG",c),H.debug(...c)};function C(c,h){if(!h)return c;let w=new URL(c);if(!w.searchParams.has("sslmode"))w.searchParams.set("sslmode","verify-full");return w.toString()}async function Nh(){let c=Z(),{DBOS:h}=await import("@dbos-inc/dbos-sdk");h.setConfig(R({systemDatabaseUrl:C(c.databaseUrl,c.databasePgSsl),poolSize:c.dbosPoolSize,executorID:c.podName,listenQueues:[]})),await G({databaseUrl:C(c.databaseUrl,c.databasePgSsl)},async()=>{await h.launch(),await h.shutdown()})}if(import.meta.main)(async()=>{try{await Nh(),console.log("DBOS system-schema migrations completed."),process.exit(0)}catch(c){console.error("DBOS system-schema migration failed:",c),process.exit(1)}})();export{Nh as migrateDbos};
@@ -487,7 +487,7 @@ var FK=Object.defineProperty;var RK=(_)=>_;function YK(_,x){this[_]=RK.bind(null
487
487
  UPDATE connections
488
488
  SET subtype = 'agent'
489
489
  WHERE connection_type = 'VIRTUAL'
490
- `.execute(_),await _.schema.createTable("virtual_mcp_plugin_configs").addColumn("id","text",(E)=>E.primaryKey()).addColumn("virtual_mcp_id","text",(E)=>E.notNull().references("connections.id").onDelete("cascade")).addColumn("plugin_id","text",(E)=>E.notNull()).addColumn("connection_id","text",(E)=>E.references("connections.id").onDelete("set null")).addColumn("settings","text").addColumn("created_at","text",(E)=>E.notNull()).addColumn("updated_at","text",(E)=>E.notNull()).execute(),await _.schema.createIndex("idx_vmpc_unique").on("virtual_mcp_plugin_configs").columns(["virtual_mcp_id","plugin_id"]).unique().execute(),await _.schema.createIndex("idx_vmpc_virtual_mcp_id").on("virtual_mcp_plugin_configs").columns(["virtual_mcp_id"]).execute();let x=await _.selectFrom("projects").select(["id","organization_id","slug","name","description","enabled_plugins","ui","created_at","updated_at"]).execute(),u=await _.selectFrom("member").select(["organizationId","userId"]).where("role","=","owner").execute(),N=new Map;for(let E of u)N.set(E.organizationId,E.userId);let C=new Map;for(let E of x){let z=`vir_${g()}`;C.set(E.id,z);let $=E.ui?JSON.parse(E.ui):null,U=JSON.stringify({enabled_plugins:E.enabled_plugins?JSON.parse(E.enabled_plugins):null,ui:$,migrated_from_project:E.id,migrated_project_slug:E.slug}),Z=N.get(E.organization_id);if(!Z)continue;await _.insertInto("connections").values({id:z,organization_id:E.organization_id,created_by:Z,updated_by:null,title:E.name,description:E.description,icon:$?.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",connection_url:`virtual://${z}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:U,bindings:null,status:"active",subtype:"project",created_at:E.created_at,updated_at:E.updated_at}).execute()}let T=await _.selectFrom("project_connections").select(["project_id","connection_id","created_at"]).execute();for(let E of T){let z=C.get(E.project_id);if(!z)continue;await _.insertInto("connection_aggregations").values({id:`agg_${g()}`,parent_connection_id:z,child_connection_id:E.connection_id,selected_tools:null,selected_resources:null,selected_prompts:null,dependency_mode:"direct",created_at:E.created_at}).onConflict(($)=>$.doNothing()).execute()}let K=await _.selectFrom("project_plugin_configs").select(["id","project_id","plugin_id","connection_id","settings","created_at","updated_at"]).execute();for(let E of K){let z=C.get(E.project_id);if(!z)continue;await _.insertInto("virtual_mcp_plugin_configs").values({id:`vpc_${g()}`,virtual_mcp_id:z,plugin_id:E.plugin_id,connection_id:E.connection_id,settings:E.settings,created_at:E.created_at,updated_at:E.updated_at}).execute()}await _.schema.dropTable("project_plugin_configs").execute(),await _.schema.dropTable("project_connections").execute(),await _.schema.dropTable("projects").execute()}async function D0(_){await _.schema.dropTable("virtual_mcp_plugin_configs").ifExists().execute(),await _.schema.dropIndex("idx_connections_org_type_subtype").ifExists().execute(),await Ju`
490
+ `.execute(_),await _.schema.createTable("virtual_mcp_plugin_configs").addColumn("id","text",(E)=>E.primaryKey()).addColumn("virtual_mcp_id","text",(E)=>E.notNull().references("connections.id").onDelete("cascade")).addColumn("plugin_id","text",(E)=>E.notNull()).addColumn("connection_id","text",(E)=>E.references("connections.id").onDelete("set null")).addColumn("settings","text").addColumn("created_at","text",(E)=>E.notNull()).addColumn("updated_at","text",(E)=>E.notNull()).execute(),await _.schema.createIndex("idx_vmpc_unique").on("virtual_mcp_plugin_configs").columns(["virtual_mcp_id","plugin_id"]).unique().execute(),await _.schema.createIndex("idx_vmpc_virtual_mcp_id").on("virtual_mcp_plugin_configs").columns(["virtual_mcp_id"]).execute();let x=await _.selectFrom("projects").select(["id","organization_id","slug","name","description","enabled_plugins","ui","created_at","updated_at"]).execute(),u=await _.selectFrom("member").select(["organizationId","userId"]).where("role","=","owner").execute(),N=new Map;for(let E of u)N.set(E.organizationId,E.userId);let C=new Map;for(let E of x){let z=`vir_${g()}`;C.set(E.id,z);let $=E.ui?JSON.parse(E.ui):null,U=JSON.stringify({enabled_plugins:E.enabled_plugins?JSON.parse(E.enabled_plugins):null,ui:$,migrated_from_project:E.id,migrated_project_slug:E.slug}),Q=N.get(E.organization_id);if(!Q)continue;await _.insertInto("connections").values({id:z,organization_id:E.organization_id,created_by:Q,updated_by:null,title:E.name,description:E.description,icon:$?.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",connection_url:`virtual://${z}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:U,bindings:null,status:"active",subtype:"project",created_at:E.created_at,updated_at:E.updated_at}).execute()}let T=await _.selectFrom("project_connections").select(["project_id","connection_id","created_at"]).execute();for(let E of T){let z=C.get(E.project_id);if(!z)continue;await _.insertInto("connection_aggregations").values({id:`agg_${g()}`,parent_connection_id:z,child_connection_id:E.connection_id,selected_tools:null,selected_resources:null,selected_prompts:null,dependency_mode:"direct",created_at:E.created_at}).onConflict(($)=>$.doNothing()).execute()}let K=await _.selectFrom("project_plugin_configs").select(["id","project_id","plugin_id","connection_id","settings","created_at","updated_at"]).execute();for(let E of K){let z=C.get(E.project_id);if(!z)continue;await _.insertInto("virtual_mcp_plugin_configs").values({id:`vpc_${g()}`,virtual_mcp_id:z,plugin_id:E.plugin_id,connection_id:E.connection_id,settings:E.settings,created_at:E.created_at,updated_at:E.updated_at}).execute()}await _.schema.dropTable("project_plugin_configs").execute(),await _.schema.dropTable("project_connections").execute(),await _.schema.dropTable("projects").execute()}async function D0(_){await _.schema.dropTable("virtual_mcp_plugin_configs").ifExists().execute(),await _.schema.dropIndex("idx_connections_org_type_subtype").ifExists().execute(),await Ju`
491
491
  ALTER TABLE connections
492
492
  DROP CONSTRAINT IF EXISTS chk_connections_subtype
493
493
  `.execute(_),await _.schema.alterTable("connections").dropColumn("subtype").execute()}var Zu={};m(Zu,{up:()=>L0,down:()=>F0});import{sql as W0}from"kysely";async function L0(_){await W0`
@@ -594,7 +594,7 @@ var FK=Object.defineProperty;var RK=(_)=>_;function YK(_,x){this[_]=RK.bind(null
594
594
  WHERE connection_type = 'VIRTUAL'
595
595
  AND metadata IS NOT NULL
596
596
  AND metadata LIKE '%vmMap%'
597
- `.execute(_);for(let u of x.rows){if(!u.metadata)continue;let N;try{N=JSON.parse(u.metadata)}catch{continue}let C=N.vmMap;if(!C||typeof C!=="object")continue;let T=!1,K={};for(let[z,$]of Object.entries(C)){if(!$||typeof $!=="object"){T=!0;continue}let U={};for(let[Z,j]of Object.entries($)){if(!j||typeof j!=="object"){T=!0;continue}let B=j.runnerKind;if(B!==void 0&&!VP.has(B)){T=!0;continue}U[Z]=j}if(Object.keys(U).length>0)K[z]=U;else T=!0}if(!T)continue;N.vmMap=K;let E=JSON.stringify(N);await QT`
597
+ `.execute(_);for(let u of x.rows){if(!u.metadata)continue;let N;try{N=JSON.parse(u.metadata)}catch{continue}let C=N.vmMap;if(!C||typeof C!=="object")continue;let T=!1,K={};for(let[z,$]of Object.entries(C)){if(!$||typeof $!=="object"){T=!0;continue}let U={};for(let[Q,j]of Object.entries($)){if(!j||typeof j!=="object"){T=!0;continue}let B=j.runnerKind;if(B!==void 0&&!VP.has(B)){T=!0;continue}U[Q]=j}if(Object.keys(U).length>0)K[z]=U;else T=!0}if(!T)continue;N.vmMap=K;let E=JSON.stringify(N);await QT`
598
598
  UPDATE "connections"
599
599
  SET metadata = ${E}
600
600
  WHERE id = ${u.id}
@@ -1104,11 +1104,11 @@ var FK=Object.defineProperty;var RK=(_)=>_;function YK(_,x){this[_]=RK.bind(null
1104
1104
  WHERE connection_type = 'VIRTUAL'
1105
1105
  AND metadata IS NOT NULL
1106
1106
  AND metadata LIKE ${"%"+M_+"%"}
1107
- `.execute(_);for(let u of x.rows){if(!u.metadata)continue;let N;try{N=JSON.parse(u.metadata)}catch{continue}let C=N.sandboxMap;if(!C||typeof C!=="object")continue;let T=!1,K={};for(let[z,$]of Object.entries(C)){if(!$||typeof $!=="object"){T=!0;continue}let U={};for(let[Z,j]of Object.entries($)){if(!j||typeof j!=="object"){T=!0;continue}if(M_ in j){T=!0;let B={...j};if(delete B[M_],Object.keys(B).length>0)U[Z]=B}else U[Z]=j}if(Object.keys(U).length>0)K[z]=U;else T=!0}if(!T)continue;N.sandboxMap=K;let E=JSON.stringify(N);await Jm`
1107
+ `.execute(_);for(let u of x.rows){if(!u.metadata)continue;let N;try{N=JSON.parse(u.metadata)}catch{continue}let C=N.sandboxMap;if(!C||typeof C!=="object")continue;let T=!1,K={};for(let[z,$]of Object.entries(C)){if(!$||typeof $!=="object"){T=!0;continue}let U={};for(let[Q,j]of Object.entries($)){if(!j||typeof j!=="object"){T=!0;continue}if(M_ in j){T=!0;let B={...j};if(delete B[M_],Object.keys(B).length>0)U[Q]=B}else U[Q]=j}if(Object.keys(U).length>0)K[z]=U;else T=!0}if(!T)continue;N.sandboxMap=K;let E=JSON.stringify(N);await Jm`
1108
1108
  UPDATE "connections"
1109
1109
  SET metadata = ${E}
1110
1110
  WHERE id = ${u.id}
1111
- `.execute(_)}}async function Y$(_){}var Zm={};m(Zm,{up:()=>H$,down:()=>M$});import{sql as B_}from"kysely";async function H$(_){await _.schema.createTable("thread_message_parts").addColumn("id","text",(x)=>x.primaryKey()).addColumn("seq","integer",(x)=>x.notNull()).addColumn("org_id","text",(x)=>x.notNull()).addColumn("thread_id","text",(x)=>x.notNull().references("threads.id").onDelete("cascade")).addColumn("run_id","text",(x)=>x.notNull()).addColumn("message_id","text",(x)=>x.notNull()).addColumn("role","text",(x)=>x.notNull()).addColumn("kind","text",(x)=>x.notNull()).addColumn("payload","jsonb",(x)=>x.notNull()).addColumn("payload_ref","text").addColumn("metadata","jsonb").addColumn("created_at","text",(x)=>x.notNull()).execute(),await B_`CREATE UNIQUE INDEX idx_tmp_run_seq ON thread_message_parts (run_id, seq)`.execute(_),await B_`CREATE INDEX idx_tmp_thread_created_id ON thread_message_parts (thread_id, created_at, id)`.execute(_),await B_`CREATE INDEX idx_tmp_finish_anchor ON thread_message_parts (thread_id, created_at DESC, id DESC) WHERE kind = 'finish'`.execute(_),await B_`CREATE INDEX idx_tmp_message ON thread_message_parts (thread_id, message_id)`.execute(_),await _.schema.alterTable("threads").addColumn("message_storage_version","integer",(x)=>x.notNull().defaultTo(1)).addColumn("last_progress_at","timestamptz").execute()}async function M$(_){await _.schema.alterTable("threads").dropColumn("message_storage_version").dropColumn("last_progress_at").execute(),await _.schema.dropTable("thread_message_parts").ifExists().execute()}var Dm={};m(Dm,{up:()=>B$,down:()=>G$});async function B$(_){await _.schema.alterTable("threads").addColumn("run_fence_token","text").execute()}async function G$(_){await _.schema.alterTable("threads").dropColumn("run_fence_token").execute()}var Wm={};m(Wm,{up:()=>f$,down:()=>y$});async function f$(_){await _.schema.alterTable("threads").addColumn("link_transport","text").execute()}async function y$(_){await _.schema.alterTable("threads").dropColumn("link_transport").execute()}var Lm={};m(Lm,{up:()=>O$,down:()=>S$});async function O$(_){await _.schema.alterTable("threads").addColumn("cancel_requested_at","timestamptz").execute()}async function S$(_){await _.schema.alterTable("threads").dropColumn("cancel_requested_at").execute()}var Fm={};m(Fm,{up:()=>A$,down:()=>I$});async function A$(_){await _.schema.alterTable("organization_settings").addColumn("observational_config","text").execute(),await _.schema.alterTable("threads").addColumn("is_observation","boolean",(x)=>x.notNull().defaultTo(!1)).execute(),await _.schema.createTable("thread_observations").addColumn("thread_id","text",(x)=>x.notNull().references("threads.id").onDelete("cascade")).addColumn("observer_id","text",(x)=>x.notNull()).addColumn("last_observed_at","text",(x)=>x.notNull()).addPrimaryKeyConstraint("thread_observations_pkey",["thread_id","observer_id"]).execute()}async function I$(_){await _.schema.dropTable("thread_observations").execute(),await _.schema.alterTable("threads").dropColumn("is_observation").execute(),await _.schema.alterTable("organization_settings").dropColumn("observational_config").execute()}var Rm={};m(Rm,{up:()=>n$,down:()=>w$});async function n$(_){await _.schema.dropTable("thread_observations").ifExists().execute(),await _.schema.alterTable("threads").dropColumn("is_observation").execute(),await _.schema.alterTable("organization_settings").dropColumn("observational_config").execute()}async function w$(_){await _.schema.alterTable("organization_settings").addColumn("observational_config","text").execute(),await _.schema.alterTable("threads").addColumn("is_observation","boolean",(x)=>x.notNull().defaultTo(!1)).execute(),await _.schema.createTable("thread_observations").addColumn("thread_id","text",(x)=>x.notNull().references("threads.id").onDelete("cascade")).addColumn("observer_id","text",(x)=>x.notNull()).addColumn("last_observed_at","text",(x)=>x.notNull()).addPrimaryKeyConstraint("thread_observations_pkey",["thread_id","observer_id"]).execute()}var Hm={};m(Hm,{up:()=>k$,down:()=>p$});import{sql as y}from"kysely";var Y="cluster",H="agent-sandbox";function c(_){return _!==null&&typeof _==="object"&&!Array.isArray(_)}function Ym(_,x,u){if(!c(_))return _;if(_.sandboxProviderKind!==x)return _;return{..._,sandboxProviderKind:u}}function G_(_){if(!c(_))return!1;if(typeof _.sandboxHandle!=="string")return!1;if(_.previewUrl!==null&&typeof _.previewUrl!=="string")return!1;if(_.sandboxApiUrl!==void 0&&_.sandboxApiUrl!==null&&typeof _.sandboxApiUrl!=="string")return!1;if(_.sandboxProviderKind!==void 0&&_.sandboxProviderKind!==Y&&_.sandboxProviderKind!==H&&_.sandboxProviderKind!=="user-desktop")return!1;if(_.createdAt!==void 0&&typeof _.createdAt!=="number")return!1;if(_.startedWith!==void 0){if(!c(_.startedWith))return!1;for(let x of["packageManager","port","path"]){let u=_.startedWith[x];if(u!==void 0&&u!==null&&typeof u!=="string")return!1}}return!0}function V$(_,x,u){if(!c(_))return null;let N=!1,C={};for(let[T,K]of Object.entries(_)){if(!c(K)){C[T]=K;continue}let E={};for(let[z,$]of Object.entries(K)){if(!c($)){E[z]=$;continue}let U={};for(let[Z,j]of Object.entries($)){if(Z===x){if(N=!0,!(u in $))U[u]=Ym(j,x,u);else if(!G_($[u])&&G_(j))U[u]=Ym(j,x,u);continue}let B=Ym(j,x,u);if(B!==j)N=!0;if(Z===u&&Z in U&&G_(U[Z])&&!G_(B))continue;U[Z]=B}E[z]=U}C[T]=E}return{sandboxMap:C,changed:N}}async function FT(_,x,u){let N=await y`
1111
+ `.execute(_)}}async function Y$(_){}var Zm={};m(Zm,{up:()=>H$,down:()=>M$});import{sql as B_}from"kysely";async function H$(_){await _.schema.createTable("thread_message_parts").addColumn("id","text",(x)=>x.primaryKey()).addColumn("seq","integer",(x)=>x.notNull()).addColumn("org_id","text",(x)=>x.notNull()).addColumn("thread_id","text",(x)=>x.notNull().references("threads.id").onDelete("cascade")).addColumn("run_id","text",(x)=>x.notNull()).addColumn("message_id","text",(x)=>x.notNull()).addColumn("role","text",(x)=>x.notNull()).addColumn("kind","text",(x)=>x.notNull()).addColumn("payload","jsonb",(x)=>x.notNull()).addColumn("payload_ref","text").addColumn("metadata","jsonb").addColumn("created_at","text",(x)=>x.notNull()).execute(),await B_`CREATE UNIQUE INDEX idx_tmp_run_seq ON thread_message_parts (run_id, seq)`.execute(_),await B_`CREATE INDEX idx_tmp_thread_created_id ON thread_message_parts (thread_id, created_at, id)`.execute(_),await B_`CREATE INDEX idx_tmp_finish_anchor ON thread_message_parts (thread_id, created_at DESC, id DESC) WHERE kind = 'finish'`.execute(_),await B_`CREATE INDEX idx_tmp_message ON thread_message_parts (thread_id, message_id)`.execute(_),await _.schema.alterTable("threads").addColumn("message_storage_version","integer",(x)=>x.notNull().defaultTo(1)).addColumn("last_progress_at","timestamptz").execute()}async function M$(_){await _.schema.alterTable("threads").dropColumn("message_storage_version").dropColumn("last_progress_at").execute(),await _.schema.dropTable("thread_message_parts").ifExists().execute()}var Dm={};m(Dm,{up:()=>B$,down:()=>G$});async function B$(_){await _.schema.alterTable("threads").addColumn("run_fence_token","text").execute()}async function G$(_){await _.schema.alterTable("threads").dropColumn("run_fence_token").execute()}var Wm={};m(Wm,{up:()=>f$,down:()=>y$});async function f$(_){await _.schema.alterTable("threads").addColumn("link_transport","text").execute()}async function y$(_){await _.schema.alterTable("threads").dropColumn("link_transport").execute()}var Lm={};m(Lm,{up:()=>O$,down:()=>S$});async function O$(_){await _.schema.alterTable("threads").addColumn("cancel_requested_at","timestamptz").execute()}async function S$(_){await _.schema.alterTable("threads").dropColumn("cancel_requested_at").execute()}var Fm={};m(Fm,{up:()=>A$,down:()=>I$});async function A$(_){await _.schema.alterTable("organization_settings").addColumn("observational_config","text").execute(),await _.schema.alterTable("threads").addColumn("is_observation","boolean",(x)=>x.notNull().defaultTo(!1)).execute(),await _.schema.createTable("thread_observations").addColumn("thread_id","text",(x)=>x.notNull().references("threads.id").onDelete("cascade")).addColumn("observer_id","text",(x)=>x.notNull()).addColumn("last_observed_at","text",(x)=>x.notNull()).addPrimaryKeyConstraint("thread_observations_pkey",["thread_id","observer_id"]).execute()}async function I$(_){await _.schema.dropTable("thread_observations").execute(),await _.schema.alterTable("threads").dropColumn("is_observation").execute(),await _.schema.alterTable("organization_settings").dropColumn("observational_config").execute()}var Rm={};m(Rm,{up:()=>n$,down:()=>w$});async function n$(_){await _.schema.dropTable("thread_observations").ifExists().execute(),await _.schema.alterTable("threads").dropColumn("is_observation").execute(),await _.schema.alterTable("organization_settings").dropColumn("observational_config").execute()}async function w$(_){await _.schema.alterTable("organization_settings").addColumn("observational_config","text").execute(),await _.schema.alterTable("threads").addColumn("is_observation","boolean",(x)=>x.notNull().defaultTo(!1)).execute(),await _.schema.createTable("thread_observations").addColumn("thread_id","text",(x)=>x.notNull().references("threads.id").onDelete("cascade")).addColumn("observer_id","text",(x)=>x.notNull()).addColumn("last_observed_at","text",(x)=>x.notNull()).addPrimaryKeyConstraint("thread_observations_pkey",["thread_id","observer_id"]).execute()}var Hm={};m(Hm,{up:()=>k$,down:()=>p$});import{sql as y}from"kysely";var Y="cluster",H="agent-sandbox";function c(_){return _!==null&&typeof _==="object"&&!Array.isArray(_)}function Ym(_,x,u){if(!c(_))return _;if(_.sandboxProviderKind!==x)return _;return{..._,sandboxProviderKind:u}}function G_(_){if(!c(_))return!1;if(typeof _.sandboxHandle!=="string")return!1;if(_.previewUrl!==null&&typeof _.previewUrl!=="string")return!1;if(_.sandboxApiUrl!==void 0&&_.sandboxApiUrl!==null&&typeof _.sandboxApiUrl!=="string")return!1;if(_.sandboxProviderKind!==void 0&&_.sandboxProviderKind!==Y&&_.sandboxProviderKind!==H&&_.sandboxProviderKind!=="user-desktop")return!1;if(_.createdAt!==void 0&&typeof _.createdAt!=="number")return!1;if(_.startedWith!==void 0){if(!c(_.startedWith))return!1;for(let x of["packageManager","port","path"]){let u=_.startedWith[x];if(u!==void 0&&u!==null&&typeof u!=="string")return!1}}return!0}function V$(_,x,u){if(!c(_))return null;let N=!1,C={};for(let[T,K]of Object.entries(_)){if(!c(K)){C[T]=K;continue}let E={};for(let[z,$]of Object.entries(K)){if(!c($)){E[z]=$;continue}let U={};for(let[Q,j]of Object.entries($)){if(Q===x){if(N=!0,!(u in $))U[u]=Ym(j,x,u);else if(!G_($[u])&&G_(j))U[u]=Ym(j,x,u);continue}let B=Ym(j,x,u);if(B!==j)N=!0;if(Q===u&&Q in U&&G_(U[Q])&&!G_(B))continue;U[Q]=B}E[z]=U}C[T]=E}return{sandboxMap:C,changed:N}}async function FT(_,x,u){let N=await y`
1112
1112
  SELECT id, metadata FROM connections
1113
1113
  WHERE connection_type = 'VIRTUAL'
1114
1114
  AND metadata IS NOT NULL
@@ -1992,7 +1992,7 @@ var FK=Object.defineProperty;var RK=(_)=>_;function YK(_,x){this[_]=RK.bind(null
1992
1992
  ON CONFLICT (thread_id, repository_id) DO NOTHING
1993
1993
  `.execute(_),await M`DROP FUNCTION IF EXISTS repo_ref_try_jsonb(text)`.execute(_)}async function PQ(_){await M`DROP TABLE IF EXISTS thread_repositories`.execute(_),await M`
1994
1994
  ALTER TABLE connections DROP COLUMN IF EXISTS repository_id
1995
- `.execute(_)}var $Q={"001-initial-schema":Wx,"002-organization-settings":Lx,"003-connection-schema-align":Fx,"004-remove-models-binding":Rx,"005-connection-configuration":Yx,"006-add-views-to-settings":Hx,"007-monitoring-logs":Mx,"008-event-bus":Bx,"009-drop-audit-logs":Gx,"010-gateways":fx,"011-gateway-icon":yx,"012-gateway-tool-selection-mode":Ox,"013-monitoring-user-agent-gateway":Sx,"014-gateway-resources-prompts":Ax,"015-monitoring-properties":Ix,"016-downstream-token-client-info":nx,"017-downstream-token-remove-userid":wx,"018-drop-gateway-tool-selection-strategy":Vx,"019-remove-gateway-is-default":kx,"020-enabled-plugins":px,"021-threads":vx,"022-rename-gateway-to-virtual-mcp":qx,"023-optimize-thread-indexes":gx,"024-consolidate-virtual-mcp":ix,"025-add-monitoring-virtual-mcp-id":tx,"026-restrict-child-connection-delete":cx,"027-update-management-mcp-url":ox,"028-update-management-mcp-to-self":rx,"029-add-updated-by-to-connections":ex,"030-member-tags":lx,"031-add-dependency-mode":dx,"032-projects":sx,"033-thread-status":bx,"034-monitoring-dashboards":_u,"035-project-connections":xu,"036-update-registry-url":uu,"037-ai-provider-keys":mu,"038-oauth-pkce-states":Cu,"039-automations":Nu,"040-replace-next-run-at-with-last-run-at":Tu,"041-ai-provider-keys-unique-constraint":Ku,"042-rename-mesh-mcp-to-cms-mcp":Eu,"043-rename-cms-mcp-to-deco-cms":zu,"044-drop-connections-tools-column":Pu,"045-thread-context-start-message":$u,"046-remove-object-storage-plugin":Xu,"047-add-next-run-at":ju,"048-merge-projects-agents":Qu,"049-remove-org-admin-projects":Zu,"050-durable-agent-runs":Du,"051-org-sso":Lu,"052-thread-agent-ids":Fu,"053-registry-config":Ru,"054-connection-slug":Hu,"055-spaces":Mu,"056-automation-project-scope":Bu,"057-thread-virtual-mcp-id":Gu,"058-trigger-callback-tokens":fu,"059-kv":yu,"060-member-index":Ou,"061-downstream-token-connection-index":Su,"062-private-registry":Au,"063-event-subscriptions-enabled-boolean":Iu,"064-brand-context":nu,"065-organization-domains":wu,"066-brand-context-structured":Vu,"067-threads-metadata":ku,"068-threads-branch":pu,"069-sandbox-runner-state":vu,"070-model-categories":qu,"071-default-home-agents":gu,"072-ai-provider-key-preset-id":iu,"073-backfill-basic-usage-roles":tu,"074-sandbox-runner-state-handle-nonunique":cu,"075-thread-inflight-async-jobs":hu,"076-automations-drop-agent-json":ou,"077-tier-only-model-selection":ru,"078-automation-tool-call-kind":eu,"079-strip-legacy-freestyle-vm-map-entries":lu,"080-async-research-jobs":du,"081-async-research-jobs-result-content":su,"082-secrets":bu,"083-thread-run-locally":_m,"084-drop-host-sandbox-rows":xm,"085-rename-runner-kind":um,"086-thread-pins-and-vm-map-rekey":mm,"087-fix-vm-map-rekey":Cm,"088-purge-cli-activate-keys":Nm,"089-rename-remote-user-to-desktop":Tm,"090-automation-webhook-triggers":Km,"091-organization-domains-allow-multi":Em,"092-sandbox-naming-uniformization":zm,"093-backfill-global-search-basic-usage":Pm,"094-org-file-configs":Um,"095-remove-automation-tool-call-kind":Xm,"096-org-file-configs-public-url-base":jm,"097-drop-local-docker-sandbox-state":Qm,"098-thread-message-parts":Zm,"099-run-fence":Dm,"100-link-transport":Wm,"101-cancel-requested-at":Lm,"102-observational-agent":Fm,"103-revert-observational-agent":Rm,"104-agent-sandbox-provider-kind":Hm,"105-org-fs":Mm,"106-automation-tools":Bm,"107-org-fs-public-org":Gm,"108-automation-max-agent-steps":fm,"109-thread-message-parts-per-message-seq":ym,"110-backfill-ghs-token-expiry":Om,"111-org-fs-thread-id":Sm,"112-org-file-configs-credential-type":Am,"113-thread-failure-reason":Im,"114-run-acked-seq":nm,"115-thread-projected-seq":wm,"116-org-sites":Vm,"117-org-file-configs-site-slug":km,"118-organization-domains-multi-verify":pm,"119-organization-join-requests":vm,"120-org-fs-read-public":qm,"121-org-fs-share-password":gm,"122-split-web-research-tier":cm,"123-connection-credential-vault":hm,"124-drop-thread-projected-seq":om,"125-github-child-single-parent":am,"126-task-board":em,"127-task-board-due-date":lm,"128-reports-only":dm,"129-task-board-assigned-by":sm,"130-task-board-thread-id":bm,"131-task-board-thread-link-cascade":_C,"132-task-board-item-prs":xC,"133-dedupe-duplicate-members":uC,"134-drop-task-board-enabled":mC,"135-task-board-item-fk-cascade":CC,"136-task-board-import-idempotency":NC,"137-agent-sandbox-runner-state":TC,"138-agent-sandbox-sessions":KC,"139-organization-billing":EC,"140-seat-change-log":zC,"141-benefits-sync-pending":PC,"142-stripe-event-watermark":$C,"143-armed-report-url":UC,"144-benefits-pending-index":XC,"145-user-model-preferences":jC,"146-organization-main-agent":JC,"147-drop-agent-sandbox-tables":QC,"148-org-flags":ZC,"149-task-board-item-sort-order":DC,"150-task-board-activity":WC,"151-task-board-tags":FC,"152-repair-connection-slug":YC,"153-task-board-latest-assistant-part-index":HC,"154-task-board-qa-activity":BC,"155-task-board-review-claims":GC,"156-task-board-conflict-activity":yC,"157-drop-seat-billing":OC,"158-drop-github-child-single-parent":SC,"159-task-board-comments":AC,"160-task-quota-billing":IC,"161-task-quota-claim-state":wC,"162-claude-subscriptions":VC,"163-task-board-item-dismissed":kC,"164-per-org-task-quota":pC,"165-task-board-pending-review-index":vC,"166-task-board-last-swept-at":qC,"167-task-board-run-retry":gC,"168-org-repo-sync":tC,"169-task-board-merge-failed-activity":hC,"170-task-board-item-repo":oC,"171-jira-integration":aC,"172-task-board-item-key-seq":rC,"173-thread-github-repo-connection-index":eC,"174-thread-message-parts-persisted-at":dC,"175-task-board-sprints":sC,"176-task-board-done-sweep-index":bC,"177-notifications":_N,"178-jira-status-mapping-array":xN,"179-notification-mentioned":mN,"180-task-board-item-type":NN,"181-task-board-item-type-required":TN,"182-task-board-sprints-entities":KN,"183-drop-jira-jql-filter":EN,"184-jira-rescan-after-scope-change":zN,"185-jira-rescan-existing-cards":PN,"186-jira-rescan-pending-flag":UN,"187-task-board-comment-thread":XN,"188-invitation-auto-accept":jN,"189-task-board-column-automations":QN,"190-task-board-review-cycle-started-at":ZN,"191-task-board-columns":DN,"192-task-board-verdict-nudge-activity":LN,"193-task-board-status-column-fk":FN,"194-jira-link-sprint":RN,"195-task-board-sprint-activity":HN,"196-task-board-column-tracker-statuses":MN,"197-task-board-prompts":BN,"198-task-board-external-url":GN,"199-drop-jira-mirror-and-org-columns":fN,"200-jira-run-trigger":yN,"201-organization-notices":ON,"202-redact-base64-thread-parts":AN,"203-task-board-preview-routes":IN,"204-git-provider-accounts-and-repositories":nN,"205-repository-references":wN,"206-repository-consumers":Dx,"207-task-board-prs-repo-idx":Zx,"208-github-connect-flows":Qx,"209-github-installation-authorization":Jx,"210-github-repository-authorization":Kx,"211-user-fs-org":Tx,"212-coding-agent-mcp-excluded":Ex,"213-bitbucket-git-provider":zx,"214-connections-sanitized-id-idx":ux,"215-commerce-discovery-repository":mx,"216-github-cli-auth":Nx,"217-experiments":Px,"218-thread-message-parts-error-idx":$x,"219-task-board-duplicate-reported-activity":Xx,"220-jira-automation-continue-pr":jx,"221-remove-private-registry":o_,"222-org-git-credentials":a_,"223-drop-org-main-agent-id":xx,"224-repository-sandbox-image":r_,"225-thread-analytics-indexes":l_,"226-deco-score-names":s_,"227-task-board-finding-resolved-activity":_x},VN=$Q;import{getMigrations as tQ}from"better-auth/db";import{sso as cQ}from"@better-auth/sso";import{organization as hQ}from"@decocms/better-auth/plugins";import{admin as oQ,apiKey as aQ,jwt as rQ,magicLink as eQ,mcp as lQ,openAPI as dQ}from"better-auth/plugins";import{emailOTP as sQ}from"better-auth/plugins/email-otp";import{Kysely as VQ,PostgresDialect as UK}from"kysely";import{Pool as XK}from"pg";import{homedir as UQ}from"os";var XQ=new Set(["all","worker","api"]);function jQ(_){let x=(_??"").trim();return XQ.has(x)?x:"all"}var JQ=new Set(["production","development","test"]);function QQ(_){let x=(_??"").trim();return JQ.has(x)?x:"development"}function Q(_){return _==="true"||_==="1"}function pN(_,x,u){if(x===void 0||x==="")return;let N=Number(x);if(!Number.isSafeInteger(N)||N<=0)throw Error(`${_} must be a positive integer`);if(u!==void 0&&N>u)throw Error(`${_} must be at most ${u}`);return N}function O(_,x,u,N){return pN(_,x,N)??u}function ZQ(_){let x={};for(let u of(_??"").split(",")){let N=u.trim();if(!N)continue;let C=N.indexOf("="),T=C>0?N.slice(0,C).trim():"",K=C>0?N.slice(C+1).trim():"";if(!T||!K){console.warn(`STRIPE_PLAN_PRICE_IDS: ignoring unparseable entry "${N}" \u2014 expected price_xxx=planId`);continue}x[T]=K}return x}function DQ(_,x,u,N){if(x===void 0||x==="")return u;let C=Number(x);if(!Number.isSafeInteger(C)||C<0)throw Error(`${_} must be a non-negative integer`);if(N!==void 0&&C>N)throw Error(`${_} must be at most ${N}`);return C}function kN(_,x){if(_===void 0||_==="")return x;return _==="true"||_==="1"}function uK(_){if(!_)return null;try{let u=new URL(_).hostname.replace(/^\[|\]$/g,"");if(u==="localhost"||u==="127.0.0.1"||u==="::1")return null;return _}catch{return null}}function WQ(_){return _===void 0||_===""||_==="true"||_==="1"}function $_(_,x){return _||x}function mK(_,x){let u=_.home||x.DATA_DIR||x.DECOCMS_HOME||`${UQ()}/deco`,N=_.localMode,C=_.nodeEnv||QQ(x.NODE_ENV),T=x.NATS_URL||"nats://localhost:4222",K={nodeEnv:C,port:O("PORT",_.port||x.PORT,3000,65535),baseUrl:_.baseUrl||x.BASE_URL,publicUrl:$_(x.STUDIO_PUBLIC_URL,x.MESH_PUBLIC_URL),dataDir:u,elevenlabsApiKey:x.ELEVENLABS_API_KEY,elevenlabsVoiceId:x.ELEVENLABS_VOICE_ID||"JBFqnCBsd6RMkjVDRZzb",elevenlabsVoiceModel:x.ELEVENLABS_VOICE_MODEL||"eleven_v4_turbo",databasePgSsl:Q(x.DATABASE_PG_SSL),databasePoolMax:O("DATABASE_POOL_MAX",x.DATABASE_POOL_MAX,5),dbosPoolSize:O("DBOS_POOL_SIZE",x.DBOS_POOL_SIZE,5),betterAuthSecret:x.BETTER_AUTH_SECRET||"",encryptionKey:x.ENCRYPTION_KEY||"",studioJwtSecret:$_(x.STUDIO_JWT_SECRET,x.MESH_JWT_SECRET),localMode:N,disableRateLimit:Q(x.DISABLE_RATE_LIMIT),jiraAllowLocalSiteUrl:Q(x.JIRA_ALLOW_LOCAL_SITE_URL),studioProvisionSecretKey:x.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(x.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((E)=>E.trim().toLowerCase()).filter(Boolean),taskBoardAdminOrgIds:(x.STUDIO_ADMIN_ORG_IDS??"").split(",").map((E)=>E.trim()).filter(Boolean),deploymentAdminToken:x.DEPLOYMENT_ADMIN_TOKEN||void 0,clickhouseUrl:x.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:pN("CLICKHOUSE_MAX_MEMORY_USAGE",x.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:x.MONITORING_OTLP_ENDPOINT,otelServiceName:x.OTEL_SERVICE_NAME||"studio",natsCredsPath:x.NATS_CREDS,configPath:x.CONFIG_PATH||"./config.json",aiGatewayEnabled:Q(x.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:x.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:x.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:x.STRIPE_WEBHOOK_SECRET,stripeSecretKey:x.STRIPE_SECRET_KEY,stripeOrgPriceId:x.STRIPE_ORG_PRICE_ID,stripePlanPriceIds:ZQ(x.STRIPE_PLAN_PRICE_IDS),stripePortalConfigurationId:x.STRIPE_PORTAL_CONFIGURATION_ID,stripeTopupProductId:x.STRIPE_TOPUP_PRODUCT_ID,topupFeePercent:DQ("STUDIO_TOPUP_FEE_PERCENT",x.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:Q(x.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:O("STUDIO_FREE_TASKS",x.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:O("STUDIO_MONTHLY_TASKS",x.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:O("STUDIO_MAX_RUNS_PER_TASK",x.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:Q(x.ENABLE_DECO_IMPORT),hostingControlPlaneGa:Q(x.HOSTING_CONTROL_PLANE_GA),monitorGa:Q(x.MONITOR_GA),plansEnabled:Q(x.STUDIO_PLANS_ENABLED),mcpCacheEnabled:kN(x.MCP_CACHE_ENABLED,C!=="development"),orgFsPublicSetsJson:x.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:Q(x.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:O("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",x.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:O("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",x.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:kN(x.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),sandboxMaxConcurrentHostedRuns:O("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",x.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:x.S3_ENDPOINT,s3Bucket:x.S3_BUCKET,s3Region:x.S3_REGION||"auto",s3AccessKeyId:x.S3_ACCESS_KEY_ID,s3SecretAccessKey:x.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:WQ(x.S3_FORCE_PATH_STYLE),monitoringS3Bucket:x.MONITORING_S3_BUCKET,monitoringS3Endpoint:x.MONITORING_S3_ENDPOINT,monitoringS3Region:x.MONITORING_S3_REGION,monitoringS3AccessKeyId:x.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:x.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:x.MONITORING_S3_PREFIX,duckdbExtensionDirectory:x.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:x.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:pN("DUCKDB_THREADS",x.DUCKDB_THREADS),isCli:!0,noTui:_.noTui===!0,podName:x.POD_NAME||crypto.randomUUID(),dispatchRole:jQ($_(x.STUDIO_DISPATCH_ROLE,x.MESH_DISPATCH_ROLE)),agentSandboxEnabled:Q(x.STUDIO_AGENT_SANDBOX_ENABLED),sandboxStickyHeadRefEnabled:Q(x.SANDBOX_STICKY_HEAD_REF),sandboxFlatGitlabRefsEnabled:Q(x.SANDBOX_FLAT_GITLAB_REFS),taskBoardRerunReusesPrBranch:kN(x.TASK_BOARD_RERUN_REUSES_PR_BRANCH,!0),sandboxReleaseOnRunEndEnabled:Q(x.SANDBOX_RELEASE_ON_RUN_END),sandboxReleaseGraceMs:O("SANDBOX_RELEASE_GRACE_MS",x.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:x.DECO_SUPABASE_URL,decoSupabaseServiceKey:x.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:x.FIRECRAWL_API_KEY,controlplaneRestUrl:x.CONTROLPLANE_REST_URL,controlplaneServiceToken:x.CONTROLPLANE_SERVICE_TOKEN,analyticsDataUrl:x.ANALYTICS_URL,analyticsMasterToken:x.ANALYTICS_MASTER_TOKEN,clickhouseAnalyticsUrl:x.CLICKHOUSE_ANALYTICS_ADDRESS,clickhouseAnalyticsUsername:x.CLICKHOUSE_ANALYTICS_USERNAME||"admin_monitor",clickhouseAnalyticsPassword:x.CLICKHOUSE_ANALYTICS_PASSWORD,oneDollarStatsApiKey:x.ONEDOLLAR_BACKEND_API_KEY,reportsInternalApiUrl:$_(x.REPORTS_INTERNAL_API_URL,x.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:$_(x.REPORTS_INTERNAL_API_KEY,x.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:x.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:x.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:x.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:x.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:x.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:x.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:x.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY};if(K.plansEnabled&&!K.studioJwtSecret)throw Error("STUDIO_PLANS_ENABLED requires an explicit gateway JWT secret. Set STUDIO_JWT_SECRET (or its legacy alias MESH_JWT_SECRET) to the same value as the gateway's MESH_JWT_SECRET. Refusing to fall back to BETTER_AUTH_SECRET: that mismatch 401s every entitlements call, which every feature gate reads as 'no answer' and fails OPEN.");if(K.plansEnabled&&!K.studioProvisionSecretKey)throw Error("STUDIO_PLANS_ENABLED requires STUDIO_PROVISION_SECRET_KEY, set to the same value as the gateway's STUDIO_PROVISION_KEY. Without it the gateway cannot identify this server, falls back to a per-user membership callback that 401s for any user who never completed the gateway OAuth flow, and every feature gate then fails OPEN.");if(K.plansEnabled&&!K.aiGatewayEnabled)throw Error("STUDIO_PLANS_ENABLED requires DECO_AI_GATEWAY_ENABLED=true. Plans are read from the gateway; with it disabled there is no adapter to ask, so every feature gate fails OPEN on both server and client and the paid product is free fleet-wide.");if(K.plansEnabled&&Object.keys(K.stripePlanPriceIds).length>0&&!K.aiGatewayAdminToken)throw Error("STRIPE_PLAN_PRICE_IDS is set but DECO_AI_GATEWAY_ADMIN_TOKEN is not. The Stripe webhook places the paid tier through the gateway's admin API, so without the token a customer is charged and the entitlement "+"is never granted \u2014 and AI_PLAN_SET cannot repair it, it accepts only "+"'free'.");if(K.plansEnabled&&Object.keys(K.stripePlanPriceIds).length>1&&!K.stripePortalConfigurationId)console.warn("STRIPE_PLAN_PRICE_IDS maps more than one plan but STRIPE_PORTAL_CONFIGURATION_ID is unset. An org that already has a subscription cannot change tier: the account's default portal configuration lists only the legacy plans, not the tiers, so Stripe refuses the update flow. First-time checkout is unaffected.");return{settings:K,externalDatabaseUrl:uK(x.DATABASE_URL),externalNatsUrl:uK(T),skipMigrations:_.skipMigrations}}var g_=null;function r(){if(!g_)LQ();return g_}function LQ(){if(g_)return;let _={...process.env},x=mK({port:_.PORT||"3000",home:_.DATA_DIR||_.DECOCMS_HOME||"",localMode:_.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:_.DECO_NO_TUI==="true",vitePort:_.VITE_PORT,baseUrl:_.BASE_URL},_);g_=Object.freeze({...x.settings,databaseUrl:_.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(_.NATS_URL||"nats://localhost:4222").split(",").map((u)=>u.trim()).filter(Boolean)})}import{createContextKey as BQ,metrics as GQ,propagation as yW,ROOT_CONTEXT as OW,SpanStatusCode as SW,trace as fQ}from"@opentelemetry/api";import{logs as yQ,SeverityNumber as vN}from"@opentelemetry/api-logs";import{OTLPLogExporter as nW}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as OQ}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as kW}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as vW}from"@opentelemetry/instrumentation-runtime-node";import{context as YD,propagation as HD,SpanKind as MD,SpanStatusCode as BD}from"@opentelemetry/api";var fD=globalThis.fetch;import{ExportResultCode as qD}from"@opentelemetry/core";import{ExportResultCode as i_}from"@opentelemetry/core";import{mkdir as FQ,rename as RQ,writeFile as YQ}from"fs/promises";import{join as t_}from"path";class c_{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(_){this.basePath=_.basePath,this.flushThreshold=_.flushThreshold??1000,this.maxBufferBytes=_.maxBufferBytes??10485760,this.partitionKey=_.partitionKey;let x=_.flushIntervalMs??60000;if(x>0&&x<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((u)=>{console.error("[NDJSONExporter] Timer flush failed:",u)})},x),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(_){if(this.isShutdown)return Promise.resolve({code:i_.FAILED});for(let x of _){let u=JSON.stringify(x),N=this.partitionKey?this.partitionKey(x):"";this.bufferItems.push({partition:N,json:u}),this.bufferBytes+=Buffer.byteLength(u,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:i_.SUCCESS})).catch((x)=>{return console.error("[NDJSONExporter] Flush failed:",x),{code:i_.FAILED}});return Promise.resolve({code:i_.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let x=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=x,x}async doFlush(){if(this.bufferItems.length===0)return;let _=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let x=new Map;for(let C of _){let T=x.get(C.partition);if(!T)T=[],x.set(C.partition,T);T.push(C.json)}let u=await Promise.allSettled(Array.from(x.entries()).map(([C,T])=>this.writeNDJSON(T,C).then(()=>C))),N=u.find((C)=>C.status==="rejected");if(N){let C=new Set;for(let K of u)if(K.status==="fulfilled")C.add(K.value);let T=_.filter((K)=>!C.has(K.partition));this.bufferItems=T.concat(this.bufferItems),this.bufferBytes=0;for(let K of this.bufferItems)this.bufferBytes+=Buffer.byteLength(K.json,"utf8")+1;throw N.reason}}async writeNDJSON(_,x){let u=new Date,N=[String(u.getUTCFullYear()),String(u.getUTCMonth()+1).padStart(2,"0"),String(u.getUTCDate()).padStart(2,"0"),String(u.getUTCHours()).padStart(2,"0")],C=x?t_(this.basePath,x,...N):t_(this.basePath,...N);if(!this.knownDirs.has(C))await FQ(C,{recursive:!0,mode:448}),this.knownDirs.add(C);let T=`${crypto.randomUUID()}.ndjson`,K=t_(C,`.${T}.tmp`),E=t_(C,T),z=_.join(`
1995
+ `.execute(_)}var $Q={"001-initial-schema":Wx,"002-organization-settings":Lx,"003-connection-schema-align":Fx,"004-remove-models-binding":Rx,"005-connection-configuration":Yx,"006-add-views-to-settings":Hx,"007-monitoring-logs":Mx,"008-event-bus":Bx,"009-drop-audit-logs":Gx,"010-gateways":fx,"011-gateway-icon":yx,"012-gateway-tool-selection-mode":Ox,"013-monitoring-user-agent-gateway":Sx,"014-gateway-resources-prompts":Ax,"015-monitoring-properties":Ix,"016-downstream-token-client-info":nx,"017-downstream-token-remove-userid":wx,"018-drop-gateway-tool-selection-strategy":Vx,"019-remove-gateway-is-default":kx,"020-enabled-plugins":px,"021-threads":vx,"022-rename-gateway-to-virtual-mcp":qx,"023-optimize-thread-indexes":gx,"024-consolidate-virtual-mcp":ix,"025-add-monitoring-virtual-mcp-id":tx,"026-restrict-child-connection-delete":cx,"027-update-management-mcp-url":ox,"028-update-management-mcp-to-self":rx,"029-add-updated-by-to-connections":ex,"030-member-tags":lx,"031-add-dependency-mode":dx,"032-projects":sx,"033-thread-status":bx,"034-monitoring-dashboards":_u,"035-project-connections":xu,"036-update-registry-url":uu,"037-ai-provider-keys":mu,"038-oauth-pkce-states":Cu,"039-automations":Nu,"040-replace-next-run-at-with-last-run-at":Tu,"041-ai-provider-keys-unique-constraint":Ku,"042-rename-mesh-mcp-to-cms-mcp":Eu,"043-rename-cms-mcp-to-deco-cms":zu,"044-drop-connections-tools-column":Pu,"045-thread-context-start-message":$u,"046-remove-object-storage-plugin":Xu,"047-add-next-run-at":ju,"048-merge-projects-agents":Qu,"049-remove-org-admin-projects":Zu,"050-durable-agent-runs":Du,"051-org-sso":Lu,"052-thread-agent-ids":Fu,"053-registry-config":Ru,"054-connection-slug":Hu,"055-spaces":Mu,"056-automation-project-scope":Bu,"057-thread-virtual-mcp-id":Gu,"058-trigger-callback-tokens":fu,"059-kv":yu,"060-member-index":Ou,"061-downstream-token-connection-index":Su,"062-private-registry":Au,"063-event-subscriptions-enabled-boolean":Iu,"064-brand-context":nu,"065-organization-domains":wu,"066-brand-context-structured":Vu,"067-threads-metadata":ku,"068-threads-branch":pu,"069-sandbox-runner-state":vu,"070-model-categories":qu,"071-default-home-agents":gu,"072-ai-provider-key-preset-id":iu,"073-backfill-basic-usage-roles":tu,"074-sandbox-runner-state-handle-nonunique":cu,"075-thread-inflight-async-jobs":hu,"076-automations-drop-agent-json":ou,"077-tier-only-model-selection":ru,"078-automation-tool-call-kind":eu,"079-strip-legacy-freestyle-vm-map-entries":lu,"080-async-research-jobs":du,"081-async-research-jobs-result-content":su,"082-secrets":bu,"083-thread-run-locally":_m,"084-drop-host-sandbox-rows":xm,"085-rename-runner-kind":um,"086-thread-pins-and-vm-map-rekey":mm,"087-fix-vm-map-rekey":Cm,"088-purge-cli-activate-keys":Nm,"089-rename-remote-user-to-desktop":Tm,"090-automation-webhook-triggers":Km,"091-organization-domains-allow-multi":Em,"092-sandbox-naming-uniformization":zm,"093-backfill-global-search-basic-usage":Pm,"094-org-file-configs":Um,"095-remove-automation-tool-call-kind":Xm,"096-org-file-configs-public-url-base":jm,"097-drop-local-docker-sandbox-state":Qm,"098-thread-message-parts":Zm,"099-run-fence":Dm,"100-link-transport":Wm,"101-cancel-requested-at":Lm,"102-observational-agent":Fm,"103-revert-observational-agent":Rm,"104-agent-sandbox-provider-kind":Hm,"105-org-fs":Mm,"106-automation-tools":Bm,"107-org-fs-public-org":Gm,"108-automation-max-agent-steps":fm,"109-thread-message-parts-per-message-seq":ym,"110-backfill-ghs-token-expiry":Om,"111-org-fs-thread-id":Sm,"112-org-file-configs-credential-type":Am,"113-thread-failure-reason":Im,"114-run-acked-seq":nm,"115-thread-projected-seq":wm,"116-org-sites":Vm,"117-org-file-configs-site-slug":km,"118-organization-domains-multi-verify":pm,"119-organization-join-requests":vm,"120-org-fs-read-public":qm,"121-org-fs-share-password":gm,"122-split-web-research-tier":cm,"123-connection-credential-vault":hm,"124-drop-thread-projected-seq":om,"125-github-child-single-parent":am,"126-task-board":em,"127-task-board-due-date":lm,"128-reports-only":dm,"129-task-board-assigned-by":sm,"130-task-board-thread-id":bm,"131-task-board-thread-link-cascade":_C,"132-task-board-item-prs":xC,"133-dedupe-duplicate-members":uC,"134-drop-task-board-enabled":mC,"135-task-board-item-fk-cascade":CC,"136-task-board-import-idempotency":NC,"137-agent-sandbox-runner-state":TC,"138-agent-sandbox-sessions":KC,"139-organization-billing":EC,"140-seat-change-log":zC,"141-benefits-sync-pending":PC,"142-stripe-event-watermark":$C,"143-armed-report-url":UC,"144-benefits-pending-index":XC,"145-user-model-preferences":jC,"146-organization-main-agent":JC,"147-drop-agent-sandbox-tables":QC,"148-org-flags":ZC,"149-task-board-item-sort-order":DC,"150-task-board-activity":WC,"151-task-board-tags":FC,"152-repair-connection-slug":YC,"153-task-board-latest-assistant-part-index":HC,"154-task-board-qa-activity":BC,"155-task-board-review-claims":GC,"156-task-board-conflict-activity":yC,"157-drop-seat-billing":OC,"158-drop-github-child-single-parent":SC,"159-task-board-comments":AC,"160-task-quota-billing":IC,"161-task-quota-claim-state":wC,"162-claude-subscriptions":VC,"163-task-board-item-dismissed":kC,"164-per-org-task-quota":pC,"165-task-board-pending-review-index":vC,"166-task-board-last-swept-at":qC,"167-task-board-run-retry":gC,"168-org-repo-sync":tC,"169-task-board-merge-failed-activity":hC,"170-task-board-item-repo":oC,"171-jira-integration":aC,"172-task-board-item-key-seq":rC,"173-thread-github-repo-connection-index":eC,"174-thread-message-parts-persisted-at":dC,"175-task-board-sprints":sC,"176-task-board-done-sweep-index":bC,"177-notifications":_N,"178-jira-status-mapping-array":xN,"179-notification-mentioned":mN,"180-task-board-item-type":NN,"181-task-board-item-type-required":TN,"182-task-board-sprints-entities":KN,"183-drop-jira-jql-filter":EN,"184-jira-rescan-after-scope-change":zN,"185-jira-rescan-existing-cards":PN,"186-jira-rescan-pending-flag":UN,"187-task-board-comment-thread":XN,"188-invitation-auto-accept":jN,"189-task-board-column-automations":QN,"190-task-board-review-cycle-started-at":ZN,"191-task-board-columns":DN,"192-task-board-verdict-nudge-activity":LN,"193-task-board-status-column-fk":FN,"194-jira-link-sprint":RN,"195-task-board-sprint-activity":HN,"196-task-board-column-tracker-statuses":MN,"197-task-board-prompts":BN,"198-task-board-external-url":GN,"199-drop-jira-mirror-and-org-columns":fN,"200-jira-run-trigger":yN,"201-organization-notices":ON,"202-redact-base64-thread-parts":AN,"203-task-board-preview-routes":IN,"204-git-provider-accounts-and-repositories":nN,"205-repository-references":wN,"206-repository-consumers":Dx,"207-task-board-prs-repo-idx":Zx,"208-github-connect-flows":Qx,"209-github-installation-authorization":Jx,"210-github-repository-authorization":Kx,"211-user-fs-org":Tx,"212-coding-agent-mcp-excluded":Ex,"213-bitbucket-git-provider":zx,"214-connections-sanitized-id-idx":ux,"215-commerce-discovery-repository":mx,"216-github-cli-auth":Nx,"217-experiments":Px,"218-thread-message-parts-error-idx":$x,"219-task-board-duplicate-reported-activity":Xx,"220-jira-automation-continue-pr":jx,"221-remove-private-registry":o_,"222-org-git-credentials":a_,"223-drop-org-main-agent-id":xx,"224-repository-sandbox-image":r_,"225-thread-analytics-indexes":l_,"226-deco-score-names":s_,"227-task-board-finding-resolved-activity":_x},VN=$Q;import{getMigrations as tQ}from"better-auth/db";import{sso as cQ}from"@better-auth/sso";import{organization as hQ}from"@decocms/better-auth/plugins";import{admin as oQ,apiKey as aQ,jwt as rQ,magicLink as eQ,mcp as lQ,openAPI as dQ}from"better-auth/plugins";import{emailOTP as sQ}from"better-auth/plugins/email-otp";import{Kysely as VQ,PostgresDialect as UK}from"kysely";import{Pool as XK}from"pg";import{homedir as UQ}from"os";var XQ=new Set(["all","worker","api"]);function jQ(_){let x=(_??"").trim();return XQ.has(x)?x:"all"}var JQ=new Set(["production","development","test"]);function QQ(_){let x=(_??"").trim();return JQ.has(x)?x:"development"}function Z(_){return _==="true"||_==="1"}function pN(_,x,u){if(x===void 0||x==="")return;let N=Number(x);if(!Number.isSafeInteger(N)||N<=0)throw Error(`${_} must be a positive integer`);if(u!==void 0&&N>u)throw Error(`${_} must be at most ${u}`);return N}function O(_,x,u,N){return pN(_,x,N)??u}function ZQ(_){let x={};for(let u of(_??"").split(",")){let N=u.trim();if(!N)continue;let C=N.indexOf("="),T=C>0?N.slice(0,C).trim():"",K=C>0?N.slice(C+1).trim():"";if(!T||!K){console.warn(`STRIPE_PLAN_PRICE_IDS: ignoring unparseable entry "${N}" \u2014 expected price_xxx=planId`);continue}x[T]=K}return x}function DQ(_,x,u,N){if(x===void 0||x==="")return u;let C=Number(x);if(!Number.isSafeInteger(C)||C<0)throw Error(`${_} must be a non-negative integer`);if(N!==void 0&&C>N)throw Error(`${_} must be at most ${N}`);return C}function kN(_,x){if(_===void 0||_==="")return x;return _==="true"||_==="1"}function uK(_){if(!_)return null;try{let u=new URL(_).hostname.replace(/^\[|\]$/g,"");if(u==="localhost"||u==="127.0.0.1"||u==="::1")return null;return _}catch{return null}}function WQ(_){return _===void 0||_===""||_==="true"||_==="1"}function $_(_,x){return _||x}function mK(_,x){let u=_.home||x.DATA_DIR||x.DECOCMS_HOME||`${UQ()}/deco`,N=_.localMode,C=_.nodeEnv||QQ(x.NODE_ENV),T=x.NATS_URL||"nats://localhost:4222",K={nodeEnv:C,port:O("PORT",_.port||x.PORT,3000,65535),baseUrl:_.baseUrl||x.BASE_URL,publicUrl:$_(x.STUDIO_PUBLIC_URL,x.MESH_PUBLIC_URL),dataDir:u,elevenlabsApiKey:x.ELEVENLABS_API_KEY,elevenlabsVoiceId:x.ELEVENLABS_VOICE_ID||"JBFqnCBsd6RMkjVDRZzb",elevenlabsVoiceModel:x.ELEVENLABS_VOICE_MODEL||"eleven_v4_turbo",databasePgSsl:Z(x.DATABASE_PG_SSL),databasePoolMax:O("DATABASE_POOL_MAX",x.DATABASE_POOL_MAX,5),dbosPoolSize:O("DBOS_POOL_SIZE",x.DBOS_POOL_SIZE,5),betterAuthSecret:x.BETTER_AUTH_SECRET||"",encryptionKey:x.ENCRYPTION_KEY||"",studioJwtSecret:$_(x.STUDIO_JWT_SECRET,x.MESH_JWT_SECRET),localMode:N,disableRateLimit:Z(x.DISABLE_RATE_LIMIT),jiraAllowLocalSiteUrl:Z(x.JIRA_ALLOW_LOCAL_SITE_URL),studioProvisionSecretKey:x.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(x.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((E)=>E.trim().toLowerCase()).filter(Boolean),taskBoardAdminOrgIds:(x.STUDIO_ADMIN_ORG_IDS??"").split(",").map((E)=>E.trim()).filter(Boolean),deploymentAdminToken:x.DEPLOYMENT_ADMIN_TOKEN||void 0,clickhouseUrl:x.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:pN("CLICKHOUSE_MAX_MEMORY_USAGE",x.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:x.MONITORING_OTLP_ENDPOINT,otelServiceName:x.OTEL_SERVICE_NAME||"studio",natsCredsPath:x.NATS_CREDS,configPath:x.CONFIG_PATH||"./config.json",aiGatewayEnabled:Z(x.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:x.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:x.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:x.STRIPE_WEBHOOK_SECRET,stripeSecretKey:x.STRIPE_SECRET_KEY,stripeOrgPriceId:x.STRIPE_ORG_PRICE_ID,stripePlanPriceIds:ZQ(x.STRIPE_PLAN_PRICE_IDS),stripePortalConfigurationId:x.STRIPE_PORTAL_CONFIGURATION_ID,stripeTopupProductId:x.STRIPE_TOPUP_PRODUCT_ID,topupFeePercent:DQ("STUDIO_TOPUP_FEE_PERCENT",x.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:Z(x.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:O("STUDIO_FREE_TASKS",x.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:O("STUDIO_MONTHLY_TASKS",x.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:O("STUDIO_MAX_RUNS_PER_TASK",x.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:Z(x.ENABLE_DECO_IMPORT),hostingControlPlaneGa:Z(x.HOSTING_CONTROL_PLANE_GA),monitorGa:Z(x.MONITOR_GA),plansEnabled:Z(x.STUDIO_PLANS_ENABLED),mcpCacheEnabled:kN(x.MCP_CACHE_ENABLED,C!=="development"),orgFsPublicSetsJson:x.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:Z(x.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:O("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",x.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:O("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",x.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:kN(x.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),sandboxMaxConcurrentHostedRuns:O("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",x.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:x.S3_ENDPOINT,s3Bucket:x.S3_BUCKET,s3Region:x.S3_REGION||"auto",s3AccessKeyId:x.S3_ACCESS_KEY_ID,s3SecretAccessKey:x.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:WQ(x.S3_FORCE_PATH_STYLE),monitoringS3Bucket:x.MONITORING_S3_BUCKET,monitoringS3Endpoint:x.MONITORING_S3_ENDPOINT,monitoringS3Region:x.MONITORING_S3_REGION,monitoringS3AccessKeyId:x.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:x.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:x.MONITORING_S3_PREFIX,duckdbExtensionDirectory:x.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:x.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:pN("DUCKDB_THREADS",x.DUCKDB_THREADS),isCli:!0,noTui:_.noTui===!0,podName:x.POD_NAME||crypto.randomUUID(),dispatchRole:jQ($_(x.STUDIO_DISPATCH_ROLE,x.MESH_DISPATCH_ROLE)),agentSandboxEnabled:Z(x.STUDIO_AGENT_SANDBOX_ENABLED),sandboxStickyHeadRefEnabled:Z(x.SANDBOX_STICKY_HEAD_REF),taskBoardRerunReusesPrBranch:kN(x.TASK_BOARD_RERUN_REUSES_PR_BRANCH,!0),sandboxReleaseOnRunEndEnabled:Z(x.SANDBOX_RELEASE_ON_RUN_END),sandboxReleaseGraceMs:O("SANDBOX_RELEASE_GRACE_MS",x.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:x.DECO_SUPABASE_URL,decoSupabaseServiceKey:x.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:x.FIRECRAWL_API_KEY,controlplaneRestUrl:x.CONTROLPLANE_REST_URL,controlplaneServiceToken:x.CONTROLPLANE_SERVICE_TOKEN,analyticsDataUrl:x.ANALYTICS_URL,analyticsMasterToken:x.ANALYTICS_MASTER_TOKEN,clickhouseAnalyticsUrl:x.CLICKHOUSE_ANALYTICS_ADDRESS,clickhouseAnalyticsUsername:x.CLICKHOUSE_ANALYTICS_USERNAME||"admin_monitor",clickhouseAnalyticsPassword:x.CLICKHOUSE_ANALYTICS_PASSWORD,oneDollarStatsApiKey:x.ONEDOLLAR_BACKEND_API_KEY,reportsInternalApiUrl:$_(x.REPORTS_INTERNAL_API_URL,x.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:$_(x.REPORTS_INTERNAL_API_KEY,x.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:x.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:x.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:x.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:x.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:x.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:x.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:x.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY};if(K.plansEnabled&&!K.studioJwtSecret)throw Error("STUDIO_PLANS_ENABLED requires an explicit gateway JWT secret. Set STUDIO_JWT_SECRET (or its legacy alias MESH_JWT_SECRET) to the same value as the gateway's MESH_JWT_SECRET. Refusing to fall back to BETTER_AUTH_SECRET: that mismatch 401s every entitlements call, which every feature gate reads as 'no answer' and fails OPEN.");if(K.plansEnabled&&!K.studioProvisionSecretKey)throw Error("STUDIO_PLANS_ENABLED requires STUDIO_PROVISION_SECRET_KEY, set to the same value as the gateway's STUDIO_PROVISION_KEY. Without it the gateway cannot identify this server, falls back to a per-user membership callback that 401s for any user who never completed the gateway OAuth flow, and every feature gate then fails OPEN.");if(K.plansEnabled&&!K.aiGatewayEnabled)throw Error("STUDIO_PLANS_ENABLED requires DECO_AI_GATEWAY_ENABLED=true. Plans are read from the gateway; with it disabled there is no adapter to ask, so every feature gate fails OPEN on both server and client and the paid product is free fleet-wide.");if(K.plansEnabled&&Object.keys(K.stripePlanPriceIds).length>0&&!K.aiGatewayAdminToken)throw Error("STRIPE_PLAN_PRICE_IDS is set but DECO_AI_GATEWAY_ADMIN_TOKEN is not. The Stripe webhook places the paid tier through the gateway's admin API, so without the token a customer is charged and the entitlement "+"is never granted \u2014 and AI_PLAN_SET cannot repair it, it accepts only "+"'free'.");if(K.plansEnabled&&Object.keys(K.stripePlanPriceIds).length>1&&!K.stripePortalConfigurationId)console.warn("STRIPE_PLAN_PRICE_IDS maps more than one plan but STRIPE_PORTAL_CONFIGURATION_ID is unset. An org that already has a subscription cannot change tier: the account's default portal configuration lists only the legacy plans, not the tiers, so Stripe refuses the update flow. First-time checkout is unaffected.");return{settings:K,externalDatabaseUrl:uK(x.DATABASE_URL),externalNatsUrl:uK(T),skipMigrations:_.skipMigrations}}var g_=null;function r(){if(!g_)LQ();return g_}function LQ(){if(g_)return;let _={...process.env},x=mK({port:_.PORT||"3000",home:_.DATA_DIR||_.DECOCMS_HOME||"",localMode:_.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:_.DECO_NO_TUI==="true",vitePort:_.VITE_PORT,baseUrl:_.BASE_URL},_);g_=Object.freeze({...x.settings,databaseUrl:_.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(_.NATS_URL||"nats://localhost:4222").split(",").map((u)=>u.trim()).filter(Boolean)})}import{createContextKey as BQ,metrics as GQ,propagation as yW,ROOT_CONTEXT as OW,SpanStatusCode as SW,trace as fQ}from"@opentelemetry/api";import{logs as yQ,SeverityNumber as vN}from"@opentelemetry/api-logs";import{OTLPLogExporter as nW}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as OQ}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as kW}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as vW}from"@opentelemetry/instrumentation-runtime-node";import{context as YD,propagation as HD,SpanKind as MD,SpanStatusCode as BD}from"@opentelemetry/api";var fD=globalThis.fetch;import{ExportResultCode as qD}from"@opentelemetry/core";import{ExportResultCode as i_}from"@opentelemetry/core";import{mkdir as FQ,rename as RQ,writeFile as YQ}from"fs/promises";import{join as t_}from"path";class c_{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(_){this.basePath=_.basePath,this.flushThreshold=_.flushThreshold??1000,this.maxBufferBytes=_.maxBufferBytes??10485760,this.partitionKey=_.partitionKey;let x=_.flushIntervalMs??60000;if(x>0&&x<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((u)=>{console.error("[NDJSONExporter] Timer flush failed:",u)})},x),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(_){if(this.isShutdown)return Promise.resolve({code:i_.FAILED});for(let x of _){let u=JSON.stringify(x),N=this.partitionKey?this.partitionKey(x):"";this.bufferItems.push({partition:N,json:u}),this.bufferBytes+=Buffer.byteLength(u,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:i_.SUCCESS})).catch((x)=>{return console.error("[NDJSONExporter] Flush failed:",x),{code:i_.FAILED}});return Promise.resolve({code:i_.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let x=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=x,x}async doFlush(){if(this.bufferItems.length===0)return;let _=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let x=new Map;for(let C of _){let T=x.get(C.partition);if(!T)T=[],x.set(C.partition,T);T.push(C.json)}let u=await Promise.allSettled(Array.from(x.entries()).map(([C,T])=>this.writeNDJSON(T,C).then(()=>C))),N=u.find((C)=>C.status==="rejected");if(N){let C=new Set;for(let K of u)if(K.status==="fulfilled")C.add(K.value);let T=_.filter((K)=>!C.has(K.partition));this.bufferItems=T.concat(this.bufferItems),this.bufferBytes=0;for(let K of this.bufferItems)this.bufferBytes+=Buffer.byteLength(K.json,"utf8")+1;throw N.reason}}async writeNDJSON(_,x){let u=new Date,N=[String(u.getUTCFullYear()),String(u.getUTCMonth()+1).padStart(2,"0"),String(u.getUTCDate()).padStart(2,"0"),String(u.getUTCHours()).padStart(2,"0")],C=x?t_(this.basePath,x,...N):t_(this.basePath,...N);if(!this.knownDirs.has(C))await FQ(C,{recursive:!0,mode:448}),this.knownDirs.add(C);let T=`${crypto.randomUUID()}.ndjson`,K=t_(C,`.${T}.tmp`),E=t_(C,T),z=_.join(`
1996
1996
  `)+`
1997
1997
  `;await YQ(K,z,{mode:384}),await RQ(K,E)}}import{ExportResultCode as hD}from"@opentelemetry/core";import{AggregationTemporality as aD,DataPointType as rD}from"@opentelemetry/sdk-metrics";import{ExportResultCode as _W}from"@opentelemetry/core";var CW=Buffer.byteLength("... [TRUNCATED]","utf8");import{BatchLogRecordProcessor as rW,LoggerProvider as eW}from"@opentelemetry/sdk-logs";import{detectResources as dW,envDetector as sW,hostDetector as bW,osDetector as _7,processDetector as x7,resourceFromAttributes as u7}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as C7}from"@opentelemetry/sdk-metrics";import{NOOP_LOGGER as KW}from"@opentelemetry/api-logs";import{NodeSDK as K7}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as z7,SamplingDecision as e}from"@opentelemetry/sdk-trace-base";import{SpanStatusCode as UW}from"@opentelemetry/api";var SQ="__d",AQ=BQ("Current request"),IQ=1;var NK=(_)=>{let u=new URL(_.url).searchParams.get(SQ);if(u==="")return crypto.randomUUID();if(!u)u=_.headers.get("x-trace-debug-id");return u};class TK{inner;constructor(_){this.inner=_}shouldSample(_,x,u,N,C,T){let K=_.getValue(AQ);if(!K){if(this.inner)return this.inner.shouldSample(_,x,u,N,C,T);return{decision:e.RECORD_AND_SAMPLED}}let E=NK(K);if(E)return{decision:e.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":E}};if(this.inner){let z=this.inner.shouldSample(_,x,u,N,C,T);if(z.decision===e.RECORD_AND_SAMPLED){let $=crypto.randomUUID();z.attributes={...z.attributes??{},"trace.debug.id":$}}return z}return{decision:e.NOT_RECORD}}toString(){return"DebugSampler"}}class KK{ratio;constructor(_){this.ratio=_}shouldSample(){if(Math.random()<this.ratio)return{decision:e.RECORD_AND_SAMPLED};return{decision:e.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}var $7=new OQ({preventServerStart:!0}),U7=new TK(new KK(IQ));var CK=fQ.getTracer("studio","1.0.0"),U_=GQ.getMeter("studio","1.0.0"),nQ=yQ.getLogger("studio","1.0.0"),qN=(_,x,u)=>{let N={},C=u,T=u[u.length-1];if(T!==null&&typeof T==="object"&&!Array.isArray(T)&&!(T instanceof Error)&&Object.getPrototypeOf(T)===Object.prototype)N=T,C=u.slice(0,-1);let K=C.map((E)=>{if(E instanceof Error)return`${E.name}: ${E.message}`;if(typeof E==="object")try{return JSON.stringify(E)}catch{return"[Object]"}return String(E)}).join(" ");nQ.emit({severityNumber:_,severityText:x,body:K,attributes:{"log.source":"console",...N}})},gN={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(..._)=>{qN(vN.ERROR,"ERROR",_),gN.error(..._)};console.warn=(..._)=>{qN(vN.WARN,"WARN",_),gN.warn(..._)};console.debug=(..._)=>{qN(vN.DEBUG,"DEBUG",_),gN.debug(..._)};var iN,EK=0,tN=500;function wQ(){if(iN)return;let _=performance.now()+tN;iN=setInterval(()=>{let x=performance.now();EK=Math.max(0,x-_),_=x+tN},tN),iN.unref?.()}function zK(){return wQ(),EK}var kQ=()=>U_.createHistogram("db.query.duration",{description:"Database query execution duration in milliseconds",unit:"ms"}),PK=()=>U_.createHistogram("db.pool.acquire.duration",{description:"Time spent waiting to acquire a connection from the pool",unit:"ms"}),$K=400,pQ=100,vQ=(_)=>(x)=>{let u={"db.statement":x.query.sql,"db.status":x.level==="error"?"error":"success"};if(x.queryDurationMillis>$K){let N=zK(),C=N>$K/2;console.error(C?"Slow query measurement \u2014 likely event-loop lag, not slow SQL:":"Slow query detected:",{durationMs:x.queryDurationMillis,eventLoopLagMs:Math.round(N),sql:x.query.sql,pool:{total:_.totalCount,idle:_.idleCount,waiting:_.waitingCount,max:h_()}})}if(kQ().record(x.queryDurationMillis,u),x.level==="error")console.error("Query failed:",{durationMs:x.queryDurationMillis,error:x.error,sql:x.query.sql})};function qQ(_){let x=_.connect.bind(_);return _.connect=(u)=>{if(typeof u==="function")return x(u);let N=performance.now(),C=h_(),T=_.idleCount===0&&_.totalCount>=C,K=_.idleCount;return x().then((E)=>{let z=performance.now()-N;if(PK().record(z,{"db.pool.outcome":T?"contended":"available"}),z>pQ)if(T)console.error("Slow db pool acquire \u2014 pool saturated:",{waitMs:z,total:_.totalCount,idle:_.idleCount,waiting:_.waitingCount,max:C});else console.warn("Slow db pool acquire \u2014 event-loop lag (not pool):",{waitMs:z,idleAtStart:K,total:_.totalCount,max:C});return E},(E)=>{throw PK().record(performance.now()-N,{"db.pool.outcome":"error"}),E})},_}var jK={keepAlive:!0,keepAliveInitialDelayMillis:1e4,idleTimeoutMillis:300000,connectionTimeoutMillis:30000,allowExitOnIdle:!0};function JK(){try{return r().databasePgSsl}catch{return!1}}function h_(){try{return r().databasePoolMax}catch{return 10}}function gQ(_){let x=qQ(new XK({connectionString:_,max:h_(),ssl:JK(),...jK})),u=new UK({pool:x});return{type:"postgres",db:new VQ({dialect:u,log:vQ(x)}),pool:x}}function j_(){return r().databaseUrl}function QK(_){let x=_||j_();return new UK({pool:new XK({connectionString:x,max:h_(),ssl:JK(),...jK})})}function iQ(_){let x=_||j_();return gQ(x)}async function ZK(_){if(await _.db.destroy(),!_.pool.ended)await _.pool.end();if(_===X_)X_=null}var X_=null;function cN(){if(!X_)X_=iQ(j_());return X_}async function DK(_){let u={database:QK(_||j_()),plugins:[hQ({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),oQ(),aQ(),rQ(),dQ(),lQ({loginPage:"/login"}),cQ(),eQ({sendMagicLink:async()=>{}}),sQ({sendVerificationOTP:async()=>{}})]},{toBeAdded:N,toBeCreated:C,runMigrations:T}=await tQ(u);if(!N.length&&!C.length)return"up to date";return await T(),`${C.length+N.length} table(s) migrated`}async function LK(_,x){return(await l`
1998
1998
  SELECT table_name FROM information_schema.tables