decocms 4.513.4 → 4.513.5

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 (394) hide show
  1. package/dist/client/assets/{ActiveShapeUtils-CAxkWTE7.js → ActiveShapeUtils-ZRNWCZWq.js} +1 -1
  2. package/dist/client/assets/{AlertCircle-iwRSZJFi.js → AlertCircle-CcVhl96j.js} +1 -1
  3. package/dist/client/assets/{AreaChart-BCUK2U_v.js → AreaChart-BlLvjs0A.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-_QxYwR3P.js → ArrowLeft-Bph0OW09.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-CWx4kMsV.js → ArrowUp-DHpvU3H5.js} +1 -1
  6. package/dist/client/assets/{BarChart-BFfaTlE7.js → BarChart-CLaD079J.js} +1 -1
  7. package/dist/client/assets/{Building02-Dcs_HLaa.js → Building02-C1Q8doPE.js} +1 -1
  8. package/dist/client/assets/{CartesianChart-DxoYDxJN.js → CartesianChart-B72NH8Np.js} +1 -1
  9. package/dist/client/assets/{CategoricalChart-BWxwmOFO.js → CategoricalChart-DG6BKu5a.js} +1 -1
  10. package/dist/client/assets/{CheckCircle-X3D4eq-V.js → CheckCircle-CQsC-Pz6.js} +1 -1
  11. package/dist/client/assets/{ChevronSelectorVertical-7X_EL11G.js → ChevronSelectorVertical-CaNDzI1v.js} +1 -1
  12. package/dist/client/assets/{ChevronUp-BlFhjumO.js → ChevronUp-BruZRzgU.js} +1 -1
  13. package/dist/client/assets/{Copy01-CsyaL0tc.js → Copy01-XsrxN5V9.js} +1 -1
  14. package/dist/client/assets/{CreditCard01-DZn9m-o1.js → CreditCard01-DD6f0NE9.js} +1 -1
  15. package/dist/client/assets/{DotsVertical-H16dBinG.js → DotsVertical-DdEm5Yv0.js} +1 -1
  16. package/dist/client/assets/{ErrorBarContext-IXpluzmX.js → ErrorBarContext-D6UYrmJv.js} +1 -1
  17. package/dist/client/assets/{Globe04-B5AbE2NG.js → Globe04-BHgzUZy8.js} +1 -1
  18. package/dist/client/assets/{Image01-C-r__mWH.js → Image01-Ca0i2mzS.js} +1 -1
  19. package/dist/client/assets/{Key01-D8PhPz3k.js → Key01-Bv_pipnz.js} +1 -1
  20. package/dist/client/assets/{Link01-BZlTJYwG.js → Link01-vSc5x3Bn.js} +1 -1
  21. package/dist/client/assets/{LinkBroken01-y64X2SC-.js → LinkBroken01-C8p4Wo5b.js} +1 -1
  22. package/dist/client/assets/{Monitor01-Ccoz_3RV.js → Monitor01--o8UwWGt.js} +1 -1
  23. package/dist/client/assets/{Play-B8dkIMIB.js → Play-Cf-3VNEt.js} +1 -1
  24. package/dist/client/assets/{Plus-D_siv_aA.js → Plus-BPcCtngU.js} +1 -1
  25. package/dist/client/assets/{ReferenceLine-DBHRjJZR.js → ReferenceLine-CZu5hBwf.js} +1 -1
  26. package/dist/client/assets/{SearchMd-KKuAy3kv.js → SearchMd-DqEK_DOV.js} +1 -1
  27. package/dist/client/assets/{Sector-BpwYW3Qx.js → Sector-DdZAGjV7.js} +1 -1
  28. package/dist/client/assets/{ShoppingBag01-COYAkOJY.js → ShoppingBag01-PFUS9e0t.js} +1 -1
  29. package/dist/client/assets/{Sun-s_f7cajm.js → Sun-eU5CLU87.js} +1 -1
  30. package/dist/client/assets/{SwitchHorizontal01-ZjaXGph0.js → SwitchHorizontal01-BGjFR9KE.js} +1 -1
  31. package/dist/client/assets/{Tool01-Bsd9MAXv.js → Tool01-Ug2p294_.js} +1 -1
  32. package/dist/client/assets/{Trash01-CqbCnp4Y.js → Trash01-Xpxk5zpI.js} +1 -1
  33. package/dist/client/assets/{Upload01-BuL02EP8.js → Upload01-D14Q1k_-.js} +1 -1
  34. package/dist/client/assets/{User01-DOqRt8wn.js → User01-tGRdCp2F.js} +1 -1
  35. package/dist/client/assets/{UserSquare-CEX9DbWl.js → UserSquare-C_0nfX2V.js} +1 -1
  36. package/dist/client/assets/{Users01-n5qz8jdG.js → Users01-DxA_yIKK.js} +1 -1
  37. package/dist/client/assets/{XClose-BQ9Dlu1I.js → XClose-CRuXcWlf.js} +1 -1
  38. package/dist/client/assets/{ZoomOut-CYcrWaFo.js → ZoomOut-BKkBz5Lz.js} +1 -1
  39. package/dist/client/assets/{access-gate-CCU3Jeds.js → access-gate-DQGa34O6.js} +1 -1
  40. package/dist/client/assets/{add-connection-dialog-CJKZey2r.js → add-connection-dialog-CrxqWLHC.js} +1 -1
  41. package/dist/client/assets/{agent-analytics-BpgXx7qA.js → agent-analytics-BsXr7E0h.js} +1 -1
  42. package/dist/client/assets/agent-app-CScNEVjT.js +1 -0
  43. package/dist/client/assets/{agent-assets-BsicbZIc.js → agent-assets-Nmgl0Bht.js} +1 -1
  44. package/dist/client/assets/{agent-automation-BSqPTL3r.js → agent-automation-KIw24kwd.js} +1 -1
  45. package/dist/client/assets/{agent-automations-CORWjDg5.js → agent-automations-DzZ1KR2l.js} +1 -1
  46. package/dist/client/assets/{agent-connect-sources-nNFgzgd5.js → agent-connect-sources-CS1Fawlh.js} +1 -1
  47. package/dist/client/assets/agent-deck-DnVf6eXY.js +1 -0
  48. package/dist/client/assets/{agent-e2e-Q2mMYbFI.js → agent-e2e-jRzRvCKY.js} +1 -1
  49. package/dist/client/assets/{agent-experiments-GpUhBLmP.js → agent-experiments-B-k5fGOU.js} +1 -1
  50. package/dist/client/assets/agent-file-alt93QCe.js +1 -0
  51. package/dist/client/assets/{agent-hosting-B2Nl1zb-.js → agent-hosting-BPzlodMl.js} +1 -1
  52. package/dist/client/assets/{agent-icon-DMH8Ftve.js → agent-icon-DeF-Pwnu.js} +1 -1
  53. package/dist/client/assets/agent-library-e6Q9kL87.js +1 -0
  54. package/dist/client/assets/agent-library-file-DuAVI14c.js +1 -0
  55. package/dist/client/assets/{agent-monitor-CvRpbef5.js → agent-monitor-CIHPsQTo.js} +1 -1
  56. package/dist/client/assets/{agent-overview-CIwIxcfm.js → agent-overview-yYINKyA5.js} +1 -1
  57. package/dist/client/assets/{agent-releases-BX6W8KKx.js → agent-releases-DsfoHksu.js} +1 -1
  58. package/dist/client/assets/agent-settings-CsjZAmMJ.js +1 -0
  59. package/dist/client/assets/agent-site-editor-code-CTL6nplL.js +2 -0
  60. package/dist/client/assets/agent-site-editor-content-DyDxJPiY.js +1 -0
  61. package/dist/client/assets/agent-site-editor-preview-sckNqSpj.js +1 -0
  62. package/dist/client/assets/{agent-site-editor-0D-T7ieN.js → agent-site-editor-ucf0POve.js} +1 -1
  63. package/dist/client/assets/agent-view-CSLmaEfT.js +1 -0
  64. package/dist/client/assets/{agent-view-guard-DG6ZTgu0.js → agent-view-guard-CalJ4-cy.js} +1 -1
  65. package/dist/client/assets/{agents-list-DJAFMczy.js → agents-list-DGfxOrSx.js} +1 -1
  66. package/dist/client/assets/{ai-providers-CkTtAKoL.js → ai-providers-BNG3Pq5o.js} +1 -1
  67. package/dist/client/assets/{alert-BpKmtk7d.js → alert-Doqmk56v.js} +1 -1
  68. package/dist/client/assets/{alert-dialog-CgRaXWeG.js → alert-dialog-DlwY2mBI.js} +1 -1
  69. package/dist/client/assets/{analytics-sections-DmbiPFV0.js → analytics-sections-Dd9YiSBR.js} +1 -1
  70. package/dist/client/assets/{api-keys-B8qmKYTS.js → api-keys-1ccIE6pI.js} +1 -1
  71. package/dist/client/assets/api-keys-B0NOOdkt.js +1 -0
  72. package/dist/client/assets/{app-editor-BQE1NaFI.js → app-editor-BIue3kOR.js} +1 -1
  73. package/dist/client/assets/{asset-utils-CW4a0Tss.js → asset-utils-2OOO4Yxi.js} +1 -1
  74. package/dist/client/assets/{auth-Bjnc521y.js → auth-BdGh-8AS.js} +1 -1
  75. package/dist/client/assets/{auth-catchall-CJDXycwe.js → auth-catchall-eV8hRYix.js} +1 -1
  76. package/dist/client/assets/{auth-entry-DKyMW2UQ.js → auth-entry-CWOOzYKd.js} +1 -1
  77. package/dist/client/assets/{auth-split-layout-BJfKUnO6.js → auth-split-layout-DU8QZJ8d.js} +1 -1
  78. package/dist/client/assets/{authenticate-and-persist-oauth-DK-E6e3Z.js → authenticate-and-persist-oauth-nsYJn_2g.js} +1 -1
  79. package/dist/client/assets/{automation-list-row-DybT-MIG.js → automation-list-row-19GG3R6A.js} +1 -1
  80. package/dist/client/assets/{automation-runs-DvbgOsZD.js → automation-runs-dSOAvyQz.js} +1 -1
  81. package/dist/client/assets/{automations-DEtpbM4Z.js → automations-DNcjd_bB.js} +1 -1
  82. package/dist/client/assets/{autosend-D1RPfsoi.js → autosend-BtiCWD94.js} +1 -1
  83. package/dist/client/assets/{avatar-B2nFfSHv.js → avatar-DQNWmybT.js} +1 -1
  84. package/dist/client/assets/{badge-CRNAVwfV.js → badge-MCqrr8fM.js} +1 -1
  85. package/dist/client/assets/{block-document-9nzhTDhY.js → block-document-DQPZERUD.js} +1 -1
  86. package/dist/client/assets/{blocks-preview-workspace-context-BGEsHkZW.js → blocks-preview-workspace-context-DVjcSoNC.js} +1 -1
  87. package/dist/client/assets/{blocks-tab-states-7xd0L-RH.js → blocks-tab-states-DzpOdO2C.js} +3 -3
  88. package/dist/client/assets/{blog-schema-CPbtg-YY.js → blog-schema-aRJCR6HM.js} +1 -1
  89. package/dist/client/assets/{board-analytics-DfcXMGIx.js → board-analytics-BI7gAn9b.js} +1 -1
  90. package/dist/client/assets/{buckets-CmybaOoN.js → buckets-VKui74jg.js} +1 -1
  91. package/dist/client/assets/{build-improve-prompt-doc-C4jIZJDS.js → build-improve-prompt-doc-B5xD6YpI.js} +1 -1
  92. package/dist/client/assets/{calendar-CBcRt8Oe.js → calendar-NDXBts7_.js} +1 -1
  93. package/dist/client/assets/{capability-load-error-CKIgKs8S.js → capability-load-error-BuYxZf-L.js} +1 -1
  94. package/dist/client/assets/{category-editor-WcaRs-tk.js → category-editor-DaVXWcjz.js} +1 -1
  95. package/dist/client/assets/{chart-k_AUhfu2.js → chart-BQCQoKhk.js} +1 -1
  96. package/dist/client/assets/{chat-context-70xHoaxp.js → chat-context-CGgDKLoI.js} +1 -1
  97. package/dist/client/assets/{chat-draft-Nb1SIeYI.js → chat-draft-BLQR50du.js} +1 -1
  98. package/dist/client/assets/{checkbox-CwspTWv-.js → checkbox-Dkp4p5XQ.js} +1 -1
  99. package/dist/client/assets/{choose-editor-B_p_lpqj.js → choose-editor-Dl5YQ9PQ.js} +1 -1
  100. package/dist/client/assets/{cli-auth-success-DWqeUnva.js → cli-auth-success-yfNGYJu1.js} +1 -1
  101. package/dist/client/assets/{client-icons-DYkySYk1.js → client-icons-B_zKBg36.js} +1 -1
  102. package/dist/client/assets/cms-settings-editor-BN72z7zx.js +1 -0
  103. package/dist/client/assets/{collapsible-CKlYJ7JC.js → collapsible-DC7y5Los.js} +1 -1
  104. package/dist/client/assets/{collection-detail-FEHQdrUM.js → collection-detail-DlDT6vQ9.js} +1 -1
  105. package/dist/client/assets/{collection-display-button-CEiwIbk0.js → collection-display-button-CLVPueRo.js} +1 -1
  106. package/dist/client/assets/{collection-search-ZGgli3wR.js → collection-search-By8NjPfM.js} +1 -1
  107. package/dist/client/assets/{collection-table-wrapper-BJKQfvlr.js → collection-table-wrapper-B4h8x2dc.js} +1 -1
  108. package/dist/client/assets/{collection-tabs-C331r2n4.js → collection-tabs-mcOoP5Dy.js} +1 -1
  109. package/dist/client/assets/{column-rules-CoEiTMWe.js → column-rules-CsMTnhOl.js} +1 -1
  110. package/dist/client/assets/{combobox-D7TXxp7o.js → combobox-ub2_k_zt.js} +1 -1
  111. package/dist/client/assets/{coming-soon-page-CUty8r32.js → coming-soon-page-BYV_n6px.js} +1 -1
  112. package/dist/client/assets/{command-CAYMLhJL.js → command-D4hDkkTy.js} +1 -1
  113. package/dist/client/assets/{companion-mcps-section-BHQ5YIJi.js → companion-mcps-section-BSAJrsSk.js} +1 -1
  114. package/dist/client/assets/{config-B5hUFPIX.js → config-YgZ-3rie.js} +1 -1
  115. package/dist/client/assets/{connect-Cj4-EZJC.js → connect-Ye3vTIux.js} +1 -1
  116. package/dist/client/assets/{connect-layout-CmN5RxRi.js → connect-layout-B_22_91k.js} +1 -1
  117. package/dist/client/assets/{connection-CEjWhO8M.js → connection-L0IOnxQL.js} +1 -1
  118. package/dist/client/assets/{connection-card-Qtm3n_hS.js → connection-card-VTqJv3VR.js} +1 -1
  119. package/dist/client/assets/{connection-detail-Du-3dW0g.js → connection-detail-Cq27HXRr.js} +1 -1
  120. package/dist/client/assets/{connection-form-helpers-C8PcIQLm.js → connection-form-helpers-CGHpR5fJ.js} +1 -1
  121. package/dist/client/assets/{connections-CrNA73Wo.js → connections-7gS929_D.js} +1 -1
  122. package/dist/client/assets/{content-tab-CRvcTJJ2.js → content-tab-aADEXlYN.js} +3 -3
  123. package/dist/client/assets/{context-BqWdy054.js → context-D0MYn7m7.js} +1 -1
  124. package/dist/client/assets/{context-menu-CdwmTDFy.js → context-menu-o9g6FS55.js} +1 -1
  125. package/dist/client/assets/{context-shell-CwudT8OH.js → context-shell-CGEiLl4q.js} +3 -3
  126. package/dist/client/assets/{core.esm-uZtRM3l4.js → core.esm-BjDph18k.js} +1 -1
  127. package/dist/client/assets/{create-organization-dialog-CJin8Jxw.js → create-organization-dialog-DGSfBHq9.js} +1 -1
  128. package/dist/client/assets/{daily-pulse-DTkBeVsw.js → daily-pulse-B8CfUsCm.js} +1 -1
  129. package/dist/client/assets/{discover-DGpiIGQv.js → discover-8XW9Qw09.js} +1 -1
  130. package/dist/client/assets/{domain-settings-BmE4V_Yd.js → domain-settings-D0GFJxX4.js} +1 -1
  131. package/dist/client/assets/{drawer-CkgkUBCk.js → drawer-DlCF45Q0.js} +1 -1
  132. package/dist/client/assets/{editor-B2CFLfaQ.js → editor-BdcTVQDa.js} +1 -1
  133. package/dist/client/assets/{editor-classes-DcYQ4Aap.js → editor-classes-DZr3o3GG.js} +1 -1
  134. package/dist/client/assets/{empty-state-BZa0U-xG.js → empty-state-CGdhhxwn.js} +1 -1
  135. package/dist/client/assets/{empty-state-DAdNQg6Y.js → empty-state-gAZRZ0i8.js} +1 -1
  136. package/dist/client/assets/{extract-connection-data-BpdUae_j.js → extract-connection-data-DXn9w9lL.js} +1 -1
  137. package/dist/client/assets/{feature-gate-DKD0xNwQ.js → feature-gate-Bri_WNYh.js} +1 -1
  138. package/dist/client/assets/{feature-paywall-BqNVafLn.js → feature-paywall-oJbClSRc.js} +1 -1
  139. package/dist/client/assets/{file-explorer-BrcXVEUy.js → file-explorer-DU2mc2Lb.js} +1 -1
  140. package/dist/client/assets/{file-preview-pejw4DEs.js → file-preview-D_biMFJs.js} +1 -1
  141. package/dist/client/assets/{file-share-button-AFuoJHS8.js → file-share-button-Ciq5jDCO.js} +1 -1
  142. package/dist/client/assets/{file-type-icon-2Asg9IKB.js → file-type-icon-YdZxxv_V.js} +1 -1
  143. package/dist/client/assets/flat-project-B6LNuW-w.js +1 -0
  144. package/dist/client/assets/{folder-icon-DqT7qo5j.js → folder-icon-CM4478FY.js} +1 -1
  145. package/dist/client/assets/{form-DidHa5sD.js → form-PY0dh9eA.js} +1 -1
  146. package/dist/client/assets/{general-BF4C2ZJb.js → general-BBEU5SQb.js} +1 -1
  147. package/dist/client/assets/{home-fSRcvGJQ.js → home-CRzzoJc4.js} +1 -1
  148. package/dist/client/assets/{hosted-publish-feedback-DbuE45Er.js → hosted-publish-feedback-B8yni-1P.js} +1 -1
  149. package/dist/client/assets/{icon-button-iwZ3O0_B.js → icon-button-bWdE1kh9.js} +1 -1
  150. package/dist/client/assets/{index-DL_AHT72.js → index-2uTSdbBq.js} +1 -1
  151. package/dist/client/assets/{index-lwornGU3.js → index-B95goRjI.js} +1 -1
  152. package/dist/client/assets/{index-BdqfOdIE.js → index-BRQYvW_2.js} +1 -1
  153. package/dist/client/assets/{index-DhA7J1aJ.js → index-BiYLgE9h.js} +1 -1
  154. package/dist/client/assets/{index-CUOlm63w.js → index-C-FWiUeO.js} +3 -3
  155. package/dist/client/assets/{index-B2vL4Txo.js → index-CHynF4t3.js} +1 -1
  156. package/dist/client/assets/{index-D-4AgGmD.js → index-CJni2i7d.js} +1 -1
  157. package/dist/client/assets/{index-DVqdGkOX.js → index-CV3tbWK4.js} +1 -1
  158. package/dist/client/assets/{index-D69M9S-D.js → index-CoRXAeTB.js} +1 -1
  159. package/dist/client/assets/{index-Cex7aoHx.js → index-D43cboe_.js} +1 -1
  160. package/dist/client/assets/{index-CzrtR5Z7.js → index-DIHkisxi.js} +1 -1
  161. package/dist/client/assets/{index-Cmhl3zNb.js → index-DjAPw3FZ.js} +2 -2
  162. package/dist/client/assets/{index-DNlGRld6.js → index-bCTed2tb.js} +1 -1
  163. package/dist/client/assets/{index-D2R52OCR.js → index-d6hp7-E7.js} +1 -1
  164. package/dist/client/assets/{index-BpuRA4Yb.js → index-fwWRoUIR.js} +1 -1
  165. package/dist/client/assets/{index-redirect-CZXJxQAy.js → index-redirect-CDsFqeNY.js} +1 -1
  166. package/dist/client/assets/{index-BjUY_TPp.js → index-vepJw596.js} +1 -1
  167. package/dist/client/assets/{infiniteQueryObserver-978TY1hh.js → infiniteQueryObserver-4ZDstsFa.js} +1 -1
  168. package/dist/client/assets/{infra-billing-C59D5YaM.js → infra-billing-C2Fx7aIm.js} +1 -1
  169. package/dist/client/assets/{input-CbMPZsxE.js → input-CMWKaQuM.js} +1 -1
  170. package/dist/client/assets/{input-DVPmZILt.js → input-DiIRBTgb.js} +3 -3
  171. package/dist/client/assets/{integration-icon-CktagpLu.js → integration-icon-7gJWUFS2.js} +1 -1
  172. package/dist/client/assets/{jira-icon-eYd_xfOx.js → jira-icon-m-27rEgi.js} +1 -1
  173. package/dist/client/assets/{label-COA0amPU.js → label-D4JBPN7q.js} +1 -1
  174. package/dist/client/assets/{layout-C-tE3imG.js → layout-D-WO_5nK.js} +1 -1
  175. package/dist/client/assets/{legacy-agents-deep-CPmss93q.js → legacy-agents-deep-Byg7XYZi.js} +1 -1
  176. package/dist/client/assets/{legacy-main-redirect-B8hjRkjB.js → legacy-main-redirect-C0KkBzuS.js} +1 -1
  177. package/dist/client/assets/library-Do1cxIgP.js +1 -0
  178. package/dist/client/assets/{library-tab-CHu062C1.js → library-tab-nnHKU6n2.js} +1 -1
  179. package/dist/client/assets/{login-BN5lalgG.js → login-DsUB3uQj.js} +1 -1
  180. package/dist/client/assets/{markdown-DntfPEgK.js → markdown-Bj3WyP0d.js} +1 -1
  181. package/dist/client/assets/{mcp-app-renderer-CFqAYLtv.js → mcp-app-renderer-cIFgImrX.js} +1 -1
  182. package/dist/client/assets/{mcp-oauth-DqjrYGbv.js → mcp-oauth-DXt2H3qs.js} +1 -1
  183. package/dist/client/assets/{mcp-oauth-jIbhs8wE.js → mcp-oauth-ubL7A6O8.js} +1 -1
  184. package/dist/client/assets/{members-CikLEMEO.js → members-CvgFB3s-.js} +1 -1
  185. package/dist/client/assets/{memory-CTulcnPs.js → memory-BF1uVIim.js} +1 -1
  186. package/dist/client/assets/{mini-report-page-C4z6zUee.js → mini-report-page-y5KfS4tn.js} +1 -1
  187. package/dist/client/assets/{mock-board-C-bx3LOx.js → mock-board-BKG-LWFe.js} +1 -1
  188. package/dist/client/assets/{monaco-editor-94ag9h78.js → monaco-editor-CKrlIC9T.js} +1 -1
  189. package/dist/client/assets/monitoring-BPhxBDd5.js +1 -0
  190. package/dist/client/assets/{monitoring-stats-row-BiBXmqEX.js → monitoring-stats-row-HV07Y8PZ.js} +1 -1
  191. package/dist/client/assets/{multi-select-CknX6tqH.js → multi-select-DD-AQA0o.js} +1 -1
  192. package/dist/client/assets/{mustache-CHjvX4mG.js → mustache-DEGJahrS.js} +1 -1
  193. package/dist/client/assets/{new-project-dialog-Y_XjAxS_.js → new-project-dialog-DRh9zuKa.js} +1 -1
  194. package/dist/client/assets/{oauth-callback-CuyXteK1.js → oauth-callback-DZJS_AT0.js} +1 -1
  195. package/dist/client/assets/{oauth-callback-ai-provider-mmuJSvU9.js → oauth-callback-ai-provider-BJubcWsa.js} +1 -1
  196. package/dist/client/assets/{onboarding-rJV8oAVf.js → onboarding-Cd27VqU6.js} +1 -1
  197. package/dist/client/assets/{openai-conversation-DMiHuV_M.js → openai-conversation-UxlPvOfF.js} +1 -1
  198. package/dist/client/assets/{optimistic-project-sidebar-views-CGSVQMMQ.js → optimistic-project-sidebar-views-Dv80C_rk.js} +1 -1
  199. package/dist/client/assets/{order-monitor-day-BYmFkC3g.js → order-monitor-day-EUZZaMp3.js} +1 -1
  200. package/dist/client/assets/{organization-choice-uNKN81tq.js → organization-choice-BGM_rbWT.js} +1 -1
  201. package/dist/client/assets/{orgs-DsslXidX.js → orgs-BV_vEF7j.js} +1 -1
  202. package/dist/client/assets/{page-seo-form-ysYceart.js → page-seo-form-BH-BJ6qw.js} +1 -1
  203. package/dist/client/assets/{pair-CCzeqHVB.js → pair-DC812Nih.js} +1 -1
  204. package/dist/client/assets/plan-05_HVNuz.js +1 -0
  205. package/dist/client/assets/{plan-ladder-DYIZDWtc.js → plan-ladder-PV6fdtQs.js} +1 -1
  206. package/dist/client/assets/{popover-YaXt6bOC.js → popover-fq0tjxPf.js} +1 -1
  207. package/dist/client/assets/{post-calendar-BT_Rw0Q6.js → post-calendar-BRi-XhNu.js} +1 -1
  208. package/dist/client/assets/{post-editor-COleSFOD.js → post-editor-HjQ5CpOo.js} +1 -1
  209. package/dist/client/assets/{preview-content-C1Rk597M.js → preview-content-BIaRb_kp.js} +1 -1
  210. package/dist/client/assets/{preview-dialog-BTsQwEhu.js → preview-dialog-DRTfEqCp.js} +1 -1
  211. package/dist/client/assets/{preview-panel-HJZsRhmr.js → preview-panel-Cic9CX2M.js} +1 -1
  212. package/dist/client/assets/{preview-tab-DVJzXKEK.js → preview-tab-C83Vx0Mi.js} +3 -3
  213. package/dist/client/assets/{product-picker-dialog-B0S08IE6.js → product-picker-dialog-Bals-alJ.js} +1 -1
  214. package/dist/client/assets/{profile-BAcwiajI.js → profile-D5xJAT34.js} +1 -1
  215. package/dist/client/assets/{project-app-view-e6WdBuWR.js → project-app-view-Cj07pABw.js} +1 -1
  216. package/dist/client/assets/{project-apps-bT8vigK2.js → project-apps-D71RwGSP.js} +1 -1
  217. package/dist/client/assets/{project-feed-qY5aN-GD.js → project-feed-1ErfglDo.js} +1 -1
  218. package/dist/client/assets/{project-icon-CIzqFWaQ.js → project-icon-CZlCW1ie.js} +1 -1
  219. package/dist/client/assets/project-reports-D49xSOrs.js +1 -0
  220. package/dist/client/assets/project-tasks-WMe77gba.js +1 -0
  221. package/dist/client/assets/{projects-empty-state-Bw7Hl-T4.js → projects-empty-state-ComKFNOr.js} +1 -1
  222. package/dist/client/assets/{projects-BsK-2g1X.js → projects-utpjVaXN.js} +1 -1
  223. package/dist/client/assets/{prompts-BN3p2ELV.js → prompts-D3kehQbi.js} +1 -1
  224. package/dist/client/assets/record-editor-DBsKbQap.js +1 -0
  225. package/dist/client/assets/{redirect-editor-CVdnjBHw.js → redirect-editor-CjT7iAl-.js} +1 -1
  226. package/dist/client/assets/{reports-DB2vUJ0m.js → reports-C4Lk2vHf.js} +1 -1
  227. package/dist/client/assets/reports-DWVNCveo.js +1 -0
  228. package/dist/client/assets/{reports-onboarding-DG16InmK.js → reports-onboarding-CZWTNr3A.js} +1 -1
  229. package/dist/client/assets/{reports-tab-CiJ9MhGs.js → reports-tab-DSPAWkBb.js} +2 -2
  230. package/dist/client/assets/{repositories-DVlGH0wi.js → repositories-8h94CkIp.js} +1 -1
  231. package/dist/client/assets/repositories-BOZH7UzC.js +1 -0
  232. package/dist/client/assets/{repository-binding-X3TRktCN.js → repository-binding-Dd_B1wfM.js} +1 -1
  233. package/dist/client/assets/{repository-import-picker-DVf3Vnm6.js → repository-import-picker-BrYPIHbh.js} +1 -1
  234. package/dist/client/assets/{repository-picker-B8x2K0Wa.js → repository-picker-1MzRX-H7.js} +1 -1
  235. package/dist/client/assets/{require-capability-sXOC3J02.js → require-capability-yDcZ2JQa.js} +1 -1
  236. package/dist/client/assets/{required-auth-layout-Dxnpn4YU.js → required-auth-layout-BxVO9mgl.js} +1 -1
  237. package/dist/client/assets/{reset-password-CZ33ExeQ.js → reset-password-C49JkdXA.js} +1 -1
  238. package/dist/client/assets/{resizable-DKp6vSsG.js → resizable-D_ipbPgS.js} +1 -1
  239. package/dist/client/assets/{resolve-tab-icon-SxG6TPRU.js → resolve-tab-icon-Byb93xhw.js} +1 -1
  240. package/dist/client/assets/{review-settings-g25PFo2o.js → review-settings-C6E-Bw8y.js} +1 -1
  241. package/dist/client/assets/{roles-C_YmoM1c.js → roles-CAwPb5fO.js} +1 -1
  242. package/dist/client/assets/route-BTQLh0S6.js +1 -0
  243. package/dist/client/assets/{route-DKuH8vLv.js → route-BmBKnc7t.js} +1 -1
  244. package/dist/client/assets/{route-DeOeP4Wq.js → route-CBMvGMnA.js} +1 -1
  245. package/dist/client/assets/{sandbox-lifecycle-context-CrtkjvLt.js → sandbox-lifecycle-context-BzWTxRjc.js} +1 -1
  246. package/dist/client/assets/{schema-ChwlN9B2.js → schema-CEZ3_pMV.js} +1 -1
  247. package/dist/client/assets/{schema-nN2fVtd3.js → schema-CTZ2buw6.js} +1 -1
  248. package/dist/client/assets/{scroll-area-DDy8s3Ss.js → scroll-area-C7CRSfWv.js} +1 -1
  249. package/dist/client/assets/{search-input-DBKGcZuw.js → search-input-D_LVZNpa.js} +1 -1
  250. package/dist/client/assets/{search-toggle-CLG4gmKJ.js → search-toggle-BPTT4hLg.js} +1 -1
  251. package/dist/client/assets/{secret-ciphertext-COE-QTj7.js → secret-ciphertext-D4M9tY0M.js} +1 -1
  252. package/dist/client/assets/{secret-picker-DHJiW7t8.js → secret-picker-CvHiZDPS.js} +1 -1
  253. package/dist/client/assets/{secrets-Br2wfWxI.js → secrets-RdCGJOsH.js} +1 -1
  254. package/dist/client/assets/{sections-DeEHL6VG.js → sections-CWZ2z5m1.js} +1 -1
  255. package/dist/client/assets/{sections-editor-A_RH8q6f.js → sections-editor-BxvR-YOF.js} +1 -1
  256. package/dist/client/assets/{select-BFXL8R1G.js → select-CowaxA54.js} +1 -1
  257. package/dist/client/assets/{select-model-BEL7Tbo9.js → select-model-9jlQrG56.js} +1 -1
  258. package/dist/client/assets/{seo-editor--98cMxSm.js → seo-editor-dhnPdQ71.js} +1 -1
  259. package/dist/client/assets/{separator-gsO2sYby.js → separator-CXpOKLhH.js} +1 -1
  260. package/dist/client/assets/settings-tab-cH5EHrjn.js +1 -0
  261. package/dist/client/assets/{sheet-CYoLylxA.js → sheet-DJxxN2qW.js} +1 -1
  262. package/dist/client/assets/{shell-layout-CtdsDlSz.js → shell-layout-CCXDhne-.js} +1 -1
  263. package/dist/client/assets/site-editor-Dgv3Mgur.js +1 -0
  264. package/dist/client/assets/{site-editor-toast-g-4xfmJ4.js → site-editor-toast-yWBrscDo.js} +1 -1
  265. package/dist/client/assets/{skills-BRiGDde6.js → skills-BlaOj1S-.js} +1 -1
  266. package/dist/client/assets/{slider-CpXtUVDi.js → slider-BNL65434.js} +1 -1
  267. package/dist/client/assets/{sortable.esm-CwAjqrb2.js → sortable.esm-CffOom9k.js} +1 -1
  268. package/dist/client/assets/{sso-D0IDI51o.js → sso-tXxuMVkw.js} +1 -1
  269. package/dist/client/assets/{suggestion-Bv3b6MxU.js → suggestion-CuYIU5Nv.js} +1 -1
  270. package/dist/client/assets/{switch-CvZlxlV0.js → switch-jFgl7iT_.js} +1 -1
  271. package/dist/client/assets/{symbol-BmpW8_Es.js → symbol-CLrIFhMo.js} +1 -1
  272. package/dist/client/assets/{synced-repos-_e-rYrNS.js → synced-repos-CpEKcy1N.js} +1 -1
  273. package/dist/client/assets/{tab-icon-glyph-CHxD5oom.js → tab-icon-glyph-hHd2Az-Y.js} +1 -1
  274. package/dist/client/assets/{table-B26a0ePo.js → table-piPFXrR-.js} +1 -1
  275. package/dist/client/assets/{tabs-BEPPtBqO.js → tabs-D3aHw45h.js} +1 -1
  276. package/dist/client/assets/{task-assignee-avatar-BUQ0pMCX.js → task-assignee-avatar-BhSmfeHE.js} +1 -1
  277. package/dist/client/assets/{task-board-C1s59vKR.js → task-board-jGxaINzs.js} +1 -1
  278. package/dist/client/assets/{task-route-BzBoe3sC.js → task-route-C1NRExZ4.js} +1 -1
  279. package/dist/client/assets/{task-status-CErsPlHV.js → task-status-Dgc_qXrK.js} +1 -1
  280. package/dist/client/assets/taskboard-analytics-Cc7xLiYJ.js +1 -0
  281. package/dist/client/assets/{tasks-tr_d8SW4.js → tasks-74e9M9v_.js} +1 -1
  282. package/dist/client/assets/tasks-q5I9pn3S.js +1 -0
  283. package/dist/client/assets/{textarea-CMJRBl6x.js → textarea-g4W4EEJV.js} +1 -1
  284. package/dist/client/assets/{thread-analytics-CeNaBD4e.js → thread-analytics-BeecXXf9.js} +1 -1
  285. package/dist/client/assets/{thread-intent-CCu0BEYJ.js → thread-intent-U667QxJn.js} +1 -1
  286. package/dist/client/assets/{thread-route-C2rii--a.js → thread-route-BXNLST2v.js} +1 -1
  287. package/dist/client/assets/{thread-route--bdvrJML.js → thread-route-_azg3sPx.js} +1 -1
  288. package/dist/client/assets/{thread-sheet-body-BVs76jnQ.js → thread-sheet-body-BLZwnPMr.js} +1 -1
  289. package/dist/client/assets/{time-range-picker-CMbmxxqv.js → time-range-picker-BpCt7APB.js} +1 -1
  290. package/dist/client/assets/{toggle-group-a7j08s-f.js → toggle-group-CUDFWI8h.js} +1 -1
  291. package/dist/client/assets/{tool-namespace-CRTO9xOA.js → tool-namespace-WBa95YMk.js} +1 -1
  292. package/dist/client/assets/{toolbar-icon-button-BsOv6rvJ.js → toolbar-icon-button-CTdoQK-j.js} +1 -1
  293. package/dist/client/assets/{tooltip-kZk2wAMk.js → tooltip-Cn8xKOs3.js} +1 -1
  294. package/dist/client/assets/{tooltipContext-DIsnCXpc.js → tooltipContext-DPfTt5uJ.js} +1 -1
  295. package/dist/client/assets/{track-C_ZVQYs-.js → track-CKD_o69Z.js} +1 -1
  296. package/dist/client/assets/{types-CD9jRVDk.js → types-C_3VJftQ.js} +1 -1
  297. package/dist/client/assets/{url-slug-CXYaPIEX.js → url-slug-CDSsr_-I.js} +1 -1
  298. package/dist/client/assets/{usage-stats-B3aY2c0l.js → usage-stats-Cgvbigdd.js} +1 -1
  299. package/dist/client/assets/{use-ai-providers-D84PtMSN.js → use-ai-providers-CcMoAKt2.js} +1 -1
  300. package/dist/client/assets/{use-automations-CAJcdhxV.js → use-automations-CyRwkMiw.js} +1 -1
  301. package/dist/client/assets/{use-autosave-Cve7LmNN.js → use-autosave-o1UGCuaC.js} +1 -1
  302. package/dist/client/assets/{use-chat-layout-state-4I8rtQwF.js → use-chat-layout-state-CjcoHJNS.js} +1 -1
  303. package/dist/client/assets/{use-clock-tick-CgUj6u2i.js → use-clock-tick-Ba-YyXfj.js} +1 -1
  304. package/dist/client/assets/{use-connect-companion-CCaa-yxn.js → use-connect-companion-Qyek3iaQ.js} +1 -1
  305. package/dist/client/assets/{use-connection-CikB9KcW.js → use-connection-K7ZRp1go.js} +1 -1
  306. package/dist/client/assets/{use-content-sync-DX7UAl_W.js → use-content-sync-C7GSdrCv.js} +1 -1
  307. package/dist/client/assets/{use-copy-DzgBkNLT.js → use-copy-B2CiMRws.js} +1 -1
  308. package/dist/client/assets/{use-create-virtual-mcp-BCKaQYpl.js → use-create-virtual-mcp-Be-PSH8v.js} +1 -1
  309. package/dist/client/assets/{use-date-fns-locale-Dy4Oeqx-.js → use-date-fns-locale-BtERR385.js} +1 -1
  310. package/dist/client/assets/{use-debounced-autosave-DR5Ahrkc.js → use-debounced-autosave-C7gpczsa.js} +1 -1
  311. package/dist/client/assets/{use-debounced-value-C7Ih1llI.js → use-debounced-value-B8h9GHgw.js} +1 -1
  312. package/dist/client/assets/{use-deco-credits-ByP4Of99.js → use-deco-credits-BLtT_99v.js} +1 -1
  313. package/dist/client/assets/{use-decopilot-events-CBhHAjRY.js → use-decopilot-events-tAuPN_q4.js} +1 -1
  314. package/dist/client/assets/{use-delete-connection-CjpOj4k7.js → use-delete-connection-DdA2eUwf.js} +1 -1
  315. package/dist/client/assets/{use-deployment-admin-CqgXaT_z.js → use-deployment-admin-B-AsTGAj.js} +1 -1
  316. package/dist/client/assets/{use-ensure-project-folder-BzFrwFoN.js → use-ensure-project-folder-1zJV-ebL.js} +1 -1
  317. package/dist/client/assets/{use-fast-preview-draft-url-R7ofHb_D.js → use-fast-preview-draft-url-CudEspao.js} +1 -1
  318. package/dist/client/assets/{use-file-configs-DhEp4msd.js → use-file-configs-C_QUQ8GN.js} +1 -1
  319. package/dist/client/assets/{use-inbox-feed-CZjjQk7K.js → use-inbox-feed-20OcgQCQ.js} +1 -1
  320. package/dist/client/assets/{use-infinite-scroll-DQl4a0Bs.js → use-infinite-scroll-BP0LI3QU.js} +1 -1
  321. package/dist/client/assets/{use-join-requests-BIuh8dt2.js → use-join-requests-CKw0dC-f.js} +1 -1
  322. package/dist/client/assets/{use-main-panel-tabs-BS-Dp3CX.js → use-main-panel-tabs-BLDJnI0j.js} +1 -1
  323. package/dist/client/assets/{use-main-schema-v8-DmthzehD.js → use-main-schema-v8-CyJzgrXz.js} +1 -1
  324. package/dist/client/assets/{use-mcp-auth-status-BQFxszTc.js → use-mcp-auth-status-Dy1xU38X.js} +1 -1
  325. package/dist/client/assets/{use-mcp-client-CedU4dWV.js → use-mcp-client-CS_M4RkG.js} +1 -1
  326. package/dist/client/assets/{use-mcp-prompts-CdDNTlaE.js → use-mcp-prompts-CPyQYK7C.js} +1 -1
  327. package/dist/client/assets/{use-mcp-tools-CcHLNRd3.js → use-mcp-tools-D9Ee_oS_.js} +1 -1
  328. package/dist/client/assets/{use-members-BI_Z9G2i.js → use-members-BBgUoW6G.js} +1 -1
  329. package/dist/client/assets/{use-mobile-CY0Djv_M.js → use-mobile-BKCNcL5w.js} +1 -1
  330. package/dist/client/assets/{use-navigate-to-agent-cdHnGUXB.js → use-navigate-to-agent-BRsDJt0-.js} +1 -1
  331. package/dist/client/assets/{use-open-billing-url-C9VcD5z_.js → use-open-billing-url-BT_PQxjy.js} +1 -1
  332. package/dist/client/assets/{use-org-auth-client-Cy7UT2_Z.js → use-org-auth-client-DboLlm0U.js} +1 -1
  333. package/dist/client/assets/{use-org-fs-BzlMLYdA.js → use-org-fs-CqBTb_bN.js} +1 -1
  334. package/dist/client/assets/{use-org-repo-syncs-Bbiq7vxl.js → use-org-repo-syncs-CrHKManu.js} +1 -1
  335. package/dist/client/assets/{use-org-sso-Dz08CIcx.js → use-org-sso-CPfWfgUD.js} +1 -1
  336. package/dist/client/assets/{use-organization-roles-D5QmscBE.js → use-organization-roles-GM12gN8m.js} +1 -1
  337. package/dist/client/assets/{use-organization-settings-BhbyABaR.js → use-organization-settings-KcG74cJs.js} +1 -1
  338. package/dist/client/assets/{use-panel-navigate-Cs4na-V_.js → use-panel-navigate-BnKH_DED.js} +1 -1
  339. package/dist/client/assets/{use-project-native-view-presence-F2BIVVKN.js → use-project-native-view-presence-6zlafMD0.js} +1 -1
  340. package/dist/client/assets/{use-project-scope-COiEpk7r.js → use-project-scope-DLt89uaH.js} +1 -1
  341. package/dist/client/assets/{use-recent-apps-CQPv5LK_.js → use-recent-apps-Beh0P-eJ.js} +1 -1
  342. package/dist/client/assets/{use-releases-CYsXvho_.js → use-releases-CLwewD1A.js} +1 -1
  343. package/dist/client/assets/{use-reports-diagnostic-D9AFmVnx.js → use-reports-diagnostic-BWqDIpUl.js} +1 -1
  344. package/dist/client/assets/{use-secrets-C4QpZA2A.js → use-secrets-BWS1Znk9.js} +1 -1
  345. package/dist/client/assets/{use-section-preview-base-Dp3nLlkj.js → use-section-preview-base-8d2ycoZ0.js} +1 -1
  346. package/dist/client/assets/{use-sidebar-collapsed-BdewWuhH.js → use-sidebar-collapsed-DQVR9tzU.js} +1 -1
  347. package/dist/client/assets/{use-tags-B1Z7-48J.js → use-tags-DLPMXTJ_.js} +1 -1
  348. package/dist/client/assets/{use-task-board-analytics-G6UBxSrP.js → use-task-board-analytics-CtHDTWzg.js} +1 -1
  349. package/dist/client/assets/{use-task-board-events-CQVfQw81.js → use-task-board-events-3Dkuwhd-.js} +1 -1
  350. package/dist/client/assets/{use-task-board-item-prs-CTNtD0OU.js → use-task-board-item-prs-C-xbnweQ.js} +1 -1
  351. package/dist/client/assets/{use-task-metadata-2qdE9S5L.js → use-task-metadata-rKLv0cZj.js} +1 -1
  352. package/dist/client/assets/{use-thread-analytics-C0QELsJp.js → use-thread-analytics-CoAOmWMe.js} +1 -1
  353. package/dist/client/assets/{use-thread-outputs-BRiZLmB3.js → use-thread-outputs-BvzhiS4m.js} +1 -1
  354. package/dist/client/assets/useInfiniteQuery-DwZtx0VJ.js +1 -0
  355. package/dist/client/assets/{useQueries-BaTjPT3P.js → useQueries-7fETpNi-.js} +1 -1
  356. package/dist/client/assets/useSuspenseInfiniteQuery-C9cYPm72.js +1 -0
  357. package/dist/client/assets/{users-hzXXTZtN.js → users-WRigaqVb.js} +1 -1
  358. package/dist/client/assets/{utils-D_iIHZov.js → utils-Bv54OqIc.js} +1 -1
  359. package/dist/client/assets/{variant-calendar-BsY2CF48.js → variant-calendar-3vABqSwV.js} +1 -1
  360. package/dist/client/assets/{variant-draft-pointer-Di3PGFGj.js → variant-draft-pointer-BkoaUnwP.js} +1 -1
  361. package/dist/client/assets/{view-mode-toggle-dGCnwIOo.js → view-mode-toggle-B_PFkRZ8.js} +1 -1
  362. package/dist/client/assets/{virtual-mcp-Cm_JxjLS.js → virtual-mcp-I0mUiSD3.js} +1 -1
  363. package/dist/client/assets/{watch-sse-pool-DnJO6AZk.js → watch-sse-pool-GA-vauaD.js} +1 -1
  364. package/dist/client/index.html +1 -1
  365. package/dist/server/server.js +2 -2
  366. package/package.json +1 -1
  367. package/dist/client/assets/agent-app-DDRmQd75.js +0 -1
  368. package/dist/client/assets/agent-deck-sUBVFl57.js +0 -1
  369. package/dist/client/assets/agent-file-Ay2rdSNY.js +0 -1
  370. package/dist/client/assets/agent-library-DQTTsoBq.js +0 -1
  371. package/dist/client/assets/agent-library-file-CoPN3Dl5.js +0 -1
  372. package/dist/client/assets/agent-settings-Da0_9JGD.js +0 -1
  373. package/dist/client/assets/agent-site-editor-code-B98Bnadv.js +0 -2
  374. package/dist/client/assets/agent-site-editor-content-87ZLW9rs.js +0 -1
  375. package/dist/client/assets/agent-site-editor-preview-DD0qYhLr.js +0 -1
  376. package/dist/client/assets/agent-view-BPSlOxjt.js +0 -1
  377. package/dist/client/assets/api-keys-CigsOsqY.js +0 -1
  378. package/dist/client/assets/cms-settings-editor-BGIEXOlq.js +0 -1
  379. package/dist/client/assets/flat-project-COKm-_lB.js +0 -1
  380. package/dist/client/assets/library-OhQHeeUu.js +0 -1
  381. package/dist/client/assets/monitoring-zFjmyWaK.js +0 -1
  382. package/dist/client/assets/plan-DirWo8wP.js +0 -1
  383. package/dist/client/assets/project-reports-DQGUzueG.js +0 -1
  384. package/dist/client/assets/project-tasks-B1VrMiAq.js +0 -1
  385. package/dist/client/assets/record-editor-DD50VfEv.js +0 -1
  386. package/dist/client/assets/reports-DCFnios-.js +0 -1
  387. package/dist/client/assets/repositories-CuvgQNAy.js +0 -1
  388. package/dist/client/assets/route-BsG_rQz2.js +0 -1
  389. package/dist/client/assets/settings-tab-BXdif76g.js +0 -1
  390. package/dist/client/assets/site-editor-BojLUeGp.js +0 -1
  391. package/dist/client/assets/taskboard-analytics-h_2DA62k.js +0 -1
  392. package/dist/client/assets/tasks-BkgOKiT9.js +0 -1
  393. package/dist/client/assets/useInfiniteQuery-BLA_teXl.js +0 -1
  394. package/dist/client/assets/useSuspenseInfiniteQuery-Cu40gYv3.js +0 -1
@@ -430,7 +430,7 @@ ${X}`}return $}});var ZK0=y((jT)=>{var qH4=jT&&jT.__createBinding||(Object.creat
430
430
  )`}function hU4($){if(!$?.startDate&&!$?.endDate)return null;let Z="make_date(CAST(year AS INT), CAST(month AS INT), CAST(day AS INT))",Q=(X,J)=>new Date(X.getTime()+J*86400000).toISOString().slice(0,10),Y=[];if($.startDate)Y.push(`${Z} >= DATE '${Q($.startDate,-1)}'`);if($.endDate)Y.push(`${Z} <= DATE '${Q($.endDate,1)}'`);return Y.join(" AND ")}function xZ$($){if(/[';]/.test($.bucket)||/[';]/.test($.prefix))throw Error("Invalid monitoring GCS bucket/prefix");let Z=$.prefix.replace(/^\/+|\/+$/g,""),Q=Z?`s3://${$.bucket}/${Z}`:`s3://${$.bucket}`,X=$.range?.startDate||$.range?.endDate?`${Q}/year=*/**/*`:`${Q}/**/*`;return gU4(X,{range:$.range})}var fU4="studio_monitoring_logs",yU4="studio.monitoring.";var fZ$=L(()=>{mW()});import{sql as uU4}from"kysely";function dc($){if(!$)return null;return typeof $==="string"?JSON.parse($):$}function ic($){return $?JSON.stringify($):null}function yZ$($){return{organizationId:$.organizationId,voice_provider:$.voice_provider,voice_model:$.voice_model,sidebar_items:dc($.sidebar_items),coding_agent_mcp_excluded:dc($.coding_agent_mcp_excluded),simple_mode:dc($.simple_mode),default_home_agents:dc($.default_home_agents),flags:dc($.flags),submodule_credentials:dc($.submodule_credentials),createdAt:$.createdAt,updatedAt:$.updatedAt}}class zT{db;constructor($){this.db=$}async get($){let Z=await this.db.selectFrom("organization_settings").selectAll().where("organizationId","=",$).executeTakeFirst();return Z?yZ$(Z):null}async upsert($,Z){let Q=new Date().toISOString(),Y={sidebar_items:ic(Z?.sidebar_items),coding_agent_mcp_excluded:ic(Z?.coding_agent_mcp_excluded),simple_mode:ic(Z?.simple_mode),default_home_agents:ic(Z?.default_home_agents),flags:ic(Z?.flags),submodule_credentials:ic(Z?.submodule_credentials)},X=await this.db.insertInto("organization_settings").values({organizationId:$,...Y,createdAt:Q,updatedAt:Q}).onConflict((J)=>J.column("organizationId").doUpdateSet({sidebar_items:Y.sidebar_items??void 0,coding_agent_mcp_excluded:Y.coding_agent_mcp_excluded??void 0,simple_mode:Y.simple_mode??void 0,default_home_agents:Y.default_home_agents??void 0,flags:Y.flags?uU4`coalesce("organization_settings"."flags", '{}'::jsonb) || ${Y.flags}::jsonb`:void 0,submodule_credentials:Y.submodule_credentials??void 0,updatedAt:Q})).returningAll().executeTakeFirstOrThrow();return yZ$(X)}}var L01=()=>{};class O01{db;constructor($){this.db=$}async get($,Z){let Q=await this.db.selectFrom("user_model_preferences").select("tiers").where("user_id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Q)return null;return{tiers:(typeof Q.tiers==="string"?JSON.parse(Q.tiers):Q.tiers)??{}}}async upsert($,Z,Q){let Y=new Date().toISOString(),X=JSON.stringify(Q.tiers??{});return await this.db.insertInto("user_model_preferences").values({user_id:$,organization_id:Z,tiers:X,created_at:Y,updated_at:Y}).onConflict((J)=>J.columns(["user_id","organization_id"]).doUpdateSet({tiers:X,updated_at:Y})).execute(),{tiers:Q.tiers??{}}}}import{sql as lU4}from"kysely";function pc($){return typeof $==="string"?$:$.toISOString()}function M00($){return{id:$.id,organization_id:$.organization_id,name:$.name,active:!!$.active,created_by:$.created_by,messages:$.messages,models:$.models,tools:$.tools??null,temperature:$.temperature,max_agent_steps:$.max_agent_steps??null,virtual_mcp_id:$.virtual_mcp_id,system_key:$.system_key??null,created_at:pc($.created_at),updated_at:pc($.updated_at)}}function $E($){return{id:$.id,automation_id:$.automation_id,type:$.type,cron_expression:$.cron_expression,connection_id:$.connection_id,event_type:$.event_type,params:$.params,last_run_at:$.last_run_at?pc($.last_run_at):null,next_run_at:$.next_run_at?pc($.next_run_at):null,api_key_id:$.api_key_id??null,column_key:$.column_key??null,from_kind:$.from_kind??null,from_statuses:$.from_statuses??[],created_at:pc($.created_at)}}function OK0($){return M00({id:$.a_id,organization_id:$.a_organization_id,name:$.a_name,active:$.a_active,created_by:$.a_created_by,messages:$.a_messages,models:$.a_models,tools:$.a_tools,temperature:$.a_temperature,max_agent_steps:$.a_max_agent_steps,virtual_mcp_id:$.a_virtual_mcp_id,system_key:$.a_system_key,created_at:$.a_created_at,updated_at:$.a_updated_at})}class gZ${db;constructor($){this.db=$}async create($){let Z=new Date().toISOString(),Y={id:crypto.randomUUID(),organization_id:$.organization_id,name:$.name,active:$.active??!0,created_by:$.created_by,messages:$.messages,models:$.models,tools:$.tools??null,temperature:$.temperature??0.5,max_agent_steps:$.max_agent_steps??null,virtual_mcp_id:$.virtual_mcp_id,created_at:Z,updated_at:Z},X=await this.db.insertInto("automations").values(Y).returningAll().executeTakeFirstOrThrow();return M00(X)}async findById($,Z){let Q=await this.db.selectFrom("automations").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return Q?M00(Q):null}async list($){return(await this.db.selectFrom("automations").selectAll().where("organization_id","=",$).orderBy("created_at","desc").execute()).map(M00)}async listWithTriggerCounts($,Z){let Q=this.db.selectFrom("automations as a").leftJoin("automation_triggers as t","t.automation_id","a.id").select(["a.id","a.organization_id","a.name","a.active","a.created_by","a.messages","a.models","a.tools","a.temperature","a.max_agent_steps","a.virtual_mcp_id","a.system_key","a.created_at","a.updated_at"]).select((X)=>X.fn.count("t.id").as("trigger_count")).select((X)=>X.fn.min("t.next_run_at").as("nearest_next_run_at")).select(lU4`coalesce(
431
431
  jsonb_agg(jsonb_build_object('type', t.type, 'column_key', t.column_key))
432
432
  filter (where t.type in ('board_column_transition', 'board_pr_ready', 'board_pr_merged')),
433
- '[]'::jsonb)`.as("board_triggers")).where("a.organization_id","=",$);if(Z)Q=Q.where("a.virtual_mcp_id","=",Z);return(await Q.groupBy(["a.id","a.organization_id","a.name","a.active","a.created_by","a.messages","a.models","a.tools","a.temperature","a.max_agent_steps","a.virtual_mcp_id","a.system_key","a.created_at","a.updated_at"]).orderBy("a.created_at","desc").execute()).map((X)=>({...M00(X),trigger_count:Number(X.trigger_count),board_triggers:X.board_triggers,nearest_next_run_at:X.nearest_next_run_at?pc(X.nearest_next_run_at):null}))}async update($,Z,Q){let X={updated_at:new Date().toISOString()};if(Q.name!==void 0)X.name=Q.name;if(Q.active!==void 0)X.active=Q.active;if(Q.messages!==void 0)X.messages=Q.messages;if(Q.models!==void 0)X.models=Q.models;if(Q.tools!==void 0)X.tools=Q.tools;if(Q.temperature!==void 0)X.temperature=Q.temperature;if(Q.max_agent_steps!==void 0)X.max_agent_steps=Q.max_agent_steps;await this.db.updateTable("automations").set(X).where("id","=",$).where("organization_id","=",Z).execute();let J=await this.findById($,Z);if(!J)throw Error("Automation not found after update");return J}async delete($,Z){return{success:((await this.db.deleteFrom("automations").where("id","=",$).where("organization_id","=",Z).executeTakeFirst()).numDeletedRows??0n)>0n}}async addTrigger($){let Z=new Date().toISOString(),Y={id:crypto.randomUUID(),automation_id:$.automation_id,type:$.type,cron_expression:$.cron_expression??null,connection_id:$.connection_id??null,event_type:$.event_type??null,params:$.params??null,last_run_at:null,next_run_at:$.next_run_at??null,api_key_id:$.api_key_id??null,column_key:$.column_key??null,from_kind:$.from_kind??null,from_statuses:$.from_statuses??[],created_at:Z},X=await this.db.insertInto("automation_triggers").values(Y).returningAll().executeTakeFirstOrThrow();return $E(X)}async removeTrigger($,Z){return{success:((await this.db.deleteFrom("automation_triggers").where("id","=",$).where("automation_id","=",Z).executeTakeFirst()).numDeletedRows??0n)>0n}}async listTriggers($){return(await this.db.selectFrom("automation_triggers").selectAll().where("automation_id","=",$).orderBy("created_at","asc").execute()).map($E)}async listTriggersForAutomations($){if($.length===0)return[];return(await this.db.selectFrom("automation_triggers").selectAll().where("automation_id","in",$).orderBy("created_at","asc").execute()).map($E)}async findTriggerById($){let Z=await this.db.selectFrom("automation_triggers").selectAll().where("id","=",$).executeTakeFirst();return Z?$E(Z):null}async setTriggerApiKeyId($,Z){await this.db.updateTable("automation_triggers").set({api_key_id:Z}).where("id","=",$).execute()}async findActiveEventTriggers($,Z,Q){return(await this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["t.id","t.automation_id","t.type","t.cron_expression","t.connection_id","t.event_type","t.params","t.last_run_at","t.api_key_id","t.created_at",...LK0]).where("t.type","=","event").where("t.connection_id","=",$).where("t.event_type","=",Z).where("a.organization_id","=",Q).where("a.active","=",!0).execute()).map((X)=>({...$E(X),automation:OK0(X)}))}async listActiveByEventTriggerConnectionId($){return await this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["a.id","a.name"]).where("t.type","=","event").where("t.connection_id","=",$).where("a.active","=",!0).distinct().execute()}async findActiveBoardColumnTriggers(){return(await this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["t.id","t.automation_id","t.type","t.cron_expression","t.connection_id","t.event_type","t.params","t.last_run_at","t.api_key_id","t.column_key","t.from_kind","t.from_statuses","t.created_at",...LK0]).where("t.type","=","board_column_transition").where("a.active","=",!0).execute()).map((Z)=>({...$E(Z),automation:OK0(Z)}))}async hasActiveBoardColumnTrigger($,Z){return await this.db.selectFrom("task_board_items as i").innerJoin("automations as a","a.organization_id","i.organization_id").innerJoin("automation_triggers as t","t.automation_id","a.id").select("t.id").where("i.id","=",$).where("a.active","=",!0).where("t.type","=","board_column_transition").where("t.column_key","=",Z).limit(1).executeTakeFirst()!==void 0}async findBuiltinTrigger($,Z){return await this.db.selectFrom("automations as a").innerJoin("automation_triggers as t","t.automation_id","a.id").select(["a.id as automationId","t.id as triggerId"]).where("a.organization_id","=",$).where("a.system_key","=",Z).limit(1).executeTakeFirst()??null}async listJiraTransitionTriggers($,Z){let Q=this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["t.id","t.automation_id","t.type","t.cron_expression","t.connection_id","t.event_type","t.params","t.last_run_at","t.api_key_id","t.column_key","t.from_kind","t.from_statuses","t.created_at",...LK0]).where("t.type","=","jira_transition").where("a.organization_id","=",$);if(Z?.jiraStatus!==void 0)Q=Q.where("t.column_key","=",Z.jiraStatus);if(Z?.activeOnly)Q=Q.where("a.active","=",!0);return(await Q.orderBy("t.created_at","asc").orderBy("t.id","asc").execute()).map((X)=>({...$E(X),automation:OK0(X)}))}async builtinActive($,Z){return(await this.db.selectFrom("automations").select("active").where("organization_id","=",$).where("system_key","=",Z).executeTakeFirst())?.active??null}async claimTriggerFire($,Z){return await this.db.deleteFrom("automation_trigger_fires").where("trigger_id","=",$).where("created_at","<",new Date(Date.now()-mU4)).execute(),await this.db.insertInto("automation_trigger_fires").values({trigger_id:$,event_key:Z}).onConflict((Y)=>Y.columns(["trigger_id","event_key"]).doNothing()).returning("trigger_id").executeTakeFirst()!==void 0}async findAllCronTriggers(){return(await this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["t.id","t.automation_id","t.type","t.cron_expression","t.connection_id","t.event_type","t.params","t.last_run_at","t.api_key_id","t.created_at",...LK0]).where("t.type","=","cron").execute()).map((Z)=>({...$E(Z),automation:OK0(Z)}))}async updateNextRunAt($,Z){await this.db.updateTable("automation_triggers").set({next_run_at:Z}).where("id","=",$).execute()}async createAutomationRunThread($,Z,Q){let Y=m8("thrd"),X=new Date().toISOString();return await this.db.insertInto("threads").values({id:Y,organization_id:$.organization_id,title:`Automation: ${$.name}`,description:null,status:"in_progress",trigger_id:Z,virtual_mcp_id:$.virtual_mcp_id,harness_id:Q,metadata:JSON.stringify({runtime:"sandbox"}),hidden:!1,message_storage_version:2,created_at:X,updated_at:X,created_by:$.created_by,updated_by:null}).execute(),Y}async markRunFailed($,Z,Q){await this.db.updateTable("threads").set({status:"failed",updated_at:new Date().toISOString(),...Z!=null?{failure_reason:Z}:{},...Q!=null?{failure_kind:Q}:{}}).where("id","=",$).where("status","=","in_progress").execute()}async markRunCompleted($){await this.db.updateTable("threads").set({status:"completed",updated_at:new Date().toISOString()}).where("id","=",$).where("status","=","in_progress").execute()}async updateTriggerLastRunAt($,Z){await this.db.updateTable("automation_triggers").set({last_run_at:Z}).where("id","=",$).execute()}async deactivateAutomation($){await this.db.updateTable("automations").set({active:!1,updated_at:new Date().toISOString()}).where("id","=",$).where("active","=",!0).execute()}async getRunStats($,Z,Q){let Y=this.db.selectFrom("threads as th").innerJoin("automation_triggers as t","t.id","th.trigger_id").select("th.status").select((G)=>G.fn.count("th.id").as("count")).where("t.automation_id","=",$).where("th.organization_id","=",Z).where("th.hidden","=",!1).groupBy("th.status");if(Q?.startDate)Y=Y.where("th.created_at",">=",Q.startDate);if(Q?.endDate)Y=Y.where("th.created_at","<=",Q.endDate);let X=await Y.execute(),J={total:0,completed:0,failed:0,inProgress:0};for(let G of X){let W=Number(G.count);if(J.total+=W,G.status==="completed")J.completed+=W;else if(G.status==="failed")J.failed+=W;else if(G.status==="in_progress")J.inProgress+=W}return J}async listRunThreadIds($,Z,Q){let Y=this.db.selectFrom("threads as th").innerJoin("automation_triggers as t","t.id","th.trigger_id").select("th.id").where("t.automation_id","=",$).where("th.organization_id","=",Z).where("th.hidden","=",!1).orderBy("th.created_at","desc").limit(Q?.limit??500);if(Q?.startDate)Y=Y.where("th.created_at",">=",Q.startDate);if(Q?.endDate)Y=Y.where("th.created_at","<=",Q.endDate);return(await Y.execute()).map((J)=>J.id)}}function ZE($){return new gZ$($)}var LK0,mU4=2592000000;var V00=L(()=>{KY();LK0=["a.id as a_id","a.organization_id as a_organization_id","a.name as a_name","a.active as a_active","a.created_by as a_created_by","a.messages as a_messages","a.models as a_models","a.tools as a_tools","a.temperature as a_temperature","a.max_agent_steps as a_max_agent_steps","a.virtual_mcp_id as a_virtual_mcp_id","a.system_key as a_system_key","a.created_at as a_created_at","a.updated_at as a_updated_at"]});import{createHash as cU4,randomBytes as dU4}from"crypto";function hZ$($){return cU4("sha256").update($).digest("hex")}function iU4(){return dU4(32).toString("hex")}class I00{db;constructor($){this.db=$}async generateTokenPair(){let $=iU4(),Z=await hZ$($);return{plaintext:$,hash:Z}}async persistTokenHash($,Z,Q){let Y=crypto.randomUUID();await this.db.insertInto("trigger_callback_tokens").values({id:Y,organization_id:$,connection_id:Z,token_hash:Q,created_at:new Date().toISOString()}).onConflict((X)=>X.columns(["connection_id","organization_id"]).doUpdateSet({id:Y,token_hash:Q})).execute()}async createOrRotateToken($,Z){let{plaintext:Q,hash:Y}=await this.generateTokenPair();return await this.persistTokenHash($,Z,Y),Q}async validateToken($){let Z=await hZ$($),Q=await this.db.selectFrom("trigger_callback_tokens").select(["organization_id","connection_id"]).where("token_hash","=",Z).executeTakeFirst();if(!Q)return null;return{organizationId:Q.organization_id,connectionId:Q.connection_id}}async deleteByConnection($,Z){await this.db.deleteFrom("trigger_callback_tokens").where("connection_id","=",$).where("organization_id","=",Z).execute()}}var j01=()=>{};function jK0($){return{id:$.id,organizationId:$.organization_id,domain:$.domain,joinMode:$.join_mode,verificationStatus:$.verification_status==="verified"?"verified":"pending",verificationMethod:$.verification_method??null,verificationToken:$.verification_token,verifiedAt:$.verified_at,createdAt:$.created_at,updatedAt:$.updated_at}}class k3{db;constructor($){this.db=$}async getAllByDomain($){return(await this.db.selectFrom("organization_domains").selectAll().where("domain","=",$.toLowerCase()).execute()).map(jK0)}async listByOrganizationId($){return(await this.db.selectFrom("organization_domains").selectAll().where("organization_id","=",$).orderBy("created_at","asc").execute()).map(jK0)}async getById($){let Z=await this.db.selectFrom("organization_domains").selectAll().where("id","=",$).executeTakeFirst();return Z?jK0(Z):null}async getByOrgAndDomain($,Z){let Q=await this.db.selectFrom("organization_domains").selectAll().where("organization_id","=",$).where("domain","=",Z.toLowerCase()).executeTakeFirst();return Q?jK0(Q):null}async add($,Z,Q={}){let Y=Z.toLowerCase(),X=await this.getByOrgAndDomain($,Y);if(X)return X;let J=new Date().toISOString(),G=crypto.randomUUID(),W=Q.verificationStatus??"pending";try{await this.db.insertInto("organization_domains").values({id:G,organization_id:$,domain:Y,join_mode:Q.joinMode??"off",verification_status:W,verification_method:Q.verificationMethod??null,verification_token:Q.verificationToken??null,verified_at:W==="verified"?J:null,created_at:J,updated_at:J}).execute()}catch(H){if(H.code==="23505"){let F=await this.getByOrgAndDomain($,Y);if(F)return F}throw H}let K=await this.getById(G);if(!K)throw Error("Failed to add domain");return K}async updateJoinMode($,Z){await this.db.updateTable("organization_domains").set({join_mode:Z,updated_at:new Date().toISOString()}).where("id","=",$).execute();let Q=await this.getById($);if(!Q)throw Error("Domain not found");return Q}async markVerified($,Z){let Q=new Date().toISOString();await this.db.updateTable("organization_domains").set({verification_status:"verified",verification_method:Z,verification_token:null,verified_at:Q,updated_at:Q}).where("id","=",$).execute();let Y=await this.getById($);if(!Y)throw Error("Domain not found");return Y}async removeById($){await this.db.deleteFrom("organization_domains").where("id","=",$).execute()}}function w01($){return{id:$.id,organizationId:$.organization_id,userId:$.user_id,status:$.status,decidedBy:$.decided_by,decidedAt:$.decided_at,createdAt:$.created_at,updatedAt:$.updated_at}}class nc{db;constructor($){this.db=$}async create($,Z){let Q=await this.getPending($,Z);if(Q)return Q;let Y=new Date().toISOString(),X=crypto.randomUUID();try{await this.db.insertInto("organization_join_requests").values({id:X,organization_id:$,user_id:Z,status:"pending",decided_by:null,decided_at:null,created_at:Y,updated_at:Y}).execute()}catch(G){if(G.code==="23505"){let W=await this.getPending($,Z);if(W)return W}throw G}let J=await this.getById(X);if(!J)throw Error("Failed to create join request");return J}async getById($){let Z=await this.db.selectFrom("organization_join_requests").selectAll().where("id","=",$).executeTakeFirst();return Z?w01(Z):null}async getPending($,Z){let Q=await this.db.selectFrom("organization_join_requests").selectAll().where("organization_id","=",$).where("user_id","=",Z).where("status","=","pending").executeTakeFirst();return Q?w01(Q):null}async listPendingWithUser($){return(await this.db.selectFrom("organization_join_requests as r").innerJoin("user","user.id","r.user_id").select(["r.id as id","r.organization_id as organization_id","r.user_id as user_id","r.status as status","r.decided_by as decided_by","r.decided_at as decided_at","r.created_at as created_at","r.updated_at as updated_at","user.name as user_name","user.email as user_email","user.image as user_image"]).where("r.organization_id","=",$).where("r.status","=","pending").orderBy("r.created_at","asc").execute()).map((Q)=>({...w01(Q),user:{id:Q.user_id,name:Q.user_name,email:Q.user_email,image:Q.user_image}}))}async decide($,Z,Q){let Y=new Date().toISOString();if((await this.db.updateTable("organization_join_requests").set({status:Z,decided_by:Q,decided_at:Y,updated_at:Y}).where("id","=",$).where("status","=","pending").executeTakeFirst()).numUpdatedRows===0n)return null;return this.getById($)}}class k00{db;constructor($){this.db=$}async get($,Z){let Q=await this.db.selectFrom("kv").select("value").where("organization_id","=",$).where("key","=",Z).executeTakeFirst();if(!Q)return null;return Q.value}async set($,Z,Q){await this.db.insertInto("kv").values({organization_id:$,key:Z,value:JSON.stringify(Q),updated_at:new Date().toISOString()}).onConflict((Y)=>Y.columns(["organization_id","key"]).doUpdateSet({value:JSON.stringify(Q),updated_at:new Date().toISOString()})).execute()}async delete($,Z){await this.db.deleteFrom("kv").where("organization_id","=",$).where("key","=",Z).execute()}}function pU4($){if(!$||!Array.isArray($.interests))return null;return{interests:$.interests}}class E01{kv;constructor($){this.kv=$}async getForAgent($,Z,Q){let Y=await this.kv.get($,uZ$(Z,Q));return pU4(Y)}async setForAgent($,Z,Q,Y){await this.kv.set($,uZ$(Z,Q),Y)}}var lZ$="interests:",uZ$=($,Z)=>`interests:${$}:${Z}`;class P01{db;vault;constructor($,Z){this.db=$;this.vault=Z}async getByOrgId($){let Z=await this.db.selectFrom("org_sso_config").selectAll().where("organization_id","=",$).executeTakeFirst();if(!Z)return null;return this.toRuntime(Z)}async getByDomain($){let Z=await this.db.selectFrom("org_sso_config").selectAll().where("domain","=",$.toLowerCase()).executeTakeFirst();if(!Z)return null;return this.toRuntime(Z)}async upsert($,Z){let Q=new Date().toISOString(),Y=crypto.randomUUID(),X=await this.vault.encrypt(Z.clientSecret),J=JSON.stringify(Z.scopes??["openid","email","profile"]),G=Z.enforced===void 0?void 0:Z.enforced?1:0;await this.db.insertInto("org_sso_config").values({id:Y,organization_id:$,issuer:Z.issuer,client_id:Z.clientId,client_secret:X,discovery_endpoint:Z.discoveryEndpoint??null,scopes:J,domain:Z.domain.toLowerCase(),enforced:G??0,created_at:Q,updated_at:Q}).onConflict((K)=>K.column("organization_id").doUpdateSet({issuer:Z.issuer,client_id:Z.clientId,client_secret:X,discovery_endpoint:Z.discoveryEndpoint??null,scopes:J,domain:Z.domain.toLowerCase(),...G!==void 0?{enforced:G}:{},updated_at:Q})).execute();let W=await this.getByOrgId($);if(!W)throw Error("Failed to upsert org SSO config");return W}async setEnforced($,Z){await this.db.updateTable("org_sso_config").set({enforced:Z?1:0,updated_at:new Date().toISOString()}).where("organization_id","=",$).execute()}async delete($){await this.db.deleteFrom("org_sso_config").where("organization_id","=",$).execute()}toPublic($){let{clientSecret:Z,...Q}=$;return Q}async toRuntime($){let Z=await this.vault.decrypt($.client_secret),Q=typeof $.scopes==="string"?JSON.parse($.scopes):$.scopes;return{id:$.id,organizationId:$.organization_id,issuer:$.issuer,clientId:$.client_id,clientSecret:Z,discoveryEndpoint:$.discovery_endpoint,scopes:Q,domain:$.domain,enforced:$.enforced===1,createdAt:$.created_at,updatedAt:$.updated_at}}}class z01{db;constructor($){this.db=$}async get($,Z){let Q=await this.db.selectFrom("org_sso_sessions").selectAll().where("user_id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Q)return null;return{id:Q.id,userId:Q.user_id,organizationId:Q.organization_id,authenticatedAt:Q.authenticated_at,expiresAt:Q.expires_at,createdAt:Q.created_at}}async isValid($,Z){let Q=await this.get($,Z);if(!Q)return!1;return new Date(Q.expiresAt)>new Date}async upsert($,Z){let Q=new Date,Y=new Date(Q.getTime()+86400000),X=crypto.randomUUID();await this.db.insertInto("org_sso_sessions").values({id:X,user_id:$,organization_id:Z,authenticated_at:Q.toISOString(),expires_at:Y.toISOString(),created_at:Q.toISOString()}).onConflict((G)=>G.columns(["user_id","organization_id"]).doUpdateSet({authenticated_at:Q.toISOString(),expires_at:Y.toISOString()})).execute();let J=await this.get($,Z);if(!J)throw Error("Failed to upsert SSO session");return J}async deleteExpired(){await this.db.deleteFrom("org_sso_sessions").where("expires_at","<",new Date().toISOString()).execute()}}class C00{db;constructor($){this.db=$}async listOrgTags($){return(await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).orderBy("name","asc").execute()).map((Q)=>this.tagFromDbRow(Q))}async getTag($){let Z=await this.db.selectFrom("organization_tags").selectAll().where("id","=",$).executeTakeFirst();return Z?this.tagFromDbRow(Z):null}async getTagsByIds($){if($.length===0)return[];return(await this.db.selectFrom("organization_tags").selectAll().where("id","in",$).execute()).map((Q)=>this.tagFromDbRow(Q))}async getTagByName($,Z){let Q=await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).where("name","=",Z).executeTakeFirst();return Q?this.tagFromDbRow(Q):null}async createTag($,Z,Q){let Y=m8("tag"),X=new Date().toISOString();await this.db.insertInto("organization_tags").values({id:Y,organization_id:$,name:Z,color:Q??null,created_at:X}).onConflict((G)=>G.columns(["organization_id","name"]).doNothing()).execute();let J=await this.getTagByName($,Z);if(!J)throw Error(`Failed to create or retrieve tag: ${Z}`);return J}async deleteTag($){await this.db.deleteFrom("organization_tags").where("id","=",$).execute()}async getMemberTags($){return(await this.db.selectFrom("member_tags").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member_tags.member_id","=",$).orderBy("organization_tags.name","asc").execute()).map((Q)=>this.tagFromDbRow(Q))}async setMemberTags($,Z){await this.db.transaction().execute(async(Q)=>{if(await Q.deleteFrom("member_tags").where("member_id","=",$).execute(),Z.length>0){let Y=new Date().toISOString();await Q.insertInto("member_tags").values(Z.map((X)=>({id:m8("mtag"),member_id:$,tag_id:X,created_at:Y}))).execute()}})}async addMemberTag($,Z){let Q=new Date().toISOString();await this.db.insertInto("member_tags").values({id:m8("mtag"),member_id:$,tag_id:Z,created_at:Q}).onConflict((Y)=>Y.columns(["member_id","tag_id"]).doNothing()).execute()}async removeMemberTag($,Z){await this.db.deleteFrom("member_tags").where("member_id","=",$).where("tag_id","=",Z).execute()}async verifyMemberOrg($,Z){return await this.db.selectFrom("member").select("id").where("id","=",$).where("organizationId","=",Z).executeTakeFirst()!==void 0}async getUserTagsInOrg($,Z){return(await this.db.selectFrom("member").innerJoin("member_tags","member_tags.member_id","member.id").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member.userId","=",$).where("member.organizationId","=",Z).orderBy("organization_tags.name","asc").execute()).map((Y)=>this.tagFromDbRow(Y))}async getMembersWithTags($){let Z=await this.db.selectFrom("member").leftJoin("member_tags","member_tags.member_id","member.id").leftJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["member.id as memberId","organization_tags.name as tagName"]).where("member.organizationId","=",$).execute(),Q=new Map;for(let Y of Z){if(!Q.has(Y.memberId))Q.set(Y.memberId,[]);if(Y.tagName)Q.get(Y.memberId).push(Y.tagName)}return Q}tagFromDbRow($){return{id:$.id,organizationId:$.organization_id,name:$.name,color:$.color??null,createdAt:$.created_at}}}var A01=L(()=>{KY()});function pZ$($){if(!nU4.test($))return!1;let Z=Date.parse(`${$}T00:00:00Z`);return!Number.isNaN(Z)&&new Date(Z).toISOString().slice(0,10)===$}function T01($,Z){let Q=mZ$[$.state]-mZ$[Z.state];if(Q!==0)return Q;if($.startDate!==Z.startDate){if($.startDate===null)return 1;if(Z.startDate===null)return-1;let Y=$.startDate<Z.startDate?-1:1;return $.state==="closed"?-Y:Y}return $.name.localeCompare(Z.name)||$.id.localeCompare(Z.id)}function nZ$($,Z){return[...$].filter((Q)=>Q.state==="future"&&Q.id!==Z).sort(T01)[0]?.id??null}var cZ$,dZ$=100,iZ$,nU4,mZ$;var wK0=L(()=>{cZ$=["future","active","closed"],iZ$=["done","archived"],nU4=/^\d{4}-\d{2}-\d{2}$/;mZ$={active:0,future:1,closed:2}});import{sql as tZ$}from"kysely";function TT($){return{id:$.id,name:$.name,state:$.state,startDate:$.start_date,endDate:$.end_date}}class q01{db;constructor($){this.db=$}async listByOrg($){return(await this.db.selectFrom("task_board_sprints").select(AT).where("organization_id","=",$).execute()).map(TT).sort(T01)}async get($,Z){let Q=await this.db.selectFrom("task_board_sprints").select(AT).where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return Q?TT(Q):null}async create($){let Z=await this.db.insertInto("task_board_sprints").values({id:m8("sprint"),organization_id:$.organizationId,name:$.name,start_date:$.startDate,end_date:$.endDate,created_by:$.by}).returning(AT).executeTakeFirstOrThrow();return TT(Z)}async update($,Z,Q){let Y=await this.db.updateTable("task_board_sprints").set({...Q.name!==void 0?{name:Q.name}:{},...Q.startDate!==void 0?{start_date:Q.startDate}:{},...Q.endDate!==void 0?{end_date:Q.endDate}:{},updated_at:new Date().toISOString()}).where("organization_id","=",$).where("id","=",Z).returning(AT).executeTakeFirst();return Y?TT(Y):null}async start($,Z){let Q=await this.db.updateTable("task_board_sprints").set({state:"active",updated_at:new Date().toISOString()}).where("organization_id","=",$).where("id","=",Z).where("state","=","future").returning(AT).executeTakeFirst();return Q?TT(Q):null}async complete($){let{organizationId:Z,id:Q,moveTo:Y,by:X}=$;return this.db.transaction().execute(async(J)=>{let G=await J.updateTable("task_board_sprints").set({state:"closed",updated_at:new Date().toISOString()}).where("organization_id","=",Z).where("id","=",Q).where("state","=","active").returning(AT).executeTakeFirst();if(!G)return null;if(Y!==null){let K=await J.selectFrom("task_board_sprints").select("state").where("organization_id","=",Z).where("id","=",Y).forShare().executeTakeFirst();if(!K||K.state==="closed")throw Error("moveTo is not an open sprint on this board \u2014 pass a planned or "+"running sprint's id, or null for the backlog")}let W=await J.updateTable("task_board_items").set({sprint_id:Y,updated_by:X,updated_at:new Date().toISOString()}).where("organization_id","=",Z).where("sprint_id","=",Q).where("status","not in",[...iZ$]).returning("id").execute();return{sprint:TT(G),movedTo:Y,movedItemIds:W.map((K)=>K.id)}})}async delete($,Z){return this.db.transaction().execute(async(Q)=>{let Y=await Q.selectFrom("task_board_sprints").select(AT).where("organization_id","=",$).where("id","=",Z).forUpdate().executeTakeFirst();if(!Y)return null;let X=await Q.selectFrom("task_board_items").select("id").where("organization_id","=",$).where("sprint_id","=",Z).execute();return await Q.deleteFrom("task_board_sprints").where("organization_id","=",$).where("id","=",Z).execute(),{sprint:TT(Y),movedItemIds:X.map((J)=>J.id)}})}}var AT;var oZ$=L(()=>{wK0();KY();AT=["id","name","state",tZ$`to_char(start_date, 'YYYY-MM-DD')`.as("start_date"),tZ$`to_char(end_date, 'YYYY-MM-DD')`.as("end_date")]});import{z as ZL}from"zod";function rZ$($){let Z=new Set,Q=new Set,Y=[];for(let X of $){if(Z.has(X.id))continue;Z.add(X.id);let J=X.projectIds.filter((G)=>{if(Q.has(G))return!1;return Q.add(G),!0});Y.push({...X,projectIds:J})}return Y}function aZ$($){let Z=new Map;for(let Y of $.pinned)Z.set(Y,"pinned");for(let Y of $.hidden)Z.set(Y,"hidden");for(let Y of $.dismissed)Z.set(Y,"dismissed");let Q=(Y,X)=>[...new Set(X.filter((J)=>Z.get(J)===Y))];return{pinned:Q("pinned",$.pinned),hidden:Q("hidden",$.hidden),dismissed:Q("dismissed",$.dismissed),hiddenFolders:[...new Set($.hiddenFolders)]}}var tU4=60,oU4=100,sU4=2000,S00,rU4,tc,oc,R01,sZ$,eZ$="project-folders.updated";var sc=L(()=>{S00=ZL.array(ZL.string().min(1)).max(sU4),rU4=ZL.object({id:ZL.string().min(1).max(64),name:ZL.string().trim().min(1).max(tU4),projectIds:S00}),tc=ZL.array(rU4).max(oU4),oc=ZL.object({pinned:S00,hidden:S00,dismissed:S00,hiddenFolders:S00}),R01={pinned:[],hidden:[],dismissed:[],hiddenFolders:[]},sZ$=ZL.object({folders:tc,preferences:oc,joinedAt:ZL.string().nullable()})});function $7$($,Z){let Q=typeof $==="string"?JSON.parse($):$;return Z.parse(Q)}class M01{db;constructor($){this.db=$}async getFolders($){let Z=await this.db.selectFrom("org_project_folders").select("folders").where("organization_id","=",$).executeTakeFirst();return Z?$7$(Z.folders,tc):[]}async setFolders($,Z){let Q=rZ$(Z),Y=JSON.stringify(Q),X=new Date().toISOString();return await this.db.insertInto("org_project_folders").values({organization_id:$,folders:Y,updated_at:X}).onConflict((J)=>J.column("organization_id").doUpdateSet({folders:Y,updated_at:X})).execute(),Q}async getPreferences($,Z){let Q=await this.db.selectFrom("user_sidebar_preferences").select("preferences").where("user_id","=",$).where("organization_id","=",Z).executeTakeFirst();return Q?{...R01,...$7$(Q.preferences,oc)}:R01}async setPreferences($,Z,Q){let Y=aZ$(Q),X=JSON.stringify(Y),J=new Date().toISOString();return await this.db.insertInto("user_sidebar_preferences").values({user_id:$,organization_id:Z,preferences:X,updated_at:J}).onConflict((G)=>G.columns(["user_id","organization_id"]).doUpdateSet({preferences:X,updated_at:J})).execute(),Y}async joinedAt($,Z){let Q=await this.db.selectFrom("member").select("createdAt").where("userId","=",$).where("organizationId","=",Z).executeTakeFirst();return Q?new Date(Q.createdAt).toISOString():null}}var Z7$=L(()=>{sc()});class V01{db;constructor($){this.db=$}async listBySite($,Z){return(await this.db.selectFrom("experiments").selectAll().where("organization_id","=",$).where("site","=",Z).orderBy("created_at","desc").execute()).map((Y)=>this.fromRow(Y))}async getByKey($,Z,Q){let Y=await this.db.selectFrom("experiments").selectAll().where("organization_id","=",$).where("site","=",Z).where("key","=",Q).executeTakeFirst();return Y?this.fromRow(Y):null}async create($){let Z=m8("exp"),Q=new Date().toISOString();await this.db.insertInto("experiments").values({id:Z,organization_id:$.organizationId,site:$.site,key:$.key,name:$.name,status:"draft",goals:JSON.stringify($.goals??[]),variants:JSON.stringify($.variants??[]),created_by:$.createdBy,created_at:Q,updated_at:Q}).execute();let Y=await this.getByKey($.organizationId,$.site,$.key);if(!Y)throw Error("failed to create experiment");return Y}async update($,Z,Q,Y){let X=await this.getByKey($,Z,Q);if(!X)return null;let J=new Date().toISOString(),G={updated_at:J};if(Y.name!==void 0)G.name=Y.name;if(Y.goals!==void 0)G.goals=JSON.stringify(Y.goals);if(Y.variants!==void 0)G.variants=JSON.stringify(Y.variants);if(Y.status!==void 0){if(G.status=Y.status,Y.status==="running"&&!X.startedAt)G.started_at=J;if(Y.status==="ended"&&!X.endedAt)G.ended_at=J}return await this.db.updateTable("experiments").set(G).where("organization_id","=",$).where("site","=",Z).where("key","=",Q).execute(),this.getByKey($,Z,Q)}async linkTaskBoardItem($,Z,Q,Y){await this.db.updateTable("experiments").set({task_board_item_id:Y}).where("organization_id","=",$).where("site","=",Z).where("key","=",Q).execute()}async delete($,Z,Q){return((await this.db.deleteFrom("experiments").where("organization_id","=",$).where("site","=",Z).where("key","=",Q).executeTakeFirst()).numDeletedRows??0n)>0n}fromRow($){let Z=(Q)=>new Date(Q).toISOString();return{id:$.id,organizationId:$.organization_id,site:$.site,key:$.key,name:$.name,status:["running","paused","ended"].includes($.status)?$.status:"draft",goals:$.goals??[],variants:$.variants??[],startedAt:$.started_at?Z($.started_at):null,endedAt:$.ended_at?Z($.ended_at):null,taskBoardItemId:$.task_board_item_id,createdBy:$.created_by,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}}var Q7$=L(()=>{KY()});import{sql as aU4}from"kysely";function I01($){return{organizationId:$.organization_id,status:$.status,stripeCustomerId:$.stripe_customer_id,stripeSubscriptionId:$.stripe_subscription_id,currentPeriodEnd:$.current_period_end,lastStripeEventAt:$.last_stripe_event_at,freeTaskExecutions:$.free_task_executions,monthlyTaskExecutions:$.monthly_task_executions}}class C3{db;constructor($){this.db=$}async getBilling($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("organization_id","=",$).executeTakeFirst();return Z?I01(Z):null}async ensureBilling($){let Z=await this.getBilling($);if(Z)return Z;try{await this.db.insertInto("organization_billing").values({organization_id:$}).onConflict((Q)=>Q.column("organization_id").doNothing()).execute()}catch{return null}return await this.getBilling($)}async getBillingByStripeSubscriptionId($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("stripe_subscription_id","=",$).executeTakeFirst();return Z?I01(Z):null}async listSubscriptionsPastPeriodEnd($,Z){return(await this.db.selectFrom("organization_billing").selectAll().where("stripe_subscription_id","is not",null).where("status","<>","canceled").where("current_period_end","is not",null).where("current_period_end","<",$).orderBy("current_period_end","asc").limit(Z).execute()).map(I01)}async bindSubscription($,Z){return((await this.db.updateTable("organization_billing").set({stripe_subscription_id:Z.stripeSubscriptionId,...Z.stripeCustomerId!==void 0&&{stripe_customer_id:Z.stripeCustomerId},...Z.status!==void 0&&{status:Z.status},...Z.lastStripeEventAt!==void 0&&{last_stripe_event_at:Z.lastStripeEventAt},updated_at:new Date}).where("organization_id","=",$).where((Y)=>Y.or([Y("stripe_subscription_id","is",null),Y("stripe_subscription_id","=",Z.stripeSubscriptionId)])).executeTakeFirst()).numUpdatedRows??0n)>0n}async updateStripeState($,Z){return((await this.db.updateTable("organization_billing").set({...Z.stripeCustomerId!==void 0&&{stripe_customer_id:Z.stripeCustomerId},...Z.stripeSubscriptionId!==void 0&&{stripe_subscription_id:Z.stripeSubscriptionId},...Z.status!==void 0&&{status:Z.status},...Z.currentPeriodEnd!==void 0&&{current_period_end:Z.currentPeriodEnd},...Z.lastStripeEventAt!==void 0&&{last_stripe_event_at:Z.lastStripeEventAt},updated_at:new Date}).where("organization_id","=",$).executeTakeFirst()).numUpdatedRows??0n)>0n}async taskClaim($){let Z=await this.db.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",$).executeTakeFirst();return Z?{runCount:Z.run_count,state:Z.state}:null}static liveClaimCount($,Z,Q){return $.selectFrom("task_quota_claims").select((Y)=>Y.fn.countAll().as("count")).where("organization_id","=",Z).where("period_key","=",Q).where("state","<>","released").executeTakeFirst().then((Y)=>Number(Y?.count??0))}async countTaskClaims($,Z){return await C3.liveClaimCount(this.db,$,Z)}async claimTaskUnderLimit($,Z,Q,Y,X){return await this.db.transaction().execute(async(J)=>{await J.insertInto("organization_billing").values({organization_id:$}).onConflict((K)=>K.column("organization_id").doNothing()).execute(),await J.selectFrom("organization_billing").select("organization_id").where("organization_id","=",$).forUpdate().executeTakeFirstOrThrow();let G=await J.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",Z).executeTakeFirst();if(G&&G.run_count>=X)return"runs_exhausted";let W=()=>C3.liveClaimCount(J,$,Q);if(G&&G.state!=="released")return await J.updateTable("task_quota_claims").set({run_count:G.run_count+1}).where("task_board_item_id","=",Z).execute(),"rerun";if(await W()>=Y)return"exhausted";if(G)return await J.updateTable("task_quota_claims").set({state:"held",period_key:Q,run_count:G.run_count+1}).where("task_board_item_id","=",Z).execute(),"claimed";return await J.insertInto("task_quota_claims").values({task_board_item_id:Z,organization_id:$,period_key:Q,state:"held"}).execute(),"claimed"})}async releaseTaskClaim($,Z){return((await this.db.updateTable("task_quota_claims").set({state:"released"}).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").executeTakeFirst()).numUpdatedRows??0n)>0n}async rollbackTaskClaim($,Z,{releaseSlot:Q}){await this.db.updateTable("task_quota_claims").set(()=>({...Q?{state:"released"}:{},run_count:aU4`greatest(run_count - 1, 0)`})).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").execute()}}var _00=()=>{};class k01{db;constructor($){this.db=$}async findById($,Z){let Q=await this.db.selectFrom("user").select(["user.id","user.name","user.email","user.image","user.createdAt","user.updatedAt"]).where("user.id","=",$).where((Y)=>Y.exists(Y.selectFrom("member as m1").innerJoin("member as m2","m1.organizationId","m2.organizationId").select("m1.id").where("m1.userId","=",$).where("m2.userId","=",Z))).executeTakeFirst();if(!Q)return null;return{id:Q.id,name:Q.name,email:Q.email,role:"",createdAt:Q.createdAt,updatedAt:Q.updatedAt,image:Q.image??void 0}}async searchOrganizations($){let{userId:Z,term:Q,limit:Y,offset:X=0,organizationId:J}=$,G=`%${Sa0(Q)}%`,W=this.db.selectFrom("organization").innerJoin("member",(K)=>K.onRef("member.organizationId","=","organization.id").on("member.userId","=",Z)).where((K)=>K.or([K("organization.name","ilike",G),K("organization.slug","ilike",G)]));if(J)W=W.where("organization.id","=",J);return await W.select(["organization.id as id","organization.name as name","organization.slug as slug","organization.logo as logo","organization.metadata as metadata"]).orderBy("organization.name","asc").orderBy("organization.id","asc").limit(Y).offset(X).execute()}}var Y7$=L(()=>{Ne()});function ZN($){let Z=$?.["mcp.studio"];if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z;let Q=$?.["mcp.mesh"];if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q;return}function X7$(){if(S01)return S01;let $={};for(let Z of EK0){if(Z.id==="basic-usage")continue;$[Z.id]=!0}return S01=$,$}function _01($){let Z=(J)=>{let G=$[J];return Array.isArray(G)?G:[]},Q=Z("*").includes("*")||Z("self").includes("*"),Y=new Set;if(!Q)for(let J of Object.values($)){if(!Array.isArray(J))continue;for(let G of J)Y.add(G)}let X={};for(let J of EK0){if(J.id==="basic-usage")continue;X[J.id]=Q||J.tools.every((G)=>Y.has(G))}return X}function qT(){if(C01)return C01;let $={Organizations:[],Connections:[],"Virtual MCPs":[],Threads:[],Monitoring:[],Users:[],"API Keys":[],Tags:[],Experiments:[],"AI Providers":[],Secrets:[],"File Configs":[],Automations:[],"Object Storage":[],Registry:[],GitHub:[],Git:[],VM:[],Search:[],"Task Board":[],Jira:[],Blog:[],Chat:[]};for(let Z of v00)$[Z.category].push(Z);return C01=$,$}var v00,EK0,PK0,eU4,rc,C01=null,S01=null;var QE=L(()=>{v00=[{name:"ORGANIZATION_CREATE",description:"Create a new organization",category:"Organizations"},{name:"ORGANIZATION_LIST",description:"List organizations",category:"Organizations"},{name:"ORGANIZATION_GET",description:"View organization details",category:"Organizations"},{name:"ORGANIZATION_UPDATE",description:"Update organization",category:"Organizations"},{name:"ORGANIZATION_DELETE",description:"Delete organization",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_SETTINGS_GET",description:"View organization settings",category:"Organizations"},{name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization settings",category:"Organizations"},{name:"ORGANIZATION_BLOCKS_EDITOR_SET",description:"Switch the organization's blocks editor",category:"Organizations"},{name:"BLOG_SITE_GROUND",description:"Read the site's connected systems once, for the generators that follow",category:"Blog"},{name:"BLOG_SITE_CATALOGUE",description:"Turn a grounding pass's raw output into the store's catalogue",category:"Blog"},{name:"BLOG_BRAND_EXTRACT",description:"Infer a brand's identity (name, audience, values, competitors) from a site",category:"Blog"},{name:"BLOG_BRAND_ENRICH",description:"Research a brand on the web and drop the claims its evidence does not support",category:"Blog"},{name:"BLOG_CONTEXT_EXTRACT",description:"Infer a blog's writing context (tone, dos and don'ts) from a site",category:"Blog"},{name:"BLOG_FORMAT_SUGGEST",description:"Name the post formats a blog writes in",category:"Blog"},{name:"BLOG_CAMPAIGN_SUGGEST",description:"Propose campaigns from a seed, grounded in the site's systems",category:"Blog"},{name:"BLOG_POST_DRAFT",description:"Write a blog post from a theme and a format",category:"Blog"},{name:"BLOG_POST_ILLUSTRATE",description:"Draw a drafted post's images, conditioned on the product's own photographs",category:"Blog"},{name:"BLOG_LINK_SUGGEST",description:"Propose internal links from a post to the site's other posts",category:"Blog"},{name:"ORGANIZATION_DOMAIN_LIST",description:"List organization domain claims",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for the organization",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set a domain's join mode",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_VERIFY",description:"Verify a domain via DNS TXT record",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove an organization domain claim",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization",category:"Organizations"},{name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a request to join the organization",category:"Organizations"},{name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a request to join the organization",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_MEMBER_ADD",description:"Add members",category:"Organizations"},{name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove members",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_MEMBER_LIST",description:"List members",category:"Organizations"},{name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Update member roles",category:"Organizations"},{name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the org subscription checkout",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_BILLING_PORTAL",description:"Open the Stripe billing portal",category:"Organizations"},{name:"ORGANIZATION_BILLING_PLAN_PRICES",description:"Read each plan's monthly price from Stripe",category:"Organizations"},{name:"ORGANIZATION_TASK_QUOTA_GET",description:"Get the org's auto-task quota usage",category:"Organizations"},{name:"INFRA_BILLING_SITES_LIST",description:"List the legacy deco.cx sites the org owns",category:"Organizations"},{name:"INFRA_BILLING_GET",description:"Get infra usage, plan and invoices for an owned site",category:"Organizations"},{name:"INFRA_BILLING_PORTAL",description:"Open the Stripe billing portal for an owned site",category:"Organizations"},{name:"CUSTOMER_LAKE_QUERY",description:"Run read-only SQL over the organization's data lake",category:"Monitoring"},{name:"ORGANIZATION_HAS_SITE",description:"Whether this organization owns at least one legacy deco.cx site",category:"Organizations"},{name:"COLLECTION_CONNECTIONS_CREATE",description:"Create connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_LIST",description:"List connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_GET",description:"View connection details",category:"Connections"},{name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_DELETE",description:"Delete connections",category:"Connections",dangerous:!0},{name:"CONNECTION_TEST",description:"Test connections",category:"Connections"},{name:"CONNECTION_TOOLS_SEARCH",description:"Search the tools of your connections",category:"Connections"},{name:"CONNECTION_TOOL_CALL",description:"Call a tool on one of your connections",category:"Connections"},{name:"REPORTS_SETUP",description:"Set up Deco Score",category:"Connections"},{name:"REPORTS_RUN",description:"Run Deco Score",category:"Connections"},{name:"REPORTS_BIND",description:"Bind Deco Score data source",category:"Connections"},{name:"REPORTS_CONNECTION_STATUS",description:"Read Deco Score connection status",category:"Connections"},{name:"REPORTS_SET_REPOSITORY",description:"Set the Deco Score repository",category:"Connections"},{name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_GET",description:"View virtual MCP details",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Delete virtual MCPs",category:"Virtual MCPs",dangerous:!0},{name:"MONITORING_HEATMAP",description:"View tool-call volume by agent and tool",category:"Monitoring"},{name:"MONITORING_LOG_GET",description:"View monitoring log details",category:"Monitoring"},{name:"MONITORING_LOGS_LIST",description:"List monitoring logs",category:"Monitoring"},{name:"MONITORING_STATS",description:"View monitoring statistics",category:"Monitoring"},{name:"MONITORING_THREAD_USAGE",description:"View per-thread token usage and cost",category:"Monitoring"},{name:"API_KEY_CREATE",description:"Create API key",category:"API Keys"},{name:"API_KEY_LIST",description:"List API keys",category:"API Keys"},{name:"API_KEY_UPDATE",description:"Update API key",category:"API Keys"},{name:"API_KEY_DELETE",description:"Delete API key",category:"API Keys",dangerous:!0},{name:"USER_GET",description:"Get a user by id",category:"Users"},{name:"USER_MODEL_PREFERENCES_GET",description:"Get the calling user's chat tier \u2192 model overrides",category:"Users"},{name:"USER_MODEL_PREFERENCES_UPDATE",description:"Set the calling user's chat tier \u2192 model overrides",category:"Users"},{name:"SIDEBAR_GET",description:"Get the org's project folders and the caller's pins and hides",category:"Virtual MCPs"},{name:"PROJECT_FOLDERS_SET",description:"Replace the organization's project folders",category:"Virtual MCPs"},{name:"SIDEBAR_PREFERENCES_SET",description:"Set the calling member's pinned and hidden projects",category:"Users"},{name:"COLLECTION_THREADS_CREATE",description:"Create threads",category:"Threads"},{name:"COLLECTION_THREADS_LIST",description:"List threads",category:"Threads"},{name:"COLLECTION_THREADS_GET",description:"View thread details",category:"Threads"},{name:"COLLECTION_THREADS_UPDATE",description:"Update threads",category:"Threads"},{name:"COLLECTION_THREADS_DELETE",description:"Delete threads",category:"Threads",dangerous:!0},{name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List thread messages",category:"Threads"},{name:"TAGS_LIST",description:"List organization tags",category:"Tags"},{name:"TAGS_CREATE",description:"Create organization tag",category:"Tags"},{name:"TAGS_DELETE",description:"Delete organization tag",category:"Tags",dangerous:!0},{name:"EXPERIMENT_LIST",description:"List a site's A/B experiments",category:"Experiments"},{name:"EXPERIMENT_GET",description:"Get one A/B experiment",category:"Experiments"},{name:"EXPERIMENT_CREATE",description:"Create an A/B experiment",category:"Experiments"},{name:"EXPERIMENT_SUGGEST",description:"Suggest an A/B experiment from a plain-language prompt",category:"Experiments"},{name:"EXPERIMENT_IMPLEMENT",description:"Delegate an experiment's frontend implementation to the Super Agent",category:"Experiments"},{name:"EXPERIMENT_PREVIEW_SYNC_LOCAL",description:"[local dev only] Preview a draft experiment on a local site",category:"Experiments"},{name:"EXPERIMENT_IMPLEMENT_LOCAL",description:"[local dev only] Write an experiment's hook + gate directly into a local site's source",category:"Experiments"},{name:"EXPERIMENT_UPDATE",description:"Update an A/B experiment",category:"Experiments"},{name:"EXPERIMENT_DELETE",description:"Delete an A/B experiment",category:"Experiments",dangerous:!0},{name:"EXPERIMENT_RESULTS",description:"A/B results for one experiment",category:"Experiments"},{name:"MEMBER_TAGS_GET",description:"Get member tags",category:"Tags"},{name:"MEMBER_TAGS_SET",description:"Set member tags",category:"Tags"},{name:"AUTOMATION_CREATE",description:"Create automation",category:"Automations"},{name:"AUTOMATION_GET",description:"View automation details",category:"Automations"},{name:"AUTOMATION_LIST",description:"List automations",category:"Automations"},{name:"AUTOMATION_UPDATE",description:"Update automation",category:"Automations"},{name:"AUTOMATION_DELETE",description:"Delete automation",category:"Automations",dangerous:!0},{name:"AUTOMATION_TRIGGER_ADD",description:"Add trigger to automation",category:"Automations"},{name:"AUTOMATION_TRIGGER_REMOVE",description:"Remove trigger from automation",category:"Automations"},{name:"AUTOMATION_TRIGGER_ROTATE_TOKEN",description:"Rotate the secret token for a webhook automation trigger",category:"Automations"},{name:"AUTOMATION_RUN",description:"Manually trigger an automation run",category:"Automations"},{name:"AUTOMATION_RUN_STATS",description:"View aggregated run counts and token/cost for an automation",category:"Automations"},{name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update virtual MCP pinned sidebar views",category:"Virtual MCPs"},{name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info for one or more virtual MCPs",category:"Virtual MCPs"},{name:"PROJECT_FOLDER_ENSURE",description:"Give a project's folder its shape, once",category:"Virtual MCPs"},{name:"AI_PROVIDERS_LIST",description:"List available AI providers",category:"AI Providers"},{name:"AI_PROVIDERS_LIST_MODELS",description:"List AI provider models",category:"AI Providers"},{name:"AI_PROVIDERS_ACTIVE",description:"List active AI providers",category:"AI Providers"},{name:"AI_PROVIDER_KEY_CREATE",description:"Store AI provider API key",category:"AI Providers"},{name:"AI_PROVIDER_KEY_LIST",description:"List AI provider API keys",category:"AI Providers"},{name:"AI_PROVIDER_KEY_DELETE",description:"Delete AI provider API key",category:"AI Providers",dangerous:!0},{name:"AI_PROVIDER_KEY_UPDATE",description:"Update AI provider API key label or credential",category:"AI Providers"},{name:"AI_PROVIDER_KEY_PREVIEW",description:"Get masked preview of AI provider API key",category:"AI Providers"},{name:"AI_PROVIDER_OAUTH_URL",description:"Get OAuth URL for provider",category:"AI Providers"},{name:"AI_PROVIDER_OAUTH_EXCHANGE",description:"Exchange OAuth code for API key",category:"AI Providers"},{name:"AI_PROVIDER_PROVISION_KEY",description:"Auto-provision API key for a provider",category:"AI Providers"},{name:"AI_PROVIDER_TOPUP_URL",description:"Get checkout URL to top up provider credits",category:"AI Providers"},{name:"CODEX_SUBSCRIPTION_CONNECT",description:"Link your ChatGPT subscription for Codex",category:"AI Providers"},{name:"SUBSCRIPTION_USAGE_GET",description:"Read your personal subscription usage and reset times",category:"AI Providers"},{name:"CODEX_SUBSCRIPTION_STATUS",description:"Whether your ChatGPT subscription is linked for Codex",category:"AI Providers"},{name:"CODEX_SUBSCRIPTION_DISCONNECT",description:"Unlink your ChatGPT subscription for Codex",category:"AI Providers"},{name:"CODEX_SUBSCRIPTION_SYNC",description:"Save credentials refreshed by your Codex runtime",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_CONNECT",description:"Link your own Claude subscription with a setup token",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_STATUS",description:"Whether your Claude subscription is linked, and since when",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_DISCONNECT",description:"Unlink your Claude subscription",category:"AI Providers"},{name:"GITHUB_COPILOT_CONNECT",description:"Link your own GitHub Copilot plan with a GitHub token",category:"AI Providers"},{name:"GITHUB_COPILOT_STATUS",description:"Whether your GitHub Copilot plan is linked, and since when",category:"AI Providers"},{name:"GITHUB_COPILOT_DISCONNECT",description:"Unlink your GitHub Copilot plan",category:"AI Providers"},{name:"GITHUB_COPILOT_SHARE",description:"Share your GitHub Copilot plan with the organization",category:"AI Providers"},{name:"AI_PROVIDER_CREDITS",description:"Get current credit balance for a provider",category:"AI Providers"},{name:"AI_PLAN_ENTITLEMENTS",description:"Get the org's plan, feature flags and AI usage bar",category:"AI Providers"},{name:"AI_PLAN_LIST",description:"List the plans an organization can move to",category:"AI Providers"},{name:"AI_PLAN_SET",description:"Change the organization's plan",category:"AI Providers"},{name:"AI_PLAN_INVOICE_UPGRADE",description:"Move the organization to a paid plan billed on its invoice",category:"AI Providers"},{name:"SECRET_CREATE",description:"Create a secret in the credential vault",category:"Secrets"},{name:"SECRET_LIST",description:"List secrets visible to the caller (no values returned)",category:"Secrets"},{name:"FILE_CONFIG_CREATE",description:"Create an S3-compatible bucket configuration for the org",category:"File Configs"},{name:"FILE_CONFIG_LIST",description:"List S3 bucket configurations for the org (no creds returned)",category:"File Configs"},{name:"ORG_FS_PUBLIC_SETS_SYNC",description:"Re-sync the shared public skill-set volumes from their GitHub sources",category:"File Configs"},{name:"ORG_REPO_SYNC_CREATE",description:"Keep a GitHub repository mirrored into a new org-fs volume",category:"File Configs"},{name:"ORG_REPO_SYNC_LIST",description:"List the org's synced repositories and their sync status",category:"File Configs"},{name:"ORG_REPO_SYNC_UPDATE",description:"Update a synced repository's ref, paths, or enabled flag",category:"File Configs"},{name:"ORG_REPO_SYNC_DELETE",description:"Stop syncing a repository (already-synced files are kept)",category:"File Configs"},{name:"ORG_REPO_SYNC_RUN",description:"Sync a repository into its volume right now",category:"File Configs"},{name:"JIRA_INTEGRATION_GET",description:"Get the org's Jira integration config",category:"Jira"},{name:"JIRA_INTEGRATION_UPSERT",description:"Connect or update the org's Jira integration",category:"Jira"},{name:"JIRA_INTEGRATION_DELETE",description:"Disconnect Jira (already-synced cards are kept)",category:"Jira"},{name:"JIRA_BOARDS_LIST",description:"List Jira boards visible to the connected credentials",category:"Jira"},{name:"JIRA_BOARD_COLUMNS_LIST",description:"List a Jira board's columns and statuses for the mapping",category:"Jira"},{name:"JIRA_AUTOMATION_LIST",description:"List the automations Jira status changes fire",category:"Jira"},{name:"JIRA_AUTOMATION_UPSERT",description:"Fire an automation on issues entering a Jira status",category:"Jira"},{name:"JIRA_RUN_START",description:"Fire an automation on Jira issues now",category:"Jira"},{name:"JIRA_ISSUE_GET",description:"Read a Jira issue on the board from a run",category:"Jira"},{name:"JIRA_COMMENT_ADD",description:"Comment on a Jira issue on the board from a run",category:"Jira"},{name:"JIRA_ISSUE_TRANSITION",description:"Move a Jira issue on the board to another status",category:"Jira"},{name:"JIRA_ATTACHMENT_DOWNLOAD",description:"Get a short-lived download URL for an attachment of a Jira issue",category:"Jira"},{name:"JIRA_REMOTE_LINK_ADD",description:"Link a pull request or deploy preview on a Jira issue",category:"Jira"},{name:"JIRA_ISSUE_CREATE",description:"Create a Jira issue on the board from a run",category:"Jira"},{name:"JIRA_ISSUE_SEARCH",description:"Search the Jira board's issues with JQL from a run",category:"Jira"},{name:"FILE_CONFIG_UPDATE",description:"Update an S3 bucket configuration, optionally rotating credentials",category:"File Configs"},{name:"FILE_CONFIG_DELETE",description:"Delete an S3 bucket configuration",category:"File Configs"},{name:"FILE_OBJECTS_LIST",description:"List existing objects in a configured bucket",category:"File Configs"},{name:"FILE_OBJECT_DELETE",description:"Delete an object from a configured bucket",category:"File Configs"},{name:"LIST_OBJECTS",description:"List objects in storage",category:"Object Storage"},{name:"GET_OBJECT_METADATA",description:"Get object metadata",category:"Object Storage"},{name:"GET_PRESIGNED_URL",description:"Generate download URL",category:"Object Storage"},{name:"PUT_PRESIGNED_URL",description:"Generate upload URL",category:"Object Storage"},{name:"DELETE_OBJECT",description:"Delete object",category:"Object Storage",dangerous:!0},{name:"DELETE_OBJECTS",description:"Delete multiple objects",category:"Object Storage",dangerous:!0},{name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry apps",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_GET",description:"Get registry app details",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"List registry app versions",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get registry app filters",category:"Registry"},{name:"REGISTRY_ITEM_LIST",description:"List Deco registry items",category:"Registry"},{name:"REGISTRY_ITEM_SEARCH",description:"Search registry items",category:"Registry"},{name:"REGISTRY_ITEM_GET",description:"Get registry item details",category:"Registry"},{name:"REGISTRY_ITEM_VERSIONS",description:"List registry item versions",category:"Registry"},{name:"REGISTRY_ITEM_FILTERS",description:"Get registry item filters",category:"Registry"},{name:"SANDBOX_START",description:"Start a sandbox VM with dev server preview",category:"VM"},{name:"SANDBOX_DELETE",description:"Stop and delete a sandbox VM",category:"VM"},{name:"GITHUB_LIST_USER_ORGS",description:"List GitHub user's personal account and organizations",category:"GitHub"},{name:"GIT_PROVIDER_CAPABILITIES",description:"Which git providers this deployment can connect, with their connect URLs",category:"Git"},{name:"GIT_ACCOUNT_LIST",description:"List the git provider accounts connected to the organization",category:"Git"},{name:"GIT_ACCOUNT_CONNECT_TOKEN",description:"Connect a git provider account with an access token",category:"Git"},{name:"GIT_ACCOUNT_DELETE",description:"Disconnect a git provider account",category:"Git"},{name:"REPOSITORY_LIST",description:"List the repositories linked to the organization",category:"Git"},{name:"REPOSITORY_SEARCH",description:"Search the repositories an account can reach on its provider",category:"Git"},{name:"REPOSITORY_LINK",description:"Link a repository to the organization",category:"Git"},{name:"REPOSITORY_CREATE_FROM_TEMPLATE",description:"Create a site repository from a template and link it",category:"Git"},{name:"REPOSITORY_SEARCH_BRANCHES",description:"Search a repository's branches by name substring, on either provider",category:"Git"},{name:"CHANGE_REQUEST_STATE",description:"Read a branch's change request with its CI runs, review state and comments",category:"Git"},{name:"CHANGE_REQUEST_LAST_MERGED",description:"Read the most recently merged change request into a base branch",category:"Git"},{name:"CHANGE_REQUEST_LIST_OPEN",description:"List a repository's open change requests",category:"Git"},{name:"CHANGE_REQUEST_CHECK_LOG",description:"Read one CI run's report for a change request",category:"Git"},{name:"CHANGE_REQUEST_OPEN",description:"Propose a branch onto another, reusing the branch's existing change request",category:"Git"},{name:"CHANGE_REQUEST_MERGE",description:"Land a change request, reporting why it could not merge",category:"Git"},{name:"REPOSITORY_UPDATE",description:"Change a linked repository's settings, such as its sandbox image",category:"Git"},{name:"REPOSITORY_DELETE",description:"Unlink a repository from the organization",category:"Git"},{name:"GLOBAL_SEARCH",description:"Search across organization resources (currently threads). Returns a typed union of matches.",category:"Search"},{name:"TASK_BOARD_ITEM_CREATE",description:"Create task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_LIST",description:"List task board items",category:"Task Board"},{name:"TASK_BOARD_ITEM_UPDATE",description:"Update task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_DELETE",description:"Delete task board item",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_PROMPT_LIST",description:"List the instructions appended to the system prompt of the board's runs",category:"Task Board"},{name:"TASK_BOARD_PROMPT_UPSERT",description:"Set the instructions appended to the system prompt of the board's runs",category:"Task Board"},{name:"TASK_BOARD_PROMPT_DELETE",description:"Clear a board system prompt",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_ITEM_PRS_GET",description:"Get a task board item's linked pull requests with live state",category:"Task Board"},{name:"TASK_BOARD_PREVIEW_PROBE",description:"Check whether a pull request's deploy preview URL is currently reachable",category:"Task Board"},{name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task with the Super Agent, failing any run still holding it open",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_RUN_REVIEWER",description:"Run the Reviewer on a task even when the organization has automated review turned off",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_RESOLVE_CONFLICT",description:"Hand a task's conflicting pull request back to the Super Agent to resolve the merge conflict",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision (approve or request changes) for a task under review",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Merge a reviewed task's pull request and move the task to Done",category:"Task Board",dangerous:!0},{name:"NOTIFICATION_LIST",description:"List your unread notifications in this organization",category:"Task Board"},{name:"NOTIFICATION_MARK_READ",description:"Mark your notifications read",category:"Task Board"},{name:"NOTIFICATION_SUBSCRIPTION_SET",description:"Follow or unfollow a task board item",category:"Task Board"},{name:"NOTIFICATION_SUBSCRIPTION_LIST",description:"List the users following a task board item",category:"Task Board"},{name:"TASK_BOARD_ACTIVITY_LIST",description:"List a task board item's change history",category:"Task Board"},{name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comment threads",category:"Task Board"},{name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment or a reply on a task board item",category:"Task Board"},{name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit a comment, or resolve/unresolve a comment thread",category:"Task Board"},{name:"TASK_BOARD_COMMENT_DELETE",description:"Delete a comment (a thread root takes its replies)",category:"Task Board"},{name:"TASK_BOARD_DISMISSED_LIST",description:"List Deco Score findings dismissed by deleting their task board cards",category:"Task Board"},{name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss Deco Score findings so the next Deco Score import pushes them again",category:"Task Board"},{name:"TASK_BOARD_SPRINT_LIST",description:"List the board's sprints",category:"Task Board"},{name:"TASK_BOARD_SPRINT_CREATE",description:"Plan a new sprint",category:"Task Board"},{name:"TASK_BOARD_SPRINT_UPDATE",description:"Rename a sprint or change its dates",category:"Task Board"},{name:"TASK_BOARD_SPRINT_START",description:"Start a planned sprint",category:"Task Board"},{name:"TASK_BOARD_SPRINT_COMPLETE",description:"Complete a running sprint and move its unfinished cards on",category:"Task Board"},{name:"TASK_BOARD_SPRINT_DELETE",description:"Delete a sprint, sending its cards to the backlog",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_ADMIN_ORG_LIST",description:"Whether the caller may read every org's task board, and the orgs that have board items",category:"Task Board"},{name:"TASK_BOARD_DELIVERY",description:"Task board throughput and flow \u2014 completions, PR rate, lead vs cycle time, dwell by lane",category:"Task Board"},{name:"TASK_BOARD_OPERATION",description:"How autonomously the agent delivers \u2014 run to production funnel, no-human rate, failed-QA rate, and where people stepped in",category:"Task Board"},{name:"TASK_BOARD_OPERATION_TASKS",description:"The cards behind one task board operation figure",category:"Task Board"},{name:"TASK_BOARD_REWORK",description:"Why tasks come back \u2014 failed-QA and needed-a-person rates by type, priority, tag, sprint and author",category:"Task Board"},{name:"TASK_BOARD_SPRINTS",description:"Sprint velocity \u2014 committed, completed, and completed with no human",category:"Task Board"},{name:"TASK_BOARD_STUCK",description:"Task board work that is stuck right now, and WIP by age",category:"Task Board"},{name:"TASK_BOARD_COST",description:"Task board spend \u2014 total, per task, per shipped PR, and the coverage % behind those figures",category:"Task Board"},{name:"TASK_BOARD_QUALITY",description:"Task board quality \u2014 first-pass yield, rework, autonomy, abandonment, retry burn",category:"Task Board"},{name:"TASK_BOARD_ERRORS",description:"Task board run failures \u2014 counts, kinds, live error feed, error signatures, superseded runs",category:"Task Board"},{name:"TASK_BOARD_TENANTS",description:"Per-tenant task board scorecard and queue wait",category:"Task Board"},{name:"THREAD_ANALYTICS_ORG_LIST",description:"Whether the caller may read every org's threads, and the orgs that have any",category:"Threads"},{name:"THREAD_ANALYTICS_LIVE",description:"Recently active threads across orgs with status, owner and spend (admin orgs)",category:"Threads"},{name:"THREAD_ANALYTICS_USAGE",description:"Token and USD usage by org, user, agent and kind; top spenders (admin orgs)",category:"Threads"},{name:"THREAD_ANALYTICS_ERRORS",description:"Failed threads, error feed and error signatures across orgs (admin orgs)",category:"Threads"},{name:"TASK_ADD_REPO",description:"Clone an organization repository into the sandbox of the task run calling it",category:"Task Board"},{name:"generate_image",description:"Generate an image with the organization's image model",category:"Chat"},{name:"web_search",description:"Search the web and synthesize a short cited answer",category:"Chat"},{name:"deep_research",description:"Run multi-source web research into a cited report",category:"Chat"},{name:"suggest_task",description:"Offer the user a task card for the board",category:"Chat"},{name:"preview_navigate",description:"Navigate the user's live preview to a page",category:"Chat"},{name:"update_interests",description:"Record the user's durable goals for the current agent",category:"Chat"}],EK0=[{id:"basic-usage",label:"Basic Usage",description:"Tools all org members can access by default",section:"Basic Usage",tools:["CODEX_SUBSCRIPTION_CONNECT","CODEX_SUBSCRIPTION_STATUS","SUBSCRIPTION_USAGE_GET","CODEX_SUBSCRIPTION_DISCONNECT","CODEX_SUBSCRIPTION_SYNC","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","CONNECTION_TEST","CONNECTION_TOOLS_SEARCH","CONNECTION_TOOL_CALL","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","VIRTUAL_MCP_LAST_USED_LIST","SIDEBAR_GET","SIDEBAR_PREFERENCES_SET","PROJECT_FOLDER_ENSURE","AUTOMATION_GET","AUTOMATION_LIST","AUTOMATION_RUN_STATS","AI_PROVIDERS_LIST","AI_PROVIDERS_LIST_MODELS","AI_PROVIDERS_ACTIVE","AI_PROVIDER_KEY_LIST","AI_PROVIDER_CREDITS","AI_PLAN_ENTITLEMENTS","AI_PLAN_LIST","ORGANIZATION_BILLING_PLAN_PRICES","AI_PROVIDER_TOPUP_URL","LIST_OBJECTS","GET_OBJECT_METADATA","GET_PRESIGNED_URL","PUT_PRESIGNED_URL","FILE_OBJECTS_LIST","ORG_REPO_SYNC_LIST","SANDBOX_START","SANDBOX_DELETE","REPOSITORY_SEARCH_BRANCHES","GIT_PROVIDER_CAPABILITIES","GIT_ACCOUNT_LIST","REPOSITORY_LIST","REPOSITORY_SEARCH","CHANGE_REQUEST_STATE","CHANGE_REQUEST_LAST_MERGED","CHANGE_REQUEST_LIST_OPEN","CHANGE_REQUEST_CHECK_LOG","GLOBAL_SEARCH","ORGANIZATION_SETTINGS_GET","USER_GET","ORGANIZATION_HAS_SITE","ORGANIZATION_BLOCKS_EDITOR_SET","COLLECTION_THREADS_CREATE","COLLECTION_THREADS_LIST","COLLECTION_THREADS_GET","COLLECTION_THREADS_UPDATE","COLLECTION_THREADS_DELETE","COLLECTION_THREAD_MESSAGES_LIST","TASK_BOARD_ITEM_CREATE","TASK_BOARD_ITEM_LIST","TASK_BOARD_ITEM_UPDATE","TASK_BOARD_ITEM_DELETE","TASK_BOARD_PROMPT_LIST","TASK_BOARD_PROMPT_UPSERT","TASK_BOARD_PROMPT_DELETE","TASK_BOARD_ITEM_PRS_GET","TASK_BOARD_PREVIEW_PROBE","TASK_BOARD_ITEM_RERUN","TASK_BOARD_RUN_REVIEWER","TASK_BOARD_REVIEW_DECISION","TASK_BOARD_PROMOTE_TO_PRODUCTION","TASK_BOARD_ACTIVITY_LIST","TASK_BOARD_COMMENT_LIST","TASK_BOARD_COMMENT_CREATE","TASK_BOARD_COMMENT_UPDATE","TASK_BOARD_COMMENT_DELETE","TASK_BOARD_DISMISSED_LIST","TASK_BOARD_DISMISSED_RESTORE","TASK_BOARD_SPRINT_LIST","TASK_BOARD_SPRINT_CREATE","TASK_BOARD_SPRINT_UPDATE","TASK_BOARD_SPRINT_START","TASK_BOARD_SPRINT_COMPLETE","TASK_BOARD_SPRINT_DELETE","TASK_BOARD_ADMIN_ORG_LIST","TASK_BOARD_DELIVERY","TASK_BOARD_OPERATION","TASK_BOARD_OPERATION_TASKS","TASK_BOARD_REWORK","TASK_BOARD_SPRINTS","TASK_BOARD_STUCK","TASK_BOARD_COST","TASK_BOARD_QUALITY","TASK_BOARD_ERRORS","TASK_BOARD_TENANTS","THREAD_ANALYTICS_ORG_LIST","THREAD_ANALYTICS_LIVE","THREAD_ANALYTICS_USAGE","THREAD_ANALYTICS_ERRORS","NOTIFICATION_LIST","NOTIFICATION_MARK_READ","NOTIFICATION_SUBSCRIPTION_SET","NOTIFICATION_SUBSCRIPTION_LIST","generate_image","web_search","deep_research","suggest_task","preview_navigate","update_interests"]},{id:"org:manage",label:"Manage organization",description:"Edit organization settings and domain configuration",section:"Organization",tools:["ORGANIZATION_GET","ORGANIZATION_LIST","ORGANIZATION_UPDATE","ORGANIZATION_SETTINGS_GET","ORGANIZATION_SETTINGS_UPDATE","ORGANIZATION_DOMAIN_LIST","ORGANIZATION_DOMAIN_ADD","ORGANIZATION_DOMAIN_UPDATE","ORGANIZATION_DOMAIN_VERIFY","ORGANIZATION_DOMAIN_REMOVE","JIRA_INTEGRATION_GET","JIRA_INTEGRATION_UPSERT","JIRA_INTEGRATION_DELETE","JIRA_BOARDS_LIST","JIRA_BOARD_COLUMNS_LIST","JIRA_AUTOMATION_LIST","JIRA_AUTOMATION_UPSERT","JIRA_RUN_START"]},{id:"members:manage",label:"Manage members",description:"Invite members, remove them, and change their roles",section:"Organization",tools:["ORGANIZATION_MEMBER_LIST","ORGANIZATION_MEMBER_ADD","ORGANIZATION_MEMBER_REMOVE","ORGANIZATION_MEMBER_UPDATE_ROLE","ORGANIZATION_BILLING_CHECKOUT_START","ORGANIZATION_BILLING_PORTAL","ORGANIZATION_TASK_QUOTA_GET","INFRA_BILLING_SITES_LIST","INFRA_BILLING_GET","INFRA_BILLING_PORTAL","ORGANIZATION_JOIN_REQUEST_LIST","ORGANIZATION_JOIN_REQUEST_APPROVE","ORGANIZATION_JOIN_REQUEST_DENY"],dangerous:!0},{id:"connections:manage",label:"Manage connections",description:"Create, update, and delete connections",section:"Connections & Agents",tools:["COLLECTION_CONNECTIONS_CREATE","COLLECTION_CONNECTIONS_UPDATE","COLLECTION_CONNECTIONS_DELETE","REPORTS_SETUP","REPORTS_RUN","REPORTS_BIND","REPORTS_CONNECTION_STATUS","REPORTS_SET_REPOSITORY"],dangerous:!0},{id:"agents:manage",label:"Manage agents",description:"Create, configure, and delete agents",section:"Connections & Agents",tools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_VIRTUAL_MCP_UPDATE","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_PINNED_VIEWS_UPDATE","PROJECT_FOLDERS_SET"],dangerous:!0},{id:"automations:manage",label:"Manage automations",description:"Create, update, run, and delete automations",section:"Automations",tools:["AUTOMATION_CREATE","AUTOMATION_UPDATE","AUTOMATION_DELETE","AUTOMATION_TRIGGER_ADD","AUTOMATION_TRIGGER_REMOVE","AUTOMATION_TRIGGER_ROTATE_TOKEN","AUTOMATION_RUN"],dangerous:!0},{id:"monitoring:view",label:"View monitoring",description:"Access logs and usage statistics",section:"Monitoring",tools:["MONITORING_HEATMAP","MONITORING_LOG_GET","MONITORING_LOGS_LIST","MONITORING_STATS","MONITORING_THREAD_USAGE"]},{id:"secrets:manage",label:"Manage secrets",description:"Create and list secrets stored in the credential vault",section:"Organization",tools:["SECRET_CREATE","SECRET_LIST"]},{id:"file-configs:manage",label:"Manage file configs",description:"Create, list, update and delete S3 bucket configurations and synced GitHub repositories",section:"Organization",tools:["FILE_CONFIG_CREATE","FILE_CONFIG_LIST","FILE_CONFIG_UPDATE","FILE_CONFIG_DELETE","FILE_OBJECTS_LIST","FILE_OBJECT_DELETE","ORG_REPO_SYNC_CREATE","ORG_REPO_SYNC_LIST","ORG_REPO_SYNC_UPDATE","ORG_REPO_SYNC_DELETE","ORG_REPO_SYNC_RUN"]},{id:"ai-providers:manage",label:"Manage AI providers",description:"Add or remove API keys and provision provider credentials",section:"AI Providers",tools:["AI_PROVIDER_KEY_CREATE","AI_PROVIDER_KEY_LIST","AI_PROVIDER_KEY_DELETE","AI_PROVIDER_KEY_UPDATE","AI_PROVIDER_KEY_PREVIEW","AI_PROVIDER_OAUTH_URL","AI_PROVIDER_OAUTH_EXCHANGE","AI_PROVIDER_PROVISION_KEY","AI_PROVIDER_TOPUP_URL","AI_PROVIDER_CREDITS","AI_PLAN_ENTITLEMENTS","AI_PLAN_LIST","AI_PLAN_SET","AI_PLAN_INVOICE_UPGRADE","CLAUDE_SUBSCRIPTION_CONNECT","CLAUDE_SUBSCRIPTION_STATUS","CLAUDE_SUBSCRIPTION_DISCONNECT","GITHUB_COPILOT_CONNECT","GITHUB_COPILOT_STATUS","GITHUB_COPILOT_DISCONNECT","GITHUB_COPILOT_SHARE"]},{id:"tags:manage",label:"Manage tags",description:"Create, assign, and delete organization tags",section:"Organization",tools:["TAGS_LIST","TAGS_CREATE","TAGS_DELETE","MEMBER_TAGS_GET","MEMBER_TAGS_SET"]},{id:"experiments:manage",label:"Manage experiments",description:"Create, update, and delete A/B experiments, and view results",section:"Experiments",tools:["EXPERIMENT_LIST","EXPERIMENT_GET","EXPERIMENT_CREATE","EXPERIMENT_SUGGEST","EXPERIMENT_IMPLEMENT","EXPERIMENT_IMPLEMENT_LOCAL","EXPERIMENT_PREVIEW_SYNC_LOCAL","EXPERIMENT_UPDATE","EXPERIMENT_DELETE","EXPERIMENT_RESULTS"],dangerous:!0},{id:"registry:manage",label:"Browse registry",description:"Browse the Deco MCP catalog",section:"Store & Registry",tools:["COLLECTION_REGISTRY_APP_LIST","COLLECTION_REGISTRY_APP_GET","COLLECTION_REGISTRY_APP_VERSIONS","COLLECTION_REGISTRY_APP_FILTERS","REGISTRY_ITEM_LIST","REGISTRY_ITEM_SEARCH","REGISTRY_ITEM_GET","REGISTRY_ITEM_VERSIONS","REGISTRY_ITEM_FILTERS"]},{id:"api-keys:manage",label:"Manage API keys",description:"Create, update, and revoke API keys",section:"Developer",tools:["API_KEY_CREATE","API_KEY_LIST","API_KEY_UPDATE","API_KEY_DELETE"]},{id:"storage:delete",label:"Delete from storage",description:"Permanently delete files from object storage",section:"Developer",tools:["DELETE_OBJECT","DELETE_OBJECTS"],dangerous:!0},{id:"lake:read",label:"Query the data lake",description:"Run read-only SQL over the organization's own data lake (orders from connected stores)",section:"Developer",tools:["CUSTOMER_LAKE_QUERY"]}],PK0=new Set([...EK0.find(($)=>$.id==="basic-usage")?.tools??[],"ORG_FS_READ","ORG_FS_WRITE"]),eU4=["agents:manage","connections:manage"],rc=new Set(EK0.filter(($)=>eU4.includes($.id)).flatMap(($)=>$.tools))});function CZ($){if(!$)return!1;return $.split(",").some((Q)=>b00.includes(Q))}function YE($){return($??"").split(",").map((Z)=>Z.trim()).filter(Boolean)}function zK0($,Z){let Q=Array.isArray(Z)?Z:[Z];if(Q.length===0)return!1;let Y=$?$.split(","):[];if(Y.includes("owner"))return!0;if(Y.includes("admin"))return Q.every((X)=>X!=="owner");return!1}var RT,b00;var XX=L(()=>{RT=["owner","admin","user"],b00=["owner","admin"]});class MT{userId;toolName;boundAuth;role;connectionId;getToolMeta;organizationId;trustPublicPrefix;_granted=!1;constructor($,Z,Q,Y,X="self",J,G,W=!0){this.userId=$;this.toolName=Z;this.boundAuth=Q;this.role=Y;this.connectionId=X;this.getToolMeta=J;this.organizationId=G;this.trustPublicPrefix=W}setToolName($){this.toolName=$}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}setRole($){this.role=$}getRole(){return this.role}grant(){this._granted=!0}async check(...$){if(this._granted)return;if(this.trustPublicPrefix&&(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_"))){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new XE("Authentication required. Please provide a valid OAuth token or API key.")}let Z=$.length>0?$:this.toolName?[this.toolName]:[];if(Z.length===0)throw new m6("No resources specified for access check");for(let Q of Z)if(await this.checkResource(Q)){this.grant();return}throw new m6(`Access denied to: ${Z.join(", ")}`)}async checkResource($){if(!this.userId&&!this.boundAuth)return!1;return this.boundAuth?.isApiKeyPrincipal?this.checkApiKeyAccess($):this.checkMemberAccess($)}async checkApiKeyAccess($){if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]})}async checkMemberAccess($){if(this.userId&&this.role&&PK0.has($))return!0;if(CZ(this.role))return!0;if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]},{organizationId:this.organizationId,role:this.role})}async isToolPublic(){if(this.trustPublicPrefix&&(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_")))return!0;if(!this.getToolMeta)return!1;try{let $=await this.getToolMeta();if(!$)return!1;let Q=ZN($)?.public_tool;return Q===!0||Q==="true"}catch{return!1}}granted(){return this._granted}}var XE,m6;var JX=L(()=>{QE();XX();XE=class XE extends Error{constructor($){super($);this.name="UnauthorizedError"}};m6=class m6 extends Error{constructor($){super($);this.name="ForbiddenError"}}});async function J7$($,Z){let{adapter:Q}=await $.$context;return(await Q.findMany({model:"member",where:[{field:"userId",value:Z}],join:{organization:!0}})).map((X)=>X.organization)}async function G7$($,Z,Q){let{adapter:Y}=await $.$context;if(!await Y.findOne({model:"member",where:[{field:"userId",value:Z},{field:"organizationId",value:Q}]}))throw new m6("You are not a member of this organization");let J=await Y.findOne({model:"organization",where:[{field:"id",value:Q}],join:{invitation:!0,member:!0}});if(!J)return null;let{invitation:G,member:W,...K}=J,H=W.length>0?await Y.findMany({model:"user",where:[{field:"id",value:W.map((N)=>N.userId),operator:"in"}],limit:W.length}):[],F=new Map(H.map((N)=>[N.id,N])),U=W.flatMap((N)=>{let B=F.get(N.userId);return B?[{...N,user:{id:B.id,name:B.name,email:B.email,image:B.image}}]:[]});return{...K,invitations:G,members:U}}var W7$=L(()=>{JX()});function K7$($){let Z={};for(let Q of Object.keys($))Z[Q]=["*"];return Z}function x00($){let Z=$;if(typeof $==="string")try{Z=JSON.parse($)}catch{return{}}return Z&&typeof Z==="object"&&!Array.isArray(Z)?Object.fromEntries(Object.entries(Z)):{}}function P9($){return x00($?.metadata).archived===!0}var AK0="Organization is archived";function RK0($,Z){return $.get(TK0[Z])??$.get(qK0[Z])}function v01($,Z,Q){$[TK0[Z]]=Q,$[qK0[Z]]=Q}var TK0,qK0;var b01=L(()=>{TK0={token:"x-studio-token",client:"x-studio-client",properties:"x-studio-properties",runMetadata:"x-studio-run-metadata"},qK0={token:"x-mesh-token",client:"x-mesh-client",properties:"x-mesh-properties",runMetadata:"x-mesh-run-metadata"}});function JE($,Z,Q){$.delete(Z),$.set(Z,{value:Q,at:Date.now()})}function GE($,Z,Q){if($.size<=Z)return;let Y=Date.now();for(let[X,J]of $)if(Y-J.at>=Q)$.delete(X);if($.size>Z){let X=$.size-Z,J=0;for(let G of $.keys()){if(J>=X)break;$.delete(G),J++}}}import*as H7$ from"zod/v3";import*as VT from"zod/v4-mini";function GG($){return!!$._zod}function IT($){let Z=Object.values($);if(Z.length===0)return VT.object({});let Q=Z.every(GG),Y=Z.every((X)=>!GG(X));if(Q)return VT.object($);if(Y)return H7$.object($);throw Error("Mixed Zod versions detected in object shape.")}function KJ($,Z){if(GG($))return VT.safeParse($,Z);return $.safeParse(Z)}async function MK0($,Z){if(GG($))return await VT.safeParseAsync($,Z);return await $.safeParseAsync(Z)}function QN($){if(!$)return;let Z;if(GG($))Z=$._zod?.def?.shape;else Z=$.shape;if(!Z)return;if(typeof Z==="function")try{return Z()}catch{return}return Z}function ac($){if(!$)return;if(typeof $==="object"){let Z=$,Q=$;if(!Z._def&&!Q._zod){let Y=Object.values($);if(Y.length>0&&Y.every((X)=>typeof X==="object"&&X!==null&&(X._def!==void 0||X._zod!==void 0||typeof X.parse==="function")))return IT($)}}if(GG($)){let Q=$._zod?.def;if(Q&&(Q.type==="object"||Q.shape!==void 0))return $}else if($.shape!==void 0)return $;return}function VK0($){if($&&typeof $==="object"){if("message"in $&&typeof $.message==="string")return $.message;if("issues"in $&&Array.isArray($.issues)&&$.issues.length>0){let Z=$.issues[0];if(Z&&typeof Z==="object"&&"message"in Z)return String(Z.message)}try{return JSON.stringify($)}catch{return String($)}}return String($)}function F7$($){return $.description}function U7$($){if(GG($))return $._zod?.def?.type==="optional";let Z=$;if(typeof $.isOptional==="function")return $.isOptional();return Z._def?.typeName==="ZodOptional"}function IK0($){if(GG($)){let J=$._zod?.def;if(J){if(J.value!==void 0)return J.value;if(Array.isArray(J.values)&&J.values.length>0)return J.values[0]}}let Q=$._def;if(Q){if(Q.value!==void 0)return Q.value;if(Array.isArray(Q.values)&&Q.values.length>0)return Q.values[0]}let Y=$.value;if(Y!==void 0)return Y;return}var ec=()=>{};function WE($){return $==="completed"||$==="failed"||$==="cancelled"}var B7$,N7$,D7$=($)=>typeof $==="string"?{...N7$,name:$}:{...N7$,...$};var kK0=L(()=>{B7$=Symbol("Let zodToJsonSchema decide on which parser to use"),N7$={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"}});var L7$=($)=>{let Z=D7$($),Q=Z.name!==void 0?[...Z.basePath,Z.definitionPath,Z.name]:Z.basePath;return{...Z,flags:{hasReferencedOpenAiAnyType:!1},currentPath:Q,propertyPath:void 0,seen:new Map(Object.entries(Z.definitions).map(([Y,X])=>[X._def,{def:X._def,path:[...Z.basePath,Z.definitionPath,Y],jsonSchema:void 0}]))}};var x01=L(()=>{kK0()});function f01($,Z,Q,Y){if(!Y?.errorMessages)return;if(Q)$.errorMessage={...$.errorMessage,[Z]:Q}}function K6($,Z,Q,Y,X){$[Z]=Q,f01($,Z,Y,X)}var CK0=($,Z)=>{let Q=0;for(;Q<$.length&&Q<Z.length;Q++)if($[Q]!==Z[Q])break;return[($.length-Q).toString(),...Z.slice(Q)].join("/")};function l9($){if($.target!=="openAi")return{};let Z=[...$.basePath,$.definitionPath,$.openAiAnyTypeName];return $.flags.hasReferencedOpenAiAnyType=!0,{$ref:$.$refStrategy==="relative"?CK0(Z,$.currentPath):Z.join("/")}}var NK=()=>{};import{ZodFirstPartyTypeKind as $N4}from"zod/v3";function O7$($,Z){let Q={type:"array"};if($.type?._def&&$.type?._def?.typeName!==$N4.ZodAny)Q.items=R8($.type._def,{...Z,currentPath:[...Z.currentPath,"items"]});if($.minLength)K6(Q,"minItems",$.minLength.value,$.minLength.message,Z);if($.maxLength)K6(Q,"maxItems",$.maxLength.value,$.maxLength.message,Z);if($.exactLength)K6(Q,"minItems",$.exactLength.value,$.exactLength.message,Z),K6(Q,"maxItems",$.exactLength.value,$.exactLength.message,Z);return Q}var y01=L(()=>{O7()});function j7$($,Z){let Q={type:"integer",format:"int64"};if(!$.checks)return Q;for(let Y of $.checks)switch(Y.kind){case"min":if(Z.target==="jsonSchema7")if(Y.inclusive)K6(Q,"minimum",Y.value,Y.message,Z);else K6(Q,"exclusiveMinimum",Y.value,Y.message,Z);else{if(!Y.inclusive)Q.exclusiveMinimum=!0;K6(Q,"minimum",Y.value,Y.message,Z)}break;case"max":if(Z.target==="jsonSchema7")if(Y.inclusive)K6(Q,"maximum",Y.value,Y.message,Z);else K6(Q,"exclusiveMaximum",Y.value,Y.message,Z);else{if(!Y.inclusive)Q.exclusiveMaximum=!0;K6(Q,"maximum",Y.value,Y.message,Z)}break;case"multipleOf":K6(Q,"multipleOf",Y.value,Y.message,Z);break}return Q}var g01=()=>{};function w7$(){return{type:"boolean"}}function SK0($,Z){return R8($.type._def,Z)}var _K0=L(()=>{O7()});var E7$=($,Z)=>{return R8($.innerType._def,Z)};var h01=L(()=>{O7()});function u01($,Z,Q){let Y=Q??Z.dateStrategy;if(Array.isArray(Y))return{anyOf:Y.map((X,J)=>u01($,Z,X))};switch(Y){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return ZN4($,Z)}}var ZN4=($,Z)=>{let Q={type:"integer",format:"unix-time"};if(Z.target==="openApi3")return Q;for(let Y of $.checks)switch(Y.kind){case"min":K6(Q,"minimum",Y.value,Y.message,Z);break;case"max":K6(Q,"maximum",Y.value,Y.message,Z);break}return Q};var l01=()=>{};function P7$($,Z){return{...R8($.innerType._def,Z),default:$.defaultValue()}}var m01=L(()=>{O7()});function z7$($,Z){return Z.effectStrategy==="input"?R8($.schema._def,Z):l9(Z)}var c01=L(()=>{O7();NK()});function A7$($){return{type:"string",enum:Array.from($.values)}}function T7$($,Z){let Q=[R8($.left._def,{...Z,currentPath:[...Z.currentPath,"allOf","0"]}),R8($.right._def,{...Z,currentPath:[...Z.currentPath,"allOf","1"]})].filter((J)=>!!J),Y=Z.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,X=[];return Q.forEach((J)=>{if(QN4(J)){if(X.push(...J.allOf),J.unevaluatedProperties===void 0)Y=void 0}else{let G=J;if("additionalProperties"in J&&J.additionalProperties===!1){let{additionalProperties:W,...K}=J;G=K}else Y=void 0;X.push(G)}}),X.length?{allOf:X,...Y}:void 0}var QN4=($)=>{if("type"in $&&$.type==="string")return!1;return"allOf"in $};var d01=L(()=>{O7()});function q7$($,Z){let Q=typeof $.value;if(Q!=="bigint"&&Q!=="number"&&Q!=="boolean"&&Q!=="string")return{type:Array.isArray($.value)?"array":"object"};if(Z.target==="openApi3")return{type:Q==="bigint"?"integer":Q,enum:[$.value]};return{type:Q==="bigint"?"integer":Q,const:$.value}}function vK0($,Z){let Q={type:"string"};if($.checks)for(let Y of $.checks)switch(Y.kind){case"min":K6(Q,"minLength",typeof Q.minLength==="number"?Math.max(Q.minLength,Y.value):Y.value,Y.message,Z);break;case"max":K6(Q,"maxLength",typeof Q.maxLength==="number"?Math.min(Q.maxLength,Y.value):Y.value,Y.message,Z);break;case"email":switch(Z.emailStrategy){case"format:email":XF(Q,"email",Y.message,Z);break;case"format:idn-email":XF(Q,"idn-email",Y.message,Z);break;case"pattern:zod":HJ(Q,YF.email,Y.message,Z);break}break;case"url":XF(Q,"uri",Y.message,Z);break;case"uuid":XF(Q,"uuid",Y.message,Z);break;case"regex":HJ(Q,Y.regex,Y.message,Z);break;case"cuid":HJ(Q,YF.cuid,Y.message,Z);break;case"cuid2":HJ(Q,YF.cuid2,Y.message,Z);break;case"startsWith":HJ(Q,RegExp(`^${p01(Y.value,Z)}`),Y.message,Z);break;case"endsWith":HJ(Q,RegExp(`${p01(Y.value,Z)}$`),Y.message,Z);break;case"datetime":XF(Q,"date-time",Y.message,Z);break;case"date":XF(Q,"date",Y.message,Z);break;case"time":XF(Q,"time",Y.message,Z);break;case"duration":XF(Q,"duration",Y.message,Z);break;case"length":K6(Q,"minLength",typeof Q.minLength==="number"?Math.max(Q.minLength,Y.value):Y.value,Y.message,Z),K6(Q,"maxLength",typeof Q.maxLength==="number"?Math.min(Q.maxLength,Y.value):Y.value,Y.message,Z);break;case"includes":{HJ(Q,RegExp(p01(Y.value,Z)),Y.message,Z);break}case"ip":{if(Y.version!=="v6")XF(Q,"ipv4",Y.message,Z);if(Y.version!=="v4")XF(Q,"ipv6",Y.message,Z);break}case"base64url":HJ(Q,YF.base64url,Y.message,Z);break;case"jwt":HJ(Q,YF.jwt,Y.message,Z);break;case"cidr":{if(Y.version!=="v6")HJ(Q,YF.ipv4Cidr,Y.message,Z);if(Y.version!=="v4")HJ(Q,YF.ipv6Cidr,Y.message,Z);break}case"emoji":HJ(Q,YF.emoji(),Y.message,Z);break;case"ulid":{HJ(Q,YF.ulid,Y.message,Z);break}case"base64":{switch(Z.base64Strategy){case"format:binary":{XF(Q,"binary",Y.message,Z);break}case"contentEncoding:base64":{K6(Q,"contentEncoding","base64",Y.message,Z);break}case"pattern:zod":{HJ(Q,YF.base64,Y.message,Z);break}}break}case"nanoid":HJ(Q,YF.nanoid,Y.message,Z);case"toLowerCase":case"toUpperCase":case"trim":break;default:((X)=>{})(Y)}return Q}function p01($,Z){return Z.patternStrategy==="escape"?XN4($):$}function XN4($){let Z="";for(let Q=0;Q<$.length;Q++){if(!YN4.has($[Q]))Z+="\\";Z+=$[Q]}return Z}function XF($,Z,Q,Y){if($.format||$.anyOf?.some((X)=>X.format)){if(!$.anyOf)$.anyOf=[];if($.format){if($.anyOf.push({format:$.format,...$.errorMessage&&Y.errorMessages&&{errorMessage:{format:$.errorMessage.format}}}),delete $.format,$.errorMessage){if(delete $.errorMessage.format,Object.keys($.errorMessage).length===0)delete $.errorMessage}}$.anyOf.push({format:Z,...Q&&Y.errorMessages&&{errorMessage:{format:Q}}})}else K6($,"format",Z,Q,Y)}function HJ($,Z,Q,Y){if($.pattern||$.allOf?.some((X)=>X.pattern)){if(!$.allOf)$.allOf=[];if($.pattern){if($.allOf.push({pattern:$.pattern,...$.errorMessage&&Y.errorMessages&&{errorMessage:{pattern:$.errorMessage.pattern}}}),delete $.pattern,$.errorMessage){if(delete $.errorMessage.pattern,Object.keys($.errorMessage).length===0)delete $.errorMessage}}$.allOf.push({pattern:R7$(Z,Y),...Q&&Y.errorMessages&&{errorMessage:{pattern:Q}}})}else K6($,"pattern",R7$(Z,Y),Q,Y)}function R7$($,Z){if(!Z.applyRegexFlags||!$.flags)return $.source;let Q={i:$.flags.includes("i"),m:$.flags.includes("m"),s:$.flags.includes("s")},Y=Q.i?$.source.toLowerCase():$.source,X="",J=!1,G=!1,W=!1;for(let K=0;K<Y.length;K++){if(J){X+=Y[K],J=!1;continue}if(Q.i){if(G){if(Y[K].match(/[a-z]/)){if(W)X+=Y[K],X+=`${Y[K-2]}-${Y[K]}`.toUpperCase(),W=!1;else if(Y[K+1]==="-"&&Y[K+2]?.match(/[a-z]/))X+=Y[K],W=!0;else X+=`${Y[K]}${Y[K].toUpperCase()}`;continue}}else if(Y[K].match(/[a-z]/)){X+=`[${Y[K]}${Y[K].toUpperCase()}]`;continue}}if(Q.m){if(Y[K]==="^"){X+=`(^|(?<=[\r
433
+ '[]'::jsonb)`.as("board_triggers")).where("a.organization_id","=",$);if(Z)Q=Q.where("a.virtual_mcp_id","=",Z);return(await Q.groupBy(["a.id","a.organization_id","a.name","a.active","a.created_by","a.messages","a.models","a.tools","a.temperature","a.max_agent_steps","a.virtual_mcp_id","a.system_key","a.created_at","a.updated_at"]).orderBy("a.created_at","desc").execute()).map((X)=>({...M00(X),trigger_count:Number(X.trigger_count),board_triggers:X.board_triggers,nearest_next_run_at:X.nearest_next_run_at?pc(X.nearest_next_run_at):null}))}async update($,Z,Q){let X={updated_at:new Date().toISOString()};if(Q.name!==void 0)X.name=Q.name;if(Q.active!==void 0)X.active=Q.active;if(Q.messages!==void 0)X.messages=Q.messages;if(Q.models!==void 0)X.models=Q.models;if(Q.tools!==void 0)X.tools=Q.tools;if(Q.temperature!==void 0)X.temperature=Q.temperature;if(Q.max_agent_steps!==void 0)X.max_agent_steps=Q.max_agent_steps;await this.db.updateTable("automations").set(X).where("id","=",$).where("organization_id","=",Z).execute();let J=await this.findById($,Z);if(!J)throw Error("Automation not found after update");return J}async delete($,Z){return{success:((await this.db.deleteFrom("automations").where("id","=",$).where("organization_id","=",Z).executeTakeFirst()).numDeletedRows??0n)>0n}}async addTrigger($){let Z=new Date().toISOString(),Y={id:crypto.randomUUID(),automation_id:$.automation_id,type:$.type,cron_expression:$.cron_expression??null,connection_id:$.connection_id??null,event_type:$.event_type??null,params:$.params??null,last_run_at:null,next_run_at:$.next_run_at??null,api_key_id:$.api_key_id??null,column_key:$.column_key??null,from_kind:$.from_kind??null,from_statuses:$.from_statuses??[],created_at:Z},X=await this.db.insertInto("automation_triggers").values(Y).returningAll().executeTakeFirstOrThrow();return $E(X)}async removeTrigger($,Z){return{success:((await this.db.deleteFrom("automation_triggers").where("id","=",$).where("automation_id","=",Z).executeTakeFirst()).numDeletedRows??0n)>0n}}async listTriggers($){return(await this.db.selectFrom("automation_triggers").selectAll().where("automation_id","=",$).orderBy("created_at","asc").execute()).map($E)}async listTriggersForAutomations($){if($.length===0)return[];return(await this.db.selectFrom("automation_triggers").selectAll().where("automation_id","in",$).orderBy("created_at","asc").execute()).map($E)}async findTriggerById($){let Z=await this.db.selectFrom("automation_triggers").selectAll().where("id","=",$).executeTakeFirst();return Z?$E(Z):null}async setTriggerApiKeyId($,Z){await this.db.updateTable("automation_triggers").set({api_key_id:Z}).where("id","=",$).execute()}async findActiveEventTriggers($,Z,Q){return(await this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["t.id","t.automation_id","t.type","t.cron_expression","t.connection_id","t.event_type","t.params","t.last_run_at","t.api_key_id","t.created_at",...LK0]).where("t.type","=","event").where("t.connection_id","=",$).where("t.event_type","=",Z).where("a.organization_id","=",Q).where("a.active","=",!0).execute()).map((X)=>({...$E(X),automation:OK0(X)}))}async listActiveByEventTriggerConnectionId($){return await this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["a.id","a.name"]).where("t.type","=","event").where("t.connection_id","=",$).where("a.active","=",!0).distinct().execute()}async findActiveBoardColumnTriggers(){return(await this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["t.id","t.automation_id","t.type","t.cron_expression","t.connection_id","t.event_type","t.params","t.last_run_at","t.api_key_id","t.column_key","t.from_kind","t.from_statuses","t.created_at",...LK0]).where("t.type","=","board_column_transition").where("a.active","=",!0).execute()).map((Z)=>({...$E(Z),automation:OK0(Z)}))}async hasActiveBoardColumnTrigger($,Z){return await this.db.selectFrom("task_board_items as i").innerJoin("automations as a","a.organization_id","i.organization_id").innerJoin("automation_triggers as t","t.automation_id","a.id").select("t.id").where("i.id","=",$).where("a.active","=",!0).where("t.type","=","board_column_transition").where("t.column_key","=",Z).limit(1).executeTakeFirst()!==void 0}async findBuiltinTrigger($,Z){return await this.db.selectFrom("automations as a").innerJoin("automation_triggers as t","t.automation_id","a.id").select(["a.id as automationId","t.id as triggerId"]).where("a.organization_id","=",$).where("a.system_key","=",Z).limit(1).executeTakeFirst()??null}async listJiraTransitionTriggers($,Z){let Q=this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["t.id","t.automation_id","t.type","t.cron_expression","t.connection_id","t.event_type","t.params","t.last_run_at","t.api_key_id","t.column_key","t.from_kind","t.from_statuses","t.created_at",...LK0]).where("t.type","=","jira_transition").where("a.organization_id","=",$);if(Z?.jiraStatus!==void 0)Q=Q.where("t.column_key","=",Z.jiraStatus);if(Z?.activeOnly)Q=Q.where("a.active","=",!0);return(await Q.orderBy("t.created_at","asc").orderBy("t.id","asc").execute()).map((X)=>({...$E(X),automation:OK0(X)}))}async builtinActive($,Z){return(await this.db.selectFrom("automations").select("active").where("organization_id","=",$).where("system_key","=",Z).executeTakeFirst())?.active??null}async claimTriggerFire($,Z){return await this.db.deleteFrom("automation_trigger_fires").where("trigger_id","=",$).where("created_at","<",new Date(Date.now()-mU4)).execute(),await this.db.insertInto("automation_trigger_fires").values({trigger_id:$,event_key:Z}).onConflict((Y)=>Y.columns(["trigger_id","event_key"]).doNothing()).returning("trigger_id").executeTakeFirst()!==void 0}async findAllCronTriggers(){return(await this.db.selectFrom("automation_triggers as t").innerJoin("automations as a","a.id","t.automation_id").select(["t.id","t.automation_id","t.type","t.cron_expression","t.connection_id","t.event_type","t.params","t.last_run_at","t.api_key_id","t.created_at",...LK0]).where("t.type","=","cron").execute()).map((Z)=>({...$E(Z),automation:OK0(Z)}))}async updateNextRunAt($,Z){await this.db.updateTable("automation_triggers").set({next_run_at:Z}).where("id","=",$).execute()}async createAutomationRunThread($,Z,Q){let Y=m8("thrd"),X=new Date().toISOString();return await this.db.insertInto("threads").values({id:Y,organization_id:$.organization_id,title:`Automation: ${$.name}`,description:null,status:"in_progress",trigger_id:Z,virtual_mcp_id:$.virtual_mcp_id,harness_id:Q,metadata:JSON.stringify({runtime:"sandbox"}),hidden:!1,message_storage_version:2,created_at:X,updated_at:X,created_by:$.created_by,updated_by:null}).execute(),Y}async markRunFailed($,Z,Q){await this.db.updateTable("threads").set({status:"failed",updated_at:new Date().toISOString(),...Z!=null?{failure_reason:Z}:{},...Q!=null?{failure_kind:Q}:{}}).where("id","=",$).where("status","=","in_progress").execute()}async markRunCompleted($){await this.db.updateTable("threads").set({status:"completed",updated_at:new Date().toISOString()}).where("id","=",$).where("status","=","in_progress").execute()}async updateTriggerLastRunAt($,Z){await this.db.updateTable("automation_triggers").set({last_run_at:Z}).where("id","=",$).execute()}async deactivateAutomation($){await this.db.updateTable("automations").set({active:!1,updated_at:new Date().toISOString()}).where("id","=",$).where("active","=",!0).execute()}async getRunStats($,Z,Q){let Y=this.db.selectFrom("threads as th").innerJoin("automation_triggers as t","t.id","th.trigger_id").select("th.status").select((G)=>G.fn.count("th.id").as("count")).where("t.automation_id","=",$).where("th.organization_id","=",Z).where("th.hidden","=",!1).groupBy("th.status");if(Q?.startDate)Y=Y.where("th.created_at",">=",Q.startDate);if(Q?.endDate)Y=Y.where("th.created_at","<=",Q.endDate);let X=await Y.execute(),J={total:0,completed:0,failed:0,inProgress:0};for(let G of X){let W=Number(G.count);if(J.total+=W,G.status==="completed")J.completed+=W;else if(G.status==="failed")J.failed+=W;else if(G.status==="in_progress")J.inProgress+=W}return J}async listRunThreadIds($,Z,Q){let Y=this.db.selectFrom("threads as th").innerJoin("automation_triggers as t","t.id","th.trigger_id").select("th.id").where("t.automation_id","=",$).where("th.organization_id","=",Z).where("th.hidden","=",!1).orderBy("th.created_at","desc").limit(Q?.limit??500);if(Q?.startDate)Y=Y.where("th.created_at",">=",Q.startDate);if(Q?.endDate)Y=Y.where("th.created_at","<=",Q.endDate);return(await Y.execute()).map((J)=>J.id)}}function ZE($){return new gZ$($)}var LK0,mU4=2592000000;var V00=L(()=>{KY();LK0=["a.id as a_id","a.organization_id as a_organization_id","a.name as a_name","a.active as a_active","a.created_by as a_created_by","a.messages as a_messages","a.models as a_models","a.tools as a_tools","a.temperature as a_temperature","a.max_agent_steps as a_max_agent_steps","a.virtual_mcp_id as a_virtual_mcp_id","a.system_key as a_system_key","a.created_at as a_created_at","a.updated_at as a_updated_at"]});import{createHash as cU4,randomBytes as dU4}from"crypto";function hZ$($){return cU4("sha256").update($).digest("hex")}function iU4(){return dU4(32).toString("hex")}class I00{db;constructor($){this.db=$}async generateTokenPair(){let $=iU4(),Z=await hZ$($);return{plaintext:$,hash:Z}}async persistTokenHash($,Z,Q){let Y=crypto.randomUUID();await this.db.insertInto("trigger_callback_tokens").values({id:Y,organization_id:$,connection_id:Z,token_hash:Q,created_at:new Date().toISOString()}).onConflict((X)=>X.columns(["connection_id","organization_id"]).doUpdateSet({id:Y,token_hash:Q})).execute()}async createOrRotateToken($,Z){let{plaintext:Q,hash:Y}=await this.generateTokenPair();return await this.persistTokenHash($,Z,Y),Q}async validateToken($){let Z=await hZ$($),Q=await this.db.selectFrom("trigger_callback_tokens").select(["organization_id","connection_id"]).where("token_hash","=",Z).executeTakeFirst();if(!Q)return null;return{organizationId:Q.organization_id,connectionId:Q.connection_id}}async deleteByConnection($,Z){await this.db.deleteFrom("trigger_callback_tokens").where("connection_id","=",$).where("organization_id","=",Z).execute()}}var j01=()=>{};function jK0($){return{id:$.id,organizationId:$.organization_id,domain:$.domain,joinMode:$.join_mode,verificationStatus:$.verification_status==="verified"?"verified":"pending",verificationMethod:$.verification_method??null,verificationToken:$.verification_token,verifiedAt:$.verified_at,createdAt:$.created_at,updatedAt:$.updated_at}}class k3{db;constructor($){this.db=$}async getAllByDomain($){return(await this.db.selectFrom("organization_domains").selectAll().where("domain","=",$.toLowerCase()).execute()).map(jK0)}async listByOrganizationId($){return(await this.db.selectFrom("organization_domains").selectAll().where("organization_id","=",$).orderBy("created_at","asc").execute()).map(jK0)}async getById($){let Z=await this.db.selectFrom("organization_domains").selectAll().where("id","=",$).executeTakeFirst();return Z?jK0(Z):null}async getByOrgAndDomain($,Z){let Q=await this.db.selectFrom("organization_domains").selectAll().where("organization_id","=",$).where("domain","=",Z.toLowerCase()).executeTakeFirst();return Q?jK0(Q):null}async add($,Z,Q={}){let Y=Z.toLowerCase(),X=await this.getByOrgAndDomain($,Y);if(X)return X;let J=new Date().toISOString(),G=crypto.randomUUID(),W=Q.verificationStatus??"pending";try{await this.db.insertInto("organization_domains").values({id:G,organization_id:$,domain:Y,join_mode:Q.joinMode??"off",verification_status:W,verification_method:Q.verificationMethod??null,verification_token:Q.verificationToken??null,verified_at:W==="verified"?J:null,created_at:J,updated_at:J}).execute()}catch(H){if(H.code==="23505"){let F=await this.getByOrgAndDomain($,Y);if(F)return F}throw H}let K=await this.getById(G);if(!K)throw Error("Failed to add domain");return K}async updateJoinMode($,Z){await this.db.updateTable("organization_domains").set({join_mode:Z,updated_at:new Date().toISOString()}).where("id","=",$).execute();let Q=await this.getById($);if(!Q)throw Error("Domain not found");return Q}async markVerified($,Z){let Q=new Date().toISOString();await this.db.updateTable("organization_domains").set({verification_status:"verified",verification_method:Z,verification_token:null,verified_at:Q,updated_at:Q}).where("id","=",$).execute();let Y=await this.getById($);if(!Y)throw Error("Domain not found");return Y}async removeById($){await this.db.deleteFrom("organization_domains").where("id","=",$).execute()}}function w01($){return{id:$.id,organizationId:$.organization_id,userId:$.user_id,status:$.status,decidedBy:$.decided_by,decidedAt:$.decided_at,createdAt:$.created_at,updatedAt:$.updated_at}}class nc{db;constructor($){this.db=$}async create($,Z){let Q=await this.getPending($,Z);if(Q)return Q;let Y=new Date().toISOString(),X=crypto.randomUUID();try{await this.db.insertInto("organization_join_requests").values({id:X,organization_id:$,user_id:Z,status:"pending",decided_by:null,decided_at:null,created_at:Y,updated_at:Y}).execute()}catch(G){if(G.code==="23505"){let W=await this.getPending($,Z);if(W)return W}throw G}let J=await this.getById(X);if(!J)throw Error("Failed to create join request");return J}async getById($){let Z=await this.db.selectFrom("organization_join_requests").selectAll().where("id","=",$).executeTakeFirst();return Z?w01(Z):null}async getPending($,Z){let Q=await this.db.selectFrom("organization_join_requests").selectAll().where("organization_id","=",$).where("user_id","=",Z).where("status","=","pending").executeTakeFirst();return Q?w01(Q):null}async listPendingWithUser($){return(await this.db.selectFrom("organization_join_requests as r").innerJoin("user","user.id","r.user_id").select(["r.id as id","r.organization_id as organization_id","r.user_id as user_id","r.status as status","r.decided_by as decided_by","r.decided_at as decided_at","r.created_at as created_at","r.updated_at as updated_at","user.name as user_name","user.email as user_email","user.image as user_image"]).where("r.organization_id","=",$).where("r.status","=","pending").orderBy("r.created_at","asc").execute()).map((Q)=>({...w01(Q),user:{id:Q.user_id,name:Q.user_name,email:Q.user_email,image:Q.user_image}}))}async decide($,Z,Q){let Y=new Date().toISOString();if((await this.db.updateTable("organization_join_requests").set({status:Z,decided_by:Q,decided_at:Y,updated_at:Y}).where("id","=",$).where("status","=","pending").executeTakeFirst()).numUpdatedRows===0n)return null;return this.getById($)}}class k00{db;constructor($){this.db=$}async get($,Z){let Q=await this.db.selectFrom("kv").select("value").where("organization_id","=",$).where("key","=",Z).executeTakeFirst();if(!Q)return null;return Q.value}async set($,Z,Q){await this.db.insertInto("kv").values({organization_id:$,key:Z,value:JSON.stringify(Q),updated_at:new Date().toISOString()}).onConflict((Y)=>Y.columns(["organization_id","key"]).doUpdateSet({value:JSON.stringify(Q),updated_at:new Date().toISOString()})).execute()}async delete($,Z){await this.db.deleteFrom("kv").where("organization_id","=",$).where("key","=",Z).execute()}}function pU4($){if(!$||!Array.isArray($.interests))return null;return{interests:$.interests}}class E01{kv;constructor($){this.kv=$}async getForAgent($,Z,Q){let Y=await this.kv.get($,uZ$(Z,Q));return pU4(Y)}async setForAgent($,Z,Q,Y){await this.kv.set($,uZ$(Z,Q),Y)}}var lZ$="interests:",uZ$=($,Z)=>`interests:${$}:${Z}`;class P01{db;vault;constructor($,Z){this.db=$;this.vault=Z}async getByOrgId($){let Z=await this.db.selectFrom("org_sso_config").selectAll().where("organization_id","=",$).executeTakeFirst();if(!Z)return null;return this.toRuntime(Z)}async getByDomain($){let Z=await this.db.selectFrom("org_sso_config").selectAll().where("domain","=",$.toLowerCase()).executeTakeFirst();if(!Z)return null;return this.toRuntime(Z)}async upsert($,Z){let Q=new Date().toISOString(),Y=crypto.randomUUID(),X=await this.vault.encrypt(Z.clientSecret),J=JSON.stringify(Z.scopes??["openid","email","profile"]),G=Z.enforced===void 0?void 0:Z.enforced?1:0;await this.db.insertInto("org_sso_config").values({id:Y,organization_id:$,issuer:Z.issuer,client_id:Z.clientId,client_secret:X,discovery_endpoint:Z.discoveryEndpoint??null,scopes:J,domain:Z.domain.toLowerCase(),enforced:G??0,created_at:Q,updated_at:Q}).onConflict((K)=>K.column("organization_id").doUpdateSet({issuer:Z.issuer,client_id:Z.clientId,client_secret:X,discovery_endpoint:Z.discoveryEndpoint??null,scopes:J,domain:Z.domain.toLowerCase(),...G!==void 0?{enforced:G}:{},updated_at:Q})).execute();let W=await this.getByOrgId($);if(!W)throw Error("Failed to upsert org SSO config");return W}async setEnforced($,Z){await this.db.updateTable("org_sso_config").set({enforced:Z?1:0,updated_at:new Date().toISOString()}).where("organization_id","=",$).execute()}async delete($){await this.db.deleteFrom("org_sso_config").where("organization_id","=",$).execute()}toPublic($){let{clientSecret:Z,...Q}=$;return Q}async toRuntime($){let Z=await this.vault.decrypt($.client_secret),Q=typeof $.scopes==="string"?JSON.parse($.scopes):$.scopes;return{id:$.id,organizationId:$.organization_id,issuer:$.issuer,clientId:$.client_id,clientSecret:Z,discoveryEndpoint:$.discovery_endpoint,scopes:Q,domain:$.domain,enforced:$.enforced===1,createdAt:$.created_at,updatedAt:$.updated_at}}}class z01{db;constructor($){this.db=$}async get($,Z){let Q=await this.db.selectFrom("org_sso_sessions").selectAll().where("user_id","=",$).where("organization_id","=",Z).executeTakeFirst();if(!Q)return null;return{id:Q.id,userId:Q.user_id,organizationId:Q.organization_id,authenticatedAt:Q.authenticated_at,expiresAt:Q.expires_at,createdAt:Q.created_at}}async isValid($,Z){let Q=await this.get($,Z);if(!Q)return!1;return new Date(Q.expiresAt)>new Date}async upsert($,Z){let Q=new Date,Y=new Date(Q.getTime()+86400000),X=crypto.randomUUID();await this.db.insertInto("org_sso_sessions").values({id:X,user_id:$,organization_id:Z,authenticated_at:Q.toISOString(),expires_at:Y.toISOString(),created_at:Q.toISOString()}).onConflict((G)=>G.columns(["user_id","organization_id"]).doUpdateSet({authenticated_at:Q.toISOString(),expires_at:Y.toISOString()})).execute();let J=await this.get($,Z);if(!J)throw Error("Failed to upsert SSO session");return J}async deleteExpired(){await this.db.deleteFrom("org_sso_sessions").where("expires_at","<",new Date().toISOString()).execute()}}class C00{db;constructor($){this.db=$}async listOrgTags($){return(await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).orderBy("name","asc").execute()).map((Q)=>this.tagFromDbRow(Q))}async getTag($){let Z=await this.db.selectFrom("organization_tags").selectAll().where("id","=",$).executeTakeFirst();return Z?this.tagFromDbRow(Z):null}async getTagsByIds($){if($.length===0)return[];return(await this.db.selectFrom("organization_tags").selectAll().where("id","in",$).execute()).map((Q)=>this.tagFromDbRow(Q))}async getTagByName($,Z){let Q=await this.db.selectFrom("organization_tags").selectAll().where("organization_id","=",$).where("name","=",Z).executeTakeFirst();return Q?this.tagFromDbRow(Q):null}async createTag($,Z,Q){let Y=m8("tag"),X=new Date().toISOString();await this.db.insertInto("organization_tags").values({id:Y,organization_id:$,name:Z,color:Q??null,created_at:X}).onConflict((G)=>G.columns(["organization_id","name"]).doNothing()).execute();let J=await this.getTagByName($,Z);if(!J)throw Error(`Failed to create or retrieve tag: ${Z}`);return J}async deleteTag($){await this.db.deleteFrom("organization_tags").where("id","=",$).execute()}async getMemberTags($){return(await this.db.selectFrom("member_tags").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member_tags.member_id","=",$).orderBy("organization_tags.name","asc").execute()).map((Q)=>this.tagFromDbRow(Q))}async setMemberTags($,Z){await this.db.transaction().execute(async(Q)=>{if(await Q.deleteFrom("member_tags").where("member_id","=",$).execute(),Z.length>0){let Y=new Date().toISOString();await Q.insertInto("member_tags").values(Z.map((X)=>({id:m8("mtag"),member_id:$,tag_id:X,created_at:Y}))).execute()}})}async addMemberTag($,Z){let Q=new Date().toISOString();await this.db.insertInto("member_tags").values({id:m8("mtag"),member_id:$,tag_id:Z,created_at:Q}).onConflict((Y)=>Y.columns(["member_id","tag_id"]).doNothing()).execute()}async removeMemberTag($,Z){await this.db.deleteFrom("member_tags").where("member_id","=",$).where("tag_id","=",Z).execute()}async verifyMemberOrg($,Z){return await this.db.selectFrom("member").select("id").where("id","=",$).where("organizationId","=",Z).executeTakeFirst()!==void 0}async getUserTagsInOrg($,Z){return(await this.db.selectFrom("member").innerJoin("member_tags","member_tags.member_id","member.id").innerJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["organization_tags.id","organization_tags.organization_id","organization_tags.name","organization_tags.color","organization_tags.created_at"]).where("member.userId","=",$).where("member.organizationId","=",Z).orderBy("organization_tags.name","asc").execute()).map((Y)=>this.tagFromDbRow(Y))}async getMembersWithTags($){let Z=await this.db.selectFrom("member").leftJoin("member_tags","member_tags.member_id","member.id").leftJoin("organization_tags","organization_tags.id","member_tags.tag_id").select(["member.id as memberId","organization_tags.name as tagName"]).where("member.organizationId","=",$).execute(),Q=new Map;for(let Y of Z){if(!Q.has(Y.memberId))Q.set(Y.memberId,[]);if(Y.tagName)Q.get(Y.memberId).push(Y.tagName)}return Q}tagFromDbRow($){return{id:$.id,organizationId:$.organization_id,name:$.name,color:$.color??null,createdAt:$.created_at}}}var A01=L(()=>{KY()});function pZ$($){if(!nU4.test($))return!1;let Z=Date.parse(`${$}T00:00:00Z`);return!Number.isNaN(Z)&&new Date(Z).toISOString().slice(0,10)===$}function T01($,Z){let Q=mZ$[$.state]-mZ$[Z.state];if(Q!==0)return Q;if($.startDate!==Z.startDate){if($.startDate===null)return 1;if(Z.startDate===null)return-1;let Y=$.startDate<Z.startDate?-1:1;return $.state==="closed"?-Y:Y}return $.name.localeCompare(Z.name)||$.id.localeCompare(Z.id)}function nZ$($,Z){return[...$].filter((Q)=>Q.state==="future"&&Q.id!==Z).sort(T01)[0]?.id??null}var cZ$,dZ$=100,iZ$,nU4,mZ$;var wK0=L(()=>{cZ$=["future","active","closed"],iZ$=["done","archived"],nU4=/^\d{4}-\d{2}-\d{2}$/;mZ$={active:0,future:1,closed:2}});import{sql as tZ$}from"kysely";function TT($){return{id:$.id,name:$.name,state:$.state,startDate:$.start_date,endDate:$.end_date}}class q01{db;constructor($){this.db=$}async listByOrg($){return(await this.db.selectFrom("task_board_sprints").select(AT).where("organization_id","=",$).execute()).map(TT).sort(T01)}async get($,Z){let Q=await this.db.selectFrom("task_board_sprints").select(AT).where("organization_id","=",$).where("id","=",Z).executeTakeFirst();return Q?TT(Q):null}async create($){let Z=await this.db.insertInto("task_board_sprints").values({id:m8("sprint"),organization_id:$.organizationId,name:$.name,start_date:$.startDate,end_date:$.endDate,created_by:$.by}).returning(AT).executeTakeFirstOrThrow();return TT(Z)}async update($,Z,Q){let Y=await this.db.updateTable("task_board_sprints").set({...Q.name!==void 0?{name:Q.name}:{},...Q.startDate!==void 0?{start_date:Q.startDate}:{},...Q.endDate!==void 0?{end_date:Q.endDate}:{},updated_at:new Date().toISOString()}).where("organization_id","=",$).where("id","=",Z).returning(AT).executeTakeFirst();return Y?TT(Y):null}async start($,Z){let Q=await this.db.updateTable("task_board_sprints").set({state:"active",updated_at:new Date().toISOString()}).where("organization_id","=",$).where("id","=",Z).where("state","=","future").returning(AT).executeTakeFirst();return Q?TT(Q):null}async complete($){let{organizationId:Z,id:Q,moveTo:Y,by:X}=$;return this.db.transaction().execute(async(J)=>{let G=await J.updateTable("task_board_sprints").set({state:"closed",updated_at:new Date().toISOString()}).where("organization_id","=",Z).where("id","=",Q).where("state","=","active").returning(AT).executeTakeFirst();if(!G)return null;if(Y!==null){let K=await J.selectFrom("task_board_sprints").select("state").where("organization_id","=",Z).where("id","=",Y).forShare().executeTakeFirst();if(!K||K.state==="closed")throw Error("moveTo is not an open sprint on this board \u2014 pass a planned or "+"running sprint's id, or null for the backlog")}let W=await J.updateTable("task_board_items").set({sprint_id:Y,updated_by:X,updated_at:new Date().toISOString()}).where("organization_id","=",Z).where("sprint_id","=",Q).where("status","not in",[...iZ$]).returning("id").execute();return{sprint:TT(G),movedTo:Y,movedItemIds:W.map((K)=>K.id)}})}async delete($,Z){return this.db.transaction().execute(async(Q)=>{let Y=await Q.selectFrom("task_board_sprints").select(AT).where("organization_id","=",$).where("id","=",Z).forUpdate().executeTakeFirst();if(!Y)return null;let X=await Q.selectFrom("task_board_items").select("id").where("organization_id","=",$).where("sprint_id","=",Z).execute();return await Q.deleteFrom("task_board_sprints").where("organization_id","=",$).where("id","=",Z).execute(),{sprint:TT(Y),movedItemIds:X.map((J)=>J.id)}})}}var AT;var oZ$=L(()=>{wK0();KY();AT=["id","name","state",tZ$`to_char(start_date, 'YYYY-MM-DD')`.as("start_date"),tZ$`to_char(end_date, 'YYYY-MM-DD')`.as("end_date")]});import{z as ZL}from"zod";function rZ$($){let Z=new Set,Q=new Set,Y=[];for(let X of $){if(Z.has(X.id))continue;Z.add(X.id);let J=X.projectIds.filter((G)=>{if(Q.has(G))return!1;return Q.add(G),!0});Y.push({...X,projectIds:J})}return Y}function aZ$($){let Z=new Map;for(let Y of $.pinned)Z.set(Y,"pinned");for(let Y of $.hidden)Z.set(Y,"hidden");for(let Y of $.dismissed)Z.set(Y,"dismissed");let Q=(Y,X)=>[...new Set(X.filter((J)=>Z.get(J)===Y))];return{pinned:Q("pinned",$.pinned),hidden:Q("hidden",$.hidden),dismissed:Q("dismissed",$.dismissed),hiddenFolders:[...new Set($.hiddenFolders)]}}var tU4=60,oU4=100,sU4=2000,S00,rU4,tc,oc,R01,sZ$,eZ$="project-folders.updated";var sc=L(()=>{S00=ZL.array(ZL.string().min(1)).max(sU4),rU4=ZL.object({id:ZL.string().min(1).max(64),name:ZL.string().trim().min(1).max(tU4),projectIds:S00}),tc=ZL.array(rU4).max(oU4),oc=ZL.object({pinned:S00,hidden:S00,dismissed:S00,hiddenFolders:S00}),R01={pinned:[],hidden:[],dismissed:[],hiddenFolders:[]},sZ$=ZL.object({folders:tc,preferences:oc,joinedAt:ZL.string().nullable()})});function $7$($,Z){let Q=typeof $==="string"?JSON.parse($):$;return Z.parse(Q)}class M01{db;constructor($){this.db=$}async getFolders($){let Z=await this.db.selectFrom("org_project_folders").select("folders").where("organization_id","=",$).executeTakeFirst();return Z?$7$(Z.folders,tc):[]}async setFolders($,Z){let Q=rZ$(Z),Y=JSON.stringify(Q),X=new Date().toISOString();return await this.db.insertInto("org_project_folders").values({organization_id:$,folders:Y,updated_at:X}).onConflict((J)=>J.column("organization_id").doUpdateSet({folders:Y,updated_at:X})).execute(),Q}async getPreferences($,Z){let Q=await this.db.selectFrom("user_sidebar_preferences").select("preferences").where("user_id","=",$).where("organization_id","=",Z).executeTakeFirst();return Q?{...R01,...$7$(Q.preferences,oc)}:R01}async setPreferences($,Z,Q){let Y=aZ$(Q),X=JSON.stringify(Y),J=new Date().toISOString();return await this.db.insertInto("user_sidebar_preferences").values({user_id:$,organization_id:Z,preferences:X,updated_at:J}).onConflict((G)=>G.columns(["user_id","organization_id"]).doUpdateSet({preferences:X,updated_at:J})).execute(),Y}async joinedAt($,Z){let Q=await this.db.selectFrom("member").select("createdAt").where("userId","=",$).where("organizationId","=",Z).executeTakeFirst();return Q?new Date(Q.createdAt).toISOString():null}}var Z7$=L(()=>{sc()});class V01{db;constructor($){this.db=$}async listBySite($,Z){return(await this.db.selectFrom("experiments").selectAll().where("organization_id","=",$).where("site","=",Z).orderBy("created_at","desc").execute()).map((Y)=>this.fromRow(Y))}async getByKey($,Z,Q){let Y=await this.db.selectFrom("experiments").selectAll().where("organization_id","=",$).where("site","=",Z).where("key","=",Q).executeTakeFirst();return Y?this.fromRow(Y):null}async create($){let Z=m8("exp"),Q=new Date().toISOString();await this.db.insertInto("experiments").values({id:Z,organization_id:$.organizationId,site:$.site,key:$.key,name:$.name,status:"draft",goals:JSON.stringify($.goals??[]),variants:JSON.stringify($.variants??[]),created_by:$.createdBy,created_at:Q,updated_at:Q}).execute();let Y=await this.getByKey($.organizationId,$.site,$.key);if(!Y)throw Error("failed to create experiment");return Y}async update($,Z,Q,Y){let X=await this.getByKey($,Z,Q);if(!X)return null;let J=new Date().toISOString(),G={updated_at:J};if(Y.name!==void 0)G.name=Y.name;if(Y.goals!==void 0)G.goals=JSON.stringify(Y.goals);if(Y.variants!==void 0)G.variants=JSON.stringify(Y.variants);if(Y.status!==void 0){if(G.status=Y.status,Y.status==="running"&&!X.startedAt)G.started_at=J;if(Y.status==="ended"&&!X.endedAt)G.ended_at=J}return await this.db.updateTable("experiments").set(G).where("organization_id","=",$).where("site","=",Z).where("key","=",Q).execute(),this.getByKey($,Z,Q)}async linkTaskBoardItem($,Z,Q,Y){await this.db.updateTable("experiments").set({task_board_item_id:Y}).where("organization_id","=",$).where("site","=",Z).where("key","=",Q).execute()}async delete($,Z,Q){return((await this.db.deleteFrom("experiments").where("organization_id","=",$).where("site","=",Z).where("key","=",Q).executeTakeFirst()).numDeletedRows??0n)>0n}fromRow($){let Z=(Q)=>new Date(Q).toISOString();return{id:$.id,organizationId:$.organization_id,site:$.site,key:$.key,name:$.name,status:["running","paused","ended"].includes($.status)?$.status:"draft",goals:$.goals??[],variants:$.variants??[],startedAt:$.started_at?Z($.started_at):null,endedAt:$.ended_at?Z($.ended_at):null,taskBoardItemId:$.task_board_item_id,createdBy:$.created_by,createdAt:Z($.created_at),updatedAt:Z($.updated_at)}}}var Q7$=L(()=>{KY()});import{sql as aU4}from"kysely";function I01($){return{organizationId:$.organization_id,status:$.status,stripeCustomerId:$.stripe_customer_id,stripeSubscriptionId:$.stripe_subscription_id,currentPeriodEnd:$.current_period_end,lastStripeEventAt:$.last_stripe_event_at,freeTaskExecutions:$.free_task_executions,monthlyTaskExecutions:$.monthly_task_executions}}class C3{db;constructor($){this.db=$}async getBilling($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("organization_id","=",$).executeTakeFirst();return Z?I01(Z):null}async ensureBilling($){let Z=await this.getBilling($);if(Z)return Z;try{await this.db.insertInto("organization_billing").values({organization_id:$}).onConflict((Q)=>Q.column("organization_id").doNothing()).execute()}catch{return null}return await this.getBilling($)}async getBillingByStripeSubscriptionId($){let Z=await this.db.selectFrom("organization_billing").selectAll().where("stripe_subscription_id","=",$).executeTakeFirst();return Z?I01(Z):null}async listSubscriptionsPastPeriodEnd($,Z){return(await this.db.selectFrom("organization_billing").selectAll().where("stripe_subscription_id","is not",null).where("status","<>","canceled").where("current_period_end","is not",null).where("current_period_end","<",$).orderBy("current_period_end","asc").limit(Z).execute()).map(I01)}async bindSubscription($,Z){return((await this.db.updateTable("organization_billing").set({stripe_subscription_id:Z.stripeSubscriptionId,...Z.stripeCustomerId!==void 0&&{stripe_customer_id:Z.stripeCustomerId},...Z.status!==void 0&&{status:Z.status},...Z.lastStripeEventAt!==void 0&&{last_stripe_event_at:Z.lastStripeEventAt},updated_at:new Date}).where("organization_id","=",$).where((Y)=>Y.or([Y("stripe_subscription_id","is",null),Y("stripe_subscription_id","=",Z.stripeSubscriptionId)])).executeTakeFirst()).numUpdatedRows??0n)>0n}async updateStripeState($,Z){return((await this.db.updateTable("organization_billing").set({...Z.stripeCustomerId!==void 0&&{stripe_customer_id:Z.stripeCustomerId},...Z.stripeSubscriptionId!==void 0&&{stripe_subscription_id:Z.stripeSubscriptionId},...Z.status!==void 0&&{status:Z.status},...Z.currentPeriodEnd!==void 0&&{current_period_end:Z.currentPeriodEnd},...Z.lastStripeEventAt!==void 0&&{last_stripe_event_at:Z.lastStripeEventAt},updated_at:new Date}).where("organization_id","=",$).executeTakeFirst()).numUpdatedRows??0n)>0n}async taskClaim($){let Z=await this.db.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",$).executeTakeFirst();return Z?{runCount:Z.run_count,state:Z.state}:null}static liveClaimCount($,Z,Q){return $.selectFrom("task_quota_claims").select((Y)=>Y.fn.countAll().as("count")).where("organization_id","=",Z).where("period_key","=",Q).where("state","<>","released").executeTakeFirst().then((Y)=>Number(Y?.count??0))}async countTaskClaims($,Z){return await C3.liveClaimCount(this.db,$,Z)}async claimTaskUnderLimit($,Z,Q,Y,X){return await this.db.transaction().execute(async(J)=>{await J.insertInto("organization_billing").values({organization_id:$}).onConflict((K)=>K.column("organization_id").doNothing()).execute(),await J.selectFrom("organization_billing").select("organization_id").where("organization_id","=",$).forUpdate().executeTakeFirstOrThrow();let G=await J.selectFrom("task_quota_claims").select(["run_count","state"]).where("task_board_item_id","=",Z).executeTakeFirst();if(G&&G.run_count>=X)return"runs_exhausted";let W=()=>C3.liveClaimCount(J,$,Q);if(G&&G.state!=="released")return await J.updateTable("task_quota_claims").set({run_count:G.run_count+1}).where("task_board_item_id","=",Z).execute(),"rerun";if(await W()>=Y)return"exhausted";if(G)return await J.updateTable("task_quota_claims").set({state:"held",period_key:Q,run_count:G.run_count+1}).where("task_board_item_id","=",Z).execute(),"claimed";return await J.insertInto("task_quota_claims").values({task_board_item_id:Z,organization_id:$,period_key:Q,state:"held"}).execute(),"claimed"})}async releaseTaskClaim($,Z){return((await this.db.updateTable("task_quota_claims").set({state:"released"}).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").executeTakeFirst()).numUpdatedRows??0n)>0n}async rollbackTaskClaim($,Z,{releaseSlot:Q}){await this.db.updateTable("task_quota_claims").set(()=>({...Q?{state:"released"}:{},run_count:aU4`greatest(run_count - 1, 0)`})).where("organization_id","=",$).where("task_board_item_id","=",Z).where("state","=","held").execute()}}var _00=()=>{};class k01{db;constructor($){this.db=$}async findById($,Z){let Q=await this.db.selectFrom("user").select(["user.id","user.name","user.email","user.image","user.createdAt","user.updatedAt"]).where("user.id","=",$).where((Y)=>Y.exists(Y.selectFrom("member as m1").innerJoin("member as m2","m1.organizationId","m2.organizationId").select("m1.id").where("m1.userId","=",$).where("m2.userId","=",Z))).executeTakeFirst();if(!Q)return null;return{id:Q.id,name:Q.name,email:Q.email,role:"",createdAt:Q.createdAt,updatedAt:Q.updatedAt,image:Q.image??void 0}}async searchOrganizations($){let{userId:Z,term:Q,limit:Y,offset:X=0,organizationId:J}=$,G=`%${Sa0(Q)}%`,W=this.db.selectFrom("organization").where((K)=>K.exists(K.selectFrom("member").select("member.id").whereRef("member.organizationId","=","organization.id").where("member.userId","=",Z))).where((K)=>K.or([K("organization.name","ilike",G),K("organization.slug","ilike",G)]));if(J)W=W.where("organization.id","=",J);return await W.select(["organization.id as id","organization.name as name","organization.slug as slug","organization.logo as logo","organization.metadata as metadata"]).orderBy("organization.name","asc").orderBy("organization.id","asc").limit(Y).offset(X).execute()}}var Y7$=L(()=>{Ne()});function ZN($){let Z=$?.["mcp.studio"];if(Z&&typeof Z==="object"&&!Array.isArray(Z))return Z;let Q=$?.["mcp.mesh"];if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q;return}function X7$(){if(S01)return S01;let $={};for(let Z of EK0){if(Z.id==="basic-usage")continue;$[Z.id]=!0}return S01=$,$}function _01($){let Z=(J)=>{let G=$[J];return Array.isArray(G)?G:[]},Q=Z("*").includes("*")||Z("self").includes("*"),Y=new Set;if(!Q)for(let J of Object.values($)){if(!Array.isArray(J))continue;for(let G of J)Y.add(G)}let X={};for(let J of EK0){if(J.id==="basic-usage")continue;X[J.id]=Q||J.tools.every((G)=>Y.has(G))}return X}function qT(){if(C01)return C01;let $={Organizations:[],Connections:[],"Virtual MCPs":[],Threads:[],Monitoring:[],Users:[],"API Keys":[],Tags:[],Experiments:[],"AI Providers":[],Secrets:[],"File Configs":[],Automations:[],"Object Storage":[],Registry:[],GitHub:[],Git:[],VM:[],Search:[],"Task Board":[],Jira:[],Blog:[],Chat:[]};for(let Z of v00)$[Z.category].push(Z);return C01=$,$}var v00,EK0,PK0,eU4,rc,C01=null,S01=null;var QE=L(()=>{v00=[{name:"ORGANIZATION_CREATE",description:"Create a new organization",category:"Organizations"},{name:"ORGANIZATION_LIST",description:"List organizations",category:"Organizations"},{name:"ORGANIZATION_GET",description:"View organization details",category:"Organizations"},{name:"ORGANIZATION_UPDATE",description:"Update organization",category:"Organizations"},{name:"ORGANIZATION_DELETE",description:"Delete organization",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_SETTINGS_GET",description:"View organization settings",category:"Organizations"},{name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization settings",category:"Organizations"},{name:"ORGANIZATION_BLOCKS_EDITOR_SET",description:"Switch the organization's blocks editor",category:"Organizations"},{name:"BLOG_SITE_GROUND",description:"Read the site's connected systems once, for the generators that follow",category:"Blog"},{name:"BLOG_SITE_CATALOGUE",description:"Turn a grounding pass's raw output into the store's catalogue",category:"Blog"},{name:"BLOG_BRAND_EXTRACT",description:"Infer a brand's identity (name, audience, values, competitors) from a site",category:"Blog"},{name:"BLOG_BRAND_ENRICH",description:"Research a brand on the web and drop the claims its evidence does not support",category:"Blog"},{name:"BLOG_CONTEXT_EXTRACT",description:"Infer a blog's writing context (tone, dos and don'ts) from a site",category:"Blog"},{name:"BLOG_FORMAT_SUGGEST",description:"Name the post formats a blog writes in",category:"Blog"},{name:"BLOG_CAMPAIGN_SUGGEST",description:"Propose campaigns from a seed, grounded in the site's systems",category:"Blog"},{name:"BLOG_POST_DRAFT",description:"Write a blog post from a theme and a format",category:"Blog"},{name:"BLOG_POST_ILLUSTRATE",description:"Draw a drafted post's images, conditioned on the product's own photographs",category:"Blog"},{name:"BLOG_LINK_SUGGEST",description:"Propose internal links from a post to the site's other posts",category:"Blog"},{name:"ORGANIZATION_DOMAIN_LIST",description:"List organization domain claims",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for the organization",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set a domain's join mode",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_VERIFY",description:"Verify a domain via DNS TXT record",category:"Organizations"},{name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove an organization domain claim",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization",category:"Organizations"},{name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a request to join the organization",category:"Organizations"},{name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a request to join the organization",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_MEMBER_ADD",description:"Add members",category:"Organizations"},{name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove members",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_MEMBER_LIST",description:"List members",category:"Organizations"},{name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Update member roles",category:"Organizations"},{name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the org subscription checkout",category:"Organizations",dangerous:!0},{name:"ORGANIZATION_BILLING_PORTAL",description:"Open the Stripe billing portal",category:"Organizations"},{name:"ORGANIZATION_BILLING_PLAN_PRICES",description:"Read each plan's monthly price from Stripe",category:"Organizations"},{name:"ORGANIZATION_TASK_QUOTA_GET",description:"Get the org's auto-task quota usage",category:"Organizations"},{name:"INFRA_BILLING_SITES_LIST",description:"List the legacy deco.cx sites the org owns",category:"Organizations"},{name:"INFRA_BILLING_GET",description:"Get infra usage, plan and invoices for an owned site",category:"Organizations"},{name:"INFRA_BILLING_PORTAL",description:"Open the Stripe billing portal for an owned site",category:"Organizations"},{name:"CUSTOMER_LAKE_QUERY",description:"Run read-only SQL over the organization's data lake",category:"Monitoring"},{name:"ORGANIZATION_HAS_SITE",description:"Whether this organization owns at least one legacy deco.cx site",category:"Organizations"},{name:"COLLECTION_CONNECTIONS_CREATE",description:"Create connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_LIST",description:"List connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_GET",description:"View connection details",category:"Connections"},{name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update connections",category:"Connections"},{name:"COLLECTION_CONNECTIONS_DELETE",description:"Delete connections",category:"Connections",dangerous:!0},{name:"CONNECTION_TEST",description:"Test connections",category:"Connections"},{name:"CONNECTION_TOOLS_SEARCH",description:"Search the tools of your connections",category:"Connections"},{name:"CONNECTION_TOOL_CALL",description:"Call a tool on one of your connections",category:"Connections"},{name:"REPORTS_SETUP",description:"Set up Deco Score",category:"Connections"},{name:"REPORTS_RUN",description:"Run Deco Score",category:"Connections"},{name:"REPORTS_BIND",description:"Bind Deco Score data source",category:"Connections"},{name:"REPORTS_CONNECTION_STATUS",description:"Read Deco Score connection status",category:"Connections"},{name:"REPORTS_SET_REPOSITORY",description:"Set the Deco Score repository",category:"Connections"},{name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_GET",description:"View virtual MCP details",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update virtual MCPs",category:"Virtual MCPs"},{name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Delete virtual MCPs",category:"Virtual MCPs",dangerous:!0},{name:"MONITORING_HEATMAP",description:"View tool-call volume by agent and tool",category:"Monitoring"},{name:"MONITORING_LOG_GET",description:"View monitoring log details",category:"Monitoring"},{name:"MONITORING_LOGS_LIST",description:"List monitoring logs",category:"Monitoring"},{name:"MONITORING_STATS",description:"View monitoring statistics",category:"Monitoring"},{name:"MONITORING_THREAD_USAGE",description:"View per-thread token usage and cost",category:"Monitoring"},{name:"API_KEY_CREATE",description:"Create API key",category:"API Keys"},{name:"API_KEY_LIST",description:"List API keys",category:"API Keys"},{name:"API_KEY_UPDATE",description:"Update API key",category:"API Keys"},{name:"API_KEY_DELETE",description:"Delete API key",category:"API Keys",dangerous:!0},{name:"USER_GET",description:"Get a user by id",category:"Users"},{name:"USER_MODEL_PREFERENCES_GET",description:"Get the calling user's chat tier \u2192 model overrides",category:"Users"},{name:"USER_MODEL_PREFERENCES_UPDATE",description:"Set the calling user's chat tier \u2192 model overrides",category:"Users"},{name:"SIDEBAR_GET",description:"Get the org's project folders and the caller's pins and hides",category:"Virtual MCPs"},{name:"PROJECT_FOLDERS_SET",description:"Replace the organization's project folders",category:"Virtual MCPs"},{name:"SIDEBAR_PREFERENCES_SET",description:"Set the calling member's pinned and hidden projects",category:"Users"},{name:"COLLECTION_THREADS_CREATE",description:"Create threads",category:"Threads"},{name:"COLLECTION_THREADS_LIST",description:"List threads",category:"Threads"},{name:"COLLECTION_THREADS_GET",description:"View thread details",category:"Threads"},{name:"COLLECTION_THREADS_UPDATE",description:"Update threads",category:"Threads"},{name:"COLLECTION_THREADS_DELETE",description:"Delete threads",category:"Threads",dangerous:!0},{name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List thread messages",category:"Threads"},{name:"TAGS_LIST",description:"List organization tags",category:"Tags"},{name:"TAGS_CREATE",description:"Create organization tag",category:"Tags"},{name:"TAGS_DELETE",description:"Delete organization tag",category:"Tags",dangerous:!0},{name:"EXPERIMENT_LIST",description:"List a site's A/B experiments",category:"Experiments"},{name:"EXPERIMENT_GET",description:"Get one A/B experiment",category:"Experiments"},{name:"EXPERIMENT_CREATE",description:"Create an A/B experiment",category:"Experiments"},{name:"EXPERIMENT_SUGGEST",description:"Suggest an A/B experiment from a plain-language prompt",category:"Experiments"},{name:"EXPERIMENT_IMPLEMENT",description:"Delegate an experiment's frontend implementation to the Super Agent",category:"Experiments"},{name:"EXPERIMENT_PREVIEW_SYNC_LOCAL",description:"[local dev only] Preview a draft experiment on a local site",category:"Experiments"},{name:"EXPERIMENT_IMPLEMENT_LOCAL",description:"[local dev only] Write an experiment's hook + gate directly into a local site's source",category:"Experiments"},{name:"EXPERIMENT_UPDATE",description:"Update an A/B experiment",category:"Experiments"},{name:"EXPERIMENT_DELETE",description:"Delete an A/B experiment",category:"Experiments",dangerous:!0},{name:"EXPERIMENT_RESULTS",description:"A/B results for one experiment",category:"Experiments"},{name:"MEMBER_TAGS_GET",description:"Get member tags",category:"Tags"},{name:"MEMBER_TAGS_SET",description:"Set member tags",category:"Tags"},{name:"AUTOMATION_CREATE",description:"Create automation",category:"Automations"},{name:"AUTOMATION_GET",description:"View automation details",category:"Automations"},{name:"AUTOMATION_LIST",description:"List automations",category:"Automations"},{name:"AUTOMATION_UPDATE",description:"Update automation",category:"Automations"},{name:"AUTOMATION_DELETE",description:"Delete automation",category:"Automations",dangerous:!0},{name:"AUTOMATION_TRIGGER_ADD",description:"Add trigger to automation",category:"Automations"},{name:"AUTOMATION_TRIGGER_REMOVE",description:"Remove trigger from automation",category:"Automations"},{name:"AUTOMATION_TRIGGER_ROTATE_TOKEN",description:"Rotate the secret token for a webhook automation trigger",category:"Automations"},{name:"AUTOMATION_RUN",description:"Manually trigger an automation run",category:"Automations"},{name:"AUTOMATION_RUN_STATS",description:"View aggregated run counts and token/cost for an automation",category:"Automations"},{name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update virtual MCP pinned sidebar views",category:"Virtual MCPs"},{name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info for one or more virtual MCPs",category:"Virtual MCPs"},{name:"PROJECT_FOLDER_ENSURE",description:"Give a project's folder its shape, once",category:"Virtual MCPs"},{name:"AI_PROVIDERS_LIST",description:"List available AI providers",category:"AI Providers"},{name:"AI_PROVIDERS_LIST_MODELS",description:"List AI provider models",category:"AI Providers"},{name:"AI_PROVIDERS_ACTIVE",description:"List active AI providers",category:"AI Providers"},{name:"AI_PROVIDER_KEY_CREATE",description:"Store AI provider API key",category:"AI Providers"},{name:"AI_PROVIDER_KEY_LIST",description:"List AI provider API keys",category:"AI Providers"},{name:"AI_PROVIDER_KEY_DELETE",description:"Delete AI provider API key",category:"AI Providers",dangerous:!0},{name:"AI_PROVIDER_KEY_UPDATE",description:"Update AI provider API key label or credential",category:"AI Providers"},{name:"AI_PROVIDER_KEY_PREVIEW",description:"Get masked preview of AI provider API key",category:"AI Providers"},{name:"AI_PROVIDER_OAUTH_URL",description:"Get OAuth URL for provider",category:"AI Providers"},{name:"AI_PROVIDER_OAUTH_EXCHANGE",description:"Exchange OAuth code for API key",category:"AI Providers"},{name:"AI_PROVIDER_PROVISION_KEY",description:"Auto-provision API key for a provider",category:"AI Providers"},{name:"AI_PROVIDER_TOPUP_URL",description:"Get checkout URL to top up provider credits",category:"AI Providers"},{name:"CODEX_SUBSCRIPTION_CONNECT",description:"Link your ChatGPT subscription for Codex",category:"AI Providers"},{name:"SUBSCRIPTION_USAGE_GET",description:"Read your personal subscription usage and reset times",category:"AI Providers"},{name:"CODEX_SUBSCRIPTION_STATUS",description:"Whether your ChatGPT subscription is linked for Codex",category:"AI Providers"},{name:"CODEX_SUBSCRIPTION_DISCONNECT",description:"Unlink your ChatGPT subscription for Codex",category:"AI Providers"},{name:"CODEX_SUBSCRIPTION_SYNC",description:"Save credentials refreshed by your Codex runtime",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_CONNECT",description:"Link your own Claude subscription with a setup token",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_STATUS",description:"Whether your Claude subscription is linked, and since when",category:"AI Providers"},{name:"CLAUDE_SUBSCRIPTION_DISCONNECT",description:"Unlink your Claude subscription",category:"AI Providers"},{name:"GITHUB_COPILOT_CONNECT",description:"Link your own GitHub Copilot plan with a GitHub token",category:"AI Providers"},{name:"GITHUB_COPILOT_STATUS",description:"Whether your GitHub Copilot plan is linked, and since when",category:"AI Providers"},{name:"GITHUB_COPILOT_DISCONNECT",description:"Unlink your GitHub Copilot plan",category:"AI Providers"},{name:"GITHUB_COPILOT_SHARE",description:"Share your GitHub Copilot plan with the organization",category:"AI Providers"},{name:"AI_PROVIDER_CREDITS",description:"Get current credit balance for a provider",category:"AI Providers"},{name:"AI_PLAN_ENTITLEMENTS",description:"Get the org's plan, feature flags and AI usage bar",category:"AI Providers"},{name:"AI_PLAN_LIST",description:"List the plans an organization can move to",category:"AI Providers"},{name:"AI_PLAN_SET",description:"Change the organization's plan",category:"AI Providers"},{name:"AI_PLAN_INVOICE_UPGRADE",description:"Move the organization to a paid plan billed on its invoice",category:"AI Providers"},{name:"SECRET_CREATE",description:"Create a secret in the credential vault",category:"Secrets"},{name:"SECRET_LIST",description:"List secrets visible to the caller (no values returned)",category:"Secrets"},{name:"FILE_CONFIG_CREATE",description:"Create an S3-compatible bucket configuration for the org",category:"File Configs"},{name:"FILE_CONFIG_LIST",description:"List S3 bucket configurations for the org (no creds returned)",category:"File Configs"},{name:"ORG_FS_PUBLIC_SETS_SYNC",description:"Re-sync the shared public skill-set volumes from their GitHub sources",category:"File Configs"},{name:"ORG_REPO_SYNC_CREATE",description:"Keep a GitHub repository mirrored into a new org-fs volume",category:"File Configs"},{name:"ORG_REPO_SYNC_LIST",description:"List the org's synced repositories and their sync status",category:"File Configs"},{name:"ORG_REPO_SYNC_UPDATE",description:"Update a synced repository's ref, paths, or enabled flag",category:"File Configs"},{name:"ORG_REPO_SYNC_DELETE",description:"Stop syncing a repository (already-synced files are kept)",category:"File Configs"},{name:"ORG_REPO_SYNC_RUN",description:"Sync a repository into its volume right now",category:"File Configs"},{name:"JIRA_INTEGRATION_GET",description:"Get the org's Jira integration config",category:"Jira"},{name:"JIRA_INTEGRATION_UPSERT",description:"Connect or update the org's Jira integration",category:"Jira"},{name:"JIRA_INTEGRATION_DELETE",description:"Disconnect Jira (already-synced cards are kept)",category:"Jira"},{name:"JIRA_BOARDS_LIST",description:"List Jira boards visible to the connected credentials",category:"Jira"},{name:"JIRA_BOARD_COLUMNS_LIST",description:"List a Jira board's columns and statuses for the mapping",category:"Jira"},{name:"JIRA_AUTOMATION_LIST",description:"List the automations Jira status changes fire",category:"Jira"},{name:"JIRA_AUTOMATION_UPSERT",description:"Fire an automation on issues entering a Jira status",category:"Jira"},{name:"JIRA_RUN_START",description:"Fire an automation on Jira issues now",category:"Jira"},{name:"JIRA_ISSUE_GET",description:"Read a Jira issue on the board from a run",category:"Jira"},{name:"JIRA_COMMENT_ADD",description:"Comment on a Jira issue on the board from a run",category:"Jira"},{name:"JIRA_ISSUE_TRANSITION",description:"Move a Jira issue on the board to another status",category:"Jira"},{name:"JIRA_ATTACHMENT_DOWNLOAD",description:"Get a short-lived download URL for an attachment of a Jira issue",category:"Jira"},{name:"JIRA_REMOTE_LINK_ADD",description:"Link a pull request or deploy preview on a Jira issue",category:"Jira"},{name:"JIRA_ISSUE_CREATE",description:"Create a Jira issue on the board from a run",category:"Jira"},{name:"JIRA_ISSUE_SEARCH",description:"Search the Jira board's issues with JQL from a run",category:"Jira"},{name:"FILE_CONFIG_UPDATE",description:"Update an S3 bucket configuration, optionally rotating credentials",category:"File Configs"},{name:"FILE_CONFIG_DELETE",description:"Delete an S3 bucket configuration",category:"File Configs"},{name:"FILE_OBJECTS_LIST",description:"List existing objects in a configured bucket",category:"File Configs"},{name:"FILE_OBJECT_DELETE",description:"Delete an object from a configured bucket",category:"File Configs"},{name:"LIST_OBJECTS",description:"List objects in storage",category:"Object Storage"},{name:"GET_OBJECT_METADATA",description:"Get object metadata",category:"Object Storage"},{name:"GET_PRESIGNED_URL",description:"Generate download URL",category:"Object Storage"},{name:"PUT_PRESIGNED_URL",description:"Generate upload URL",category:"Object Storage"},{name:"DELETE_OBJECT",description:"Delete object",category:"Object Storage",dangerous:!0},{name:"DELETE_OBJECTS",description:"Delete multiple objects",category:"Object Storage",dangerous:!0},{name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry apps",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_GET",description:"Get registry app details",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"List registry app versions",category:"Registry"},{name:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get registry app filters",category:"Registry"},{name:"REGISTRY_ITEM_LIST",description:"List Deco registry items",category:"Registry"},{name:"REGISTRY_ITEM_SEARCH",description:"Search registry items",category:"Registry"},{name:"REGISTRY_ITEM_GET",description:"Get registry item details",category:"Registry"},{name:"REGISTRY_ITEM_VERSIONS",description:"List registry item versions",category:"Registry"},{name:"REGISTRY_ITEM_FILTERS",description:"Get registry item filters",category:"Registry"},{name:"SANDBOX_START",description:"Start a sandbox VM with dev server preview",category:"VM"},{name:"SANDBOX_DELETE",description:"Stop and delete a sandbox VM",category:"VM"},{name:"GITHUB_LIST_USER_ORGS",description:"List GitHub user's personal account and organizations",category:"GitHub"},{name:"GIT_PROVIDER_CAPABILITIES",description:"Which git providers this deployment can connect, with their connect URLs",category:"Git"},{name:"GIT_ACCOUNT_LIST",description:"List the git provider accounts connected to the organization",category:"Git"},{name:"GIT_ACCOUNT_CONNECT_TOKEN",description:"Connect a git provider account with an access token",category:"Git"},{name:"GIT_ACCOUNT_DELETE",description:"Disconnect a git provider account",category:"Git"},{name:"REPOSITORY_LIST",description:"List the repositories linked to the organization",category:"Git"},{name:"REPOSITORY_SEARCH",description:"Search the repositories an account can reach on its provider",category:"Git"},{name:"REPOSITORY_LINK",description:"Link a repository to the organization",category:"Git"},{name:"REPOSITORY_CREATE_FROM_TEMPLATE",description:"Create a site repository from a template and link it",category:"Git"},{name:"REPOSITORY_SEARCH_BRANCHES",description:"Search a repository's branches by name substring, on either provider",category:"Git"},{name:"CHANGE_REQUEST_STATE",description:"Read a branch's change request with its CI runs, review state and comments",category:"Git"},{name:"CHANGE_REQUEST_LAST_MERGED",description:"Read the most recently merged change request into a base branch",category:"Git"},{name:"CHANGE_REQUEST_LIST_OPEN",description:"List a repository's open change requests",category:"Git"},{name:"CHANGE_REQUEST_CHECK_LOG",description:"Read one CI run's report for a change request",category:"Git"},{name:"CHANGE_REQUEST_OPEN",description:"Propose a branch onto another, reusing the branch's existing change request",category:"Git"},{name:"CHANGE_REQUEST_MERGE",description:"Land a change request, reporting why it could not merge",category:"Git"},{name:"REPOSITORY_UPDATE",description:"Change a linked repository's settings, such as its sandbox image",category:"Git"},{name:"REPOSITORY_DELETE",description:"Unlink a repository from the organization",category:"Git"},{name:"GLOBAL_SEARCH",description:"Search across organization resources (currently threads). Returns a typed union of matches.",category:"Search"},{name:"TASK_BOARD_ITEM_CREATE",description:"Create task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_LIST",description:"List task board items",category:"Task Board"},{name:"TASK_BOARD_ITEM_UPDATE",description:"Update task board item",category:"Task Board"},{name:"TASK_BOARD_ITEM_DELETE",description:"Delete task board item",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_PROMPT_LIST",description:"List the instructions appended to the system prompt of the board's runs",category:"Task Board"},{name:"TASK_BOARD_PROMPT_UPSERT",description:"Set the instructions appended to the system prompt of the board's runs",category:"Task Board"},{name:"TASK_BOARD_PROMPT_DELETE",description:"Clear a board system prompt",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_ITEM_PRS_GET",description:"Get a task board item's linked pull requests with live state",category:"Task Board"},{name:"TASK_BOARD_PREVIEW_PROBE",description:"Check whether a pull request's deploy preview URL is currently reachable",category:"Task Board"},{name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task with the Super Agent, failing any run still holding it open",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_RUN_REVIEWER",description:"Run the Reviewer on a task even when the organization has automated review turned off",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_RESOLVE_CONFLICT",description:"Hand a task's conflicting pull request back to the Super Agent to resolve the merge conflict",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision (approve or request changes) for a task under review",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Merge a reviewed task's pull request and move the task to Done",category:"Task Board",dangerous:!0},{name:"NOTIFICATION_LIST",description:"List your unread notifications in this organization",category:"Task Board"},{name:"NOTIFICATION_MARK_READ",description:"Mark your notifications read",category:"Task Board"},{name:"NOTIFICATION_SUBSCRIPTION_SET",description:"Follow or unfollow a task board item",category:"Task Board"},{name:"NOTIFICATION_SUBSCRIPTION_LIST",description:"List the users following a task board item",category:"Task Board"},{name:"TASK_BOARD_ACTIVITY_LIST",description:"List a task board item's change history",category:"Task Board"},{name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comment threads",category:"Task Board"},{name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment or a reply on a task board item",category:"Task Board"},{name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit a comment, or resolve/unresolve a comment thread",category:"Task Board"},{name:"TASK_BOARD_COMMENT_DELETE",description:"Delete a comment (a thread root takes its replies)",category:"Task Board"},{name:"TASK_BOARD_DISMISSED_LIST",description:"List Deco Score findings dismissed by deleting their task board cards",category:"Task Board"},{name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss Deco Score findings so the next Deco Score import pushes them again",category:"Task Board"},{name:"TASK_BOARD_SPRINT_LIST",description:"List the board's sprints",category:"Task Board"},{name:"TASK_BOARD_SPRINT_CREATE",description:"Plan a new sprint",category:"Task Board"},{name:"TASK_BOARD_SPRINT_UPDATE",description:"Rename a sprint or change its dates",category:"Task Board"},{name:"TASK_BOARD_SPRINT_START",description:"Start a planned sprint",category:"Task Board"},{name:"TASK_BOARD_SPRINT_COMPLETE",description:"Complete a running sprint and move its unfinished cards on",category:"Task Board"},{name:"TASK_BOARD_SPRINT_DELETE",description:"Delete a sprint, sending its cards to the backlog",category:"Task Board",dangerous:!0},{name:"TASK_BOARD_ADMIN_ORG_LIST",description:"Whether the caller may read every org's task board, and the orgs that have board items",category:"Task Board"},{name:"TASK_BOARD_DELIVERY",description:"Task board throughput and flow \u2014 completions, PR rate, lead vs cycle time, dwell by lane",category:"Task Board"},{name:"TASK_BOARD_OPERATION",description:"How autonomously the agent delivers \u2014 run to production funnel, no-human rate, failed-QA rate, and where people stepped in",category:"Task Board"},{name:"TASK_BOARD_OPERATION_TASKS",description:"The cards behind one task board operation figure",category:"Task Board"},{name:"TASK_BOARD_REWORK",description:"Why tasks come back \u2014 failed-QA and needed-a-person rates by type, priority, tag, sprint and author",category:"Task Board"},{name:"TASK_BOARD_SPRINTS",description:"Sprint velocity \u2014 committed, completed, and completed with no human",category:"Task Board"},{name:"TASK_BOARD_STUCK",description:"Task board work that is stuck right now, and WIP by age",category:"Task Board"},{name:"TASK_BOARD_COST",description:"Task board spend \u2014 total, per task, per shipped PR, and the coverage % behind those figures",category:"Task Board"},{name:"TASK_BOARD_QUALITY",description:"Task board quality \u2014 first-pass yield, rework, autonomy, abandonment, retry burn",category:"Task Board"},{name:"TASK_BOARD_ERRORS",description:"Task board run failures \u2014 counts, kinds, live error feed, error signatures, superseded runs",category:"Task Board"},{name:"TASK_BOARD_TENANTS",description:"Per-tenant task board scorecard and queue wait",category:"Task Board"},{name:"THREAD_ANALYTICS_ORG_LIST",description:"Whether the caller may read every org's threads, and the orgs that have any",category:"Threads"},{name:"THREAD_ANALYTICS_LIVE",description:"Recently active threads across orgs with status, owner and spend (admin orgs)",category:"Threads"},{name:"THREAD_ANALYTICS_USAGE",description:"Token and USD usage by org, user, agent and kind; top spenders (admin orgs)",category:"Threads"},{name:"THREAD_ANALYTICS_ERRORS",description:"Failed threads, error feed and error signatures across orgs (admin orgs)",category:"Threads"},{name:"TASK_ADD_REPO",description:"Clone an organization repository into the sandbox of the task run calling it",category:"Task Board"},{name:"generate_image",description:"Generate an image with the organization's image model",category:"Chat"},{name:"web_search",description:"Search the web and synthesize a short cited answer",category:"Chat"},{name:"deep_research",description:"Run multi-source web research into a cited report",category:"Chat"},{name:"suggest_task",description:"Offer the user a task card for the board",category:"Chat"},{name:"preview_navigate",description:"Navigate the user's live preview to a page",category:"Chat"},{name:"update_interests",description:"Record the user's durable goals for the current agent",category:"Chat"}],EK0=[{id:"basic-usage",label:"Basic Usage",description:"Tools all org members can access by default",section:"Basic Usage",tools:["CODEX_SUBSCRIPTION_CONNECT","CODEX_SUBSCRIPTION_STATUS","SUBSCRIPTION_USAGE_GET","CODEX_SUBSCRIPTION_DISCONNECT","CODEX_SUBSCRIPTION_SYNC","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","CONNECTION_TEST","CONNECTION_TOOLS_SEARCH","CONNECTION_TOOL_CALL","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","VIRTUAL_MCP_LAST_USED_LIST","SIDEBAR_GET","SIDEBAR_PREFERENCES_SET","PROJECT_FOLDER_ENSURE","AUTOMATION_GET","AUTOMATION_LIST","AUTOMATION_RUN_STATS","AI_PROVIDERS_LIST","AI_PROVIDERS_LIST_MODELS","AI_PROVIDERS_ACTIVE","AI_PROVIDER_KEY_LIST","AI_PROVIDER_CREDITS","AI_PLAN_ENTITLEMENTS","AI_PLAN_LIST","ORGANIZATION_BILLING_PLAN_PRICES","AI_PROVIDER_TOPUP_URL","LIST_OBJECTS","GET_OBJECT_METADATA","GET_PRESIGNED_URL","PUT_PRESIGNED_URL","FILE_OBJECTS_LIST","ORG_REPO_SYNC_LIST","SANDBOX_START","SANDBOX_DELETE","REPOSITORY_SEARCH_BRANCHES","GIT_PROVIDER_CAPABILITIES","GIT_ACCOUNT_LIST","REPOSITORY_LIST","REPOSITORY_SEARCH","CHANGE_REQUEST_STATE","CHANGE_REQUEST_LAST_MERGED","CHANGE_REQUEST_LIST_OPEN","CHANGE_REQUEST_CHECK_LOG","GLOBAL_SEARCH","ORGANIZATION_SETTINGS_GET","USER_GET","ORGANIZATION_HAS_SITE","ORGANIZATION_BLOCKS_EDITOR_SET","COLLECTION_THREADS_CREATE","COLLECTION_THREADS_LIST","COLLECTION_THREADS_GET","COLLECTION_THREADS_UPDATE","COLLECTION_THREADS_DELETE","COLLECTION_THREAD_MESSAGES_LIST","TASK_BOARD_ITEM_CREATE","TASK_BOARD_ITEM_LIST","TASK_BOARD_ITEM_UPDATE","TASK_BOARD_ITEM_DELETE","TASK_BOARD_PROMPT_LIST","TASK_BOARD_PROMPT_UPSERT","TASK_BOARD_PROMPT_DELETE","TASK_BOARD_ITEM_PRS_GET","TASK_BOARD_PREVIEW_PROBE","TASK_BOARD_ITEM_RERUN","TASK_BOARD_RUN_REVIEWER","TASK_BOARD_REVIEW_DECISION","TASK_BOARD_PROMOTE_TO_PRODUCTION","TASK_BOARD_ACTIVITY_LIST","TASK_BOARD_COMMENT_LIST","TASK_BOARD_COMMENT_CREATE","TASK_BOARD_COMMENT_UPDATE","TASK_BOARD_COMMENT_DELETE","TASK_BOARD_DISMISSED_LIST","TASK_BOARD_DISMISSED_RESTORE","TASK_BOARD_SPRINT_LIST","TASK_BOARD_SPRINT_CREATE","TASK_BOARD_SPRINT_UPDATE","TASK_BOARD_SPRINT_START","TASK_BOARD_SPRINT_COMPLETE","TASK_BOARD_SPRINT_DELETE","TASK_BOARD_ADMIN_ORG_LIST","TASK_BOARD_DELIVERY","TASK_BOARD_OPERATION","TASK_BOARD_OPERATION_TASKS","TASK_BOARD_REWORK","TASK_BOARD_SPRINTS","TASK_BOARD_STUCK","TASK_BOARD_COST","TASK_BOARD_QUALITY","TASK_BOARD_ERRORS","TASK_BOARD_TENANTS","THREAD_ANALYTICS_ORG_LIST","THREAD_ANALYTICS_LIVE","THREAD_ANALYTICS_USAGE","THREAD_ANALYTICS_ERRORS","NOTIFICATION_LIST","NOTIFICATION_MARK_READ","NOTIFICATION_SUBSCRIPTION_SET","NOTIFICATION_SUBSCRIPTION_LIST","generate_image","web_search","deep_research","suggest_task","preview_navigate","update_interests"]},{id:"org:manage",label:"Manage organization",description:"Edit organization settings and domain configuration",section:"Organization",tools:["ORGANIZATION_GET","ORGANIZATION_LIST","ORGANIZATION_UPDATE","ORGANIZATION_SETTINGS_GET","ORGANIZATION_SETTINGS_UPDATE","ORGANIZATION_DOMAIN_LIST","ORGANIZATION_DOMAIN_ADD","ORGANIZATION_DOMAIN_UPDATE","ORGANIZATION_DOMAIN_VERIFY","ORGANIZATION_DOMAIN_REMOVE","JIRA_INTEGRATION_GET","JIRA_INTEGRATION_UPSERT","JIRA_INTEGRATION_DELETE","JIRA_BOARDS_LIST","JIRA_BOARD_COLUMNS_LIST","JIRA_AUTOMATION_LIST","JIRA_AUTOMATION_UPSERT","JIRA_RUN_START"]},{id:"members:manage",label:"Manage members",description:"Invite members, remove them, and change their roles",section:"Organization",tools:["ORGANIZATION_MEMBER_LIST","ORGANIZATION_MEMBER_ADD","ORGANIZATION_MEMBER_REMOVE","ORGANIZATION_MEMBER_UPDATE_ROLE","ORGANIZATION_BILLING_CHECKOUT_START","ORGANIZATION_BILLING_PORTAL","ORGANIZATION_TASK_QUOTA_GET","INFRA_BILLING_SITES_LIST","INFRA_BILLING_GET","INFRA_BILLING_PORTAL","ORGANIZATION_JOIN_REQUEST_LIST","ORGANIZATION_JOIN_REQUEST_APPROVE","ORGANIZATION_JOIN_REQUEST_DENY"],dangerous:!0},{id:"connections:manage",label:"Manage connections",description:"Create, update, and delete connections",section:"Connections & Agents",tools:["COLLECTION_CONNECTIONS_CREATE","COLLECTION_CONNECTIONS_UPDATE","COLLECTION_CONNECTIONS_DELETE","REPORTS_SETUP","REPORTS_RUN","REPORTS_BIND","REPORTS_CONNECTION_STATUS","REPORTS_SET_REPOSITORY"],dangerous:!0},{id:"agents:manage",label:"Manage agents",description:"Create, configure, and delete agents",section:"Connections & Agents",tools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_VIRTUAL_MCP_UPDATE","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_PINNED_VIEWS_UPDATE","PROJECT_FOLDERS_SET"],dangerous:!0},{id:"automations:manage",label:"Manage automations",description:"Create, update, run, and delete automations",section:"Automations",tools:["AUTOMATION_CREATE","AUTOMATION_UPDATE","AUTOMATION_DELETE","AUTOMATION_TRIGGER_ADD","AUTOMATION_TRIGGER_REMOVE","AUTOMATION_TRIGGER_ROTATE_TOKEN","AUTOMATION_RUN"],dangerous:!0},{id:"monitoring:view",label:"View monitoring",description:"Access logs and usage statistics",section:"Monitoring",tools:["MONITORING_HEATMAP","MONITORING_LOG_GET","MONITORING_LOGS_LIST","MONITORING_STATS","MONITORING_THREAD_USAGE"]},{id:"secrets:manage",label:"Manage secrets",description:"Create and list secrets stored in the credential vault",section:"Organization",tools:["SECRET_CREATE","SECRET_LIST"]},{id:"file-configs:manage",label:"Manage file configs",description:"Create, list, update and delete S3 bucket configurations and synced GitHub repositories",section:"Organization",tools:["FILE_CONFIG_CREATE","FILE_CONFIG_LIST","FILE_CONFIG_UPDATE","FILE_CONFIG_DELETE","FILE_OBJECTS_LIST","FILE_OBJECT_DELETE","ORG_REPO_SYNC_CREATE","ORG_REPO_SYNC_LIST","ORG_REPO_SYNC_UPDATE","ORG_REPO_SYNC_DELETE","ORG_REPO_SYNC_RUN"]},{id:"ai-providers:manage",label:"Manage AI providers",description:"Add or remove API keys and provision provider credentials",section:"AI Providers",tools:["AI_PROVIDER_KEY_CREATE","AI_PROVIDER_KEY_LIST","AI_PROVIDER_KEY_DELETE","AI_PROVIDER_KEY_UPDATE","AI_PROVIDER_KEY_PREVIEW","AI_PROVIDER_OAUTH_URL","AI_PROVIDER_OAUTH_EXCHANGE","AI_PROVIDER_PROVISION_KEY","AI_PROVIDER_TOPUP_URL","AI_PROVIDER_CREDITS","AI_PLAN_ENTITLEMENTS","AI_PLAN_LIST","AI_PLAN_SET","AI_PLAN_INVOICE_UPGRADE","CLAUDE_SUBSCRIPTION_CONNECT","CLAUDE_SUBSCRIPTION_STATUS","CLAUDE_SUBSCRIPTION_DISCONNECT","GITHUB_COPILOT_CONNECT","GITHUB_COPILOT_STATUS","GITHUB_COPILOT_DISCONNECT","GITHUB_COPILOT_SHARE"]},{id:"tags:manage",label:"Manage tags",description:"Create, assign, and delete organization tags",section:"Organization",tools:["TAGS_LIST","TAGS_CREATE","TAGS_DELETE","MEMBER_TAGS_GET","MEMBER_TAGS_SET"]},{id:"experiments:manage",label:"Manage experiments",description:"Create, update, and delete A/B experiments, and view results",section:"Experiments",tools:["EXPERIMENT_LIST","EXPERIMENT_GET","EXPERIMENT_CREATE","EXPERIMENT_SUGGEST","EXPERIMENT_IMPLEMENT","EXPERIMENT_IMPLEMENT_LOCAL","EXPERIMENT_PREVIEW_SYNC_LOCAL","EXPERIMENT_UPDATE","EXPERIMENT_DELETE","EXPERIMENT_RESULTS"],dangerous:!0},{id:"registry:manage",label:"Browse registry",description:"Browse the Deco MCP catalog",section:"Store & Registry",tools:["COLLECTION_REGISTRY_APP_LIST","COLLECTION_REGISTRY_APP_GET","COLLECTION_REGISTRY_APP_VERSIONS","COLLECTION_REGISTRY_APP_FILTERS","REGISTRY_ITEM_LIST","REGISTRY_ITEM_SEARCH","REGISTRY_ITEM_GET","REGISTRY_ITEM_VERSIONS","REGISTRY_ITEM_FILTERS"]},{id:"api-keys:manage",label:"Manage API keys",description:"Create, update, and revoke API keys",section:"Developer",tools:["API_KEY_CREATE","API_KEY_LIST","API_KEY_UPDATE","API_KEY_DELETE"]},{id:"storage:delete",label:"Delete from storage",description:"Permanently delete files from object storage",section:"Developer",tools:["DELETE_OBJECT","DELETE_OBJECTS"],dangerous:!0},{id:"lake:read",label:"Query the data lake",description:"Run read-only SQL over the organization's own data lake (orders from connected stores)",section:"Developer",tools:["CUSTOMER_LAKE_QUERY"]}],PK0=new Set([...EK0.find(($)=>$.id==="basic-usage")?.tools??[],"ORG_FS_READ","ORG_FS_WRITE"]),eU4=["agents:manage","connections:manage"],rc=new Set(EK0.filter(($)=>eU4.includes($.id)).flatMap(($)=>$.tools))});function CZ($){if(!$)return!1;return $.split(",").some((Q)=>b00.includes(Q))}function YE($){return($??"").split(",").map((Z)=>Z.trim()).filter(Boolean)}function zK0($,Z){let Q=Array.isArray(Z)?Z:[Z];if(Q.length===0)return!1;let Y=$?$.split(","):[];if(Y.includes("owner"))return!0;if(Y.includes("admin"))return Q.every((X)=>X!=="owner");return!1}var RT,b00;var XX=L(()=>{RT=["owner","admin","user"],b00=["owner","admin"]});class MT{userId;toolName;boundAuth;role;connectionId;getToolMeta;organizationId;trustPublicPrefix;_granted=!1;constructor($,Z,Q,Y,X="self",J,G,W=!0){this.userId=$;this.toolName=Z;this.boundAuth=Q;this.role=Y;this.connectionId=X;this.getToolMeta=J;this.organizationId=G;this.trustPublicPrefix=W}setToolName($){this.toolName=$}setOrganizationId($){this.organizationId=$}getOrganizationId(){return this.organizationId}setRole($){this.role=$}getRole(){return this.role}grant(){this._granted=!0}async check(...$){if(this._granted)return;if(this.trustPublicPrefix&&(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_"))){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new XE("Authentication required. Please provide a valid OAuth token or API key.")}let Z=$.length>0?$:this.toolName?[this.toolName]:[];if(Z.length===0)throw new m6("No resources specified for access check");for(let Q of Z)if(await this.checkResource(Q)){this.grant();return}throw new m6(`Access denied to: ${Z.join(", ")}`)}async checkResource($){if(!this.userId&&!this.boundAuth)return!1;return this.boundAuth?.isApiKeyPrincipal?this.checkApiKeyAccess($):this.checkMemberAccess($)}async checkApiKeyAccess($){if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]})}async checkMemberAccess($){if(this.userId&&this.role&&PK0.has($))return!0;if(CZ(this.role))return!0;if(!this.boundAuth)return!1;return this.boundAuth.hasPermission({[this.connectionId]:[$]},{organizationId:this.organizationId,role:this.role})}async isToolPublic(){if(this.trustPublicPrefix&&(this.toolName?.startsWith("STUDIO_PUBLIC_")||this.toolName?.startsWith("MESH_PUBLIC_")))return!0;if(!this.getToolMeta)return!1;try{let $=await this.getToolMeta();if(!$)return!1;let Q=ZN($)?.public_tool;return Q===!0||Q==="true"}catch{return!1}}granted(){return this._granted}}var XE,m6;var JX=L(()=>{QE();XX();XE=class XE extends Error{constructor($){super($);this.name="UnauthorizedError"}};m6=class m6 extends Error{constructor($){super($);this.name="ForbiddenError"}}});async function J7$($,Z){let{adapter:Q}=await $.$context;return(await Q.findMany({model:"member",where:[{field:"userId",value:Z}],join:{organization:!0}})).map((X)=>X.organization)}async function G7$($,Z,Q){let{adapter:Y}=await $.$context;if(!await Y.findOne({model:"member",where:[{field:"userId",value:Z},{field:"organizationId",value:Q}]}))throw new m6("You are not a member of this organization");let J=await Y.findOne({model:"organization",where:[{field:"id",value:Q}],join:{invitation:!0,member:!0}});if(!J)return null;let{invitation:G,member:W,...K}=J,H=W.length>0?await Y.findMany({model:"user",where:[{field:"id",value:W.map((N)=>N.userId),operator:"in"}],limit:W.length}):[],F=new Map(H.map((N)=>[N.id,N])),U=W.flatMap((N)=>{let B=F.get(N.userId);return B?[{...N,user:{id:B.id,name:B.name,email:B.email,image:B.image}}]:[]});return{...K,invitations:G,members:U}}var W7$=L(()=>{JX()});function K7$($){let Z={};for(let Q of Object.keys($))Z[Q]=["*"];return Z}function x00($){let Z=$;if(typeof $==="string")try{Z=JSON.parse($)}catch{return{}}return Z&&typeof Z==="object"&&!Array.isArray(Z)?Object.fromEntries(Object.entries(Z)):{}}function P9($){return x00($?.metadata).archived===!0}var AK0="Organization is archived";function RK0($,Z){return $.get(TK0[Z])??$.get(qK0[Z])}function v01($,Z,Q){$[TK0[Z]]=Q,$[qK0[Z]]=Q}var TK0,qK0;var b01=L(()=>{TK0={token:"x-studio-token",client:"x-studio-client",properties:"x-studio-properties",runMetadata:"x-studio-run-metadata"},qK0={token:"x-mesh-token",client:"x-mesh-client",properties:"x-mesh-properties",runMetadata:"x-mesh-run-metadata"}});function JE($,Z,Q){$.delete(Z),$.set(Z,{value:Q,at:Date.now()})}function GE($,Z,Q){if($.size<=Z)return;let Y=Date.now();for(let[X,J]of $)if(Y-J.at>=Q)$.delete(X);if($.size>Z){let X=$.size-Z,J=0;for(let G of $.keys()){if(J>=X)break;$.delete(G),J++}}}import*as H7$ from"zod/v3";import*as VT from"zod/v4-mini";function GG($){return!!$._zod}function IT($){let Z=Object.values($);if(Z.length===0)return VT.object({});let Q=Z.every(GG),Y=Z.every((X)=>!GG(X));if(Q)return VT.object($);if(Y)return H7$.object($);throw Error("Mixed Zod versions detected in object shape.")}function KJ($,Z){if(GG($))return VT.safeParse($,Z);return $.safeParse(Z)}async function MK0($,Z){if(GG($))return await VT.safeParseAsync($,Z);return await $.safeParseAsync(Z)}function QN($){if(!$)return;let Z;if(GG($))Z=$._zod?.def?.shape;else Z=$.shape;if(!Z)return;if(typeof Z==="function")try{return Z()}catch{return}return Z}function ac($){if(!$)return;if(typeof $==="object"){let Z=$,Q=$;if(!Z._def&&!Q._zod){let Y=Object.values($);if(Y.length>0&&Y.every((X)=>typeof X==="object"&&X!==null&&(X._def!==void 0||X._zod!==void 0||typeof X.parse==="function")))return IT($)}}if(GG($)){let Q=$._zod?.def;if(Q&&(Q.type==="object"||Q.shape!==void 0))return $}else if($.shape!==void 0)return $;return}function VK0($){if($&&typeof $==="object"){if("message"in $&&typeof $.message==="string")return $.message;if("issues"in $&&Array.isArray($.issues)&&$.issues.length>0){let Z=$.issues[0];if(Z&&typeof Z==="object"&&"message"in Z)return String(Z.message)}try{return JSON.stringify($)}catch{return String($)}}return String($)}function F7$($){return $.description}function U7$($){if(GG($))return $._zod?.def?.type==="optional";let Z=$;if(typeof $.isOptional==="function")return $.isOptional();return Z._def?.typeName==="ZodOptional"}function IK0($){if(GG($)){let J=$._zod?.def;if(J){if(J.value!==void 0)return J.value;if(Array.isArray(J.values)&&J.values.length>0)return J.values[0]}}let Q=$._def;if(Q){if(Q.value!==void 0)return Q.value;if(Array.isArray(Q.values)&&Q.values.length>0)return Q.values[0]}let Y=$.value;if(Y!==void 0)return Y;return}var ec=()=>{};function WE($){return $==="completed"||$==="failed"||$==="cancelled"}var B7$,N7$,D7$=($)=>typeof $==="string"?{...N7$,name:$}:{...N7$,...$};var kK0=L(()=>{B7$=Symbol("Let zodToJsonSchema decide on which parser to use"),N7$={name:void 0,$refStrategy:"root",basePath:["#"],effectStrategy:"input",pipeStrategy:"all",dateStrategy:"format:date-time",mapStrategy:"entries",removeAdditionalStrategy:"passthrough",allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:"definitions",target:"jsonSchema7",strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:"escape",applyRegexFlags:!1,emailStrategy:"format:email",base64Strategy:"contentEncoding:base64",nameStrategy:"ref",openAiAnyTypeName:"OpenAiAnyType"}});var L7$=($)=>{let Z=D7$($),Q=Z.name!==void 0?[...Z.basePath,Z.definitionPath,Z.name]:Z.basePath;return{...Z,flags:{hasReferencedOpenAiAnyType:!1},currentPath:Q,propertyPath:void 0,seen:new Map(Object.entries(Z.definitions).map(([Y,X])=>[X._def,{def:X._def,path:[...Z.basePath,Z.definitionPath,Y],jsonSchema:void 0}]))}};var x01=L(()=>{kK0()});function f01($,Z,Q,Y){if(!Y?.errorMessages)return;if(Q)$.errorMessage={...$.errorMessage,[Z]:Q}}function K6($,Z,Q,Y,X){$[Z]=Q,f01($,Z,Y,X)}var CK0=($,Z)=>{let Q=0;for(;Q<$.length&&Q<Z.length;Q++)if($[Q]!==Z[Q])break;return[($.length-Q).toString(),...Z.slice(Q)].join("/")};function l9($){if($.target!=="openAi")return{};let Z=[...$.basePath,$.definitionPath,$.openAiAnyTypeName];return $.flags.hasReferencedOpenAiAnyType=!0,{$ref:$.$refStrategy==="relative"?CK0(Z,$.currentPath):Z.join("/")}}var NK=()=>{};import{ZodFirstPartyTypeKind as $N4}from"zod/v3";function O7$($,Z){let Q={type:"array"};if($.type?._def&&$.type?._def?.typeName!==$N4.ZodAny)Q.items=R8($.type._def,{...Z,currentPath:[...Z.currentPath,"items"]});if($.minLength)K6(Q,"minItems",$.minLength.value,$.minLength.message,Z);if($.maxLength)K6(Q,"maxItems",$.maxLength.value,$.maxLength.message,Z);if($.exactLength)K6(Q,"minItems",$.exactLength.value,$.exactLength.message,Z),K6(Q,"maxItems",$.exactLength.value,$.exactLength.message,Z);return Q}var y01=L(()=>{O7()});function j7$($,Z){let Q={type:"integer",format:"int64"};if(!$.checks)return Q;for(let Y of $.checks)switch(Y.kind){case"min":if(Z.target==="jsonSchema7")if(Y.inclusive)K6(Q,"minimum",Y.value,Y.message,Z);else K6(Q,"exclusiveMinimum",Y.value,Y.message,Z);else{if(!Y.inclusive)Q.exclusiveMinimum=!0;K6(Q,"minimum",Y.value,Y.message,Z)}break;case"max":if(Z.target==="jsonSchema7")if(Y.inclusive)K6(Q,"maximum",Y.value,Y.message,Z);else K6(Q,"exclusiveMaximum",Y.value,Y.message,Z);else{if(!Y.inclusive)Q.exclusiveMaximum=!0;K6(Q,"maximum",Y.value,Y.message,Z)}break;case"multipleOf":K6(Q,"multipleOf",Y.value,Y.message,Z);break}return Q}var g01=()=>{};function w7$(){return{type:"boolean"}}function SK0($,Z){return R8($.type._def,Z)}var _K0=L(()=>{O7()});var E7$=($,Z)=>{return R8($.innerType._def,Z)};var h01=L(()=>{O7()});function u01($,Z,Q){let Y=Q??Z.dateStrategy;if(Array.isArray(Y))return{anyOf:Y.map((X,J)=>u01($,Z,X))};switch(Y){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return ZN4($,Z)}}var ZN4=($,Z)=>{let Q={type:"integer",format:"unix-time"};if(Z.target==="openApi3")return Q;for(let Y of $.checks)switch(Y.kind){case"min":K6(Q,"minimum",Y.value,Y.message,Z);break;case"max":K6(Q,"maximum",Y.value,Y.message,Z);break}return Q};var l01=()=>{};function P7$($,Z){return{...R8($.innerType._def,Z),default:$.defaultValue()}}var m01=L(()=>{O7()});function z7$($,Z){return Z.effectStrategy==="input"?R8($.schema._def,Z):l9(Z)}var c01=L(()=>{O7();NK()});function A7$($){return{type:"string",enum:Array.from($.values)}}function T7$($,Z){let Q=[R8($.left._def,{...Z,currentPath:[...Z.currentPath,"allOf","0"]}),R8($.right._def,{...Z,currentPath:[...Z.currentPath,"allOf","1"]})].filter((J)=>!!J),Y=Z.target==="jsonSchema2019-09"?{unevaluatedProperties:!1}:void 0,X=[];return Q.forEach((J)=>{if(QN4(J)){if(X.push(...J.allOf),J.unevaluatedProperties===void 0)Y=void 0}else{let G=J;if("additionalProperties"in J&&J.additionalProperties===!1){let{additionalProperties:W,...K}=J;G=K}else Y=void 0;X.push(G)}}),X.length?{allOf:X,...Y}:void 0}var QN4=($)=>{if("type"in $&&$.type==="string")return!1;return"allOf"in $};var d01=L(()=>{O7()});function q7$($,Z){let Q=typeof $.value;if(Q!=="bigint"&&Q!=="number"&&Q!=="boolean"&&Q!=="string")return{type:Array.isArray($.value)?"array":"object"};if(Z.target==="openApi3")return{type:Q==="bigint"?"integer":Q,enum:[$.value]};return{type:Q==="bigint"?"integer":Q,const:$.value}}function vK0($,Z){let Q={type:"string"};if($.checks)for(let Y of $.checks)switch(Y.kind){case"min":K6(Q,"minLength",typeof Q.minLength==="number"?Math.max(Q.minLength,Y.value):Y.value,Y.message,Z);break;case"max":K6(Q,"maxLength",typeof Q.maxLength==="number"?Math.min(Q.maxLength,Y.value):Y.value,Y.message,Z);break;case"email":switch(Z.emailStrategy){case"format:email":XF(Q,"email",Y.message,Z);break;case"format:idn-email":XF(Q,"idn-email",Y.message,Z);break;case"pattern:zod":HJ(Q,YF.email,Y.message,Z);break}break;case"url":XF(Q,"uri",Y.message,Z);break;case"uuid":XF(Q,"uuid",Y.message,Z);break;case"regex":HJ(Q,Y.regex,Y.message,Z);break;case"cuid":HJ(Q,YF.cuid,Y.message,Z);break;case"cuid2":HJ(Q,YF.cuid2,Y.message,Z);break;case"startsWith":HJ(Q,RegExp(`^${p01(Y.value,Z)}`),Y.message,Z);break;case"endsWith":HJ(Q,RegExp(`${p01(Y.value,Z)}$`),Y.message,Z);break;case"datetime":XF(Q,"date-time",Y.message,Z);break;case"date":XF(Q,"date",Y.message,Z);break;case"time":XF(Q,"time",Y.message,Z);break;case"duration":XF(Q,"duration",Y.message,Z);break;case"length":K6(Q,"minLength",typeof Q.minLength==="number"?Math.max(Q.minLength,Y.value):Y.value,Y.message,Z),K6(Q,"maxLength",typeof Q.maxLength==="number"?Math.min(Q.maxLength,Y.value):Y.value,Y.message,Z);break;case"includes":{HJ(Q,RegExp(p01(Y.value,Z)),Y.message,Z);break}case"ip":{if(Y.version!=="v6")XF(Q,"ipv4",Y.message,Z);if(Y.version!=="v4")XF(Q,"ipv6",Y.message,Z);break}case"base64url":HJ(Q,YF.base64url,Y.message,Z);break;case"jwt":HJ(Q,YF.jwt,Y.message,Z);break;case"cidr":{if(Y.version!=="v6")HJ(Q,YF.ipv4Cidr,Y.message,Z);if(Y.version!=="v4")HJ(Q,YF.ipv6Cidr,Y.message,Z);break}case"emoji":HJ(Q,YF.emoji(),Y.message,Z);break;case"ulid":{HJ(Q,YF.ulid,Y.message,Z);break}case"base64":{switch(Z.base64Strategy){case"format:binary":{XF(Q,"binary",Y.message,Z);break}case"contentEncoding:base64":{K6(Q,"contentEncoding","base64",Y.message,Z);break}case"pattern:zod":{HJ(Q,YF.base64,Y.message,Z);break}}break}case"nanoid":HJ(Q,YF.nanoid,Y.message,Z);case"toLowerCase":case"toUpperCase":case"trim":break;default:((X)=>{})(Y)}return Q}function p01($,Z){return Z.patternStrategy==="escape"?XN4($):$}function XN4($){let Z="";for(let Q=0;Q<$.length;Q++){if(!YN4.has($[Q]))Z+="\\";Z+=$[Q]}return Z}function XF($,Z,Q,Y){if($.format||$.anyOf?.some((X)=>X.format)){if(!$.anyOf)$.anyOf=[];if($.format){if($.anyOf.push({format:$.format,...$.errorMessage&&Y.errorMessages&&{errorMessage:{format:$.errorMessage.format}}}),delete $.format,$.errorMessage){if(delete $.errorMessage.format,Object.keys($.errorMessage).length===0)delete $.errorMessage}}$.anyOf.push({format:Z,...Q&&Y.errorMessages&&{errorMessage:{format:Q}}})}else K6($,"format",Z,Q,Y)}function HJ($,Z,Q,Y){if($.pattern||$.allOf?.some((X)=>X.pattern)){if(!$.allOf)$.allOf=[];if($.pattern){if($.allOf.push({pattern:$.pattern,...$.errorMessage&&Y.errorMessages&&{errorMessage:{pattern:$.errorMessage.pattern}}}),delete $.pattern,$.errorMessage){if(delete $.errorMessage.pattern,Object.keys($.errorMessage).length===0)delete $.errorMessage}}$.allOf.push({pattern:R7$(Z,Y),...Q&&Y.errorMessages&&{errorMessage:{pattern:Q}}})}else K6($,"pattern",R7$(Z,Y),Q,Y)}function R7$($,Z){if(!Z.applyRegexFlags||!$.flags)return $.source;let Q={i:$.flags.includes("i"),m:$.flags.includes("m"),s:$.flags.includes("s")},Y=Q.i?$.source.toLowerCase():$.source,X="",J=!1,G=!1,W=!1;for(let K=0;K<Y.length;K++){if(J){X+=Y[K],J=!1;continue}if(Q.i){if(G){if(Y[K].match(/[a-z]/)){if(W)X+=Y[K],X+=`${Y[K-2]}-${Y[K]}`.toUpperCase(),W=!1;else if(Y[K+1]==="-"&&Y[K+2]?.match(/[a-z]/))X+=Y[K],W=!0;else X+=`${Y[K]}${Y[K].toUpperCase()}`;continue}}else if(Y[K].match(/[a-z]/)){X+=`[${Y[K]}${Y[K].toUpperCase()}]`;continue}}if(Q.m){if(Y[K]==="^"){X+=`(^|(?<=[\r
434
434
  ]))`;continue}else if(Y[K]==="$"){X+=`($|(?=[\r
435
435
  ]))`;continue}}if(Q.s&&Y[K]==="."){X+=G?`${Y[K]}\r
436
436
  `:`[${Y[K]}\r
@@ -4501,7 +4501,7 @@ ${X}`:`${Y}
4501
4501
 
4502
4502
  ${X}
4503
4503
  ${J.slice(Y.length).trimStart()}`}function mj8($){return $?.match(lK5)?.[1]?.toLowerCase()??null}async function iK5($,Z,Q){let[Y,X]=await Promise.all([$.client.listDecofileEntries(Z,$.packagePath),$.client.listDecofileEntries(Q,$.packagePath)]),J=new Map(hK(Y,$.packagePath).map((H)=>[H.path,H.sha])),G=hK(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 lj8($,Z){try{return await fQ0($.client,$.packagePath,Z)}catch(Q){if(Q instanceof Vs)return null;throw Q}}async function cj8($,Z,Q){let Y=PP($.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([lj8($,Z),lj8($,Q)]);return G!==W}async function dj8($,Z){if(!AD0(Z))throw new nu;if(!await DT1($.store,$.site,Z))throw new nu}async function ij8($,Z){await dj8($,Z);let Q=await $9($.client,$.mainBranch);return cj8($,Q,Z)}async function pj8($,Z,Q={},Y={}){await dj8($,Z);let X=await $.client.readCommit(Z);if(!X)throw new nu;let J=await $9($.client,$.mainBranch),G=await iK5($,J,Z);if(G.changes.length===0)return{result:"up-to-date"};let W=await cj8($,J,Z);if(W)console.info("hosted reapply: schema differs",{site:$.site,target:Z,head:J});let K=await LT1($,J,G,dK5(X,Z,Q.coAuthor));return{result:"merged",sha:K,release:await wT1($,K,Y),schemaChanged:W}}var nu,gQ0="Reapply: ",hK5,uK5="Reapplied-From",lK5;var AT1=L(()=>{Gn();T5();fF();$B();yQ0();Tg0();nu=class nu extends Error{constructor(){super("This commit has no release");this.name="NotPublishedError"}};hK5=/^chore\(decofile\):/,lK5=/^Reapplied-From:\s*([0-9a-f]{40})\s*$/im});async function nj8($,Z,Q){let[Y,X,J]=await Promise.all([Vj8($.store,$.site),uq$($.store,$.site),Z.listCommits({ref:$.mainBranch,since:nK5,cursor:Q,limit:pK5})]),G=new Map(J.items.map((H)=>[H.sha,H.date])),W=J.items.map((H)=>mj8(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 tj8($){let Z=await $9($.client,$.mainBranch),Q=await OT1($,Z),Y={revision:Z,schemaHash:Q,publishedAt:new Date().toISOString()};return await jT1($,Y),Y}var pK5=50,nK5="1970-01-01T00:00:00Z";var oj8=L(()=>{T5();$B();yQ0();AT1()});function sj8($){return`site-tokens:${$}`}function tK5($){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 rj8($){return crypto.subtle.importKey("pkcs8",Buffer.from($,"base64"),{name:"Ed25519"},!1,["sign"])}async function oK5($,Z){let Q=(J)=>TT1(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}.${TT1(X)}`}function aj8($){let Z=async(Q,Y)=>tK5(await $.kv.get(Q,sj8(Y)));return{list:Z,async issue(Q,Y){let X=await Z(Q,Y),J={kid:TT1(crypto.getRandomValues(new Uint8Array(16))),iat:Math.floor(Date.now()/1000)},G=await oK5(await $.signingKey(),{site:Y,...J});return await $.kv.set(Q,sj8(Y),{tokens:[...X,J]}),{token:G,record:J}}}}var TT1=($)=>Buffer.from($ instanceof Uint8Array?$:new Uint8Array($)).toString("base64url");function rK5(){let $=Pp();return $?{store:$,purge:Pg0()}:null}async function Ig0($){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}}function ej8($){let Z=B0().siteTokenSigningKey;if(!Z)return null;return aj8({kv:$.var.studioContext.storage.kv,signingKey:()=>rj8(Z)})}function Ss($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof Vs)return $.json({error:Q},409);if(Z instanceof qg0)return console.error("hosted: latest.json update failed",{error:Q}),$.json({error:"latest-update-failed"},502);let Y=_G(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 $w8($={}){let Z=new Z1,Q=$.repoClientFor??bG,Y=$.insightsFor??Zq$,X=$.delivery??rK5;return Z.use("*",async(J,G)=>{J.set("repoClientFor",Q),J.set("delivery",X),await G()}),Z.use("/:virtualMcpId/*",sK5),Z.get("/:virtualMcpId/releases",async(J)=>{try{let G=await Ig0(J);if(!G)return J.json(Vg0,503);let W=J.get("hostedProject"),K=await Y(J.var.studioContext,W.organizationId,W.repository);return J.json(await nj8(G,K,J.req.query("cursor")??null),200,{"Cache-Control":"no-store"})}catch(G){return Ss(J,G)}}),Z.post("/:virtualMcpId/releases/retry",async(J)=>{try{let G=await Ig0(J);if(!G)return J.json(Vg0,503);return J.json({current:await tj8(G)})}catch(G){return Ss(J,G)}}),Z.get("/:virtualMcpId/releases/:sha/reapply",async(J)=>{try{let G=await Ig0(J);if(!G)return J.json(Vg0,503);return J.json({schemaChanged:await ij8(G,J.req.param("sha"))})}catch(G){if(G instanceof nu)return J.json({error:G.message},404);return Ss(J,G)}}),Z.post("/:virtualMcpId/releases/:sha/reapply",async(J)=>{try{let G=await Ig0(J);if(!G)return J.json(Vg0,503);let W=await pj8(G,J.req.param("sha"),{coAuthor:QO(J.var.studioContext)});return J.json(W)}catch(G){if(G instanceof nu)return J.json({error:G.message},404);if(G instanceof Is)return J.json({error:"main-moved"},409);return Ss(J,G)}}),Z.get("/:virtualMcpId/site-tokens",async(J)=>{let G=J.get("hostedProject"),W=ej8(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=ej8(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 QR(K,G.packagePath,await K.getDefaultBranch());if(await Tp(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 Ss(J,K)}}),Z}var sK5,Vg0;var Zw8=L(()=>{SF();H8();Xg0();IG();_F();T5();$B();BT1();yQ0();Tg0();oj8();AT1();s60();YR();Ap();u1();bR();sK5=Bs(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(!VQ(await r7(Q),X))return $.json({error:"Virtual MCP not found"},404);let G=J.metadata??null,W=JW(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 MD0({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 Ss($,H)}let K=await RD0(Q.storage.orgSites,X,Y.id);if(!K)return $.json(zp,409);return $.set("hostedProject",{organizationId:Y.id,virtualMcpId:X,site:K,packagePath:ZB(G),repository:W,metadata:G}),Z()}),Vg0={error:"hosted delivery not configured"}});var Qw8=($)=>{let Z=new Z1;if(Z.use("*",yo),Z.use("*",RU8),Z.route("/",TU8($.voiceSessions)),Z.route("/",Fy0()),Z.route("/",WN8()),Z.route("/",EN8()),Z.route("/",QN8()),Z.route("/",TL8()),Z.route("/",RL8()),Z.route("/",LL8()),Z.route("/",zL8()),Z.route("/",jL8()),Z.route("/",Zg0()),Z.route("/tools",_L8()),Z.route("/",kL8()),Z.route("/",oD8({kvStorage:$.kvStorage})),Z.route("/",nD8()),Z.route("/fs",GL8({getConnection:$.getNatsConnection})),Z.route("/sandbox",Wj8()),Z.route("/decofile",hj8()),Z.route("/hosted",$w8()),Z.route("/",NL8()),Z.route("/",KL8()),Z.route("/deco-sites",Ny0()),Z.route("/hosting",fU8()),Z.route("/monitor",tU8()),Z.route("/order-monitor",aU8()),Z.route("/sso",Xy0()),Z.route("/",Qg0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",SU8()),$.mountDevAssets)Z.route("/dev-assets",Ey0({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 PA1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",dW8()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of PA1)Z.route(Q,FL8());return Z.route("/mcp",Xx0()),Z.route("/mcp/self",ry0()),Z.route("/mcp",Wx0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Yw8=L(()=>{H8();qU8();MU8();nf0();_U8();nz1();yU8();oU8();eU8();Py0();E2();mz1();KN8();ez1();tD8();sD8();WL8();HL8();$70();vz1();Kx0();EA1();UL8();BL8();OL8();wL8();TA1();qL8();ML8();CL8();qA1();vL8();RA1();Jx0();Kj8();uj8();Zw8()});import{z as tu}from"zod";class qT1{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 Gw8.Kvm(kg0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:kg0.StorageType.Memory,ttl:Ww8.nanos(zO),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"?Jw8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await J$(200);continue}let G=Xw8.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 J$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,Xw8.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"?Jw8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var kg0,Gw8,Ww8,Xw8,Jw8;var Kw8=L(()=>{BG();kB();p$();kg0=_(xH(),1),Gw8=_(vq(),1),Ww8=_(s2(),1),Xw8=new TextEncoder,Jw8=tu.discriminatedUnion("state",[tu.object({state:tu.literal("ready"),agentId:tu.string()}),tu.object({state:tu.literal("creating"),expiresAt:tu.number()})])});import{z as _s}from"zod";function aK5($){return{model:$.model,instructions:`${gt$}
4504
- Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class RT1{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:aK5({...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:_s.object({session:_s.object({id:_s.string().min(1)}),transport:_s.object({type:_s.literal("webrtc"),sdp:_s.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var Hw8=L(()=>{kB()});var Fw8;var Uw8=L(()=>{Fw8=[{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 MT1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:ft$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:Fw8.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:zO/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 Nw8=L(()=>{kB();Uw8()});import{z as pJ}from"zod";import{createHash as eK5,createHmac as $H5}from"crypto";class Cg0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=eK5("sha256").update(JSON.stringify(MT1($))).digest("hex"),this.conversationKey=$H5("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Cg0({...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}=pJ.object({agents:pJ.array(pJ.object({agent_id:pJ.string(),name:pJ.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 pJ.object({platform_settings:pJ.object({auth:pJ.object({enable_auth:pJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...MT1(this.config)},AbortSignal.timeout(15000));return pJ.object({agent_id:pJ.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 pJ.object({token:pJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return pJ.object({token:pJ.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 Bw8=L(()=>{Nw8()});import{createHmac as ZH5,timingSafeEqual as QH5}from"crypto";import{z as vs}from"zod";function Lw8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return ZH5("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function Ow8($,Z){let Q=Buffer.from(JSON.stringify(Dw8.parse($))).toString("base64url");return`${Q}.${Lw8(Q,Z)}`}function jw8($,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(Lw8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!QH5(W,G))return null;try{let K=Dw8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+zO)return null;return K.data}catch{return null}}var Dw8;var ww8=L(()=>{kB();Dw8=vs.object({sessionId:vs.string().uuid(),organizationId:vs.string().min(1).max(256),userId:vs.string().min(1).max(256),threadId:vs.string().min(1).max(256),expiresAt:vs.number().int().positive()})});import{z as VT1}from"zod";function Ew8($,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 IT1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var IT1;var Pw8=L(()=>{IT1=VT1.object({provider:VT1.enum(["elevenlabs","openai"]),model:VT1.string().trim().min(1).max(128)})});import{createHash as YH5}from"crypto";import{z as bs}from"zod";function xs($){return`user.${YH5("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class CT1{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 zw8.Kvm(_g0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:_g0.StorageType.Memory,ttl:Aw8.nanos(zO),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=Ew8(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()+zO},W=Ow8(G,this.deps.secret),K=await this.kv(),H=xs(G),F=await K.get(H),U=F?.operation==="PUT"?Sg0.parse(F.json()):null,N=kT1.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:xs($)});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=jw8(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=xs(Q),J=await Y.get(X),G=J?.operation==="PUT"?Sg0.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,kT1.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=xs(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Sg0.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,kT1.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(xs($));if(Q?.operation==="PUT"&&Sg0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(xs($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var _g0,zw8,Aw8,Sg0,kT1;var Tw8=L(()=>{BG();kB();ww8();Pw8();_g0=_(xH(),1),zw8=_(vq(),1),Aw8=_(s2(),1),Sg0=bs.object({sessionId:bs.string().uuid(),expiresAt:bs.number(),connected:bs.boolean().optional(),conversation:IT1.optional(),characters:bs.number().int().nonnegative(),requests:bs.number().int().nonnegative()}),kT1=new TextEncoder});import{z as c1}from"zod";function YD($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function BH5($){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 DH5($,Z,Q){try{return JSON.parse($)}catch{throw new Mw8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function LH5($){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:DH5(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 OH5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?qN(Q.function.parameters):qN({type:"object",properties:{}});return[Q.function.name,s$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function jH5($){if(!$)return;return{openai:{response_format:$}}}function wH5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function qw8($,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 Rw8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var XH5=256,JH5,GH5,WH5,KH5,HH5,FH5,UH5,NH5,Mw8,Vw8,Iw8;var kw8=L(()=>{l4();H8();Ns();FU();JH5=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),GH5=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),WH5=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(GH5).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),KH5=c1.object({type:c1.literal("text")}),HH5=c1.object({type:c1.literal("json_object")}),FH5=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()})}),UH5=c1.union([KH5,HH5,FH5]),NH5=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(WH5),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(JH5).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:UH5.optional(),user:c1.string().optional()});Mw8=class Mw8 extends Error{constructor($){super($);this.name="MessageConversionError"}};Vw8=new Z1;Vw8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(YD("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(YD("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(YD("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=NH5.safeParse(Y);if(!X.success){let j=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(YD(`Invalid request: ${j.message}`,"invalid_request_error",j.path.length>0?j.path.join("."):null),400)}let J=X.data,G=BH5(J.model);if(!G)return $.json(YD("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)=>cA(E.providerId));if(!w)return $.json(YD("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(YD(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=LH5(J.messages),N=J.tools?OH5(J.tools):void 0,B=jH5(J.response_format),D=wH5(),O=Math.floor(Date.now()/1000);if(J.stream)return Bj($,async(j)=>{let w=qw8(F,U,N,J,B,$.req.raw.signal);try{let E=Nt(w),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let R=z;z="",await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:R},finish_reason:null}]})})};for await(let R of E.stream){if(!P&&(R.type==="text-delta"||R.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(R.type==="text-delta"){if(z+=R.text,z.length>=XH5)await A()}else if(R.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:R.toolCallId,type:"function",function:{name:R.toolName,arguments:JSON.stringify(R.input)}}]},finish_reason:null}]})})}else if(R.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:Rw8(R.finishReason)}],usage:R.totalUsage?{prompt_tokens:R.totalUsage.inputTokens??0,completion_tokens:R.totalUsage.outputTokens??0,total_tokens:R.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=qw8(F,U,N,J,B,$.req.raw.signal),w=await RO(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:Rw8(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(YD("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(YD(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(YD(X.message,"server_error"),500)}});Iw8=Vw8});function EH5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function Cw8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=S0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!_5(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||P9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(tA(U)!==J)continue;if(!EH5(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 Sw8=L(()=>{H8();$X()});var vg0;var ST1=L(()=>{vg0={name:"decocms",version:"4.513.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run dev:server","dev:server":"NODE_ENV=development bun --env-file=.env --watch run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0",kysely:"^0.28.12","posthog-node":"^5.0.0"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/blocks":"8.5.1","@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 AH5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??zH5}}var _w8,zH5="https://ph.studio.decocms.com",vw8;var bw8=L(()=>{H8();R10();Qu();H9();u1();wo();jz1();ST1();_w8=new Z1;_w8.get("/",($)=>{let Z={version:vg0.version,theme:a3$(),...NF().logo&&{logo:NF().logo},...fO()&&{internalUrl:E$$()},...B0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!B0().controlplaneRestUrl&&!!B0().controlplaneServiceToken,hostingControlPlaneGa:B0().hostingControlPlaneGa,monitorEnabled:!!B0().clickhouseAnalyticsUrl&&!!B0().clickhouseAnalyticsPassword,monitorGa:B0().monitorGa,orderMonitorEnabled:!!B0().orderMonitorIngestUrl&&N2(),plansEnabled:B0().plansEnabled,auth:NF8(),posthog:AH5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:qU()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});vw8=_w8});import{z as R$}from"zod";var TH5,xw8;var fw8=L(()=>{TH5=R$.object({check_id:R$.string(),title:R$.string(),description:R$.string().optional(),impact:R$.string().optional(),why:R$.string().optional(),category:R$.string(),severity:R$.string(),value_band:R$.string().optional(),value_driver:R$.string().optional(),controllability:R$.string().optional(),pages:R$.array(R$.string()),tasks:R$.array(R$.string()),evidence:R$.string(),sample_scope:R$.string().optional(),sources:R$.array(R$.string())}),xw8=R$.object({domain:R$.string(),brand:R$.string(),favicon:R$.string().optional(),scanned_at:R$.string().nullable(),lang:R$.string(),score:R$.number().nullable(),band:R$.string().nullable(),totals:R$.object({measured:R$.number(),registry_total:R$.number(),passed:R$.number(),failed:R$.number(),blocked:R$.number()}),buckets:R$.array(R$.object({id:R$.enum(["critical","important","worth"]),label:R$.string(),items:R$.array(TH5)})),passing:R$.object({count:R$.number(),items:R$.array(R$.object({check_id:R$.string(),title:R$.string()}))}),not_measured:R$.object({count:R$.number(),groups:R$.array(R$.object({reason:R$.string(),label:R$.string(),count:R$.number(),checks:R$.array(R$.string())}))}),categories:R$.array(R$.object({key:R$.string(),label:R$.string(),score:R$.number().nullable(),band:R$.string().nullable(),pass:R$.number(),fail:R$.number()})),screenshots:R$.array(R$.object({url:R$.string(),page_type:R$.string().optional(),viewport:R$.enum(["desktop","mobile"]),image_url:R$.string()}))})});function yw8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${SK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function bg0($,Z={}){let Q=await fetch(yw8($,"",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 xw8.parse(await Q.json())}async function gw8($,Z={}){let Q=await fetch(yw8($,".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 _T1=L(()=>{fw8();xL()});import{join as hw8}from"path";async function RH5($){try{let Z=await bg0($,{signal:AbortSignal.timeout(qH5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||pw1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function J3($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function MH5($,Z){let Q=Ru($),Y=Z?.brand?.trim()||pw1(Q),X=gG8(Q,128),G=`${(B0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=hG8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${J3(W)}</title>`,`<meta name="description" content="${J3(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="${J3(W)}" />`,`<meta property="og:description" content="${J3(K)}" />`,`<meta property="og:url" content="${J3(G)}" />`,`<meta property="og:image" content="${J3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${J3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${J3(W)}" />`,`<meta name="twitter:description" content="${J3(K)}" />`,`<meta name="twitter:image" content="${J3(H)}" />`,`<meta name="twitter:image:alt" content="${J3(F)}" />`,`<link rel="canonical" href="${J3(G)}" />`,`<link rel="alternate" type="text/markdown" href="${J3(G)}.md" />`,`<link rel="icon" href="${J3(X)}" sizes="any" />`].join(`
4504
+ Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class RT1{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:aK5({...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:_s.object({session:_s.object({id:_s.string().min(1)}),transport:_s.object({type:_s.literal("webrtc"),sdp:_s.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var Hw8=L(()=>{kB()});var Fw8;var Uw8=L(()=>{Fw8=[{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 MT1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:ft$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:Fw8.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:zO/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 Nw8=L(()=>{kB();Uw8()});import{z as pJ}from"zod";import{createHash as eK5,createHmac as $H5}from"crypto";class Cg0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=eK5("sha256").update(JSON.stringify(MT1($))).digest("hex"),this.conversationKey=$H5("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Cg0({...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}=pJ.object({agents:pJ.array(pJ.object({agent_id:pJ.string(),name:pJ.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 pJ.object({platform_settings:pJ.object({auth:pJ.object({enable_auth:pJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...MT1(this.config)},AbortSignal.timeout(15000));return pJ.object({agent_id:pJ.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 pJ.object({token:pJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return pJ.object({token:pJ.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 Bw8=L(()=>{Nw8()});import{createHmac as ZH5,timingSafeEqual as QH5}from"crypto";import{z as vs}from"zod";function Lw8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return ZH5("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function Ow8($,Z){let Q=Buffer.from(JSON.stringify(Dw8.parse($))).toString("base64url");return`${Q}.${Lw8(Q,Z)}`}function jw8($,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(Lw8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!QH5(W,G))return null;try{let K=Dw8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+zO)return null;return K.data}catch{return null}}var Dw8;var ww8=L(()=>{kB();Dw8=vs.object({sessionId:vs.string().uuid(),organizationId:vs.string().min(1).max(256),userId:vs.string().min(1).max(256),threadId:vs.string().min(1).max(256),expiresAt:vs.number().int().positive()})});import{z as VT1}from"zod";function Ew8($,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 IT1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var IT1;var Pw8=L(()=>{IT1=VT1.object({provider:VT1.enum(["elevenlabs","openai"]),model:VT1.string().trim().min(1).max(128)})});import{createHash as YH5}from"crypto";import{z as bs}from"zod";function xs($){return`user.${YH5("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class CT1{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 zw8.Kvm(_g0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:_g0.StorageType.Memory,ttl:Aw8.nanos(zO),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=Ew8(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()+zO},W=Ow8(G,this.deps.secret),K=await this.kv(),H=xs(G),F=await K.get(H),U=F?.operation==="PUT"?Sg0.parse(F.json()):null,N=kT1.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:xs($)});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=jw8(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=xs(Q),J=await Y.get(X),G=J?.operation==="PUT"?Sg0.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,kT1.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=xs(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Sg0.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,kT1.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(xs($));if(Q?.operation==="PUT"&&Sg0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(xs($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var _g0,zw8,Aw8,Sg0,kT1;var Tw8=L(()=>{BG();kB();ww8();Pw8();_g0=_(xH(),1),zw8=_(vq(),1),Aw8=_(s2(),1),Sg0=bs.object({sessionId:bs.string().uuid(),expiresAt:bs.number(),connected:bs.boolean().optional(),conversation:IT1.optional(),characters:bs.number().int().nonnegative(),requests:bs.number().int().nonnegative()}),kT1=new TextEncoder});import{z as c1}from"zod";function YD($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function BH5($){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 DH5($,Z,Q){try{return JSON.parse($)}catch{throw new Mw8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function LH5($){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:DH5(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 OH5($){let Z=$.map((Q)=>{let Y=Q.function.parameters?qN(Q.function.parameters):qN({type:"object",properties:{}});return[Q.function.name,s$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function jH5($){if(!$)return;return{openai:{response_format:$}}}function wH5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function qw8($,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 Rw8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var XH5=256,JH5,GH5,WH5,KH5,HH5,FH5,UH5,NH5,Mw8,Vw8,Iw8;var kw8=L(()=>{l4();H8();Ns();FU();JH5=c1.object({type:c1.literal("function"),function:c1.object({name:c1.string(),description:c1.string().optional(),parameters:c1.record(c1.string(),c1.unknown()).optional()})}),GH5=c1.object({id:c1.string(),type:c1.literal("function"),function:c1.object({name:c1.string(),arguments:c1.string()})}),WH5=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(GH5).optional()}),c1.object({role:c1.literal("tool"),content:c1.string(),tool_call_id:c1.string()})]),KH5=c1.object({type:c1.literal("text")}),HH5=c1.object({type:c1.literal("json_object")}),FH5=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()})}),UH5=c1.union([KH5,HH5,FH5]),NH5=c1.object({model:c1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:c1.array(WH5),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(JH5).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:UH5.optional(),user:c1.string().optional()});Mw8=class Mw8 extends Error{constructor($){super($);this.name="MessageConversionError"}};Vw8=new Z1;Vw8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(YD("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(YD("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(YD("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=NH5.safeParse(Y);if(!X.success){let j=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(YD(`Invalid request: ${j.message}`,"invalid_request_error",j.path.length>0?j.path.join("."):null),400)}let J=X.data,G=BH5(J.model);if(!G)return $.json(YD("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)=>cA(E.providerId));if(!w)return $.json(YD("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(YD(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=LH5(J.messages),N=J.tools?OH5(J.tools):void 0,B=jH5(J.response_format),D=wH5(),O=Math.floor(Date.now()/1000);if(J.stream)return Bj($,async(j)=>{let w=qw8(F,U,N,J,B,$.req.raw.signal);try{let E=Nt(w),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let R=z;z="",await j.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:R},finish_reason:null}]})})};for await(let R of E.stream){if(!P&&(R.type==="text-delta"||R.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(R.type==="text-delta"){if(z+=R.text,z.length>=XH5)await A()}else if(R.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:R.toolCallId,type:"function",function:{name:R.toolName,arguments:JSON.stringify(R.input)}}]},finish_reason:null}]})})}else if(R.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:Rw8(R.finishReason)}],usage:R.totalUsage?{prompt_tokens:R.totalUsage.inputTokens??0,completion_tokens:R.totalUsage.outputTokens??0,total_tokens:R.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=qw8(F,U,N,J,B,$.req.raw.signal),w=await RO(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:Rw8(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(YD("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(YD(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(YD(X.message,"server_error"),500)}});Iw8=Vw8});function EH5($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function Cw8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=S0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!_5(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||P9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(tA(U)!==J)continue;if(!EH5(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 Sw8=L(()=>{H8();$X()});var vg0;var ST1=L(()=>{vg0={name:"decocms",version:"4.513.5",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.5.1","@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 AH5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??zH5}}var _w8,zH5="https://ph.studio.decocms.com",vw8;var bw8=L(()=>{H8();R10();Qu();H9();u1();wo();jz1();ST1();_w8=new Z1;_w8.get("/",($)=>{let Z={version:vg0.version,theme:a3$(),...NF().logo&&{logo:NF().logo},...fO()&&{internalUrl:E$$()},...B0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!B0().controlplaneRestUrl&&!!B0().controlplaneServiceToken,hostingControlPlaneGa:B0().hostingControlPlaneGa,monitorEnabled:!!B0().clickhouseAnalyticsUrl&&!!B0().clickhouseAnalyticsPassword,monitorGa:B0().monitorGa,orderMonitorEnabled:!!B0().orderMonitorIngestUrl&&N2(),plansEnabled:B0().plansEnabled,auth:NF8(),posthog:AH5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:qU()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});vw8=_w8});import{z as R$}from"zod";var TH5,xw8;var fw8=L(()=>{TH5=R$.object({check_id:R$.string(),title:R$.string(),description:R$.string().optional(),impact:R$.string().optional(),why:R$.string().optional(),category:R$.string(),severity:R$.string(),value_band:R$.string().optional(),value_driver:R$.string().optional(),controllability:R$.string().optional(),pages:R$.array(R$.string()),tasks:R$.array(R$.string()),evidence:R$.string(),sample_scope:R$.string().optional(),sources:R$.array(R$.string())}),xw8=R$.object({domain:R$.string(),brand:R$.string(),favicon:R$.string().optional(),scanned_at:R$.string().nullable(),lang:R$.string(),score:R$.number().nullable(),band:R$.string().nullable(),totals:R$.object({measured:R$.number(),registry_total:R$.number(),passed:R$.number(),failed:R$.number(),blocked:R$.number()}),buckets:R$.array(R$.object({id:R$.enum(["critical","important","worth"]),label:R$.string(),items:R$.array(TH5)})),passing:R$.object({count:R$.number(),items:R$.array(R$.object({check_id:R$.string(),title:R$.string()}))}),not_measured:R$.object({count:R$.number(),groups:R$.array(R$.object({reason:R$.string(),label:R$.string(),count:R$.number(),checks:R$.array(R$.string())}))}),categories:R$.array(R$.object({key:R$.string(),label:R$.string(),score:R$.number().nullable(),band:R$.string().nullable(),pass:R$.number(),fail:R$.number()})),screenshots:R$.array(R$.object({url:R$.string(),page_type:R$.string().optional(),viewport:R$.enum(["desktop","mobile"]),image_url:R$.string()}))})});function yw8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${SK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function bg0($,Z={}){let Q=await fetch(yw8($,"",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 xw8.parse(await Q.json())}async function gw8($,Z={}){let Q=await fetch(yw8($,".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 _T1=L(()=>{fw8();xL()});import{join as hw8}from"path";async function RH5($){try{let Z=await bg0($,{signal:AbortSignal.timeout(qH5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||pw1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function J3($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function MH5($,Z){let Q=Ru($),Y=Z?.brand?.trim()||pw1(Q),X=gG8(Q,128),G=`${(B0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=hG8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${J3(W)}</title>`,`<meta name="description" content="${J3(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="${J3(W)}" />`,`<meta property="og:description" content="${J3(K)}" />`,`<meta property="og:url" content="${J3(G)}" />`,`<meta property="og:image" content="${J3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${J3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${J3(W)}" />`,`<meta name="twitter:description" content="${J3(K)}" />`,`<meta name="twitter:image" content="${J3(H)}" />`,`<meta name="twitter:image:alt" content="${J3(F)}" />`,`<link rel="canonical" href="${J3(G)}" />`,`<link rel="alternate" type="text/markdown" href="${J3(G)}.md" />`,`<link rel="icon" href="${J3(X)}" sizes="any" />`].join(`
4505
4505
  `)}function VH5($,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}
4506
4506
  </head>`)}function uw8($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Ru(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(hw8($,"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(`${SK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(IH5)}),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=Ru(Q.req.param("file").replace(/\.md$/,""));try{let X=await gw8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(kH5)});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=$?hw8($,"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 RH5(Ru(Y)),K=MH5(Y,W);return Q.html(VH5(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var qH5=2500,IH5=1e4,kH5=1e4;var lw8=L(()=>{H8();xL();_T1();u1()});function xg0($,Z){return fetch(`${SK({})}${$}`,Z)}async function CH5($,Z){let Q=await bg0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function vH5($){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 SH5,_H5=8192,Lj,mw8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},cw8;var dw8=L(()=>{H8();Q3();nK();xL();_T1();SH5=new Set(["complete","errored","terminated","unknown"]);Lj=new Z1;Lj.use("*",async($,Z)=>{let Q=await B4.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});Lj.use("/link-token/*",mw8);Lj.use("/suggest",mw8);Lj.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 CH5(Z,Q))}catch{return $.json({error:"report read failed"},502)}});Lj.post("/run",C6({maxSize:_H5,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}=vH5(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await xg0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${HP({})}`},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)}});Lj.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await xg0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${HP({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:SH5.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});Lj.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await xg0(`/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)}});Lj.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await xg0(`/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:[]})}});cw8=Lj});var bH5=1048576,vT1;var iw8=L(()=>{H8();Q3();u1();Qz1();vT1=new Z1;vT1.post("/webhook",C6({maxSize:bH5,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(!RH8(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=MH8(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await VH8(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as xH5}from"crypto";function gH5($,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 xH5(Buffer.from(X),Buffer.from(Y))}function hH5($,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 pw8($){let Z=new Z1;return Z.post("/webhook",C6({maxSize:fH5,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(!gH5(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"&&!yH5.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 p50().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=hH5(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await uH5($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function uH5($,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 G48(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var fH5=5242880,yH5;var nw8=L(()=>{H8();Q3();SX();hQ();yH5=new Set(["check_suite","issue_comment"])});import{DBOS as xT1,SchedulerMode as lH5}from"@dbos-inc/dbos-sdk";async function cH5(){try{return await dH5()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function dH5(){if(!i50())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (XF1(),YF1)),Promise.resolve().then(() => (QF1(),ZF1))]),Q=await p50(),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=Dp$({sandboxes:J,pools:G,records:await Lp$(X,J,G),legacyPools:rC0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await Op$(K,Ej0(X,new GJ(B0().encryptionKey)),{now:W,orgFsLifetimeMs:$S0}),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 iH5($,Z){let Q=await xT1.runStep(cH5,{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 tw8(){if(bT1)return;if(!B0().agentSandboxEnabled||!i50())return;bT1=xT1.registerWorkflow(iH5,{name:"sandboxCredentialPushWorkflow"}),xT1.registerScheduled(bT1,{name:"sandboxCredentialPushWorkflow",crontab:mH5,mode:lH5.ExactlyOncePerIntervalWhenActive})}var mH5="1,11,21,31,41,51 * * * *",bT1=null;var ow8=L(()=>{S3();Nw();i31();ZS0();aC0();SX();u1()});function sw8($){let Z=new aO($.db,new GJ($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=F$8(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 ZQ(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 rw8=L(()=>{H8();Nw();CN1();MO()});function fg0(){try{return B0().jiraSettleSeconds*1000}catch{return $2}}function aw8($,Z){let Q=Z.windowMs??$2,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=pH5($,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 pH5($,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 fT1=L(()=>{gO();u1()});function ew8($){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 yT1($,Z,Q){if(!Z.enabled)return"disabled";let Y=Z.organizationId,X=new ZQ(Z.siteUrl,Z.email,Z.apiToken),J=aw8(await X.listStatusChanges(Q.issueId),{changeId:Q.changelogId,now:Q.now,windowMs:fg0()});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:ez(N)})),H=e98(K)&&Z.boardId?a98(await X.getBoardColumnStatusIds(Z.boardId),W.id,G.toId):null,F=r98(K,W.name,H);if(!F)return"no_rule";if(!await $.storage.jiraIntegrations.claimTrigger(Y,Q.issueId,G.id))return"duplicate";return await XH({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 gT1=L(()=>{KU();MO();ot();fT1()});import{DBOS as k2,SchedulerMode as nH5}from"@dbos-inc/dbos-sdk";function $E8($){uT1=$}function mT1(){if(!uT1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return uT1}function cT1(){let $=mT1();return new aO($.db,new GJ($.encryptionKey))}async function aH5($){try{let Z=await cT1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,fired:0};let Q=await hJ(mT1().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 ZQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${oH5}m"`,W=0,K;for(let H=0;H<sH5;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await yT1(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 eH5($,Z){let Q=await k2.runStep(()=>cT1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>k2.runStep(()=>aH5(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 $F5($,Z){try{let Q=await cT1().getById($);if(!Q?.enabled)return"disabled";let Y=await hJ(mT1().db,Q.organizationId);if(!Y)return"disabled";let X=await yT1(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 ZF5($,Z){await k2.sleep(fg0()+rH5),await k2.runStep(()=>$F5($,Z),{name:"settleJiraMove"})}async function ZE8($,Z){if(!lT1)throw Error("[jira-trigger] settle workflow is not registered");await k2.startWorkflow(lT1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function QE8(){if(hT1)return;lT1=k2.registerWorkflow(ZF5,{name:"jiraSettleWorkflow"}),hT1=k2.registerWorkflow(eH5,{name:"jiraTriggerSweepWorkflow"}),k2.registerScheduled(hT1,{name:"jiraTriggerSweepWorkflow",crontab:tH5,mode:nH5.ExactlyOncePerIntervalWhenActive})}var tH5="*/5 * * * *",oH5=20,sH5=5,rH5=5000,uT1=null,lT1=null,hT1=null;var dT1=L(()=>{Nw();nz();MO();fT1();gT1()});function YE8($){let Z=new aO($.db,new GJ($.encryptionKey)),Q=ZE($.db);async function Y(J,G){let W=ew8(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 ZE8(K.id,W)}let X=new Z1;return X.post("/webhook/:secret",C6({maxSize:QF5}),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 QF5=1048576;var XE8=L(()=>{H8();Q3();Nw();dT1();gT1();V00()});function JE8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var GE8,YF5,XF5,WE8;var KE8=L(()=>{H8();BG();ft();pi();GE8=new Z1,YF5=["range","if-none-match","if-modified-since"],XF5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];GE8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(fo($))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 VZ0(Y,Z);if(!X)throw new R1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&bK()){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 JE8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of YF5){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 XF5){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),JE8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});WE8=GE8});var hQ0=y((ou)=>{var JF5=ou&&ou.__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]}),GF5=ou&&ou.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))JF5(Z,$,Q)};Object.defineProperty(ou,"__esModule",{value:!0});GF5(B3(),ou)});var UE8=y((HE8)=>{Object.defineProperty(HE8,"__esModule",{value:!0});HE8.version=void 0;HE8.version="3.4.0"});var DE8=y((XD)=>{var WF5=XD&&XD.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(XD,"__esModule",{value:!0});XD.NodeTransport=XD.VERSION=void 0;XD.nodeResolveHost=BF5;var J9=hQ0(),KF5=V0("net"),iT1=V0("tls"),HF5=V0("path"),NE8=V0("fs"),FF5=WF5(V0("dns")),UF5=UE8();XD.VERSION=UF5.version;var NF5="nats.js";class BE8{socket;version;lang;yields=[];signal=(0,J9.deferred)();closedNotification=(0,J9.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=NF5,this.version=XD.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,J9.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 J9.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 J9.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new J9.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,J9.deferred)(),Q,Y=(0,KF5.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,J9.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=J9.DataBuffer.concat(...this.yields),X=(0,J9.extractProtocolMessage)(Y);if(X!=="")try{let J=J9.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,J9.deferred)();try{if($=(0,HF5.resolve)($),!(0,NE8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,NE8.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,J9.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new J9.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,J9.deferred)();try{let X=(0,iT1.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 J9.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,J9.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new J9.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,J9.deferred)();try{let Y=(0,iT1.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 J9.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,J9.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,J9.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 iT1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,J9.render)($)}`);let Z=(0,J9.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,J9.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,J9.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}}XD.NodeTransport=BE8;function BF5($){let Z=(0,J9.deferred)();return FF5.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 EE8=y((wE8)=>{Object.defineProperty(wE8,"__esModule",{value:!0});wE8.connect=DF5;var LE8=DE8(),OE8=hQ0(),jE8=hQ0();function DF5($={}){if((0,jE8.hasWsProtocol)($))return Promise.reject(jE8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,OE8.setTransportFactory)({factory:()=>{return new LE8.NodeTransport},dnsResolveFn:LE8.nodeResolveHost}),OE8.NatsConnectionImpl.connect($)}});var PE8=y((Oj)=>{var OF5=Oj&&Oj.__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]}),jF5=Oj&&Oj.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))OF5(Z,$,Q)};Object.defineProperty(Oj,"__esModule",{value:!0});Oj.connect=void 0;var wF5=EE8();Object.defineProperty(Oj,"connect",{enumerable:!0,get:function(){return wF5.connect}});jF5(hQ0(),Oj)});function TE8($){let Z=$?.connectFn??AF5,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:zF5,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=k7(PF5,EF5,D-1,2,0.5);await J$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?yg0.credsAuthenticator(new TextEncoder().encode(B.creds)):B?.user?yg0.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=AE8.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 AF5($){return zE8.connect($)}var yg0,zE8,AE8,EF5=100,PF5=3000,zF5=3000;var qE8=L(()=>{p$();yg0=_(s2(),1),zE8=_(PE8(),1),AE8=_(xH(),1)});function gg0($,Z){return`${$}.${Z}`}class pT1{cache;constructor($){this.cache=eN({ttlMs:$?.ttlMs??TF5,maxSize:$?.maxSize??qF5})}async get($,Z){return this.cache.get(gg0($,Z))??null}async set($,Z,Q){this.cache.set(gg0($,Z),Q)}async invalidate($,Z){this.cache.delete(gg0($,Z)),this.cache.delete(gg0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var TF5=600000,qF5=5000;var RE8=()=>{};function hg0($,Z){return`${$}:${Z}`}function nT1($){let Z=eN({ttlMs:$?.ttlMs??RF5,maxSize:$?.maxSize??MF5}),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(ME8,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(hg0(K,H))},set(K,H,F){Z.set(hg0(K,H),F)},invalidate(K,H){Z.delete(hg0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(ME8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(hg0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var ME8="studio.ai-provider-keys.invalidate",RF5=30000,MF5=5000;var VE8=()=>{};class tT1{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 IE8=($)=>{let Z;return()=>Z??=$()},oT1,sT1;var kE8=L(()=>{b6();oT1=IE8(()=>G$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),sT1=IE8(()=>G$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function vF5($=_E8){return{name:hB,subjects:[`${EL1}.>`],storage:zU.StorageType.File,max_age:kF5,max_bytes:SF5,max_msgs_per_subject:_F5,discard:zU.DiscardPolicy.Old,retention:zU.RetentionPolicy.Limits,duplicate_window:CF5,num_replicas:$}}class vE8{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 CE8($){let Z=SE8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function yF5($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,IF5().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 gF5($,Z){return $.info?.cluster?Z:1}function hF5($){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 rT1{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=vF5(X);try{await Y.streams.info(hB),await Y.streams.update(hB,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(hB,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(hB),await Y.streams.add(J);else throw G}},Q=await e$(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await zU.jetstreamManager($),X=gF5($,_E8);try{await Z(Y,X)}catch(J){if(X<=1||!hF5(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:tt});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=yF5(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=M98(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=zL1(H,{runId:Z}),N=performance.now()-F;oT1().record(N),sT1().add(1,{"org.id":Y??"unknown"}),fF5?.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?CE8(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(),xF5)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 e$(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:CE8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:tt}),!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=zL1(Z,{runId:$,dedup:Q});oT1().record(performance.now()-X),sT1().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=R98({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"?zU.DeliverPolicy.New:zU.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=az($),W;try{W=await e$(async()=>{return(await Y.consumers.get(hB,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:tt})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=Ab0({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(wb0()).pipeThrough(Eb0()).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(hB,{filter:az($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var zU,SE8,VF5=($)=>{let Z;return()=>Z??=$()},IF5,kF5=86400000000000,CF5=120000000000,SF5=4294967296,_E8,_F5=500000,bF5,xF5,fF5;var bE8=L(()=>{p$();AL1();Tb0();Pb0();b6();kE8();zU=_(xH(),1),SE8=_(s2(),1),IF5=VF5(()=>G$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),_E8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);bF5=process.env.STREAM_ENCODE_TRACE==="1",xF5=process.env.DECOPILOT_STREAM_TRACE==="1";fF5=bF5?new vE8:null});function ug0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,cU(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 xE8=L(()=>{q8()});class aT1{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 uF5($,Z,Q={}){let Y=$.startsWith("thread:")?eF($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function eT1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await VB($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await IB($,{threadId:X,runBranch:G?.branch}),K=await d40($,Q,HD0(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=uF5(W,await qS0($,X),{flat:Vh(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 wW(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 fE8=L(()=>{T5();gQ();hQ()});async function yE8($,Z,Q){let Y=Z.organizationId;if(!uJ(Z))return!1;if(!eh(Q))return!1;if(!await hd($,Y,p10))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=K1.shipped,J=await $.storage.taskBoard.update(Z.id,Y,{status:X},Z.updatedBy);return await Q9($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:X,reason:"pr_merged"}}),J8(Y,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${X}`),!0}var gE8=L(()=>{jG();v8();fX();It();GU();m5()});function nF5($){return $ instanceof RX}function hE8($,Z){return Z-$>=iF5}class $q1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??lF5;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??cF5,Q=this.options.itemIntervalMs??mF5,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,Y)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-TN1),tB1);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-pF5));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 pB1(this.taskBoard,X,Y),await nB1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==K1.progress||uJ(W)||W.assigneeId!==o$)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await eT1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!hE8(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,K1.review,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:K1.progress,to:K1.review,reason:H}}).catch(()=>{}),J8(J,F),await WU(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!==K1.progress||G.assigneeId!==o$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await _O(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),nF5(G)){await this.returnToBacklog(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+dF5)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToBacklog($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==K1.progress)return;let X=await this.taskBoard.returnToBacklogAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:K1.progress,to:K1.intake,reason:Q,retriesSpent:Y.retryAttempts}}).catch(()=>{}),J8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to backlog failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!hE8(BL(Q,Z.reviewCycleStartedAt),Date.now()))return;await WU($,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(!uJ(Y))return!1;let X=Y.assigneeId===o$,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 eT1(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 St(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 yE8(G,Y,W))return!0;if(!X)return!1;if(await A48(G,Y))return!0;if(!mB1(W))return!1;return await Ct(G,Y,{previewMatchesHead:cB1(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var lF5=60000,mF5=300000,cF5=50,dF5=60000,iF5=900000,pF5=120000;var uE8=L(()=>{v8();wv0();fE8();vO();xt();GU();gE8();m5();WW();oB1();hQ();a90()});async function lE8($,Z,Q=$2){return await cE8($,Z,Q,{})}async function mE8($,Z,Q,Y=$2){return await cE8($,Q,Y,{activityId:Z})}async function cE8($,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-tF5),settledBefore:new Date(Z-Q),limit:oF5,...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 sF5($.taskBoard,K,Q);for(let U of H){if(!ZZ8(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 sF5($,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?QZ8(X,Q):Z.from}var tF5=1800000,oF5=200;var dE8=L(()=>{gO()});import{DBOS as C2,DBOSClient as rF5,SchedulerMode as aF5}from"@dbos-inc/dbos-sdk";function iE8($){jj=$}async function ZU5($){if(!jj)return 0;try{return await mE8(jj,$,Date.now(),jj.settleMs)}catch(Z){return console.error(`[automations] settling board move ${$} failed`,Z),0}}async function QU5(){if(!jj)return 0;try{return await lE8(jj,Date.now(),jj.settleMs)}catch($){return console.error("[automations] board transition sweep failed",$),0}}async function YU5($){await C2.sleep((jj?.settleMs??$2)+$U5),await C2.runStep(()=>ZU5($),{name:"settleBoardMove"})}async function XU5($,Z){let Q=await C2.runStep(()=>QU5(),{name:"sweepBoardMoves"});if(Q>0)console.log(`[automations] board transition sweep fired ${Q} trigger(s) the settle wait missed`)}async function nE8($){let Z=jj;if(!Z||!Qq1)return;if(!await Z.automations.hasActiveBoardColumnTrigger($.taskBoardItemId,$.to))return;let Q=`board-settle:${$.activityId}`;if(!C2.isWithinWorkflow()){await C2.startWorkflow(Qq1,{workflowID:Q,queueName:y2})($.activityId);return}let Y=await rF5.create({systemDatabaseUrl:Z.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:1});try{await Y.enqueue({workflowName:pE8,queueName:y2,workflowID:Q},$.activityId)}finally{await Y.destroy()}}function tE8(){if(Zq1)return;Qq1=C2.registerWorkflow(YU5,{name:pE8}),Zq1=C2.registerWorkflow(XU5,{name:"boardTransitionSweepWorkflow"}),C2.registerScheduled(Zq1,{name:"boardTransitionSweepWorkflow",crontab:eF5,mode:aF5.ExactlyOncePerIntervalWhenActive})}var eF5="*/5 * * * *",$U5=2000,jj=null,pE8="boardTransitionSettleWorkflow",Qq1=null,Zq1=null;var oE8=L(()=>{gO();dE8()});import{readdir as JU5,rm as lg0}from"fs/promises";import{join as mg0}from"path";async function cg0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-GU5),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await su($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await sE8($,X,Z);else if(!X.startsWith(".")){let J=mg0($,X),G=await su(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await sE8(J,K,Z)}if((await su(J)).length===0)await lg0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function sE8($,Z,Q){let Y=0,X=mg0($,Z),J=await su(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=mg0(X,W),H=await su(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=mg0(K,U);await lg0(B,{recursive:!0,force:!0}),Y++}}if((await su(K)).length===0)await lg0(K,{recursive:!0,force:!0})}if((await su(X)).length===0)await lg0(X,{recursive:!0,force:!0});return Y}async function su($){try{return(await JU5($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var GU5=30;var Yq1=()=>{};import{DBOS as Xq1,SchedulerMode as WU5}from"@dbos-inc/dbos-sdk";async function HU5(){let $=[VH(),Jl(),ND()],Z=0;for(let Q of $)try{Z+=await cg0(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 FU5($,Z){await Xq1.runStep(()=>HU5(),{name:"monitoringRetention"})}function aE8(){if(rE8)return;rE8=!0;let $=Xq1.registerWorkflow(FU5,{name:"monitoringRetentionWorkflow"});Xq1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:KU5,mode:WU5.ExactlyOncePerIntervalWhenActive})}var KU5="23 4 * * *",rE8=!1;var eE8=L(()=>{mW();Yq1()});function $P8($){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 xY.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await EP($.db,Z,Y.role);return X.boundAuth=kP1({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"),tz(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var ZP8=L(()=>{JX();vF()});function QP8(){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=uQ0(N.params.name),D=N.params.arguments||{},O=Object.keys(D).map((w)=>uQ0(w)),j=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${L9.tool}${B}${L9.dim}(${j})${L9.reset}`}else if(N.method)J=`${L9.dim}${uQ0(N.method)}${L9.reset}`}}catch{}}let W=uQ0(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${L9.mcp}${uQ0(F.slice(0,12))}\u2026${L9.reset}`}else if(X==="/mcp")W=`${L9.mcp}/mcp${L9.reset}`;else if(X==="/mcp/registry")W=`${L9.mcp}/mcp/registry${L9.reset}`;let K=NU5(Y),H=G?"\u25C0":"\u2190";console.log(`${L9.dim}${H}${L9.reset} ${K}${Y}${L9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=UU5(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";console.log(`${L9.dim}${D}${L9.reset} ${K}${Y}${L9.reset} ${W}${J?` ${J}`:""} ${N}${U}${L9.reset} ${L9.duration}${B}${L9.reset}`)}}}var L9,UU5=($)=>{if($>=500)return L9.serverError;if($>=400)return L9.clientError;if($>=300)return L9.redirect;return L9.ok},NU5=($)=>{return L9[$]||L9.reset},uQ0=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var YP8=L(()=>{L9={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 WP8}from"crypto";import{mkdir as BU5,readdir as DU5,rm as XP8,stat as KP8}from"fs/promises";import{join as Gq1,relative as LU5}from"path";import{z as G8}from"zod";function FP8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return Gq1(OU5,Z)}function UP8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function Jq1($,Z){let Q=FP8($),Y=UP8(Z);return Gq1(Q,Y)}function jU5($,Z,Q,Y){let X=B0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return WP8("sha256",X).update(J).digest("hex")}function GP8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=jU5(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${UP8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function NP8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${WP8("md5","etag").update(Y).digest("hex")}"`}async function BP8($,Z,Q,Y,X){try{let J=await DU5($,{withFileTypes:!0});for(let G of J){let W=Gq1($,G.name),H=LU5(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 BP8(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 KP8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:NP8(W,F.mtime,F.size)})}catch{}}}}catch{}}function DP8($,Z){let Y=Q0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:G8.object({prefix:G8.string().optional(),maxKeys:G8.number().optional().default(1000),continuationToken:G8.string().optional(),delimiter:G8.string().optional()}),outputSchema:G8.object({objects:G8.array(G8.object({key:G8.string(),size:G8.number(),lastModified:G8.string(),etag:G8.string()})),nextContinuationToken:G8.string().optional(),isTruncated:G8.boolean(),commonPrefixes:G8.array(G8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=FP8(Y);await BU5(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await BP8(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:G8.object({key:G8.string()}),outputSchema:G8.object({contentType:G8.string().optional(),contentLength:G8.number(),lastModified:G8.string(),etag:G8.string(),metadata:G8.record(G8.string(),G8.string()).optional()}),handler:async(X)=>{let J=X,G=Jq1(Y,J.key),W=await KP8(G);return{contentType:rz1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:NP8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:G8.object({key:G8.string(),expiresIn:G8.number().optional()}),outputSchema:G8.object({url:G8.string(),expiresIn:G8.number()}),handler:async(X)=>{let J=X,G=iO(J.expiresIn,JP8);return{url:GP8(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:G8.object({key:G8.string(),expiresIn:G8.number().optional(),contentType:G8.string().optional()}),outputSchema:G8.object({url:G8.string(),expiresIn:G8.number()}),handler:async(X)=>{let J=X,G=iO(J.expiresIn,JP8);return{url:GP8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:G8.object({key:G8.string()}),outputSchema:G8.object({success:G8.boolean(),key:G8.string()}),handler:async(X)=>{let J=X,G=Jq1(Y,J.key);try{return await XP8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:G8.object({keys:G8.array(G8.string()).max(1000)}),outputSchema:G8.object({deleted:G8.array(G8.string()),errors:G8.array(G8.object({key:G8.string(),message:G8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=Jq1(Y,K);try{await XP8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function Wq1($,Z,Q){let Y=DP8(Z,Q),X=new OE({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:G8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:G8.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new qW({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),BH(X,J,$,"mcp:dev-assets")}async function LP8($,Z,Q,Y){let J=DP8(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 OU5="./data/assets",JP8=3600,HP8,OP8;var jP8=L(()=>{u1();Jo();H8();VH0();Xo();NJ();pO();Py0();HP8=new Z1;HP8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return Wq1($.req.raw,Z,Y)});OP8=HP8});var wP8={};O6(wP8,{mountDevRoutes:()=>wU5});function wU5($,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 Wq1(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 LP8(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",OP8);let Q=new Z1;Q.use("*",jU({mountPath:"/api/dev-assets"})),Q.route("/",Ey0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var EP8=L(()=>{H8();cz1();Py0();jP8()});var kP8={};O6(kP8,{watchHandler:()=>IP8,resolveVoiceSigningSecret:()=>RP8,resolveCorsOrigin:()=>MP8,isSsoExemptPath:()=>qP8,isAllowedOAuthRedirectUri:()=>VP8,createApp:()=>kU5});import{readFileSync as EU5}from"fs";import{randomBytes as PU5}from"crypto";import{PrometheusSerializer as zU5}from"@opentelemetry/exporter-prometheus";import{DBOS as JD}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as qU5,oAuthProtectedResourceMetadata as RU5}from"better-auth/plugins";async function AU5($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,zP8(PP8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),zP8(PP8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function zP8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function qP8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${Zy0}/`)||$.startsWith(`${of0}/`)}function RP8($){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)"),PU5(32).toString("base64")}function MP8($,{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 VP8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"}async function kU5($={}){let Z=$.database??E8(),Q=!1;I6.stop().catch((F0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",F0)});let Y,X,J,G,W=new pT1,K,H,F,U=null;if($.disableNats)K=nT1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new eZ0,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(F0)=>{return(async()=>{let G0=F0.getReader();try{while(!0){let{done:P0}=await G0.read();if(P0)break}}catch{}finally{G0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=TE8();let F0=B0().natsCredsPath,G0;if(F0)try{G0=EU5(F0,"utf8")}catch(B8){console.error(`[app] failed to read NATS_CREDS at ${F0}; connecting anonymously`,B8)}U.init(B0().natsUrls,{creds:G0,user:B0().natsUser,password:B0().natsPassword});let P0=sZ1()?new bZ1({getJetStream:()=>U.getJetStream(),selfListVersion:vg0.version}):null;P0?.init().catch(()=>{}),Y=P0;let z0=new P71({getJetStream:()=>U.getJetStream()});z0.init().catch(()=>{}),X=z0;let j1=new $u(fB1,{getJetStream:()=>U.getJetStream()}),b$=new $u(e90,{getJetStream:()=>U.getJetStream()});j1.init().catch(()=>{}),b$.init().catch(()=>{}),J={reads:j1,cards:b$};let r$=new Jj1({getJetStream:()=>U.getJetStream()});r$.init().catch(()=>{}),G=r$,K=nT1({getConnection:()=>U.getConnection()}),H=new tT1({getConnection:()=>U.getConnection()}),F=new rT1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),nH8(U),U.onReady(()=>{P0?.init().catch((B8)=>{console.error("[McpListCache] Deferred init failed:",B8)}),z0.init().catch((B8)=>{console.error("[SkillCatalogCache] Deferred init failed:",B8)}),j1.init().catch((B8)=>{console.error("[PrReadCache] Deferred init failed:",B8)}),b$.init().catch((B8)=>{console.error("[PrCardCache] Deferred init failed:",B8)}),r$.init().catch((B8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",B8)}),K.start(),m2$(()=>U.getConnection()),F.init().catch((B8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",B8)})})}if(S2)await S2();xZ1(Y),A71(X),q71(()=>U?.getConnection()??null),yB1(J),Gj1(G);let B={storage:new tm(Z.db),sseHub:I6,onThreadFinished:async(F0,G0)=>vt(new jW(Z.db),F0,G0,new C3(Z.db))},D=new uD1(B),O=new k70(Z.db),j=new aT1(O);j.start(),HZ8(H),H.start((F0)=>{Kb0(F0),D.execute({type:"CANCEL",taskId:F0}).catch((G0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",G0)})}).catch((F0)=>{console.error("[Decopilot] CancelBroadcast start failed:",F0)}),U?.onReady(()=>{H.start().catch((F0)=>{console.error("[CancelBroadcast] Deferred start failed:",F0)})});let w=()=>U?.getConnection()??null;yz1(w),U?.onReady(()=>yz1(w)),uj1(w),U?.onReady(()=>uj1(w)),F.init().catch((F0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",F0)}),S2=async()=>{await D.stopAll(),D.dispose(),j.dispose(),H.stop().catch(()=>{}),BU8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),c2$(),G.teardown(),xZ1(null),A71(null),q71(null),yB1(null),Gj1(null)};let E=new Z1;if(E.use("*",Qj1({enabled:(F0)=>xo(F0,"debug")==="1"})),E.use("*",Uh0),E.use("/*",mH8({origin:(F0,G0)=>MP8(F0,{baseUrl:B0().baseUrl,requestOrigin:new URL(G0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(F0,G0)=>{if(await G0(),F0.req.path.includes("/files/"))return;if(F0.req.path.includes("/fs/")&&F0.req.path.endsWith("/read"))return;F0.header("X-Frame-Options","DENY"),F0.header("Content-Security-Policy","frame-ancestors 'none'")}),B0().nodeEnv==="development")E.use("*",QP8());E.use("*",async(F0,G0)=>{if(await G0(),is(F0.req.path))return;if(F0.res.status>=500){let z0=await F0.res.clone().text();console.error(`[5xx Response] ${F0.req.method} ${F0.req.path} - ${F0.res.status}:`,z0)}}),E.get(tX.HEALTH,(F0)=>{if(Q)return F0.json({status:"shutting_down"},503);return F0.json({status:"ok"})}),E.get(tX.HEALTH_LIVE,(F0)=>{return F0.json({status:"ok"})}),E.get(tX.HEALTH_READY,async(F0)=>{if(Q)return F0.json({status:"shutting_down"},503);let G0={};if(G0.postgres={status:await AU5(Z.pool)?"up":"down"},U)G0.nats=U.isConnected()?{status:"up"}:{status:"down"};else G0.nats={status:"down"};let P0=G0.postgres.status==="up",z0=P0?200:503;return F0.json({status:P0?"ready":"not_ready",services:G0},z0)}),E.get(tX.METRICS,async(F0)=>{try{let G0=await Lh0.collect(),P0=TU5.serialize(G0.resourceMetrics);return F0.text(P0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(G0){return console.error("Failed to collect metrics:",G0),F0.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${tX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(F0)=>{let G0=F0.req.param("queueName");if(!MU5.has(G0))return F0.json({error:`Unknown queue: ${G0}`},404);let[P0,z0]=await Promise.all([JD.listQueuedWorkflows({queueName:G0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),JD.listQueuedWorkflows({queueName:G0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return F0.json({queue_length:P0.length,in_flight:z0.length})}),E.route("/api/config",vw8),E.route("/api/_reports",cw8),E.route("/api/_stripe",vT1),E.route("/api/_github",pw8({taskBoard:()=>l,contextFactory:()=>b})),E.route("/api/_git",oo);let T={db:Z.db,encryptionKey:B0().encryptionKey};E.route("/api/_jira",YE8(T)),E.route("/api/_jira",sw8(T)),E.route("/report",uw8($.clientDir)),E.route("/api/auth/custom",BF8),E.all("/api/auth/admin/*",$U8),E.all("/api/auth/*",async(F0)=>{return await B4.handler(F0.req.raw)});let z=cW8();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",d70),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",d70),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",R70),E.route("/",tW8()),E.use("/oauth-proxy/:connectionId/*",d70),E.all("/oauth-proxy/:connectionId/*",AP8);let A=async(F0)=>{let P0=await VU5()(F0.req.raw),z0=await P0.json();return Response.json(z0,P0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",d70),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let R=async(F0)=>{let P0=await IU5()(F0.req.raw),z0=await P0.json();return Response.json(z0,P0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",R);let f=dH8({ttlMs:120000}),S=await mK8({db:Z.db,auth:B4,encryption:{key:B0().encryptionKey},observability:{tracer:Rj,meter:G$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});xY.set(S),G$$({db:Z.db,baseUrl:B5()}),cK8({db:Z.db}),nK8({db:Z.db}),PH8({db:Z.db}),IH8({db:Z.db}),$E8({db:Z.db,encryptionKey:B0().encryptionKey}),D88({db:Z.db}),bH8({db:Z.db}),p88({db:Z.db});let V=ZE(Z.db),v=new I00(Z.db),b=$P8({db:Z.db});rL1({storage:V,studioContextFactory:b,orgContextFactory:(F0)=>hJ(Z.db,F0),systemDatabaseUrl:g10(B0().databaseUrl,B0().databasePgSsl)}),bL1({systemDatabaseUrl:g10(B0().databaseUrl,B0().databasePgSsl),studioContextFactory:b,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:I6}}),IL1({dispatchRunFn:w98,studioContextFactory:b,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:I6}});let h=new tm(Z.db),l=new jW(Z.db),d=new C3(Z.db),W0=new $q1(l,b,d);if(B0().taskBoardReviewSweeperEnabled){W0.start();let F0=S2;S2=async()=>{await F0?.(),W0.dispose()}}iE8({automations:V,taskBoard:l,fire:XH,systemDatabaseUrl:g10(B0().databaseUrl,B0().databasePgSsl),settleMs:B0().boardTransitionSettleSeconds*1000}),T88(nE8),h98({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let F0=U?.getConnection();return F0?await TP8.jetstreamManager(F0):null},messageParts:h.messageParts(),resolveRun:async(F0)=>{let G0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",F0).executeTakeFirst();return G0?{orgId:G0.organization_id,createdBy:G0.created_by,version:G0.message_storage_version??1,status:G0.status,runFenceToken:G0.run_fence_token,title:G0.title??null}:null},completeRunIfNotCompleted:async(F0,G0)=>{let P0=await h.completeRunIfNotCompleted(F0,G0);if(ug0(I6,G0,F0,P0),P0)await vt(l,F0,G0,d);return P0},markRunRequiresAction:async(F0,G0)=>{let P0=await h.requiresActionIfInProgress(F0,G0);return ug0(I6,G0,F0,P0),P0},markRunFailed:async(F0,G0,P0,z0)=>{let j1=await h.markRunFailed(F0,G0,P0,z0);if(ug0(I6,G0,F0,j1),j1)await vt(l,F0,G0,d);return j1},clearSynthesizedError:async(F0,G0)=>{await h.messageParts().replaceMessageParts(F0,rz(F0,G0),[])},persistTitle:(F0,G0,P0)=>h.update(F0,G0,{title:P0}),onTitleUpdated:async({runId:F0,orgId:G0,title:P0})=>{let z0=await h.get(F0,G0).catch(()=>null);I6.emit(G0,cU(F0,z0?.status??"in_progress",{title:P0,virtualMcpId:z0?.virtual_mcp_id??void 0,createdBy:z0?.created_by,triggerId:z0?.trigger_id,branch:z0?.branch??null,harnessId:z0?.harness_id??void 0,createdAt:z0?.created_at,updatedAt:z0?.updated_at}))},bumpProgress:async({runId:F0,orgId:G0})=>{await h.bumpProgress(F0,G0)},recordCompleted:async({runId:F0,orgId:G0,distinctId:P0,usage:z0})=>{m1.capture({distinctId:P0,event:"chat_message_completed",groups:{organization:G0},properties:{organization_id:G0,thread_id:F0,transport:"projector",input_tokens:z0.inputTokens,output_tokens:z0.outputTokens,total_tokens:z0.totalTokens}})},recordFailed:async({runId:F0,orgId:G0,distinctId:P0,reason:z0,kind:j1})=>{m1.capture({distinctId:P0,event:"chat_message_failed",groups:{organization:G0},properties:{organization_id:G0,thread_id:F0,transport:"projector",error_category:j1,error_message:z0}})},purgeRun:async(F0)=>{F.purge(F0)}}),l58({studioContextFactory:b,systemDatabaseUrl:g10(B0().databaseUrl,B0().databasePgSsl),streamBuffer:F}),aE8(),W$$(),iK8(),oK8(),AH8(),CH8(),QE8(),tE8(),E88(),fH8(),n88(),tw8();let I0=async(F0,G0,P0)=>{let z0=await V.findById(F0,G0);if(!z0)throw Error("Automation not found");return QO1({automationId:z0.id,organizationId:z0.organization_id,triggerId:null})},J0=new mo(V,({automation:F0,trigger:G0,contextMessages:P0,idempotencyKey:z0})=>XH({automationId:F0.id,organizationId:F0.organization_id,triggerId:G0.id,contextMessages:P0},{idempotencyKey:z0})),U0=[VH(),Jl(),ND()];for(let F0 of U0)cg0(F0).then(()=>{}).catch((G0)=>console.error("[monitoring] Retention cleanup failed:",G0));let o=()=>B4.api.deleteAllExpiredApiKeys().catch((F0)=>console.error("[auth] Expired API key cleanup failed:",F0));o(),setInterval(o,86400000).unref(),E.use("*",async(F0,G0)=>{if(Hh0(F0.req.path))return G0();let P0={measure:async(j1,b$)=>{NH(F0,j1);try{return await b$()}finally{RW(F0,j1)}}},z0=await xY.create(F0.req.raw,{timings:P0});z0.automationRunner=I0,F0.set("studioContext",z0);try{await G0()}finally{let j1=z0.pendingRevalidations;if(j1.length>0)Promise.race([Promise.allSettled(j1),J$(30000)]).catch((r$)=>console.error("[studio] revalidation cleanup error:",r$))}}),E.use("/api/:org/decopilot/*",yo),E.use("/api/:org/v1/*",yo),E.use("/api/:org/files/*",yo),E.use("*",async(F0,G0)=>{if(qP8(F0.req.path))return G0();let P0=F0.get("studioContext");if(!P0?.organization?.id||!P0?.auth?.user?.id)return G0();if(!(await P0.storage.orgSsoConfig.getByOrgId(P0.organization.id))?.enforced)return G0();if(!await P0.storage.orgSsoSessions.isValid(P0.auth.user.id,P0.organization.id))return F0.json({error:"SSO authentication required for this organization"},403);return G0()});let t=new Z1;t.use("*",jU({mountPath:"/api/org-sso"})),t.route("/",Xy0()),E.route("/api/org-sso",t),E.get("/api/tools/management",(F0)=>{return F0.json({tools:v00,grouped:qT()})}),E.use("/mcp/*",async(F0,G0)=>{NH(F0,"mcp");try{return await G0()}finally{RW(F0,"mcp")}});let r=async(F0,G0)=>{let P0=F0.var.studioContext;if(!P0.auth.user?.id&&!P0.auth.apiKey?.id){let z0=new URL(F0.req.url),j1=F0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),b$=j1?`${j1}://${z0.host}`:z0.origin;return F0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${b$}${z0.pathname}/.well-known/oauth-protected-resource"`}})}return await G0()};if(E.use("/mcp/:connectionId?",r),E.use("/mcp/gateway/:virtualMcpId?",r),E.use("/mcp/virtual-mcp/:virtualMcpId?",r),E.use("/mcp/self",r),bK()){let{mountDevRoutes:F0}=(EP8(),rg0(wP8));F0(E,r)}let $0=new Z1;$0.use("*",jU({mountPath:"/mcp"})),$0.route("/",Xx0()),E.route("/mcp",$0);let X0=new Z1;X0.use("*",jU({mountPath:"/mcp/self"})),X0.route("/",ry0()),E.route("/mcp/self",X0);let h0=new Z1;h0.use("*",jU({mountPath:"/mcp"})),h0.route("/",Wx0()),E.route("/mcp",h0),E.use("/api/:org/models/*",async(F0,G0)=>{NH(F0,"llm_models");try{return await G0()}finally{RW(F0,"llm_models")}});let C0=EU8({cancelBroadcast:H,streamBuffer:F,runRegistry:D});E.route("/api",C0),E.route("/api",WE8);let H1=new Z1;H1.use("*",jU({mountPath:"/api"})),H1.route("/",Zg0()),E.route("/api",H1),E.route("/api",Iw8);let m0=new Z1;m0.use("*",jU({mountPath:"/api"})),m0.route("/",Qg0({tokenStorage:v,automationEventDispatcher:J0})),E.route("/api",m0);let j0=new k00(Z.db),E0=new Z1;E0.use("*",jU({mountPath:"/api"})),E0.route("/",Fy0()),E.route("/api",E0),E.route("/api/deco-sites",bU8());let n0=new Z1;n0.use("*",jU({mountPath:"/api/deco-sites"})),n0.route("/",Ny0()),E.route("/api/deco-sites",n0),E.route(Zy0,ZU8()),E.route(EL8,AL8()),E.route("/api/_editor-resolve",Cw8()),E.route(EF8,PF8()),E.route(of0,xF8());let O1=B0(),o0=O1.elevenlabsApiKey?new Cg0({apiKey:O1.elevenlabsApiKey,model:O1.elevenlabsVoiceModel,conversationModel:O1.elevenlabsConversationModel,voiceId:O1.elevenlabsVoiceId}):null,x0={openai:O1.openaiLiveApiKey?new RT1({apiKey:O1.openaiLiveApiKey,voice:O1.openaiLiveVoice}):null,elevenlabs:o0?new qT1(o0,()=>U?.getConnection()??null):null},d0=new CT1({adapter:o0,conversationAdapters:x0,defaults:O1,secret:RP8(O1),getConnection:()=>U?.getConnection()??null}),i0=Qw8({voiceSessions:d0,kvStorage:j0,runRegistry:D,streamBuffer:F,sseHub:I6,cancelBroadcast:H,tokenStorage:v,automationEventDispatcher:J0,mountDevAssets:bK(),mcpAuth:r,oauthProxyHandler:AP8,watchHandler:IP8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((F0)=>{return F0.json({error:"Not Found",path:F0.req.path},404)}),E.onError(zU8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([I6.stop(),S2?Promise.resolve(S2()).finally(()=>{S2=null}):Promise.resolve()]),U)await U.drain().catch((F0)=>console.error("[shutdown] NATS drain error:",F0));console.log("[shutdown] Flushing telemetry..."),await tJ().catch((F0)=>console.error("[shutdown] Telemetry flush error:",F0)),console.log("[shutdown] Closing database..."),await DH$(Z).catch((F0)=>console.error("[shutdown] Database close error:",F0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await JD.registerQueue(H3,{partitionQueue:!0,concurrency:tL1,minPollingIntervalMs:oL1}),await JD.registerQueue(uW,{partitionQueue:!0,concurrency:_L1,priorityEnabled:!0}),await JD.registerQueue(FD,{workerConcurrency:B0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await JD.registerQueue(UD,{workerConcurrency:B0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await JD.registerQueue(qj,{partitionQueue:!0,concurrency:u58}),await JD.registerQueue(f2,i88),await JD.registerQueue(y2),await dz1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((F0)=>JD.deleteQueue(F0))),await sL1(Z.pool),rN$().catch((F0)=>{console.error("[studio-pack-backfill] failed:",F0)}),gd(Z.db).catch((F0)=>{console.error("[automations] built-in seed failed:",F0)}),K$$().catch((F0)=>{console.error("[org-fs] public-sets boot sync kick failed:",F0)})}})}var TP8,PP8=5000,S2=null,AP8=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 xY.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 ko(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=rE1(await W.json());if(!K)K=H.origin;let N=await M70(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=nW8(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(!VP8(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(gH8(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,R=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 d=atob(T.slice(6).trim()),W0=d.indexOf(":");if(W0!==-1){let I0=decodeURIComponent(d.slice(0,W0)),J0=decodeURIComponent(d.slice(W0+1));A=I0||null,R=J0||null}}catch{}let v=await $.req.formData();if(v.has("resource"))v.set("resource",U);let b=v.get("client_id"),h=v.get("client_secret");if(typeof b==="string"&&b)A=b;if(typeof h==="string"&&h)R=h;let l=new URLSearchParams;for(let[d,W0]of v.entries())l.append(d,W0.toString());z=l.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(),h={};try{h=b?JSON.parse(b):{}}catch{z=b}let l=typeof h==="object"&&h!==null&&!Array.isArray(h);if(z===void 0&&!l)z=b;if(z===void 0){let d=h,W0=d.metadata&&typeof d.metadata==="object"?d.metadata:{};d.metadata={...W0,organization_id:G.organization_id,...v?.slug?{organization_slug:v.slug}:{},...v?.name?{organization_name:v.name}:{}},z=JSON.stringify(d),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 h=typeof b.expires_in==="number"?new Date(Date.now()+b.expires_in*1000):null,l=null;try{l=await L2(G.connection_url)??D}catch{l=D}let d={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:h,clientId:A,clientSecret:R,tokenEndpoint:l};await new e5(X.db,X.vault).upsert(d)}}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})},IP8=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&&(!xB(Y)||!await fB(Z)))return $.json({error:"forbidden"},403);let W=G?Xv0:Y;if(G)SO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return Bj($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!I6.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(()=>{I6.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),I6.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),I6.remove(W,K),N()})})})},TU5,MU5,VU5=()=>RU5(B4),IU5=()=>qU5(B4);var CP8=L(()=>{p$();u1();H$$();pK8();sK8();TH8();SH8();G70();OB1();yH8();a90();H9();pi();q8();H8();if0();cH8();Yj1();nK();vF();Fz1();S3();b6();Q6();jz1();zF8();fF8();qz1();QU8();vz1();lz1();mz1();xK();V70();cz1();AU8();nf0();Yw8();Kw8();Hw8();Bw8();Tw8();nz1();Jx0();$70();kw8();Kx0();RA1();Sw8();TA1();bw8();lw8();dw8();iw8();nw8();ow8();rw8();XE8();dT1();ez1();KE8();qA1();EA1();ZY0();qE8();ST1();TJ();vB0();B40();hB1();W40();H40();Kj1();RE8();VE8();gz1();bE8();rv0();xE8();He();_00();CO();m5();BP1();uE8();oE8();jG();nz();eE8();eF0();Yq1();mW();iz1();IO();ML1();eF0();bZ0();V00();j01();ZP8();QE();YP8();Ns();Fz1();Mt();it();Hb0();TP8=_(xH(),1);TU5=new zU5,MU5=new Set([H3,uW,FD,UD,qj,f2])});var bP8={};O6(bP8,{resolveClientDir:()=>fU5,resolveAssetPathWithTraversalCheck:()=>vP8,isPathWithinDirectory:()=>_P8,createAssetHandler:()=>yU5});import{resolve as lQ0,dirname as CU5,join as SU5,extname as _U5,basename as vU5,sep as SP8}from"path";function bU5($,Z){if($===Z||vU5($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${SP8}assets${SP8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function _P8($,Z){let Q=lQ0(Z),Y=lQ0($);return Y===Q||Y.startsWith(Q+"/")}function vP8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=lQ0(Z,Q);if(!_P8(Y,Z))return null;return Y}function fU5($,Z="../client"){let Q=new URL($),Y=CU5(Q.pathname);return lQ0(Y,Z)}function yU5($={}){let{env:Z="production",clientDir:Q=xU5,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=vP8({requestPath:W,clientDir:Q});if(!K)return null;let H=SU5(K,"index.html"),F=lQ0(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(_U5(K))?[H,F]:[];for(let D of[K,...B])try{let O=Bun.file(D);if(await O.exists())return new Response(O,{headers:bU5(D,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var xU5="./dist/client";var xP8=()=>{};var fP8={};O6(fP8,{tryUpgradePreviewWs:()=>dU5,tryHandlePreviewHttp:()=>cU5,previewWebSocketHandler:()=>iU5,parsePreviewBaseDomain:()=>mU5,isPreviewWsData:()=>dg0,extractHandleFromHost:()=>Kq1});function uU5($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function lU5(){return new Response(hU5,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function mU5($){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 Kq1($,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 cU5($,Z){let Q=Kq1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return cQ0(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(_n)&&uU5($))return lU5();return X.headers.delete(_n),X}function cQ0($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function dg0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function dU5($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=Kq1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return cQ0(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return cQ0(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return cQ0(404,"not found");let W=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,K=$.headers.get("sec-websocket-protocol"),H=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return cQ0(426,"upgrade failed");return}function mQ0($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var gU5=256,hU5='<!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>',iU5;var yP8=L(()=>{g50();iU5={open($){let Z=$.data;if(!dg0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),mQ0($,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)=>{mQ0($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{mQ0($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!dg0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=gU5){mQ0($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!dg0(Z))return;mQ0($,Z,1000,"")}}});p$();var zq1="14";function Aq1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:zq1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}p$();import Zz8 from"pg";var Tq1=8314027461559302n,Qz8=600000,Yz8=500;async function qq1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=Qz8}=$,X=$.log??((K)=>console.log(K)),J=new Zz8.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",[Tq1.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 J$(Yz8)}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)",[Tq1.toString()])}catch{}await J.end().catch(()=>{})}}u1();Zh0();b6();function Z28(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function wh0($,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 GR1(){let $=Z28();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:wh0($,"--cpu-prof-dir")??process.cwd(),name:wh0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(wh0($,"--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.'}))}zh0();var XY0;function LR1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=u2();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(()=>{}),XY0=setInterval(()=>void Z().catch(()=>{}),$),XY0.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(XY0)clearInterval(XY0)}}import*as X28 from"bun:jsc";var{startSamplingProfiler:J28,samplingProfilerStackTraces:G28}=X28;function OR1(){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{J28()}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=G28()?.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 jR1(){GR1();let $=[LR1(),DR1(),OR1()];return()=>{for(let Z of $)Z()}}import{existsSync as eU5}from"fs";var gW=B0();YR1();var{DBOS:dQ0,DBOSClient:pU5}=await import("@dbos-inc/dbos-sdk");function Dq1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var nU5=[H3,uW,FD,UD,qj,f2,y2],tU5=gW.dispatchRole==="worker"?nU5:gW.dispatchRole==="api"?[]:void 0;dQ0.setConfig(Aq1({systemDatabaseUrl:Dq1(gW.databaseUrl,gW.databasePgSsl),poolSize:gW.dbosPoolSize,executorID:gW.podName,listenQueues:tU5}));var{createApp:oU5}=await Promise.resolve().then(() => (CP8(),kP8)),{isServerPath:sU5}=await Promise.resolve().then(() => (ZY0(),uq1)),{createAssetHandler:rU5,resolveClientDir:mP8}=await Promise.resolve().then(() => (xP8(),bP8)),aU5=gW.port,gP8=mP8(import.meta.url,"../client"),cP8=eU5(gP8)?gP8:mP8(import.meta.url,"../dist/client"),$N5=rU5({clientDir:cP8,isServerPath:sU5}),ZN5={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function QN5($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(ZN5))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:YN5,tryHandlePreviewHttp:XN5,tryUpgradePreviewWs:JN5,previewWebSocketHandler:Hq1,isPreviewWsData:Fq1}=await Promise.resolve().then(() => (yP8(),fP8)),{getOrInitSharedRunner:dP8}=await Promise.resolve().then(() => (SX(),Sn$)),iP8=YN5(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),hP8={baseDomain:iP8??"",getRunner:dP8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())dP8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var ig0=await oU5({clientDir:cP8}),Uq1=process.env.DBOS_CONDUCTOR_KEY?.trim(),uP8=process.env.DBOS_CONDUCTOR_URL?.trim();await qq1({databaseUrl:Dq1(gW.databaseUrl,gW.databasePgSsl)},()=>dQ0.launch({...Uq1?{conductorKey:Uq1}:{},...Uq1&&uP8?{conductorURL:uP8}:{}}));console.log(`[dbos] application version: ${dQ0.applicationVersion}`);var Nq1=5,Bq1=0;await e$(async()=>{Bq1++;try{return await ig0.initDbos()}catch($){let Z=Bq1>=Nq1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${Bq1}/${Nq1} failed, ${Z}`,$),$}},{maxAttempts:Nq1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});var GN5=Bun.serve({idleTimeout:0,port:aU5,hostname:"0.0.0.0",fetch:async($,Z)=>{if(iP8){let Y=await JN5($,Z,hP8);if(Y===void 0)return;if(Y)return Y;let X=await XN5($,hP8);if(X)return X}let Q=await $N5($);if(Q)return QN5(Q);return ig0.fetch($,{server:Z})},websocket:{open($){if(Fq1($.data))Hq1.open($)},message($,Z){if(Fq1($.data))Hq1.message($,Z)},close($){if(Fq1($.data))Hq1.close($)}},development:!1}),WN5=jR1();if(gW.localMode)Promise.resolve().then(() => (Qu(),dv0)).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(() => (Qu(),dv0));Z()}catch{}});var lP8=!1;async function KN5($){let Z;try{Z=await pU5.create({systemDatabaseUrl:Dq1(gW.databaseUrl,gW.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:uW,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:uW}),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 pg0($){if(lP8)return;lP8=!0,console.log(`
4507
4507
  [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{WN5(),ig0.markShuttingDown();let J=Rq1(gW.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await J$(J),await GN5.stop(!0);let G=dQ0.executorID;await dQ0.shutdown(),await KN5(G),await ig0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>pg0("SIGTERM"));process.on("SIGINT",()=>pg0("SIGINT"));process.on("SIGHUP",()=>pg0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),pg0("uncaughtException")});