decocms 4.535.2 → 4.535.3

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 (393) hide show
  1. package/dist/client/assets/{ActiveShapeUtils-CDR5cIv8.js → ActiveShapeUtils-n1VzBM05.js} +1 -1
  2. package/dist/client/assets/{AlertCircle-aFc0Y1Nw.js → AlertCircle-h4wkFXhr.js} +1 -1
  3. package/dist/client/assets/{AreaChart-BL8RHB4F.js → AreaChart-DD6ElqDk.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-B4V3HvD7.js → ArrowLeft-DGdRhjvP.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-CUOoY7to.js → ArrowUp-CQpR4KTR.js} +1 -1
  6. package/dist/client/assets/{BarChart-DppWoOXo.js → BarChart-Di3cGWMb.js} +1 -1
  7. package/dist/client/assets/{Building02-BFbAAk3B.js → Building02-CpaJ_8nf.js} +1 -1
  8. package/dist/client/assets/{CartesianChart-HyaGpa-j.js → CartesianChart-m7D0ek0A.js} +1 -1
  9. package/dist/client/assets/{CategoricalChart-D8XWTNa8.js → CategoricalChart-DOyNxqsY.js} +1 -1
  10. package/dist/client/assets/{CheckCircle-DlVRpmKe.js → CheckCircle-BtjeVSI0.js} +1 -1
  11. package/dist/client/assets/{ChevronSelectorVertical-sTFwDpoF.js → ChevronSelectorVertical-CSeVJ5Wr.js} +1 -1
  12. package/dist/client/assets/{ChevronUp-BVvI38XG.js → ChevronUp-B_A-Aj1q.js} +1 -1
  13. package/dist/client/assets/{Copy01-CzScZaHL.js → Copy01-Dmv8RATM.js} +1 -1
  14. package/dist/client/assets/{CreditCard01-BLVhUw2n.js → CreditCard01-C2WG-40P.js} +1 -1
  15. package/dist/client/assets/{DotsVertical-ziuRVDr4.js → DotsVertical-V6LcLL3o.js} +1 -1
  16. package/dist/client/assets/{ErrorBarContext-BFtSbKQs.js → ErrorBarContext-CxMDhOaI.js} +1 -1
  17. package/dist/client/assets/{Globe04-BAxLQ7vf.js → Globe04-DIXMg7de.js} +1 -1
  18. package/dist/client/assets/{Image01-DFj2MHb1.js → Image01-Be1Fmo7b.js} +1 -1
  19. package/dist/client/assets/{Key01-DmX6-6Ny.js → Key01-B4ypjFEb.js} +1 -1
  20. package/dist/client/assets/{Link01-CvodJNHb.js → Link01-BFhJluLv.js} +1 -1
  21. package/dist/client/assets/{LinkBroken01-TPUim_Vo.js → LinkBroken01-ByhYGCmE.js} +1 -1
  22. package/dist/client/assets/{Minus-CQxkpLoY.js → Minus-WbHh7z_4.js} +1 -1
  23. package/dist/client/assets/{Monitor01-DH_D-idP.js → Monitor01-PpsDf0ug.js} +1 -1
  24. package/dist/client/assets/{Play-Dudpy-ba.js → Play-CVvTSMMO.js} +1 -1
  25. package/dist/client/assets/{Plus-Dzr9ESX-.js → Plus-KFhoznQ0.js} +1 -1
  26. package/dist/client/assets/{ReferenceLine-p1sZnjAx.js → ReferenceLine-B78PpcLg.js} +1 -1
  27. package/dist/client/assets/{SearchMd-oixIfKAh.js → SearchMd-CvSxd4Re.js} +1 -1
  28. package/dist/client/assets/{Sector-DCEgkV4d.js → Sector-D1mbVTe2.js} +1 -1
  29. package/dist/client/assets/{ShoppingBag01-D06WkjOb.js → ShoppingBag01-DcvDPkmY.js} +1 -1
  30. package/dist/client/assets/{Sun-F5GrVV08.js → Sun-DNxRxT-Q.js} +1 -1
  31. package/dist/client/assets/{SwitchHorizontal01-BmzvIjLC.js → SwitchHorizontal01-B0wuTS4D.js} +1 -1
  32. package/dist/client/assets/{Tool01-nplovCkN.js → Tool01-BNfLt_2s.js} +1 -1
  33. package/dist/client/assets/{Trash01-DERnYCWh.js → Trash01-CXmmcxbt.js} +1 -1
  34. package/dist/client/assets/{Upload01-HMv8LaZ3.js → Upload01-WhzmZATn.js} +1 -1
  35. package/dist/client/assets/{UserSquare-De6W8qV_.js → UserSquare-DGd5-FO6.js} +1 -1
  36. package/dist/client/assets/{Users01-mOjjkbyN.js → Users01-Dt3KhwkI.js} +1 -1
  37. package/dist/client/assets/{XClose-DlDfGuQd.js → XClose-CB-WGW7l.js} +1 -1
  38. package/dist/client/assets/{ZoomOut-CZi_Jv_H.js → ZoomOut-B5qWceNj.js} +1 -1
  39. package/dist/client/assets/{access-gate-DGPKhcsY.js → access-gate-BJQUokDS.js} +1 -1
  40. package/dist/client/assets/{add-connection-dialog-C9RqnWwO.js → add-connection-dialog-Cs4OeDHH.js} +1 -1
  41. package/dist/client/assets/{agent-analytics-CROGNJfS.js → agent-analytics-DFZMXpjH.js} +1 -1
  42. package/dist/client/assets/agent-app-BsZV6cJx.js +1 -0
  43. package/dist/client/assets/{agent-assets-CWrYk2AT.js → agent-assets-CPRDkXpu.js} +1 -1
  44. package/dist/client/assets/{agent-automation-CEFnsh9H.js → agent-automation-D5gWWNBf.js} +1 -1
  45. package/dist/client/assets/{agent-automations-BRRH5z6Q.js → agent-automations-CtPP7ZPK.js} +1 -1
  46. package/dist/client/assets/{agent-calendar-unCP6cj4.js → agent-calendar-CcUfM1d1.js} +1 -1
  47. package/dist/client/assets/{agent-connect-sources-cy9SdEPd.js → agent-connect-sources-CO_cfeoL.js} +1 -1
  48. package/dist/client/assets/agent-deck-wjO8UpQF.js +1 -0
  49. package/dist/client/assets/{agent-e2e-BMHAEtXr.js → agent-e2e-BLPErqxM.js} +1 -1
  50. package/dist/client/assets/agent-experiments-CWNwZjRU.js +1 -0
  51. package/dist/client/assets/{agent-file-D7jOR2vn.js → agent-file-BxVBU84L.js} +1 -1
  52. package/dist/client/assets/{agent-hosting-BdcvUt1Z.js → agent-hosting-D45W6Kt5.js} +1 -1
  53. package/dist/client/assets/{agent-icon-C913Kovt.js → agent-icon-Gi86Du82.js} +1 -1
  54. package/dist/client/assets/agent-library-DRij_Rpi.js +1 -0
  55. package/dist/client/assets/agent-library-file-CDc-K0cK.js +1 -0
  56. package/dist/client/assets/agent-monitor-Bz-_nJlV.js +1 -0
  57. package/dist/client/assets/{agent-overview-kwoxJFjY.js → agent-overview-j0wNLqo3.js} +1 -1
  58. package/dist/client/assets/{agent-releases-CPLYJ7fX.js → agent-releases-DiQXWWGl.js} +1 -1
  59. package/dist/client/assets/agent-settings-CjUEm83I.js +1 -0
  60. package/dist/client/assets/{agent-site-editor-DxP5Tv05.js → agent-site-editor-DRrJph4v.js} +1 -1
  61. package/dist/client/assets/agent-site-editor-code-DMoRTBgU.js +2 -0
  62. package/dist/client/assets/agent-site-editor-content-k52U0wO-.js +1 -0
  63. package/dist/client/assets/agent-site-editor-preview-CBeqgRYS.js +1 -0
  64. package/dist/client/assets/agent-view-D1-wq3ac.js +1 -0
  65. package/dist/client/assets/{agent-view-guard-DY0RncTb.js → agent-view-guard-C9Wo0EMO.js} +1 -1
  66. package/dist/client/assets/{agents-list-_02CAkxo.js → agents-list-wSORz8Ft.js} +1 -1
  67. package/dist/client/assets/{ai-providers-BEtASlEP.js → ai-providers-CTIBAIi4.js} +1 -1
  68. package/dist/client/assets/{alert-DolJ0mtF.js → alert-D6qfcDvw.js} +1 -1
  69. package/dist/client/assets/{analytics-sections-aPLCnG0n.js → analytics-sections-Kd65He2p.js} +1 -1
  70. package/dist/client/assets/api-keys-Bd33Iv-1.js +1 -0
  71. package/dist/client/assets/{api-keys-C-oGSQow.js → api-keys-DJryMyS5.js} +1 -1
  72. package/dist/client/assets/{app-editor-CzLzFjz9.js → app-editor-B9QN2jVa.js} +1 -1
  73. package/dist/client/assets/{asset-utils-Cs0TaxGO.js → asset-utils-9rp-zFxh.js} +1 -1
  74. package/dist/client/assets/{auth-CXFweNuJ.js → auth-CDPlghAl.js} +1 -1
  75. package/dist/client/assets/{auth-catchall-BcSYLnny.js → auth-catchall-Csvu20GH.js} +1 -1
  76. package/dist/client/assets/{auth-entry-CjMK5wkm.js → auth-entry-BMjSVUw0.js} +1 -1
  77. package/dist/client/assets/{auth-split-layout-CGVHfETk.js → auth-split-layout-Bs0cz5_W.js} +1 -1
  78. package/dist/client/assets/{authenticate-and-persist-oauth-Crrqkmel.js → authenticate-and-persist-oauth-CC1hNWWz.js} +1 -1
  79. package/dist/client/assets/{automation-list-row-D3g_Qled.js → automation-list-row-DBQTYlA5.js} +1 -1
  80. package/dist/client/assets/{automation-runs-yqTjFa6O.js → automation-runs-B5Implwg.js} +1 -1
  81. package/dist/client/assets/{automations-C8XhM2nB.js → automations-CFGb4yWp.js} +1 -1
  82. package/dist/client/assets/{autosend-5Z9iw8Hd.js → autosend-Dstae6k-.js} +1 -1
  83. package/dist/client/assets/{badge-DLDc3XJd.js → badge-CvD-8veb.js} +1 -1
  84. package/dist/client/assets/{block-document-rz8xjEkN.js → block-document-Wu0ejoXd.js} +1 -1
  85. package/dist/client/assets/{blocks-preview-workspace-context-BUMxeUbc.js → blocks-preview-workspace-context-Bl5CeNpc.js} +1 -1
  86. package/dist/client/assets/{blocks-tab-states-D2UCyrKm.js → blocks-tab-states-O-q70O3p.js} +1 -1
  87. package/dist/client/assets/{blog-schema-C-syUPc3.js → blog-schema-CM4a1ID4.js} +1 -1
  88. package/dist/client/assets/{buckets-BweoMRPz.js → buckets-DPXuLJrq.js} +1 -1
  89. package/dist/client/assets/{build-improve-prompt-doc-C_00Ntgw.js → build-improve-prompt-doc-DGsm_Lg7.js} +1 -1
  90. package/dist/client/assets/{calendar-DSV2yxAL.js → calendar-DDUWaDfo.js} +1 -1
  91. package/dist/client/assets/{capability-load-error-BlGNDQeB.js → capability-load-error-BlK9-D5s.js} +1 -1
  92. package/dist/client/assets/{category-editor-BLQ2J7r-.js → category-editor-OHNAUZUV.js} +1 -1
  93. package/dist/client/assets/{cdn-tab-DATR-aDN.js → cdn-tab-BWtZXPGO.js} +1 -1
  94. package/dist/client/assets/{chart-DYjkqppp.js → chart-lZZmRcYx.js} +1 -1
  95. package/dist/client/assets/{chat-context-GGH0Jpcf.js → chat-context-CETfJ--k.js} +1 -1
  96. package/dist/client/assets/{chat-draft-ChfzWruH.js → chat-draft-BAiAlPNq.js} +1 -1
  97. package/dist/client/assets/{checkbox-BfWTtpoP.js → checkbox-B-L_Hv2a.js} +1 -1
  98. package/dist/client/assets/{choose-editor-lbT9LhdC.js → choose-editor-BwLbl5sE.js} +1 -1
  99. package/dist/client/assets/{cli-auth-success-ug2N-fRu.js → cli-auth-success-Be5k2ucC.js} +1 -1
  100. package/dist/client/assets/{client-icons-C18vKow0.js → client-icons-DGbc1dee.js} +1 -1
  101. package/dist/client/assets/{cms-settings-editor-CG6ALtkC.js → cms-settings-editor-CBRbPuXj.js} +1 -1
  102. package/dist/client/assets/{collapsible-DTN-w8y8.js → collapsible-Btdtpd74.js} +1 -1
  103. package/dist/client/assets/{collection-detail-Bnji1pRn.js → collection-detail-0HxRVU-X.js} +1 -1
  104. package/dist/client/assets/{collection-display-button-Cw4GiE2o.js → collection-display-button-OG-0LtqL.js} +1 -1
  105. package/dist/client/assets/{collection-search-S4_KAabw.js → collection-search--OROxVAW.js} +1 -1
  106. package/dist/client/assets/{collection-table-wrapper-Bg5iKC19.js → collection-table-wrapper-DVxOlUuW.js} +1 -1
  107. package/dist/client/assets/{collection-tabs-BU5DI0lq.js → collection-tabs-Dyq0PXvI.js} +1 -1
  108. package/dist/client/assets/{column-rules-DQ4UMcN2.js → column-rules-DeCg3bZn.js} +1 -1
  109. package/dist/client/assets/{combobox-KhjLDHQs.js → combobox-DCNA_-xC.js} +1 -1
  110. package/dist/client/assets/{command-DFIvuSq5.js → command-CbG6zwJ2.js} +1 -1
  111. package/dist/client/assets/{companion-mcps-section-CJ_wS_fT.js → companion-mcps-section-2jAqn94v.js} +1 -1
  112. package/dist/client/assets/{config-Dr5npodX.js → config-CYAB0FqO.js} +1 -1
  113. package/dist/client/assets/{connect-Dah7Dhl-.js → connect-Cz8zt4PD.js} +1 -1
  114. package/dist/client/assets/{connect-layout-CZfsMXOt.js → connect-layout-BjTL0b9A.js} +1 -1
  115. package/dist/client/assets/{connect-source-dialog-CKxXP_zU.js → connect-source-dialog-BJPO0z0Q.js} +1 -1
  116. package/dist/client/assets/{connection-0N2uS0ke.js → connection-D_8ypzRk.js} +1 -1
  117. package/dist/client/assets/{connection-card-DfaT2fCD.js → connection-card-CJdAQmxn.js} +1 -1
  118. package/dist/client/assets/{connection-detail-CmaMsduM.js → connection-detail-DByZObPF.js} +1 -1
  119. package/dist/client/assets/{connection-form-helpers-35vnRZcc.js → connection-form-helpers-CKiCxI-f.js} +1 -1
  120. package/dist/client/assets/{connections-bXRHoA0h.js → connections-BPnkZ6mQ.js} +1 -1
  121. package/dist/client/assets/{content-tab-lSMuf5uE.js → content-tab-reeT4Bt9.js} +3 -3
  122. package/dist/client/assets/{context-DWxxHLnq.js → context-BdQHB9wq.js} +1 -1
  123. package/dist/client/assets/{context-menu-DI57E_45.js → context-menu-DoJbdaSe.js} +1 -1
  124. package/dist/client/assets/{context-shell-BUlm53_e.js → context-shell-CgIpVPLL.js} +3 -3
  125. package/dist/client/assets/{core.esm-DYPHfGaf.js → core.esm-AfeRxO-w.js} +1 -1
  126. package/dist/client/assets/{create-organization-dialog-BkQWIOJt.js → create-organization-dialog-DM0dy4s0.js} +1 -1
  127. package/dist/client/assets/{daily-pulse--VzwcpAb.js → daily-pulse-B6Gf6s3c.js} +1 -1
  128. package/dist/client/assets/{discover-D2ZRw-3f.js → discover-DgZGl284.js} +1 -1
  129. package/dist/client/assets/{domain-settings-WVIWrWox.js → domain-settings-C9wx0hG7.js} +1 -1
  130. package/dist/client/assets/{drawer-CnH1-BoJ.js → drawer-BOVgzwg0.js} +1 -1
  131. package/dist/client/assets/{editor-DLmhZNkh.js → editor-BLSFnmQy.js} +1 -1
  132. package/dist/client/assets/{editor-classes-CMebXIkX.js → editor-classes-Bd-gnegN.js} +1 -1
  133. package/dist/client/assets/{empty-state-36Ylmm4X.js → empty-state-DG9L5-rf.js} +1 -1
  134. package/dist/client/assets/{empty-state-I9kFofDC.js → empty-state-GaDVm-bY.js} +1 -1
  135. package/dist/client/assets/{experiments-tab-BH-x7FBh.js → experiments-tab-0kAAmsC6.js} +1 -1
  136. package/dist/client/assets/{experiments-tab-choice-DAGLTFvi.js → experiments-tab-choice-DiAvzr3L.js} +1 -1
  137. package/dist/client/assets/{extract-connection-data-C9beUc6X.js → extract-connection-data-CN7Oc8k6.js} +1 -1
  138. package/dist/client/assets/{feature-gate-D09aRdX3.js → feature-gate-DYaXFeF2.js} +1 -1
  139. package/dist/client/assets/{feature-paywall-iuBIIyMp.js → feature-paywall-BwSHmJmG.js} +1 -1
  140. package/dist/client/assets/{file-explorer-BeEwI_HK.js → file-explorer-LD02-wRi.js} +1 -1
  141. package/dist/client/assets/{file-preview-ttwbSA1O.js → file-preview-BsruxpEx.js} +1 -1
  142. package/dist/client/assets/{file-share-button-COlLgw2F.js → file-share-button-Bgve0_0J.js} +1 -1
  143. package/dist/client/assets/{file-type-icon-ClMPkSrR.js → file-type-icon-C5VkeAku.js} +1 -1
  144. package/dist/client/assets/{folder-icon-DMml5pRP.js → folder-icon-CtjFr6N1.js} +1 -1
  145. package/dist/client/assets/{form-DvzVBqg8.js → form-BYCoF-C0.js} +1 -1
  146. package/dist/client/assets/{general-D2VAe21I.js → general-DRoKs1jZ.js} +1 -1
  147. package/dist/client/assets/{held-block-view-D7jbi8bj.js → held-block-view-CQVEFAFc.js} +3 -3
  148. package/dist/client/assets/{home-DvxRrAK9.js → home-D_WXf-lC.js} +1 -1
  149. package/dist/client/assets/{hosted-publish-feedback-Da_GNG6A.js → hosted-publish-feedback-ladpFgtZ.js} +1 -1
  150. package/dist/client/assets/{icon-button-CmulQtFx.js → icon-button-DXFu6_qN.js} +1 -1
  151. package/dist/client/assets/{index-DQT_QlGM.js → index-2k4Je6Et.js} +1 -1
  152. package/dist/client/assets/{index-DImkUUlk.js → index-B4NX9asp.js} +1 -1
  153. package/dist/client/assets/{index-DYw-89RA.js → index-BA39BNRP.js} +1 -1
  154. package/dist/client/assets/{index-Ddd2dpQ0.js → index-BFntUKtR.js} +1 -1
  155. package/dist/client/assets/{index-CDTSSa2D.js → index-Bg0i3R97.js} +1 -1
  156. package/dist/client/assets/{index-pv8xOEWG.js → index-BjUZX2ed.js} +1 -1
  157. package/dist/client/assets/{index-B8VmK5No.js → index-C2cHKfrA.js} +1 -1
  158. package/dist/client/assets/{index-Du2sXJ45.js → index-C2fnFEyw.js} +1 -1
  159. package/dist/client/assets/{index-DYjVfKMe.js → index-CAbTaO3R.js} +1 -1
  160. package/dist/client/assets/{index-xGHoAbQb.js → index-COtQaCJe.js} +1 -1
  161. package/dist/client/assets/{index-BqYuwhzI.js → index-CbfC7nyd.js} +1 -1
  162. package/dist/client/assets/{index-1BK0D9QN.js → index-Cta6Sod1.js} +1 -1
  163. package/dist/client/assets/{index-BCruqzN-.js → index-D0TDiTs1.js} +1 -1
  164. package/dist/client/assets/{index-CougWaQw.js → index-DiDSraos.js} +3 -3
  165. package/dist/client/assets/{index-D0iHpnFf.js → index-LcU9Ln9y.js} +1 -1
  166. package/dist/client/assets/{index-redirect-YPx9D3Ou.js → index-redirect-BoFIsqHu.js} +1 -1
  167. package/dist/client/assets/{infiniteQueryObserver-Bum778rO.js → infiniteQueryObserver-C9S7qfpp.js} +1 -1
  168. package/dist/client/assets/{infra-billing-DnPhVgoU.js → infra-billing-Bz3akSkB.js} +1 -1
  169. package/dist/client/assets/{input-C6J6sFLk.js → input-5HYnFL6P.js} +1 -1
  170. package/dist/client/assets/{input-2GI01ZHq.js → input-Ct3i1uvm.js} +3 -3
  171. package/dist/client/assets/{integration-icon-BK5HEqOt.js → integration-icon-D-d6wE5Q.js} +1 -1
  172. package/dist/client/assets/{jira-icon-BkUCCogz.js → jira-icon-BP69kSW0.js} +1 -1
  173. package/dist/client/assets/{label-D2QweUS5.js → label-CLMhoWGB.js} +1 -1
  174. package/dist/client/assets/{layout-Cr4l3Lue.js → layout-Db_HIO6c.js} +1 -1
  175. package/dist/client/assets/{legacy-agents-deep-CcppWhib.js → legacy-agents-deep-QJMpVjX1.js} +1 -1
  176. package/dist/client/assets/{legacy-main-redirect-t_ZXNxMx.js → legacy-main-redirect-D1emBtrc.js} +1 -1
  177. package/dist/client/assets/library-Cz5z21NF.js +1 -0
  178. package/dist/client/assets/{login-B_VmFE6F.js → login-h2cTYqbC.js} +1 -1
  179. package/dist/client/assets/{markdown-By-zKv4N.js → markdown-CpM4GomI.js} +1 -1
  180. package/dist/client/assets/{mcp-app-renderer-CJcE7Me0.js → mcp-app-renderer-CTdZmGxc.js} +1 -1
  181. package/dist/client/assets/{mcp-oauth-BRI2WRQ6.js → mcp-oauth-CnvlrfOO.js} +1 -1
  182. package/dist/client/assets/{mcp-oauth-CoELXu3p.js → mcp-oauth-Cr2ILRkC.js} +1 -1
  183. package/dist/client/assets/{members-T_CQxUsW.js → members-CjLahSa-.js} +1 -1
  184. package/dist/client/assets/{memory-D0T_EYk4.js → memory-DY8VVQ5w.js} +1 -1
  185. package/dist/client/assets/{mini-report-page--Xdlp0CV.js → mini-report-page-DE0--HlE.js} +1 -1
  186. package/dist/client/assets/{mock-board-PvVuj1dB.js → mock-board-9qvoLk7s.js} +3 -3
  187. package/dist/client/assets/{monaco-editor-k5U1VNJf.js → monaco-editor-6fA5o8_7.js} +1 -1
  188. package/dist/client/assets/{monitoring-C6IV1Ojn.js → monitoring-BF9A-9dY.js} +1 -1
  189. package/dist/client/assets/{monitoring-stats-row-C8LKku6g.js → monitoring-stats-row-HtWZhf6N.js} +1 -1
  190. package/dist/client/assets/{multi-select-C8iX426C.js → multi-select-CRk4m031.js} +1 -1
  191. package/dist/client/assets/{mustache-B7NskePo.js → mustache-DyofnPOW.js} +1 -1
  192. package/dist/client/assets/{named-rule-uses-BGSr5H7c.js → named-rule-uses-CJ502rYn.js} +1 -1
  193. package/dist/client/assets/{new-project-dialog-CAZxn86Q.js → new-project-dialog-BPePXtuz.js} +1 -1
  194. package/dist/client/assets/{oauth-callback-CzVBfeY-.js → oauth-callback-DyAOLKYm.js} +1 -1
  195. package/dist/client/assets/{oauth-callback-ai-provider-H_n-VMM6.js → oauth-callback-ai-provider-ePIUDanP.js} +1 -1
  196. package/dist/client/assets/{onboarding-1yY4wRC-.js → onboarding-pKm1fDey.js} +1 -1
  197. package/dist/client/assets/{openai-conversation-DiQuN7mY.js → openai-conversation-Ci2RosNi.js} +1 -1
  198. package/dist/client/assets/{optimistic-project-sidebar-views-BBn4-VIq.js → optimistic-project-sidebar-views-CS8GDAKi.js} +1 -1
  199. package/dist/client/assets/{order-monitor-day-C3zOdDaG.js → order-monitor-day-BSlXhom-.js} +1 -1
  200. package/dist/client/assets/{organization-choice-CostWr9b.js → organization-choice-CPAfCImv.js} +1 -1
  201. package/dist/client/assets/{orgs-BIqrgGAH.js → orgs-D2kf-m_g.js} +1 -1
  202. package/dist/client/assets/{page-seo-form-x6CXAts2.js → page-seo-form-mA_jZRuV.js} +1 -1
  203. package/dist/client/assets/{pair-CODVJhQX.js → pair-BpdbeXdz.js} +1 -1
  204. package/dist/client/assets/{parse-sections-BcFrejWa.js → parse-sections-ClDRD1Rl.js} +1 -1
  205. package/dist/client/assets/{plan-C8moa1WK.js → plan-LrlX4DkJ.js} +1 -1
  206. package/dist/client/assets/{plan-ladder-ChGHzzYA.js → plan-ladder-Bh7odW1p.js} +1 -1
  207. package/dist/client/assets/{popover-D5HVj9db.js → popover-Bh0CcADC.js} +1 -1
  208. package/dist/client/assets/{post-calendar-B0tGkIHO.js → post-calendar-DuCa7gqX.js} +1 -1
  209. package/dist/client/assets/{post-editor-DV7Ks-kx.js → post-editor-DUCkVVMw.js} +1 -1
  210. package/dist/client/assets/{preview-content-ecbjHQqb.js → preview-content-DjMi2ntg.js} +1 -1
  211. package/dist/client/assets/{preview-dialog-DWH4sJhV.js → preview-dialog-C_JCrHoZ.js} +1 -1
  212. package/dist/client/assets/{preview-panel-TQJj_Tr2.js → preview-panel-DMmzZpGB.js} +1 -1
  213. package/dist/client/assets/{preview-tab-Bgfnz_1n.js → preview-tab-Buu2lHdF.js} +3 -3
  214. package/dist/client/assets/{product-picker-dialog-DcP5zUi0.js → product-picker-dialog-9RxWSZaq.js} +1 -1
  215. package/dist/client/assets/{profile-CRMrBGKf.js → profile-BCbf2i1y.js} +1 -1
  216. package/dist/client/assets/{project-app-view-C7eutFBD.js → project-app-view-DVXf09pt.js} +1 -1
  217. package/dist/client/assets/{project-apps-lzR9_nfV.js → project-apps-Bv1Kv3jv.js} +1 -1
  218. package/dist/client/assets/{project-feed-B41ozbdF.js → project-feed-BBtYk5Yh.js} +1 -1
  219. package/dist/client/assets/{project-icon-XWJRcwiR.js → project-icon-C550MbiA.js} +1 -1
  220. package/dist/client/assets/project-reports-CVmpK6j7.js +1 -0
  221. package/dist/client/assets/project-tasks-BfltA2fK.js +1 -0
  222. package/dist/client/assets/{projects-DwIDU5EZ.js → projects-BRbphxF7.js} +1 -1
  223. package/dist/client/assets/{projects-empty-state-DlyF6ybK.js → projects-empty-state-v63zSPt1.js} +1 -1
  224. package/dist/client/assets/{prompts-DyL_KC7K.js → prompts-CMpInuvL.js} +1 -1
  225. package/dist/client/assets/record-editor-CHCXoZ-6.js +1 -0
  226. package/dist/client/assets/{redirect-editor-BumyaG9e.js → redirect-editor-fRzJcNGc.js} +1 -1
  227. package/dist/client/assets/{releases-api-CsshXgEO.js → releases-api-F9-sDLet.js} +1 -1
  228. package/dist/client/assets/{reports-Bicq8ChL.js → reports-BuKA41ZR.js} +1 -1
  229. package/dist/client/assets/reports-muYxH4C5.js +1 -0
  230. package/dist/client/assets/{reports-onboarding-DjTvQuyJ.js → reports-onboarding-DwaKBMlH.js} +1 -1
  231. package/dist/client/assets/{reports-tab-7GXK_THd.js → reports-tab-DFjJeUkM.js} +2 -2
  232. package/dist/client/assets/repositories-BCLCgdaJ.js +1 -0
  233. package/dist/client/assets/{repositories-Chp8gK_G.js → repositories-DWx1MQSP.js} +1 -1
  234. package/dist/client/assets/{repository-binding-CnII80N0.js → repository-binding-D-pLrjbz.js} +1 -1
  235. package/dist/client/assets/{repository-import-picker-BiuLIYSL.js → repository-import-picker-UrmRABf_.js} +1 -1
  236. package/dist/client/assets/{repository-picker-Dvi0iUFa.js → repository-picker-BBLpYCoK.js} +1 -1
  237. package/dist/client/assets/{require-capability-0qwMYW9s.js → require-capability-CwwCPV2d.js} +1 -1
  238. package/dist/client/assets/{required-auth-layout-CbfxWhtd.js → required-auth-layout-DNk7GKXj.js} +1 -1
  239. package/dist/client/assets/{reset-password-U7rq9VmP.js → reset-password-CtT0FT-_.js} +1 -1
  240. package/dist/client/assets/{resizable-B9g11DZi.js → resizable-CrFKqTu0.js} +1 -1
  241. package/dist/client/assets/{resolve-tab-icon-CLgWMK6w.js → resolve-tab-icon-hbO6hJ_0.js} +1 -1
  242. package/dist/client/assets/{review-settings-CSXc3oR2.js → review-settings-BJHUY4EV.js} +1 -1
  243. package/dist/client/assets/{roles-DqGCOkFu.js → roles-DKrwBipQ.js} +1 -1
  244. package/dist/client/assets/{route-TOXekdWb.js → route-DBkJNRIA.js} +1 -1
  245. package/dist/client/assets/{route-Cp26L3_c.js → route-DPp_Lep-.js} +1 -1
  246. package/dist/client/assets/route-hpx2bMJl.js +1 -0
  247. package/dist/client/assets/{sandbox-lifecycle-context-BMFa8YZs.js → sandbox-lifecycle-context-Dkb3fO5w.js} +1 -1
  248. package/dist/client/assets/{schema-C4WMcmzI.js → schema-BEeVaLW6.js} +1 -1
  249. package/dist/client/assets/{schema-pEB8KJ_m.js → schema-DBHYkibP.js} +1 -1
  250. package/dist/client/assets/{scroll-area-DY12-cVO.js → scroll-area-DSUJ7lVD.js} +1 -1
  251. package/dist/client/assets/{search-input-bh1ZrQSN.js → search-input-QtKEZVD-.js} +1 -1
  252. package/dist/client/assets/{search-toggle-ZozNFCUP.js → search-toggle-Da11nBmc.js} +1 -1
  253. package/dist/client/assets/{secret-picker-DZfzvpJH.js → secret-picker-DJO55Hb6.js} +1 -1
  254. package/dist/client/assets/{secrets-DuxeqUhq.js → secrets-8eS3DOcb.js} +1 -1
  255. package/dist/client/assets/{section-array-field-C4TQplJL.js → section-array-field-WFlX5tgY.js} +1 -1
  256. package/dist/client/assets/{sections-Dz-3FzhS.js → sections-D8KpNRcH.js} +1 -1
  257. package/dist/client/assets/{sections-editor-CGdhD_Ae.js → sections-editor-7q1l9Pdz.js} +1 -1
  258. package/dist/client/assets/{select-model-D5fRAnFh.js → select-model-jRW9e3BX.js} +1 -1
  259. package/dist/client/assets/{select-Dyumr-dT.js → select-wwxrlqJJ.js} +1 -1
  260. package/dist/client/assets/{seo-editor-B_jYz7Iq.js → seo-editor-CkGOR4rd.js} +1 -1
  261. package/dist/client/assets/{separator-DrU4DMEu.js → separator-BV-bYhcR.js} +1 -1
  262. package/dist/client/assets/settings-tab-DfhqcViU.js +1 -0
  263. package/dist/client/assets/{sheet-CXIHwdnE.js → sheet-C7tL5BrZ.js} +1 -1
  264. package/dist/client/assets/{shell-layout-DM2ZRo1F.js → shell-layout-B5SK3GdR.js} +1 -1
  265. package/dist/client/assets/{site-draft-actions-BnH3Iq2R.js → site-draft-actions-DNWQ-W1Y.js} +1 -1
  266. package/dist/client/assets/{site-draft-view-_ukrDc34.js → site-draft-view-C-QPK5Cc.js} +2 -2
  267. package/dist/client/assets/site-editor-jGKm5SGy.js +1 -0
  268. package/dist/client/assets/{site-editor-toast-C5nnCy5g.js → site-editor-toast-Wsn6Gm_t.js} +1 -1
  269. package/dist/client/assets/{skills-CWXH49l2.js → skills-BBaiGQmq.js} +1 -1
  270. package/dist/client/assets/{slider-D1vLXzvC.js → slider-846maMGM.js} +1 -1
  271. package/dist/client/assets/{sortable.esm-DdE--Pu3.js → sortable.esm-DuE9W2k7.js} +1 -1
  272. package/dist/client/assets/{sso-Cri4W727.js → sso-C44qfgJm.js} +1 -1
  273. package/dist/client/assets/{suggestion-Bh_FXVoZ.js → suggestion-DWGDGsQJ.js} +1 -1
  274. package/dist/client/assets/{switch-D3ZMBgst.js → switch-BwIq17J0.js} +1 -1
  275. package/dist/client/assets/{symbol-Dxj5NLAb.js → symbol-Y9WKjy4g.js} +1 -1
  276. package/dist/client/assets/{synced-repos-2ntvpkTr.js → synced-repos-IgpBiB0G.js} +1 -1
  277. package/dist/client/assets/{tab-icon-glyph-DX_tgWo2.js → tab-icon-glyph-DO2yJW4L.js} +1 -1
  278. package/dist/client/assets/{table-CCEXPT5h.js → table-Dbp73Ur6.js} +1 -1
  279. package/dist/client/assets/{tabs-DvKB0Wsw.js → tabs-BQl_mHQf.js} +1 -1
  280. package/dist/client/assets/{task-assignee-avatar-BB9CqLgr.js → task-assignee-avatar-D29zUk62.js} +1 -1
  281. package/dist/client/assets/{task-board-CAwfWvJZ.js → task-board-BlfouCEs.js} +1 -1
  282. package/dist/client/assets/{task-route-CC3-1h7p.js → task-route-C8v3HFXu.js} +1 -1
  283. package/dist/client/assets/{task-status-Bqrc3FTa.js → task-status-azo13dYz.js} +1 -1
  284. package/dist/client/assets/{taskboard-analytics-CLwJCEH7.js → taskboard-analytics-BxbRnc4J.js} +1 -1
  285. package/dist/client/assets/tasks-Chz9dKsS.js +1 -0
  286. package/dist/client/assets/{tasks-BibyZVQl.js → tasks-DHS1Ow53.js} +1 -1
  287. package/dist/client/assets/{textarea-DUia9RkA.js → textarea-Si70fD_O.js} +1 -1
  288. package/dist/client/assets/{thread-analytics-D72n8VzJ.js → thread-analytics-DriU2alE.js} +1 -1
  289. package/dist/client/assets/{thread-intent-2lfYBt3n.js → thread-intent-BNI3DDiE.js} +1 -1
  290. package/dist/client/assets/{thread-route-rW4ajyKq.js → thread-route-Coc7t_3y.js} +1 -1
  291. package/dist/client/assets/{thread-route-DDAbB8Ku.js → thread-route-UX0SIEsR.js} +1 -1
  292. package/dist/client/assets/{thread-sheet-body-C7E4Yyd8.js → thread-sheet-body--SLK6Fex.js} +1 -1
  293. package/dist/client/assets/{time-range-picker-xU8-msdF.js → time-range-picker-CNA8Af1j.js} +1 -1
  294. package/dist/client/assets/{toggle-group-Dv6s-3ES.js → toggle-group-D4XBy8-Z.js} +1 -1
  295. package/dist/client/assets/{tool-namespace-BOiBuXM-.js → tool-namespace-Dk-uJsrr.js} +1 -1
  296. package/dist/client/assets/{toolbar-icon-button-CDcHhA1t.js → toolbar-icon-button-B6mWK_3l.js} +1 -1
  297. package/dist/client/assets/{tooltip-DIuN4DIg.js → tooltip-Da50YT6z.js} +1 -1
  298. package/dist/client/assets/{tooltipContext-DUaVg-61.js → tooltipContext-BqUsQzxk.js} +1 -1
  299. package/dist/client/assets/{track-CBxuiTSO.js → track-CNZXshw-.js} +1 -1
  300. package/dist/client/assets/{types-Dl-hn7PZ.js → types-CLli24Zj.js} +1 -1
  301. package/dist/client/assets/{url-slug-D9xrBukJ.js → url-slug-xIeJs7SS.js} +1 -1
  302. package/dist/client/assets/{usage-stats-wB5KA7-v.js → usage-stats-0gdPWOUr.js} +1 -1
  303. package/dist/client/assets/{use-ai-providers-DKabXXld.js → use-ai-providers-DBkNT_8Y.js} +1 -1
  304. package/dist/client/assets/{use-apply-named-rule-ChTeSA7m.js → use-apply-named-rule-CfhbwzEJ.js} +1 -1
  305. package/dist/client/assets/{use-automations-CXDSC7z8.js → use-automations-njHVPQkF.js} +1 -1
  306. package/dist/client/assets/{use-autosave-DAmf6_7n.js → use-autosave-DpwR1jVJ.js} +1 -1
  307. package/dist/client/assets/{use-chat-layout-state-CZOY4AOv.js → use-chat-layout-state-KqpZGztP.js} +1 -1
  308. package/dist/client/assets/{use-clock-tick-BHoYlCCT.js → use-clock-tick-B0lOqPgS.js} +1 -1
  309. package/dist/client/assets/{use-cms-publish-actions-03oPd-2q.js → use-cms-publish-actions-KlXS_wmT.js} +1 -1
  310. package/dist/client/assets/{use-connect-companion-BpR9mqxM.js → use-connect-companion-CYoUD1bB.js} +1 -1
  311. package/dist/client/assets/{use-connection-CcrF7v5F.js → use-connection-BuzgLCJz.js} +1 -1
  312. package/dist/client/assets/{use-copy-AP38NyPo.js → use-copy-BcbQxaeq.js} +1 -1
  313. package/dist/client/assets/{use-create-virtual-mcp-D_NcyZtx.js → use-create-virtual-mcp-CHhePHII.js} +1 -1
  314. package/dist/client/assets/{use-date-fns-locale-DuBvmVa0.js → use-date-fns-locale-CP_IUKpR.js} +1 -1
  315. package/dist/client/assets/{use-debounced-autosave-DEVo_C-J.js → use-debounced-autosave-BZuAGtKk.js} +1 -1
  316. package/dist/client/assets/{use-debounced-value-DqClep0S.js → use-debounced-value-RygWFGN8.js} +1 -1
  317. package/dist/client/assets/{use-deco-credits-CRR7Vt7Z.js → use-deco-credits-qTd1SfTx.js} +1 -1
  318. package/dist/client/assets/{use-decopilot-events-D8_8cAbK.js → use-decopilot-events-CkMNkN-E.js} +1 -1
  319. package/dist/client/assets/{use-delete-connection-s7i8wWyy.js → use-delete-connection-BIJYMBTL.js} +1 -1
  320. package/dist/client/assets/{use-deployment-admin-BgZgODZv.js → use-deployment-admin-DC5i0Cgy.js} +1 -1
  321. package/dist/client/assets/{use-fast-preview-draft-url-BnvZfNzT.js → use-fast-preview-draft-url-ZX29Mm-5.js} +1 -1
  322. package/dist/client/assets/{use-file-configs-DxHyOtM5.js → use-file-configs-D4vQEbMK.js} +1 -1
  323. package/dist/client/assets/{use-inbox-feed-BxQOoz_I.js → use-inbox-feed-CBtwciCB.js} +1 -1
  324. package/dist/client/assets/{use-infinite-scroll-CPX1G9gZ.js → use-infinite-scroll-COH3LYJE.js} +1 -1
  325. package/dist/client/assets/{use-join-requests-CNRb0Ul7.js → use-join-requests-CLOYBM8d.js} +1 -1
  326. package/dist/client/assets/{use-main-panel-tabs-CPeAZW-Y.js → use-main-panel-tabs-hhnZvhUN.js} +1 -1
  327. package/dist/client/assets/{use-mcp-auth-status-DFNf_NTt.js → use-mcp-auth-status-CO1cpSxp.js} +1 -1
  328. package/dist/client/assets/{use-mcp-client-D0NTKORm.js → use-mcp-client-9wJ5q4xy.js} +1 -1
  329. package/dist/client/assets/{use-mcp-prompts-BjeRnCFI.js → use-mcp-prompts-Dv5OREO0.js} +1 -1
  330. package/dist/client/assets/{use-mcp-tools-BnP9a_TP.js → use-mcp-tools-BYzkhKvC.js} +1 -1
  331. package/dist/client/assets/{use-mobile-D0NbGq8r.js → use-mobile-BikxJdu-.js} +1 -1
  332. package/dist/client/assets/{use-move-blocks-BYuqgj9i.js → use-move-blocks-BkJIHaQD.js} +1 -1
  333. package/dist/client/assets/{use-navigate-to-agent-gCcx6GwS.js → use-navigate-to-agent-dHFFqa7r.js} +1 -1
  334. package/dist/client/assets/{use-org-fs-BKmJqW_A.js → use-org-fs-Cmp1_AMe.js} +1 -1
  335. package/dist/client/assets/{use-org-repo-syncs-DPvFoTIs.js → use-org-repo-syncs-DusofZyp.js} +1 -1
  336. package/dist/client/assets/{use-org-sso-BVIo9GTp.js → use-org-sso-DrA6dEvB.js} +1 -1
  337. package/dist/client/assets/{use-organization-roles-E4VSJswv.js → use-organization-roles-DIhNfUf-.js} +1 -1
  338. package/dist/client/assets/{use-organization-settings-D06a1Czd.js → use-organization-settings-DFdAH18X.js} +1 -1
  339. package/dist/client/assets/{use-panel-navigate-jx-DL83P.js → use-panel-navigate-C3PX7uIN.js} +1 -1
  340. package/dist/client/assets/{use-project-native-view-presence-CH9zsUtE.js → use-project-native-view-presence-jYSv_2GE.js} +1 -1
  341. package/dist/client/assets/{use-project-scope-CXMfs_YY.js → use-project-scope-MURKBB_F.js} +1 -1
  342. package/dist/client/assets/{use-recent-apps-C2tQS1dh.js → use-recent-apps-vKYlAJ2a.js} +1 -1
  343. package/dist/client/assets/{use-releases-DR4CWHLU.js → use-releases-BHq1VGSD.js} +1 -1
  344. package/dist/client/assets/{use-reports-diagnostic-Dcgrh62f.js → use-reports-diagnostic-S3kMtK5n.js} +1 -1
  345. package/dist/client/assets/{use-sandbox-events-B2TjVShJ.js → use-sandbox-events-CnzKe_lc.js} +1 -1
  346. package/dist/client/assets/{use-secrets-Cj4Pb8n_.js → use-secrets-BFtfHzoD.js} +1 -1
  347. package/dist/client/assets/{use-section-preview-base-CMn_-GMJ.js → use-section-preview-base-iF8R8vcU.js} +1 -1
  348. package/dist/client/assets/{use-session-runtime-D37re8YG.js → use-session-runtime-HoFUNhSi.js} +1 -1
  349. package/dist/client/assets/{use-sidebar-collapsed-1C51orRq.js → use-sidebar-collapsed-QQE2FX90.js} +1 -1
  350. package/dist/client/assets/{use-tags-Dzz1pxzl.js → use-tags-DiDxuaiw.js} +1 -1
  351. package/dist/client/assets/{use-task-board-analytics-CnPUJQU5.js → use-task-board-analytics-Bgubkw2X.js} +1 -1
  352. package/dist/client/assets/{use-task-board-events-Bh7I4I55.js → use-task-board-events-CFizTHjL.js} +1 -1
  353. package/dist/client/assets/{use-task-board-item-prs-kYArJi5f.js → use-task-board-item-prs-D_-z54nO.js} +1 -1
  354. package/dist/client/assets/{use-task-metadata-akm3m5_0.js → use-task-metadata-QnTEihUH.js} +1 -1
  355. package/dist/client/assets/{use-thread-analytics-D0Kil6CI.js → use-thread-analytics-BW8G_SbR.js} +1 -1
  356. package/dist/client/assets/{use-thread-outputs-vmQ-h3eH.js → use-thread-outputs-BXMQXTev.js} +1 -1
  357. package/dist/client/assets/useInfiniteQuery-CeZt9pAf.js +1 -0
  358. package/dist/client/assets/{useQueries-Up-l-Sx4.js → useQueries-CS9ArIgG.js} +1 -1
  359. package/dist/client/assets/useSuspenseInfiniteQuery-Ck-eVxVS.js +1 -0
  360. package/dist/client/assets/{users-DwA5MImr.js → users-CTFl4-d1.js} +1 -1
  361. package/dist/client/assets/{utils-BzqPVjaH.js → utils-Dji9f8cm.js} +1 -1
  362. package/dist/client/assets/{variant-calendar-CMbDFqB-.js → variant-calendar-D57_b4SY.js} +1 -1
  363. package/dist/client/assets/{variant-matcher-override-BUXhyVXI.js → variant-matcher-override-C3Jn5f75.js} +1 -1
  364. package/dist/client/assets/{view-header-Doh3SPsq.js → view-header-C3d6Mj7S.js} +1 -1
  365. package/dist/client/assets/{virtual-mcp-qbpJijf8.js → virtual-mcp-DMjNpKe2.js} +1 -1
  366. package/dist/client/assets/{watch-sse-pool-BNmRTmhu.js → watch-sse-pool-BCf_PrVU.js} +1 -1
  367. package/dist/client/index.html +1 -1
  368. package/dist/server/server.js +2 -2
  369. package/package.json +1 -1
  370. package/dist/client/assets/agent-app-C1OFoRGi.js +0 -1
  371. package/dist/client/assets/agent-deck-Sy8TVYhz.js +0 -1
  372. package/dist/client/assets/agent-experiments-DMgQhnRj.js +0 -1
  373. package/dist/client/assets/agent-library-CLaRD7JQ.js +0 -1
  374. package/dist/client/assets/agent-library-file-B_5KyXLb.js +0 -1
  375. package/dist/client/assets/agent-monitor-D0cusHE9.js +0 -1
  376. package/dist/client/assets/agent-settings-DqjWQ7jf.js +0 -1
  377. package/dist/client/assets/agent-site-editor-code-CPcf7mfM.js +0 -2
  378. package/dist/client/assets/agent-site-editor-content-D6GJeBph.js +0 -1
  379. package/dist/client/assets/agent-site-editor-preview-DmxZmuOD.js +0 -1
  380. package/dist/client/assets/agent-view-CMmwezGN.js +0 -1
  381. package/dist/client/assets/api-keys-B5eVeqeH.js +0 -1
  382. package/dist/client/assets/library-DfBKwPIn.js +0 -1
  383. package/dist/client/assets/project-reports-DbsgDRgN.js +0 -1
  384. package/dist/client/assets/project-tasks-Dt5b0v4c.js +0 -1
  385. package/dist/client/assets/record-editor-BxDR8aF-.js +0 -1
  386. package/dist/client/assets/reports-PDZyl9Ix.js +0 -1
  387. package/dist/client/assets/repositories-BJ6u7iAl.js +0 -1
  388. package/dist/client/assets/route-CZs_kwOp.js +0 -1
  389. package/dist/client/assets/settings-tab-BMTHV3QM.js +0 -1
  390. package/dist/client/assets/site-editor-DL2SKa3C.js +0 -1
  391. package/dist/client/assets/tasks-7lymgCoP.js +0 -1
  392. package/dist/client/assets/useInfiniteQuery-Bij8QMI7.js +0 -1
  393. package/dist/client/assets/useSuspenseInfiniteQuery-CEQRCLvL.js +0 -1
@@ -2619,7 +2619,7 @@ Database customer_lake:
2619
2619
  - order_events: status changes (order_id, status, source_status, changed_at).
2620
2620
  - connections: one row per store: timezone (IANA) and currency. toTimeZone needs a constant zone: read the store's timezone first, then write it as a literal, e.g. toTimeZone(created_at, 'America/Sao_Paulo').
2621
2621
  - raw_records: redacted source payloads as JSON (payload), 180-day retention.
2622
- - site_traffic_hourly: per site_id, hour (UTC), device and country: visitors (a uniq state \u2014 read uniqMerge(visitors), never sum it), pageviews, events, errors, conversions, revenue. Read with FINAL; the current hour fills in over ~5 minutes. analytics_sites maps each site_id to the org. No rows means none of the org's sites sends Deco Analytics yet; ANALYTICS_INSTALL adds it.
2622
+ - site_traffic_hourly: per site_id, hour (UTC), device and country: visitors (a uniq state \u2014 read uniqMerge(visitors), never sum it), pageviews, events, errors, conversions, revenue. Read with FINAL; the current hour fills in within about a minute. analytics_sites maps each site_id to the org. No rows means none of the org's sites sends Deco Analytics yet; ANALYTICS_INSTALL adds it.
2623
2623
  Every store table has org_id, connection_id, source and store; the site tables have org_id and site_id. Run DESCRIBE TABLE customer_lake.<table> for all columns. Don't add a FORMAT clause.`,annotations:{title:"Query Customer Data Lake",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Yj.object({sql:Yj.string().min(1).max(20000).describe("One SELECT, DESCRIBE, SHOW or EXPLAIN statement")}),outputSchema:Yj.object({rows:Yj.array(Yj.record(Yj.string(),Yj.unknown())),rowCount:Yj.number(),truncated:Yj.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z);if(!xW())throw Error("The customer data lake is not configured on this deployment");let Y=await JG(Q.id,$.sql),X=Y.slice(0,Ix0);return{rows:X,rowCount:X.length,truncated:Y.length>Ix0}}})});import{z as $Z}from"zod";function DQ8($,Z,Q){let Y=[],X=null;if($==="codex"){let J=Bi6.parse(Z),G=J.rate_limit;if(G?.limit_reached!==void 0||G?.allowed!==void 0)X=G.limit_reached===!0||G.allowed===!1;for(let[W,K]of[["",G],["code_review_",J.code_review_rate_limit]])for(let H of["primary","secondary"]){let F=K?.[`${H}_window`];if(!F)continue;Y.push({id:`${W}${H}`,usedPercent:F.used_percent,resetAt:F.reset_at==null?null:new Date(F.reset_at*1000).toISOString(),windowSeconds:F.limit_window_seconds??null})}}else{let J=Di6.parse(Z);for(let G of["five_hour","seven_day","seven_day_sonnet","seven_day_opus"]){let W=J[G];if(W)Y.push({id:G,usedPercent:W.utilization,resetAt:W.resets_at?new Date(W.resets_at).toISOString():null,windowSeconds:G==="five_hour"?18000:604800})}}if(Y.some((J)=>J.usedPercent>=100))X=!0;return{status:Y.length||X!==null?"available":"unavailable",reason:Y.length||X!==null?null:"no_data",checkedAt:Q.toISOString(),retryAt:null,limitReached:X,windows:Y}}var UQ8,NQ8,BQ8,HQ8,FQ8,Bi6,Cx0,Di6;var sj1=L(()=>{UQ8=$Z.enum(["codex","claude"]),NQ8=$Z.object({status:$Z.enum(["available","unavailable","disconnected"]),reason:$Z.enum(["authorization","permission","rate_limited","provider_error","invalid_response","no_data"]).nullable(),checkedAt:$Z.string().datetime().nullable(),retryAt:$Z.string().datetime().nullable(),limitReached:$Z.boolean().nullable(),windows:$Z.array($Z.object({id:$Z.enum(["primary","secondary","code_review_primary","code_review_secondary","five_hour","seven_day","seven_day_sonnet","seven_day_opus"]),usedPercent:$Z.number().min(0).max(100),resetAt:$Z.string().datetime().nullable(),windowSeconds:$Z.number().int().positive().nullable()})).max(8)}),BQ8=$Z.number().finite().min(0).max(100),HQ8=$Z.object({used_percent:BQ8,reset_at:$Z.number().int().min(0).max(253402300799).nullish(),limit_window_seconds:$Z.number().int().positive().nullish()}),FQ8=$Z.object({limit_reached:$Z.boolean().optional(),allowed:$Z.boolean().optional(),primary_window:HQ8.nullish(),secondary_window:HQ8.nullish()}),Bi6=$Z.object({rate_limit:FQ8.nullish(),code_review_rate_limit:FQ8.nullish()}),Cx0=$Z.object({utilization:BQ8,resets_at:$Z.string().datetime({offset:!0}).nullish()}),Di6=$Z.object({five_hour:Cx0.nullish(),seven_day:Cx0.nullish(),seven_day_sonnet:Cx0.nullish(),seven_day_opus:Cx0.nullish()})});import{createHash as Li6}from"crypto";import{z as Sx0}from"zod";function YD($,Z=new Date){return{status:"unavailable",reason:$,checkedAt:Z.toISOString(),retryAt:null,limitReached:null,windows:[]}}async function ji6($,Z){let Q={Accept:"application/json"};if($==="codex"){let J;try{J=Oi6.parse(JSON.parse(Z))}catch{return YD("authorization")}Q.Authorization=`Bearer ${J.tokens.access_token}`,Q["ChatGPT-Account-Id"]=J.tokens.account_id}else Q.Authorization=`Bearer ${Z}`,Q["anthropic-beta"]="oauth-2025-04-20";let Y=B0(),X=$==="codex"?Y.codexUsageUrl:Y.claudeUsageUrl;try{let J=await $8(async()=>{let G=await fetch(X,{headers:Q,redirect:"error",signal:AbortSignal.timeout(8000)});if(G.status>=500)throw await G.body?.cancel().catch(()=>{}),new aj1(`upstream status ${G.status}`);return G},{maxAttempts:2,minTimeout:300,maxTimeout:1000,isRetriable:(G)=>G instanceof aj1||!(G instanceof DOMException)});if(!J.ok){if(await J.body?.cancel(),J.status===401)return YD("authorization");if(J.status===403)return YD("permission");if(J.status===429){let G=Number(J.headers.get("retry-after")),W=Number.isFinite(G)&&G>0?Math.min(600,Math.max(60,G)):300;return{...YD("rate_limited"),retryAt:new Date(Date.now()+W*1000).toISOString()}}return YD("provider_error")}try{return DQ8($,JSON.parse(await EB(J,65536)),new Date)}catch{return YD("invalid_response")}}catch{return YD("provider_error")}}async function OQ8($,Z,Q,Y){let X=Li6("sha256").update(Y).digest("hex"),J=JSON.stringify([$,Z,Q,X]),G=LQ8.get(J);if(G&&G.expiresAt>Date.now())return G.result;let W={result:ji6($,Y),expiresAt:Date.now()+60000};LQ8.set(J,W);let K=await W.result;if(K.retryAt)W.expiresAt=new Date(K.retryAt).getTime();return K}var aj1,LQ8,Oi6;var jQ8=L(()=>{qp();l1();g$();sj1();aj1=class aj1 extends Error{};LQ8=JB({ttlMs:600000,maxSize:500}),Oi6=Sx0.object({tokens:Sx0.object({access_token:Sx0.string().min(1),account_id:Sx0.string().min(1)})})});import{z as wi6}from"zod";var wQ8;var EQ8=L(()=>{A0();jQ8();sj1();wQ8=l({name:"SUBSCRIPTION_USAGE_GET",description:"Read the caller's linked Codex or Claude subscription usage windows and reset times. Never reads another member's plan or returns credentials.",annotations:{title:"Read personal subscription usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:wi6.object({provider:UQ8}),outputSchema:NQ8,handler:async({provider:$},Z)=>{t(Z),Z0(Z),await Z.access.check();let Q=k0(Z);if(!Q)throw Error("Unable to determine user ID");let Y=$==="codex"?Z.storage.codexSubscriptions:Z.storage.claudeSubscriptions;try{if(!await Y.find(Q))return{status:"disconnected",reason:null,checkedAt:null,retryAt:null,limitReached:null,windows:[]};let J=await Y.findLiveToken(Q);if(!J)return YD("authorization");return OQ8($,Z.organization.id,Q,J)}catch{return YD("provider_error")}}})});import TH from"zod";var PQ8;var zQ8=L(()=>{A0();B9();aG0();PQ8=l({name:"ORG_FS_PUBLIC_SETS_SYNC",description:"Re-sync the shared public skill-set volumes (/app/org/public/*) from their configured GitHub repos. Returns per-set written/deleted/unchanged counts.",inputSchema:TH.object({}),outputSchema:TH.object({results:TH.array(TH.union([TH.object({set:TH.string(),written:TH.number(),deleted:TH.number(),unchanged:TH.number()}),TH.object({set:TH.string(),error:TH.string()})]))}),handler:async($,Z)=>{return t(Z),await Z.access.check(),{results:await W8$(Z.db,{baseUrl:z5()})}}})});import{z as k8}from"zod";function $w1($){return{id:$.id,connectionId:$.connectionId,repositoryId:$.repositoryId,repoOwner:$.repoOwner,repoName:$.repoName,ref:$.ref,paths:$.paths,volume:$.volume,enabled:$.enabled,lastSyncedAt:$.lastSyncedAt,lastSyncError:$.lastSyncError,createdAt:$.createdAt}}async function zi6($,Z,Q){if(Q.repositoryId){let G=await $.storage.repositories.get(Q.repositoryId,Z);if(!G)throw Error(`repositoryId must be a repository connected to this organization: ${Q.repositoryId}`);let{owner:W,name:K}=k5(G);return{repositoryId:G.id,repoOwner:W,repoName:K,defaultBranch:G.defaultBranch}}let Y=Q.connectionId?await $.storage.connections.findById(Q.connectionId,Z):null,X=Y?NZ(Y):null;if(!Y||!X)throw Error("connectionId must be a repo-scoped GitHub connection in this organization");let J=await $.storage.repositories.findByRef(Z,{host:"github.com",path:`${X.owner}/${X.repo}`});if(!J)throw Error("Link this connection's repository before creating a sync");return{repositoryId:J.id,repoOwner:X.owner,repoName:X.repo,defaultBranch:J.defaultBranch}}var rj1,ej1,Pi6,AQ8,TQ8,qQ8,RQ8,MQ8;var VQ8=L(()=>{v3();n4();A0();ZB0();rj1=k8.array(k8.object({from:k8.string().describe("Repo subtree to sync ('' for the whole repo)"),to:k8.string().optional().describe("Volume subpath to place it at (defaults to the root)")})).min(1),ej1=k8.object({id:k8.string(),connectionId:k8.string().nullable(),repositoryId:k8.string().nullable(),repoOwner:k8.string(),repoName:k8.string(),ref:k8.string(),paths:rj1,volume:k8.string(),enabled:k8.boolean(),lastSyncedAt:k8.string().nullable(),lastSyncError:k8.string().nullable(),createdAt:k8.string()}),Pi6=k8.union([k8.object({id:k8.string(),volume:k8.string(),written:k8.number(),deleted:k8.number(),unchanged:k8.number()}),k8.object({id:k8.string(),volume:k8.string(),error:k8.string()})]);AQ8=l({name:"ORG_REPO_SYNC_CREATE",description:"Keep a git repository mirrored into a new org-fs volume. Takes exactly one of repositoryId (a connected GitHub/GitLab/Bitbucket repository) or connectionId (a legacy repo-scoped mcp-github connection), plus an EMPTY volume name; the repo is synced every ~10 minutes (and on "+"ORG_REPO_SYNC_RUN). The volume is a mirror \u2014 files not in the repo are "+"deleted on each sync \u2014 so never write into it directly. Sandboxes mount "+"it readonly at /app/org/<volume> starting with their next boot.",inputSchema:k8.object({repositoryId:k8.string().optional().describe("A repository connected to this organization (exactly one of repositoryId / connectionId)"),connectionId:k8.string().optional().describe("Legacy: a repo-scoped mcp-github connection in this organization"),volume:k8.string().describe("Target volume name (must be empty/new)"),ref:k8.string().optional().describe("Git ref to sync (default 'main')"),paths:rj1.optional().describe("Repo subtrees to sync (default: the whole repo)")}),outputSchema:k8.object({config:ej1}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z),Y=k0(Z);if(!Y)throw Error("User ID required");if(Boolean($.repositoryId)===Boolean($.connectionId))throw Error("Provide exactly one of repositoryId (a connected repository) or connectionId (a legacy repo-scoped mcp-github connection)");let X=eN0($.volume);if(X)throw Error(X);let J=await Z.storage.orgRepoSyncs.countByOrg(Q.id);if(J>=OZ1)throw Error(`This organization already has ${J} synced repositories (max ${OZ1})`);let{defaultBranch:G,...W}=await zi6(Z,Q.id,$),K=await Z.storage.orgFsEntries.listVolumeFiles(Q.id,$.volume);if(K.length>0)throw Error(`Volume "${$.volume}" already has ${K.length} files \u2014 pick a new, empty volume (the sync would delete them)`);try{let H=await Z.storage.orgRepoSyncs.create({organizationId:Q.id,...W,ref:$.ref??G??"main",paths:$.paths??[{from:""}],volume:$.volume,createdBy:Y});return{config:$w1(H)}}catch(H){if(H.code==="23505")throw Error(`Volume "${$.volume}" is already the target of another synced repository`);throw H}}}),TQ8=l({name:"ORG_REPO_SYNC_LIST",description:"List this organization's synced repositories with their last sync status.",inputSchema:k8.object({}),outputSchema:k8.object({configs:k8.array(ej1)}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z);return{configs:(await Z.storage.orgRepoSyncs.listByOrg(Q.id)).map($w1)}}}),qQ8=l({name:"ORG_REPO_SYNC_UPDATE",description:"Update a synced repository's ref, paths, or enabled flag. The target "+"volume is immutable \u2014 delete and recreate to change it.",inputSchema:k8.object({id:k8.string(),enabled:k8.boolean().optional(),ref:k8.string().optional(),paths:rj1.optional()}),outputSchema:k8.object({config:ej1}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z),Y=await Z.storage.orgRepoSyncs.update($.id,Q.id,{enabled:$.enabled,ref:$.ref,paths:$.paths});if(!Y)throw Error(`Sync config not found: ${$.id}`);return{config:$w1(Y)}}}),RQ8=l({name:"ORG_REPO_SYNC_DELETE",description:"Stop syncing a repository. The volume and its already-synced files are "+"left in place \u2014 delete them from the Library if unwanted.",inputSchema:k8.object({id:k8.string()}),outputSchema:k8.object({deleted:k8.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z);return{deleted:await Z.storage.orgRepoSyncs.delete($.id,Q.id)}}}),MQ8=l({name:"ORG_REPO_SYNC_RUN",description:"Sync a repository into its volume right now (the 'I just pushed' button). Returns written/deleted/unchanged counts, or the error that was recorded on the config.",inputSchema:k8.object({id:k8.string()}),outputSchema:k8.object({result:Pi6}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z),Y=await Z.storage.orgRepoSyncs.get($.id,Q.id);if(!Y)throw Error(`Sync config not found: ${$.id}`);if(!Y.enabled)throw Error("This sync is disabled \u2014 enable it with ORG_REPO_SYNC_UPDATE before running");return{result:await $B0(Z,Y)}}})});import{z as jU}from"zod";async function CQ8($,Z,Q){return(await $.storage.automations.listJiraTransitionTriggers(Z,Q===void 0?void 0:{jiraStatus:Q})).map((X)=>({automationId:X.automation_id,triggerId:X.id,jiraStatus:X.column_key??"",from:uz(X),prompt:Zu(X.automation.messages)||null,active:X.automation.active})).sort((X,J)=>X.jiraStatus.localeCompare(J.jiraStatus)||rh(X.from).localeCompare(rh(J.from)))}function Ti6($,Z){let Q=Z.kind==="earlier"?" (from an earlier column)":Z.kind==="later"?" (from a later column)":Z.kind==="statuses"?` (from ${Z.statuses.join(", ")})`:"";return`Jira: ${$}${Q}`}function IQ8($){return JSON.stringify($?Vt([{role:"user",parts:[{type:"text",text:$}]}]):[])}var kQ8,SQ8=({triggerId:$,...Z})=>Z,Zw1,Qw1;var _Q8=L(()=>{q8();oO();A0();Ut();r3();kQ8=jU.object({automationId:jU.string(),jiraStatus:jU.string(),from:eh,prompt:jU.string().nullable(),active:jU.boolean()});Zw1=l({name:"JIRA_AUTOMATION_LIST",description:"List the automations that fire when a Jira issue enters a status, with the status, the origin each answers and its instruction. A status with none is uneventful.",inputSchema:jU.object({}),outputSchema:jU.object({automations:jU.array(kQ8)}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z);return{automations:(await CQ8(Z,Q.id)).map(SQ8)}}}),Qw1=l({name:"JIRA_AUTOMATION_UPSERT",description:"Run the Super Agent on every issue that enters a Jira status from an origin (`from`, default any): creates an automation with a jira_transition trigger, or sets the instruction of the one already on that status for the same origin. Omit `prompt` for the agent's own instruction. The issue itself is always in the run's message, so the prompt is the instruction, not the whole message. A run on an issue that links an open pull request continues it.",inputSchema:jU.object({jiraStatus:h90.describe("A status name of the board \u2014 see JIRA_BOARD_COLUMNS_LIST."),from:eh.optional(),prompt:jU.string().max(gd$).nullable().optional().describe("What to do with an issue landing here; null for the default.")}),outputSchema:jU.object({automation:kQ8}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z),Y=k0(Z);if(!Y)throw Error("User ID required");let X=$.prompt?.trim()?$.prompt.trim():null,{jiraStatus:J}=$,G=$u($.from??{kind:"any"}),W=await CQ8(Z,Q.id,J),K=W.find((U)=>rh(U.from)===rh(G)),H=Xb0(J,G,W.filter((U)=>U!==K).map((U)=>U.from));if(H)throw Error(H);if(K){let U=await Z.storage.automations.update(K.automationId,Q.id,{messages:IQ8(X)});return{automation:{...SQ8(K),prompt:X,active:U.active}}}let F=await Z.storage.automations.create({organization_id:Q.id,name:Ti6(J,G),active:!0,created_by:Y,messages:IQ8(X),models:JSON.stringify({tier:"smart"}),virtual_mcp_id:hG(Q.id)});return await Z.storage.automations.addTrigger({automation_id:F.id,type:"jira_transition",column_key:J,from_kind:G.kind,from_statuses:G.kind==="statuses"?G.statuses:[]}),{automation:{automationId:F.id,jiraStatus:J,from:G,prompt:X,active:!0}}}})});function Ri6($){let Z=$.trim();if(Z==="")return null;let Y=/(?:\/(?:browse|issues)\/|[?&]selectedIssue=)([A-Za-z][A-Za-z0-9_]*-\d+)/.exec(Z)?.[1]??Z.split(/[?#]/)[0]??"",X=qi6.exec(Y);return X?.[1]?X[1].toUpperCase():null}function vQ8($){let Z=[],Q=[],Y=new Set;for(let X of $.split(/[\n,;]+/)){let J=X.trim();if(J==="")continue;let G=Ri6(J);if(!G){Q.push(J);continue}if(Y.has(G))continue;Y.add(G),Z.push(G)}return{keys:Z,invalid:Q}}var qi6;var bQ8=L(()=>{qi6=/^([A-Za-z][A-Za-z0-9_]*-\d+)$/});import{randomUUID as xQ8}from"crypto";import{z as tJ}from"zod";var Mi6=8000,fQ8=25,Yw1;var yQ8=L(()=>{UU();A0();bQ8();yO();q_0();Yw1=l({name:"JIRA_RUN_START",description:"Fire an automation on Jira issues right now \u2014 how a Jira automation is "+"tried out before it runs on every issue entering its status, or run on issues no move picked. Works with the integration disabled and the automation off. The automation's message is the instruction and the issue itself is always in the run's message. One run per issue, or one run for all of them with `together`. These are real runs on the real issues: a per-issue run continues the pull request the issue links and takes over any run still working that issue.",inputSchema:tJ.object({automationId:tJ.string().min(1).describe("The automation to fire \u2014 see JIRA_AUTOMATION_LIST or AUTOMATION_LIST."),issueKey:tJ.string().min(1).max(Mi6).describe("One or more issue keys (ABC-123) or pasted links, separated by newlines or commas. One run is started per issue."),together:tJ.boolean().optional().describe("Start ONE run that works every issue named, instead of one run per "+"issue \u2014 for work that spans them, like landing an epic's pull "+"requests in order. Its Jira tools take `issueKey` to say which issue they act on, and it starts fresh rather than continuing a pull request.")}),outputSchema:tJ.object({started:tJ.array(tJ.object({issueKey:tJ.string(),issueUrl:tJ.string()})),failed:tJ.array(tJ.object({issueKey:tJ.string(),error:tJ.string()})).describe("Issues whose run could not be started, and why."),unreadable:tJ.array(tJ.string()).describe("Pieces of the input that are not an issue key or link.")}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z),Y=k0(Z);if(!Y)throw Error("User ID required");let{keys:X,invalid:J}=vQ8($.issueKey);if(X.length===0)throw Error(`Found no Jira issue key in "${$.issueKey.slice(0,120)}" \u2014 expected something like ABC-123, or a link to the issue`);if(X.length>fQ8)throw Error(`${X.length} issues named, and ${fQ8} is the most one call starts \u2014 each is a real run`);let G=await Z.storage.automations.findById($.automationId,Q.id);if(!G)throw Error("Automation not found");if(G.system_key)throw Error("A built-in automation runs on the board's cards and can't be run on Jira issues by hand.");let W=await Z.storage.jiraIntegrations.getByOrg(Q.id);if(!W)throw Error("Jira is not connected \u2014 save credentials with JIRA_INTEGRATION_UPSERT first");let K=new QQ(W.siteUrl,W.email,W.apiToken),H=[],F=[];for(let D of X)try{H.push((await K.getIssue(D)).key)}catch(O){F.push({issueKey:D,error:O instanceof Error?O.message:String(O)})}let U=(await Z.storage.automations.listTriggers(G.id)).find((D)=>D.type==="jira_transition")?.id??null,N=$.together?[H]:H.map((D)=>[D]),B=[];for(let D of N){if(D.length===0)continue;let O=await Lb0({automationId:G.id,organizationId:Q.id,triggerId:U,target:{kind:"jira",issues:D,eventKey:`manual:${xQ8()}`,manual:{requestedBy:Y}}},{idempotencyKey:`jira-manual:${xQ8()}`}).catch((j)=>({skipped:"rejected",error:{message:j instanceof Error?j.message:String(j)}}));if("skipped"in O){let j=O.error?.message??`skipped: ${O.skipped}`;F.push(...D.map((w)=>({issueKey:w,error:j})));continue}B.push(...D.map((j)=>({issueKey:j,issueUrl:Vz(W.siteUrl,j)})))}return{started:B,failed:F,unreadable:J}}})});import{z as E4}from"zod";function hQ8($){return{id:$.id,siteUrl:$.siteUrl,email:$.email,boardId:$.boardId,boardName:$.boardName,webhookSecret:$.webhookSecret,enabled:$.enabled,createdAt:$.createdAt}}async function uQ8($,Z){let Q=await $.storage.jiraIntegrations.getByOrg(Z);if(!Q)throw Error("Jira is not connected \u2014 save credentials with JIRA_INTEGRATION_UPSERT first");return Q}var gQ8,lQ8,mQ8,cQ8,dQ8,iQ8;var pQ8=L(()=>{A0();yO();_Q8();yQ8();iU1();gQ8=E4.object({id:E4.string(),siteUrl:E4.string(),email:E4.string(),boardId:E4.string().nullable(),boardName:E4.string().nullable(),webhookSecret:E4.string(),enabled:E4.boolean(),createdAt:E4.string()});lQ8=l({name:"JIRA_INTEGRATION_GET",description:"Get this organization's Jira integration config. Null when Jira is not connected. Never returns the API token.",inputSchema:E4.object({}),outputSchema:E4.object({integration:gQ8.nullable()}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z),Y=await Z.storage.jiraIntegrations.getByOrg(Q.id);return{integration:Y?hQ8(Y):null}}}),mQ8=l({name:"JIRA_INTEGRATION_UPSERT",description:"Connect or update this organization's Jira integration. Credentials (siteUrl + email + apiToken) are required on first connect and are validated against Jira before saving; omitted fields keep their current value. Enabling requires a board.",inputSchema:E4.object({siteUrl:E4.string().optional().describe("Jira site, e.g. yourcompany.atlassian.net"),email:E4.string().optional().describe("Atlassian account email"),apiToken:E4.string().optional().describe("Jira API token for that account"),boardId:E4.string().nullable().optional().describe("Jira board the integration watches (null clears it)"),boardName:E4.string().nullable().optional().describe("Display name of that board"),enabled:E4.boolean().optional()}),outputSchema:E4.object({integration:gQ8}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z),Y=k0(Z);if(!Y)throw Error("User ID required");let X=await Z.storage.jiraIntegrations.getByOrg(Q.id),J=$.siteUrl??X?.siteUrl,G=$.email??X?.email,W=$.apiToken??X?.apiToken;if(!J||!G||!W)throw Error("siteUrl, email and apiToken are required to connect Jira");let K=vU1(J);if(!X||K!==X.siteUrl||G!==X.email||$.apiToken!==void 0)try{await new QQ(K,G,W).myself()}catch(B){throw Error(`Could not authenticate with Jira: ${B instanceof Error?B.message:String(B)}`)}let F=$.boardId!==void 0?$.boardId:X?.boardId??null,U=$.enabled??X?.enabled??!1;if(U&&!F)throw Error("Select a board before enabling the Jira integration");let N=await Z.storage.jiraIntegrations.upsert({organizationId:Q.id,siteUrl:K,email:G,apiToken:W,boardId:F,boardName:$.boardName!==void 0?$.boardName:X?.boardName??null,enabled:U,createdBy:X?.createdBy??Y});return{integration:hQ8(N)}}}),cQ8=l({name:"JIRA_INTEGRATION_DELETE",description:"Disconnect Jira from this organization.",inputSchema:E4.object({}),outputSchema:E4.object({deleted:E4.boolean()}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z);return{deleted:await Z.storage.jiraIntegrations.delete(Q.id)}}}),dQ8=l({name:"JIRA_BOARDS_LIST",description:"List the Jira boards visible to the connected credentials \u2014 for picking "+"which board the integration watches. Returns at most 200; pass `query` to search board names past them.",inputSchema:E4.object({query:E4.string().trim().max(255).optional().describe("Case-insensitive substring of the board's name")}),outputSchema:E4.object({boards:E4.array(E4.object({id:E4.number(),name:E4.string(),type:E4.string(),projectKey:E4.string().optional(),projectName:E4.string().optional()}))}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z),Y=await uQ8(Z,Q.id);return{boards:await new QQ(Y.siteUrl,Y.email,Y.apiToken).listBoards($.query||void 0)}}}),iQ8=l({name:"JIRA_BOARD_COLUMNS_LIST",description:"List a Jira board's columns with the status names each groups, in the names the team knows.",inputSchema:E4.object({boardId:E4.string()}),outputSchema:E4.object({columns:E4.array(E4.object({name:E4.string(),statuses:E4.array(E4.string())}))}),handler:async($,Z)=>{t(Z),await Z.access.check();let Q=Z0(Z),Y=await uQ8(Z,Q.id);return{columns:await new QQ(Y.siteUrl,Y.email,Y.apiToken).getBoardColumns($.boardId)}}})});var nQ8,tQ8;var oQ8=L(()=>{nQ8=[{name:"agents-create",title:"Create Agents",description:"Build a new agent for a specific role or workflow.",text:`# Create agent
2624
2624
 
2625
2625
  Goal: create a new agent that has a clear role, the correct connections, and instructions that are specific enough to be reliable.
@@ -4556,7 +4556,7 @@ ${X}`:`${Y}
4556
4556
 
4557
4557
  ${X}
4558
4558
  ${J.slice(Y.length).trimStart()}`}function FE8($){return $?.match(yF5)?.[1]?.toLowerCase()??null}async function lF5($,Z,Q){let[Y,X]=await Promise.all([$.client.listDecofileEntries(Z,$.packagePath),$.client.listDecofileEntries(Q,$.packagePath)]),J=new Map(WW(Y,$.packagePath).map((H)=>[H.path,H.sha])),G=WW(X,$.packagePath),W=new Set(G.map((H)=>H.path)),K=[];for(let H of G){if(J.get(H.path)===H.sha)continue;K.push({path:H.path,copyFromRef:Q})}for(let H of J.keys())if(!W.has(H))K.push({path:H,deleted:!0});return{changes:K,tree:Y,next:G.map((H)=>({stem:H.stem,sha:H.sha}))}}async function HE8($,Z){try{return await ZY0($.client,$.packagePath,Z)}catch(Q){if(Q instanceof u2)return null;throw Q}}async function UE8($,Z,Q){let Y=XO($.packagePath),[X,J]=await Promise.all([$.client.getEntriesAtPaths(Z,[Y]),$.client.getEntriesAtPaths(Q,[Y])]);if(X.get(Y)?.sha===J.get(Y)?.sha)return!1;let[G,W]=await Promise.all([HE8($,Z),HE8($,Q)]);return G!==W}async function NE8($,Z){if(!sB0(Z))throw new Dl;if(!await wq1($.store,$.site,Z))throw new Dl}async function BE8($,Z){await NE8($,Z);let Q=await C5($.client,$.mainBranch);return UE8($,Q,Z)}async function DE8($,Z,Q={},Y={}){await NE8($,Z);let X=await $.client.readCommit(Z);if(!X)throw new Dl;let J=await C5($.client,$.mainBranch),G=await lF5($,J,Z);if(G.changes.length===0)return{result:"up-to-date"};let W=await UE8($,J,Z);if(W)console.info("hosted reapply: schema differs",{site:$.site,target:Z,head:J});let K=await Eq1($,J,G,uF5(X,Z,Q.coAuthor));return{result:"merged",sha:K,release:await Jh0($,K,Y),schemaChanged:W}}var Dl,fF5="Reapplied-From",yF5;var qq1=L(()=>{Tp();W5();iK();GB();YY0();Xh0();KE8();Dl=class Dl extends Error{constructor(){super("This commit has no release");this.name="NotPublishedError"}};yF5=/^Reapplied-From:\s*([0-9a-f]{40})\s*$/im});async function LE8($,Z,Q){let[Y,X,J]=await Promise.all([QY0($.store,$.site),G2$($.store,$.site),Z.listCommits({ref:$.mainBranch,since:cF5,cursor:Q,limit:mF5})]),G=new Map(J.items.map((H)=>[H.sha,H.date])),W=J.items.map((H)=>FE8(H.body));await Promise.all([...new Set(W)].filter((H)=>H!==null&&!G.has(H)).map(async(H)=>{let F=await $.client.readCommit(H).catch(()=>null);if(F)G.set(H,F.date)}));let K=J.items.map((H,F)=>{let U=W[F];return{sha:H.sha,date:H.date,message:H.message,author:H.author.name??H.author.login,hasRelease:X.has(H.sha),reapplyOf:U?{sha:U,date:G.get(U)??null}:null}});return{current:Y,commits:K,nextCursor:J.nextCursor}}async function OE8($){let Z=await C5($.client,$.mainBranch),Q=await Pq1($,Z);return zq1($,{revision:Z,schemaHash:Q,publishedAt:new Date().toISOString()})}var mF5=50,cF5="1970-01-01T00:00:00Z";var jE8=L(()=>{W5();GB();YY0();qq1()});function wE8($){return`site-tokens:${$}`}function dF5($){let Z=$?.tokens;if(!Array.isArray(Z))return[];return Z.filter((Q)=>typeof Q==="object"&&Q!==null&&typeof Q.kid==="string"&&typeof Q.iat==="number")}function EE8($){return crypto.subtle.importKey("pkcs8",Buffer.from($,"base64"),{name:"Ed25519"},!1,["sign"])}async function iF5($,Z){let Q=(J)=>Rq1(new TextEncoder().encode(JSON.stringify(J))),Y=`${Q({alg:"EdDSA",typ:"JWT"})}.${Q({site:Z.site,kid:Z.kid,iat:Z.iat})}`,X=await crypto.subtle.sign({name:"Ed25519"},$,new TextEncoder().encode(Y));return`${Y}.${Rq1(X)}`}function PE8($){let Z=async(Q,Y)=>dF5(await $.kv.get(Q,wE8(Y)));return{list:Z,async issue(Q,Y){let X=await Z(Q,Y),J={kid:Rq1(crypto.getRandomValues(new Uint8Array(16))),iat:Math.floor(Date.now()/1000)},G=await iF5(await $.signingKey(),{site:Y,...J});return await $.kv.set(Q,wE8(Y),{tokens:[...X,J]}),{token:G,record:J}}}}var Rq1=($)=>Buffer.from($ instanceof Uint8Array?$:new Uint8Array($)).toString("base64url");function nF5(){let $=dq();return $?{store:$,purge:Zh0()}:null}async function Uh0($){let Z=$.var.delivery();if(!Z)return null;let Q=$.get("hostedProject"),Y=await $.var.repoClientFor($.var.studioContext,Q.organizationId,Q.repository);return{client:Y,packagePath:Q.packagePath,mainBranch:await Y.getDefaultBranch(),store:Z.store,purge:Z.purge,site:Q.site,previewHosts:await Qh0({site:Q.site,metadata:Q.metadata,domains:$.var.siteDomains})}}function zE8($){let Z=B0().siteTokenSigningKey;if(!Z)return null;return PE8({kv:$.var.studioContext.storage.kv,signingKey:()=>EE8(Z)})}function is($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof u2)return $.json({error:Q},409);if(Z instanceof Gh0)return console.error("hosted: latest.json update failed",{error:Q}),$.json({error:"latest-update-failed"},502);let Y=x3(Z);if(Y!==null)return $.json({error:Q},Y===404?404:502);return console.error("hosted: request failed",{error:Q}),$.json({error:Q},500)}function AE8($={}){let Z=new $1,Q=$.repoClientFor??y3,Y=$.insightsFor??FE$,X=$.delivery??nF5;return Z.use("*",async(J,G)=>{J.set("repoClientFor",Q),J.set("delivery",X),J.set("siteDomains",$.siteDomains),await G()}),Z.use("/:virtualMcpId/*",pF5),Z.get("/:virtualMcpId/releases",async(J)=>{try{let G=await Uh0(J);if(!G)return J.json(Fh0,503);let W=J.get("hostedProject"),K=await Y(J.var.studioContext,W.organizationId,W.repository);return J.json(await LE8(G,K,J.req.query("cursor")??null),200,{"Cache-Control":"no-store"})}catch(G){return is(J,G)}}),Z.post("/:virtualMcpId/releases/retry",async(J)=>{try{let G=await Uh0(J);if(!G)return J.json(Fh0,503);let W=await J.req.json().catch(()=>({})),K=await OE8(G),H=J.var.studioContext.auth?.user?.id;if(typeof W.branch==="string"&&W.branch&&typeof W.draftEtag==="string"&&W.draftEtag&&H){let F=J.get("hostedProject");await Aq1(G,$D0({kv:J.var.studioContext.storage.kv,store:G.store}),{organizationId:F.organizationId,virtualMcpId:F.virtualMcpId,branch:W.branch,site:F.site,editor:H},W.draftEtag)}return J.json({current:K})}catch(G){return is(J,G)}}),Z.get("/:virtualMcpId/releases/:sha/reapply",async(J)=>{try{let G=await Uh0(J);if(!G)return J.json(Fh0,503);return J.json({schemaChanged:await BE8(G,J.req.param("sha"))})}catch(G){if(G instanceof Dl)return J.json({error:G.message},404);return is(J,G)}}),Z.post("/:virtualMcpId/releases/:sha/reapply",async(J)=>{try{let G=await Uh0(J);if(!G)return J.json(Fh0,503);let W=await DE8(G,J.req.param("sha"),{coAuthor:BO(J.var.studioContext)});return J.json(W)}catch(G){if(G instanceof Dl)return J.json({error:G.message},404);if(G instanceof Bl)return J.json({error:"main-moved"},409);return is(J,G)}}),Z.get("/:virtualMcpId/site-tokens",async(J)=>{let G=J.get("hostedProject"),W=zE8(J);if(!W)return J.json({error:"site tokens not configured"},503);return J.json({site:G.site,tokens:await W.list(G.organizationId,G.site)})}),Z.post("/:virtualMcpId/site-tokens",async(J)=>{let G=J.get("hostedProject"),W=zE8(J);if(!W)return J.json({error:"site tokens not configured"},503);try{let K=await J.var.repoClientFor(J.var.studioContext,G.organizationId,G.repository),H=await iq(K,G.packagePath,await K.getDefaultBranch());if(await ui(J.var.studioContext.storage.virtualMcps,{id:G.virtualMcpId,organizationId:G.organizationId,metadata:G.metadata},H,J.var.studioContext.auth?.user?.id??"system"),!H)return J.json({error:"not a Blocks v8 site"},409);return J.json(await W.issue(G.organizationId,G.site))}catch(K){return is(J,K)}}),Z}var pF5,Fh0;var TE8=L(()=>{hF();H8();hg0();C3();uF();W5();GB();Fq1();ZD0();YY0();jq1();Xh0();jE8();qq1();t40();pq();hi();l1();cP();pF5=_s(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);if(!Q.auth?.user?.id)return $.json({error:"Unauthorized"},401);if(!await qQ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let X=$.req.param("virtualMcpId")??"",J=await Q.storage.virtualMcps.findById(X);if(!J||J.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);if(!CQ(await e7(Q),X))return $.json({error:"Virtual MCP not found"},404);let G=J.metadata??null,W=NW(G,J.connections?.map((H)=>H.connection_id)??[]);if(!W)return $.json({error:"Project has no repository"},404);try{let H=await $.var.repoClientFor(Q,Y.id,W);if(!await YD0({projects:Q.storage.virtualMcps,project:{id:X,organizationId:Y.id,metadata:G},by:Q.auth.user.id,client:H,mainBranch:await H.getDefaultBranch()}))return $.json({error:"Not found"},404)}catch(H){return is($,H)}let K=await QD0(Q.storage.orgSites,X,Y.id);if(!K)return $.json(gi,409);return $.set("hostedProject",{organizationId:Y.id,virtualMcpId:X,site:K,packagePath:WB(G),repository:W,metadata:G}),Z()}),Fh0={error:"hosted delivery not configured"}});var qE8=($)=>{let Z=new $1;if(Z.use("*",Qs),Z.use("*",bN8),Z.route("/",_N8($.voiceSessions)),Z.route("/",iy0()),Z.route("/",EB8()),Z.route("/",SB8()),Z.route("/",DB8()),Z.route("/",xO8()),Z.route("/",yO8()),Z.route("/",VO8()),Z.route("/",vO8()),Z.route("/",kO8()),Z.route("/",fg0()),Z.route("/tools",dO8()),Z.route("/",lO8()),Z.route("/",WO8({kvStorage:$.kvStorage})),Z.route("/",JO8()),Z.route("/fs",wO8({getConnection:$.getNatsConnection})),Z.route("/sandbox",Fw8()),Z.route("/decofile",YE8()),Z.route("/hosted",AE8()),Z.route("/",qO8()),Z.route("/",PO8()),Z.route("/deco-sites",ny0()),Z.route("/hosting",iN8()),Z.route("/monitor",YB8()),Z.route("/order-monitor",FB8()),Z.route("/sso",hy0()),Z.route("/",yg0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",uN8()),$.mountDevAssets)Z.route("/dev-assets",$g0({orgFromPath:!0}));Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth);for(let Q of TT1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",qG8()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of TT1)Z.route(Q,AO8());return Z.route("/mcp",Yx0()),Z.route("/mcp/self",_g0()),Z.route("/mcp",Gx0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var RE8=L(()=>{H8();vN8();xN8();Iy0();lN8();s21();pN8();XB8();UB8();Zg0();_2();i21();PB8();QA1();GO8();KO8();EO8();zO8();WZ0();f21();Wx0();AT1();TO8();RO8();IO8();CO8();MT1();fO8();gO8();mO8();VT1();iO8();IT1();Xx0();Uw8();XE8();TE8()});import{z as Ll}from"zod";class Mq1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new IE8.Kvm(Nh0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Nh0.StorageType.Memory,ttl:kE8.nanos(_O),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}async conversationAgent($){let Z=await this.kv(),Q=`agent.${$.conversationKey}`,Y=Date.now()+45000;while(Date.now()<Y){let X=await Z.get(Q),J=X?.operation==="PUT"?VE8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await G$(200);continue}let G=ME8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await G$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,ME8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new R1(503,{message:"Voice conversation is starting; try again"})}async createSession($){let Z=this.adapter.forConversationModel($.model),Q=await this.conversationAgent(Z);try{return{provider:"elevenlabs",conversationToken:await Z.createConversationToken(Q)}}catch(Y){let X=await this.kv(),J=`agent.${Z.conversationKey}`,G=await X.get(J),W=G?.operation==="PUT"?VE8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var Nh0,IE8,kE8,ME8,VE8;var CE8=L(()=>{K3();_B();g$();Nh0=_(pH(),1),IE8=_(Eq(),1),kE8=_(FA(),1),ME8=new TextEncoder,VE8=Ll.discriminatedUnion("state",[Ll.object({state:Ll.literal("ready"),agentId:Ll.string()}),Ll.object({state:Ll.literal("creating"),expiresAt:Ll.number()})])});import{z as ps}from"zod";function tF5($){return{model:$.model,instructions:`${sd$}
4559
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class Vq1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:tF5({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:ps.object({session:ps.object({id:ps.string().min(1)}),transport:ps.object({type:ps.literal("webrtc"),sdp:ps.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var SE8=L(()=>{_B()});var _E8;var vE8=L(()=>{_E8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function Iq1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:td$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:_E8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:_O/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var bE8=L(()=>{_B();vE8()});import{z as sJ}from"zod";import{createHash as oF5,createHmac as sF5}from"crypto";class Bh0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=oF5("sha256").update(JSON.stringify(Iq1($))).digest("hex"),this.conversationKey=sF5("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Bh0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=sJ.object({agents:sJ.array(sJ.object({agent_id:sJ.string(),name:sJ.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return sJ.object({platform_settings:sJ.object({auth:sJ.object({enable_auth:sJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...Iq1(this.config)},AbortSignal.timeout(15000));return sJ.object({agent_id:sJ.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return sJ.object({token:sJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return sJ.object({token:sJ.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var xE8=L(()=>{bE8()});import{createHmac as aF5,timingSafeEqual as rF5}from"crypto";import{z as ns}from"zod";function yE8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return aF5("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function gE8($,Z){let Q=Buffer.from(JSON.stringify(fE8.parse($))).toString("base64url");return`${Q}.${yE8(Q,Z)}`}function hE8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(yE8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!rF5(W,G))return null;try{let K=fE8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+_O)return null;return K.data}catch{return null}}var fE8;var uE8=L(()=>{_B();fE8=ns.object({sessionId:ns.string().uuid(),organizationId:ns.string().min(1).max(256),userId:ns.string().min(1).max(256),threadId:ns.string().min(1).max(256),expiresAt:ns.number().int().positive()})});import{z as kq1}from"zod";function lE8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return Cq1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var Cq1;var mE8=L(()=>{Cq1=kq1.object({provider:kq1.enum(["elevenlabs","openai"]),model:kq1.string().trim().min(1).max(128)})});import{createHash as eF5}from"crypto";import{z as ts}from"zod";function os($){return`user.${eF5("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class _q1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new cE8.Kvm(Lh0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Lh0.StorageType.Memory,ttl:dE8.nanos(_O),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=lE8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+_O},W=gE8(G,this.deps.secret),K=await this.kv(),H=os(G),F=await K.get(H),U=F?.operation==="PUT"?Dh0.parse(F.json()):null,N=Sq1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:os($)});return{token:W,...D,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=hE8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=os(Q),J=await Y.get(X),G=J?.operation==="PUT"?Dh0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,Sq1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=os(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Dh0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,Sq1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(os($));if(Q?.operation==="PUT"&&Dh0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(os($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Lh0,cE8,dE8,Dh0,Sq1;var iE8=L(()=>{K3();_B();uE8();mE8();Lh0=_(pH(),1),cE8=_(Eq(),1),dE8=_(FA(),1),Dh0=ts.object({sessionId:ts.string().uuid(),expiresAt:ts.number(),connected:ts.boolean().optional(),conversation:Cq1.optional(),characters:ts.number().int().nonnegative(),requests:ts.number().int().nonnegative()}),Sq1=new TextEncoder});import{z as c1}from"zod";function jD($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function HU5($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function FU5($,Z,Q){try{return JSON.parse($)}catch{throw new tE8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function UU5($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:FU5(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function NU5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?IN(Q.function.parameters):IN({type:"object",properties:{}});return[Q.function.name,a$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function BU5($){if(!$)return;return{openai:{response_format:$}}}function DU5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function pE8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function nE8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var $U5=256,ZU5,QU5,YU5,XU5,JU5,GU5,WU5,KU5,tE8,oE8,sE8;var aE8=L(()=>{u4();H8();Ss();DU();ZU5=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),QU5=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),YU5=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(QU5).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),XU5=c1.object({type:c1.literal("text")}),JU5=c1.object({type:c1.literal("json_object")}),GU5=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),WU5=c1.union([XU5,JU5,GU5]),KU5=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(YU5),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(ZU5).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:WU5.optional(),user:c1.string().optional()});tE8=class tE8 extends Error{constructor($){super($);this.name="MessageConversionError"}};oE8=new $1;oE8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(jD("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(jD("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(jD("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=KU5.safeParse(Y);if(!X.success){let j=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(jD(`Invalid request: ${j.message}`,"invalid_request_error",j.path.length>0?j.path.join("."):null),400)}let J=X.data,G=HU5(J.model);if(!G)return $.json(jD("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let w=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>BT(E.providerId));if(!w)return $.json(jD("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=w.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(jD(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=UU5(J.messages),N=J.tools?NU5(J.tools):void 0,B=BU5(J.response_format),D=DU5(),O=Math.floor(Date.now()/1000);if(J.stream)return Cj($,async(j)=>{let w=pE8(F,U,N,J,B,$.req.raw.signal);try{let E=Rn(w),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let M=z;z="",await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of E.stream){if(!P&&(M.type==="text-delta"||M.type==="tool-call"))await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(M.type==="text-delta"){if(z+=M.text,z.length>=$U5)await A()}else if(M.type==="tool-call"){await A();let f=T++;await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await A(),await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:nE8(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await A(),await j.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await j.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let j=pE8(F,U,N,J,B,$.req.raw.signal),w=await xO(j),E={role:"assistant",content:w.text||null};if(w.toolCalls&&w.toolCalls.length>0)E.tool_calls=w.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:nE8(w.finishReason)}],usage:{prompt_tokens:w.usage?.inputTokens??0,completion_tokens:w.usage?.outputTokens??0,total_tokens:w.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(jD("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(jD(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(jD(X.message,"server_error"),500)}});sE8=oE8});function LU5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function rE8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=k0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!l5(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||_9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(xT(U)!==J)continue;if(!LU5(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var eE8=L(()=>{H8();KX()});var Oh0;var vq1=L(()=>{Oh0={name:"decocms",version:"4.535.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0",kysely:"^0.28.12","posthog-node":"^5.0.0"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/blocks":"8.8.0","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function wU5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??jU5}}var $P8,jU5="https://ph.studio.decocms.com",ZP8;var QP8=L(()=>{H8();we();ih();B9();l1();Qj();P21();vq1();$P8=new $1;$P8.get("/",($)=>{let Z={version:Oh0.version,theme:z4$(),...GF().logo&&{logo:GF().logo},...nO()&&{internalUrl:z8$()},...B0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!B0().controlplaneRestUrl&&!!B0().controlplaneServiceToken,hostingControlPlaneGa:B0().hostingControlPlaneGa,monitorEnabled:!!B0().clickhouseAnalyticsUrl&&!!B0().clickhouseAnalyticsPassword,monitorGa:B0().monitorGa,orderMonitorEnabled:!!B0().orderMonitorIngestUrl&&xW(),plansEnabled:B0().plansEnabled,auth:zU8(),posthog:wU5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:_U()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ZP8=$P8});import{z as M$}from"zod";var EU5,YP8;var XP8=L(()=>{EU5=M$.object({check_id:M$.string(),title:M$.string(),description:M$.string().optional(),impact:M$.string().optional(),why:M$.string().optional(),category:M$.string(),severity:M$.string(),value_band:M$.string().optional(),value_driver:M$.string().optional(),controllability:M$.string().optional(),pages:M$.array(M$.string()),tasks:M$.array(M$.string()),evidence:M$.string(),sample_scope:M$.string().optional(),sources:M$.array(M$.string())}),YP8=M$.object({domain:M$.string(),brand:M$.string(),favicon:M$.string().optional(),scanned_at:M$.string().nullable(),lang:M$.string(),score:M$.number().nullable(),band:M$.string().nullable(),totals:M$.object({measured:M$.number(),registry_total:M$.number(),passed:M$.number(),failed:M$.number(),blocked:M$.number()}),buckets:M$.array(M$.object({id:M$.enum(["critical","important","worth"]),label:M$.string(),items:M$.array(EU5)})),passing:M$.object({count:M$.number(),items:M$.array(M$.object({check_id:M$.string(),title:M$.string()}))}),not_measured:M$.object({count:M$.number(),groups:M$.array(M$.object({reason:M$.string(),label:M$.string(),count:M$.number(),checks:M$.array(M$.string())}))}),categories:M$.array(M$.object({key:M$.string(),label:M$.string(),score:M$.number().nullable(),band:M$.string().nullable(),pass:M$.number(),fail:M$.number()})),screenshots:M$.array(M$.object({url:M$.string(),page_type:M$.string().optional(),viewport:M$.enum(["desktop","mobile"]),image_url:M$.string()}))})});function JP8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${bK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function jh0($,Z={}){let Q=await fetch(JP8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return YP8.parse(await Q.json())}async function GP8($,Z={}){let Q=await fetch(JP8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var bq1=L(()=>{XP8();cL()});import{join as WP8}from"path";async function zU5($){try{let Z=await jh0($,{signal:AbortSignal.timeout(PU5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||mw1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function BG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function AU5($,Z){let Q=Tu($),Y=Z?.brand?.trim()||mw1(Q),X=PJ8(Q,128),G=`${(B0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=zJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${BG(W)}</title>`,`<meta name="description" content="${BG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${BG(W)}" />`,`<meta property="og:description" content="${BG(K)}" />`,`<meta property="og:url" content="${BG(G)}" />`,`<meta property="og:image" content="${BG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${BG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${BG(W)}" />`,`<meta name="twitter:description" content="${BG(K)}" />`,`<meta name="twitter:image" content="${BG(H)}" />`,`<meta name="twitter:image:alt" content="${BG(F)}" />`,`<link rel="canonical" href="${BG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${BG(G)}.md" />`,`<link rel="icon" href="${BG(X)}" sizes="any" />`].join(`
4559
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class Vq1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:tF5({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:ps.object({session:ps.object({id:ps.string().min(1)}),transport:ps.object({type:ps.literal("webrtc"),sdp:ps.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var SE8=L(()=>{_B()});var _E8;var vE8=L(()=>{_E8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function Iq1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:td$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:_E8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:_O/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var bE8=L(()=>{_B();vE8()});import{z as sJ}from"zod";import{createHash as oF5,createHmac as sF5}from"crypto";class Bh0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=oF5("sha256").update(JSON.stringify(Iq1($))).digest("hex"),this.conversationKey=sF5("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Bh0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=sJ.object({agents:sJ.array(sJ.object({agent_id:sJ.string(),name:sJ.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return sJ.object({platform_settings:sJ.object({auth:sJ.object({enable_auth:sJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...Iq1(this.config)},AbortSignal.timeout(15000));return sJ.object({agent_id:sJ.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return sJ.object({token:sJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return sJ.object({token:sJ.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var xE8=L(()=>{bE8()});import{createHmac as aF5,timingSafeEqual as rF5}from"crypto";import{z as ns}from"zod";function yE8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return aF5("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function gE8($,Z){let Q=Buffer.from(JSON.stringify(fE8.parse($))).toString("base64url");return`${Q}.${yE8(Q,Z)}`}function hE8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(yE8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!rF5(W,G))return null;try{let K=fE8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+_O)return null;return K.data}catch{return null}}var fE8;var uE8=L(()=>{_B();fE8=ns.object({sessionId:ns.string().uuid(),organizationId:ns.string().min(1).max(256),userId:ns.string().min(1).max(256),threadId:ns.string().min(1).max(256),expiresAt:ns.number().int().positive()})});import{z as kq1}from"zod";function lE8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return Cq1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var Cq1;var mE8=L(()=>{Cq1=kq1.object({provider:kq1.enum(["elevenlabs","openai"]),model:kq1.string().trim().min(1).max(128)})});import{createHash as eF5}from"crypto";import{z as ts}from"zod";function os($){return`user.${eF5("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class _q1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new cE8.Kvm(Lh0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Lh0.StorageType.Memory,ttl:dE8.nanos(_O),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=lE8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+_O},W=gE8(G,this.deps.secret),K=await this.kv(),H=os(G),F=await K.get(H),U=F?.operation==="PUT"?Dh0.parse(F.json()):null,N=Sq1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let D=await J.createSession({language:Q,model:X.model,safetyIdentifier:os($)});return{token:W,...D,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=hE8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=os(Q),J=await Y.get(X),G=J?.operation==="PUT"?Dh0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,Sq1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=os(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Dh0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,Sq1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(os($));if(Q?.operation==="PUT"&&Dh0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(os($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Lh0,cE8,dE8,Dh0,Sq1;var iE8=L(()=>{K3();_B();uE8();mE8();Lh0=_(pH(),1),cE8=_(Eq(),1),dE8=_(FA(),1),Dh0=ts.object({sessionId:ts.string().uuid(),expiresAt:ts.number(),connected:ts.boolean().optional(),conversation:Cq1.optional(),characters:ts.number().int().nonnegative(),requests:ts.number().int().nonnegative()}),Sq1=new TextEncoder});import{z as c1}from"zod";function jD($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function HU5($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function FU5($,Z,Q){try{return JSON.parse($)}catch{throw new tE8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function UU5($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:FU5(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function NU5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?IN(Q.function.parameters):IN({type:"object",properties:{}});return[Q.function.name,a$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function BU5($){if(!$)return;return{openai:{response_format:$}}}function DU5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function pE8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function nE8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var $U5=256,ZU5,QU5,YU5,XU5,JU5,GU5,WU5,KU5,tE8,oE8,sE8;var aE8=L(()=>{u4();H8();Ss();DU();ZU5=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),QU5=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),YU5=c1.discriminatedUnion("role",[c1.object({role:c1.literal("system"),content:c1.string(),name:c1.string().optional()}),c1.object({role:c1.literal("user"),content:c1.union([c1.string(),c1.array(c1.union([c1.object({type:c1.literal("text"),text:c1.string()}),c1.object({type:c1.literal("image_url"),image_url:c1.object({url:c1.string(),detail:c1.string().optional()})})]))]),name:c1.string().optional()}),c1.object({role:c1.literal("assistant"),content:c1.string().nullable().optional(),name:c1.string().optional(),tool_calls:c1.array(QU5).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),XU5=c1.object({type:c1.literal("text")}),JU5=c1.object({type:c1.literal("json_object")}),GU5=c1.object({type:c1.literal("json_schema"),json_schema:c1.object({name:c1.string(),description:c1.string().optional(),schema:c1.record(c1.string(),c1.unknown()),strict:c1.boolean().optional()})}),WU5=c1.union([XU5,JU5,GU5]),KU5=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(YU5),stream:c1.boolean().optional().default(!1),temperature:c1.number().min(0).max(2).optional(),max_tokens:c1.number().positive().optional(),top_p:c1.number().min(0).max(1).optional(),frequency_penalty:c1.number().min(-2).max(2).optional(),presence_penalty:c1.number().min(-2).max(2).optional(),stop:c1.union([c1.string(),c1.array(c1.string())]).optional(),tools:c1.array(ZU5).optional(),tool_choice:c1.union([c1.literal("auto"),c1.literal("none"),c1.literal("required"),c1.object({type:c1.literal("function"),function:c1.object({name:c1.string()})})]).optional(),response_format:WU5.optional(),user:c1.string().optional()});tE8=class tE8 extends Error{constructor($){super($);this.name="MessageConversionError"}};oE8=new $1;oE8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(jD("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(jD("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(jD("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=KU5.safeParse(Y);if(!X.success){let j=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(jD(`Invalid request: ${j.message}`,"invalid_request_error",j.path.length>0?j.path.join("."):null),400)}let J=X.data,G=HU5(J.model);if(!G)return $.json(jD("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let w=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>BT(E.providerId));if(!w)return $.json(jD("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=w.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(jD(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=UU5(J.messages),N=J.tools?NU5(J.tools):void 0,B=BU5(J.response_format),D=DU5(),O=Math.floor(Date.now()/1000);if(J.stream)return Cj($,async(j)=>{let w=pE8(F,U,N,J,B,$.req.raw.signal);try{let E=Rn(w),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let M=z;z="",await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of E.stream){if(!P&&(M.type==="text-delta"||M.type==="tool-call"))await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(M.type==="text-delta"){if(z+=M.text,z.length>=$U5)await A()}else if(M.type==="tool-call"){await A();let f=T++;await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await A(),await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:nE8(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.totalUsage.totalTokens??0}:void 0})})}await A(),await j.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await j.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let j=pE8(F,U,N,J,B,$.req.raw.signal),w=await xO(j),E={role:"assistant",content:w.text||null};if(w.toolCalls&&w.toolCalls.length>0)E.tool_calls=w.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:nE8(w.finishReason)}],usage:{prompt_tokens:w.usage?.inputTokens??0,completion_tokens:w.usage?.outputTokens??0,total_tokens:w.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(jD("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(jD(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(jD(X.message,"server_error"),500)}});sE8=oE8});function LU5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function rE8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=k0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!l5(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||_9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(xT(U)!==J)continue;if(!LU5(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var eE8=L(()=>{H8();KX()});var Oh0;var vq1=L(()=>{Oh0={name:"decocms",version:"4.535.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0",kysely:"^0.28.12","posthog-node":"^5.0.0"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/blocks":"8.8.0","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function wU5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??jU5}}var $P8,jU5="https://ph.studio.decocms.com",ZP8;var QP8=L(()=>{H8();we();ih();B9();l1();Qj();P21();vq1();$P8=new $1;$P8.get("/",($)=>{let Z={version:Oh0.version,theme:z4$(),...GF().logo&&{logo:GF().logo},...nO()&&{internalUrl:z8$()},...B0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!B0().controlplaneRestUrl&&!!B0().controlplaneServiceToken,hostingControlPlaneGa:B0().hostingControlPlaneGa,monitorEnabled:!!B0().clickhouseAnalyticsUrl&&!!B0().clickhouseAnalyticsPassword,monitorGa:B0().monitorGa,orderMonitorEnabled:!!B0().orderMonitorIngestUrl&&xW(),plansEnabled:B0().plansEnabled,auth:zU8(),posthog:wU5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:_U()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ZP8=$P8});import{z as M$}from"zod";var EU5,YP8;var XP8=L(()=>{EU5=M$.object({check_id:M$.string(),title:M$.string(),description:M$.string().optional(),impact:M$.string().optional(),why:M$.string().optional(),category:M$.string(),severity:M$.string(),value_band:M$.string().optional(),value_driver:M$.string().optional(),controllability:M$.string().optional(),pages:M$.array(M$.string()),tasks:M$.array(M$.string()),evidence:M$.string(),sample_scope:M$.string().optional(),sources:M$.array(M$.string())}),YP8=M$.object({domain:M$.string(),brand:M$.string(),favicon:M$.string().optional(),scanned_at:M$.string().nullable(),lang:M$.string(),score:M$.number().nullable(),band:M$.string().nullable(),totals:M$.object({measured:M$.number(),registry_total:M$.number(),passed:M$.number(),failed:M$.number(),blocked:M$.number()}),buckets:M$.array(M$.object({id:M$.enum(["critical","important","worth"]),label:M$.string(),items:M$.array(EU5)})),passing:M$.object({count:M$.number(),items:M$.array(M$.object({check_id:M$.string(),title:M$.string()}))}),not_measured:M$.object({count:M$.number(),groups:M$.array(M$.object({reason:M$.string(),label:M$.string(),count:M$.number(),checks:M$.array(M$.string())}))}),categories:M$.array(M$.object({key:M$.string(),label:M$.string(),score:M$.number().nullable(),band:M$.string().nullable(),pass:M$.number(),fail:M$.number()})),screenshots:M$.array(M$.object({url:M$.string(),page_type:M$.string().optional(),viewport:M$.enum(["desktop","mobile"]),image_url:M$.string()}))})});function JP8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${bK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function jh0($,Z={}){let Q=await fetch(JP8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return YP8.parse(await Q.json())}async function GP8($,Z={}){let Q=await fetch(JP8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var bq1=L(()=>{XP8();cL()});import{join as WP8}from"path";async function zU5($){try{let Z=await jh0($,{signal:AbortSignal.timeout(PU5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||mw1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function BG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function AU5($,Z){let Q=Tu($),Y=Z?.brand?.trim()||mw1(Q),X=PJ8(Q,128),G=`${(B0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=zJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${BG(W)}</title>`,`<meta name="description" content="${BG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${BG(W)}" />`,`<meta property="og:description" content="${BG(K)}" />`,`<meta property="og:url" content="${BG(G)}" />`,`<meta property="og:image" content="${BG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${BG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${BG(W)}" />`,`<meta name="twitter:description" content="${BG(K)}" />`,`<meta name="twitter:image" content="${BG(H)}" />`,`<meta name="twitter:image:alt" content="${BG(F)}" />`,`<link rel="canonical" href="${BG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${BG(G)}.md" />`,`<link rel="icon" href="${BG(X)}" sizes="any" />`].join(`
4560
4560
  `)}function TU5($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
4561
4561
  </head>`)}function KP8($){let Z=new $1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Tu(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(WP8($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${bK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(qU5)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let Y=Tu(Q.req.param("file").replace(/\.md$/,""));try{let X=await GP8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(RU5)});if(X===null)return Q.text("Deco Score not found",404);return Q.body(X,200,{"Content-Type":"text/markdown; charset=utf-8","Cache-Control":"public, max-age=600, stale-while-revalidate=3600","Access-Control-Allow-Origin":"*"})}catch{return Q.text("Deco Score unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?WP8($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await zU5(Tu(Y)),K=AU5(Y,W);return Q.html(TU5(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var PU5=2500,qU5=1e4,RU5=1e4;var HP8=L(()=>{H8();cL();bq1();l1()});function wh0($,Z){return fetch(`${bK({})}${$}`,Z)}async function MU5($,Z){let Q=await jh0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function kU5($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",Y=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:Y}}var VU5,IU5=8192,vj,FP8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},UP8;var NP8=L(()=>{H8();HG();$H();cL();bq1();VU5=new Set(["complete","errored","terminated","unknown"]);vj=new $1;vj.use("*",async($,Z)=>{let Q=await U4.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});vj.use("/link-token/*",FP8);vj.use("/suggest",FP8);vj.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.req.query("lang")?.trim()||void 0;try{return $.json(await MU5(Z,Q))}catch{return $.json({error:"report read failed"},502)}});vj.post("/run",b6({maxSize:IU5,onError:($)=>$.json({error:"request body too large"},413)}),async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=kU5(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await wh0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${cE({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});vj.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await wh0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${cE({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:VU5.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});vj.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await wh0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});vj.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await wh0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});UP8=vj});var CU5=1048576,xq1;var BP8=L(()=>{H8();HG();l1();J21();xq1=new $1;xq1.post("/webhook",b6({maxSize:CU5,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=B0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!bF8(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=xF8(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await fF8(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as SU5}from"crypto";function bU5($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return SU5(Buffer.from(X),Buffer.from(Y))}function xU5($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function DP8($){let Z=new $1;return Z.post("/webhook",b6({maxSize:_U5,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!bU5(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!vU5.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});return i60().then((U)=>U?.markTenantPoolsDirty(`https://github.com/${F}`,H)).catch((U)=>console.warn(`[github-webhook] tenant pool refresh for ${F}@${H} failed: ${U instanceof Error?U.message:String(U)}`)),Q.json({ok:!0})}let W=xU5(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await fU5($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function fU5($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if((await K.storage.demoBoard.frozenItemIds(G.organizationId)).has(G.taskBoardItemId))continue;if(await Yv0(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var _U5=5242880,vU5;var LP8=L(()=>{H8();HG();bX();I7();vU5=new Set(["check_suite","issue_comment"])});import{DBOS as yq1,SchedulerMode as yU5}from"@dbos-inc/dbos-sdk";async function hU5(){try{return await uU5()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function uU5(){if(!d60())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (lK1(),uK1)),Promise.resolve().then(() => (hK1(),gK1))]),Q=await i60(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=E8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=Vm$({sandboxes:J,pools:G,records:await Im$(X,J,G),legacyPools:RC0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await km$(K,pO0(X,new UJ(B0().encryptionKey)),{now:W,orgFsLifetimeMs:IC0}),U=0,N=0,B=0;for(let D of H)try{let O=await Y.pushCredentials(D);U+=O.stored,N+=O.kept}catch(O){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${O instanceof Error?O.message:String(O)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function lU5($,Z){let Q=await yq1.runStep(hU5,{name:"pushSandboxCredentials"});if(Q&&(Q.refused>0||Q.failed>0))console.warn(`[sandbox-credential-push] ${Q.sandboxes} sandboxes: pushed ${Q.pushed}, kept ${Q.kept}, refused ${Q.refused}, failed ${Q.failed}`)}function OP8(){if(fq1)return;if(!B0().agentSandboxEnabled||!d60())return;fq1=yq1.registerWorkflow(lU5,{name:"sandboxCredentialPushWorkflow"}),yq1.registerScheduled(fq1,{name:"sandboxCredentialPushWorkflow",crontab:gU5,mode:yU5.ExactlyOncePerIntervalWhenActive})}var gU5="1,11,21,31,41,51 * * * *",fq1=null;var jP8=L(()=>{vG();Cw();M31();kC0();MC0();bX();l1()});function wP8($){let Z=new jj($.db,new UJ($.encryptionKey)),Q=new $1;return Q.get("/attachments/:token",async(Y)=>{let X=Fr$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new QQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var EP8=L(()=>{H8();Cw();jU1();yO()});function Eh0(){try{return B0().jiraSettleSeconds*1000}catch{return lz}}function PP8($,Z){let Q=Z.windowMs??lz,Y=$.at(-1);if(!Y)return null;if(Z.changeId!==void 0&&Y.id!==Z.changeId)return{kind:"superseded"};if(Z.now!==void 0&&Z.now-Y.at<Q)return{kind:"moving"};let X=mU5($,Q);if((X.id&&Y.toId?X.id===Y.toId:!1)||!X.id&&X.name===Y.to)return{kind:"returned",change:Y};return{kind:"moved",change:Y,from:X}}function mU5($,Z){for(let Y=$.length-2;Y>=0;Y--){let X=$[Y],J=$[Y+1];if(X&&J&&J.at-X.at>=Z)return{id:X.toId,name:X.to}}let Q=$[0];return{id:Q?.fromId??null,name:Q?.from??null}}var gq1=L(()=>{oO();l1()});function zP8($){if(typeof $!=="object"||$===null)return null;let Z=$;if(Z.webhookEvent!=="jira:issue_updated")return null;let Q=Z.issue?.id,Y=Z.issue?.key,X=Z.changelog?.id;if(typeof Q!=="string"&&typeof Q!=="number"||typeof Y!=="string"||typeof X!=="string"&&typeof X!=="number")return null;let J=Z.changelog?.items?.find((G)=>G.field==="status");if(!J||typeof J.toString!=="string")return null;return{issueId:String(Q),issueKey:Y,toStatus:J.toString,changelogId:String(X)}}async function hq1($,Z,Q){if(!Z.enabled)return"disabled";let Y=Z.organizationId,X=new QQ(Z.siteUrl,Z.email,Z.apiToken),J=PP8(await X.listStatusChanges(Q.issueId),{changeId:Q.changelogId,now:Q.now,windowMs:Eh0()});if(!J)return"no_rule";if(J.kind!=="moved")return J.kind;let{change:G,from:W}=J,K=(await $.storage.automations.listJiraTransitionTriggers(Y,{jiraStatus:G.to,activeOnly:!0})).map((N)=>({...N,from:uz(N)})),H=e88(K)&&Z.boardId?r88(await X.getBoardColumnStatusIds(Z.boardId),W.id,G.toId):null,F=a88(K,W.name,H);if(!F)return"no_rule";if(!await $.storage.jiraIntegrations.claimTrigger(Y,Q.issueId,G.id))return"duplicate";return await NH({automationId:F.automation_id,organizationId:Y,triggerId:F.id,target:{kind:"jira",issues:[Q.issueId],move:{toStatus:G.to,fromStatus:W.name,movedBy:G.by,movedAt:new Date(G.at).toISOString()},eventKey:G.id}},{idempotencyKey:`jira:${F.id}:${G.id}`}),"fired"}var uq1=L(()=>{UU();yO();Ut();gq1()});import{DBOS as c2,SchedulerMode as cU5}from"@dbos-inc/dbos-sdk";function AP8($){mq1=$}function dq1(){if(!mq1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return mq1}function iq1(){let $=dq1();return new jj($.db,new UJ($.encryptionKey))}async function tU5($){try{let Z=await iq1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,fired:0};let Q=await yY(dq1().db,Z.organizationId);if(!Q)return{integrationId:$,fired:0};if((await Q.storage.automations.listJiraTransitionTriggers(Z.organizationId,{activeOnly:!0})).length===0)return{integrationId:$,fired:0};let X=new QQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${iU5}m"`,W=0,K;for(let H=0;H<pU5;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await hq1(Q,Z,{issueId:U.id,now:Date.now()})==="fired")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,fired:W}}catch(Z){return{integrationId:$,fired:0,error:Z instanceof Error?Z.message:String(Z)}}}async function oU5($,Z){let Q=await c2.runStep(()=>iq1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>c2.runStep(()=>tU5(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.fired>0)console.log(`[jira-trigger] integration ${X.integrationId} fired ${X.fired} automation(s) the webhook missed`)}async function sU5($,Z){try{let Q=await iq1().getById($);if(!Q?.enabled)return"disabled";let Y=await yY(dq1().db,Q.organizationId);if(!Y)return"disabled";let X=await hq1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="fired")console.log(`[jira-trigger] fired an automation for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no fire`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function aU5($,Z){await c2.sleep(Eh0()+nU5),await c2.runStep(()=>sU5($,Z),{name:"settleJiraMove"})}async function TP8($,Z){if(!cq1)throw Error("[jira-trigger] settle workflow is not registered");await c2.startWorkflow(cq1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function qP8(){if(lq1)return;cq1=c2.registerWorkflow(aU5,{name:"jiraSettleWorkflow"}),lq1=c2.registerWorkflow(oU5,{name:"jiraTriggerSweepWorkflow"}),c2.registerScheduled(lq1,{name:"jiraTriggerSweepWorkflow",crontab:dU5,mode:cU5.ExactlyOncePerIntervalWhenActive})}var dU5="*/5 * * * *",iU5=20,pU5=5,nU5=5000,mq1=null,cq1=null,lq1=null;var pq1=L(()=>{Cw();cO();yO();gq1();uq1()});function RP8($){let Z=new jj($.db,new UJ($.encryptionKey)),Q=Cz($.db);async function Y(J,G){let W=zP8(G);if(!W)return;let K=await Z.getByWebhookSecret(J);if(!K?.enabled)return;if((await Q.listJiraTransitionTriggers(K.organizationId,{activeOnly:!0})).length===0)return;await TP8(K.id,W)}let X=new $1;return X.post("/webhook/:secret",b6({maxSize:rU5}),async(J)=>{let G=J.req.param("secret");if(!await Z.getByWebhookSecret(G))return J.json({error:"Unknown webhook"},404);let K;try{K=await J.req.json()}catch{return J.json({error:"Body must be JSON"},400)}return Y(G,K).catch((H)=>{console.error("[jira-webhook] trigger failed",H)}),J.body(null,202)}),X}var rU5=1048576;var MP8=L(()=>{H8();HG();Cw();pq1();uq1();d50()});function VP8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var IP8,eU5,$N5,kP8;var CP8=L(()=>{H8();K3();rn();qi();IP8=new $1,eU5=["range","if-none-match","if-modified-since"],$N5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];IP8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Zs($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new R1(401,{message:"Authentication required"})}if(!Q)throw new R1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new R1(400,{message:"Missing file key"});let X=await k90(Y,Z);if(!X)throw new R1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&mK()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new R1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return VP8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of eU5){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new R1(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new R1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of $N5){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),VP8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});kP8=IP8});var GY0=y((Ol)=>{var ZN5=Ol&&Ol.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),QN5=Ol&&Ol.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))ZN5(Z,$,Q)};Object.defineProperty(Ol,"__esModule",{value:!0});QN5(zG(),Ol)});var vP8=y((SP8)=>{Object.defineProperty(SP8,"__esModule",{value:!0});SP8.version=void 0;SP8.version="3.4.0"});var fP8=y((wD)=>{var YN5=wD&&wD.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(wD,"__esModule",{value:!0});wD.NodeTransport=wD.VERSION=void 0;wD.nodeResolveHost=HN5;var H9=GY0(),XN5=M0("net"),nq1=M0("tls"),JN5=M0("path"),bP8=M0("fs"),GN5=YN5(M0("dns")),WN5=vP8();wD.VERSION=WN5.version;var KN5="nats.js";class xP8{socket;version;lang;yields=[];signal=(0,H9.deferred)();closedNotification=(0,H9.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=KN5,this.version=wD.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,H9.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw H9.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new H9.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new H9.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,H9.deferred)(),Q,Y=(0,XN5.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,H9.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=H9.DataBuffer.concat(...this.yields),X=(0,H9.extractProtocolMessage)(Y);if(X!=="")try{let J=H9.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,H9.deferred)();try{if($=(0,JN5.resolve)($),!(0,bP8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,bP8.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,H9.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new H9.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,H9.deferred)();try{let X=(0,nq1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new H9.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,H9.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new H9.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,H9.deferred)();try{let Y=(0,nq1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new H9.errors.ConnectionError(Y.message,{cause:Y}))}return Q}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,H9.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,H9.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof nq1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,H9.render)($)}`);let Z=(0,H9.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,H9.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,H9.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}wD.NodeTransport=xP8;function HN5($){let Z=(0,H9.deferred)();return GN5.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var lP8=y((uP8)=>{Object.defineProperty(uP8,"__esModule",{value:!0});uP8.connect=FN5;var yP8=fP8(),gP8=GY0(),hP8=GY0();function FN5($={}){if((0,hP8.hasWsProtocol)($))return Promise.reject(hP8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,gP8.setTransportFactory)({factory:()=>{return new yP8.NodeTransport},dnsResolveFn:yP8.nodeResolveHost}),gP8.NatsConnectionImpl.connect($)}});var mP8=y((bj)=>{var NN5=bj&&bj.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),BN5=bj&&bj.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))NN5(Z,$,Q)};Object.defineProperty(bj,"__esModule",{value:!0});bj.connect=void 0;var DN5=lP8();Object.defineProperty(bj,"connect",{enumerable:!0,get:function(){return DN5.connect}});BN5(GY0(),bj)});function iP8($){let Z=$?.connectFn??wN5,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let D=0;while(!J)try{Q=await Z({servers:N,timeout:jN5,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let O=b7(ON5,LN5,D-1,2,0.5);await G$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?Ph0.credsAuthenticator(new TextEncoder().encode(B.creds)):B?.user?Ph0.usernamePasswordAuthenticator(B.user,B.password):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=dP8.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function wN5($){return cP8.connect($)}var Ph0,cP8,dP8,LN5=100,ON5=3000,jN5=3000;var pP8=L(()=>{g$();Ph0=_(FA(),1),cP8=_(mP8(),1),dP8=_(pH(),1)});function zh0($,Z){return`${$}.${Z}`}class tq1{cache;constructor($){this.cache=JB({ttlMs:$?.ttlMs??EN5,maxSize:$?.maxSize??PN5})}async get($,Z){return this.cache.get(zh0($,Z))??null}async set($,Z,Q){this.cache.set(zh0($,Z),Q)}async invalidate($,Z){this.cache.delete(zh0($,Z)),this.cache.delete(zh0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var EN5=600000,PN5=5000;var nP8=()=>{};function Ah0($,Z){return`${$}:${Z}`}function oq1($){let Z=JB({ttlMs:$?.ttlMs??zN5,maxSize:$?.maxSize??AN5}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(tP8,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(Ah0(K,H))},set(K,H,F){Z.set(Ah0(K,H),F)},invalidate(K,H){Z.delete(Ah0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(tP8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(Ah0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var tP8="studio.ai-provider-keys.invalidate",zN5=30000,AN5=5000;var oP8=()=>{};class sq1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var sP8=($)=>{let Z;return()=>Z??=$()},aq1,rq1;var aP8=L(()=>{y6();aq1=sP8(()=>W$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),rq1=sP8(()=>W$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function kN5($=$z8){return{name:iB,subjects:[`${HD1}.>`],storage:kU.StorageType.File,max_age:RN5,max_bytes:VN5,max_msgs_per_subject:IN5,discard:kU.DiscardPolicy.Old,retention:kU.RetentionPolicy.Limits,duplicate_window:MN5,num_replicas:$}}class Zz8{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function rP8($){let Z=eP8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function vN5($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,qN5().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function bN5($,Z){return $.info?.cluster?Z:1}function xN5($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class eq1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Y,X)=>{let J=kN5(X);try{await Y.streams.info(iB),await Y.streams.update(iB,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(iB,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(iB),await Y.streams.add(J);else throw G}},Q=await $8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await kU.jetstreamManager($),X=bN5($,$z8);try{await Z(Y,X)}catch(J){if(X<=1||!xN5(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Ft});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=vN5(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=M88(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=UD1(H,{runId:Z}),N=performance.now()-F;aq1().record(N),rq1().add(1,{"org.id":Y??"unknown"}),_N5?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?rP8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((O)=>setImmediate(O))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),SN5)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await $8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:rP8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Ft}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=UD1(Z,{runId:$,dedup:Q});aq1().record(performance.now()-X),rq1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=R88({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?kU.DeliverPolicy.New:kU.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=hz($),W;try{W=await $8(async()=>{return(await Y.consumers.get(iB,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Ft})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=ev0({messages:async function*(){try{for await(let O of W)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(ov0()).pipeThrough(sv0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:j,value:w}=await F.read();if(j){D(),O.close();return}let E=w;if(E.kind==="done"){if(J){D(),O.close();return}continue}O.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(iB,{filter:hz($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var kU,eP8,TN5=($)=>{let Z;return()=>Z??=$()},qN5,RN5=86400000000000,MN5=120000000000,VN5=4294967296,$z8,IN5=500000,CN5,SN5,_N5;var Qz8=L(()=>{g$();ND1();$b0();av0();y6();aP8();kU=_(pH(),1),eP8=_(FA(),1),qN5=TN5(()=>W$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),$z8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);CN5=process.env.STREAM_ENCODE_TRACE==="1",SN5=process.env.DECOPILOT_STREAM_TRACE==="1";_N5=CN5?new Zz8:null});function Th0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,$N(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var Yz8=L(()=>{q8()});class $R1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function fN5($,Z,Q={}){let Y=$.startsWith("thread:")?YU($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function ZR1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await XU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await SB($,{threadId:X,runBranch:G?.branch}),K=await j80($,Q,sN0(J)).catch(()=>null);if(!K){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}let H=fN5(W,await rC0($,X),{flat:Bh(K.repo.provider)});for(let F of H){let U=await K.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:K.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await dJ(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var Xz8=L(()=>{W5();yQ();I7()});async function Jz8($,Z,Q){let Y=Z.organizationId;if(!cJ(Z))return!1;if(!mh(Q))return!1;if(!await Tc($,Y,se))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=Q1.shipped,J=await $.storage.taskBoard.update(Z.id,Y,{status:X},Z.updatedBy);return await J9($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:X,reason:"pr_merged"}}),r$(Y,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${X}`),!0}var Gz8=L(()=>{N3();I8();gX();cn();FU();F5()});function Wz8($,Z){return Z-$>=lN5}class QR1{taskBoard;contextFactory;options;timer=null;running=!1;cursor=null;constructor($,Z,Q={}){this.taskBoard=$;this.contextFactory=Z;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??yN5;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??hN5,Q=this.options.itemIntervalMs??gN5,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapAbandonedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,Y)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapAbandonedThreads($){try{let Z=await this.taskBoard.failAbandonedLinkedThreads($,new Date(Date.now()-FU1),{neverStarted:hN1,stalled:kB1});for(let Q of Z)console.warn(`[task-board-review-sweeper] failed abandoned thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-mN5));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await gN1(this.taskBoard,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==Q1.progress||cJ(W)||W.assigneeId!==u$)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await ZR1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!Wz8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceFromProgress(X,J,Q1.review,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:Q1.progress,to:Q1.review,reason:H}}).catch(()=>{}),r$(J,F),await lB(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==Q1.progress||G.assigneeId!==u$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await dO(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+uN5)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!Wz8(NL(Q,Z.reviewCycleStartedAt),Date.now()))return;await lB($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!cJ(Y))return!1;let X=Y.assigneeId===u$,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await ZR1(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await nn(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await Jz8(G,Y,W))return!0;if(!X)return!1;if(await R08(G,Y))return!0;if(!bN1(W))return!1;return await pn(G,Y,{previewMatchesHead:xN1(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var yN5=60000,gN5=300000,hN5=50,uN5=60000,lN5=900000,mN5=120000;var Kz8=L(()=>{I8();t_0();Xz8();mB();an();FU();Gz8();F5();uN1();CB1();I7();$90()});async function Hz8($,Z,Q=lz){return await Uz8($,Z,Q,{})}async function Fz8($,Z,Q,Y=lz){return await Uz8($,Q,Y,{activityId:Z})}async function Uz8($,Z,Q,Y){let X=await $.automations.findActiveBoardColumnTriggers();if(X.length===0)return 0;let J=new Map;for(let K of X){let H=K.automation.organization_id;J.set(H,[...J.get(H)??[],K])}let G=await $.taskBoard.listSettledTransitions({organizationIds:[...J.keys()],since:new Date(Z-cN5),settledBefore:new Date(Z-Q),limit:dN5,...Y}),W=0;for(let K of G)try{let H=(J.get(K.organizationId)??[]).filter((U)=>U.column_key===K.to&&Date.parse(U.created_at)<Date.parse(K.occurredAt));if(H.length===0)continue;let F=await iN5($.taskBoard,K,Q);for(let U of H){if(!Z48(U,{from:F,to:K.to}))continue;if(!await $.automations.claimTriggerFire(U.id,K.activityId))continue;await $.fire({automationId:U.automation_id,organizationId:K.organizationId,triggerId:U.id,target:{kind:"card",itemId:K.itemId,columnKey:K.to,eventKey:K.activityId,movedBy:K.actorId}},{idempotencyKey:`board:${U.id}:${K.activityId}`}),W++}}catch(H){console.error(`[automations] board transition ${K.activityId} failed`,H)}return W}async function iN5($,Z,Q){let X=(await $.listActivity(Z.itemId,Z.organizationId)).flatMap((J)=>{let G=J.data;if(J.action!=="status_changed"||typeof G?.to!=="string")return[];let W=typeof G.from==="string"?G.from:null;return W===G.to?[]:[{from:W,to:G.to,occurredAt:J.occurredAt}]});return X.length>0?Q48(X,Q):Z.from}var cN5=1800000,dN5=200;var Nz8=L(()=>{oO()});import{DBOS as d2,DBOSClient as pN5,SchedulerMode as nN5}from"@dbos-inc/dbos-sdk";function Bz8($){xj=$}async function sN5($){if(!xj)return 0;try{return await Fz8(xj,$,Date.now(),xj.settleMs)}catch(Z){return console.error(`[automations] settling board move ${$} failed`,Z),0}}async function aN5(){if(!xj)return 0;try{return await Hz8(xj,Date.now(),xj.settleMs)}catch($){return console.error("[automations] board transition sweep failed",$),0}}async function rN5($){await d2.sleep((xj?.settleMs??lz)+oN5),await d2.runStep(()=>sN5($),{name:"settleBoardMove"})}async function eN5($,Z){let Q=await d2.runStep(()=>aN5(),{name:"sweepBoardMoves"});if(Q>0)console.log(`[automations] board transition sweep fired ${Q} trigger(s) the settle wait missed`)}async function Lz8($){let Z=xj;if(!Z||!XR1)return;if(!await Z.automations.hasActiveBoardColumnTrigger($.taskBoardItemId,$.to))return;let Q=`board-settle:${$.activityId}`;if(!d2.isWithinWorkflow()){await d2.startWorkflow(XR1,{workflowID:Q,queueName:a2})($.activityId);return}let Y=await pN5.create({systemDatabaseUrl:Z.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:1});try{await Y.enqueue({workflowName:Dz8,queueName:a2,workflowID:Q},$.activityId)}finally{await Y.destroy()}}function Oz8(){if(YR1)return;XR1=d2.registerWorkflow(rN5,{name:Dz8}),YR1=d2.registerWorkflow(eN5,{name:"boardTransitionSweepWorkflow"}),d2.registerScheduled(YR1,{name:"boardTransitionSweepWorkflow",crontab:tN5,mode:nN5.ExactlyOncePerIntervalWhenActive})}var tN5="*/5 * * * *",oN5=2000,xj=null,Dz8="boardTransitionSettleWorkflow",XR1=null,YR1=null;var jz8=L(()=>{oO();Nz8()});import{readdir as $B5,rm as qh0}from"fs/promises";import{join as Rh0}from"path";async function Mh0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-ZB5),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await jl($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await wz8($,X,Z);else if(!X.startsWith(".")){let J=Rh0($,X),G=await jl(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await wz8(J,K,Z)}if((await jl(J)).length===0)await qh0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function wz8($,Z,Q){let Y=0,X=Rh0($,Z),J=await jl(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=Rh0(X,W),H=await jl(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=Rh0(K,U);await qh0(B,{recursive:!0,force:!0}),Y++}}if((await jl(K)).length===0)await qh0(K,{recursive:!0,force:!0})}if((await jl(X)).length===0)await qh0(X,{recursive:!0,force:!0});return Y}async function jl($){try{return(await $B5($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var ZB5=30;var JR1=()=>{};import{DBOS as GR1,SchedulerMode as QB5}from"@dbos-inc/dbos-sdk";async function XB5(){let $=[gH(),Ml(),VD()],Z=0;for(let Q of $)try{Z+=await Mh0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function JB5($,Z){await GR1.runStep(()=>XB5(),{name:"monitoringRetention"})}function Pz8(){if(Ez8)return;Ez8=!0;let $=GR1.registerWorkflow(JB5,{name:"monitoringRetentionWorkflow"});GR1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:YB5,mode:QB5.ExactlyOncePerIntervalWhenActive})}var YB5="23 4 * * *",Ez8=!1;var zz8=L(()=>{sW();JR1()});function Az8($){return async(Z,Q)=>{let Y=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await gY.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await PP($.db,Z,Y.role);return X.boundAuth=uz1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new mT(Q,void 0,X.boundAuth,Y.role,"self"),fz(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var Tz8=L(()=>{jQ();fF()});function qz8(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=WY0(N.params.name),D=N.params.arguments||{},O=Object.keys(D).map((w)=>WY0(w)),j=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${E9.tool}${B}${E9.dim}(${j})${E9.reset}`}else if(N.method)J=`${E9.dim}${WY0(N.method)}${E9.reset}`}}catch{}}let W=WY0(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${E9.mcp}${WY0(F.slice(0,12))}\u2026${E9.reset}`}else if(X==="/mcp")W=`${E9.mcp}/mcp${E9.reset}`;else if(X==="/mcp/registry")W=`${E9.mcp}/mcp/registry${E9.reset}`;let K=WB5(Y),H=G?"\u25C0":"\u2190";console.log(`${E9.dim}${H}${E9.reset} ${K}${Y}${E9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=GB5(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";console.log(`${E9.dim}${D}${E9.reset} ${K}${Y}${E9.reset} ${W}${J?` ${J}`:""} ${N}${U}${E9.reset} ${E9.duration}${B}${E9.reset}`)}}}var E9,GB5=($)=>{if($>=500)return E9.serverError;if($>=400)return E9.clientError;if($>=300)return E9.redirect;return E9.ok},WB5=($)=>{return E9[$]||E9.reset},WY0=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Rz8=L(()=>{E9={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as kz8}from"crypto";import{mkdir as KB5,readdir as HB5,rm as Mz8,stat as Cz8}from"fs/promises";import{join as KR1,relative as FB5}from"path";import{z as W8}from"zod";function _z8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return KR1(UB5,Z)}function vz8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function WR1($,Z){let Q=_z8($),Y=vz8(Z);return KR1(Q,Y)}function NB5($,Z,Q,Y){let X=B0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return kz8("sha256",X).update(J).digest("hex")}function Iz8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=NB5(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${vz8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function bz8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${kz8("md5","etag").update(Y).digest("hex")}"`}async function xz8($,Z,Q,Y,X){try{let J=await HB5($,{withFileTypes:!0});for(let G of J){let W=KR1($,G.name),H=FB5(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await xz8(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await Cz8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:bz8(W,F.mtime,F.size)})}catch{}}}}catch{}}function fz8($,Z){let Y=Z0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:W8.object({prefix:W8.string().optional(),maxKeys:W8.number().optional().default(1000),continuationToken:W8.string().optional(),delimiter:W8.string().optional()}),outputSchema:W8.object({objects:W8.array(W8.object({key:W8.string(),size:W8.number(),lastModified:W8.string(),etag:W8.string()})),nextContinuationToken:W8.string().optional(),isTruncated:W8.boolean(),commonPrefixes:W8.array(W8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=_z8(Y);await KB5(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await xz8(F,F,G,K,U),U.objects.sort((j,w)=>j.key.localeCompare(w.key));let N=0;if(H){if(N=U.objects.findIndex((j)=>j.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,O=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:O,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:W8.object({key:W8.string()}),outputSchema:W8.object({contentType:W8.string().optional(),contentLength:W8.number(),lastModified:W8.string(),etag:W8.string(),metadata:W8.record(W8.string(),W8.string()).optional()}),handler:async(X)=>{let J=X,G=WR1(Y,J.key),W=await Cz8(G);return{contentType:$A1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:bz8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:W8.object({key:W8.string(),expiresIn:W8.number().optional()}),outputSchema:W8.object({url:W8.string(),expiresIn:W8.number()}),handler:async(X)=>{let J=X,G=Xj(J.expiresIn,Vz8);return{url:Iz8(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:W8.object({key:W8.string(),expiresIn:W8.number().optional(),contentType:W8.string().optional()}),outputSchema:W8.object({url:W8.string(),expiresIn:W8.number()}),handler:async(X)=>{let J=X,G=Xj(J.expiresIn,Vz8);return{url:Iz8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:W8.object({key:W8.string()}),outputSchema:W8.object({success:W8.boolean(),key:W8.string()}),handler:async(X)=>{let J=X,G=WR1(Y,J.key);try{return await Mz8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:W8.object({keys:W8.array(W8.string()).max(1000)}),outputSchema:W8.object({deleted:W8.array(W8.string()),errors:W8.array(W8.object({key:W8.string(),message:W8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=WR1(Y,K);try{await Mz8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function HR1($,Z,Q){let Y=fz8(Z,Q),X=new HE({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:SZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:W8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:W8.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new CW({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),AH(X,J,$,"mcp:dev-assets")}async function yz8($,Z,Q,Y){let J=fz8(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var UB5="./data/assets",Vz8=3600,Sz8,gz8;var hz8=L(()=>{l1();kt();H8();CH0();It();PJ();Jj();Zg0();Sz8=new $1;Sz8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return HR1($.req.raw,Z,Y)});gz8=Sz8});var uz8={};P6(uz8,{mountDevRoutes:()=>BB5});function BB5($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return HR1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await yz8(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",gz8);let Q=new $1;Q.use("*",RU({mountPath:"/api/dev-assets"})),Q.route("/",$g0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var lz8=L(()=>{H8();p21();Zg0();hz8()});var az8={};P6(az8,{watchHandler:()=>sz8,resolveVoiceSigningSecret:()=>nz8,resolveCorsOrigin:()=>tz8,isSsoExemptPath:()=>pz8,isAllowedOAuthRedirectUri:()=>oz8,createApp:()=>qB5});import{readFileSync as DB5}from"fs";import{randomBytes as LB5}from"crypto";import{PrometheusSerializer as OB5}from"@opentelemetry/exporter-prometheus";import{DBOS as ED}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as EB5,oAuthProtectedResourceMetadata as PB5}from"better-auth/plugins";async function jB5($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,cz8(mz8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),cz8(mz8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function cz8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function pz8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${fy0}/`)||$.startsWith(`${Cy0}/`)}function nz8($){let Z=$.studioJwtSecret||$.betterAuthSecret;if(Z)return Z;return console.warn("STUDIO_JWT_SECRET/BETTER_AUTH_SECRET not set - generating a random secret for voice sessions (not persistent across restarts)"),LB5(32).toString("base64")}function tz8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function oz8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"}async function qB5($={}){let Z=$.database??E8(),Q=!1;_6.stop().catch((h)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",h)});let Y,X,J,G,W=new tq1,K,H,F,U=null;if($.disableNats)K=oq1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new GZ0,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(h)=>{return(async()=>{let U0=h.getReader();try{while(!0){let{done:N0}=await U0.read();if(N0)break}}catch{}finally{U0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=iP8();let h=B0().natsCredsPath,U0;if(h)try{U0=DB5(h,"utf8")}catch(k$){console.error(`[app] failed to read NATS_CREDS at ${h}; connecting anonymously`,k$)}U.init(B0().natsUrls,{creds:U0,user:B0().natsUser,password:B0().natsPassword});let N0=O91()?new Q91({getJetStream:()=>U.getJetStream(),selfListVersion:Oh0.version}):null;N0?.init().catch(()=>{}),Y=N0;let q0=new jZ1({getJetStream:()=>U.getJetStream()});q0.init().catch(()=>{}),X=q0;let y0=new ch(IN1,{getJetStream:()=>U.getJetStream()}),T1=new ch(Z90,{getJetStream:()=>U.getJetStream()});y0.init().catch(()=>{}),T1.init().catch(()=>{}),J={reads:y0,cards:T1};let Q8=new fO1({getJetStream:()=>U.getJetStream()});Q8.init().catch(()=>{}),G=Q8,K=oq1({getConnection:()=>U.getConnection()}),H=new sq1({getConnection:()=>U.getConnection()}),F=new eq1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),QU8(U),U.onReady(()=>{N0?.init().catch((k$)=>{console.error("[McpListCache] Deferred init failed:",k$)}),q0.init().catch((k$)=>{console.error("[SkillCatalogCache] Deferred init failed:",k$)}),y0.init().catch((k$)=>{console.error("[PrReadCache] Deferred init failed:",k$)}),T1.init().catch((k$)=>{console.error("[PrCardCache] Deferred init failed:",k$)}),Q8.init().catch((k$)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",k$)}),K.start(),gj$(()=>U.getConnection()),F.init().catch((k$)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",k$)})})}if(i2)await i2();Y91(Y),EZ1(X),rZ1(()=>U?.getConnection()??null),kN1(J),yO1(G);let B={storage:new un(Z.db),sseHub:_6,onThreadFinished:async(h,U0)=>on(new FH(Z.db),h,U0)},D=new vB1(B),O=new o70(Z.db),j=new $R1(O);j.start(),H48(H),H.start((h)=>{hv0(h),D.execute({type:"CANCEL",taskId:h}).catch((U0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",U0)})}).catch((h)=>{console.error("[Decopilot] CancelBroadcast start failed:",h)}),U?.onReady(()=>{H.start().catch((h)=>{console.error("[CancelBroadcast] Deferred start failed:",h)})});let w=()=>U?.getConnection()??null;u21(w),U?.onReady(()=>u21(w)),wj1(w),U?.onReady(()=>wj1(w)),F.init().catch((h)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",h)}),i2=async()=>{await D.stopAll(),D.dispose(),j.dispose(),H.stop().catch(()=>{}),AN8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),hj$(),G.teardown(),Y91(null),EZ1(null),rZ1(null),kN1(null),yO1(null)};let E=new $1;if(E.use("*",vO1({enabled:(h)=>$s(h,"debug")==="1"})),E.use("*",th0),E.use("/*",aF8({origin:(h,U0)=>tz8(h,{baseUrl:B0().baseUrl,requestOrigin:new URL(U0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(h,U0)=>{if(await U0(),h.req.path.includes("/files/"))return;if(h.req.path.includes("/fs/")&&h.req.path.endsWith("/read"))return;h.header("X-Frame-Options","DENY"),h.header("Content-Security-Policy","frame-ancestors 'none'")}),B0().nodeEnv==="development")E.use("*",qz8());E.use("*",async(h,U0)=>{if(await U0(),Ja(h.req.path))return;if(h.res.status>=500){let q0=await h.res.clone().text();console.error(`[5xx Response] ${h.req.method} ${h.req.path} - ${h.res.status}:`,q0)}}),E.get(eX.HEALTH,(h)=>{if(Q)return h.json({status:"shutting_down"},503);return h.json({status:"ok"})}),E.get(eX.HEALTH_LIVE,(h)=>{return h.json({status:"ok"})}),E.get(eX.HEALTH_READY,async(h)=>{if(Q)return h.json({status:"shutting_down"},503);let U0={};if(U0.postgres={status:await jB5(Z.pool)?"up":"down"},U)U0.nats=U.isConnected()?{status:"up"}:{status:"down"};else U0.nats={status:"down"};let N0=U0.postgres.status==="up",q0=N0?200:503;return h.json({status:N0?"ready":"not_ready",services:U0},q0)}),E.get(eX.METRICS,async(h)=>{try{let U0=await rh0.collect(),N0=wB5.serialize(U0.resourceMetrics);return h.text(N0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(U0){return console.error("Failed to collect metrics:",U0),h.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${eX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(h)=>{let U0=h.req.param("queueName");if(!zB5.has(U0))return h.json({error:`Unknown queue: ${U0}`},404);let[N0,q0]=await Promise.all([ED.listQueuedWorkflows({queueName:U0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),ED.listQueuedWorkflows({queueName:U0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return h.json({queue_length:N0.length,in_flight:q0.length})}),E.route("/api/config",ZP8),E.route("/api/_reports",UP8),E.route("/api/_stripe",xq1),E.route("/api/_github",DP8({taskBoard:()=>m,contextFactory:()=>b})),E.route("/api/_git",Ds);let T={db:Z.db,encryptionKey:B0().encryptionKey};E.route("/api/_jira",RP8(T)),E.route("/api/_jira",wP8(T)),E.route("/report",KP8($.clientDir)),E.route("/api/auth/custom",AU8),E.all("/api/auth/admin/*",HN8),E.all("/api/auth/*",async(h)=>{return await U4.handler(h.req.raw)});let z=TG8();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",GQ0),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",GQ0),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",fZ0),E.route("/",IG8()),E.use("/oauth-proxy/:connectionId/*",GQ0),E.all("/oauth-proxy/:connectionId/*",dz8);let A=async(h)=>{let N0=await AB5()(h.req.raw),q0=await N0.json();return Response.json(q0,N0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",GQ0),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let M=async(h)=>{let N0=await TB5()(h.req.raw),q0=await N0.json();return Response.json(q0,N0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",M);let f=eF8({ttlMs:120000}),S=await KF8({db:Z.db,auth:U4,encryption:{key:B0().encryptionKey},observability:{tracer:cj,meter:W$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});gY.set(S),K8$({db:Z.db,baseUrl:z5()}),HF8({db:Z.db}),BF8({db:Z.db}),jF8({db:Z.db}),kF8({db:Z.db}),yF8({db:Z.db}),AP8({db:Z.db,encryptionKey:B0().encryptionKey}),Le$({db:Z.db}),cF8({db:Z.db}),re$({db:Z.db});let V=Cz(Z.db),v=new p70(Z.db),b=Az8({db:Z.db});mD1({storage:V,studioContextFactory:b,orgContextFactory:(h)=>yY(Z.db,h),systemDatabaseUrl:Se(B0().databaseUrl,B0().databasePgSsl)}),qD1({systemDatabaseUrl:Se(B0().databaseUrl,B0().databasePgSsl),studioContextFactory:b,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:_6}}),wD1({dispatchRunFn:w88,studioContextFactory:b,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:_6}});let u=new un(Z.db),m=new FH(Z.db),i=new QR1(m,b);if(B0().taskBoardReviewSweeperEnabled){i.start();let h=i2;i2=async()=>{await h?.(),i.dispose()}}Bz8({automations:V,taskBoard:m,fire:NH,systemDatabaseUrl:Se(B0().databaseUrl,B0().databasePgSsl),settleMs:B0().boardTransitionSettleSeconds*1000}),Ce$(Lz8),h88({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let h=U?.getConnection();return h?await iz8.jetstreamManager(h):null},messageParts:u.messageParts(),resolveRun:async(h)=>{let U0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",h).executeTakeFirst();return U0?{orgId:U0.organization_id,createdBy:U0.created_by,version:U0.message_storage_version??1,status:U0.status,runFenceToken:U0.run_fence_token,title:U0.title??null}:null},completeRunIfNotCompleted:async(h,U0)=>{let N0=await u.completeRunIfNotCompleted(h,U0);if(Th0(_6,U0,h,N0),N0)await on(m,h,U0);return N0},markRunRequiresAction:async(h,U0)=>{let N0=await u.requiresActionIfInProgress(h,U0);return Th0(_6,U0,h,N0),N0},markRunFailed:async(h,U0,N0,q0)=>{let y0=await u.markRunFailed(h,U0,N0,q0);if(Th0(_6,U0,h,y0),y0)await on(m,h,U0);return y0},clearSynthesizedError:async(h,U0)=>{await u.messageParts().replaceMessageParts(h,gz(h,U0),[])},persistTitle:(h,U0,N0)=>u.update(h,U0,{title:N0}),onTitleUpdated:async({runId:h,orgId:U0,title:N0})=>{let q0=await u.get(h,U0).catch(()=>null);_6.emit(U0,$N(h,q0?.status??"in_progress",{title:N0,virtualMcpId:q0?.virtual_mcp_id??void 0,createdBy:q0?.created_by,triggerId:q0?.trigger_id,branch:q0?.branch??null,harnessId:q0?.harness_id??void 0,createdAt:q0?.created_at,updatedAt:q0?.updated_at}))},bumpProgress:async({runId:h,orgId:U0})=>{await u.bumpProgress(h,U0)},recordCompleted:async({runId:h,orgId:U0,distinctId:N0,usage:q0})=>{m1.capture({distinctId:N0,event:"chat_message_completed",groups:{organization:U0},properties:{organization_id:U0,thread_id:h,transport:"projector",input_tokens:q0.inputTokens,output_tokens:q0.outputTokens,total_tokens:q0.totalTokens}})},recordFailed:async({runId:h,orgId:U0,distinctId:N0,reason:q0,kind:y0})=>{m1.capture({distinctId:N0,event:"chat_message_failed",groups:{organization:U0},properties:{organization_id:U0,thread_id:h,transport:"projector",error_category:y0,error_message:q0}})},purgeRun:async(h)=>{F.purge(h)}}),l$8({studioContextFactory:b,systemDatabaseUrl:Se(B0().databaseUrl,B0().databasePgSsl),streamBuffer:F}),Pz8(),H8$(),UF8(),LF8(),EF8(),SF8(),hF8(),qP8(),Oz8(),Pe$(),iF8(),ee$(),OP8();let G0=async(h,U0,N0)=>{let q0=await V.findById(h,U0);if(!q0)throw Error("Automation not found");return nD1({automationId:q0.id,organizationId:q0.organization_id,triggerId:null})},I0=new Ws(V,({automation:h,trigger:U0,contextMessages:N0,idempotencyKey:q0})=>NH({automationId:h.id,organizationId:h.organization_id,triggerId:U0.id,contextMessages:N0},{idempotencyKey:q0})),X0=[gH(),Ml(),VD()];for(let h of X0)Mh0(h).then(()=>{}).catch((U0)=>console.error("[monitoring] Retention cleanup failed:",U0));let H0=()=>U4.api.deleteAllExpiredApiKeys().catch((h)=>console.error("[auth] Expired API key cleanup failed:",h));H0(),setInterval(H0,86400000).unref(),E.use("*",async(h,U0)=>{if(ph0(h.req.path))return U0();let N0={measure:async(y0,T1)=>{zH(h,y0);try{return await T1()}finally{SW(h,y0)}}},q0=await gY.create(h.req.raw,{timings:N0});q0.automationRunner=G0,h.set("studioContext",q0);try{await U0()}finally{let y0=q0.pendingRevalidations;if(y0.length>0)Promise.race([Promise.allSettled(y0),G$(30000)]).catch((Q8)=>console.error("[studio] revalidation cleanup error:",Q8))}}),E.use("/api/:org/decopilot/*",Qs),E.use("/api/:org/v1/*",Qs),E.use("/api/:org/files/*",Qs),E.use("*",async(h,U0)=>{if(pz8(h.req.path))return U0();let N0=h.get("studioContext");if(!N0?.organization?.id||!N0?.auth?.user?.id)return U0();if(!(await N0.storage.orgSsoConfig.getByOrgId(N0.organization.id))?.enforced)return U0();if(!await N0.storage.orgSsoSessions.isValid(N0.auth.user.id,N0.organization.id))return h.json({error:"SSO authentication required for this organization"},403);return U0()});let s=new $1;s.use("*",RU({mountPath:"/api/org-sso"})),s.route("/",hy0()),E.route("/api/org-sso",s),E.get("/api/tools/management",(h)=>{return h.json({tools:je,grouped:JT()})}),E.use("/mcp/*",async(h,U0)=>{zH(h,"mcp");try{return await U0()}finally{SW(h,"mcp")}});let o=async(h,U0)=>{let N0=h.var.studioContext;if(!N0.auth.user?.id&&!N0.auth.apiKey?.id){let q0=new URL(h.req.url),y0=h.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),T1=y0?`${y0}://${q0.host}`:q0.origin;return h.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${T1}${q0.pathname}/.well-known/oauth-protected-resource"`}})}return await U0()};if(E.use("/mcp/:connectionId?",o),E.use("/mcp/gateway/:virtualMcpId?",o),E.use("/mcp/virtual-mcp/:virtualMcpId?",o),E.use("/mcp/self",o),mK()){let{mountDevRoutes:h}=(lz8(),bh0(uz8));h(E,o)}let r=new $1;r.use("*",RU({mountPath:"/mcp"})),r.route("/",Yx0()),E.route("/mcp",r);let Q0=new $1;Q0.use("*",RU({mountPath:"/mcp/self"})),Q0.route("/",_g0()),E.route("/mcp/self",Q0);let J0=new $1;J0.use("*",RU({mountPath:"/mcp"})),J0.route("/",Gx0()),E.route("/mcp",J0),E.use("/api/:org/models/*",async(h,U0)=>{zH(h,"llm_models");try{return await U0()}finally{SW(h,"llm_models")}});let u0=IN8({cancelBroadcast:H,streamBuffer:F,runRegistry:D});E.route("/api",u0),E.route("/api",kP8);let C0=new $1;C0.use("*",RU({mountPath:"/api"})),C0.route("/",fg0()),E.route("/api",C0),E.route("/api",sE8);let Y1=new $1;Y1.use("*",RU({mountPath:"/api"})),Y1.route("/",yg0({tokenStorage:v,automationEventDispatcher:I0})),E.route("/api",Y1);let i0=new n70(Z.db),j0=new $1;j0.use("*",RU({mountPath:"/api"})),j0.route("/",iy0()),E.route("/api",j0),E.route("/api/deco-sites",cN8());let E0=new $1;E0.use("*",RU({mountPath:"/api/deco-sites"})),E0.route("/",ny0()),E.route("/api/deco-sites",E0),E.route(fy0,FN8()),E.route(SO8,bO8()),E.route("/api/_editor-resolve",rE8()),E.route(IU8,kU8()),E.route(Cy0,dU8());let m0=B0(),B1=m0.elevenlabsApiKey?new Bh0({apiKey:m0.elevenlabsApiKey,model:m0.elevenlabsVoiceModel,conversationModel:m0.elevenlabsConversationModel,voiceId:m0.elevenlabsVoiceId}):null,H1={openai:m0.openaiLiveApiKey?new Vq1({apiKey:m0.openaiLiveApiKey,voice:m0.openaiLiveVoice}):null,elevenlabs:B1?new Mq1(B1,()=>U?.getConnection()??null):null},_0=new _q1({adapter:B1,conversationAdapters:H1,defaults:m0,secret:nz8(m0),getConnection:()=>U?.getConnection()??null}),c0=qE8({voiceSessions:_0,kvStorage:i0,runRegistry:D,streamBuffer:F,sseHub:_6,cancelBroadcast:H,tokenStorage:v,automationEventDispatcher:I0,mountDevAssets:mK(),mcpAuth:o,oauthProxyHandler:dz8,watchHandler:sz8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",c0),E.notFound((h)=>{return h.json({error:"Not Found",path:h.req.path},404)}),E.onError(CN8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([_6.stop(),i2?Promise.resolve(i2()).finally(()=>{i2=null}):Promise.resolve()]),U)await U.drain().catch((h)=>console.error("[shutdown] NATS drain error:",h));console.log("[shutdown] Flushing telemetry..."),await rJ().catch((h)=>console.error("[shutdown] Telemetry flush error:",h)),console.log("[shutdown] Closing database..."),await y5$(Z).catch((h)=>console.error("[shutdown] Database close error:",h)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await ED.registerQueue(jG,{partitionQueue:!0,concurrency:hD1,minPollingIntervalMs:uD1}),await ED.registerQueue(oW,{partitionQueue:!0,concurrency:AD1,priorityEnabled:!0}),await ED.registerQueue(qD,{workerConcurrency:B0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await ED.registerQueue(RD,{workerConcurrency:B0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await ED.registerQueue(mj,{partitionQueue:!0,concurrency:u$8}),await ED.registerQueue(s2,ae$),await ED.registerQueue(a2),await n21(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((h)=>ED.deleteQueue(h))),await lD1(Z.pool),zK$().catch((h)=>{console.error("[studio-pack-backfill] failed:",h)}),Ac(Z.db).catch((h)=>{console.error("[automations] built-in seed failed:",h)}),F8$().catch((h)=>{console.error("[org-fs] public-sets boot sync kick failed:",h)})}})}var iz8,mz8=5000,i2=null,dz8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),Y=Q[Q.length-1],X=$.get("studioContext");if(!X)X=await gY.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let v=await $.req.json().catch(()=>({}));return $.json({...typeof v==="object"&&v!==null?v:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await Go(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=pE1(await W.json());if(!K)K=H.origin;let N=await yZ0(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),D;if(Y==="authorize")D=B.authorization_endpoint;else if(Y==="token")D=B.token_endpoint;else if(Y==="register")D=B.registration_endpoint;if(!D)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let O=VG8(D);if(O)return O;let j=new URL(D),w=new URL($.req.url);if(j.search=w.search,Y==="authorize"){let v=j.searchParams.get("redirect_uri");if(v){let b=B0().baseUrl??w.origin;try{if(!oz8(new URL(v),b))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}j.searchParams.set("redirect_uri",v)}if(j.searchParams.has("resource"))j.searchParams.set("resource",U);if(nF8(G.connection_url))j.searchParams.set("auto_personal","true"),j.searchParams.set("force_new","true");return $.redirect(j.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},P=$.req.header("Content-Type");if(P)E["Content-Type"]=P;let T=$.req.header("Authorization");if(T)E.Authorization=T;let z,A=null,M=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&P?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let i=atob(T.slice(6).trim()),G0=i.indexOf(":");if(G0!==-1){let I0=decodeURIComponent(i.slice(0,G0)),X0=decodeURIComponent(i.slice(G0+1));A=I0||null,M=X0||null}}catch{}let v=await $.req.formData();if(v.has("resource"))v.set("resource",U);let b=v.get("client_id"),u=v.get("client_secret");if(typeof b==="string"&&b)A=b;if(typeof u==="string"&&u)M=u;let m=new URLSearchParams;for(let[i,G0]of v.entries())m.append(i,G0.toString());z=m.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let v=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),b=await $.req.text(),u={};try{u=b?JSON.parse(b):{}}catch{z=b}let m=typeof u==="object"&&u!==null&&!Array.isArray(u);if(z===void 0&&!m)z=b;if(z===void 0){let i=u,G0=i.metadata&&typeof i.metadata==="object"?i.metadata:{};i.metadata={...G0,organization_id:G.organization_id,...v?.slug?{organization_slug:v.slug}:{},...v?.name?{organization_name:v.name}:{}},z=JSON.stringify(i),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let f=await fetch(j.toString(),{method:$.req.method,headers:E,body:z,duplex:"half",redirect:"manual"}),S=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[v,b]of f.headers.entries())if(!V.includes(v.toLowerCase()))S.set(v,b);if(Y==="token"&&f.ok){let v=await f.text();try{let b=JSON.parse(v);if(typeof b.access_token==="string"&&b.access_token){let u=typeof b.expires_in==="number"?new Date(Date.now()+b.expires_in*1000):null,m=null;try{m=await X2(G.connection_url)??D}catch{m=D}let i={connectionId:Z,accessToken:b.access_token,refreshToken:typeof b.refresh_token==="string"?b.refresh_token:null,scope:typeof b.scope==="string"?b.scope:null,expiresAt:u,clientId:A,clientSecret:M,tokenEndpoint:m};await new Y9(X.db,X.vault).upsert(i)}}catch(b){console.error("[oauth-proxy] failed to persist downstream token:",b)}return new Response(v,{status:f.status,statusText:f.statusText,headers:S})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:S})},sz8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let Y=Z.organization?.id;if(!Y)return $.json({error:"organization id missing"},400);let X=$.req.query("types"),J=X?X.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!hB(Y)||!await uB(Z)))return $.json({error:"forbidden"},403);let W=G?__0:Y;if(G)mO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return Cj($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!_6.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{_6.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),_6.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),_6.remove(W,K),N()})})})},wB5,zB5,AB5=()=>PB5(U4),TB5=()=>EB5(U4);var rz8=L(()=>{g$();l1();U8$();NF8();OF8();PF8();_F8();uF8();DZ0();YN1();pF8();$90();B9();qi();q8();H8();My0();rF8();bO1();$H();fF();B21();vG();y6();W6();P21();CU8();iU8();V21();UN8();f21();d21();i21();uK();gZ0();p21();SN8();Iy0();RE8();CE8();SE8();xE8();iE8();s21();Xx0();WZ0();aE8();Wx0();IT1();eE8();MT1();QP8();HP8();NP8();BP8();LP8();jP8();EP8();MP8();pq1();QA1();CP8();VT1();AT1();AY0();pP8();vq1();VJ();XB0();x80();SN1();l$0();c$0();hO1();nP8();oP8();l21();Qz8();kv0();Yz8();s50();lO();F5();qz1();Kz8();jz8();N3();cO();zz8();JF0();JR1();sW();t21();hO();OD1();JF0();f90();d50();Hz1();Tz8();bw();Rz8();Ss();B21();ln();Wt();uv0();iz8=_(pH(),1);wB5=new OB5,zB5=new Set([jG,oW,qD,RD,mj,s2])});var Q28={};P6(Q28,{resolveClientDir:()=>SB5,resolveAssetPathWithTraversalCheck:()=>Z28,isPathWithinDirectory:()=>$28,createAssetHandler:()=>_B5});import{resolve as KY0,dirname as RB5,join as MB5,extname as VB5,basename as IB5,sep as ez8}from"path";function kB5($,Z){if($===Z||IB5($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${ez8}assets${ez8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function $28($,Z){let Q=KY0(Z),Y=KY0($);return Y===Q||Y.startsWith(Q+"/")}function Z28({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=KY0(Z,Q);if(!$28(Y,Z))return null;return Y}function SB5($,Z="../client"){let Q=new URL($),Y=RB5(Q.pathname);return KY0(Y,Z)}function _B5($={}){let{env:Z="production",clientDir:Q=CB5,isServerPath:Y=()=>!1}=$;if(Z==="development")return async function(J){return null};return async function(J){if(J.method!=="GET")return null;let G=new URL(J.url),W;try{W=decodeURIComponent(G.pathname)}catch{return null}if(Y(W))return null;let K=Z28({requestPath:W,clientDir:Q});if(!K)return null;let H=MB5(K,"index.html"),F=KY0(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(VB5(K))?[H,F]:[];for(let D of[K,...B])try{let O=Bun.file(D);if(await O.exists())return new Response(O,{headers:kB5(D,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var CB5="./dist/client";var Y28=()=>{};var X28={};P6(X28,{tryUpgradePreviewWs:()=>mB5,tryHandlePreviewHttp:()=>gB5,previewWebSocketHandler:()=>cB5,parsePreviewBaseDomain:()=>yB5,isPreviewWsData:()=>Vh0,extractHandleFromHost:()=>FR1});function xB5($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function fB5(){return new Response(bB5,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function yB5($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let Y=Q.hostname;if($.includes("{handle}")){let X=Y.indexOf(".");if(X<=0||X===Y.length-1)return null;return Y.slice(X+1)}return Y}function FR1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),Y=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!Y.endsWith(J))return null;let G=Y.slice(0,Y.length-J.length);if(!G||G.includes("."))return null;return G}async function gB5($,Z){let Q=FR1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let{handle:Y,slug:X}=_31(Q),J=await Z.getRunner();if(!J)return FY0(503,"preview proxy not configured");let G=await J.proxyPreviewRequest(Y,X?lB5($,X):$);if(G.headers.get(tp)&&xB5($))return fB5();return G.headers.delete(tp),G}function uB5($){return{protocols:$.upstreamProtocols,headers:{[S31]:$.appSlug}}}function lB5($,Z){let Q=new Headers($.headers);return Q.set(S31,Z),new Request($,{headers:Q})}function FY0($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Vh0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function mB5($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=FR1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let{handle:X,slug:J}=_31(Y),G=await Q.getRunner();if(!G)return FY0(503,"preview proxy not configured");let W=await G.resolvePreviewUpstreamUrl(X);if(!W)return FY0(404,"sandbox not found");let K=new URL($.url);if(K.pathname.startsWith("/_sandbox"))return FY0(404,"not found");let H=`${W.replace(/^http/,"ws")}${K.pathname}${K.search}`,F=$.headers.get("sec-websocket-protocol"),U=F?F.split(",").map((D)=>D.trim()).filter(Boolean):[],N={kind:"preview",upstreamUrl:H,upstreamProtocols:U,...J?{appSlug:J}:{},pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:N}))return FY0(426,"upgrade failed");return}function HY0($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var vB5=256,bB5='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',hB5,cB5;var J28=L(()=>{y60();hB5=WebSocket;cB5={open($){let Z=$.data;if(!Vh0(Z))return;let Q;try{Q=Z.appSlug?new hB5(Z.upstreamUrl,uB5(Z)):Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),HY0($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let Y=Z.pending.shift();if(Y!==void 0)Q.send(Y)}}),Q.addEventListener("message",(Y)=>{if(Z.closed)return;$.send(Y.data)}),Q.addEventListener("close",(Y)=>{HY0($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{HY0($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!Vh0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=vB5){HY0($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!Vh0(Z))return;HY0($,Z,1000,"")}}});g$();var TR1="14";function qR1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:TR1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}g$();import T28 from"pg";var RR1=8314027461559302n,q28=600000,R28=500;async function MR1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=q28}=$,X=$.log??((K)=>console.log(K)),J=new T28.Client({connectionString:Q});await J.connect();let G=Date.now(),W=!1;try{while(!W){if(W=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[RR1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=Y)throw Error(`Timed out after ${Y}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await G$(R28)}let K=Date.now()-G;if(K>1000)X(`[dbos] waited ${K}ms for the migration lock; another process migrated first`);return await Z()}finally{if(W)try{await J.query("SELECT pg_advisory_unlock($1)",[RR1.toString()])}catch{}await J.end().catch(()=>{})}}l1();gh0();y6();function TA8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Zu0($,Z){for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Y===void 0)continue;if(Y===Z)return $[Q+1];if(Y.startsWith(`${Z}=`))return Y.slice(Z.length+1)}return}function KM1(){let $=TA8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Zu0($,"--cpu-prof-dir")??process.cwd(),name:Zu0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Zu0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}Xu0();var RY0;function jM1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=$A();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...Y}))};return Z().catch(()=>{}),RY0=setInterval(()=>void Z().catch(()=>{}),$),RY0.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),Y=typeof Q==="string"?Q:JSON.stringify(Q),X=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(X,Y),console.log(JSON.stringify({msg:"heap-snapshot-written",path:X}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(RY0)clearInterval(RY0)}}import*as MA8 from"bun:jsc";var{startSamplingProfiler:VA8,samplingProfilerStackTraces:IA8}=MA8;function wM1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{VA8()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,Y=performance.now()+Z,X=()=>{let J=performance.now(),G=J-Y;Y=J+Z;let W=[];try{W=IA8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function EM1(){KM1();let $=[jM1(),OM1(),wM1()];return()=>{for(let Z of $)Z()}}import{existsSync as aB5}from"fs";var nW=B0();JM1();var{DBOS:UY0,DBOSClient:dB5}=await import("@dbos-inc/dbos-sdk");function OR1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var iB5=[jG,oW,qD,RD,mj,s2,a2],pB5=nW.dispatchRole==="worker"?iB5:nW.dispatchRole==="api"?[]:void 0;UY0.setConfig(qR1({systemDatabaseUrl:OR1(nW.databaseUrl,nW.databasePgSsl),poolSize:nW.dbosPoolSize,executorID:nW.podName,listenQueues:pB5}));var{createApp:nB5}=await Promise.resolve().then(() => (rz8(),az8)),{isServerPath:tB5}=await Promise.resolve().then(() => (AY0(),mR1)),{createAssetHandler:oB5,resolveClientDir:F28}=await Promise.resolve().then(() => (Y28(),Q28)),sB5=nW.port,G28=F28(import.meta.url,"../client"),U28=aB5(G28)?G28:F28(import.meta.url,"../dist/client"),rB5=oB5({clientDir:U28,isServerPath:tB5}),eB5={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function $D5($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(eB5))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:ZD5,tryHandlePreviewHttp:QD5,tryUpgradePreviewWs:YD5,previewWebSocketHandler:UR1,isPreviewWsData:NR1}=await Promise.resolve().then(() => (J28(),X28)),{getOrInitSharedRunner:N28}=await Promise.resolve().then(() => (bX(),dc$)),B28=ZD5(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),W28={baseDomain:B28??"",getRunner:N28};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())N28().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var Ih0=await nB5({clientDir:U28}),BR1=process.env.DBOS_CONDUCTOR_KEY?.trim(),K28=process.env.DBOS_CONDUCTOR_URL?.trim();await MR1({databaseUrl:OR1(nW.databaseUrl,nW.databasePgSsl)},()=>UY0.launch({...BR1?{conductorKey:BR1}:{},...BR1&&K28?{conductorURL:K28}:{}}));console.log(`[dbos] application version: ${UY0.applicationVersion}`);var DR1=5,LR1=0;await $8(async()=>{LR1++;try{return await Ih0.initDbos()}catch($){let Z=LR1>=DR1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${LR1}/${DR1} failed, ${Z}`,$),$}},{maxAttempts:DR1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});var XD5=Bun.serve({idleTimeout:0,port:sB5,hostname:"0.0.0.0",fetch:async($,Z)=>{if(B28){let Y=await YD5($,Z,W28);if(Y===void 0)return;if(Y)return Y;let X=await QD5($,W28);if(X)return X}let Q=await rB5($);if(Q)return $D5(Q);return Ih0.fetch($,{server:Z})},websocket:{open($){if(NR1($.data))UR1.open($)},message($,Z){if(NR1($.data))UR1.message($,Z)},close($){if(NR1($.data))UR1.close($)}},development:!1}),JD5=EM1();if(nW.localMode)Promise.resolve().then(() => (ih(),Av0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let Y=await Q();if(Y>0)console.log(`[local-mode] cleared ${Y} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let X=await $()}catch(Y){console.error("Failed to seed local mode:",Y)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (ih(),Av0));Z()}catch{}});var H28=!1;async function GD5($){let Z;try{Z=await dB5.create({systemDatabaseUrl:OR1(nW.databaseUrl,nW.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:oW,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let Y=Q.map((X)=>X.workflowID);await Z.resumeWorkflows(Y,{queueName:oW}),console.log(`[shutdown] re-enqueued ${Y.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,Y)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function kh0($){if(H28)return;H28=!0,console.log(`
4562
4562
  [shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),Y=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);Y.unref?.();let X=0;try{JD5(),Ih0.markShuttingDown();let J=VR1(nW.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await G$(J),await XD5.stop(!0);let G=UY0.executorID;await UY0.shutdown(),await GD5(G),await Ih0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>kh0("SIGTERM"));process.on("SIGINT",()=>kh0("SIGINT"));process.on("SIGHUP",()=>kh0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),kh0("uncaughtException")});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "decocms",
3
- "version": "4.535.2",
3
+ "version": "4.535.3",
4
4
  "description": "Deco CMS — Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- import{c as d,j as a,a2 as g}from"./index-CougWaQw.js";import{C as x}from"./index-Ddd2dpQ0.js";import{a as h}from"./thread-route-DDAbB8Ku.js";import{u as $}from"./use-task-metadata-akm3m5_0.js";import{AppViewContent as A}from"./project-app-view-C7eutFBD.js";import"./use-mobile-D0NbGq8r.js";import"./use-sidebar-collapsed-1C51orRq.js";import"./use-chat-layout-state-CZOY4AOv.js";import"./use-panel-navigate-jx-DL83P.js";import"./use-project-scope-CXMfs_YY.js";import"./repository-binding-CnII80N0.js";import"./use-mcp-client-D0NTKORm.js";import"./auth-CXFweNuJ.js";import"./thread-intent-2lfYBt3n.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-BNmRTmhu.js";import"./task-board-CAwfWvJZ.js";import"./schema-pEB8KJ_m.js";import"./slugify-CEUa2lfQ.js";import"./agent-icon-C913Kovt.js";import"./AlertCircle-aFc0Y1Nw.js";import"./Tool01-nplovCkN.js";import"./ArrowUp-CUOoY7to.js";import"./ArrowLeft-B4V3HvD7.js";import"./LinkBroken01-TPUim_Vo.js";import"./ShoppingBag01-D06WkjOb.js";import"./ZoomOut-CZi_Jv_H.js";import"./Building02-BFbAAk3B.js";import"./CheckCircle-DlVRpmKe.js";import"./ChevronUp-BVvI38XG.js";import"./ChevronSelectorVertical-sTFwDpoF.js";import"./UserSquare-De6W8qV_.js";import"./Copy01-CzScZaHL.js";import"./CreditCard01-BLVhUw2n.js";import"./DotsVertical-ziuRVDr4.js";import"./Image01-DFj2MHb1.js";import"./Globe04-BAxLQ7vf.js";import"./SwitchHorizontal01-BmzvIjLC.js";import"./Key01-DmX6-6Ny.js";import"./Link01-CvodJNHb.js";import"./Minus-CQxkpLoY.js";import"./Monitor01-DH_D-idP.js";import"./Sun-F5GrVV08.js";import"./Play-Dudpy-ba.js";import"./Plus-Dzr9ESX-.js";import"./SearchMd-oixIfKAh.js";import"./Trash01-DERnYCWh.js";import"./Upload01-HMv8LaZ3.js";import"./Users01-mOjjkbyN.js";import"./XClose-DlDfGuQd.js";import"./tooltip-DIuN4DIg.js";import"./index-DImkUUlk.js";import"./toolbar-icon-button-CDcHhA1t.js";import"./shell-layout-DM2ZRo1F.js";import"./use-deployment-admin-BgZgODZv.js";import"./admin-fetch-BhTJlAsX.js";import"./use-clock-tick-BHoYlCCT.js";import"./command-DFIvuSq5.js";import"./index-xGHoAbQb.js";import"./integration-icon-BK5HEqOt.js";import"./project-icon-XWJRcwiR.js";import"./new-project-dialog-CAZxn86Q.js";import"./label-D2QweUS5.js";import"./repository-import-picker-BiuLIYSL.js";import"./use-navigate-to-agent-gCcx6GwS.js";import"./repository-picker-Dvi0iUFa.js";import"./useInfiniteQuery-Bij8QMI7.js";import"./infiniteQueryObserver-Bum778rO.js";import"./collection-search-S4_KAabw.js";import"./use-debounced-value-DqClep0S.js";import"./use-organization-settings-D06a1Czd.js";import"./required-auth-layout-CbfxWhtd.js";import"./autosend-5Z9iw8Hd.js";import"./use-org-sso-BVIo9GTp.js";import"./sheet-CXIHwdnE.js";import"./resizable-B9g11DZi.js";import"./tool-namespace-BOiBuXM-.js";import"./use-mcp-tools-BnP9a_TP.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-CJcE7Me0.js";import"./types-Dl-hn7PZ.js";import"./chat-context-GGH0Jpcf.js";import"./use-decopilot-events-D8_8cAbK.js";import"./use-ai-providers-DKabXXld.js";import"./location-V0VwTJTt.js";import"./task-route-CC3-1h7p.js";import"./task-key-BCHdFiOO.js";import"./core.esm-DYPHfGaf.js";import"./connect-source-dialog-CKxXP_zU.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-BpR9mqxM.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-DvzVBqg8.js";import"./icon-button-CmulQtFx.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-Up-l-Sx4.js";import"./authenticate-and-persist-oauth-Crrqkmel.js";import"./mcp-oauth-BRI2WRQ6.js";import"./mcp-oauth-CoELXu3p.js";import"./track-CBxuiTSO.js";import"./extract-connection-data-C9beUc6X.js";import"./connection-0N2uS0ke.js";import"./url-slug-D9xrBukJ.js";const l=g("/shell/$org/org-shell/agent-shell/projects/$agentId/apps/$connectionId/$toolName");function j(){const t=d.c(10),{connectionId:o,toolName:r}=l.useParams(),{args:i}=l.useSearch(),u=h(),e=$(u);let p;t[0]!==o||t[1]!==e?.expanded_tools||t[2]!==r?(p=e?.expanded_tools?.find(c=>c.appId===o&&c.toolName===r),t[0]=o,t[1]=e?.expanded_tools,t[2]=r,t[3]=p):p=t[3];const f=p,s=`${o}:${r}`,n=f?.args;let m;return t[4]!==i||t[5]!==o||t[6]!==s||t[7]!==n||t[8]!==r?(m=a.jsx(A,{connectionId:o,toolName:r,args:n,searchArgs:i},s),t[4]=i,t[5]=o,t[6]=s,t[7]=n,t[8]=r,t[9]=m):m=t[9],m}function jo(){const t=d.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=a.jsx(x.Content,{children:a.jsx(j,{})}),t[0]=o):o=t[0],o}export{jo as default};
@@ -1 +0,0 @@
1
- import{c,j as e,bB as b,u as g}from"./index-CougWaQw.js";import{C as j}from"./index-Ddd2dpQ0.js";import{F as v,H as S}from"./file-share-button-COlLgw2F.js";import{c as k,a as y,e as _}from"./use-org-fs-BKmJqW_A.js";import{S as w}from"./settings-tab-BMTHV3QM.js";import{b as M}from"./thread-route-DDAbB8Ku.js";import"./use-mobile-D0NbGq8r.js";import"./use-sidebar-collapsed-1C51orRq.js";import"./use-chat-layout-state-CZOY4AOv.js";import"./use-panel-navigate-jx-DL83P.js";import"./use-project-scope-CXMfs_YY.js";import"./repository-binding-CnII80N0.js";import"./use-mcp-client-D0NTKORm.js";import"./auth-CXFweNuJ.js";import"./thread-intent-2lfYBt3n.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-BNmRTmhu.js";import"./task-board-CAwfWvJZ.js";import"./schema-pEB8KJ_m.js";import"./slugify-CEUa2lfQ.js";import"./agent-icon-C913Kovt.js";import"./AlertCircle-aFc0Y1Nw.js";import"./Tool01-nplovCkN.js";import"./ArrowUp-CUOoY7to.js";import"./ArrowLeft-B4V3HvD7.js";import"./LinkBroken01-TPUim_Vo.js";import"./ShoppingBag01-D06WkjOb.js";import"./ZoomOut-CZi_Jv_H.js";import"./Building02-BFbAAk3B.js";import"./CheckCircle-DlVRpmKe.js";import"./ChevronUp-BVvI38XG.js";import"./ChevronSelectorVertical-sTFwDpoF.js";import"./UserSquare-De6W8qV_.js";import"./Copy01-CzScZaHL.js";import"./CreditCard01-BLVhUw2n.js";import"./DotsVertical-ziuRVDr4.js";import"./Image01-DFj2MHb1.js";import"./Globe04-BAxLQ7vf.js";import"./SwitchHorizontal01-BmzvIjLC.js";import"./Key01-DmX6-6Ny.js";import"./Link01-CvodJNHb.js";import"./Minus-CQxkpLoY.js";import"./Monitor01-DH_D-idP.js";import"./Sun-F5GrVV08.js";import"./Play-Dudpy-ba.js";import"./Plus-Dzr9ESX-.js";import"./SearchMd-oixIfKAh.js";import"./Trash01-DERnYCWh.js";import"./Upload01-HMv8LaZ3.js";import"./Users01-mOjjkbyN.js";import"./XClose-DlDfGuQd.js";import"./tooltip-DIuN4DIg.js";import"./index-DImkUUlk.js";import"./toolbar-icon-button-CDcHhA1t.js";import"./shell-layout-DM2ZRo1F.js";import"./use-deployment-admin-BgZgODZv.js";import"./admin-fetch-BhTJlAsX.js";import"./use-clock-tick-BHoYlCCT.js";import"./command-DFIvuSq5.js";import"./index-xGHoAbQb.js";import"./integration-icon-BK5HEqOt.js";import"./project-icon-XWJRcwiR.js";import"./new-project-dialog-CAZxn86Q.js";import"./label-D2QweUS5.js";import"./repository-import-picker-BiuLIYSL.js";import"./use-navigate-to-agent-gCcx6GwS.js";import"./repository-picker-Dvi0iUFa.js";import"./useInfiniteQuery-Bij8QMI7.js";import"./infiniteQueryObserver-Bum778rO.js";import"./collection-search-S4_KAabw.js";import"./use-debounced-value-DqClep0S.js";import"./use-organization-settings-D06a1Czd.js";import"./required-auth-layout-CbfxWhtd.js";import"./autosend-5Z9iw8Hd.js";import"./use-org-sso-BVIo9GTp.js";import"./sheet-CXIHwdnE.js";import"./resizable-B9g11DZi.js";import"./popover-D5HVj9db.js";import"./index-1BK0D9QN.js";import"./extract-connection-data-C9beUc6X.js";import"./metadata-D72DunRR.js";import"./connection-0N2uS0ke.js";import"./url-slug-D9xrBukJ.js";import"./chat-context-GGH0Jpcf.js";import"./use-decopilot-events-D8_8cAbK.js";import"./use-ai-providers-DKabXXld.js";import"./location-V0VwTJTt.js";import"./build-improve-prompt-doc-C_00Ntgw.js";import"./empty-state-I9kFofDC.js";import"./use-date-fns-locale-DuBvmVa0.js";import"./mcp-oauth-BRI2WRQ6.js";import"./mcp-oauth-CoELXu3p.js";import"./textarea-DUia9RkA.js";import"./use-connection-CcrF7v5F.js";import"./use-debounced-autosave-DEVo_C-J.js";import"./add-connection-dialog-C9RqnWwO.js";import"./connection-card-DfaT2fCD.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-CnH1-BoJ.js";import"./form-DvzVBqg8.js";import"./select-Dyumr-dT.js";import"./index-BdQq_4o_.js";import"./schema-C4WMcmzI.js";import"./connection-form-helpers-35vnRZcc.js";import"./authenticate-and-persist-oauth-Crrqkmel.js";import"./collection-tabs-BU5DI0lq.js";import"./badge-DLDc3XJd.js";import"./use-infinite-scroll-CPX1G9gZ.js";import"./useSuspenseInfiniteQuery-CEQRCLvL.js";import"./file-type-icon-ClMPkSrR.js";import"./checkbox-BfWTtpoP.js";import"./search-input-bh1ZrQSN.js";import"./use-mcp-auth-status-DFNf_NTt.js";import"./types-Dl-hn7PZ.js";import"./use-mcp-tools-BnP9a_TP.js";import"./use-mcp-prompts-BjeRnCFI.js";import"./utils-CVEq3hMx.js";import"./switch-D3ZMBgst.js";import"./scroll-area-DY12-cVO.js";import"./experiments-tab-choice-DAGLTFvi.js";import"./use-project-native-view-presence-CH9zsUtE.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-DxHyOtM5.js";import"./site-slug-o7Vv7Ck8.js";import"./optimistic-project-sidebar-views-BBn4-VIq.js";import"./sections-Dz-3FzhS.js";import"./use-copy-AP38NyPo.js";import"./virtual-mcp-qbpJijf8.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-DZfzvpJH.js";import"./use-secrets-Cj4Pb8n_.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./app-preview-url-9Od4s8Sz.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function P(i){const t=c.c(5),{label:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p=e.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=p):p=t[0];let o;t[1]!==r?(o=r&&e.jsx("p",{className:"text-xs text-muted-foreground",children:r}),t[1]=r,t[2]=o):o=t[2];let m;return t[3]!==o?(m=e.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[p,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p={refetchIntervalWhenAbsent:2e3},t[0]=p):p=t[0];const o=k(x,r,p),m=y(x)(r);if(o.isPending||!o.data){const h=!o.isPending&&!o.data?"Waiting for the deck to sync…":void 0;let l;return t[1]!==h?(l=e.jsx(P,{label:h}),t[1]=h,t[2]=l):l=t[2],l}let s;t[3]!==o.data?(s=_(o.data),t[3]=o.data,t[4]=s):s=t[4];const f=o.data.shareMode??"private",u=o.data.effectivePublic??!1,d=window.location.origin+m;let a;t[5]!==r||t[6]!==f||t[7]!==u||t[8]!==d?(a=e.jsx(v,{volume:x,path:r,shareMode:f,effectivePublic:u,url:d}),t[5]=r,t[6]=f,t[7]=u,t[8]=d,t[9]=a):a=t[9];let n;return t[10]!==r||t[11]!==m||t[12]!==s||t[13]!==a?(n=e.jsx(S,{readUrl:m,marker:s,title:r,savePath:r,trailing:a}),t[10]=r,t[11]=m,t[12]=s,t[13]=a,t[14]=n):n=t[14],n}function C(){const i=c.c(4);let t;i[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},i[0]=t):t=i[0];const r=g(t),p=M(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==p?(m=o?e.jsx(D,{path:o},o):e.jsx(w,{virtualMcpId:p}),i[1]=o,i[2]=p,i[3]=m):m=i[3],m}function mr(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(j.Content,{children:e.jsx(C,{})}),i[0]=t):t=i[0],t}export{mr as default};
@@ -1 +0,0 @@
1
- import{c as m,j as i}from"./index-CougWaQw.js";import{C as n}from"./index-Ddd2dpQ0.js";import{S as a}from"./site-draft-actions-BnH3Iq2R.js";import{E as c,a as l}from"./experiments-tab-BH-x7FBh.js";import{S as u}from"./settings-tab-BMTHV3QM.js";import{e as f}from"./use-organization-settings-D06a1Czd.js";import{b as x}from"./thread-route-DDAbB8Ku.js";import{u as b,b as j,h as d}from"./experiments-tab-choice-DAGLTFvi.js";import"./use-mobile-D0NbGq8r.js";import"./use-sidebar-collapsed-1C51orRq.js";import"./use-chat-layout-state-CZOY4AOv.js";import"./use-panel-navigate-jx-DL83P.js";import"./use-project-scope-CXMfs_YY.js";import"./repository-binding-CnII80N0.js";import"./use-mcp-client-D0NTKORm.js";import"./auth-CXFweNuJ.js";import"./thread-intent-2lfYBt3n.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./watch-sse-pool-BNmRTmhu.js";import"./task-board-CAwfWvJZ.js";import"./schema-pEB8KJ_m.js";import"./slugify-CEUa2lfQ.js";import"./agent-icon-C913Kovt.js";import"./AlertCircle-aFc0Y1Nw.js";import"./Tool01-nplovCkN.js";import"./ArrowUp-CUOoY7to.js";import"./ArrowLeft-B4V3HvD7.js";import"./LinkBroken01-TPUim_Vo.js";import"./ShoppingBag01-D06WkjOb.js";import"./ZoomOut-CZi_Jv_H.js";import"./Building02-BFbAAk3B.js";import"./CheckCircle-DlVRpmKe.js";import"./ChevronUp-BVvI38XG.js";import"./ChevronSelectorVertical-sTFwDpoF.js";import"./UserSquare-De6W8qV_.js";import"./Copy01-CzScZaHL.js";import"./CreditCard01-BLVhUw2n.js";import"./DotsVertical-ziuRVDr4.js";import"./Image01-DFj2MHb1.js";import"./Globe04-BAxLQ7vf.js";import"./SwitchHorizontal01-BmzvIjLC.js";import"./Key01-DmX6-6Ny.js";import"./Link01-CvodJNHb.js";import"./Minus-CQxkpLoY.js";import"./Monitor01-DH_D-idP.js";import"./Sun-F5GrVV08.js";import"./Play-Dudpy-ba.js";import"./Plus-Dzr9ESX-.js";import"./SearchMd-oixIfKAh.js";import"./Trash01-DERnYCWh.js";import"./Upload01-HMv8LaZ3.js";import"./Users01-mOjjkbyN.js";import"./XClose-DlDfGuQd.js";import"./tooltip-DIuN4DIg.js";import"./index-DImkUUlk.js";import"./toolbar-icon-button-CDcHhA1t.js";import"./shell-layout-DM2ZRo1F.js";import"./use-deployment-admin-BgZgODZv.js";import"./admin-fetch-BhTJlAsX.js";import"./use-clock-tick-BHoYlCCT.js";import"./command-DFIvuSq5.js";import"./index-xGHoAbQb.js";import"./integration-icon-BK5HEqOt.js";import"./project-icon-XWJRcwiR.js";import"./new-project-dialog-CAZxn86Q.js";import"./label-D2QweUS5.js";import"./repository-import-picker-BiuLIYSL.js";import"./use-navigate-to-agent-gCcx6GwS.js";import"./repository-picker-Dvi0iUFa.js";import"./useInfiniteQuery-Bij8QMI7.js";import"./infiniteQueryObserver-Bum778rO.js";import"./collection-search-S4_KAabw.js";import"./use-debounced-value-DqClep0S.js";import"./required-auth-layout-CbfxWhtd.js";import"./autosend-5Z9iw8Hd.js";import"./use-org-sso-BVIo9GTp.js";import"./sheet-CXIHwdnE.js";import"./resizable-B9g11DZi.js";import"./separator-DrU4DMEu.js";import"./chat-context-GGH0Jpcf.js";import"./use-decopilot-events-D8_8cAbK.js";import"./use-ai-providers-DKabXXld.js";import"./location-V0VwTJTt.js";import"./site-editor-toast-C5nnCy5g.js";import"./use-session-runtime-D37re8YG.js";import"./sandbox-url-D3mC8qhT.js";import"./utils-BzqPVjaH.js";import"./use-sandbox-events-B2TjVShJ.js";import"./sandbox-git-api-DcqI6XE4.js";import"./popover-D5HVj9db.js";import"./tabs-DvKB0Wsw.js";import"./active-indicator-CCMhAsc_.js";import"./use-releases-DR4CWHLU.js";import"./serial-task-queue-CGOeQgpr.js";import"./virtual-mcp-qbpJijf8.js";import"./url-slug-D9xrBukJ.js";import"./use-fast-preview-draft-url-BnvZfNzT.js";import"./section-preview-url-7zfngvgW.js";import"./preview-link-C762yHOt.js";import"./variant-draft-pointer-BeAKcq_c.js";import"./parse-sections-BcFrejWa.js";import"./index-B8VmK5No.js";import"./tool-namespace-BOiBuXM-.js";import"./drawer-CnH1-BoJ.js";import"./use-mcp-prompts-BjeRnCFI.js";import"./usage-stats-wB5KA7-v.js";import"./form-DvzVBqg8.js";import"./utils-CVEq3hMx.js";import"./markdown-By-zKv4N.js";import"./use-copy-AP38NyPo.js";import"./input-2GI01ZHq.js";import"./icon-button-CmulQtFx.js";import"./file-type-icon-ClMPkSrR.js";import"./chat-draft-ChfzWruH.js";import"./select-Dyumr-dT.js";import"./index-BdQq_4o_.js";import"./use-deco-credits-CRR7Vt7Z.js";import"./toggle-group-Dv6s-3ES.js";import"./index-DQT_QlGM.js";import"./checkbox-BfWTtpoP.js";import"./ai-providers-logos-DD3qZ33J.js";import"./input-C6J6sFLk.js";import"./suggestion-Bh_FXVoZ.js";import"./use-org-fs-BKmJqW_A.js";import"./question-004-sINsf4GQ.js";import"./feature-paywall-iuBIIyMp.js";import"./plan-ladder-ChGHzzYA.js";import"./add-connection-dialog-C9RqnWwO.js";import"./extract-connection-data-C9beUc6X.js";import"./metadata-D72DunRR.js";import"./connection-0N2uS0ke.js";import"./connection-card-DfaT2fCD.js";import"./connection-slug-CITJ0kGN.js";import"./textarea-DUia9RkA.js";import"./use-connection-CcrF7v5F.js";import"./schema-C4WMcmzI.js";import"./connection-form-helpers-35vnRZcc.js";import"./authenticate-and-persist-oauth-Crrqkmel.js";import"./mcp-oauth-BRI2WRQ6.js";import"./mcp-oauth-CoELXu3p.js";import"./collection-tabs-BU5DI0lq.js";import"./badge-DLDc3XJd.js";import"./use-infinite-scroll-CPX1G9gZ.js";import"./useSuspenseInfiniteQuery-CEQRCLvL.js";import"./use-task-board-events-Bh7I4I55.js";import"./pair-CODVJhQX.js";import"./collapsible-DTN-w8y8.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-CJcE7Me0.js";import"./types-Dl-hn7PZ.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./use-thread-outputs-vmQ-h3eH.js";import"./hosted-publish-feedback-Da_GNG6A.js";import"./use-cms-publish-actions-03oPd-2q.js";import"./named-rule-uses-BGSr5H7c.js";import"./device-hint-SeLRi17j.js";import"./editor-DLmhZNkh.js";import"./section-array-field-C4TQplJL.js";import"./alert-DolJ0mtF.js";import"./save-changes-debug-nBi-n9eV.js";import"./releases-api-CsshXgEO.js";import"./sandbox-lifecycle-context-BMFa8YZs.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./table-CCEXPT5h.js";import"./empty-state-36Ylmm4X.js";import"./site-slug-o7Vv7Ck8.js";import"./blocks-tab-states-D2UCyrKm.js";import"./slider-D1vLXzvC.js";import"./index-BqYuwhzI.js";import"./tooltipContext-DUaVg-61.js";import"./CategoricalChart-D8XWTNa8.js";import"./index-D0iHpnFf.js";import"./ActiveShapeUtils-CDR5cIv8.js";import"./Sector-DCEgkV4d.js";import"./symbol-Dxj5NLAb.js";import"./empty-state-I9kFofDC.js";import"./view-header-Doh3SPsq.js";import"./site-draft-view-_ukrDc34.js";import"./use-apply-named-rule-ChTeSA7m.js";import"./use-move-blocks-BYuqgj9i.js";import"./search-toggle-ZozNFCUP.js";import"./use-task-board-item-prs-kYArJi5f.js";import"./index-1BK0D9QN.js";import"./build-improve-prompt-doc-C_00Ntgw.js";import"./use-date-fns-locale-DuBvmVa0.js";import"./use-debounced-autosave-DEVo_C-J.js";import"./search-input-bh1ZrQSN.js";import"./use-mcp-auth-status-DFNf_NTt.js";import"./use-mcp-tools-BnP9a_TP.js";import"./switch-D3ZMBgst.js";import"./scroll-area-DY12-cVO.js";import"./use-project-native-view-presence-CH9zsUtE.js";import"./match-site-slug-config-D3fUJ6vX.js";import"./use-file-configs-DxHyOtM5.js";import"./optimistic-project-sidebar-views-BBn4-VIq.js";import"./sections-Dz-3FzhS.js";import"./secret-picker-DZfzvpJH.js";import"./use-secrets-Cj4Pb8n_.js";import"./app-preview-url-9Od4s8Sz.js";function E(){const t=m.c(5),r=x(),p=f(),e=b(r),s=j(r);switch(d({orgEnabled:p.experiments,siteMajor:e,lastFoundV8:s})){case"tab":{let o;return t[0]!==r?(o=i.jsx(l,{virtualMcpId:r}),t[0]=r,t[1]=o):o=t[1],o}case"loading":{let o;return t[2]===Symbol.for("react.memo_cache_sentinel")?(o=i.jsx(c,{}),t[2]=o):o=t[2],o}case"settings":{let o;return t[3]!==r?(o=i.jsx(u,{virtualMcpId:r}),t[3]=r,t[4]=o):o=t[4],o}}}function mi(){const t=m.c(1);let r;return t[0]===Symbol.for("react.memo_cache_sentinel")?(r=i.jsx(n.Content,{actions:i.jsx(a,{blocksOnly:!0}),children:i.jsx(E,{})}),t[0]=r):r=t[0],r}export{mi as default};