decocms 4.367.5 → 4.367.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/dist/client/assets/{AlertCircle-DnN73amm.js → AlertCircle-CZODjB-G.js} +1 -1
  2. package/dist/client/assets/{AreaChart-tgDBMHH-.js → AreaChart-CIyBmnKJ.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-XVmyXzT1.js → ArrowLeft-qXobBdxD.js} +1 -1
  4. package/dist/client/assets/{ArrowRight-C5X_ZNy2.js → ArrowRight-_qaicB3i.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-CPI9CNny.js → ArrowUp-B2y3FAZT.js} +1 -1
  6. package/dist/client/assets/{Check-Bxv_6vm1.js → Check-DYuLLcXz.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-D6A5oB4p.js → CheckCircle-Cpa5ukkn.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-CnNj4eZz.js → ChevronRight-BvrNCsKT.js} +1 -1
  9. package/dist/client/assets/{ChevronUp-DqQeOV1H.js → ChevronUp-B-GxN-tN.js} +1 -1
  10. package/dist/client/assets/{Copy01-lznapbKA.js → Copy01-BKbbYkAO.js} +1 -1
  11. package/dist/client/assets/{CreditCard01-BXcJiS22.js → CreditCard01-D16_sfKz.js} +1 -1
  12. package/dist/client/assets/{Database01-ClkFDWDG.js → Database01-C9bPAMOv.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-B2EdGD-H.js → DotsVertical-BKAvE_4x.js} +1 -1
  14. package/dist/client/assets/{Download01-BjL9Q4CH.js → Download01-BvE_0avp.js} +1 -1
  15. package/dist/client/assets/{ErrorBarContext-BYd7dlrZ.js → ErrorBarContext-C42cr3OZ.js} +1 -1
  16. package/dist/client/assets/{Eye-BunsX0IL.js → Eye-CO0I0F0e.js} +1 -1
  17. package/dist/client/assets/{File02-ChvmdkAp.js → File02-Cnt06RSY.js} +1 -1
  18. package/dist/client/assets/{GitBranch01-Bj2U--5C.js → GitBranch01-BPIVJl4U.js} +1 -1
  19. package/dist/client/assets/{Globe01-C44OPauE.js → Globe01-DjDoxbql.js} +1 -1
  20. package/dist/client/assets/{HardDrive-BuYkYSPd.js → HardDrive-UFyvehqQ.js} +1 -1
  21. package/dist/client/assets/{Image01-BHWSoYgY.js → Image01-D3ZQNp9r.js} +1 -1
  22. package/dist/client/assets/{Key01-q0G-NfYN.js → Key01-0kVvyKcG.js} +1 -1
  23. package/dist/client/assets/{Link01-BYdywRZL.js → Link01-Ct7pxTAu.js} +1 -1
  24. package/dist/client/assets/{LinkExternal01-CYW6oMa4.js → LinkExternal01-DCfxP5B_.js} +1 -1
  25. package/dist/client/assets/{MessageCircle01-PKJU_kXZ.js → MessageCircle01-CweHuqp7.js} +1 -1
  26. package/dist/client/assets/{Monitor01-v-NC0LAC.js → Monitor01-BWZHqfxa.js} +1 -1
  27. package/dist/client/assets/{Package-BlQhffiq.js → Package-T9dujty4.js} +1 -1
  28. package/dist/client/assets/{Palette-CKV7NEd1.js → Palette-B9i9hnCi.js} +1 -1
  29. package/dist/client/assets/{Play-CMyxMbjO.js → Play-BIZK_qUZ.js} +1 -1
  30. package/dist/client/assets/{Plus-DGRcwD1C.js → Plus-DaMIkku0.js} +1 -1
  31. package/dist/client/assets/{Printer-LFyevNNM.js → Printer-AWNoUKRJ.js} +1 -1
  32. package/dist/client/assets/{SearchLg-C3ZKLzF0.js → SearchLg-C2sftj0S.js} +1 -1
  33. package/dist/client/assets/{SearchMd-BJ1JfDmo.js → SearchMd-B6arCmyn.js} +1 -1
  34. package/dist/client/assets/{Sector-CSsOzbl3.js → Sector-BM01w_NE.js} +1 -1
  35. package/dist/client/assets/{Settings02-BxjmvoL1.js → Settings02-Cng3FY1l.js} +1 -1
  36. package/dist/client/assets/{Share07-DV6EcWz3.js → Share07-BgGqkker.js} +1 -1
  37. package/dist/client/assets/{Shield01-CVAE-iA-.js → Shield01-CVF7EZQb.js} +1 -1
  38. package/dist/client/assets/{Stars01-CDRvN6fQ.js → Stars01-DSWmseOt.js} +1 -1
  39. package/dist/client/assets/{Sun-ByqVPxWa.js → Sun-B2S_0TDV.js} +1 -1
  40. package/dist/client/assets/{SwitchHorizontal01-CSa05wqz.js → SwitchHorizontal01-BaPOYupn.js} +1 -1
  41. package/dist/client/assets/{Tool01-C2sl4oS8.js → Tool01-DW_T3YR5.js} +1 -1
  42. package/dist/client/assets/{Tool02-Boab0JMh.js → Tool02-zLL5jksN.js} +1 -1
  43. package/dist/client/assets/{Trash01-D10MWaS7.js → Trash01-CchLM2HV.js} +1 -1
  44. package/dist/client/assets/{TrendUp01-CsD4AjDF.js → TrendUp01-CSoUpxS1.js} +1 -1
  45. package/dist/client/assets/{Upload01-CP2Gss0k.js → Upload01-G3c4UCfB.js} +1 -1
  46. package/dist/client/assets/{User01-HCRUnfwJ.js → User01-CZRm273k.js} +1 -1
  47. package/dist/client/assets/{UserSquare-CzBMUItn.js → UserSquare-BdoEkD8Z.js} +1 -1
  48. package/dist/client/assets/{Users01-4eNyBeFs.js → Users01-D_H_0-Jf.js} +1 -1
  49. package/dist/client/assets/{Users03-DZxrVKZM.js → Users03-DSBIUomT.js} +1 -1
  50. package/dist/client/assets/{X-Df68-kGa.js → X-Dr0Tqjzv.js} +1 -1
  51. package/dist/client/assets/{XCircle-nMBHI38d.js → XCircle-Ce8PGmrS.js} +1 -1
  52. package/dist/client/assets/{XClose-Biw-w8yi.js → XClose-5naA93fy.js} +1 -1
  53. package/dist/client/assets/{Zap-dUD3-QQY.js → Zap-XMkPrxNc.js} +1 -1
  54. package/dist/client/assets/{ZoomOut-CR5b1C5j.js → ZoomOut-BLK0GcJv.js} +1 -1
  55. package/dist/client/assets/{access-gate-CujU4RfE.js → access-gate-Cql3KqwB.js} +1 -1
  56. package/dist/client/assets/{add-connection-dialog--adN0Sqj.js → add-connection-dialog-BFK-aGDM.js} +1 -1
  57. package/dist/client/assets/{agent-analytics-eWHu5DTt.js → agent-analytics-BiLU3geK.js} +1 -1
  58. package/dist/client/assets/agent-app-CmHjLSBh.js +1 -0
  59. package/dist/client/assets/{agent-assets-Cn7JoWXb.js → agent-assets-l4c7ivCP.js} +1 -1
  60. package/dist/client/assets/{agent-automation-BSKvYosf.js → agent-automation-Dr_aQL2N.js} +1 -1
  61. package/dist/client/assets/{agent-automations-DF1MxYOz.js → agent-automations-BtQVYGNC.js} +1 -1
  62. package/dist/client/assets/{agent-connect-sources-xG1C2rM6.js → agent-connect-sources-B72Z2yOq.js} +1 -1
  63. package/dist/client/assets/agent-deck-BmbZkAAh.js +1 -0
  64. package/dist/client/assets/{agent-e2e-Dn0A3WpY.js → agent-e2e-BC-S1G-I.js} +1 -1
  65. package/dist/client/assets/agent-file-DWz6GUfE.js +1 -0
  66. package/dist/client/assets/{agent-git-CY5p5ep3.js → agent-git-BCY9JF0p.js} +1 -1
  67. package/dist/client/assets/{agent-hosting-aXTVd4NM.js → agent-hosting-BTRnh7Qw.js} +1 -1
  68. package/dist/client/assets/{agent-icon-CQLL7oQA.js → agent-icon-I_u5FzRN.js} +1 -1
  69. package/dist/client/assets/agent-library-file-Buf4K-5l.js +1 -0
  70. package/dist/client/assets/{agent-monitor-BPy3Zx5C.js → agent-monitor-C3BUSOjB.js} +1 -1
  71. package/dist/client/assets/{agent-overview-Bdo9pXFc.js → agent-overview-DLgGJyEN.js} +1 -1
  72. package/dist/client/assets/agent-settings-D9FokKv0.js +1 -0
  73. package/dist/client/assets/{agent-site-editor-BUlEwPeW.js → agent-site-editor-CcVudugZ.js} +1 -1
  74. package/dist/client/assets/agent-site-editor-code-Bjs5yYWF.js +2 -0
  75. package/dist/client/assets/{agent-site-editor-content-C1e9OU1F.js → agent-site-editor-content-C_xKa1S3.js} +2 -2
  76. package/dist/client/assets/{agent-site-editor-preview-CHL3OjfL.js → agent-site-editor-preview-DHkNf2Kb.js} +3 -3
  77. package/dist/client/assets/agent-view-DMFjk5Go.js +1 -0
  78. package/dist/client/assets/{agent-view-guard-CDMKVKUO.js → agent-view-guard-jbDY82eS.js} +1 -1
  79. package/dist/client/assets/{agents-list-BOOwFdef.js → agents-list-CF5eQ1pF.js} +1 -1
  80. package/dist/client/assets/{ai-providers-sMmu9wsX.js → ai-providers-COjB4NMg.js} +1 -1
  81. package/dist/client/assets/{alert-C14pJE8a.js → alert-DwSbSu1x.js} +1 -1
  82. package/dist/client/assets/{alert-dialog-UIve_Qbz.js → alert-dialog-dzu9U-o1.js} +1 -1
  83. package/dist/client/assets/api-keys-CWLFncf0.js +1 -0
  84. package/dist/client/assets/{api-keys-D2jNxWS5.js → api-keys-Cpho4Cho.js} +1 -1
  85. package/dist/client/assets/app-editor-BwzQ2tDT.js +1 -0
  86. package/dist/client/assets/{asset-utils-6ysSrocK.js → asset-utils-DLlbY7-O.js} +1 -1
  87. package/dist/client/assets/{auth-DmzS8LV2.js → auth-UveS8wF5.js} +1 -1
  88. package/dist/client/assets/{auth-catchall-Ca2pTkME.js → auth-catchall-CxHpvtO-.js} +1 -1
  89. package/dist/client/assets/{auth-entry-C64nF1Ms.js → auth-entry-BVtguEOj.js} +1 -1
  90. package/dist/client/assets/{auth-split-layout-d1DjV_Yi.js → auth-split-layout-DzJReBpa.js} +1 -1
  91. package/dist/client/assets/{authenticate-and-persist-oauth-DFWHiV6v.js → authenticate-and-persist-oauth-CrVNvw_C.js} +1 -1
  92. package/dist/client/assets/{automation-list-row-B9jAq9z4.js → automation-list-row-CXkhnqzA.js} +1 -1
  93. package/dist/client/assets/{automation-runs-BzTOS9F7.js → automation-runs-DBxHk2or.js} +1 -1
  94. package/dist/client/assets/{automations-DDJD4roA.js → automations-DFVUH58q.js} +1 -1
  95. package/dist/client/assets/{autosend-DJaBf7X2.js → autosend-BsJQ1aCs.js} +1 -1
  96. package/dist/client/assets/{avatar-BkGSc9H5.js → avatar-DV69nhm1.js} +1 -1
  97. package/dist/client/assets/{badge-CZpoNlx_.js → badge-Bx6TdTjC.js} +1 -1
  98. package/dist/client/assets/{block-document-BetLtfOz.js → block-document-Bz-5kssp.js} +1 -1
  99. package/dist/client/assets/{blocks-preview-workspace-context-Lz1gj5TO.js → blocks-preview-workspace-context-CzxgcZDm.js} +1 -1
  100. package/dist/client/assets/{breadcrumb-BHbw_kt8.js → breadcrumb-D4EWX36X.js} +1 -1
  101. package/dist/client/assets/{buckets-C2TBlqFE.js → buckets-B9z_Rm90.js} +1 -1
  102. package/dist/client/assets/{build-improve-prompt-doc-2Kj0ps7w.js → build-improve-prompt-doc-BWFSRTpm.js} +1 -1
  103. package/dist/client/assets/{bulk-category-panel-BT7d_iMl.js → bulk-category-panel-Dq461a8g.js} +1 -1
  104. package/dist/client/assets/{calendar-BJTEYvCF.js → calendar-BGdb4p0V.js} +1 -1
  105. package/dist/client/assets/{capability-load-error-wXKD3wMZ.js → capability-load-error-Dnwh9vPw.js} +1 -1
  106. package/dist/client/assets/{cards-CGLoDCpv.js → cards-CnQ4nU1q.js} +1 -1
  107. package/dist/client/assets/{category-editor-1f2gwKY5.js → category-editor-DYvQntUV.js} +1 -1
  108. package/dist/client/assets/{chart-ReltbOFE.js → chart-D7o3Rjgy.js} +1 -1
  109. package/dist/client/assets/{chat-context-CCpuTz2y.js → chat-context-Bj6XM8r6.js} +1 -1
  110. package/dist/client/assets/{chat-draft-BCtS6jQv.js → chat-draft-B57QKpbd.js} +1 -1
  111. package/dist/client/assets/{checkbox-C_yQd9-l.js → checkbox-DXk_ASm3.js} +1 -1
  112. package/dist/client/assets/{choose-editor-iAt-xDCA.js → choose-editor-yiYqZgm0.js} +1 -1
  113. package/dist/client/assets/{cli-auth-success-D0CsTuda.js → cli-auth-success-DaIMiHKG.js} +1 -1
  114. package/dist/client/assets/{client-icons-hGGX6Uo0.js → client-icons-BIZcUQix.js} +1 -1
  115. package/dist/client/assets/{collapsible-BBXFOyeS.js → collapsible-DvCpQaDP.js} +1 -1
  116. package/dist/client/assets/{collection-detail-CcxacW9K.js → collection-detail-GwafUKCA.js} +1 -1
  117. package/dist/client/assets/{collection-display-button-DwJpdHBM.js → collection-display-button-C8HgvUa3.js} +1 -1
  118. package/dist/client/assets/{collection-search-u7viusIZ.js → collection-search-BgR7E5C_.js} +1 -1
  119. package/dist/client/assets/{collection-table-wrapper-Dt0i03qe.js → collection-table-wrapper-CenPQBXL.js} +1 -1
  120. package/dist/client/assets/{collection-tabs-DCuy8V17.js → collection-tabs-BKMxlcTD.js} +1 -1
  121. package/dist/client/assets/{command-tKFpnUWi.js → command-PF8SQ01C.js} +1 -1
  122. package/dist/client/assets/{command-palette-store-D_KrAOxe.js → command-palette-store-3XeVzDCK.js} +1 -1
  123. package/dist/client/assets/{companion-mcps-section-CYcavt6d.js → companion-mcps-section-BcH1woZ_.js} +1 -1
  124. package/dist/client/assets/{connect-BORMc4s_.js → connect-cRr5yrcf.js} +1 -1
  125. package/dist/client/assets/{connect-layout-DBwBtlb7.js → connect-layout-DlS-pJxG.js} +1 -1
  126. package/dist/client/assets/{connection-BAtKmP5z.js → connection-D83jUgKt.js} +1 -1
  127. package/dist/client/assets/{connection-card-DmcRJGd6.js → connection-card-B6pHDnUn.js} +1 -1
  128. package/dist/client/assets/{connection-detail-Bl9OQ2_2.js → connection-detail-cjhq0_Le.js} +1 -1
  129. package/dist/client/assets/{connection-form-helpers-ChXzy84U.js → connection-form-helpers-CjgrOGRh.js} +1 -1
  130. package/dist/client/assets/{connections-BM_owntf.js → connections-jZ71xb1b.js} +1 -1
  131. package/dist/client/assets/{create-organization-dialog-D2vLvEWI.js → create-organization-dialog-Wy8ivV4K.js} +1 -1
  132. package/dist/client/assets/{decofile-api-DOQaHe6-.js → decofile-api-DGTmPuak.js} +1 -1
  133. package/dist/client/assets/{decopilot-U6qm51mC.js → decopilot-BQ5v61IW.js} +1 -1
  134. package/dist/client/assets/{dialog-CDIoGuZ9.js → dialog-DKHdGeG-.js} +1 -1
  135. package/dist/client/assets/{discover-CJtERFqE.js → discover-BpZ5XWNf.js} +1 -1
  136. package/dist/client/assets/{domain-settings-AexGm65m.js → domain-settings-bYxFZI5Z.js} +1 -1
  137. package/dist/client/assets/{download-app-dialog-CZpe9Bpu.js → download-app-dialog-BhmQVCrs.js} +1 -1
  138. package/dist/client/assets/{drawer-DD_d9Ihm.js → drawer-B1TxBXeW.js} +1 -1
  139. package/dist/client/assets/{dropdown-menu-lXpvP8fX.js → dropdown-menu-CoycaRIZ.js} +1 -1
  140. package/dist/client/assets/{editor-pfBZu3U7.js → editor-BEf-Idam.js} +1 -1
  141. package/dist/client/assets/{empty-state-CUxtDNbB.js → empty-state-BN3l0e1m.js} +1 -1
  142. package/dist/client/assets/{empty-state-B-bUlmIL.js → empty-state-BuDUIKwc.js} +1 -1
  143. package/dist/client/assets/{extract-connection-data-BdkbURJm.js → extract-connection-data-Bs0-7FAn.js} +1 -1
  144. package/dist/client/assets/{feature-gate-ilSWzddu.js → feature-gate-DXl7j_Gb.js} +1 -1
  145. package/dist/client/assets/{feature-paywall-CGQIXFyp.js → feature-paywall-2uPHyVRd.js} +1 -1
  146. package/dist/client/assets/{file-explorer-Y4B8gahR.js → file-explorer-CWZPR_uA.js} +1 -1
  147. package/dist/client/assets/{file-preview-BArnKs-h.js → file-preview-CZ1TplhI.js} +1 -1
  148. package/dist/client/assets/{file-share-button-yaLXJrdZ.js → file-share-button-I_P-fFZ5.js} +1 -1
  149. package/dist/client/assets/{file-type-icon-Xl3X9h9X.js → file-type-icon-SwABlaSO.js} +1 -1
  150. package/dist/client/assets/{folder-icon-DgraP_jj.js → folder-icon-Bj6hz7oH.js} +1 -1
  151. package/dist/client/assets/{form-D3bb_HbP.js → form-CCI8usbr.js} +1 -1
  152. package/dist/client/assets/{gateway-client-MOoaTBYd.js → gateway-client-2Mbrw7Hg.js} +1 -1
  153. package/dist/client/assets/{general-DGadMqdI.js → general-T1zzubww.js} +1 -1
  154. package/dist/client/assets/{github-icon-OYnbrvjW.js → github-icon-CCyh_tld.js} +1 -1
  155. package/dist/client/assets/{home-R10BeitL.js → home-nMTACPWA.js} +1 -1
  156. package/dist/client/assets/{hooks-DxGBuaYU.js → hooks-C4BbSdNW.js} +1 -1
  157. package/dist/client/assets/{hooks-BFEQOnMH.js → hooks-DxP9ms8F.js} +1 -1
  158. package/dist/client/assets/{index-BeOidgbu.js → index-B7wVUCeI.js} +1 -1
  159. package/dist/client/assets/{index-ClORI_ru.js → index-BIFBhz6Y.js} +1 -1
  160. package/dist/client/assets/{index-DB6Ge3je.js → index-BW3bCYgD.js} +1 -1
  161. package/dist/client/assets/{index-H6rDZVZ0.js → index-BeW32OQZ.js} +1 -1
  162. package/dist/client/assets/{index-BcAU6jUB.js → index-BpW_HPV1.js} +1 -1
  163. package/dist/client/assets/{index-DtMPShzz.js → index-BzGfYuHA.js} +1 -1
  164. package/dist/client/assets/{index-36q0KH9q.js → index-C1OUd215.js} +1 -1
  165. package/dist/client/assets/{index-DnAk9Nyh.js → index-CR7IhZdQ.js} +1 -1
  166. package/dist/client/assets/{index-DBO9cCXt.js → index-CfiHR5p3.js} +2 -2
  167. package/dist/client/assets/{index-7GIBUNmw.js → index-D6hy4U5O.js} +1 -1
  168. package/dist/client/assets/{index-IErtOCOr.js → index-DplUenCs.js} +1 -1
  169. package/dist/client/assets/{index-BO3LYThj.js → index-DvsuDjpW.js} +1 -1
  170. package/dist/client/assets/{index-X5MI3pus.js → index-L41E_jdu.js} +1 -1
  171. package/dist/client/assets/{index-CfkgapAu.js → index-S-urKMuN.js} +1 -1
  172. package/dist/client/assets/{index-redirect-DJd8-Xc3.js → index-redirect-D31X29B5.js} +1 -1
  173. package/dist/client/assets/{index-C_U_Ej5y.js → index-wju8DM5a.js} +1 -1
  174. package/dist/client/assets/{infiniteQueryObserver-B2DNwqpn.js → infiniteQueryObserver-F_wqd-Rj.js} +1 -1
  175. package/dist/client/assets/{infra-billing-B7aFZq_z.js → infra-billing-D0PNqi3s.js} +1 -1
  176. package/dist/client/assets/{input-BqEtrH9V.js → input-DOqceFPC.js} +1 -1
  177. package/dist/client/assets/{input-MnCp8I9S.js → input-S-gsq7gD.js} +1 -1
  178. package/dist/client/assets/{input-Cib8uNJq.js → input-SZCoDRD-.js} +1 -1
  179. package/dist/client/assets/{integration-icon-CI_HCWP1.js → integration-icon-_HXUWC0Q.js} +1 -1
  180. package/dist/client/assets/{label-C7gaXCZI.js → label-DCUE6TYd.js} +1 -1
  181. package/dist/client/assets/{last-preview-page-CjF-vPej.js → last-preview-page-D9Fx5pKm.js} +1 -1
  182. package/dist/client/assets/{layout-Da4R3PKB.js → layout-DRh2IKmg.js} +1 -1
  183. package/dist/client/assets/{legacy-agents-deep-C5W7c4qv.js → legacy-agents-deep-BPmqpQyn.js} +1 -1
  184. package/dist/client/assets/{legacy-main-redirect-C4YsYRGW.js → legacy-main-redirect-34brc64A.js} +1 -1
  185. package/dist/client/assets/{library-Uh4LG-cO.js → library-D0EEtDE-.js} +1 -1
  186. package/dist/client/assets/{login-BCqFTTN3.js → login-wXsz7PP7.js} +1 -1
  187. package/dist/client/assets/{markdown-BA0OOTT5.js → markdown-CCv5IlPx.js} +1 -1
  188. package/dist/client/assets/{mcp-app-renderer-DNK8Ww9U.js → mcp-app-renderer-BVpwtvW6.js} +1 -1
  189. package/dist/client/assets/{mcp-oauth-E1-_MSLJ.js → mcp-oauth-DbZXTEaP.js} +1 -1
  190. package/dist/client/assets/{members-DMFS5j6T.js → members-D8EXLICP.js} +1 -1
  191. package/dist/client/assets/{message-templates-CHL289gR.js → message-templates-xXuDAWxI.js} +1 -1
  192. package/dist/client/assets/{mini-report-page-D55GaVnW.js → mini-report-page-BuRwBHqD.js} +1 -1
  193. package/dist/client/assets/{mock-board-CJ3XB0zZ.js → mock-board-CRzDhPtf.js} +3 -3
  194. package/dist/client/assets/{monaco-editor-DcRJRpxQ.js → monaco-editor-QBiS6INp.js} +1 -1
  195. package/dist/client/assets/{monitoring-stats-row-C2LqUf0n.js → monitoring-stats-row-YHUVjX34.js} +1 -1
  196. package/dist/client/assets/{multi-select-Bjr_EhQN.js → multi-select-BPe8FRks.js} +1 -1
  197. package/dist/client/assets/{mustache-itxfxEAe.js → mustache-Cghs0xAa.js} +1 -1
  198. package/dist/client/assets/{oauth-callback-BWcHdGO5.js → oauth-callback-DasyYGDW.js} +1 -1
  199. package/dist/client/assets/{oauth-callback-ai-provider-BTf9EDbX.js → oauth-callback-ai-provider-PZGmoG1J.js} +1 -1
  200. package/dist/client/assets/{onboarding-BBCR8xK6.js → onboarding-CxwToftc.js} +1 -1
  201. package/dist/client/assets/{optimistic-project-sidebar-views-BUuVL5HA.js → optimistic-project-sidebar-views-CkdziasT.js} +1 -1
  202. package/dist/client/assets/{organization-choice-DzRgCtEh.js → organization-choice-DyW08sxK.js} +1 -1
  203. package/dist/client/assets/{orgs-DQtWe6lg.js → orgs-DJ8iJmJH.js} +1 -1
  204. package/dist/client/assets/{page-seo-form-BNgf6hzv.js → page-seo-form-Di_npWJ4.js} +1 -1
  205. package/dist/client/assets/{pair-Cq_eCXFK.js → pair-Dpg5RzdY.js} +1 -1
  206. package/dist/client/assets/{plan-ladder-C-CKfgUk.js → plan-ladder-ClS63sS8.js} +1 -1
  207. package/dist/client/assets/{popover-DR-dG5KR.js → popover-RErMjkys.js} +1 -1
  208. package/dist/client/assets/{post-calendar-BYiZ29h-.js → post-calendar-Ba_bnQmW.js} +1 -1
  209. package/dist/client/assets/{post-editor-CV_ATL0Q.js → post-editor-CMawN_7j.js} +1 -1
  210. package/dist/client/assets/{preview-content-bwgn_bz9.js → preview-content-Cir3xjov.js} +1 -1
  211. package/dist/client/assets/{preview-dialog-Cfw3j9Dw.js → preview-dialog-DXRDlQ04.js} +1 -1
  212. package/dist/client/assets/{primitives-Cm5UH1ss.js → primitives-D5fyRotM.js} +1 -1
  213. package/dist/client/assets/{profile-H1FxU5Go.js → profile-CARb014r.js} +1 -1
  214. package/dist/client/assets/{project-app-view-Cp5-B5A0.js → project-app-view-CbZ9X9YB.js} +1 -1
  215. package/dist/client/assets/{project-feed-BMnjN7RJ.js → project-feed-BnvodKMh.js} +1 -1
  216. package/dist/client/assets/{project-icon-CDxBSoB_.js → project-icon-B0ih2u61.js} +1 -1
  217. package/dist/client/assets/project-reports-N4YBKsf_.js +1 -0
  218. package/dist/client/assets/project-tasks-Bhadpjy2.js +1 -0
  219. package/dist/client/assets/{prompts-Xn8WtcY4.js → prompts-DC4p_0y3.js} +1 -1
  220. package/dist/client/assets/record-editor-B7I5ENzo.js +1 -0
  221. package/dist/client/assets/{redirect-editor-DLE97NUb.js → redirect-editor-B55pPerd.js} +1 -1
  222. package/dist/client/assets/registry-C0G-_nW5.js +2 -0
  223. package/dist/client/assets/{registry-layout-CrzAqZeN.js → registry-layout-hY2gP5kb.js} +1 -1
  224. package/dist/client/assets/reports-B1m4nLcC.js +1 -0
  225. package/dist/client/assets/{reports-CV3sX1WT.js → reports-BRDL0pEv.js} +1 -1
  226. package/dist/client/assets/{reports-onboarding-UzOhW8yd.js → reports-onboarding-CVlJWsoz.js} +1 -1
  227. package/dist/client/assets/{reports-tab-CPU-wV1j.js → reports-tab-DSQtYmT9.js} +2 -2
  228. package/dist/client/assets/{repositories-CABW2wYh.js → repositories-D8heZRgl.js} +1 -1
  229. package/dist/client/assets/{repository-import-picker-BqkK7zXL.js → repository-import-picker-C2CebsOL.js} +1 -1
  230. package/dist/client/assets/{repository-picker-BsfTUz0Z.js → repository-picker-5XZZ15v0.js} +1 -1
  231. package/dist/client/assets/{require-capability-DCm3xEVH.js → require-capability-BJkKy0kt.js} +1 -1
  232. package/dist/client/assets/{required-auth-layout-By-Cm9L3.js → required-auth-layout-BwX4AD0R.js} +1 -1
  233. package/dist/client/assets/{reset-password-BbkaUrpa.js → reset-password-D0tmp0EO.js} +1 -1
  234. package/dist/client/assets/{resizable-noYdBaXy.js → resizable-DDt8g8vK.js} +1 -1
  235. package/dist/client/assets/{review-settings-xEEquwgL.js → review-settings-BuR2yqLd.js} +1 -1
  236. package/dist/client/assets/{rich-text-link-control-D0WOrLmt.js → rich-text-link-control-BU04B-4N.js} +1 -1
  237. package/dist/client/assets/{roles-0HIRr5Ri.js → roles-Dlq8_r8a.js} +1 -1
  238. package/dist/client/assets/{route-DCadoPQC.js → route-CVpzQ3gM.js} +1 -1
  239. package/dist/client/assets/{route-DKnEJmhu.js → route-DE-oHInD.js} +1 -1
  240. package/dist/client/assets/{route-DrLKmE9A.js → route-Kp0M8uVs.js} +1 -1
  241. package/dist/client/assets/{runnable-block-editor-pB3LBrJG.js → runnable-block-editor-CS_U3fa-.js} +1 -1
  242. package/dist/client/assets/{sandbox-lifecycle-context-DYGk3uhe.js → sandbox-lifecycle-context-CsT5D-QV.js} +1 -1
  243. package/dist/client/assets/{schema-BeeGelcJ.js → schema-kS1q2dfz.js} +1 -1
  244. package/dist/client/assets/{scroll-area-DMzzzKoj.js → scroll-area-CXYGaVSO.js} +1 -1
  245. package/dist/client/assets/{search-input-DT6HnLyR.js → search-input-BtpfjT5l.js} +1 -1
  246. package/dist/client/assets/{secrets-CWw6j4gW.js → secrets-DriRRH1t.js} +1 -1
  247. package/dist/client/assets/{sections-editor-CXpbeOKT.js → sections-editor-C9C533d2.js} +1 -1
  248. package/dist/client/assets/{select-Bg8M-SBL.js → select-BOl9wnf6.js} +1 -1
  249. package/dist/client/assets/{select-model-BTAEn-o-.js → select-model-S4XMti-S.js} +1 -1
  250. package/dist/client/assets/{seo-editor-CsF8qWXD.js → seo-editor-BFKhbHb8.js} +1 -1
  251. package/dist/client/assets/{settings-tab-a6jg2R8E.js → settings-tab-CzTdGYon.js} +1 -1
  252. package/dist/client/assets/{sheet-DXK46bFL.js → sheet-Ceo6cjp6.js} +1 -1
  253. package/dist/client/assets/{shell-layout-zxLGAzC4.js → shell-layout-CQI5EYIN.js} +1 -1
  254. package/dist/client/assets/{sidebar-H--OWLmJ.js → sidebar-Cr04YrvT.js} +1 -1
  255. package/dist/client/assets/{skill-preview-y37W05KI.js → skill-preview-CJENC0FV.js} +1 -1
  256. package/dist/client/assets/{skills-ZTxx2FQt.js → skills-_wNQ3Q4Z.js} +1 -1
  257. package/dist/client/assets/{sso-DtS1pp7O.js → sso-DcjvBhN8.js} +1 -1
  258. package/dist/client/assets/{store-CCMmsV8z.js → store-C8yaccqA.js} +1 -1
  259. package/dist/client/assets/store-registry-C4goSG7S.js +2 -0
  260. package/dist/client/assets/{switch-BJbN9Hof.js → switch-DbzO6PiM.js} +1 -1
  261. package/dist/client/assets/{synced-repos-dT-fmTlS.js → synced-repos-CUy4rER9.js} +1 -1
  262. package/dist/client/assets/{table-CPJOwfRj.js → table-CUSmiMk_.js} +1 -1
  263. package/dist/client/assets/{tabs-M6MjL7bf.js → tabs-52cPaZXm.js} +1 -1
  264. package/dist/client/assets/{task-board-DqB2XE8W.js → task-board-CurTs85l.js} +1 -1
  265. package/dist/client/assets/{task-route-D_gHz_Ej.js → task-route-Bm0ou-_S.js} +1 -1
  266. package/dist/client/assets/{task-status-C7QvXgZU.js → task-status-BaM-QAj1.js} +1 -1
  267. package/dist/client/assets/tasks-B9F5PMjK.js +1 -0
  268. package/dist/client/assets/{tasks-DWgtKv6L.js → tasks-BwcO5_EM.js} +1 -1
  269. package/dist/client/assets/{textarea-DHCNd9eE.js → textarea-Q7sXwojB.js} +1 -1
  270. package/dist/client/assets/{thread-intent-C9vyWsKq.js → thread-intent-DEVJhxVt.js} +1 -1
  271. package/dist/client/assets/{thread-route-Ikku3vet.js → thread-route-D6xj1qQJ.js} +1 -1
  272. package/dist/client/assets/{thread-route-CsLpKMHf.js → thread-route-Dwt9n8IO.js} +1 -1
  273. package/dist/client/assets/{thread-sheet-body-DWP_ioKW.js → thread-sheet-body-BZp0HOAe.js} +1 -1
  274. package/dist/client/assets/{toggle-group-wc_J_R0E.js → toggle-group-CXPhZI2J.js} +1 -1
  275. package/dist/client/assets/{toolbar-icon-button-BUHr7qyk.js → toolbar-icon-button-B5qgEXx3.js} +1 -1
  276. package/dist/client/assets/{tooltip-jmvQwLuk.js → tooltip-DIW02rf-.js} +1 -1
  277. package/dist/client/assets/{track-DyNbDPiZ.js → track-B4UKRWe_.js} +1 -1
  278. package/dist/client/assets/{types-raXS_M8t.js → types-B3jTqzVf.js} +1 -1
  279. package/dist/client/assets/{usage-stats-CHgRSpwy.js → usage-stats-Bb9Gp-Dh.js} +1 -1
  280. package/dist/client/assets/{use-ai-providers-CX8K3zeX.js → use-ai-providers-DMafZHsF.js} +1 -1
  281. package/dist/client/assets/{use-automations-jgaie9h_.js → use-automations-COtBDrNr.js} +1 -1
  282. package/dist/client/assets/{use-autosave-DKm-ZzOp.js → use-autosave-CVgSUfQU.js} +1 -1
  283. package/dist/client/assets/{use-connect-companion-BBY2aTFC.js → use-connect-companion-DMsU19hB.js} +1 -1
  284. package/dist/client/assets/{use-connection-B3aUmG9U.js → use-connection-Cgge7ejL.js} +1 -1
  285. package/dist/client/assets/{use-copy-BZxbbwx9.js → use-copy-Cfn-m-ZW.js} +1 -1
  286. package/dist/client/assets/{use-create-virtual-mcp-DA_KW4Fn.js → use-create-virtual-mcp-CIJNntTR.js} +1 -1
  287. package/dist/client/assets/{use-date-fns-locale-C_d3iiTU.js → use-date-fns-locale-BUWupqqb.js} +1 -1
  288. package/dist/client/assets/{use-debounced-autosave-CQrsVPU1.js → use-debounced-autosave-Z2J2ec3T.js} +1 -1
  289. package/dist/client/assets/{use-debounced-value-VSXNufNs.js → use-debounced-value-DfSh3fpE.js} +1 -1
  290. package/dist/client/assets/{use-deco-credits-D0y4xTjc.js → use-deco-credits-Du018wK9.js} +1 -1
  291. package/dist/client/assets/{use-decopilot-events-DeVrdd52.js → use-decopilot-events-B-nXlaQa.js} +1 -1
  292. package/dist/client/assets/{use-delete-connection-DQ-3ghw2.js → use-delete-connection-CbdREeJX.js} +1 -1
  293. package/dist/client/assets/{use-deployment-admin-CO4dsbjq.js → use-deployment-admin-BfQ856y9.js} +1 -1
  294. package/dist/client/assets/{use-entitlements-kcDnxiY2.js → use-entitlements-Bir1zQcD.js} +1 -1
  295. package/dist/client/assets/{use-fast-preview-draft-url-DkEWSnVl.js → use-fast-preview-draft-url-CI4dqTq2.js} +1 -1
  296. package/dist/client/assets/{use-file-configs-BZu8P36G.js → use-file-configs-B04A692l.js} +1 -1
  297. package/dist/client/assets/{use-infinite-scroll-Ba--hX3Q.js → use-infinite-scroll-NmeaxM7f.js} +1 -1
  298. package/dist/client/assets/{use-join-requests-BZznmzvf.js → use-join-requests-DI0a8svX.js} +1 -1
  299. package/dist/client/assets/{use-main-panel-tabs-CcuQQ7t9.js → use-main-panel-tabs-CBiJ8PZZ.js} +1 -1
  300. package/dist/client/assets/{use-mcp-auth-status--E_iOlPq.js → use-mcp-auth-status-B5PR04-x.js} +1 -1
  301. package/dist/client/assets/{use-mcp-client-CFENhVTu.js → use-mcp-client-2DKlVY7y.js} +1 -1
  302. package/dist/client/assets/{use-mcp-prompts-CvSNcrto.js → use-mcp-prompts-DPn1lgbL.js} +1 -1
  303. package/dist/client/assets/{use-mcp-tools-BQhinLYS.js → use-mcp-tools-0KttftJq.js} +1 -1
  304. package/dist/client/assets/{use-members-C7CiF_Ox.js → use-members-BOo0dfib.js} +1 -1
  305. package/dist/client/assets/{use-mobile-DFIDGOkY.js → use-mobile-dc5AlUoG.js} +1 -1
  306. package/dist/client/assets/{use-navigate-to-agent-DHdbR7N5.js → use-navigate-to-agent-BsM0_8Qa.js} +1 -1
  307. package/dist/client/assets/{use-open-billing-url-DkJS-zaj.js → use-open-billing-url-DU-RhPSk.js} +1 -1
  308. package/dist/client/assets/{use-org-auth-client-B3C76NaL.js → use-org-auth-client-EU2_QrcX.js} +1 -1
  309. package/dist/client/assets/{use-org-fs-z-OQ_g_P.js → use-org-fs-CPcFon5v.js} +1 -1
  310. package/dist/client/assets/{use-org-notice-MaHYxEkZ.js → use-org-notice-CJ4ginwY.js} +1 -1
  311. package/dist/client/assets/{use-org-sso-BPi8buGP.js → use-org-sso-DliUqcof.js} +1 -1
  312. package/dist/client/assets/{use-organization-roles-DhBO1Ts6.js → use-organization-roles-DWRM5Xlm.js} +1 -1
  313. package/dist/client/assets/{use-organization-settings-1t_21qnn.js → use-organization-settings-CZaZMu7C.js} +1 -1
  314. package/dist/client/assets/{use-panel-navigate-BaXOn89z.js → use-panel-navigate-ClG-UYrb.js} +1 -1
  315. package/dist/client/assets/{use-project-native-view-presence-HrNtSzTv.js → use-project-native-view-presence-YmT7vpKk.js} +1 -1
  316. package/dist/client/assets/{use-project-scope-BLg8LJSu.js → use-project-scope-CsFUzitf.js} +1 -1
  317. package/dist/client/assets/{use-registry-connections-NZIxdL-z.js → use-registry-connections-JpgvKLOj.js} +1 -1
  318. package/dist/client/assets/{use-releases-DnsfA1SK.js → use-releases-Bgl6UW0_.js} +1 -1
  319. package/dist/client/assets/{use-reports-diagnostic-Bvkqpj5y.js → use-reports-diagnostic-eNPzfjim.js} +1 -1
  320. package/dist/client/assets/{use-route-default-main-ERgPxe4V.js → use-route-default-main-DDalOeoB.js} +1 -1
  321. package/dist/client/assets/{use-secrets-saKEG6uD.js → use-secrets-WK-wxIoH.js} +1 -1
  322. package/dist/client/assets/{use-section-preview-base-BSsgI0pp.js → use-section-preview-base-CUFpzI8Q.js} +1 -1
  323. package/dist/client/assets/{use-session-runtime-CfHLK7v7.js → use-session-runtime-CwgGPQkM.js} +1 -1
  324. package/dist/client/assets/{use-tags-D9C5HZyh.js → use-tags-BqLVEjBd.js} +1 -1
  325. package/dist/client/assets/{use-task-metadata-L9jRDdBp.js → use-task-metadata-D1gl7viW.js} +1 -1
  326. package/dist/client/assets/{use-thread-outputs-ctdnQS_F.js → use-thread-outputs-BnQmraib.js} +1 -1
  327. package/dist/client/assets/{use-view-mode-Bsjm3Emn.js → use-view-mode-BLK8sDZS.js} +1 -1
  328. package/dist/client/assets/{use-virtual-mcp-BNclwWrf.js → use-virtual-mcp-vVWql7vM.js} +1 -1
  329. package/dist/client/assets/useInfiniteQuery-BUDJQ-a0.js +1 -0
  330. package/dist/client/assets/{useQueries-Bwlz6BY3.js → useQueries-Do0UR3yN.js} +1 -1
  331. package/dist/client/assets/useSuspenseInfiniteQuery-BCBsko2y.js +1 -0
  332. package/dist/client/assets/{users-DAnuRLHR.js → users-DtkqmbRr.js} +1 -1
  333. package/dist/client/assets/{utils-Deo6cHH9.js → utils-WGdymi8M.js} +1 -1
  334. package/dist/client/assets/{variant-calendar-tHHVG6SE.js → variant-calendar-DBuSS1Kj.js} +1 -1
  335. package/dist/client/assets/{variant-matcher-override-DGI73MmS.js → variant-matcher-override-zmFjw0un.js} +1 -1
  336. package/dist/client/assets/{view-mode-toggle-CNRI2GCY.js → view-mode-toggle-5ObOX782.js} +1 -1
  337. package/dist/client/assets/{virtual-mcp-DFTQ_e3C.js → virtual-mcp-DhQhvEKt.js} +1 -1
  338. package/dist/client/index.html +1 -1
  339. package/dist/server/cli.js +2 -2
  340. package/dist/server/server.js +2 -2
  341. package/package.json +1 -1
  342. package/dist/client/assets/agent-app-Gfc2coLy.js +0 -1
  343. package/dist/client/assets/agent-deck-4T-PW0D9.js +0 -1
  344. package/dist/client/assets/agent-file-CKdAFcim.js +0 -1
  345. package/dist/client/assets/agent-library-file-B3g3OsK3.js +0 -1
  346. package/dist/client/assets/agent-settings-BnkExNHD.js +0 -1
  347. package/dist/client/assets/agent-site-editor-code-Ck23JptD.js +0 -2
  348. package/dist/client/assets/agent-view-OMgY_bvf.js +0 -1
  349. package/dist/client/assets/api-keys-B4eTKmoS.js +0 -1
  350. package/dist/client/assets/app-editor-H6TPM1GK.js +0 -1
  351. package/dist/client/assets/project-reports-QTC8uOco.js +0 -1
  352. package/dist/client/assets/project-tasks-De69tF-f.js +0 -1
  353. package/dist/client/assets/record-editor-CqB6PK2b.js +0 -1
  354. package/dist/client/assets/registry-D9UQpXZr.js +0 -2
  355. package/dist/client/assets/reports-aGsYwN1j.js +0 -1
  356. package/dist/client/assets/store-registry-ChqgNS-o.js +0 -2
  357. package/dist/client/assets/tasks-R0aJT0ut.js +0 -1
  358. package/dist/client/assets/useInfiniteQuery-CbTYAVvH.js +0 -1
  359. package/dist/client/assets/useSuspenseInfiniteQuery-BKR7qjCf.js +0 -1
@@ -989,7 +989,7 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
989
989
  b. MONITORING_LOGS_LIST with isError true (plus connectionId/toolName/virtualMcpId filters) \u2192 failing calls.
990
990
  c. MONITORING_LOG_GET on specific log ids for full input/output when the error message isn't enough.
991
991
  d. Report the failing tool/connection, error pattern, and suggest the fix or owner.
992
- </workflows>`,aZ$={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=blue",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:qG4,getId:o3.USAGE_MANAGER}});function Ho0($){return Iz.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function IG4($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function ZX0({virtualMcp:$,agentId:Z=$.id,organizationId:Q,ctx:Y}){let X=Ho0(Z);if(!X)return $;let J=await IG4(X,{orgId:Q,ctx:Y}),G=J.selectedTools?[...J.selectedTools]:null;return{...$,metadata:{...$.metadata??{},instructions:J.instructions},connections:$.connections.map((W)=>({...W,selected_tools:G}))}}async function QX0($,Z){if(!("checklist"in $))return[];return Promise.all($.checklist.map(async(Q)=>({label:Q.label,activeForm:Q.activeForm,action:Q.action,completed:await Q.isCompleted(Z),alwaysSuggest:Q.alwaysSuggest})))}async function $7$($,Z,Q){let Y={self:A8.SELF($),registry:A8.REGISTRY($),"community-registry":A8.COMMUNITY_REGISTRY($)};await Promise.all(MG4.map((X)=>Q.delete(`${X}${$}`))),await Promise.all(Iz.map(async(X)=>{let J=X.getId($),G=await Q.findById(J,$),K=(X.selectedConnections??["self"]).map((H)=>Y[H]);if(G){await Q.update(J,Z,{metadata:{...G.metadata??{},instructions:X.instructions},connections:K.map((H)=>{let F=G.connections.find((U)=>U.connection_id===H);return{connection_id:H,selected_tools:X.selectedTools?[...X.selectedTools]:null,selected_resources:F?.selected_resources??null,selected_prompts:F?.selected_prompts??null}})});return}await Q.create($,Z,{title:X.title,description:X.description,icon:X.icon,status:"active",pinned:!1,metadata:{instructions:X.instructions},connections:K.map((H)=>({connection_id:H,selected_tools:X.selectedTools?[...X.selectedTools]:null,selected_resources:null,selected_prompts:X.selectedPrompts?[...X.selectedPrompts]:null}))},{id:J})}))}var MG4,Iz;var Qu=O(()=>{T8();uZ$();cZ$();nZ$();oZ$();sZ$();eZ$();MG4=ki0,Iz=[pZ$,lZ$,tZ$,hZ$,rZ$,aZ$]});import{DBOS as YX0}from"@dbos-inc/dbos-sdk";async function VG4($){let Z=X8(),Q=new lg(Z.db);await $7$($.orgId,$.createdBy,Q)}async function kG4($){let Z=X8(),Q=new lg(Z.db);for(let Y of Iz){let X=Y.getId($.orgId),J=await Q.findById(X,$.orgId);if(!J)continue;let G=Y.selectedPrompts?[...Y.selectedPrompts]:null;if(J.connections.every((K)=>{let H=K.selected_prompts;if(G===null)return H===null;if(H===null)return!1;if(H.length!==G.length)return!1;return H.every((F,U)=>F===G[U])}))continue;await Q.update(X,$.createdBy,{connections:J.connections.map((K)=>({connection_id:K.connection_id,selected_tools:K.selected_tools,selected_resources:K.selected_resources,selected_prompts:G}))})}}async function SG4($){await YX0.runStep(()=>VG4($),{name:"installStudioPack"}),await YX0.runStep(()=>kG4($),{name:"backfillSelectedPrompts"})}async function Fo0($){await YX0.startWorkflow(CG4,{workflowID:`install-studio-pack:${_G4}:${$.orgId}`})($)}async function Z7$(){let Z=await X8().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),Q=new Map;for(let Y of Z)if(!Q.has(Y.organizationId))Q.set(Y.organizationId,Y.userId);await $u(Array.from(Q),10,async([Y,X])=>{try{await Fo0({orgId:Y,createdBy:X})}catch(J){console.error("[studio-pack-backfill] enqueue failed",{orgId:Y},J)}})}var CG4,_G4="v6";var XX0=O(()=>{XG();di0();Qu();CG4=YX0.registerWorkflow(SG4,{name:"installStudioPackWorkflow"})});class Zr{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new Zr,Z=new Zr;return $._otherTransport=Z,Z._otherTransport=$,[$,Z]}async start(){while(this._messageQueue.length>0){let $=this._messageQueue.shift();this.onmessage?.($.message,$.extra)}}async close(){let $=this._otherTransport;this._otherTransport=void 0,await $?.close(),this.onclose?.()}async send($,Z){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage($,{authInfo:Z?.authInfo});else this._otherTransport._messageQueue.push({message:$,extra:{authInfo:Z?.authInfo}})}}import{z as v8}from"zod";var Y7$,Q7$=1000,vG4=500,X7$,J7$,G7$,W7$,K7$,H7$,F7$,U7$,N7$,B7$;var Yu=O(()=>{Y7$=v8.record(v8.string(),v8.array(v8.string())),X7$=v8.record(v8.string(),v8.array(v8.string()).max(vG4)).refine(($)=>Object.keys($).length<=Q7$,{message:`Permissions cannot grant more than ${Q7$} resources`}),J7$=v8.object({id:v8.string().describe("Unique identifier for the API key"),name:v8.string().describe("Human-readable name for the API key"),userId:v8.string().describe("ID of the user who owns this API key"),permissions:Y7$.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:v8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:v8.string().datetime().describe("When the API key was created (ISO 8601)")}),G7$=v8.object({name:v8.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:X7$.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:v8.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:v8.record(v8.string(),v8.unknown()).optional().describe("Additional metadata to store with the API key")}),W7$=v8.object({id:v8.string().describe("Unique identifier for the API key"),name:v8.string().describe("Human-readable name for the API key"),key:v8.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:Y7$.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:v8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:v8.string().datetime().describe("When the API key was created (ISO 8601)")}),K7$=v8.object({}),H7$=v8.object({items:v8.array(J7$).describe("List of API keys (without key values)")}),F7$=v8.object({keyId:v8.string().describe("ID of the API key to update"),name:v8.string().min(1).max(64).optional().describe("New name for the API key"),permissions:X7$.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:v8.record(v8.string(),v8.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),U7$=v8.object({item:J7$.describe("The updated API key (without key value)")}),N7$=v8.object({keyId:v8.string().describe("ID of the API key to delete")}),B7$=v8.object({success:v8.boolean().describe("Whether the deletion was successful"),keyId:v8.string().describe("ID of the deleted API key")})});var Uo0;var D7$=O(()=>{_4();R0();Yu();Uo0=g({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:G7$,outputSchema:W7$,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=await Z.boundAuth.apiKey.create({name:$.name,permissions:$.permissions,expiresIn:$.expiresIn,metadata:{...$.metadata,organization:Z.organization}}),Y=Q.expiresAt?Q.expiresAt instanceof Date?Q.expiresAt.toISOString():Q.expiresAt:null,X=Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,J=c0(Z);if(J)M1.capture({distinctId:J,event:"api_key_created",...Z.organization?.id?{groups:{organization:Z.organization.id}}:{},properties:{key_id:Q.id,key_name:Q.name??$.name,organization_id:Z.organization?.id,has_expiry:!!Y}});return{id:Q.id,name:Q.name??$.name,key:Q.key,permissions:Q.permissions??{},expiresAt:Y,createdAt:X}}})});var No0;var O7$=O(()=>{_4();R0();Yu();No0=g({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:N7$,outputSchema:B7$,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=c0(Z);if(!Q)throw Error("User ID required to delete API key");let X=(await Z.boundAuth.apiKey.list())?.find((K)=>K.id===$.keyId);if(!X)throw Error("API key not found");let G=X.metadata?.organization?.id,W=Z.organization?.id;if(G!==W)throw Error("Cannot delete API key from another organization");if(await Z.boundAuth.apiKey.delete($.keyId),W)M1.capture({distinctId:Q,event:"api_key_deleted",groups:{organization:W},properties:{key_id:$.keyId,organization_id:W}});return{success:!0,keyId:$.keyId}}})});var Bo0;var L7$=O(()=>{R0();Yu();Bo0=g({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:K7$,outputSchema:H7$,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=await Z.boundAuth.apiKey.list(),Y=Z.organization?.id;return{items:(Q??[]).filter((J)=>{return J.metadata?.organization?.id===Y}).map((J)=>({id:J.id,name:J.name??"Unnamed Key",userId:J.userId,permissions:J.permissions??{},expiresAt:J.expiresAt?J.expiresAt instanceof Date?J.expiresAt.toISOString():J.expiresAt:null,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt}))}}})});var Do0;var w7$=O(()=>{R0();Yu();Do0=g({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:F7$,outputSchema:U7$,handler:async($,Z)=>{if(p(Z),await Z.access.check(),!c0(Z))throw Error("User ID required to update API key");let X=(await Z.boundAuth.apiKey.list())?.find((H)=>H.id===$.keyId);if(!X)throw Error(`API key not found: ${$.keyId}`);let G=X.metadata?.organization?.id,W=Z.organization?.id;if(G!==W)throw Error("Cannot update API key from another organization");let K=await Z.boundAuth.apiKey.update({keyId:$.keyId,name:$.name,permissions:$.permissions,metadata:{...$.metadata,organization:Z.organization}});if(!K)throw Error(`Failed to update API key: ${$.keyId}`);return{item:{id:K.id,name:K.name??$.name??"Unnamed Key",userId:K.userId,permissions:K.permissions??{},expiresAt:K.expiresAt?K.expiresAt instanceof Date?K.expiresAt.toISOString():K.expiresAt:null,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}}}})});var j7$=O(()=>{D7$();O7$();L7$();w7$();Yu()});function CO($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let Q=bG4.test(Z),Y=xG4.test(Z),X=yG4.test(Z);if(Q&&!Y&&!X)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let J=Y?Z:`https://${Z}`,G;try{G=new URL(J)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(G.protocol!=="http:"&&G.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let W=G.hostname.split(".");if(W.length<2||W.some((K)=>!K||!gG4.test(K)))return{ok:!1,error:"Enter a valid website URL."};return G.protocol="https:",{ok:!0,value:G.origin}}var bG4,xG4,yG4,gG4;var Qr=O(()=>{bG4=/^[a-zA-Z][a-zA-Z\d+.-]*:/,xG4=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,yG4=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,gG4=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as AX}from"zod";function JX0($){return{repository_id:$.repositoryId,provider:$.provider,host:$.host,path:$.path,default_branch:$.defaultBranch??null,web_url:$.webUrl??null}}function z7$($){let Z=hG4.safeParse($);if(!Z.success)return null;return{repositoryId:Z.data.repository_id,provider:Z.data.provider,host:Z.data.host,path:Z.data.path,defaultBranch:Z.data.default_branch??null,webUrl:Z.data.web_url??null}}function GX0($){return $.provider==="github"&&$.host.toLowerCase()==="github.com"?$.path:null}var E7$,hG4;var WX0=O(()=>{E7$=AX.object({repositoryId:AX.string().min(1),provider:AX.enum(["github","gitlab","bitbucket"]),host:AX.string().min(1),path:AX.string().min(1),defaultBranch:AX.string().nullable().optional(),webUrl:AX.string().nullable().optional()}),hG4=AX.object({repository_id:AX.string().min(1),provider:AX.enum(["github","gitlab","bitbucket"]),host:AX.string().min(1),path:AX.string().min(1),default_branch:AX.string().nullable().optional(),web_url:AX.string().nullable().optional()})});import{z as IY}from"zod";function RH($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??O0()).reportsInternalApiUrl??uG4).replace(/\/+$/,"")}function A7$($={}){return`${RH($)}/api/v2/mcp`}function Vz($){let Z=$.apiKey??($.settings??O0()).reportsInternalApiKey;if(!Z)throw Error("REPORTS_INTERNAL_API_KEY (or the legacy COMMERCE_DISCOVERY_INTERNAL_API_KEY) is required to set up reports.");return Z}function HX0($){return new URL($).hostname}function cG4($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function dG4($,Z={}){switch($){case"ownership_unverified":{let Q=Z.email?`O e-mail ${Z.email}`:"Este e-mail",Y=Z.domain?` ${Z.domain}`:" este site";return`${Q} n\xE3o tem permiss\xE3o para reivindicar${Y}. Use um e-mail do dom\xEDnio do site ou pe\xE7a ao suporte para autorizar seu dom\xEDnio.`}case"already_claimed_by_other_org":return"Este site j\xE1 pertence a outra organiza\xE7\xE3o. Fale com o suporte para transferir o acesso.";case"unknown":return"N\xE3o foi poss\xEDvel configurar o Reports. Tente novamente ou fale com o suporte.";default:return $}}async function mG4($){let Z=await Yr($);return cG4(Z?.error)?Z.error:"unknown"}async function Yr($){let Z=await $.text().catch(()=>"");if(!Z)return;try{return JSON.parse(Z)}catch{return}}async function FX0($){let Z=`Reports auth failed with status ${$.status}.`,Q=await $.text().catch(()=>"");if(!Q)return Z;try{let Y=JSON.parse(Q),X=typeof Y.error==="string"?Y.error:typeof Y.message==="string"?Y.message:null;return X?`Reports auth failed: ${X}.`:Z}catch{return Z}}async function R7$($,Z={}){let Q=RH(Z),Y=Vz(Z),X=Z.fetchImpl??fetch,J=HX0($.siteUrl),G=`${Q}/api/v2/internal/diagnostics/${encodeURIComponent(J)}/upgrade`,W=await X(G,{method:"POST",headers:{Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.orgName?{name:$.orgName}:{},...$.email?{email:$.email}:{},...$.reportUrl?{report_url:$.reportUrl}:{}}),signal:AbortSignal.timeout(KX0)});if(!W.ok){let H=await mG4(W);throw new T7$(H,{email:$.email,domain:J})}let K=lG4.safeParse(await Yr(W));if(!K.success)throw Error("Reports auth response did not include a token.");return{authorizationToken:K.data.token}}async function q7$($,Z={}){let Q=RH(Z),Y=Vz(Z),X=Z.fetchImpl??fetch,J=HX0($.siteUrl),G=`${Q}/api/v2/internal/diagnostics/${encodeURIComponent(J)}/bindings`,W=await X(G,{method:"POST",headers:{Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,provider:$.provider,resource_id:$.resourceId}),signal:AbortSignal.timeout(KX0)});if(W.status===409)return{ok:!1,reason:"resource_already_bound",detail:"Este recurso j\xE1 est\xE1 vinculado a outra loja. Se ele \xE9 seu, fale com o suporte para revis\xE3o manual."};if(W.status===422){let H=P7$.safeParse(await Yr(W));return{ok:!1,reason:H.success?H.data.reason??"verification_failed":"verification_failed",detail:(H.success?H.data.detail:void 0)??"N\xE3o foi poss\xEDvel verificar o acesso a este recurso."}}if(!W.ok)throw Error(await FX0(W));let K=P7$.safeParse(await Yr(W));if(!K.success||!K.data.binding)throw Error("Reports bind response did not include a binding.");return{ok:!0,resourceId:K.data.binding.resource_id,evidence:K.data.binding.evidence}}async function M7$($,Z={}){let Q=RH(Z),Y=Vz(Z),X=Z.fetchImpl??fetch,J=HX0($.siteUrl),G=`${Q}/api/v2/internal/diagnostics/${encodeURIComponent(J)}/run`,W=await X(G,{method:"POST",headers:{Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.repository?{repository:JX0($.repository)}:{},...$.githubRepo?{github_repo:$.githubRepo}:{}}),signal:AbortSignal.timeout(KX0)});if(W.status===409)return{triggered:!1,reason:"not_upgraded"};if(!W.ok)throw Error(await FX0(W));return{triggered:!0}}async function iG4($,Z,Q){try{return await U8(async()=>{let Y=await $(Z,{method:"GET",headers:{Authorization:`Bearer ${Q}`},signal:AbortSignal.timeout(KX0)});if(Y.status>=500||Y.status===429)throw new Oo0(await FX0(Y));return Y},{maxAttempts:3,minTimeout:200,maxTimeout:2000,multiplier:2,jitter:1,isRetriable:(Y)=>Y instanceof Oo0})}catch(Y){if(Y instanceof y6&&Y.cause instanceof Error)throw Y.cause;throw Y}}async function I7$($,Z={}){let Q=RH(Z),Y=Vz(Z),X=Z.fetchImpl??fetch,J=HX0($.siteUrl),G=`${Q}/api/v2/internal/diagnostics/${encodeURIComponent(J)}/connections/status?org_id=${encodeURIComponent($.orgId)}`,W=await iG4(X,G,Y);if(W.status===404||W.status===409)return{providers:{},claimed:!1};if(!W.ok)throw Error(await FX0(W));let K=pG4.safeParse(await Yr(W));return{providers:K.success?K.data.providers:{},claimed:!0}}var uG4,KX0=15000,lG4,P7$,T7$,Oo0,pG4;var kz=O(()=>{T8();u$();WX0();Z$();uG4=new URL(ya1).origin,lG4=IY.object({token:IY.string().min(1)}),P7$=IY.object({binding:IY.object({resource_id:IY.string(),evidence:IY.string()}).optional(),reason:IY.string().optional(),detail:IY.string().optional()});T7$=class T7$ extends Error{code;constructor($,Z={}){super(dG4($,Z));this.name="ReportsClaimError",this.code=$}};Oo0=class Oo0 extends Error{};pG4=IY.object({providers:IY.record(IY.string(),IY.object({connected:IY.boolean(),via:IY.enum(["oauth","sa"]).nullable(),resource:IY.string().nullable()}))})});import{z as gJ}from"zod";var nG4,tG4,Lo0;var V7$=O(()=>{Qr();R0();kz();nG4=gJ.object({siteUrl:gJ.string().min(1).describe("Website URL of the store being bound."),provider:gJ.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:gJ.string().min(1).describe("The resource id the client typed: GA4 numeric property id, or GSC site (sc-domain:example.com or https://example.com/).")}),tG4=gJ.discriminatedUnion("ok",[gJ.object({ok:gJ.literal(!0),resourceId:gJ.string(),evidence:gJ.string()}),gJ.object({ok:gJ.literal(!1),reason:gJ.string(),detail:gJ.string()})]),Lo0=g({name:"REPORTS_BIND",description:"Bind a GA4 property or GSC site to the org's store via the shared service account (consent-free lane). The client grants deco-reader@\u2026 access to the resource and provides its id; Reports verifies the resource belongs to this domain before persisting. Returns ok:false with an actionable pt-BR detail when verification fails or the resource is already bound elsewhere.",annotations:{title:"Bind Reports Data Source",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:nG4,outputSchema:tG4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check("REPORTS_BIND","COMMERCE_DISCOVERY_BIND");let Y=CO($.siteUrl);if(!Y.ok)throw Error(Y.error);return q7$({siteUrl:Y.value,orgId:Q.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as qH}from"zod";var oG4,rG4,wo0;var k7$=O(()=>{Qr();R0();kz();oG4=qH.object({siteUrl:qH.string().min(1).describe("Website URL of the store to inspect.")}),rG4=qH.object({providers:qH.record(qH.string(),qH.object({connected:qH.boolean(),via:qH.enum(["oauth","sa"]).nullable(),resource:qH.string().nullable()})),claimed:qH.boolean().describe("False when the site isn't claimed/upgraded for this org \u2014 providers is then empty because the status is unreadable, NOT because nothing is connected. The UI must warn instead of rendering existing bindings as disconnected.")}),wo0=g({name:"REPORTS_CONNECTION_STATUS",description:"Read per-provider connection status (ga4/gsc/vtex) for the org's store \u2014 { connected, via: oauth|sa, resource }. The single source of truth for whether a data source is connected, unifying the OAuth (Studio vault) and shared-SA binding lanes. Read-only.",annotations:{title:"Reports Connection Status",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:oG4,outputSchema:rG4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check("REPORTS_CONNECTION_STATUS","COMMERCE_DISCOVERY_CONNECTION_STATUS");let Y=CO($.siteUrl);if(!Y.ok)throw Error(Y.error);return I7$({siteUrl:Y.value,orgId:Q.id})}})});import{z as Xr}from"zod";var sG4,aG4,jo0;var S7$=O(()=>{T8();WX0();Qr();R0();kz();sG4=Xr.object({siteUrl:Xr.string().min(1).describe("Website URL to run the diagnostic for.")}),aG4=Xr.object({triggered:Xr.boolean(),reason:Xr.string().optional()}),jo0=g({name:"REPORTS_RUN",description:"Trigger the Reports diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Reports",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:sG4,outputSchema:aG4,requiresFeature:"diagnostic_enriched",requiresAiBudget:!0,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check("REPORTS_RUN","COMMERCE_DISCOVERY_RUN");let Y=CO($.siteUrl);if(!Y.ok)throw Error(Y.error);let X=A8.REPORTS(Q.id),G=(await Z.storage.connections.findById(X,Q.id))?.configuration_state,W=G&&typeof G==="object"?G:null,K=z7$(W?.repository),H=typeof W?.github_repo==="string"&&W.github_repo.length>0?W.github_repo:void 0;return M7$({siteUrl:Y.value,orgId:Q.id,repository:K??void 0,githubRepo:(K?GX0(K):H)??void 0})}})});import{z as i6}from"zod";var eG4,Jr,$W4,ZW4,QW4,YW4,C7$,_7$,Eo0;var v7$=O(()=>{eG4=["github","gitlab","bitbucket"],Jr=i6.enum(eG4),$W4=["github_app","oauth","token","github_cli"],ZW4=i6.enum($W4),QW4=["active","revoked"],YW4=i6.enum(QW4),C7$=i6.object({provider:Jr,host:i6.string().min(1).describe("Provider host, e.g. github.com"),path:i6.string().min(1).describe("Full namespace path, e.g. owner/name or group/sub/project")}),_7$=i6.object({id:i6.string(),organizationId:i6.string(),type:Jr,host:i6.string(),authKind:ZW4,externalAccountId:i6.string().describe("Provider-side account identity: installation id (GitHub App), user/group id (GitLab) or user/workspace uuid (Bitbucket)."),login:i6.string().describe("Display login of the account/namespace"),avatarUrl:i6.string().nullable(),installationId:i6.number().nullable().describe("GitHub App installation id; null for other auth kinds."),status:YW4,createdAt:i6.string(),updatedAt:i6.string()}),Eo0=i6.object({id:i6.string(),organizationId:i6.string(),accountId:i6.string().nullable().describe("Credential-holding account; null for anonymous public clones."),provider:Jr,host:i6.string(),path:i6.string(),externalId:i6.string().nullable().describe("Provider repository/project id, when known."),defaultBranch:i6.string().nullable(),webUrl:i6.string(),visibility:i6.enum(["public","private","internal"]).nullable(),createdAt:i6.string(),updatedAt:i6.string()})});function GW4($){let Z=$.toLowerCase();if(Z==="github.com"||Z==="www.github.com")return"github";if(Z==="gitlab.com"||Z==="www.gitlab.com")return"gitlab";if(Z==="bitbucket.org"||Z==="www.bitbucket.org")return"bitbucket";if(/(^|[.-])gitlab([.-]|$)/.test(Z))return"gitlab";return null}function f7$($){let Z=$.toLowerCase();return Z.startsWith("www.")?Z.slice(4):Z}function xW($,Z){let Q=$.trim();if(!Q)return null;let Y,X,J=/^(?:[\w.-]+@)?([\w.-]+(?::\d+)?):(?!\/\/)(.+)$/.exec(Q);if(J&&!/^[a-z][a-z0-9+.-]*:\/\//i.test(Q))Y=J[1],X=J[2];else if(/^[a-z][a-z0-9+.-]*:\/\//i.test(Q)){let F;try{F=new URL(Q)}catch{return null}if(!/^(https?|ssh|git)(\+ssh)?:$/.test(F.protocol))return null;Y=F.host,X=F.pathname}else if(Z?.provider)Y=Z.host??UX0[Z.provider],X=Q;else return null;Y=f7$(Y);let G=Z?.provider??GW4(Y);if(!G)return null;let W=X.split("/").map((F)=>F.trim()).filter(Boolean),K=W.indexOf("-");if(K>=0)W=W.slice(0,K);if(JW4.has(G))W=W.slice(0,2);if(W.length<2)return null;let H=W[W.length-1];if(W[W.length-1]=H.replace(/\.git$/i,""),W.some((F)=>F.length===0||F==="."||F===".."))return null;return{provider:G,host:Y,path:W.join("/")}}function yW($){return`${$.host.toLowerCase()}/${$.path.toLowerCase()}`}function zo0($){let Z=$.path.split("/");return Z[Z.length-1]??$.path}function WW4($){let Z=$.path.lastIndexOf("/");return Z<0?"":$.path.slice(0,Z)}function $9($){return{owner:WW4($),name:zo0($)}}function TX($){return`https://${$.host}/${$.path}`}function Po0($,Z){let Q=`${$.host}/${$.path}.git`;if(!Z)return`https://${Q}`;return`https://${XW4[$.provider]}:${encodeURIComponent(Z)}@${Q}`}function tU($,Z){let Q=f7$(Z);switch($){case"github":return Q==="github.com"?"https://api.github.com":`https://${Q}/api/v3`;case"gitlab":return`https://${Q}/api/v4`;case"bitbucket":return"https://api.bitbucket.org/2.0"}}function oU($,Z){return{provider:"github",host:UX0.github,path:`${$}/${Z}`}}var UX0,XW4,JW4;var Ao0=O(()=>{UX0={github:"github.com",gitlab:"gitlab.com",bitbucket:"bitbucket.org"},XW4={github:"x-access-token",gitlab:"oauth2",bitbucket:"x-token-auth"},JW4=new Set(["github","bitbucket"])});function JG($,Z){return`${TX($)}/${KW4[$.provider]}/${Z}`}function UW4($){let Z=$.toLowerCase();return FW4[Z]??Z}function NW4($,Z){let Q=Number($[3]);if(!Number.isSafeInteger(Q)||Q<=0)return null;let Y=UW4($[1]),X=$[2],J=Z?decodeURIComponent(X):X;if(/^\d+$/.test(J))return null;let G=xW(`https://${Y}/${J}`);if(!G)return null;return{repo:G,number:Q,url:JG(G,Q)}}function To0($){let Z=$.length>b7$?$.slice(0,b7$):$;for(let{re:Q,api:Y}of HW4){let X=Q.exec(Z),J=X?NW4(X,Y===!0):null;if(J)return J}return null}var KW4,HW4,FW4,b7$=200000;var x7$=O(()=>{Ao0();KW4={github:"pull",gitlab:"-/merge_requests",bitbucket:"pull-requests"};HW4=[{re:/https?:\/\/([^/\s"']+)\/([^\s"']+?)\/-\/merge_requests\/(\d+)/},{re:/https?:\/\/([^/\s"']+)\/([^/\s"']+\/[^/\s"']+)\/pull\/(\d+)/},{re:/https?:\/\/([^/\s"']+)\/([^/\s"']+\/[^/\s"']+)\/pull-requests\/(\d+)/},{re:/https?:\/\/([^/\s"']+)\/repos\/([^/\s"']+\/[^/\s"']+)\/pulls\/(\d+)/,api:!0},{re:/https?:\/\/([^/\s"']+)\/api\/v4\/projects\/([^/\s"']+)\/merge_requests\/(\d+)/,api:!0},{re:/https?:\/\/([^/\s"']+)\/2\.0\/repositories\/([^/\s"']+\/[^/\s"']+)\/pullrequests\/(\d+)/,api:!0}],FW4={"api.github.com":"github.com","api.bitbucket.org":"bitbucket.org"}});function y7$($){return Ro0[$]}function qo0($,Z){return Ro0[$].checkoutCommand.replace("{number}",String(Z))}function g7$($,Z){let{abbreviation:Q,numberSigil:Y}=Ro0[$];return`${Q} ${Y}${Z}`}var Ro0;var h7$=O(()=>{Ro0={github:{name:"GitHub",cli:"gh",changeRequest:"pull request",abbreviation:"PR",createCommand:"gh pr create",checkoutCommand:"gh pr checkout {number}",numberSigil:"#"},gitlab:{name:"GitLab",cli:"glab",changeRequest:"merge request",abbreviation:"MR",createCommand:"glab mr create",checkoutCommand:"glab mr checkout {number}",numberSigil:"!"},bitbucket:{name:"Bitbucket",cli:null,changeRequest:"pull request",abbreviation:"PR",createCommand:`curl -fsS -X POST -H "Authorization: Bearer $BITBUCKET_TOKEN" -H "Content-Type: application/json" https://api.bitbucket.org/2.0/repositories/<workspace>/<repo>/pullrequests -d '{"title":"<title>","source":{"branch":{"name":"<branch>"}},"destination":{"branch":{"name":"<base>"}}}'`,checkoutCommand:"git fetch origin <source branch> && git checkout <source branch>",numberSigil:"#"}}});var Q6=O(()=>{v7$();Ao0();x7$();h7$()});async function Mo0($,Z,Q){let Y=new AbortController,X,J=new Promise((W,K)=>{X=setTimeout(()=>{Y.abort(),K(new u7$($.id,Q))},Q)}),G=(async()=>{let W=await m7($,Z,!0);try{return(await W.listTools(void 0,{timeout:Q,signal:Y.signal})).tools}finally{await W.close().catch(()=>{})}})();G.catch(()=>{});try{return await Promise.race([G,J])}finally{if(X)clearTimeout(X)}}var u7$;var l7$=O(()=>{Gr();u7$=class u7$ extends Error{constructor($,Z){super(`listTools timed out after ${Z}ms for connection ${$}`);this.name="ListToolsTimeoutError"}}});var Io0=_((c7$)=>{Object.defineProperty(c7$,"__esModule",{value:!0});c7$.kvPrefix=c7$.KvWatchInclude=void 0;c7$.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};c7$.kvPrefix="KV_"});var $Q$=_((a7$)=>{Object.defineProperty(a7$,"__esModule",{value:!0});a7$.KvStatusImpl=a7$.Bucket=a7$.Kvm=a7$.kvOperationHdr=void 0;a7$.Base64KeyCodec=DW4;a7$.NoopKvCodecs=Vo0;a7$.defaultBucketOpts=i7$;a7$.validateKey=p7$;a7$.validateSearchKey=n7$;a7$.hasWildcards=t7$;a7$.validateBucket=NX0;var Q9=KJ(),w5=g$0(),Z9=Io0();function DW4(){let $=(Z,Q)=>{let Y=[];for(let X of Z.split("."))switch(X){case">":case"*":Y.push(X);break;default:Y.push(Q(X));break}return Y.join(".")};return{encode(Z){return $(Z,btoa)},decode(Z){return $(Z,atob)}}}function Vo0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function i7$(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:Vo0(),storage:w5.StorageType.File}}a7$.kvOperationHdr="KV-Operation";var m7$="$KV",OW4=/^[-/=.\w]+$/,LW4=/^[-/=.>*\w]+$/,wW4=/^[-\w]+$/;function p7$($){if($.startsWith(".")||$.endsWith(".")||!OW4.test($))throw Error(`invalid key: ${$}`)}function n7$($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!LW4.test($))throw Error(`invalid key: ${$}`)}function t7$($){if($.startsWith(".")||$.endsWith("."))throw Error(`invalid key: ${$}`);let Z=$.split("."),Q=!1;for(let Y=0;Y<Z.length;Y++)switch(Z[Y]){case"*":Q=!0;break;case">":if(Y!==Z.length-1)throw Error(`invalid key: ${$}`);Q=!0;break;default:}return Q}function NX0($){if(!wW4.test($))throw Error(`invalid bucket name: ${$}`)}class o7${js;constructor($){this.js=(0,w5.toJetStreamClient)($)}create($,Z={}){return this.#$($,Z)}open($,Z={}){return Z.bindOnly=!0,this.#$($,Z)}#$($,Z={}){let{ok:Q,min:Y}=this.js.nc.features.get(Q9.Feature.JS_KV);if(!Q)return Promise.reject(Error(`kv is only supported on servers ${Y} or better`));if(Z.bindOnly)return Xu.bind(this.js,$,Z);return Xu.create(this.js,$,Z)}list(){let $=(Q)=>{let X=Q.streams.filter((G)=>{return G.config.name.startsWith(Z9.kvPrefix)});X.forEach((G)=>{G.config.sealed=G.config.sealed||!1,G.config.deny_delete=G.config.deny_delete||!1,G.config.deny_purge=G.config.deny_purge||!1,G.config.allow_rollup_hdrs=G.config.allow_rollup_hdrs||!1});let J="";if(X.length)J=this.js.nc.info?.cluster??"";return X.map((G)=>{return new BX0(G,J)})},Z=`${this.js.prefix}.STREAM.LIST`;return new w5.ListerImpl(Z,$,this.js)}}a7$.Kvm=o7$;class Xu{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,Q){NX0($),this.js=Z,this.jsm=Q,this.bucket=$,this.prefix=m7$,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,Q={}){NX0(Z);let Y=await $.jetstreamManager(),X=new Xu(Z,$,Y);return await X.init(Q),X}static async bind($,Z,Q={}){let Y=$.getOptions()?.checkAPI||Q.bindOnly===!1,X=await $.jetstreamManager(Y),J={config:{allow_direct:Q.allow_direct}};NX0(Z);let G=new Xu(Z,$,X);return J.config.name=Q.streamName??G.bucketName(),Object.assign(G,J),G.stream=J.config.name,G.codec=Q.codec||Vo0(),G.direct=J.config.allow_direct??!1,G.initializePrefixes(J),G}async init($={}){let Z=Object.assign(i7$(),$);this.codec=Z.codec;let Q={};if(this.stream=Q.name=$.streamName??this.bucketName(),Q.retention=w5.RetentionPolicy.Limits,Q.max_msgs_per_subject=Z.history,Z.max_bytes)Q.max_bytes=Z.max_bytes;if(Q.max_msg_size=Z.maxValueSize,Q.storage=Z.storage,$.placement)Q.placement=$.placement;if($.republish)Q.republish=$.republish;if($.description)Q.description=$.description;if($.markerTTL)Q.allow_msg_ttl=!0,Q.subject_delete_marker_ttl=(0,Q9.nanos)(Z.markerTTL);if($.mirror){let H=Object.assign({},$.mirror);if(!H.name.startsWith(Z9.kvPrefix))H.name=`${Z9.kvPrefix}${H.name}`;Q.mirror=H,Q.mirror_direct=!0}else if($.sources){let H=$.sources.map((F)=>{let U=Object.assign({},F),N=U.name.startsWith(Z9.kvPrefix)?U.name.substring(Z9.kvPrefix.length):U.name;if(!U.name.startsWith(Z9.kvPrefix))U.name=`${Z9.kvPrefix}${U.name}`;if(!F.external&&N!==this.bucket)U.subject_transforms=[{src:`$KV.${N}.>`,dest:`$KV.${this.bucket}.>`}];return U});Q.sources=H,Q.subjects=[this.subjectForBucket()]}else Q.subjects=[this.subjectForBucket()];if($.metadata)Q.metadata=$.metadata;if(typeof $.compression==="boolean")Q.compression=$.compression?w5.StoreCompression.S2:w5.StoreCompression.None;let Y=this.js.nc,X=Y.getServerVersion(),J=X?(0,Q9.compare)(X,(0,Q9.parseSemVer)("2.7.2"))>=0:!1;Q.discard=J?w5.DiscardPolicy.New:w5.DiscardPolicy.Old;let{ok:G,min:W}=Y.features.get(Q9.Feature.JS_ALLOW_DIRECT);if(!G&&$.allow_direct===!0){let H=X?`${X.major}.${X.minor}.${X.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${H} - requires ${W}`))}if($.allow_direct=typeof $.allow_direct==="boolean"?$.allow_direct:G,Q.allow_direct=$.allow_direct,this.direct=Q.allow_direct,Q.num_replicas=Z.replicas,Z.ttl)Q.max_age=(0,Q9.nanos)(Z.ttl);Q.allow_rollup_hdrs=!0;let K;try{if(K=await this.jsm.streams.info(Q.name),!K.config.allow_direct&&this.direct===!0)this.direct=!1}catch(H){if(H.message==="stream not found")K=await this.jsm.streams.add(Q);else throw H}this.initializePrefixes(K)}initializePrefixes($){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:Z}=$.config;if(Z){let Q=Z.name;if(Q.startsWith(Z9.kvPrefix))Q=Q.substring(Z9.kvPrefix.length);if(Z.external&&Z.external.api!==""){let Y=Z.name.substring(Z9.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${Y}`,this.editPrefix=`${Z.external.api}.$KV.${Q}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${Z9.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey($,Z=!1){let Q=[];if(Z){if(this.useJsPrefix)Q.push(this.js.apiPrefix);if(this.editPrefix!=="")Q.push(this.editPrefix);else Q.push(this.prefix)}else if(this.prefix)Q.push(this.prefix);return Q.push($),Q.join(".")}fullKeyName($){if(this.prefix!=="")return`${this.prefix}.${$}`;return`${m7$}.${this.bucket}.${$}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey($){let Z=[];for(let Q of $.split("."))switch(Q){case">":case"*":Z.push(Q);break;default:Z.push(this.codec.key.encode(Q));break}return Z.join(".")}decodeKey($){let Z=[];for(let Q of $.split("."))switch(Q){case">":case"*":Z.push(Q);break;default:Z.push(this.codec.key.decode(Q));break}return Z.join(".")}validateKey=p7$;validateSearchKey=n7$;hasWildcards=t7$;close(){return Promise.resolve()}dataLen($,Z){let Q=Z?Z.get(w5.JsHeaders.MessageSizeHdr)||"":"";if(Q!=="")return parseInt(Q,10);return $.length}smToEntry($){return new r7$(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new s7$(this.bucket,this.prefixLen,$,Z,this.codec)}async create($,Z,Q){let Y;try{let J={previousSeq:0},G=await this._put($,Z,J,Q);return Promise.resolve(G)}catch(J){if(Y=J,J instanceof w5.JetStreamApiError){let G=J;if(G.code!==w5.JetStreamApiCodes.StreamWrongLastSequence&&G.code!==w5.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(J)}}let X=0;try{let J=await this.get($);if(J?.operation==="DEL"||J?.operation==="PURGE")return X=J!==null?J.revision:0,this._put($,Z,{previousSeq:X},Q);else return Promise.reject(Y)}catch(J){return Promise.reject(J)}}update($,Z,Q,Y){if(Q<=0)throw Error("version must be greater than 0");return this.put($,Z,{previousSeq:Q,timeout:Y})}async _put($,Z,Q={},Y){let X=this.encodeKey($);this.validateKey(X),Z=this.codec.value.encode(Z);let J={timeout:Q?.timeout};if(Q.previousSeq!==void 0){let G=(0,Q9.headers)();J.headers=G,G.set(w5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${Q.previousSeq}`)}if(Y)(J.headers||(0,Q9.headers)()).set(w5.PubHeaders.MessageTTL,Y);try{return(await this.js.publish(this.subjectForKey(X,!0),Z,J)).seq}catch(G){return Promise.reject(G)}}put($,Z,Q={}){return this._put($,Z,Q)}async get($,Z){let Q=this.encodeKey($);this.validateKey(Q);let Y={last_by_subj:this.subjectForKey(Q)};if(Z&&Z.revision>0)Y={seq:Z.revision};let X=null;try{if(this.direct)X=await this.jsm.direct.getMessage(this.bucketName(),Y);else X=await this.jsm.streams.getMessage(this.bucketName(),Y);if(X===null)return null;let J=this.smToEntry(X);if(J.rawKey!==Q)return null;return J}catch(J){throw J}}purge($,Z){return this._deleteOrPurge($,"PURGE",Z)}delete($,Z){return this._deleteOrPurge($,"DEL",Z)}async purgeDeletes($=1800000){let Z=[],Q=await this.history({key:">"});await(async()=>{for await(let G of Q)if(G.operation==="DEL"||G.operation==="PURGE")Z.push(G)})().then(),Q.stop();let Y=Date.now()-$,X=Z.map((G)=>{let W=this.subjectForKey(G.key);if(G.created.getTime()>=Y)return this.jsm.streams.purge(this.stream,{filter:W,keep:1});else return this.jsm.streams.purge(this.stream,{filter:W,keep:0})}),J=await Promise.all(X);return J.unshift({success:!0,purged:0}),J.reduce((G,W)=>{return G.purged+=W.purged,G})}async _deleteOrPurge($,Z,Q){if(!this.hasWildcards($))return this._doDeleteOrPurge($,Z,Q);let Y=await this.keys($),X=[];for await(let J of Y)if(X.push(this._doDeleteOrPurge(J,Z)),X.length===100)await Promise.all(X),X.length=0;if(X.length>0)await Promise.all(X)}async _doDeleteOrPurge($,Z,Q){let Y=this.encodeKey($);this.validateKey(Y);let X=(0,Q9.headers)();if(X.set(a7$.kvOperationHdr,Z),Z==="PURGE"){let J=Q;if(X.set(w5.JsHeaders.RollupHdr,w5.JsHeaders.RollupValueSubject),typeof J?.ttl==="string"&&J.ttl!=="")X.set(w5.PubHeaders.MessageTTL,`${J.ttl}`)}if(Q?.previousSeq)X.set(w5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${Q.previousSeq}`);await this.js.publish(this.subjectForKey(Y,!0),Q9.Empty,{headers:X})}_buildCC($,Z,Q={}){let X=(!Array.isArray($)?[$]:$).map((W)=>{let K=this.encodeKey(W);return this.validateSearchKey(W),this.fullKeyName(K)}),J=w5.DeliverPolicy.LastPerSubject;if(Z===Z9.KvWatchInclude.AllHistory)J=w5.DeliverPolicy.All;if(Z===Z9.KvWatchInclude.UpdatesOnly)J=w5.DeliverPolicy.New;let G=void 0;if(X.length===1)G=X[0],X=void 0;return Object.assign({deliver_policy:J,ack_policy:w5.AckPolicy.None,filter_subjects:X,filter_subject:G,flow_control:!0,idle_heartbeat:(0,Q9.nanos)(5000)},Q)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",Q={};Q.headers_only=$.headers_only||!1;let Y=new Q9.QueuedIteratorImpl,X=()=>{Y.stop()},J=this._buildCC(Z,Z9.KvWatchInclude.AllHistory,Q),G=await this.js.consumers.getPushConsumer(this.stream,J);if(Y._data=G,(await G.info(!0)).num_pending===0)return Y.push(X),Y;let K=await G.consume({callback:(H)=>{let F=this.jmToWatchEntry(H,!1);if(Y.push(F),Y.received++,H.info.pending===0)Y.push(X)}});return K.closed().then(()=>{Y.push(X)}),(async()=>{for await(let H of K.status())switch(H.type){case"heartbeat":Y.push(()=>{Y.stop()});break}})().then(),Y.iterClosed.then(()=>{K.stop()}),Y}canSetWatcherName(){let $=this.js.nc,{ok:Z}=$.features.get(Q9.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",Q=new Q9.QueuedIteratorImpl,Y={};Y.headers_only=$.headers_only||!1;let X=Z9.KvWatchInclude.LastValue;if($.include===Z9.KvWatchInclude.AllHistory)X=Z9.KvWatchInclude.AllHistory;else if($.include===Z9.KvWatchInclude.UpdatesOnly)X=Z9.KvWatchInclude.UpdatesOnly;let J=$.ignoreDeletes===!0,G=this._buildCC(Z,X,Y);if(G.name=`KV_WATCHER_${Q9.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)G.deliver_policy=w5.DeliverPolicy.StartSequence,G.opt_start_seq=$.resumeFromRevision;let W=await this.js.consumers.getPushConsumer(this.stream,G),H=(await W.info(!0)).num_pending,F=X===Z9.KvWatchInclude.UpdatesOnly||H===0;Q._data=W;let U=0,N=await W.consume({callback:(B)=>{if(!F)U++,F=U>=H;let D=this.jmToWatchEntry(B,F);if(J&&D.operation==="DEL")return;Q.push(D),Q.received++}});return Q.iterClosed.then(()=>{N.stop()}),N.closed().then(()=>{Q.push(()=>{Q.stop()})}),Q}async keys($=">"){let Z=new Q9.QueuedIteratorImpl,Q=this._buildCC($,Z9.KvWatchInclude.LastValue,{headers_only:!0}),Y=await this.js.consumers.getPushConsumer(this.stream,Q);if((await Y.info()).num_pending===0)return Z.stop(),Z;Z._data=Y;let J=await Y.consume({callback:(G)=>{let W=G.headers?.get(a7$.kvOperationHdr);if(W!=="DEL"&&W!=="PURGE"){let K=this.decodeKey(G.subject.substring(this.prefixLen));Z.push(K)}if(G.info.pending===0)J.stop()}});return(async()=>{for await(let G of J.status())switch(G.type){case"heartbeat":Z.push(()=>{Z.stop()});break}})().then(),J.closed().then(()=>{Z.push(()=>{Z.stop()})}),Z.iterClosed.then(()=>{J.stop()}),Z}purgeBucket($){return this.jsm.streams.purge(this.bucketName(),$)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let Z=this.js.nc.info?.cluster??"",Q=this.bucketName(),Y=await this.jsm.streams.info(Q);return new BX0(Y,Z)}}a7$.Bucket=Xu;class BX0{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(Z9.kvPrefix)?this.si.config.name.substring(Z9.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,Q9.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,Q9.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==w5.StoreCompression.None;return!1}}a7$.KvStatusImpl=BX0;class r7${bucket;sm;prefixLen;codec;constructor($,Z,Q,Y){this.bucket=$,this.prefixLen=Z,this.sm=Q,this.codec=Y}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(a7$.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(w5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(Q9.TD.decode(this.value),$)}string(){return Q9.TD.decode(this.value)}}class s7${bucket;sm;prefixLen;update;codec;constructor($,Z,Q,Y,X){this.bucket=$,this.prefixLen=Z,this.sm=Q,this.update=Y,this.codec=X}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,Q9.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(a7$.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(w5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(Q9.TD.decode(this.value),$)}string(){return Q9.TD.decode(this.value)}}});var ko0=_((gW)=>{Object.defineProperty(gW,"__esModule",{value:!0});gW.validateKey=gW.validateBucket=gW.NoopKvCodecs=gW.Kvm=gW.defaultBucketOpts=gW.Bucket=gW.Base64KeyCodec=gW.KvWatchInclude=gW.kvPrefix=void 0;var ZQ$=Io0();Object.defineProperty(gW,"kvPrefix",{enumerable:!0,get:function(){return ZQ$.kvPrefix}});Object.defineProperty(gW,"KvWatchInclude",{enumerable:!0,get:function(){return ZQ$.KvWatchInclude}});var Sz=$Q$();Object.defineProperty(gW,"Base64KeyCodec",{enumerable:!0,get:function(){return Sz.Base64KeyCodec}});Object.defineProperty(gW,"Bucket",{enumerable:!0,get:function(){return Sz.Bucket}});Object.defineProperty(gW,"defaultBucketOpts",{enumerable:!0,get:function(){return Sz.defaultBucketOpts}});Object.defineProperty(gW,"Kvm",{enumerable:!0,get:function(){return Sz.Kvm}});Object.defineProperty(gW,"NoopKvCodecs",{enumerable:!0,get:function(){return Sz.NoopKvCodecs}});Object.defineProperty(gW,"validateBucket",{enumerable:!0,get:function(){return Sz.validateBucket}});Object.defineProperty(gW,"validateKey",{enumerable:!0,get:function(){return Sz.validateKey}})});var Hr=_((_O)=>{Object.defineProperty(_O,"__esModule",{value:!0});_O.NoopKvCodecs=_O.Kvm=_O.defaultBucketOpts=_O.Bucket=_O.Base64KeyCodec=_O.KvWatchInclude=void 0;var VW4=ko0();Object.defineProperty(_O,"KvWatchInclude",{enumerable:!0,get:function(){return VW4.KvWatchInclude}});var Kr=ko0();Object.defineProperty(_O,"Base64KeyCodec",{enumerable:!0,get:function(){return Kr.Base64KeyCodec}});Object.defineProperty(_O,"Bucket",{enumerable:!0,get:function(){return Kr.Bucket}});Object.defineProperty(_O,"defaultBucketOpts",{enumerable:!0,get:function(){return Kr.defaultBucketOpts}});Object.defineProperty(_O,"Kvm",{enumerable:!0,get:function(){return Kr.Kvm}});Object.defineProperty(_O,"NoopKvCodecs",{enumerable:!0,get:function(){return Kr.NoopKvCodecs}})});function vO(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(Q)=>$.encode(JSON.stringify(Q)),decode:(Q)=>JSON.parse(Z.decode(Q))}}class So0{options;kv=null;codec=vO();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new YQ$.Kvm($).create(SW4,{storage:QQ$.StorageType.Memory})}async get($,Z){if(!this.kv)return null;try{let Q=await this.kv.get(`${$}.${Z}`);if(!Q?.value?.length)return null;if(Q.operation==="DEL"||Q.operation==="PURGE")return null;return this.codec.decode(Q.value)}catch{return null}}async set($,Z,Q){if(!this.kv)return;try{await this.kv.put(`${$}.${Z}`,this.codec.encode(Q))}catch{}}async invalidate($){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(Q)=>{try{await this.kv.delete(`${Q}.${$}`)}catch{}}))}teardown(){this.kv=null}}function CW4($,Z,Q){if(Q<=0)return!0;if($===void 0)return!0;return Z-$>=Q}function XQ$($){let Z=["tools","resources","prompts"];for(let Q of Z){let Y=`${Q}:${$}`;OX0.delete(Y),Ur.delete(Y)}}function DX0($){return $ instanceof w1&&$.code===q1.MethodNotFound}function _W4($){return $ instanceof w1&&$.code===-32000&&/connection closed/i.test($.message)}async function bO($,Z,Q,Y,X,J=0){if(!Y)try{return await Q()}catch(H){if(DX0(H))return[];return Fr.add(1,{type:$,outcome:"error",stage:"no_cache"}),null}let G=`${$}:${Z}`,W=await Y.get($,Z);if(W===null)try{let H=await Q();return Y.set($,Z,H).catch(()=>{}),OX0.set(G,Date.now()),Fr.add(1,{type:$,outcome:"miss",stage:"miss"}),H}catch(H){if(DX0(H))return Y.set($,Z,[]).catch(()=>{}),[];return Fr.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(Fr.add(1,{type:$,outcome:"hit",stage:"hit"}),CW4(OX0.get(G),Date.now(),J)&&!Ur.has(G)){Ur.add(G),OX0.set(G,Date.now());let H=Q().then((F)=>Y.set($,Z,F)).catch((F)=>{if(DX0(F)||_W4(F)){if(DX0(F))Y.set($,Z,[]).catch(()=>{});return}Fr.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>Ur.delete(G));X?.(H)}return W}function Co0($){JQ$=$}function R9(){return JQ$}var QQ$,YQ$,Fr,SW4="DECOCMS_MCP_LISTS",Ur,OX0,fO=30000,JQ$=null;var RX=O(()=>{w9();J6();QQ$=V(nF(),1),YQ$=V(Hr(),1),Fr=Q$.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});Ur=new Set;Q$.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(Ur.size));OX0=new Map});function LX0($){return(Z)=>{if(Z instanceof w1&&Z.code===q1.MethodNotFound)return $;throw Z}}var GQ$=O(()=>{w9()});function wX0($,Z,Q){let Y=xO($,Z,Q,R9()??void 0),X=xE(Y,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:vW4,toolCallTimeoutMs:yg});X.server.setRequestHandler(KD,async()=>{return await Y.listResources().catch(LX0({resources:[]}))}),X.server.setRequestHandler(HD,async()=>{return await Y.listResourceTemplates().catch(LX0({resourceTemplates:[]}))}),X.server.setRequestHandler(FD,async()=>{return await Y.listPrompts().catch(LX0({prompts:[]}))});let J=X.close.bind(X);return X.close=async()=>{await J(),await Y.close().catch(()=>{})},X}var vW4;var WQ$=O(()=>{CQ();w9();Nr();RX();GQ$();vW4={tools:{},resources:{},prompts:{}}});var Cz=O(()=>{Gr();l7$();WQ$()});async function jX0($,Z,Q){await(await m7(Z,$,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:Q.state,scopes:Q.scopes,firstRun:Q.firstRun,...Q.vault?{vault:Q.vault}:{}}})}var _o0=O(()=>{Cz()});import{z as vo0}from"zod";function xW4($){let{owner:Z,name:Q}=$9({path:$.path});return{owner:Z,name:Q,url:$.webUrl??`https://${$.host}/${$.path}`,repositoryId:$.repositoryId}}function yW4($,Z){if(!Z)return $;return $.filter((Q)=>Q.connection_id!==Z)}function gW4($,Z){let{repository:Q,github_repo:Y,...X}=$,J=Z?GX0(Z):null;return{...X,...Z?{repository:JX0(Z)}:{},...J?{github_repo:J}:{}}}async function hW4($,Z,Q){let Y=A8.REPORTS(Z),X=await $.storage.connections.findById(Y,Z);if(!X)throw Error("Reports is not set up for this organization yet");let J=gW4(X.configuration_state??{},Q);await $.storage.connections.update(Y,{configuration_state:J});try{await jX0($,{...X,configuration_state:J},{state:J,scopes:X.configuration_scopes??[],firstRun:!1})}catch(G){console.error("[reports] ON_MCP_CONFIGURATION after repository change failed",G)}}async function uW4($,Z,Q,Y){let X=bg(Z),J=await $.storage.virtualMcps.findById(X,Z);if(!J)return;let G=J.metadata??{},W=G.githubRepo,{githubRepo:K,...H}=G;await $.storage.virtualMcps.update(X,Q,{metadata:{...H,...Y?{githubRepo:xW4(Y)}:{}},connections:yW4(J.connections??[],W?.connectionId??null)})}var fW4,bW4,fo0;var KQ$=O(()=>{T8();Q6();WX0();R0();_o0();fW4=vo0.object({repositoryId:vo0.string().min(1).nullable().describe("Studio repository id to diagnose, or null to unlink the current one.")}),bW4=vo0.object({repository:E7$.nullable()});fo0=g({name:"REPORTS_SET_REPOSITORY",description:"Point the organization's Reports diagnostic at one of its linked repositories, or unlink the current one. Works for GitHub, GitLab and Bitbucket.",annotations:{title:"Set Reports Repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:fW4,outputSchema:bW4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to set the diagnostic's repository");let X=null;if($.repositoryId){let J=await Z.storage.repositories.get($.repositoryId,Q.id);if(!J)throw Error(`Repository ${$.repositoryId} is not linked to this organization`);X={repositoryId:J.id,provider:J.provider,host:J.host,path:J.path,defaultBranch:J.defaultBranch,webUrl:J.webUrl}}return await hW4(Z,Q.id,X),await uW4(Z,Q.id,Y,X),{repository:X}}})});function yO($,Z){let Q=`/${encodeURIComponent($)}/settings`;return Z?`${Q}/${Z}`:Q}function EX0($,Z){let Q=`/${encodeURIComponent($)}/agents`,Y=Z.panel?`${Q}/${Z.panel}`:Q,X=new URLSearchParams({virtualmcpid:Z.projectId,...Z.search??{}});return`${Y}?${X.toString()}`}var gO=O(()=>{n50()});import{z as MH}from"zod";async function mW4($,Z,Q,Y){let X=await $.storage.connections.findById(Z,Q);if(X)return X;throw Y}async function iW4($,Z,Q,Y){let X=await $.storage.virtualMcps.findById(Z,Q);if(X)return X;throw Y}var bo0,lW4=3600000,cW4,dW4,xo0;var HQ$=O(()=>{T8();Qr();R0();mK();gO();kz();bo0=r70,cW4=MH.object({siteUrl:MH.string().min(1).describe("Website URL to configure.")}),dW4=MH.object({connection:wQ,virtualMcp:jQ,reportApp:MH.object({connectionId:MH.string(),virtualMcpId:MH.string(),toolName:MH.literal(bo0)}),created:MH.object({connection:MH.boolean(),virtualMcp:MH.boolean()})});xo0=g({name:"REPORTS_SETUP",description:"Create or return the Reports connection and virtual MCP for the current organization.",annotations:{title:"Set Up Reports",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cW4,outputSchema:dW4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check("COLLECTION_CONNECTIONS_CREATE");let Y=c0(Z);if(!Y)throw Error("User ID required to set up Reports");let X=CO($.siteUrl);if(!X.ok)throw Error(X.error);let J=A8.REPORTS(Q.id),G=bg(Q.id),W={email:Z.auth.user?.email,reportUrl:`${Z.baseUrl}${EX0(Q.slug??Q.id,{projectId:G,panel:"app",search:{connection:J,tool:bo0}})}`},K=await Z.storage.connections.findById(J,Q.id),H={connection:!1,virtualMcp:!1},F=await R7$({siteUrl:X.value,orgId:Q.id,orgName:Q.name,...W}),U=A7$();if(K)console.log("[reports] syncing connection to claimed site",{orgId:Q.id,siteUrl:X.value,connectionId:J}),K=await Z.storage.connections.update(K.id,{connection_url:U,connection_token:F.authorizationToken,metadata:{...K.metadata??{},siteUrl:X.value}});else{console.log("[reports] creating connection",{orgId:Q.id,siteUrl:X.value,connectionId:J});try{let L=ra1(Q.id,F.authorizationToken,U);K=await Z.storage.connections.create({...L,metadata:{...L.metadata??{},siteUrl:X.value},organization_id:Q.id,created_by:Y}),H.connection=!0}catch(L){K=await mW4(Z,J,Q.id,L)}}let N=await Z.storage.virtualMcps.findById(G,Q.id);if(!N){console.log("[reports] creating virtual MCP",{orgId:Q.id,siteUrl:X.value,connectionId:K.id,virtualMcpId:G});try{N=await Z.storage.virtualMcps.create(Q.id,Y,sa1(Q.id,K.id),{id:G}),H.virtualMcp=!0}catch(L){N=await iW4(Z,G,Q.id,L)}}if(!N.pinned)N=await Z.storage.virtualMcps.update(N.id,Y,{pinned:!0});let B=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",Q.id).executeTakeFirst();if((B?Date.now()-new Date(B.createdAt).getTime():Number.POSITIVE_INFINITY)<lW4){let w=(await Z.storage.organizationSettings.get(Q.id))?.flags,j={};if(w?.reports_only==null)j.reports_only=!0;if(Object.keys(j).length>0)await Z.storage.organizationSettings.upsert(Q.id,{flags:j})}return{connection:K,virtualMcp:N,reportApp:{connectionId:K.id,virtualMcpId:N.id,toolName:bo0},created:H}}})});var FQ$=O(()=>{V7$();k7$();S7$();KQ$();HQ$()});function Br($,Z,Q){if(Z.some((Y)=>Y!=="*"&&Y.startsWith("SELF::"))&&$.SELF===void 0)$.SELF={value:`${Q}_self`}}function Dr($,Z){let Q=new Map;for(let Y of Z){if(Y==="*")continue;let[X,J]=zY0(Y);if(!nW4.has(J))continue;let G=Co(X,$);if(typeof G!=="object"||G===null||!("value"in G))continue;let W=G.value;if(typeof W!=="string")continue;Q.set(`${W}:${J}`,{targetConnectionId:W,scope:J})}return[...Q.values()]}async function Or($,Z,Q,Y){for(let G of Z){if(G==="*")continue;let[W]=zY0(G),K=Co(W,$);if(K===void 0||K===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let X=h4$($,Z),J=`${Q}_self`;for(let G of X){if(G===J)continue;let W=await Y.storage.connections.findById(G);if(!W||W.organization_id!==Q)throw Error(`Referenced connection not found: ${G}`);try{await Y.access.check(G)}catch(K){throw Error(`Access denied to referenced connection: ${G}. ${K.message}`)}}}var nW4;var yo0=O(()=>{rn0();GQ0();nW4=new Set([XQ0,JQ0])});import{z as UQ$}from"zod";var tW4,oW4,go0;var NQ$=O(()=>{_4();R0();Z$();RX();Cz();yo0();$X0();mK();tW4=UQ$.object({data:u50.describe("Data for the new connection (id is auto-generated if not provided)")}),oW4=UQ$.object({item:wQ.describe("The created connection entity")}),go0=g({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection. Auto-fetches and caches the server's tool list.",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:tW4,outputSchema:oW4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to create connection");let X={...$.data,organization_id:Q.id,created_by:Y};if(X.id){if((await Z.storage.connections.findById(X.id))?.organization_id===Q.id)throw Error("Connection already exists in organization");if(await Z.storage.connections.findBySanitizedId(X.id))throw Error("Connection id conflicts with an existing connection's isolated database schema")}if(X.connection_type==="VIRTUAL"){let U=Ly(X.connection_url);if(!U)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let N=await Z.storage.virtualMcps.findById(U);if(!N)throw Error(`Virtual MCP not found: ${U}`);if(N.organization_id!==Q.id)throw Error("Virtual MCP does not belong to the current organization");X.connection_url=wy(U)}if(X.connection_type==="STDIO"&&!O0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let J=await eh({id:`pending-${Date.now()}`,title:X.title,connection_type:X.connection_type,connection_url:X.connection_url,connection_token:X.connection_token,connection_headers:X.connection_headers}).catch(()=>null),G=J?.tools?.length?J.tools:null,W=J?.scopes?.length?J.scopes:X.configuration_scopes??null,K=X.configuration_state??null;if(K&&W?.length)Br(K,W,Q.id),await Or(K,W,Q.id,Z);let H=await Z.storage.connections.createNew({...X,tools:null,configuration_state:K,configuration_scopes:W}),F=K&&W?.length?Dr(K,W):[];if(F.length>0){let U;try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:Q.id,subjectConnectionId:H.id,createdBy:Y,grants:F});let{plaintextToken:N,record:B}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:Q.id,subjectConnectionId:H.id});U=B.id,await(await m7(H,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:K,scopes:W,firstRun:!0,vault:{baseUrl:Z.baseUrl,org:Q.slug??Q.id,subjectConnectionId:H.id,token:N}}})}catch(N){if(U)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:Q.id,subjectConnectionId:H.id,tokenId:U});throw await Z.storage.connections.delete(H.id),N}}if(G)R9()?.set("tools",H.id,G).catch(()=>{});return M1.capture({distinctId:Y,event:"connection_created",groups:{organization:Q.id},properties:{connection_id:H.id,connection_type:H.connection_type,app_name:H.app_name??null,organization_id:Q.id,tools_count:G?.length??0}}),{item:H}}})});import{z as GG}from"zod/v4";import{z as BQ$}from"zod/v4";import{z as zX0}from"zod/v4";import{z as IH}from"zod/v4";import{z as eW4}from"zod/v4";import{z as _z}from"zod/v4";import{z as VH}from"zod/v4";import{z as H7}from"zod/v4";import{z as DQ$}from"zod/v4";import{z as TX0}from"zod/v4";import{z as AK4}from"zod/v4";import{z as OQ$}from"zod/v4";import{z as PX0}from"zod/v4";import{z as CK4}from"zod/v4";function Lr($,Z){if($===Z)return!0;if($==null||Z==null)return $===Z;if(typeof $!==typeof Z)return!1;if(Array.isArray($)&&Array.isArray(Z)){if($.length!==Z.length)return!1;return $.every((Q,Y)=>Lr(Q,Z[Y]))}if(typeof $==="object"&&typeof Z==="object"){let Q=Object.keys($),Y=Object.keys(Z);if(Q.length!==Y.length)return!1;return Q.every((X)=>Y.includes(X)&&Lr($[X],Z[X]))}return!1}function EK4(){return($)=>{if(!Array.isArray($))return!0;let Z=[];return $.every((Q)=>{if(Z.some((X)=>Lr(Q,X)))return!1;return Z.push(Q),!0})}}function AX0($,Z){return $.safeParse(Z).success}function i7($){if(typeof $==="boolean")return $?GG.any():GG.never();let Z={};for(let X of bK4)X.apply(Z,$);let Q=[];if(Z.string!==!1)Q.push(Z.string||GG.string());if(Z.number!==!1)Q.push(Z.number||GG.number());if(Z.boolean!==!1)Q.push(Z.boolean||GG.boolean());if(Z.null!==!1)Q.push(Z.null||GG.null());if(Z.array!==!1)Q.push(Z.array||GG.array(GG.any()));if(Z.tuple!==!1&&Z.tuple!==void 0)Q.push(Z.tuple);if(Z.object!==!1)if(Z.object)Q.push(Z.object);else{let X=GG.custom((J)=>{return typeof J==="object"&&J!==null&&!Array.isArray(J)},"Must be an object, not an array");Q.push(X)}if(Z.file!==!1&&Z.file!==void 0)Q.push(Z.file);let Y;if(Q.length===0)Y=GG.never();else if(Q.length===1)Y=Q[0];else if(!Object.keys($).some((J)=>J!=="$schema"&&J!=="title"&&J!=="description"))Y=GG.any();else Y=GG.union(Q);for(let X of xK4)Y=X.apply(Y,$);return Y}var rW4=class{apply($,Z){if(!Z.type)return;let Q=Array.isArray(Z.type)?Z.type:[Z.type],Y=new Set(Q);if(!Y.has("string"))$.string=!1;if(!Y.has("number")&&!Y.has("integer"))$.number=!1;if(!Y.has("boolean"))$.boolean=!1;if(!Y.has("null"))$.null=!1;if(!Y.has("array"))$.array=!1;if(!Y.has("object"))$.object=!1;if(Y.has("integer")&&$.number!==!1){let X=$.number||BQ$.number();if(X instanceof BQ$.ZodNumber)$.number=X.int()}}},sW4=class{apply($,Z){if(Z.const===void 0)return;let Q=Z.const;if($.string=!1,$.number=!1,$.boolean=!1,$.null=!1,$.array=!1,$.object=!1,typeof Q==="string")$.string=zX0.literal(Q);else if(typeof Q==="number")$.number=zX0.literal(Q);else if(typeof Q==="boolean")$.boolean=zX0.literal(Q);else if(Q===null)$.null=zX0.null();else if(Array.isArray(Q))$.array=void 0;else if(typeof Q==="object")$.object=void 0}},aW4=class{apply($,Z){if(!Z.enum)return;if(Z.enum.length===0){if(!Z.type)$.string=!1,$.number=!1,$.boolean=!1,$.null=!1,$.array=!1,$.object=!1;return}let Q={string:Z.enum.filter((Y)=>typeof Y==="string"),number:Z.enum.filter((Y)=>typeof Y==="number"),boolean:Z.enum.filter((Y)=>typeof Y==="boolean"),null:Z.enum.filter((Y)=>Y===null),array:Z.enum.filter((Y)=>Array.isArray(Y)),object:Z.enum.filter((Y)=>typeof Y==="object"&&Y!==null&&!Array.isArray(Y))};$.string=this.createTypeSchema(Q.string,"string"),$.number=this.createTypeSchema(Q.number,"number"),$.boolean=this.createTypeSchema(Q.boolean,"boolean"),$.null=Q.null.length>0?IH.null():!1,$.array=Q.array.length>0?void 0:!1,$.object=Q.object.length>0?void 0:!1}createTypeSchema($,Z){if($.length===0)return!1;if($.length===1)return IH.literal($[0]);if(Z==="string")return IH.enum($);if(Z==="number"){let[Q,Y,...X]=$;return IH.union([IH.literal(Q),IH.literal(Y),...X.map((J)=>IH.literal(J))])}if(Z==="boolean")return IH.union([IH.literal(!0),IH.literal(!1)]);return!1}},$K4=class{apply($,Z){let Q=Z;if(Q.type==="string"&&Q.format==="binary"&&Q.contentEncoding==="binary"){let Y=eW4.file();if(Q.minLength!==void 0)Y=Y.min(Q.minLength);if(Q.maxLength!==void 0)Y=Y.max(Q.maxLength);if(Q.contentMediaType!==void 0)Y=Y.mime(Q.contentMediaType);$.file=Y,$.string=!1}}},ZK4=class{apply($,Z){let Q=Z;if(Z.type===void 0&&(Q.minLength!==void 0||Q.maxLength!==void 0||Q.pattern!==void 0)){if($.string===void 0)$.string=_z.string()}}},QK4=class{apply($,Z){let Q=Z;if(Q.minLength===void 0)return;if($.string!==!1){let Y=$.string||_z.string();if(Y instanceof _z.ZodString)$.string=Y.refine((X)=>{return Array.from(X).length>=Q.minLength},{message:`String must be at least ${Q.minLength} characters long`})}}},YK4=class{apply($,Z){let Q=Z;if(Q.maxLength===void 0)return;if($.string!==!1){let Y=$.string||_z.string();if(Y instanceof _z.ZodString)$.string=Y.refine((X)=>{return Array.from(X).length<=Q.maxLength},{message:`String must be at most ${Q.maxLength} characters long`})}}},XK4=class{apply($,Z){let Q=Z;if(!Q.pattern)return;if($.string!==!1){let Y=$.string||_z.string();if(Y instanceof _z.ZodString){let X=new RegExp(Q.pattern);$.string=Y.regex(X)}}}},JK4=class{apply($,Z){let Q=Z;if(Q.minimum===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)$.number=Y.min(Q.minimum)}}},GK4=class{apply($,Z){let Q=Z;if(Q.maximum===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)$.number=Y.max(Q.maximum)}}},WK4=class{apply($,Z){let Q=Z;if(Q.exclusiveMinimum===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)if(typeof Q.exclusiveMinimum==="number")$.number=Y.gt(Q.exclusiveMinimum);else $.number=!1}}},KK4=class{apply($,Z){let Q=Z;if(Q.exclusiveMaximum===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)if(typeof Q.exclusiveMaximum==="number")$.number=Y.lt(Q.exclusiveMaximum);else $.number=!1}}},HK4=class{apply($,Z){let Q=Z;if(Q.multipleOf===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)$.number=Y.refine((X)=>{if(Q.multipleOf===0)return!1;let J=X/Q.multipleOf,G=Math.round(J),W=Math.min(Math.abs(X)*Number.EPSILON*10,Math.abs(Q.multipleOf)*Number.EPSILON*10);return Math.abs(J-G)<=W/Math.abs(Q.multipleOf)},{message:`Must be a multiple of ${Q.multipleOf}`})}}},FK4=class{apply($,Z){let Q=Z;if(Z.type===void 0&&(Q.minItems!==void 0||Q.maxItems!==void 0||Q.items!==void 0||Q.prefixItems!==void 0)){if($.array===void 0)$.array=H7.array(H7.any())}}},UK4=class{apply($,Z){let Q=Z;if(Q.minItems===void 0)return;if($.array!==!1)$.array=($.array||H7.array(H7.any())).min(Q.minItems)}},NK4=class{apply($,Z){let Q=Z;if(Q.maxItems===void 0)return;if($.array!==!1)$.array=($.array||H7.array(H7.any())).max(Q.maxItems)}},BK4=class{apply($,Z){let Q=Z;if($.array===!1)return;if(Array.isArray(Q.items))$.array=$.array||H7.array(H7.any());else if(Q.items&&typeof Q.items!=="boolean"&&!Q.prefixItems){let Y=i7(Q.items),X=H7.array(Y);if($.array&&$.array instanceof H7.ZodArray){let J=$.array._def;if(J.checks)J.checks.forEach((G)=>{if(G._zod&&G._zod.def){let W=G._zod.def;if(W.check==="min_length"&&W.minimum!==void 0)X=X.min(W.minimum);else if(W.check==="max_length"&&W.maximum!==void 0)X=X.max(W.maximum)}})}$.array=X}else if(typeof Q.items==="boolean"&&Q.items===!1)if(!Q.prefixItems)$.array=H7.array(H7.any()).max(0);else $.array=$.array||H7.array(H7.any());else if(typeof Q.items==="boolean"&&Q.items===!0)$.array=$.array||H7.array(H7.any());else if(Q.prefixItems)$.array=$.array||H7.array(H7.any())}},DK4=class{apply($,Z){if(Z.type!=="array")return;let Q=Z;if(!Array.isArray(Q.items))return;if($.array===!1)return;let Y=Q.items.map((J)=>i7(J)),X;if(Y.length===0)X=DQ$.tuple([]);else X=DQ$.tuple(Y);if(Q.minItems!==void 0&&Q.minItems>Y.length)X=!1;if(Q.maxItems!==void 0&&Q.maxItems<Y.length)X=!1;$.tuple=X,$.array=!1}},OK4=class{apply($,Z){let Q=Z;if($.object===!1)return;if(Q.properties||Q.required||Q.additionalProperties!==void 0)$.object=$.object||TX0.object({}).passthrough()}},LK4=class{apply($,Z){let Q=Z;if(Z.type===void 0&&(Q.maxProperties!==void 0||Q.minProperties!==void 0)){if($.object===void 0)$.object=TX0.object({}).passthrough()}}},wK4=class{apply($,Z){let Q=Z;if(Q.maxProperties===void 0)return;if($.object!==!1){let Y=$.object||TX0.object({}).passthrough();$.object=Y.refine((X)=>Object.keys(X).length<=Q.maxProperties,{message:`Object must have at most ${Q.maxProperties} properties`})}}},jK4=class{apply($,Z){let Q=Z;if(Q.minProperties===void 0)return;if($.object!==!1){let Y=$.object||TX0.object({}).passthrough();$.object=Y.refine((X)=>Object.keys(X).length>=Q.minProperties,{message:`Object must have at least ${Q.minProperties} properties`})}}},zK4=class{apply($,Z){if(!Z.not)return $;let Q=i7(Z.not);return $.refine((Y)=>!AX0(Q,Y),{message:"Value must not match the 'not' schema"})}},PK4=class{apply($,Z){if(Z.uniqueItems!==!0)return $;return $.refine(EK4(),{message:"Array items must be unique"})}},TK4=class{apply($,Z){if(!Z.allOf||Z.allOf.length===0)return $;return Z.allOf.map((Y)=>i7(Y)).reduce((Y,X)=>AK4.intersection(Y,X),$)}},RK4=class{apply($,Z){if(!Z.anyOf||Z.anyOf.length===0)return $;let Q=Z.anyOf.length===1?i7(Z.anyOf[0]):OQ$.union([i7(Z.anyOf[0]),i7(Z.anyOf[1]),...Z.anyOf.slice(2).map((Y)=>i7(Y))]);return OQ$.intersection($,Q)}},qK4=class{apply($,Z){if(!Z.oneOf||Z.oneOf.length===0)return $;let Q=Z.oneOf.map((Y)=>i7(Y));return $.refine((Y)=>{let X=0;for(let J of Q)if(J.safeParse(Y).success){if(X++,X>1)return!1}return X===1},{message:"Value must match exactly one of the oneOf schemas"})}},MK4=class{apply($,Z){let Q=Z;if(Q.prefixItems&&Array.isArray(Q.prefixItems)){let X=Q.prefixItems.map((J)=>i7(J));return $.refine((J)=>{if(!Array.isArray(J))return!0;for(let G=0;G<Math.min(J.length,X.length);G++)if(!AX0(X[G],J[G]))return!1;if(J.length>X.length){if(typeof Q.items==="boolean"&&Q.items===!1)return!1;else if(Q.items&&typeof Q.items==="object"&&!Array.isArray(Q.items)){let G=i7(Q.items);for(let W=X.length;W<J.length;W++)if(!AX0(G,J[W]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return $}},IK4=class{apply($,Z){let Q=Z;if(!Q.properties&&!Q.required&&Q.additionalProperties!==!1)return $;if($ instanceof PX0.ZodObject||$ instanceof PX0.ZodRecord){let Y={};if(Q.properties){for(let[X,J]of Object.entries(Q.properties))if(J!==void 0)Y[X]=i7(J)}if(Q.required&&Array.isArray(Q.required)){let X=new Set(Q.required);for(let J of Object.keys(Y))if(!X.has(J))Y[J]=Y[J].optional()}else for(let X of Object.keys(Y))Y[X]=Y[X].optional();if(Q.additionalProperties===!1)return PX0.object(Y);else return PX0.object(Y).passthrough()}return $.refine((Y)=>{if(typeof Y!=="object"||Y===null||Array.isArray(Y))return!0;if(Q.properties){for(let[X,J]of Object.entries(Q.properties))if(J!==void 0){if(Object.getOwnPropertyDescriptor(Y,X)!==void 0){if(!i7(J).safeParse(Y[X]).success)return!1}}}if(Q.required&&Array.isArray(Q.required)){for(let X of Q.required)if(Object.getOwnPropertyDescriptor(Y,X)===void 0)return!1}if(Q.additionalProperties===!1&&Q.properties){let X=new Set(Object.keys(Q.properties));for(let J in Y)if(!X.has(J))return!1}return!0},{message:"Object constraints validation failed"})}},VK4=class{apply($,Z){if(!Z.enum||Z.enum.length===0)return $;let Q=Z.enum.filter((Y)=>Array.isArray(Y)||typeof Y==="object"&&Y!==null);if(Q.length===0)return $;return $.refine((Y)=>{if(typeof Y!=="object"||Y===null)return!0;return Q.some((X)=>Lr(Y,X))},{message:"Value must match one of the enum values"})}},kK4=class{apply($,Z){if(Z.const===void 0)return $;let Q=Z.const;if(typeof Q!=="object"||Q===null)return $;return $.refine((Y)=>Lr(Y,Q),{message:"Value must equal the const value"})}},SK4=class{apply($,Z){if(Z.description)$=$.describe(Z.description);return $}},_K4=class{apply($,Z){var Q;let Y=Z;if(!((Q=Y.required)==null?void 0:Q.includes("__proto__"))||Z.type!==void 0)return $;return CK4.any().refine((X)=>this.validateRequired(X,Y.required),{message:"Missing required properties"})}validateRequired($,Z){if(typeof $!=="object"||$===null||Array.isArray($))return!0;return Z.every((Q)=>Object.prototype.hasOwnProperty.call($,Q))}},vK4=class{apply($,Z){var Q;let Y=Z;if(Y.contains===void 0)return $;let X=i7(Y.contains),J=(Q=Y.minContains)!=null?Q:1,G=Y.maxContains;return $.refine((W)=>{if(!Array.isArray(W))return!0;let K=0;for(let H of W)if(AX0(X,H))K++;if(K<J)return!1;if(G!==void 0&&K>G)return!1;return!0},{message:"Array must contain required items matching the schema"})}},fK4=class{apply($,Z){let{default:Q}=Z;if(Q===void 0)return $;if(!$.safeParse(Q).success)return $;return $.default(Q)}},bK4,xK4;var LQ$=O(()=>{bK4=[new sW4,new aW4,new rW4,new $K4,new ZK4,new FK4,new LK4,new QK4,new YK4,new XK4,new JK4,new GK4,new WK4,new KK4,new HK4,new DK4,new UK4,new NK4,new BK4,new wK4,new jK4,new OK4],xK4=[new _K4,new VK4,new kK4,new TK4,new RK4,new qK4,new MK4,new IK4,new vK4,new zK4,new PK4,new fK4,new SK4]});class ho0{constructor($){this._url=$}start(){if(this._socket)throw Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise(($,Z)=>{this._socket=new WebSocket(this._url,yK4),this._socket.onerror=(Q)=>{let Y="error"in Q?Q.error:Error(`WebSocket error: ${JSON.stringify(Q)}`);Z(Y),this.onerror?.(Y)},this._socket.onopen=()=>{$()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=(Q)=>{let Y;try{Y=EJ.parse(JSON.parse(Q.data))}catch(X){this.onerror?.(X);return}this.onmessage?.(Y)}})}async close(){this._socket?.close()}send($){return new Promise((Z,Q)=>{if(!this._socket){Q(Error("Not connected"));return}this._socket?.send(JSON.stringify($)),Z()})}}var yK4="mcp";var wQ$=O(()=>{w9()});function gK4($){let Z=$;if(!Z||typeof Z!=="object"||!("method"in Z))return null;switch(Z.method){case"initialize":{let Q=Z?.params?.protocolVersion;if(!Q)return null;return{type:"emit",message:{result:{protocolVersion:Q,capabilities:{tools:{}},serverInfo:{name:"deco-chat-server",version:"1.0.0"}},jsonrpc:Z.jsonrpc??"2.0",id:Z.id}}}case"notifications/roots/list_changed":case"notifications/initialized":case"notifications/cancelled":case"notifications/progress":return{type:"suppress"};default:return null}}var RX0;var uo0=O(()=>{Mg();RX0=class RX0 extends DH{constructor($,Z){super($,Z)}send($,Z){let Q=gK4($);if(Q?.type==="emit")return this.onmessage?.(Q.message),Promise.resolve();if(Q?.type==="suppress")return Promise.resolve();return super.send($,Z)}}});var jQ$,EQ$=async($,Z,Q)=>{let Y=hK4($.connection,Z,Q);if(!Y)throw Error("Unknown MCP connection type");let X=new jQ$({name:$?.name??"MCP Client",version:"1.0.0"});return await X.connect(Y),{client:X}},hK4=($,Z,Q)=>{if($.type==="Websocket")return new ho0(new URL($.url));if($.type!=="SSE"&&$.type!=="HTTP")return null;let X={...$.token?{authorization:`Bearer ${$.token}`}:{},...Q??{},..."headers"in $?$.headers||{}:{}};if($.type==="SSE"){let J={requestInit:{headers:X,signal:Z}};if($.token)J.eventSourceInit={fetch:(G,W)=>{return fetch(G,{...W,headers:{...X,Accept:"text/event-stream"},signal:Z})}};return new lU(new URL($.url),J)}return new RX0(new URL($.url),{requestInit:{headers:X,signal:Z,credentials:"include"}})};var zQ$=O(()=>{NH();Wt();wQ$();w9();CQ();uo0();jQ$=class jQ$ extends JZ{constructor($,Z){super($,{jsonSchemaValidator:k5,...Z})}async listTools($,Z){return await this.request({method:"tools/list",params:$},hi,Z)}}});function lK4($,Z){if(vz.set($,Z),vz.size>uK4){let Q=vz.keys().next().value;if(Q!==void 0)vz.delete(Q)}}function TQ$($){let Z=(Q)=>{if("connection"in $)return EQ$({connection:$.connection},void 0,Q);return $.client};return new Proxy({},{get(Q,Y){if(Y==="toJSON")return null;if(typeof Y!=="string")throw Error("Name must be a string");if(Y==="listTools")return W;async function X(K,H=Y){let F=$?.debugId?.(),U=F?{"x-trace-debug-id":F}:void 0,{client:N}=await Z(U),{structuredContent:B,isError:D,content:L}=await N.callTool({name:String(H),arguments:K});if(D){let j=L?.[0]?.text,E=typeof j==="string"?PQ$(j):null,z=E?.code&&typeof $?.getErrorByStatusCode==="function"?$.getErrorByStatusCode(E.code,E.message,E.traceId):null;if(z)throw z;throw Error(`Tool ${String(H)} returned an error: ${JSON.stringify(B??L)}`)}if(B!==void 0)return B;let w=L?.[0]?.text;return typeof w==="string"?PQ$(w):void 0}async function J(){let{client:K}=await Z(),{tools:H}=await K.listTools();return H}async function G(){if(!("connection"in $))return J();let K=$.connection,H=JSON.stringify(K);try{if(!vz.has(H))lK4(H,J());return await vz.get(H)}catch(F){console.error("Failed to list tools",F),vz.delete(H);return}}async function W(){return(await G()??[]).map((H)=>AQ$(H,X))}return X.asTool=async()=>{let H=(await G()??[]).find((F)=>F.name===Y);if(!H)throw Error(`Tool ${Y} not found`);return AQ$(H,X)},X}})}var PQ$=($)=>{try{return JSON.parse($)}catch{return $}},uK4=500,vz,AQ$=($,Z)=>{return{...$,id:$.name,inputSchema:$.inputSchema?i7($.inputSchema):void 0,outputSchema:$.outputSchema?i7($.outputSchema):void 0,execute:(Q)=>{return Z(Q.context,$.name)}}};var RQ$=O(()=>{LQ$();zQ$();vz=new Map});function hO($){return TQ$($)}var Ju;var lo0=O(()=>{RQ$();Ju=new Proxy({},{get($,Z){if(Z==="toJSON")return null;if(Z==="forConnection")return(Q)=>hO({connection:Q});if(Z==="forClient")return(Q)=>hO({client:Q});return globalThis[Z]}})});function qX0($){return{isImplementedBy:(Z)=>{for(let Q of $){let Y=typeof Q.name==="string"?new RegExp(`^${Q.name}$`):Q.name,X=Z.find((J)=>Y.test(J.name));if(!X&&Q.opt)continue;if(!X)return!1}return!0}}}var kH=($)=>{return{...qX0($),forClient:(Z)=>{return hO({client:Z})},forConnection:(Z)=>{return hO({connection:Z})}}};var fz=O(()=>{lo0()});import{z as Y9}from"zod";var qQ$,MX0,MQ$,IX0,IQ$,cK4;var VQ$=O(()=>{fz();qQ$=Y9.object({specversion:Y9.literal("1.0").describe("CloudEvents specification version"),id:Y9.string().describe("Unique identifier for this event (UUID recommended)"),source:Y9.string().describe("Connection ID of the event publisher"),type:Y9.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:Y9.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:Y9.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:Y9.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:Y9.string().url().optional().describe("URI to the schema for the data attribute"),data:Y9.unknown().optional().describe("Event payload (any JSON value)")}),MX0=Y9.object({events:Y9.array(qQ$).min(1).describe("Batch of CloudEvents to process")}),MQ$=Y9.object({success:Y9.boolean().optional().describe("Whether this event was processed successfully"),error:Y9.string().optional().describe("Error message for this event"),retryAfter:Y9.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),IX0=Y9.object({success:Y9.boolean().optional().describe("Batch success - applies to events not in results"),error:Y9.string().optional().describe("Batch error message - applies to events not in results"),processedCount:Y9.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:Y9.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:Y9.record(Y9.string(),MQ$).optional().describe("Per-event results keyed by event ID")}),IQ$=[{name:"ON_EVENTS",inputSchema:MX0,outputSchema:IX0}],cK4=kH(IQ$)});import{z as X9}from"zod";var kQ$,SQ$,CQ$,_Q$,vQ$,fQ$,VX0,co0;var do0=O(()=>{fz();kQ$=X9.object({type:X9.literal("string"),enum:X9.array(X9.string()).optional(),description:X9.string().optional()}),SQ$=X9.object({type:X9.string(),description:X9.string(),paramsSchema:X9.record(X9.string(),kQ$)}),CQ$=X9.object({}),_Q$=X9.object({triggers:X9.array(SQ$)}),vQ$=X9.object({type:X9.string(),params:X9.record(X9.string(),X9.string()),enabled:X9.boolean(),callbackUrl:X9.url().optional(),callbackToken:X9.string().min(1).optional()}),fQ$=X9.object({success:X9.boolean()}),VX0=[{name:"TRIGGER_LIST",inputSchema:CQ$,outputSchema:_Q$},{name:"TRIGGER_CONFIGURE",inputSchema:vQ$,outputSchema:fQ$}],co0=kH(VX0)});import{z as _$}from"zod";var dK4,mK4,iK4,pK4,nK4,tK4,oK4,rK4,sK4,aK4,eK4,$H4,bz;var wr=O(()=>{dK4=_$.object({prefix:_$.string().optional().describe("Filter objects by prefix (e.g., 'folder/' for folder contents)"),maxKeys:_$.number().optional().default(1000).describe("Maximum number of keys to return (default: 1000)"),continuationToken:_$.string().optional().describe("Token for pagination from previous response"),delimiter:_$.string().optional().describe("Delimiter for grouping keys (typically '/'). When set, commonPrefixes returns folder paths.")}),mK4=_$.object({objects:_$.array(_$.object({key:_$.string().describe("Object key/path"),size:_$.number().describe("Object size in bytes"),lastModified:_$.string().describe("Last modified timestamp"),etag:_$.string().describe("Entity tag for the object")})),nextContinuationToken:_$.string().optional().describe("Token for fetching next page of results"),isTruncated:_$.boolean().describe("Whether there are more results available"),commonPrefixes:_$.array(_$.string()).optional().describe("Folder paths when delimiter is used (e.g., ['photos/2024/', 'photos/2025/'])")}),iK4=_$.object({key:_$.string().describe("Object key/path to get metadata for")}),pK4=_$.object({contentType:_$.string().optional().describe("MIME type of the object"),contentLength:_$.number().describe("Size of the object in bytes"),lastModified:_$.string().describe("Last modified timestamp"),etag:_$.string().describe("Entity tag for the object"),metadata:_$.record(_$.string(),_$.string()).optional().describe("Custom metadata key-value pairs")}),nK4=_$.object({key:_$.string().describe("Object key/path to generate URL for"),expiresIn:_$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)")}),tK4=_$.object({url:_$.string().describe("Presigned URL for downloading the object"),expiresIn:_$.number().describe("Expiration time in seconds that was used")}),oK4=_$.object({key:_$.string().describe("Object key/path for the upload"),expiresIn:_$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)"),contentType:_$.string().optional().describe("MIME type for the object being uploaded")}),rK4=_$.object({url:_$.string().describe("Presigned URL for uploading the object"),expiresIn:_$.number().describe("Expiration time in seconds that was used")}),sK4=_$.object({key:_$.string().describe("Object key/path to delete")}),aK4=_$.object({success:_$.boolean().describe("Whether the deletion was successful"),key:_$.string().describe("The key that was deleted")}),eK4=_$.object({keys:_$.array(_$.string()).max(1000).describe("Array of object keys/paths to delete (max 1000)")}),$H4=_$.object({deleted:_$.array(_$.string()).describe("Array of successfully deleted keys"),errors:_$.array(_$.object({key:_$.string(),message:_$.string()})).describe("Array of errors for failed deletions")}),bz=[{name:"LIST_OBJECTS",inputSchema:dK4,outputSchema:mK4},{name:"GET_OBJECT_METADATA",inputSchema:iK4,outputSchema:pK4},{name:"GET_PRESIGNED_URL",inputSchema:nK4,outputSchema:tK4},{name:"PUT_PRESIGNED_URL",inputSchema:oK4,outputSchema:rK4},{name:"DELETE_OBJECT",inputSchema:sK4,outputSchema:aK4},{name:"DELETE_OBJECTS",inputSchema:eK4,outputSchema:$H4}]});import{z as _6}from"zod";var bQ$,xQ$,yQ$,jr,kX0,SX0,CX0,_X0,ZH4;var mo0=O(()=>{fz();bQ$=_6.object({primary:_6.string().optional().describe("Primary brand color (hex)"),secondary:_6.string().optional().describe("Secondary brand color (hex)"),accent:_6.string().optional().describe("Accent / highlight color (hex)"),background:_6.string().optional().describe("Background color (hex)"),foreground:_6.string().optional().describe("Foreground / text color (hex)")}),xQ$=_6.object({heading:_6.string().optional().describe("Font family for headings"),body:_6.string().optional().describe("Font family for body text"),code:_6.string().optional().describe("Font family for code / monospace")}),yQ$=_6.object({logo:_6.string().optional().describe("Logo URL"),favicon:_6.string().optional().describe("Favicon URL"),ogImage:_6.string().optional().describe("Open Graph image URL")}),jr=_6.object({id:_6.string(),name:_6.string().describe("Brand / company name"),domain:_6.string().optional().describe("Company domain (e.g. example.com)"),colors:bQ$.optional().describe("Semantic color palette"),fonts:xQ$.optional().describe("Font families by role"),assets:yQ$.optional().describe("Visual identity assets"),overview:_6.string().optional().describe("Company overview / description"),tagline:_6.string().optional().describe("Brand tagline"),tone:_6.string().optional().describe("Tone of voice description"),metadata:_6.record(_6.string(),_6.unknown()).optional().describe("Extra design tokens and metadata")}),kX0=_6.object({id:_6.string().optional().describe("Brand ID. Omit to get the default brand.")}),SX0=_6.object({}),CX0=_6.object({items:_6.array(jr)}),_X0=[{name:"BRAND_GET",inputSchema:kX0,outputSchema:jr},{name:"BRAND_LIST",inputSchema:SX0,outputSchema:CX0,opt:!0}],ZH4=kH(_X0)});var io0=O(()=>{fz();VQ$();do0();wr();mo0()});import{z as M8}from"zod";function fX0($){let Q=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${Q}$`,"i")}function rU($){return M8.object({items:M8.array($).describe("Array of collection items"),totalCount:M8.number().int().min(0).optional().describe("Total number of matching items (if available)"),hasMore:M8.boolean().optional().describe("Whether there are more items available")})}function zr($){return M8.object({item:$.nullable().describe("The retrieved item, or null if not found")})}function XH4($){return M8.object({data:$.partial().describe("Data for the new entity (id may be auto-generated)")})}function JH4($){return M8.object({item:$.describe("The created entity with generated id")})}function GH4($){return M8.object({id:M8.string().describe("ID of the entity to update"),data:$.partial().describe("Partial entity data to update")})}function WH4($){return M8.object({item:$.describe("The updated entity")})}function Ar($){return M8.object({item:$.describe("The deleted entity")})}function bX0($,Z,Q){let Y=$.toUpperCase(),X=Q?.readOnly??!1,J=[{name:`COLLECTION_${Y}_LIST`,inputSchema:hW,outputSchema:rU(Z)},{name:`COLLECTION_${Y}_GET`,inputSchema:Er,outputSchema:zr(Z)}];if(!X)J.push({name:`COLLECTION_${Y}_CREATE`,inputSchema:XH4(Z),outputSchema:JH4(Z),opt:!0},{name:`COLLECTION_${Y}_UPDATE`,inputSchema:GH4(Z),outputSchema:WH4(Z),opt:!0},{name:`COLLECTION_${Y}_DELETE`,inputSchema:Pr,outputSchema:Ar(Z),opt:!0});return J}var vX0,QH4,gQ$,YH4,hW,Er,Pr;var hJ=O(()=>{vX0=M8.object({id:M8.string().describe("Unique identifier for the entity"),title:M8.string().describe("Human-readable title for the entity"),description:M8.string().nullish().describe("Description of the entity"),created_at:M8.string().datetime(),updated_at:M8.string().datetime(),created_by:M8.string().optional(),updated_by:M8.string().optional()}),QH4=M8.object({field:M8.array(M8.string()),operator:M8.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:M8.unknown()}),gQ$=M8.lazy(()=>M8.union([QH4,M8.object({operator:M8.enum(["and","or","not"]),conditions:M8.array(gQ$)})]));YH4=M8.object({field:M8.array(M8.string()),direction:M8.enum(["asc","desc"]),nulls:M8.enum(["first","last"]).optional()}),hW=M8.object({where:gQ$.optional().describe("Filter expression"),orderBy:M8.array(YH4).optional().describe("Sort expressions"),limit:M8.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:M8.number().int().min(0).optional().describe("Number of items to skip")});Er=M8.object({id:M8.string().describe("ID of the entity to retrieve")});Pr=M8.object({id:M8.string().describe("ID of the entity to delete")})});import{z as Gu}from"zod";var KH4,HH4,hQ$;var uQ$=O(()=>{hJ();KH4=vX0.extend({avatar:Gu.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:Gu.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:Gu.string().describe("Virtual MCP ID to use for this assistant"),model:Gu.object({id:Gu.string().describe("Model ID"),connectionId:Gu.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),HH4=bX0("assistant",KH4),hQ$=[...HH4]});import{z as F0}from"zod";var Tr,sU,cQ$,FH4,UH4,dQ$,NH4,BH4,DH4,OH4,LH4,wH4,mQ$,jH4,EH4,zH4,PH4,AH4,TH4,RH4,qH4,MH4,IH4,KS5,VH4,HS5,lQ$,kH4,SH4,xX0,FS5;var iQ$=O(()=>{fz();hJ();Tr=F0.lazy(()=>F0.union([F0.null(),F0.string(),F0.number(),F0.boolean(),F0.record(F0.string(),Tr),F0.array(Tr)])),sU=F0.record(F0.string(),F0.record(F0.string(),Tr)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),cQ$=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerOptions:sU}),FH4=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),UH4=F0.string().describe("File data as URL string"),dQ$=F0.object({type:F0.literal("file"),filename:F0.string().optional().describe("Optional filename of the file"),data:UH4,mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:sU}),NH4=F0.object({type:F0.literal("file"),mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:F0.string().describe("Generated file data as base64 encoded string")}),BH4=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerOptions:sU}),DH4=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),OH4=F0.object({type:F0.literal("tool-call"),toolCallId:F0.string().describe("ID of the tool call, used to match with tool result"),toolName:F0.string().describe("Name of the tool being called"),input:F0.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:F0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:sU}),LH4=F0.object({type:F0.literal("tool-call"),toolCallId:F0.string().describe("ID of the tool call"),toolName:F0.string().describe("Name of the tool being called"),input:F0.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:F0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),wH4=F0.union([F0.object({type:F0.literal("text"),value:F0.string()}),F0.object({type:F0.literal("json"),value:Tr}),F0.object({type:F0.literal("error-text"),value:F0.string()}),F0.object({type:F0.literal("error-json"),value:Tr}),F0.object({type:F0.literal("content"),value:F0.array(F0.union([F0.object({type:F0.literal("text"),text:F0.string().describe("Text content")}),F0.object({type:F0.literal("media"),data:F0.string().describe("Base-64 encoded media data"),mediaType:F0.string().describe("IANA media type")})]))}),F0.object({type:F0.literal("execution-denied"),reason:F0.string().optional()}),F0.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),mQ$=F0.object({type:F0.literal("tool-result"),toolCallId:F0.string().describe("ID of the tool call that this result is associated with"),toolName:F0.string().describe("Name of the tool that generated this result"),output:wH4.describe("Result of the tool call"),result:F0.unknown().describe("Unknown result of the tool call"),providerOptions:sU}),jH4=F0.object({type:F0.literal("tool-result"),toolCallId:F0.string().describe("ID of the tool call that this result is associated with"),toolName:F0.string().describe("Name of the tool that generated this result"),result:F0.any().describe("Result of the tool call (JSON-serializable)"),isError:F0.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:F0.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),EH4=F0.union([F0.object({type:F0.literal("source"),sourceType:F0.literal("url"),id:F0.string().describe("The ID of the source"),url:F0.string().describe("The URL of the source"),title:F0.string().optional().describe("The title of the source"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),F0.object({type:F0.literal("source"),sourceType:F0.literal("document"),id:F0.string().describe("The ID of the source"),mediaType:F0.string().describe("IANA media type of the document (e.g., application/pdf)"),title:F0.string().describe("The title of the document"),filename:F0.string().optional().describe("Optional filename of the document"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")})]),zH4=F0.object({role:F0.literal("system"),content:F0.string().describe("System message content"),providerOptions:sU}),PH4=F0.object({role:F0.literal("user"),content:F0.array(F0.union([cQ$,dQ$])).describe("User message content parts (text or file)"),providerOptions:sU}),AH4=F0.object({role:F0.literal("assistant"),content:F0.array(F0.union([cQ$,dQ$,BH4,OH4,mQ$])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:sU}),TH4=F0.object({role:F0.literal("tool"),content:F0.array(mQ$).describe("Tool message content (tool results)"),providerOptions:sU}),RH4=F0.union([zH4,PH4,AH4,TH4]),qH4=F0.array(RH4).describe("A list of messages forming the prompt"),MH4=F0.object({prompt:qH4.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:F0.number().optional().describe("Maximum number of tokens to generate"),temperature:F0.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:F0.number().optional().describe("Nucleus sampling parameter"),topK:F0.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:F0.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:F0.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:F0.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:F0.array(F0.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:F0.union([F0.object({type:F0.literal("text")}),F0.object({type:F0.literal("json"),schema:F0.any().optional().describe("JSON schema that the generated output should conform to"),name:F0.string().optional().describe("Name of output that should be generated"),description:F0.string().optional().describe("Description of the output that should be generated")})]).optional().describe("Response format. The output can either be text or JSON. Default is text"),tools:F0.array(F0.any()).optional().describe("The tools that are available for the model"),toolChoice:F0.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:F0.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:F0.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:F0.any().optional().describe("Additional provider-specific options")}),IH4=F0.object({content:F0.array(F0.union([FH4,NH4,DH4,LH4,jH4,EH4])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:F0.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:F0.looseObject({inputTokens:F0.number().optional(),outputTokens:F0.number().optional(),totalTokens:F0.number().optional(),reasoningTokens:F0.number().optional()}).describe("Usage information for the language model call"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata"),request:F0.object({body:F0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:F0.object({id:F0.string().optional().describe("ID for the generated response"),timestamp:F0.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:F0.string().optional().describe("The ID of the response model that was used"),headers:F0.record(F0.string(),F0.string()).optional().describe("Response headers"),body:F0.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:F0.array(F0.any()).describe("Warnings for the call, e.g. unsupported settings")}),KS5=F0.object({stream:F0.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:F0.object({body:F0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:F0.object({headers:F0.record(F0.string(),F0.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),VH4=F0.object({supportedUrls:F0.record(F0.string(),F0.array(F0.string())).describe("Supported URL patterns by media type for the provider")}),HS5=F0.object({modelId:F0.string().describe("The ID of the model"),logo:F0.string().nullable(),description:F0.string().nullable(),capabilities:F0.array(F0.string()),limits:F0.object({contextWindow:F0.number(),maxOutputTokens:F0.number()}).nullable(),costs:F0.object({input:F0.number(),output:F0.number()}).nullable(),provider:F0.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),lQ$=F0.object({modelId:F0.string().describe("The ID of the model"),callOptions:MH4}),kH4=vX0.extend({logo:F0.string().nullable(),description:F0.string().nullable(),capabilities:F0.array(F0.string()),limits:F0.object({contextWindow:F0.number(),maxOutputTokens:F0.number()}).nullable(),costs:F0.object({input:F0.number(),output:F0.number()}).nullable(),provider:F0.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),SH4=bX0("llm",kH4,{readOnly:!0}),xX0=[{name:"LLM_METADATA",inputSchema:F0.object({modelId:F0.string().describe("The ID of the model")}),outputSchema:VH4},{name:"LLM_DO_STREAM",inputSchema:lQ$},{name:"LLM_DO_GENERATE",inputSchema:lQ$,outputSchema:IH4},...SH4],FS5=kH(xX0)});import{z as xz}from"zod";var CH4,pQ$;var nQ$=O(()=>{CH4=xz.object({scopes:xz.array(xz.string()).describe("List of scopes available"),stateSchema:xz.record(xz.string(),xz.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),pQ$=[{name:"MCP_CONFIGURATION",inputSchema:xz.object({}),outputSchema:CH4}]});import{z as J9}from"zod";var _H4,vH4,tQ$;var oQ$=O(()=>{_H4=J9.object({}).strict(),vH4=J9.object({billing:J9.object({mode:J9.enum(["prepaid","postpaid"]),limitPeriod:J9.enum(["daily","weekly","monthly"]).nullable()}),limit:J9.object({total:J9.number().nullable(),remaining:J9.number().nullable(),reset:J9.string().nullable()}),usage:J9.object({total:J9.number(),daily:J9.number(),weekly:J9.number(),monthly:J9.number()}),alert:J9.object({enabled:J9.boolean(),threshold_usd:J9.number(),email:J9.string().nullable()}),connectionId:J9.string()}),tQ$=[{name:"GATEWAY_USAGE",inputSchema:_H4,outputSchema:vH4},{name:"GATEWAY_SET_LIMIT",inputSchema:J9.object({}),outputSchema:J9.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:J9.object({}),outputSchema:J9.object({}),opt:!0}]});import{z as rQ$}from"zod";function qX(){return BY()===null}function Wu($,Z){return $===A8.DEV_ASSETS(Z)}function Ku($,Z){let Q=la1(Z,$),Y=new Date().toISOString();return{id:Q.id??A8.DEV_ASSETS($),title:Q.title,description:Q.description??null,icon:Q.icon??null,app_name:Q.app_name??null,app_id:Q.app_id??null,organization_id:$,created_by:"system",created_at:Y,updated_at:Y,connection_type:Q.connection_type,connection_url:Q.connection_url??null,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:Q.metadata??null,tools:fH4,bindings:["OBJECT_STORAGE"],status:"active"}}var fH4;var yz=O(()=>{ZD();wr();T8();fH4=bz.map(($)=>({name:$.name,description:`${$.name} operation for local file storage`,inputSchema:rQ$.toJSONSchema($.inputSchema),outputSchema:rQ$.toJSONSchema($.outputSchema)}))});function sQ$($,Z){return $||Z===0}function aQ$($,Z,Q,Y,X){let J=Z?X+1:X,G=$.slice(0,Q),W=Y+Q<J;return{items:G,totalCount:J,hasMore:W}}function eQ$($,Z,Q){if(!Q)return{sqlOffset:$,sqlLimit:Z};if($===0)return{sqlOffset:0,sqlLimit:Math.max(Z-1,0)};return{sqlOffset:$-1,sqlLimit:Z}}function bH4($,Z){if(Z.length===0)return;let[Q,...Y]=Z,X=Q==="slug"?rD($):$[Q];for(let J of Y){if(X===null||typeof X!=="object")return;X=X[J]}return X}function xH4($,Z,Q){if($===void 0)return!0;switch(Z){case"eq":return Q===null?$===null:$===Q;case"gt":return $>Q;case"gte":return $>=Q;case"lt":return $<Q;case"lte":return $<=Q;case"in":return Array.isArray(Q)&&Q.includes($);case"like":return typeof $==="string"&&fX0(String(Q)).test($);case"contains":return String($).toLowerCase().includes(String(Q).toLowerCase());default:return!0}}function Rr($,Z){if(!Z)return!0;if("conditions"in Z){let{operator:Y,conditions:X}=Z;if(X.length===0)return!0;switch(Y){case"and":return X.every((J)=>Rr($,J));case"or":return X.some((J)=>Rr($,J));case"not":return!X.every((J)=>Rr($,J));default:return!0}}let Q=bH4($,Z.field);return xH4(Q,Z.operator,Z.value)}var $Y$=O(()=>{$Q0();hJ()});import{z as uO}from"zod";var yH4=8,gH4,hH4,uH4,lH4,gz;var po0=O(()=>{io0();uQ$();hJ();iQ$();nQ$();wr();oQ$();T8();R0();R5();RX();Cz();yz();mK();$Q0();$Y$();gH4=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:uO.object({})}],hH4={LLM:xX0,LLMS:xX0,ASSISTANTS:hQ$,MCP:pQ$,OBJECT_STORAGE:bz,AI_GATEWAY_BILLING:tQ$,TRIGGER:VX0,REGISTRY:gH4,BRAND:_X0},uH4=hW.extend({binding:uO.union([uO.array(uO.object({}).passthrough()),uO.object({}).passthrough(),uO.string()]).optional(),include_virtual:uO.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:uO.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),lH4=rU(wQ),gz=g({name:"COLLECTION_CONNECTIONS_LIST",description:"List all connections in the organization with filtering, sorting, and pagination",annotations:{title:"List Connections",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uH4,outputSchema:lH4,handler:async($,Z)=>{await Z.access.check();let Q=i(Z),Y=$.binding?typeof $.binding==="string"?(()=>{let j=hH4[$.binding.toUpperCase()];if(!j)throw Error(`Unknown binding: ${$.binding}`);return j})():$.binding:void 0,X=Y?qX0(Y):void 0,J=!!X,G=$.limit??100,W=$.offset??0,K=h5(),H=A8.DEV_ASSETS(Q.id),F=Ku(Q.id,K),U=(!$.slug||rD(F)===$.slug)&&Rr(F,$.where),N=qX()&&!J&&U,{sqlOffset:B,sqlLimit:D}=eQ$(W,G,N),{items:L,totalCount:w}=await Z.storage.connections.list(Q.id,{includeVirtual:$.include_virtual??!1,slug:$.slug,where:$.where,orderBy:$.orderBy,limit:J?void 0:D,offset:J?void 0:B});if(X){let j=R9(),E=A8.SELF(Q.id);await $u(L,yH4,async(z)=>{if(z.tools!==null)return;let P=z.id===E?async()=>{let{listManagementTools:q}=await Promise.resolve().then(() => (lO(),yX0));return q(Z)}:()=>Mo0(z,Z,ZQ0),A=await bO("tools",z.id,P,j,(q)=>Z.pendingRevalidations.push(q),fO);if(A!==null)z.tools=A})}if(qX()&&sQ$(J,W)&&U&&!L.some((j)=>j.id===H))L.unshift(F);if(J){let j=(await Promise.all(L.map(async(A)=>{if(!A.tools||A.tools.length===0)return null;return X.isImplementedBy(A.tools.map((k)=>({name:k.name,inputSchema:k.inputSchema,outputSchema:k.outputSchema})))?A:null}))).filter((A)=>A!==null),E=j.length,z=j.slice(W,W+G),P=W+G<E;return{items:z,totalCount:E,hasMore:P}}return aQ$(L,N,G,W,w)}})});var cH4,hz;var no0=O(()=>{hJ();T8();R0();R5();RX();Cz();yz();mK();cH4=zr(wQ),hz=g({name:"COLLECTION_CONNECTIONS_GET",description:"Get a connection's configuration, tools list, and status by ID.",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:["app"]}},inputSchema:Er,outputSchema:cH4,handler:async($,Z)=>{let Q=i(Z);if(await Z.access.check(),qX()&&Wu($.id,Q.id))return{item:Ku(Q.id,h5())};let Y=await Z.storage.connections.findById($.id);if(!Y||Y.organization_id!==Q.id)return{item:null};if(Y.tools===null){let X=A8.SELF(Q.id),J=Y.id===X?async()=>{let{listManagementTools:W}=await Promise.resolve().then(() => (lO(),yX0));return W(Z)}:async()=>{let W=await m7(Y,Z,!0);try{return(await W.listTools()).tools}finally{await W.close().catch(()=>{})}},G=await bO("tools",Y.id,J,R9(),(W)=>Z.pendingRevalidations.push(W),fO);if(G!==null)Y.tools=G}return{item:Y}}})});class S5{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("downstream_tokens").selectAll().where("connectionId","=",$).executeTakeFirst();if(!Z)return null;return dH4(this.vault,Z)}async upsert($){let Z=new Date().toISOString(),Q=await this.vault.encrypt($.accessToken),Y=$.refreshToken?await this.vault.encrypt($.refreshToken):null,X=$.clientSecret?await this.vault.encrypt($.clientSecret):null,J=$.expiresAt?.toISOString()??null,G=await this.db.insertInto("downstream_tokens").values({id:C8("dtok"),connectionId:$.connectionId,accessToken:Q,refreshToken:Y,scope:$.scope,expiresAt:J,clientId:$.clientId,clientSecret:X,tokenEndpoint:$.tokenEndpoint,createdAt:Z,updatedAt:Z}).onConflict((W)=>W.column("connectionId").doUpdateSet({accessToken:Q,refreshToken:Y,scope:$.scope,expiresAt:J,clientId:$.clientId,clientSecret:X,tokenEndpoint:$.tokenEndpoint,updatedAt:Z})).returning(["id","createdAt"]).executeTakeFirstOrThrow();return{id:G.id,connectionId:$.connectionId,accessToken:$.accessToken,refreshToken:$.refreshToken,scope:$.scope,expiresAt:$.expiresAt,createdAt:G.createdAt,updatedAt:Z,clientId:$.clientId,clientSecret:$.clientSecret,tokenEndpoint:$.tokenEndpoint}}async delete($){await this.db.deleteFrom("downstream_tokens").where("connectionId","=",$).execute()}isExpired($,Z=0){if(!$.expiresAt)return!1;let Y=($.expiresAt instanceof Date?$.expiresAt:new Date($.expiresAt)).getTime();if(Number.isNaN(Y))return!0;return Y-Z<Date.now()}}async function dH4($,Z){try{let Q=await $.decrypt(Z.accessToken),Y=Z.refreshToken?await $.decrypt(Z.refreshToken):null,X=Z.clientSecret?await $.decrypt(Z.clientSecret):null;return{id:Z.id,connectionId:Z.connectionId,accessToken:Q,refreshToken:Y,scope:Z.scope,expiresAt:Z.expiresAt,createdAt:Z.createdAt,updatedAt:Z.updatedAt,clientId:Z.clientId,clientSecret:X,tokenEndpoint:Z.tokenEndpoint}}catch(Q){return console.warn("[DownstreamToken] failed to decrypt token row",{connectionId:Z.connectionId,message:Q instanceof Error?Q.message:String(Q)}),null}}var uW=O(()=>{_Q()});function Hu(...$){if(nH4)console.log("[mcp-read-cache]",...$)}function tH4($){return $.kind==="org"?"org":`u:${$.userId}`}function to0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(to0).join(",")}]`;return`{${Object.keys($).sort().map((Q)=>`${JSON.stringify(Q)}:${to0($[Q])}`).join(",")}}`}class uX0{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=mH4,Z=iH4,Q=()=>Date.now(),Y=pH4){this.config=$;this.maxEntries=Z;this.now=Q;this.maxTotalBytes=Y}stats(){return{entries:this.store.size,bytes:this.totalBytes}}deleteKey($){let Z=this.store.get($);if(Z)this.store.delete($),this.totalBytes-=Z.bytes}key($,Z,Q,Y){return`${Z}:${tH4(Q)}:${$}:${to0(Y)}`}storeSet($,Z,Q,Y){let X;try{X=JSON.stringify(Z).length}catch{Hu("SKIP non-serializable",$);return}if(X>Y){Hu("SKIP oversize",$,`${X}b > cap ${Y}b`);return}this.deleteKey($);while(this.store.size>0&&(this.store.size>=this.maxEntries||this.totalBytes+X>this.maxTotalBytes)){let J=this.store.keys().next().value;if(J===void 0)break;this.deleteKey(J)}this.store.set($,{value:Z,storedAt:Q,bytes:X}),this.totalBytes+=X}async fetch($){let{type:Z,connectionId:Q,scope:Y,params:X,fetchLive:J,shouldCache:G,onRevalidation:W}=$,K=this.config[Z],H=this.key(Z,Q,Y,X),F=this.now(),U=this.store.get(H),N=U?F-U.storedAt:1/0;if(!U||N>K.maxStaleMs){gX0.add(1,{type:Z,outcome:"miss"}),Hu(U?"EXPIRED":"MISS",H);let B=await J();if(G?.(B)??!0)this.storeSet(H,B,this.now(),K.maxValueBytes);else Hu("NOT-CACHED (shouldCache=false)",H);return B}if(this.store.delete(H),this.store.set(H,U),N>K.revalidateAfterMs&&!this.revalidating.has(H)){gX0.add(1,{type:Z,outcome:"stale"}),Hu("STALE \u2192 serve + revalidate",H,`age=${N}ms`),this.revalidating.add(H);let B=J().then((D)=>{if(G?.(D)??!0)this.storeSet(H,D,this.now(),K.maxValueBytes)}).catch(()=>{gX0.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(H));W?.(B)}else gX0.add(1,{type:Z,outcome:"hit"}),Hu("HIT",H,`age=${N}ms`);return U.value}invalidate($){let Z=`${$}:`;for(let Q of[...this.store.keys()])if(Q.startsWith(Z))this.deleteKey(Q)}}function ro0(){return O0().mcpCacheEnabled}function lX0(){return ro0()?oo0:null}var gX0,hX0=1024,ZY$,mH4,iH4=2000,pH4,nH4,oo0;var qr=O(()=>{J6();Z$();gX0=Q$.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),ZY$=hX0*hX0,mH4={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*hX0},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*ZY$},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*hX0}},pH4=256*ZY$,nH4=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;oo0=new uX0;Q$.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(oo0.stats().entries));Q$.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(oo0.stats().bytes))});function JY$(){if(QY$)return;QY$=!0;try{YY$=Q$.createCounter("virtual_mcp.aggregate_cache.lookups",{description:"Virtual MCP aggregate tool-list cache lookups by outcome (hit, miss, expired)",unit:"{lookups}"}),XY$=Q$.createCounter("virtual_mcp.aggregate_cache.evictions",{description:"Virtual MCP aggregate tool-list cache entries dropped, by reason (capacity, invalidated, failed)",unit:"{entries}"}),Q$.createObservableGauge("virtual_mcp.aggregate_cache.entries",{description:"Live entries in this pod's Virtual MCP aggregate tool-list cache",unit:"{entries}"}).addCallback(($)=>$.observe(WG.size))}catch($){console.error("[aggregate-cache] failed to register metrics:",$)}}function so0($){JY$(),YY$?.add(1,{outcome:$})}function ao0($,Z=1){if(Z<=0)return;JY$(),XY$?.add(Z,{reason:$})}function GY$($){return[$.virtualMcpId??"",$.userId??"",$.superUser?"su":"",[...$.connectionIds].sort().join(",")].join("|")}function WY$($){let Z=WG.get($);if(!Z)return so0("miss"),null;if(Date.now()-Z.at>=oH4)return WG.delete($),so0("expired"),null;return so0("hit"),Z.value}function KY$($,Z,Q){let Y=Q.catch((J)=>{if(WG.get($)?.value===Y)WG.delete($),ao0("failed");throw J});WG.delete($),WG.set($,{at:Date.now(),deps:Z,value:Y});let X=0;while(WG.size>rH4){let J=WG.keys().next();if(J.done)break;WG.delete(J.value),X++}return ao0("capacity",X),Y}function HY$($){let Z=0;for(let[Q,Y]of WG)if(Y.deps.includes($))WG.delete(Q),Z++;ao0("invalidated",Z)}var oH4=30000,rH4=500,WG,YY$=null,XY$=null,QY$=!1;var eo0=O(()=>{J6();WG=new Map});function NY$($){lX0()?.invalidate($),XQ$($),HY$($)}function Fu($){NY$($);let Z=$r0?.();if(!Z)return;try{Z.publish(FY$,sH4.encode(JSON.stringify({connectionId:$,originId:UY$})))}catch(Q){console.warn("[McpCacheInvalidation] publish failed (non-critical):",Q)}}function BY$($){if($r0=$,Mr)return;let Z=$();if(!Z)return;Mr=Z.subscribe(FY$),(async()=>{for await(let Q of Mr)try{let Y=JSON.parse(aH4.decode(Q.data));if(Y.originId===UY$)continue;NY$(Y.connectionId)}catch{}})().catch(console.error)}function DY$(){Mr?.unsubscribe(),Mr=null,$r0=void 0}var FY$="studio.mcp-cache.invalidate",UY$,sH4,aH4,$r0,Mr=null;var Ir=O(()=>{qr();RX();eo0();UY$=crypto.randomUUID(),sH4=new TextEncoder,aH4=new TextDecoder});import{z as Zr0}from"zod";function $F4($){let Z={...$};for(let Q of eH4)delete Z[Q];return Z}function ZF4($,Z){return $.connection_url!==void 0?$.connection_url:Z}function XF4($,Z){return $.length===Z.length&&$.every((Q,Y)=>Q===Z[Y])}var eH4,QF4,YF4,Qr0;var OY$=O(()=>{_o0();uW();R0();Z$();RX();Ir();yo0();$X0();mK();eH4=["id","organization_id","created_by","created_at"];QF4=Zr0.object({id:Zr0.string().describe("ID of the connection to update"),data:l50.describe("Partial connection data to update")}),YF4=Zr0.object({item:wQ.describe("The updated connection entity")});Qr0=g({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update a connection's configuration. Re-fetches tools from the server on URL change.",annotations:{title:"Update Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:QF4,outputSchema:YF4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to update connection");let{id:X}=$,J=$F4($.data),G=J.configuration_state!==void 0||J.configuration_scopes!==void 0,W=await Z.storage.connections.findById(X);if(!W||W.organization_id!==Q.id)throw Error("Connection not found in organization");let K=J.connection_type??W.connection_type,H=ZF4(J,W.connection_url);if(K==="VIRTUAL"){let f=Ly(H);if(!f)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let b=await Z.storage.virtualMcps.findById(f);if(!b)throw Error(`Virtual MCP not found: ${f}`);if(b.organization_id!==Q.id)throw Error("Virtual MCP does not belong to the current organization");H=wy(f)}let F=J.configuration_state??W.configuration_state??{},U=J.configuration_scopes??W.configuration_scopes??[];if(G){if(J.configuration_state!==void 0)F=J.configuration_state??{};else if(F===null||F===void 0)F={};if(J.configuration_scopes!==void 0)U=J.configuration_scopes??[];if(U.length>0){let f=F;Br(f,U,Q.id),await Or(f,U,Q.id,Z)}}if(K==="STDIO"&&!O0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let N=J.connection_token??W.connection_token;if(!N)try{let b=await new S5(Z.db,Z.vault).get(X);if(b?.accessToken)N=b.accessToken}catch{}let B=await eh({id:W.id,title:J.title??W.title,connection_type:K,connection_url:H,connection_token:N,connection_headers:J.connection_headers??W.connection_headers}).catch(()=>null),D=B?.tools?.length?B.tools:null,L=!1;if(J.configuration_scopes===void 0&&B?.scopes?.length)L=!XF4(U,B.scopes),U=B.scopes;if(Br(F,U,Q.id),L&&U.length>0)await Or(F,U,Q.id,Z);let w=G||L,j=w?Dr(F,U):[],E=w?Dr(W.configuration_state??{},W.configuration_scopes??[]):[],z=W.configuration_state,P=z==null||Object.keys(z).length===0,A,q,k=async()=>{try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:Q.id,subjectConnectionId:X,createdBy:Y,grants:E})}catch(f){console.error("Failed to restore credential grants after credential vault mutation failed",f)}},M={...J,connection_url:H,tools:null,configuration_state:F,configuration_scopes:U,updated_by:Y},S={...W,...M};if(w)try{if(await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:Q.id,subjectConnectionId:X,createdBy:Y,grants:j}),j.length>0){if(!await Z.storage.connectionCredentialVault.findActiveWorkloadToken({organizationId:Q.id,subjectConnectionId:X})){let{plaintextToken:b,record:o}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:Q.id,subjectConnectionId:X});q=o.id,A={baseUrl:Z.baseUrl,org:Q.slug??Q.id,subjectConnectionId:X,token:b}}}}catch(f){if(q)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:Q.id,subjectConnectionId:X,tokenId:q});throw await k(),f}if(w&&F&&U)try{await jX0(Z,S,{state:F,scopes:U,firstRun:P,...A?{vault:A}:{}})}catch(f){if(console.error("Failed to invoke ON_MCP_CONFIGURATION callback",f),q)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:Q.id,subjectConnectionId:X,tokenId:q});if(j.length>0)throw await k(),f}let d;try{d=await Z.storage.connections.update(X,M)}catch(f){if(w){if(q)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:Q.id,subjectConnectionId:X,tokenId:q});await k()}throw f}if(D)R9()?.set("tools",X,D).catch(()=>{});return Fu(X),{item:d}}})});import{z as JF4}from"zod";var GF4,Yr0;var LY$=O(()=>{hJ();_4();R0();RX();Ir();KG();yz();mK();GF4=Pr.extend({force:JF4.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Yr0=g({name:"COLLECTION_CONNECTIONS_DELETE",description:"Permanently delete a connection. Set force=true to auto-remove from referencing Virtual MCPs.",annotations:{title:"Delete Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:GF4,outputSchema:Ar(wQ),handler:async($,Z)=>{p(Z);let Q=i(Z);if(await Z.access.check(),qX()&&Wu($.id,Q.id))throw Error("This connection is a fixed system connection and cannot be deleted");let Y=await Z.storage.connections.findById($.id);if(!Y)throw Error(`Connection not found: ${$.id}`);if(Y.organization_id!==Q.id)throw Error("Connection not found in organization");if(Y.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let J=await Z.storage.virtualMcps.listByConnectionId(Q.id,$.id);if(J.length>0)if($.force)await Z.storage.virtualMcps.removeConnectionReferences($.id);else throw Error(JSON.stringify({code:"CONNECTION_IN_USE",agentNames:J.map((H)=>H.title)}));if(await Z.storage.connections.isReferencedByThread($.id))throw Error(JSON.stringify({code:"CONNECTION_IN_USE_BY_THREAD"}));let G=await Z.storage.automations.listActiveByEventTriggerConnectionId($.id);if(G.length>0)if($.force)await Promise.all(G.map((H)=>Z.storage.automations.deactivateAutomation(H.id)));else throw Error(JSON.stringify({code:"CONNECTION_IN_USE_BY_AUTOMATION",automationNames:G.map((H)=>H.name)}));await Z.storage.connections.delete($.id),wY$($.id),await Z.storage.triggerCallbackTokens.deleteByConnection($.id,Q.id);let W=await Z.storage.organizationSettings.get(Q.id);if(W?.registry_config){let{registries:H,blockedMcps:F}=W.registry_config;if($.id in H){let{[$.id]:U,...N}=H;await Z.storage.organizationSettings.upsert(Q.id,{registry_config:{registries:N,blockedMcps:F}})}}R9()?.invalidate($.id).catch(()=>{}),Fu($.id);let K=c0(Z);if(K)M1.capture({distinctId:K,event:"connection_deleted",groups:{organization:Q.id},properties:{connection_id:Y.id,connection_type:Y.connection_type,app_name:Y.app_name??null,organization_id:Q.id,forced:$.force??!1}});return{item:Y}}})});import{z as Uu}from"zod";var Xr0;var jY$=O(()=>{R0();Xr0=g({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Uu.object({id:Uu.string()}),outputSchema:Uu.object({id:Uu.string(),healthy:Uu.boolean(),latencyMs:Uu.number()}),handler:async($,Z)=>{let Q=i(Z);await Z.access.check();let Y=await Z.storage.connections.findById($.id);if(!Y||Y.organization_id!==Q.id)throw Error("Connection not found");let X=await Z.storage.connections.testConnection($.id);return{id:$.id,...X}}})});var EY$=O(()=>{NQ$();po0();no0();OY$();LY$();jY$()});import{sql as m4}from"kysely";import{z as SH}from"zod";function zY$($){if($===null||$===void 0)return"NULL";if(typeof $==="number")return String($);if(typeof $==="boolean")return $?"TRUE":"FALSE";if(typeof $==="string")return`'${$.replace(/'/g,"''")}'`;if($ instanceof Date)return`'${$.toISOString()}'`;return`'${JSON.stringify($).replace(/'/g,"''")}'`}function HF4($,Z){let Q="",Y=0,X=!1,J=!1,G=!1,W=null;for(let K=0;K<$.length;K++){let H=$[K];if(!X&&!J&&W===null){if($.startsWith("--",K)){let F=$.indexOf(`
992
+ </workflows>`,aZ$={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=blue",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:qG4,getId:o3.USAGE_MANAGER}});function Ho0($){return Iz.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function IG4($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function ZX0({virtualMcp:$,agentId:Z=$.id,organizationId:Q,ctx:Y}){let X=Ho0(Z);if(!X)return $;let J=await IG4(X,{orgId:Q,ctx:Y}),G=J.selectedTools?[...J.selectedTools]:null;return{...$,metadata:{...$.metadata??{},instructions:J.instructions},connections:$.connections.map((W)=>({...W,selected_tools:G}))}}async function QX0($,Z){if(!("checklist"in $))return[];return Promise.all($.checklist.map(async(Q)=>({label:Q.label,activeForm:Q.activeForm,action:Q.action,completed:await Q.isCompleted(Z),alwaysSuggest:Q.alwaysSuggest})))}async function $7$($,Z,Q){let Y={self:A8.SELF($),registry:A8.REGISTRY($),"community-registry":A8.COMMUNITY_REGISTRY($)};await Promise.all(MG4.map((X)=>Q.delete(`${X}${$}`))),await Promise.all(Iz.map(async(X)=>{let J=X.getId($),G=await Q.findById(J,$),K=(X.selectedConnections??["self"]).map((H)=>Y[H]);if(G){await Q.update(J,Z,{metadata:{...G.metadata??{},instructions:X.instructions},connections:K.map((H)=>{let F=G.connections.find((U)=>U.connection_id===H);return{connection_id:H,selected_tools:X.selectedTools?[...X.selectedTools]:null,selected_resources:F?.selected_resources??null,selected_prompts:F?.selected_prompts??null}})});return}await Q.create($,Z,{title:X.title,description:X.description,icon:X.icon,status:"active",pinned:!1,metadata:{instructions:X.instructions},connections:K.map((H)=>({connection_id:H,selected_tools:X.selectedTools?[...X.selectedTools]:null,selected_resources:null,selected_prompts:X.selectedPrompts?[...X.selectedPrompts]:null}))},{id:J})}))}var MG4,Iz;var Qu=O(()=>{T8();uZ$();cZ$();nZ$();oZ$();sZ$();eZ$();MG4=ki0,Iz=[pZ$,lZ$,tZ$,hZ$,rZ$,aZ$]});import{DBOS as YX0}from"@dbos-inc/dbos-sdk";async function VG4($){let Z=X8(),Q=new lg(Z.db);await $7$($.orgId,$.createdBy,Q)}async function kG4($){let Z=X8(),Q=new lg(Z.db);for(let Y of Iz){let X=Y.getId($.orgId),J=await Q.findById(X,$.orgId);if(!J)continue;let G=Y.selectedPrompts?[...Y.selectedPrompts]:null;if(J.connections.every((K)=>{let H=K.selected_prompts;if(G===null)return H===null;if(H===null)return!1;if(H.length!==G.length)return!1;return H.every((F,U)=>F===G[U])}))continue;await Q.update(X,$.createdBy,{connections:J.connections.map((K)=>({connection_id:K.connection_id,selected_tools:K.selected_tools,selected_resources:K.selected_resources,selected_prompts:G}))})}}async function SG4($){await YX0.runStep(()=>VG4($),{name:"installStudioPack"}),await YX0.runStep(()=>kG4($),{name:"backfillSelectedPrompts"})}async function Fo0($){await YX0.startWorkflow(CG4,{workflowID:`install-studio-pack:${_G4}:${$.orgId}`})($)}async function Z7$(){let Z=await X8().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),Q=new Map;for(let Y of Z)if(!Q.has(Y.organizationId))Q.set(Y.organizationId,Y.userId);await $u(Array.from(Q),10,async([Y,X])=>{try{await Fo0({orgId:Y,createdBy:X})}catch(J){console.error("[studio-pack-backfill] enqueue failed",{orgId:Y},J)}})}var CG4,_G4="v6";var XX0=O(()=>{XG();di0();Qu();CG4=YX0.registerWorkflow(SG4,{name:"installStudioPackWorkflow"})});class Zr{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new Zr,Z=new Zr;return $._otherTransport=Z,Z._otherTransport=$,[$,Z]}async start(){while(this._messageQueue.length>0){let $=this._messageQueue.shift();this.onmessage?.($.message,$.extra)}}async close(){let $=this._otherTransport;this._otherTransport=void 0,await $?.close(),this.onclose?.()}async send($,Z){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage($,{authInfo:Z?.authInfo});else this._otherTransport._messageQueue.push({message:$,extra:{authInfo:Z?.authInfo}})}}import{z as v8}from"zod";var Y7$,Q7$=1000,vG4=500,X7$,J7$,G7$,W7$,K7$,H7$,F7$,U7$,N7$,B7$;var Yu=O(()=>{Y7$=v8.record(v8.string(),v8.array(v8.string())),X7$=v8.record(v8.string(),v8.array(v8.string()).max(vG4)).refine(($)=>Object.keys($).length<=Q7$,{message:`Permissions cannot grant more than ${Q7$} resources`}),J7$=v8.object({id:v8.string().describe("Unique identifier for the API key"),name:v8.string().describe("Human-readable name for the API key"),userId:v8.string().describe("ID of the user who owns this API key"),permissions:Y7$.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:v8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:v8.string().datetime().describe("When the API key was created (ISO 8601)")}),G7$=v8.object({name:v8.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:X7$.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:v8.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:v8.record(v8.string(),v8.unknown()).optional().describe("Additional metadata to store with the API key")}),W7$=v8.object({id:v8.string().describe("Unique identifier for the API key"),name:v8.string().describe("Human-readable name for the API key"),key:v8.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:Y7$.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:v8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:v8.string().datetime().describe("When the API key was created (ISO 8601)")}),K7$=v8.object({}),H7$=v8.object({items:v8.array(J7$).describe("List of API keys (without key values)")}),F7$=v8.object({keyId:v8.string().describe("ID of the API key to update"),name:v8.string().min(1).max(64).optional().describe("New name for the API key"),permissions:X7$.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:v8.record(v8.string(),v8.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),U7$=v8.object({item:J7$.describe("The updated API key (without key value)")}),N7$=v8.object({keyId:v8.string().describe("ID of the API key to delete")}),B7$=v8.object({success:v8.boolean().describe("Whether the deletion was successful"),keyId:v8.string().describe("ID of the deleted API key")})});var Uo0;var D7$=O(()=>{_4();R0();Yu();Uo0=g({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:G7$,outputSchema:W7$,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=await Z.boundAuth.apiKey.create({name:$.name,permissions:$.permissions,expiresIn:$.expiresIn,metadata:{...$.metadata,organization:Z.organization}}),Y=Q.expiresAt?Q.expiresAt instanceof Date?Q.expiresAt.toISOString():Q.expiresAt:null,X=Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,J=c0(Z);if(J)M1.capture({distinctId:J,event:"api_key_created",...Z.organization?.id?{groups:{organization:Z.organization.id}}:{},properties:{key_id:Q.id,key_name:Q.name??$.name,organization_id:Z.organization?.id,has_expiry:!!Y}});return{id:Q.id,name:Q.name??$.name,key:Q.key,permissions:Q.permissions??{},expiresAt:Y,createdAt:X}}})});var No0;var O7$=O(()=>{_4();R0();Yu();No0=g({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:N7$,outputSchema:B7$,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=c0(Z);if(!Q)throw Error("User ID required to delete API key");let X=(await Z.boundAuth.apiKey.list())?.find((K)=>K.id===$.keyId);if(!X)throw Error("API key not found");let G=X.metadata?.organization?.id,W=Z.organization?.id;if(G!==W)throw Error("Cannot delete API key from another organization");if(await Z.boundAuth.apiKey.delete($.keyId),W)M1.capture({distinctId:Q,event:"api_key_deleted",groups:{organization:W},properties:{key_id:$.keyId,organization_id:W}});return{success:!0,keyId:$.keyId}}})});var Bo0;var L7$=O(()=>{R0();Yu();Bo0=g({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:K7$,outputSchema:H7$,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=await Z.boundAuth.apiKey.list(),Y=Z.organization?.id;return{items:(Q??[]).filter((J)=>{return J.metadata?.organization?.id===Y}).map((J)=>({id:J.id,name:J.name??"Unnamed Key",userId:J.userId,permissions:J.permissions??{},expiresAt:J.expiresAt?J.expiresAt instanceof Date?J.expiresAt.toISOString():J.expiresAt:null,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt}))}}})});var Do0;var w7$=O(()=>{R0();Yu();Do0=g({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:F7$,outputSchema:U7$,handler:async($,Z)=>{if(p(Z),await Z.access.check(),!c0(Z))throw Error("User ID required to update API key");let X=(await Z.boundAuth.apiKey.list())?.find((H)=>H.id===$.keyId);if(!X)throw Error(`API key not found: ${$.keyId}`);let G=X.metadata?.organization?.id,W=Z.organization?.id;if(G!==W)throw Error("Cannot update API key from another organization");let K=await Z.boundAuth.apiKey.update({keyId:$.keyId,name:$.name,permissions:$.permissions,metadata:{...$.metadata,organization:Z.organization}});if(!K)throw Error(`Failed to update API key: ${$.keyId}`);return{item:{id:K.id,name:K.name??$.name??"Unnamed Key",userId:K.userId,permissions:K.permissions??{},expiresAt:K.expiresAt?K.expiresAt instanceof Date?K.expiresAt.toISOString():K.expiresAt:null,createdAt:K.createdAt instanceof Date?K.createdAt.toISOString():K.createdAt}}}})});var j7$=O(()=>{D7$();O7$();L7$();w7$();Yu()});function CO($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let Q=bG4.test(Z),Y=xG4.test(Z),X=yG4.test(Z);if(Q&&!Y&&!X)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let J=Y?Z:`https://${Z}`,G;try{G=new URL(J)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(G.protocol!=="http:"&&G.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let W=G.hostname.split(".");if(W.length<2||W.some((K)=>!K||!gG4.test(K)))return{ok:!1,error:"Enter a valid website URL."};return G.protocol="https:",{ok:!0,value:G.origin}}var bG4,xG4,yG4,gG4;var Qr=O(()=>{bG4=/^[a-zA-Z][a-zA-Z\d+.-]*:/,xG4=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,yG4=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,gG4=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as AX}from"zod";function JX0($){return{repository_id:$.repositoryId,provider:$.provider,host:$.host,path:$.path,default_branch:$.defaultBranch??null,web_url:$.webUrl??null}}function z7$($){let Z=hG4.safeParse($);if(!Z.success)return null;return{repositoryId:Z.data.repository_id,provider:Z.data.provider,host:Z.data.host,path:Z.data.path,defaultBranch:Z.data.default_branch??null,webUrl:Z.data.web_url??null}}function GX0($){return $.provider==="github"&&$.host.toLowerCase()==="github.com"?$.path:null}var E7$,hG4;var WX0=O(()=>{E7$=AX.object({repositoryId:AX.string().min(1),provider:AX.enum(["github","gitlab","bitbucket"]),host:AX.string().min(1),path:AX.string().min(1),defaultBranch:AX.string().nullable().optional(),webUrl:AX.string().nullable().optional()}),hG4=AX.object({repository_id:AX.string().min(1),provider:AX.enum(["github","gitlab","bitbucket"]),host:AX.string().min(1),path:AX.string().min(1),default_branch:AX.string().nullable().optional(),web_url:AX.string().nullable().optional()})});import{z as IY}from"zod";function RH($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??O0()).reportsInternalApiUrl??uG4).replace(/\/+$/,"")}function A7$($={}){return`${RH($)}/api/v2/mcp`}function Vz($){let Z=$.apiKey??($.settings??O0()).reportsInternalApiKey;if(!Z)throw Error("REPORTS_INTERNAL_API_KEY (or the legacy COMMERCE_DISCOVERY_INTERNAL_API_KEY) is required to set up reports.");return Z}function HX0($){return new URL($).hostname}function cG4($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function dG4($,Z={}){switch($){case"ownership_unverified":{let Q=Z.email?`O e-mail ${Z.email}`:"Este e-mail",Y=Z.domain?` ${Z.domain}`:" este site";return`${Q} n\xE3o tem permiss\xE3o para reivindicar${Y}. Use um e-mail do dom\xEDnio do site ou pe\xE7a ao suporte para autorizar seu dom\xEDnio.`}case"already_claimed_by_other_org":return"Este site j\xE1 pertence a outra organiza\xE7\xE3o. Fale com o suporte para transferir o acesso.";case"unknown":return"N\xE3o foi poss\xEDvel configurar o Reports. Tente novamente ou fale com o suporte.";default:return $}}async function mG4($){let Z=await Yr($);return cG4(Z?.error)?Z.error:"unknown"}async function Yr($){let Z=await $.text().catch(()=>"");if(!Z)return;try{return JSON.parse(Z)}catch{return}}async function FX0($){let Z=`Reports auth failed with status ${$.status}.`,Q=await $.text().catch(()=>"");if(!Q)return Z;try{let Y=JSON.parse(Q),X=typeof Y.error==="string"?Y.error:typeof Y.message==="string"?Y.message:null;return X?`Reports auth failed: ${X}.`:Z}catch{return Z}}async function R7$($,Z={}){let Q=RH(Z),Y=Vz(Z),X=Z.fetchImpl??fetch,J=HX0($.siteUrl),G=`${Q}/api/v2/internal/diagnostics/${encodeURIComponent(J)}/upgrade`,W=await X(G,{method:"POST",headers:{Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.orgName?{name:$.orgName}:{},...$.email?{email:$.email}:{},...$.reportUrl?{report_url:$.reportUrl}:{}}),signal:AbortSignal.timeout(KX0)});if(!W.ok){let H=await mG4(W);throw new T7$(H,{email:$.email,domain:J})}let K=lG4.safeParse(await Yr(W));if(!K.success)throw Error("Reports auth response did not include a token.");return{authorizationToken:K.data.token}}async function q7$($,Z={}){let Q=RH(Z),Y=Vz(Z),X=Z.fetchImpl??fetch,J=HX0($.siteUrl),G=`${Q}/api/v2/internal/diagnostics/${encodeURIComponent(J)}/bindings`,W=await X(G,{method:"POST",headers:{Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,provider:$.provider,resource_id:$.resourceId}),signal:AbortSignal.timeout(KX0)});if(W.status===409)return{ok:!1,reason:"resource_already_bound",detail:"Este recurso j\xE1 est\xE1 vinculado a outra loja. Se ele \xE9 seu, fale com o suporte para revis\xE3o manual."};if(W.status===422){let H=P7$.safeParse(await Yr(W));return{ok:!1,reason:H.success?H.data.reason??"verification_failed":"verification_failed",detail:(H.success?H.data.detail:void 0)??"N\xE3o foi poss\xEDvel verificar o acesso a este recurso."}}if(!W.ok)throw Error(await FX0(W));let K=P7$.safeParse(await Yr(W));if(!K.success||!K.data.binding)throw Error("Reports bind response did not include a binding.");return{ok:!0,resourceId:K.data.binding.resource_id,evidence:K.data.binding.evidence}}async function M7$($,Z={}){let Q=RH(Z),Y=Vz(Z),X=Z.fetchImpl??fetch,J=HX0($.siteUrl),G=`${Q}/api/v2/internal/diagnostics/${encodeURIComponent(J)}/run`,W=await X(G,{method:"POST",headers:{Authorization:`Bearer ${Y}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.repository?{repository:JX0($.repository)}:{},...$.githubRepo?{github_repo:$.githubRepo}:{}}),signal:AbortSignal.timeout(KX0)});if(W.status===409)return{triggered:!1,reason:"not_upgraded"};if(!W.ok)throw Error(await FX0(W));return{triggered:!0}}async function iG4($,Z,Q){try{return await U8(async()=>{let Y=await $(Z,{method:"GET",headers:{Authorization:`Bearer ${Q}`},signal:AbortSignal.timeout(KX0)});if(Y.status>=500||Y.status===429)throw new Oo0(await FX0(Y));return Y},{maxAttempts:3,minTimeout:200,maxTimeout:2000,multiplier:2,jitter:1,isRetriable:(Y)=>Y instanceof Oo0})}catch(Y){if(Y instanceof y6&&Y.cause instanceof Error)throw Y.cause;throw Y}}async function I7$($,Z={}){let Q=RH(Z),Y=Vz(Z),X=Z.fetchImpl??fetch,J=HX0($.siteUrl),G=`${Q}/api/v2/internal/diagnostics/${encodeURIComponent(J)}/connections/status?org_id=${encodeURIComponent($.orgId)}`,W=await iG4(X,G,Y);if(W.status===404||W.status===409)return{providers:{},claimed:!1};if(!W.ok)throw Error(await FX0(W));let K=pG4.safeParse(await Yr(W));return{providers:K.success?K.data.providers:{},claimed:!0}}var uG4,KX0=15000,lG4,P7$,T7$,Oo0,pG4;var kz=O(()=>{T8();u$();WX0();Z$();uG4=new URL(ya1).origin,lG4=IY.object({token:IY.string().min(1)}),P7$=IY.object({binding:IY.object({resource_id:IY.string(),evidence:IY.string()}).optional(),reason:IY.string().optional(),detail:IY.string().optional()});T7$=class T7$ extends Error{code;constructor($,Z={}){super(dG4($,Z));this.name="ReportsClaimError",this.code=$}};Oo0=class Oo0 extends Error{};pG4=IY.object({providers:IY.record(IY.string(),IY.object({connected:IY.boolean(),via:IY.enum(["oauth","sa"]).nullable(),resource:IY.string().nullable()}))})});import{z as gJ}from"zod";var nG4,tG4,Lo0;var V7$=O(()=>{Qr();R0();kz();nG4=gJ.object({siteUrl:gJ.string().min(1).describe("Website URL of the store being bound."),provider:gJ.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:gJ.string().min(1).describe("The resource id the client typed: GA4 numeric property id, or GSC site (sc-domain:example.com or https://example.com/).")}),tG4=gJ.discriminatedUnion("ok",[gJ.object({ok:gJ.literal(!0),resourceId:gJ.string(),evidence:gJ.string()}),gJ.object({ok:gJ.literal(!1),reason:gJ.string(),detail:gJ.string()})]),Lo0=g({name:"REPORTS_BIND",description:"Bind a GA4 property or GSC site to the org's store via the shared service account (consent-free lane). The client grants deco-reader@\u2026 access to the resource and provides its id; Reports verifies the resource belongs to this domain before persisting. Returns ok:false with an actionable pt-BR detail when verification fails or the resource is already bound elsewhere.",annotations:{title:"Bind Reports Data Source",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:nG4,outputSchema:tG4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check("REPORTS_BIND","COMMERCE_DISCOVERY_BIND");let Y=CO($.siteUrl);if(!Y.ok)throw Error(Y.error);return q7$({siteUrl:Y.value,orgId:Q.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as qH}from"zod";var oG4,rG4,wo0;var k7$=O(()=>{Qr();R0();kz();oG4=qH.object({siteUrl:qH.string().min(1).describe("Website URL of the store to inspect.")}),rG4=qH.object({providers:qH.record(qH.string(),qH.object({connected:qH.boolean(),via:qH.enum(["oauth","sa"]).nullable(),resource:qH.string().nullable()})),claimed:qH.boolean().describe("False when the site isn't claimed/upgraded for this org \u2014 providers is then empty because the status is unreadable, NOT because nothing is connected. The UI must warn instead of rendering existing bindings as disconnected.")}),wo0=g({name:"REPORTS_CONNECTION_STATUS",description:"Read per-provider connection status (ga4/gsc/vtex) for the org's store \u2014 { connected, via: oauth|sa, resource }. The single source of truth for whether a data source is connected, unifying the OAuth (Studio vault) and shared-SA binding lanes. Read-only.",annotations:{title:"Reports Connection Status",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:oG4,outputSchema:rG4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check("REPORTS_CONNECTION_STATUS","COMMERCE_DISCOVERY_CONNECTION_STATUS");let Y=CO($.siteUrl);if(!Y.ok)throw Error(Y.error);return I7$({siteUrl:Y.value,orgId:Q.id})}})});import{z as Xr}from"zod";var sG4,aG4,jo0;var S7$=O(()=>{T8();WX0();Qr();R0();kz();sG4=Xr.object({siteUrl:Xr.string().min(1).describe("Website URL to run the diagnostic for.")}),aG4=Xr.object({triggered:Xr.boolean(),reason:Xr.string().optional()}),jo0=g({name:"REPORTS_RUN",description:"Trigger the Reports diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Reports",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:sG4,outputSchema:aG4,requiresFeature:"diagnostic_enriched",requiresAiBudget:!0,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check("REPORTS_RUN","COMMERCE_DISCOVERY_RUN");let Y=CO($.siteUrl);if(!Y.ok)throw Error(Y.error);let X=A8.REPORTS(Q.id),G=(await Z.storage.connections.findById(X,Q.id))?.configuration_state,W=G&&typeof G==="object"?G:null,K=z7$(W?.repository),H=typeof W?.github_repo==="string"&&W.github_repo.length>0?W.github_repo:void 0;return M7$({siteUrl:Y.value,orgId:Q.id,repository:K??void 0,githubRepo:(K?GX0(K):H)??void 0})}})});import{z as i6}from"zod";var eG4,Jr,$W4,ZW4,QW4,YW4,C7$,_7$,Eo0;var v7$=O(()=>{eG4=["github","gitlab","bitbucket"],Jr=i6.enum(eG4),$W4=["github_app","oauth","token","github_cli"],ZW4=i6.enum($W4),QW4=["active","revoked"],YW4=i6.enum(QW4),C7$=i6.object({provider:Jr,host:i6.string().min(1).describe("Provider host, e.g. github.com"),path:i6.string().min(1).describe("Full namespace path, e.g. owner/name or group/sub/project")}),_7$=i6.object({id:i6.string(),organizationId:i6.string(),type:Jr,host:i6.string(),authKind:ZW4,externalAccountId:i6.string().describe("Provider-side account identity: installation id (GitHub App), user/group id (GitLab) or user/workspace uuid (Bitbucket)."),login:i6.string().describe("Display login of the account/namespace"),avatarUrl:i6.string().nullable(),installationId:i6.number().nullable().describe("GitHub App installation id; null for other auth kinds."),status:YW4,createdAt:i6.string(),updatedAt:i6.string()}),Eo0=i6.object({id:i6.string(),organizationId:i6.string(),accountId:i6.string().nullable().describe("Credential-holding account; null for anonymous public clones."),provider:Jr,host:i6.string(),path:i6.string(),externalId:i6.string().nullable().describe("Provider repository/project id, when known."),defaultBranch:i6.string().nullable(),webUrl:i6.string(),visibility:i6.enum(["public","private","internal"]).nullable(),createdAt:i6.string(),updatedAt:i6.string()})});function GW4($){let Z=$.toLowerCase();if(Z==="github.com"||Z==="www.github.com")return"github";if(Z==="gitlab.com"||Z==="www.gitlab.com")return"gitlab";if(Z==="bitbucket.org"||Z==="www.bitbucket.org")return"bitbucket";if(/(^|[.-])gitlab([.-]|$)/.test(Z))return"gitlab";return null}function f7$($){let Z=$.toLowerCase();return Z.startsWith("www.")?Z.slice(4):Z}function xW($,Z){let Q=$.trim();if(!Q)return null;let Y,X,J=/^(?:[\w.-]+@)?([\w.-]+(?::\d+)?):(?!\/\/)(.+)$/.exec(Q);if(J&&!/^[a-z][a-z0-9+.-]*:\/\//i.test(Q))Y=J[1],X=J[2];else if(/^[a-z][a-z0-9+.-]*:\/\//i.test(Q)){let F;try{F=new URL(Q)}catch{return null}if(!/^(https?|ssh|git)(\+ssh)?:$/.test(F.protocol))return null;Y=F.host,X=F.pathname}else if(Z?.provider)Y=Z.host??UX0[Z.provider],X=Q;else return null;Y=f7$(Y);let G=Z?.provider??GW4(Y);if(!G)return null;let W=X.split("/").map((F)=>F.trim()).filter(Boolean),K=W.indexOf("-");if(K>=0)W=W.slice(0,K);if(JW4.has(G))W=W.slice(0,2);if(W.length<2)return null;let H=W[W.length-1];if(W[W.length-1]=H.replace(/\.git$/i,""),W.some((F)=>F.length===0||F==="."||F===".."))return null;return{provider:G,host:Y,path:W.join("/")}}function yW($){return`${$.host.toLowerCase()}/${$.path.toLowerCase()}`}function zo0($){let Z=$.path.split("/");return Z[Z.length-1]??$.path}function WW4($){let Z=$.path.lastIndexOf("/");return Z<0?"":$.path.slice(0,Z)}function $9($){return{owner:WW4($),name:zo0($)}}function TX($){return`https://${$.host}/${$.path}`}function Po0($,Z){let Q=`${$.host}/${$.path}.git`;if(!Z)return`https://${Q}`;return`https://${XW4[$.provider]}:${encodeURIComponent(Z)}@${Q}`}function tU($,Z){let Q=f7$(Z);switch($){case"github":return Q==="github.com"?"https://api.github.com":`https://${Q}/api/v3`;case"gitlab":return`https://${Q}/api/v4`;case"bitbucket":return"https://api.bitbucket.org/2.0"}}function oU($,Z){return{provider:"github",host:UX0.github,path:`${$}/${Z}`}}var UX0,XW4,JW4;var Ao0=O(()=>{UX0={github:"github.com",gitlab:"gitlab.com",bitbucket:"bitbucket.org"},XW4={github:"x-access-token",gitlab:"oauth2",bitbucket:"x-token-auth"},JW4=new Set(["github","bitbucket"])});function JG($,Z){return`${TX($)}/${KW4[$.provider]}/${Z}`}function UW4($){let Z=$.toLowerCase();return FW4[Z]??Z}function NW4($,Z){let Q=Number($[3]);if(!Number.isSafeInteger(Q)||Q<=0)return null;let Y=UW4($[1]),X=$[2],J=Z?decodeURIComponent(X):X;if(/^\d+$/.test(J))return null;let G=xW(`https://${Y}/${J}`);if(!G)return null;return{repo:G,number:Q,url:JG(G,Q)}}function To0($){let Z=$.length>b7$?$.slice(0,b7$):$;for(let{re:Q,api:Y}of HW4){let X=Q.exec(Z),J=X?NW4(X,Y===!0):null;if(J)return J}return null}var KW4,HW4,FW4,b7$=200000;var x7$=O(()=>{Ao0();KW4={github:"pull",gitlab:"-/merge_requests",bitbucket:"pull-requests"};HW4=[{re:/https?:\/\/([^/\s"']+)\/([^\s"']+?)\/-\/merge_requests\/(\d+)/},{re:/https?:\/\/([^/\s"']+)\/([^/\s"']+\/[^/\s"']+)\/pull\/(\d+)/},{re:/https?:\/\/([^/\s"']+)\/([^/\s"']+\/[^/\s"']+)\/pull-requests\/(\d+)/},{re:/https?:\/\/([^/\s"']+)\/repos\/([^/\s"']+\/[^/\s"']+)\/pulls\/(\d+)/,api:!0},{re:/https?:\/\/([^/\s"']+)\/api\/v4\/projects\/([^/\s"']+)\/merge_requests\/(\d+)/,api:!0},{re:/https?:\/\/([^/\s"']+)\/2\.0\/repositories\/([^/\s"']+\/[^/\s"']+)\/pullrequests\/(\d+)/,api:!0}],FW4={"api.github.com":"github.com","api.bitbucket.org":"bitbucket.org"}});function y7$($){return Ro0[$]}function qo0($,Z){return Ro0[$].checkoutCommand.replace("{number}",String(Z))}function g7$($,Z){let{abbreviation:Q,numberSigil:Y}=Ro0[$];return`${Q} ${Y}${Z}`}var Ro0;var h7$=O(()=>{Ro0={github:{name:"GitHub",cli:"gh",changeRequest:"pull request",abbreviation:"PR",createCommand:"gh pr create",checkoutCommand:"gh pr checkout {number}",numberSigil:"#"},gitlab:{name:"GitLab",cli:"glab",changeRequest:"merge request",abbreviation:"MR",createCommand:"glab mr create",checkoutCommand:"glab mr checkout {number}",numberSigil:"!"},bitbucket:{name:"Bitbucket",cli:null,changeRequest:"pull request",abbreviation:"PR",createCommand:`curl -fsS -X POST -H "Authorization: Bearer $BITBUCKET_TOKEN" -H "Content-Type: application/json" https://api.bitbucket.org/2.0/repositories/<workspace>/<repo>/pullrequests -d '{"title":"<title>","source":{"branch":{"name":"<branch>"}},"destination":{"branch":{"name":"<base>"}}}'`,checkoutCommand:"git fetch origin <source branch> && git checkout <source branch>",numberSigil:"#"}}});var Q6=O(()=>{v7$();Ao0();x7$();h7$()});async function Mo0($,Z,Q){let Y=new AbortController,X,J=new Promise((W,K)=>{X=setTimeout(()=>{Y.abort(),K(new u7$($.id,Q))},Q)}),G=(async()=>{let W=await m7($,Z,!0);try{return(await W.listTools(void 0,{timeout:Q,signal:Y.signal})).tools}finally{await W.close().catch(()=>{})}})();G.catch(()=>{});try{return await Promise.race([G,J])}finally{if(X)clearTimeout(X)}}var u7$;var l7$=O(()=>{Gr();u7$=class u7$ extends Error{constructor($,Z){super(`listTools timed out after ${Z}ms for connection ${$}`);this.name="ListToolsTimeoutError"}}});var Io0=_((c7$)=>{Object.defineProperty(c7$,"__esModule",{value:!0});c7$.kvPrefix=c7$.KvWatchInclude=void 0;c7$.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};c7$.kvPrefix="KV_"});var $Q$=_((a7$)=>{Object.defineProperty(a7$,"__esModule",{value:!0});a7$.KvStatusImpl=a7$.Bucket=a7$.Kvm=a7$.kvOperationHdr=void 0;a7$.Base64KeyCodec=DW4;a7$.NoopKvCodecs=Vo0;a7$.defaultBucketOpts=i7$;a7$.validateKey=p7$;a7$.validateSearchKey=n7$;a7$.hasWildcards=t7$;a7$.validateBucket=NX0;var Q9=KJ(),w5=g$0(),Z9=Io0();function DW4(){let $=(Z,Q)=>{let Y=[];for(let X of Z.split("."))switch(X){case">":case"*":Y.push(X);break;default:Y.push(Q(X));break}return Y.join(".")};return{encode(Z){return $(Z,btoa)},decode(Z){return $(Z,atob)}}}function Vo0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function i7$(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:Vo0(),storage:w5.StorageType.File}}a7$.kvOperationHdr="KV-Operation";var m7$="$KV",OW4=/^[-/=.\w]+$/,LW4=/^[-/=.>*\w]+$/,wW4=/^[-\w]+$/;function p7$($){if($.startsWith(".")||$.endsWith(".")||!OW4.test($))throw Error(`invalid key: ${$}`)}function n7$($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!LW4.test($))throw Error(`invalid key: ${$}`)}function t7$($){if($.startsWith(".")||$.endsWith("."))throw Error(`invalid key: ${$}`);let Z=$.split("."),Q=!1;for(let Y=0;Y<Z.length;Y++)switch(Z[Y]){case"*":Q=!0;break;case">":if(Y!==Z.length-1)throw Error(`invalid key: ${$}`);Q=!0;break;default:}return Q}function NX0($){if(!wW4.test($))throw Error(`invalid bucket name: ${$}`)}class o7${js;constructor($){this.js=(0,w5.toJetStreamClient)($)}create($,Z={}){return this.#$($,Z)}open($,Z={}){return Z.bindOnly=!0,this.#$($,Z)}#$($,Z={}){let{ok:Q,min:Y}=this.js.nc.features.get(Q9.Feature.JS_KV);if(!Q)return Promise.reject(Error(`kv is only supported on servers ${Y} or better`));if(Z.bindOnly)return Xu.bind(this.js,$,Z);return Xu.create(this.js,$,Z)}list(){let $=(Q)=>{let X=Q.streams.filter((G)=>{return G.config.name.startsWith(Z9.kvPrefix)});X.forEach((G)=>{G.config.sealed=G.config.sealed||!1,G.config.deny_delete=G.config.deny_delete||!1,G.config.deny_purge=G.config.deny_purge||!1,G.config.allow_rollup_hdrs=G.config.allow_rollup_hdrs||!1});let J="";if(X.length)J=this.js.nc.info?.cluster??"";return X.map((G)=>{return new BX0(G,J)})},Z=`${this.js.prefix}.STREAM.LIST`;return new w5.ListerImpl(Z,$,this.js)}}a7$.Kvm=o7$;class Xu{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,Q){NX0($),this.js=Z,this.jsm=Q,this.bucket=$,this.prefix=m7$,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,Q={}){NX0(Z);let Y=await $.jetstreamManager(),X=new Xu(Z,$,Y);return await X.init(Q),X}static async bind($,Z,Q={}){let Y=$.getOptions()?.checkAPI||Q.bindOnly===!1,X=await $.jetstreamManager(Y),J={config:{allow_direct:Q.allow_direct}};NX0(Z);let G=new Xu(Z,$,X);return J.config.name=Q.streamName??G.bucketName(),Object.assign(G,J),G.stream=J.config.name,G.codec=Q.codec||Vo0(),G.direct=J.config.allow_direct??!1,G.initializePrefixes(J),G}async init($={}){let Z=Object.assign(i7$(),$);this.codec=Z.codec;let Q={};if(this.stream=Q.name=$.streamName??this.bucketName(),Q.retention=w5.RetentionPolicy.Limits,Q.max_msgs_per_subject=Z.history,Z.max_bytes)Q.max_bytes=Z.max_bytes;if(Q.max_msg_size=Z.maxValueSize,Q.storage=Z.storage,$.placement)Q.placement=$.placement;if($.republish)Q.republish=$.republish;if($.description)Q.description=$.description;if($.markerTTL)Q.allow_msg_ttl=!0,Q.subject_delete_marker_ttl=(0,Q9.nanos)(Z.markerTTL);if($.mirror){let H=Object.assign({},$.mirror);if(!H.name.startsWith(Z9.kvPrefix))H.name=`${Z9.kvPrefix}${H.name}`;Q.mirror=H,Q.mirror_direct=!0}else if($.sources){let H=$.sources.map((F)=>{let U=Object.assign({},F),N=U.name.startsWith(Z9.kvPrefix)?U.name.substring(Z9.kvPrefix.length):U.name;if(!U.name.startsWith(Z9.kvPrefix))U.name=`${Z9.kvPrefix}${U.name}`;if(!F.external&&N!==this.bucket)U.subject_transforms=[{src:`$KV.${N}.>`,dest:`$KV.${this.bucket}.>`}];return U});Q.sources=H,Q.subjects=[this.subjectForBucket()]}else Q.subjects=[this.subjectForBucket()];if($.metadata)Q.metadata=$.metadata;if(typeof $.compression==="boolean")Q.compression=$.compression?w5.StoreCompression.S2:w5.StoreCompression.None;let Y=this.js.nc,X=Y.getServerVersion(),J=X?(0,Q9.compare)(X,(0,Q9.parseSemVer)("2.7.2"))>=0:!1;Q.discard=J?w5.DiscardPolicy.New:w5.DiscardPolicy.Old;let{ok:G,min:W}=Y.features.get(Q9.Feature.JS_ALLOW_DIRECT);if(!G&&$.allow_direct===!0){let H=X?`${X.major}.${X.minor}.${X.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${H} - requires ${W}`))}if($.allow_direct=typeof $.allow_direct==="boolean"?$.allow_direct:G,Q.allow_direct=$.allow_direct,this.direct=Q.allow_direct,Q.num_replicas=Z.replicas,Z.ttl)Q.max_age=(0,Q9.nanos)(Z.ttl);Q.allow_rollup_hdrs=!0;let K;try{if(K=await this.jsm.streams.info(Q.name),!K.config.allow_direct&&this.direct===!0)this.direct=!1}catch(H){if(H.message==="stream not found")K=await this.jsm.streams.add(Q);else throw H}this.initializePrefixes(K)}initializePrefixes($){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:Z}=$.config;if(Z){let Q=Z.name;if(Q.startsWith(Z9.kvPrefix))Q=Q.substring(Z9.kvPrefix.length);if(Z.external&&Z.external.api!==""){let Y=Z.name.substring(Z9.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${Y}`,this.editPrefix=`${Z.external.api}.$KV.${Q}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${Z9.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey($,Z=!1){let Q=[];if(Z){if(this.useJsPrefix)Q.push(this.js.apiPrefix);if(this.editPrefix!=="")Q.push(this.editPrefix);else Q.push(this.prefix)}else if(this.prefix)Q.push(this.prefix);return Q.push($),Q.join(".")}fullKeyName($){if(this.prefix!=="")return`${this.prefix}.${$}`;return`${m7$}.${this.bucket}.${$}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey($){let Z=[];for(let Q of $.split("."))switch(Q){case">":case"*":Z.push(Q);break;default:Z.push(this.codec.key.encode(Q));break}return Z.join(".")}decodeKey($){let Z=[];for(let Q of $.split("."))switch(Q){case">":case"*":Z.push(Q);break;default:Z.push(this.codec.key.decode(Q));break}return Z.join(".")}validateKey=p7$;validateSearchKey=n7$;hasWildcards=t7$;close(){return Promise.resolve()}dataLen($,Z){let Q=Z?Z.get(w5.JsHeaders.MessageSizeHdr)||"":"";if(Q!=="")return parseInt(Q,10);return $.length}smToEntry($){return new r7$(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new s7$(this.bucket,this.prefixLen,$,Z,this.codec)}async create($,Z,Q){let Y;try{let J={previousSeq:0},G=await this._put($,Z,J,Q);return Promise.resolve(G)}catch(J){if(Y=J,J instanceof w5.JetStreamApiError){let G=J;if(G.code!==w5.JetStreamApiCodes.StreamWrongLastSequence&&G.code!==w5.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(J)}}let X=0;try{let J=await this.get($);if(J?.operation==="DEL"||J?.operation==="PURGE")return X=J!==null?J.revision:0,this._put($,Z,{previousSeq:X},Q);else return Promise.reject(Y)}catch(J){return Promise.reject(J)}}update($,Z,Q,Y){if(Q<=0)throw Error("version must be greater than 0");return this.put($,Z,{previousSeq:Q,timeout:Y})}async _put($,Z,Q={},Y){let X=this.encodeKey($);this.validateKey(X),Z=this.codec.value.encode(Z);let J={timeout:Q?.timeout};if(Q.previousSeq!==void 0){let G=(0,Q9.headers)();J.headers=G,G.set(w5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${Q.previousSeq}`)}if(Y)(J.headers||(0,Q9.headers)()).set(w5.PubHeaders.MessageTTL,Y);try{return(await this.js.publish(this.subjectForKey(X,!0),Z,J)).seq}catch(G){return Promise.reject(G)}}put($,Z,Q={}){return this._put($,Z,Q)}async get($,Z){let Q=this.encodeKey($);this.validateKey(Q);let Y={last_by_subj:this.subjectForKey(Q)};if(Z&&Z.revision>0)Y={seq:Z.revision};let X=null;try{if(this.direct)X=await this.jsm.direct.getMessage(this.bucketName(),Y);else X=await this.jsm.streams.getMessage(this.bucketName(),Y);if(X===null)return null;let J=this.smToEntry(X);if(J.rawKey!==Q)return null;return J}catch(J){throw J}}purge($,Z){return this._deleteOrPurge($,"PURGE",Z)}delete($,Z){return this._deleteOrPurge($,"DEL",Z)}async purgeDeletes($=1800000){let Z=[],Q=await this.history({key:">"});await(async()=>{for await(let G of Q)if(G.operation==="DEL"||G.operation==="PURGE")Z.push(G)})().then(),Q.stop();let Y=Date.now()-$,X=Z.map((G)=>{let W=this.subjectForKey(G.key);if(G.created.getTime()>=Y)return this.jsm.streams.purge(this.stream,{filter:W,keep:1});else return this.jsm.streams.purge(this.stream,{filter:W,keep:0})}),J=await Promise.all(X);return J.unshift({success:!0,purged:0}),J.reduce((G,W)=>{return G.purged+=W.purged,G})}async _deleteOrPurge($,Z,Q){if(!this.hasWildcards($))return this._doDeleteOrPurge($,Z,Q);let Y=await this.keys($),X=[];for await(let J of Y)if(X.push(this._doDeleteOrPurge(J,Z)),X.length===100)await Promise.all(X),X.length=0;if(X.length>0)await Promise.all(X)}async _doDeleteOrPurge($,Z,Q){let Y=this.encodeKey($);this.validateKey(Y);let X=(0,Q9.headers)();if(X.set(a7$.kvOperationHdr,Z),Z==="PURGE"){let J=Q;if(X.set(w5.JsHeaders.RollupHdr,w5.JsHeaders.RollupValueSubject),typeof J?.ttl==="string"&&J.ttl!=="")X.set(w5.PubHeaders.MessageTTL,`${J.ttl}`)}if(Q?.previousSeq)X.set(w5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${Q.previousSeq}`);await this.js.publish(this.subjectForKey(Y,!0),Q9.Empty,{headers:X})}_buildCC($,Z,Q={}){let X=(!Array.isArray($)?[$]:$).map((W)=>{let K=this.encodeKey(W);return this.validateSearchKey(W),this.fullKeyName(K)}),J=w5.DeliverPolicy.LastPerSubject;if(Z===Z9.KvWatchInclude.AllHistory)J=w5.DeliverPolicy.All;if(Z===Z9.KvWatchInclude.UpdatesOnly)J=w5.DeliverPolicy.New;let G=void 0;if(X.length===1)G=X[0],X=void 0;return Object.assign({deliver_policy:J,ack_policy:w5.AckPolicy.None,filter_subjects:X,filter_subject:G,flow_control:!0,idle_heartbeat:(0,Q9.nanos)(5000)},Q)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",Q={};Q.headers_only=$.headers_only||!1;let Y=new Q9.QueuedIteratorImpl,X=()=>{Y.stop()},J=this._buildCC(Z,Z9.KvWatchInclude.AllHistory,Q),G=await this.js.consumers.getPushConsumer(this.stream,J);if(Y._data=G,(await G.info(!0)).num_pending===0)return Y.push(X),Y;let K=await G.consume({callback:(H)=>{let F=this.jmToWatchEntry(H,!1);if(Y.push(F),Y.received++,H.info.pending===0)Y.push(X)}});return K.closed().then(()=>{Y.push(X)}),(async()=>{for await(let H of K.status())switch(H.type){case"heartbeat":Y.push(()=>{Y.stop()});break}})().then(),Y.iterClosed.then(()=>{K.stop()}),Y}canSetWatcherName(){let $=this.js.nc,{ok:Z}=$.features.get(Q9.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",Q=new Q9.QueuedIteratorImpl,Y={};Y.headers_only=$.headers_only||!1;let X=Z9.KvWatchInclude.LastValue;if($.include===Z9.KvWatchInclude.AllHistory)X=Z9.KvWatchInclude.AllHistory;else if($.include===Z9.KvWatchInclude.UpdatesOnly)X=Z9.KvWatchInclude.UpdatesOnly;let J=$.ignoreDeletes===!0,G=this._buildCC(Z,X,Y);if(G.name=`KV_WATCHER_${Q9.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)G.deliver_policy=w5.DeliverPolicy.StartSequence,G.opt_start_seq=$.resumeFromRevision;let W=await this.js.consumers.getPushConsumer(this.stream,G),H=(await W.info(!0)).num_pending,F=X===Z9.KvWatchInclude.UpdatesOnly||H===0;Q._data=W;let U=0,N=await W.consume({callback:(B)=>{if(!F)U++,F=U>=H;let D=this.jmToWatchEntry(B,F);if(J&&D.operation==="DEL")return;Q.push(D),Q.received++}});return Q.iterClosed.then(()=>{N.stop()}),N.closed().then(()=>{Q.push(()=>{Q.stop()})}),Q}async keys($=">"){let Z=new Q9.QueuedIteratorImpl,Q=this._buildCC($,Z9.KvWatchInclude.LastValue,{headers_only:!0}),Y=await this.js.consumers.getPushConsumer(this.stream,Q);if((await Y.info()).num_pending===0)return Z.stop(),Z;Z._data=Y;let J=await Y.consume({callback:(G)=>{let W=G.headers?.get(a7$.kvOperationHdr);if(W!=="DEL"&&W!=="PURGE"){let K=this.decodeKey(G.subject.substring(this.prefixLen));Z.push(K)}if(G.info.pending===0)J.stop()}});return(async()=>{for await(let G of J.status())switch(G.type){case"heartbeat":Z.push(()=>{Z.stop()});break}})().then(),J.closed().then(()=>{Z.push(()=>{Z.stop()})}),Z.iterClosed.then(()=>{J.stop()}),Z}purgeBucket($){return this.jsm.streams.purge(this.bucketName(),$)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let Z=this.js.nc.info?.cluster??"",Q=this.bucketName(),Y=await this.jsm.streams.info(Q);return new BX0(Y,Z)}}a7$.Bucket=Xu;class BX0{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(Z9.kvPrefix)?this.si.config.name.substring(Z9.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,Q9.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,Q9.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==w5.StoreCompression.None;return!1}}a7$.KvStatusImpl=BX0;class r7${bucket;sm;prefixLen;codec;constructor($,Z,Q,Y){this.bucket=$,this.prefixLen=Z,this.sm=Q,this.codec=Y}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(a7$.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(w5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(Q9.TD.decode(this.value),$)}string(){return Q9.TD.decode(this.value)}}class s7${bucket;sm;prefixLen;update;codec;constructor($,Z,Q,Y,X){this.bucket=$,this.prefixLen=Z,this.sm=Q,this.update=Y,this.codec=X}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,Q9.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(a7$.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(w5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(Q9.TD.decode(this.value),$)}string(){return Q9.TD.decode(this.value)}}});var ko0=_((gW)=>{Object.defineProperty(gW,"__esModule",{value:!0});gW.validateKey=gW.validateBucket=gW.NoopKvCodecs=gW.Kvm=gW.defaultBucketOpts=gW.Bucket=gW.Base64KeyCodec=gW.KvWatchInclude=gW.kvPrefix=void 0;var ZQ$=Io0();Object.defineProperty(gW,"kvPrefix",{enumerable:!0,get:function(){return ZQ$.kvPrefix}});Object.defineProperty(gW,"KvWatchInclude",{enumerable:!0,get:function(){return ZQ$.KvWatchInclude}});var Sz=$Q$();Object.defineProperty(gW,"Base64KeyCodec",{enumerable:!0,get:function(){return Sz.Base64KeyCodec}});Object.defineProperty(gW,"Bucket",{enumerable:!0,get:function(){return Sz.Bucket}});Object.defineProperty(gW,"defaultBucketOpts",{enumerable:!0,get:function(){return Sz.defaultBucketOpts}});Object.defineProperty(gW,"Kvm",{enumerable:!0,get:function(){return Sz.Kvm}});Object.defineProperty(gW,"NoopKvCodecs",{enumerable:!0,get:function(){return Sz.NoopKvCodecs}});Object.defineProperty(gW,"validateBucket",{enumerable:!0,get:function(){return Sz.validateBucket}});Object.defineProperty(gW,"validateKey",{enumerable:!0,get:function(){return Sz.validateKey}})});var Hr=_((_O)=>{Object.defineProperty(_O,"__esModule",{value:!0});_O.NoopKvCodecs=_O.Kvm=_O.defaultBucketOpts=_O.Bucket=_O.Base64KeyCodec=_O.KvWatchInclude=void 0;var VW4=ko0();Object.defineProperty(_O,"KvWatchInclude",{enumerable:!0,get:function(){return VW4.KvWatchInclude}});var Kr=ko0();Object.defineProperty(_O,"Base64KeyCodec",{enumerable:!0,get:function(){return Kr.Base64KeyCodec}});Object.defineProperty(_O,"Bucket",{enumerable:!0,get:function(){return Kr.Bucket}});Object.defineProperty(_O,"defaultBucketOpts",{enumerable:!0,get:function(){return Kr.defaultBucketOpts}});Object.defineProperty(_O,"Kvm",{enumerable:!0,get:function(){return Kr.Kvm}});Object.defineProperty(_O,"NoopKvCodecs",{enumerable:!0,get:function(){return Kr.NoopKvCodecs}})});function vO(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(Q)=>$.encode(JSON.stringify(Q)),decode:(Q)=>JSON.parse(Z.decode(Q))}}class So0{options;kv=null;codec=vO();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new YQ$.Kvm($).create(SW4,{storage:QQ$.StorageType.Memory})}async get($,Z){if(!this.kv)return null;try{let Q=await this.kv.get(`${$}.${Z}`);if(!Q?.value?.length)return null;if(Q.operation==="DEL"||Q.operation==="PURGE")return null;return this.codec.decode(Q.value)}catch{return null}}async set($,Z,Q){if(!this.kv)return;try{await this.kv.put(`${$}.${Z}`,this.codec.encode(Q))}catch{}}async invalidate($){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(Q)=>{try{await this.kv.delete(`${Q}.${$}`)}catch{}}))}teardown(){this.kv=null}}function CW4($,Z,Q){if(Q<=0)return!0;if($===void 0)return!0;return Z-$>=Q}function XQ$($){let Z=["tools","resources","prompts"];for(let Q of Z){let Y=`${Q}:${$}`;OX0.delete(Y),Ur.delete(Y)}}function DX0($){return $ instanceof w1&&$.code===q1.MethodNotFound}function _W4($){return $ instanceof w1&&$.code===-32000&&/connection closed/i.test($.message)}async function bO($,Z,Q,Y,X,J=0){if(!Y)try{return await Q()}catch(H){if(DX0(H))return[];return Fr.add(1,{type:$,outcome:"error",stage:"no_cache"}),null}let G=`${$}:${Z}`,W=await Y.get($,Z);if(W===null)try{let H=await Q();return Y.set($,Z,H).catch(()=>{}),OX0.set(G,Date.now()),Fr.add(1,{type:$,outcome:"miss",stage:"miss"}),H}catch(H){if(DX0(H))return Y.set($,Z,[]).catch(()=>{}),[];return Fr.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(Fr.add(1,{type:$,outcome:"hit",stage:"hit"}),CW4(OX0.get(G),Date.now(),J)&&!Ur.has(G)){Ur.add(G),OX0.set(G,Date.now());let H=Q().then((F)=>Y.set($,Z,F)).catch((F)=>{if(DX0(F)||_W4(F)){if(DX0(F))Y.set($,Z,[]).catch(()=>{});return}Fr.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>Ur.delete(G));X?.(H)}return W}function Co0($){JQ$=$}function R9(){return JQ$}var QQ$,YQ$,Fr,SW4="DECOCMS_MCP_LISTS",Ur,OX0,fO=30000,JQ$=null;var RX=O(()=>{w9();J6();QQ$=V(nF(),1),YQ$=V(Hr(),1),Fr=Q$.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});Ur=new Set;Q$.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(Ur.size));OX0=new Map});function LX0($){return(Z)=>{if(Z instanceof w1&&Z.code===q1.MethodNotFound)return $;throw Z}}var GQ$=O(()=>{w9()});function wX0($,Z,Q){let Y=xO($,Z,Q,R9()??void 0),X=xE(Y,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:vW4,toolCallTimeoutMs:yg});X.server.setRequestHandler(KD,async()=>{return await Y.listResources().catch(LX0({resources:[]}))}),X.server.setRequestHandler(HD,async()=>{return await Y.listResourceTemplates().catch(LX0({resourceTemplates:[]}))}),X.server.setRequestHandler(FD,async()=>{return await Y.listPrompts().catch(LX0({prompts:[]}))});let J=X.close.bind(X);return X.close=async()=>{await J(),await Y.close().catch(()=>{})},X}var vW4;var WQ$=O(()=>{CQ();w9();Nr();RX();GQ$();vW4={tools:{},resources:{},prompts:{}}});var Cz=O(()=>{Gr();l7$();WQ$()});async function jX0($,Z,Q){await(await m7(Z,$,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:Q.state,scopes:Q.scopes,firstRun:Q.firstRun,...Q.vault?{vault:Q.vault}:{}}})}var _o0=O(()=>{Cz()});import{z as vo0}from"zod";function xW4($){let{owner:Z,name:Q}=$9({path:$.path});return{owner:Z,name:Q,url:$.webUrl??`https://${$.host}/${$.path}`,repositoryId:$.repositoryId}}function yW4($,Z){if(!Z)return $;return $.filter((Q)=>Q.connection_id!==Z)}function gW4($,Z){let{repository:Q,github_repo:Y,...X}=$,J=Z?GX0(Z):null;return{...X,...Z?{repository:JX0(Z)}:{},...J?{github_repo:J}:{}}}async function hW4($,Z,Q){let Y=A8.REPORTS(Z),X=await $.storage.connections.findById(Y,Z);if(!X)throw Error("Reports is not set up for this organization yet");let J=gW4(X.configuration_state??{},Q);await $.storage.connections.update(Y,{configuration_state:J});try{await jX0($,{...X,configuration_state:J},{state:J,scopes:X.configuration_scopes??[],firstRun:!1})}catch(G){console.error("[reports] ON_MCP_CONFIGURATION after repository change failed",G)}}async function uW4($,Z,Q,Y){let X=bg(Z),J=await $.storage.virtualMcps.findById(X,Z);if(!J)return;let G=J.metadata??{},W=G.githubRepo,{githubRepo:K,...H}=G;await $.storage.virtualMcps.update(X,Q,{metadata:{...H,...Y?{githubRepo:xW4(Y)}:{}},connections:yW4(J.connections??[],W?.connectionId??null)})}var fW4,bW4,fo0;var KQ$=O(()=>{T8();Q6();WX0();R0();_o0();fW4=vo0.object({repositoryId:vo0.string().min(1).nullable().describe("Studio repository id to diagnose, or null to unlink the current one.")}),bW4=vo0.object({repository:E7$.nullable()});fo0=g({name:"REPORTS_SET_REPOSITORY",description:"Point the organization's Reports diagnostic at one of its linked repositories, or unlink the current one. Works for GitHub, GitLab and Bitbucket.",annotations:{title:"Set Reports Repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:fW4,outputSchema:bW4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to set the diagnostic's repository");let X=null;if($.repositoryId){let J=await Z.storage.repositories.get($.repositoryId,Q.id);if(!J)throw Error(`Repository ${$.repositoryId} is not linked to this organization`);X={repositoryId:J.id,provider:J.provider,host:J.host,path:J.path,defaultBranch:J.defaultBranch,webUrl:J.webUrl}}return await hW4(Z,Q.id,X),await uW4(Z,Q.id,Y,X),{repository:X}}})});function yO($,Z){let Q=`/${encodeURIComponent($)}/settings`;return Z?`${Q}/${Z}`:Q}function EX0($,Z){let Q=`/${encodeURIComponent($)}/agents`,Y=Z.panel?`${Q}/${Z.panel}`:Q,X=new URLSearchParams({virtualmcpid:Z.projectId,...Z.search??{}});return`${Y}?${X.toString()}`}var gO=O(()=>{n50()});import{z as MH}from"zod";async function mW4($,Z,Q,Y){let X=await $.storage.connections.findById(Z,Q);if(X)return X;throw Y}async function iW4($,Z,Q,Y){let X=await $.storage.virtualMcps.findById(Z,Q);if(X)return X;throw Y}var bo0,lW4=3600000,cW4,dW4,xo0;var HQ$=O(()=>{T8();Qr();R0();mK();gO();kz();bo0=r70,cW4=MH.object({siteUrl:MH.string().min(1).describe("Website URL to configure.")}),dW4=MH.object({connection:wQ,virtualMcp:jQ,reportApp:MH.object({connectionId:MH.string(),virtualMcpId:MH.string(),toolName:MH.literal(bo0)}),created:MH.object({connection:MH.boolean(),virtualMcp:MH.boolean()})});xo0=g({name:"REPORTS_SETUP",description:"Create or return the Reports connection and virtual MCP for the current organization.",annotations:{title:"Set Up Reports",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cW4,outputSchema:dW4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check("COLLECTION_CONNECTIONS_CREATE");let Y=c0(Z);if(!Y)throw Error("User ID required to set up Reports");let X=CO($.siteUrl);if(!X.ok)throw Error(X.error);let J=A8.REPORTS(Q.id),G=bg(Q.id),W={email:Z.auth.user?.email,reportUrl:`${Z.baseUrl}${EX0(Q.slug??Q.id,{projectId:G,panel:"app",search:{connection:J,tool:bo0}})}`},K=await Z.storage.connections.findById(J,Q.id),H={connection:!1,virtualMcp:!1},F=await R7$({siteUrl:X.value,orgId:Q.id,orgName:Q.name,...W}),U=A7$();if(K)console.log("[reports] syncing connection to claimed site",{orgId:Q.id,siteUrl:X.value,connectionId:J}),K=await Z.storage.connections.update(K.id,{connection_url:U,connection_token:F.authorizationToken,metadata:{...K.metadata??{},siteUrl:X.value}});else{console.log("[reports] creating connection",{orgId:Q.id,siteUrl:X.value,connectionId:J});try{let L=ra1(Q.id,F.authorizationToken,U);K=await Z.storage.connections.create({...L,metadata:{...L.metadata??{},siteUrl:X.value},organization_id:Q.id,created_by:Y}),H.connection=!0}catch(L){K=await mW4(Z,J,Q.id,L)}}let N=await Z.storage.virtualMcps.findById(G,Q.id);if(!N){console.log("[reports] creating virtual MCP",{orgId:Q.id,siteUrl:X.value,connectionId:K.id,virtualMcpId:G});try{N=await Z.storage.virtualMcps.create(Q.id,Y,sa1(Q.id,K.id),{id:G}),H.virtualMcp=!0}catch(L){N=await iW4(Z,G,Q.id,L)}}if(!N.pinned)N=await Z.storage.virtualMcps.update(N.id,Y,{pinned:!0});let B=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",Q.id).executeTakeFirst();if((B?Date.now()-new Date(B.createdAt).getTime():Number.POSITIVE_INFINITY)<lW4){let w=(await Z.storage.organizationSettings.get(Q.id))?.flags,j={};if(w?.reports_only==null)j.reports_only=!0;if(Object.keys(j).length>0)await Z.storage.organizationSettings.upsert(Q.id,{flags:j})}return{connection:K,virtualMcp:N,reportApp:{connectionId:K.id,virtualMcpId:N.id,toolName:bo0},created:H}}})});var FQ$=O(()=>{V7$();k7$();S7$();KQ$();HQ$()});function Br($,Z,Q){if(Z.some((Y)=>Y!=="*"&&Y.startsWith("SELF::"))&&$.SELF===void 0)$.SELF={value:`${Q}_self`}}function Dr($,Z){let Q=new Map;for(let Y of Z){if(Y==="*")continue;let[X,J]=zY0(Y);if(!nW4.has(J))continue;let G=Co(X,$);if(typeof G!=="object"||G===null||!("value"in G))continue;let W=G.value;if(typeof W!=="string")continue;Q.set(`${W}:${J}`,{targetConnectionId:W,scope:J})}return[...Q.values()]}async function Or($,Z,Q,Y){for(let G of Z){if(G==="*")continue;let[W]=zY0(G),K=Co(W,$);if(K===void 0||K===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let X=h4$($,Z),J=`${Q}_self`;for(let G of X){if(G===J)continue;let W=await Y.storage.connections.findById(G);if(!W||W.organization_id!==Q)throw Error(`Referenced connection not found: ${G}`);try{await Y.access.check(G)}catch(K){throw Error(`Access denied to referenced connection: ${G}. ${K.message}`)}}}var nW4;var yo0=O(()=>{rn0();GQ0();nW4=new Set([XQ0,JQ0])});import{z as UQ$}from"zod";var tW4,oW4,go0;var NQ$=O(()=>{_4();R0();Z$();RX();Cz();yo0();$X0();mK();tW4=UQ$.object({data:u50.describe("Data for the new connection (id is auto-generated if not provided)")}),oW4=UQ$.object({item:wQ.describe("The created connection entity")}),go0=g({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection. Auto-fetches and caches the server's tool list.",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:tW4,outputSchema:oW4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to create connection");let X={...$.data,organization_id:Q.id,created_by:Y};if(X.id){if((await Z.storage.connections.findById(X.id))?.organization_id===Q.id)throw Error("Connection already exists in organization");if(await Z.storage.connections.findBySanitizedId(X.id))throw Error("Connection id conflicts with an existing connection's isolated database schema")}if(X.connection_type==="VIRTUAL"){let U=Ly(X.connection_url);if(!U)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let N=await Z.storage.virtualMcps.findById(U);if(!N)throw Error(`Virtual MCP not found: ${U}`);if(N.organization_id!==Q.id)throw Error("Virtual MCP does not belong to the current organization");X.connection_url=wy(U)}if(X.connection_type==="STDIO"&&!O0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let J=await eh({id:`pending-${Date.now()}`,title:X.title,connection_type:X.connection_type,connection_url:X.connection_url,connection_token:X.connection_token,connection_headers:X.connection_headers}).catch(()=>null),G=J?.tools?.length?J.tools:null,W=J?.scopes?.length?J.scopes:X.configuration_scopes??null,K=X.configuration_state??null;if(K&&W?.length)Br(K,W,Q.id),await Or(K,W,Q.id,Z);let H=await Z.storage.connections.createNew({...X,tools:null,configuration_state:K,configuration_scopes:W}),F=K&&W?.length?Dr(K,W):[];if(F.length>0){let U;try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:Q.id,subjectConnectionId:H.id,createdBy:Y,grants:F});let{plaintextToken:N,record:B}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:Q.id,subjectConnectionId:H.id});U=B.id,await(await m7(H,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:K,scopes:W,firstRun:!0,vault:{baseUrl:Z.baseUrl,org:Q.slug??Q.id,subjectConnectionId:H.id,token:N}}})}catch(N){if(U)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:Q.id,subjectConnectionId:H.id,tokenId:U});throw await Z.storage.connections.delete(H.id),N}}if(G)R9()?.set("tools",H.id,G).catch(()=>{});return M1.capture({distinctId:Y,event:"connection_created",groups:{organization:Q.id},properties:{connection_id:H.id,connection_type:H.connection_type,app_name:H.app_name??null,organization_id:Q.id,tools_count:G?.length??0}}),{item:H}}})});import{z as GG}from"zod/v4";import{z as BQ$}from"zod/v4";import{z as zX0}from"zod/v4";import{z as IH}from"zod/v4";import{z as eW4}from"zod/v4";import{z as _z}from"zod/v4";import{z as VH}from"zod/v4";import{z as H7}from"zod/v4";import{z as DQ$}from"zod/v4";import{z as TX0}from"zod/v4";import{z as AK4}from"zod/v4";import{z as OQ$}from"zod/v4";import{z as PX0}from"zod/v4";import{z as CK4}from"zod/v4";function Lr($,Z){if($===Z)return!0;if($==null||Z==null)return $===Z;if(typeof $!==typeof Z)return!1;if(Array.isArray($)&&Array.isArray(Z)){if($.length!==Z.length)return!1;return $.every((Q,Y)=>Lr(Q,Z[Y]))}if(typeof $==="object"&&typeof Z==="object"){let Q=Object.keys($),Y=Object.keys(Z);if(Q.length!==Y.length)return!1;return Q.every((X)=>Y.includes(X)&&Lr($[X],Z[X]))}return!1}function EK4(){return($)=>{if(!Array.isArray($))return!0;let Z=[];return $.every((Q)=>{if(Z.some((X)=>Lr(Q,X)))return!1;return Z.push(Q),!0})}}function AX0($,Z){return $.safeParse(Z).success}function i7($){if(typeof $==="boolean")return $?GG.any():GG.never();let Z={};for(let X of bK4)X.apply(Z,$);let Q=[];if(Z.string!==!1)Q.push(Z.string||GG.string());if(Z.number!==!1)Q.push(Z.number||GG.number());if(Z.boolean!==!1)Q.push(Z.boolean||GG.boolean());if(Z.null!==!1)Q.push(Z.null||GG.null());if(Z.array!==!1)Q.push(Z.array||GG.array(GG.any()));if(Z.tuple!==!1&&Z.tuple!==void 0)Q.push(Z.tuple);if(Z.object!==!1)if(Z.object)Q.push(Z.object);else{let X=GG.custom((J)=>{return typeof J==="object"&&J!==null&&!Array.isArray(J)},"Must be an object, not an array");Q.push(X)}if(Z.file!==!1&&Z.file!==void 0)Q.push(Z.file);let Y;if(Q.length===0)Y=GG.never();else if(Q.length===1)Y=Q[0];else if(!Object.keys($).some((J)=>J!=="$schema"&&J!=="title"&&J!=="description"))Y=GG.any();else Y=GG.union(Q);for(let X of xK4)Y=X.apply(Y,$);return Y}var rW4=class{apply($,Z){if(!Z.type)return;let Q=Array.isArray(Z.type)?Z.type:[Z.type],Y=new Set(Q);if(!Y.has("string"))$.string=!1;if(!Y.has("number")&&!Y.has("integer"))$.number=!1;if(!Y.has("boolean"))$.boolean=!1;if(!Y.has("null"))$.null=!1;if(!Y.has("array"))$.array=!1;if(!Y.has("object"))$.object=!1;if(Y.has("integer")&&$.number!==!1){let X=$.number||BQ$.number();if(X instanceof BQ$.ZodNumber)$.number=X.int()}}},sW4=class{apply($,Z){if(Z.const===void 0)return;let Q=Z.const;if($.string=!1,$.number=!1,$.boolean=!1,$.null=!1,$.array=!1,$.object=!1,typeof Q==="string")$.string=zX0.literal(Q);else if(typeof Q==="number")$.number=zX0.literal(Q);else if(typeof Q==="boolean")$.boolean=zX0.literal(Q);else if(Q===null)$.null=zX0.null();else if(Array.isArray(Q))$.array=void 0;else if(typeof Q==="object")$.object=void 0}},aW4=class{apply($,Z){if(!Z.enum)return;if(Z.enum.length===0){if(!Z.type)$.string=!1,$.number=!1,$.boolean=!1,$.null=!1,$.array=!1,$.object=!1;return}let Q={string:Z.enum.filter((Y)=>typeof Y==="string"),number:Z.enum.filter((Y)=>typeof Y==="number"),boolean:Z.enum.filter((Y)=>typeof Y==="boolean"),null:Z.enum.filter((Y)=>Y===null),array:Z.enum.filter((Y)=>Array.isArray(Y)),object:Z.enum.filter((Y)=>typeof Y==="object"&&Y!==null&&!Array.isArray(Y))};$.string=this.createTypeSchema(Q.string,"string"),$.number=this.createTypeSchema(Q.number,"number"),$.boolean=this.createTypeSchema(Q.boolean,"boolean"),$.null=Q.null.length>0?IH.null():!1,$.array=Q.array.length>0?void 0:!1,$.object=Q.object.length>0?void 0:!1}createTypeSchema($,Z){if($.length===0)return!1;if($.length===1)return IH.literal($[0]);if(Z==="string")return IH.enum($);if(Z==="number"){let[Q,Y,...X]=$;return IH.union([IH.literal(Q),IH.literal(Y),...X.map((J)=>IH.literal(J))])}if(Z==="boolean")return IH.union([IH.literal(!0),IH.literal(!1)]);return!1}},$K4=class{apply($,Z){let Q=Z;if(Q.type==="string"&&Q.format==="binary"&&Q.contentEncoding==="binary"){let Y=eW4.file();if(Q.minLength!==void 0)Y=Y.min(Q.minLength);if(Q.maxLength!==void 0)Y=Y.max(Q.maxLength);if(Q.contentMediaType!==void 0)Y=Y.mime(Q.contentMediaType);$.file=Y,$.string=!1}}},ZK4=class{apply($,Z){let Q=Z;if(Z.type===void 0&&(Q.minLength!==void 0||Q.maxLength!==void 0||Q.pattern!==void 0)){if($.string===void 0)$.string=_z.string()}}},QK4=class{apply($,Z){let Q=Z;if(Q.minLength===void 0)return;if($.string!==!1){let Y=$.string||_z.string();if(Y instanceof _z.ZodString)$.string=Y.refine((X)=>{return Array.from(X).length>=Q.minLength},{message:`String must be at least ${Q.minLength} characters long`})}}},YK4=class{apply($,Z){let Q=Z;if(Q.maxLength===void 0)return;if($.string!==!1){let Y=$.string||_z.string();if(Y instanceof _z.ZodString)$.string=Y.refine((X)=>{return Array.from(X).length<=Q.maxLength},{message:`String must be at most ${Q.maxLength} characters long`})}}},XK4=class{apply($,Z){let Q=Z;if(!Q.pattern)return;if($.string!==!1){let Y=$.string||_z.string();if(Y instanceof _z.ZodString){let X=new RegExp(Q.pattern);$.string=Y.regex(X)}}}},JK4=class{apply($,Z){let Q=Z;if(Q.minimum===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)$.number=Y.min(Q.minimum)}}},GK4=class{apply($,Z){let Q=Z;if(Q.maximum===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)$.number=Y.max(Q.maximum)}}},WK4=class{apply($,Z){let Q=Z;if(Q.exclusiveMinimum===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)if(typeof Q.exclusiveMinimum==="number")$.number=Y.gt(Q.exclusiveMinimum);else $.number=!1}}},KK4=class{apply($,Z){let Q=Z;if(Q.exclusiveMaximum===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)if(typeof Q.exclusiveMaximum==="number")$.number=Y.lt(Q.exclusiveMaximum);else $.number=!1}}},HK4=class{apply($,Z){let Q=Z;if(Q.multipleOf===void 0)return;if($.number!==!1){let Y=$.number||VH.number();if(Y instanceof VH.ZodNumber)$.number=Y.refine((X)=>{if(Q.multipleOf===0)return!1;let J=X/Q.multipleOf,G=Math.round(J),W=Math.min(Math.abs(X)*Number.EPSILON*10,Math.abs(Q.multipleOf)*Number.EPSILON*10);return Math.abs(J-G)<=W/Math.abs(Q.multipleOf)},{message:`Must be a multiple of ${Q.multipleOf}`})}}},FK4=class{apply($,Z){let Q=Z;if(Z.type===void 0&&(Q.minItems!==void 0||Q.maxItems!==void 0||Q.items!==void 0||Q.prefixItems!==void 0)){if($.array===void 0)$.array=H7.array(H7.any())}}},UK4=class{apply($,Z){let Q=Z;if(Q.minItems===void 0)return;if($.array!==!1)$.array=($.array||H7.array(H7.any())).min(Q.minItems)}},NK4=class{apply($,Z){let Q=Z;if(Q.maxItems===void 0)return;if($.array!==!1)$.array=($.array||H7.array(H7.any())).max(Q.maxItems)}},BK4=class{apply($,Z){let Q=Z;if($.array===!1)return;if(Array.isArray(Q.items))$.array=$.array||H7.array(H7.any());else if(Q.items&&typeof Q.items!=="boolean"&&!Q.prefixItems){let Y=i7(Q.items),X=H7.array(Y);if($.array&&$.array instanceof H7.ZodArray){let J=$.array._def;if(J.checks)J.checks.forEach((G)=>{if(G._zod&&G._zod.def){let W=G._zod.def;if(W.check==="min_length"&&W.minimum!==void 0)X=X.min(W.minimum);else if(W.check==="max_length"&&W.maximum!==void 0)X=X.max(W.maximum)}})}$.array=X}else if(typeof Q.items==="boolean"&&Q.items===!1)if(!Q.prefixItems)$.array=H7.array(H7.any()).max(0);else $.array=$.array||H7.array(H7.any());else if(typeof Q.items==="boolean"&&Q.items===!0)$.array=$.array||H7.array(H7.any());else if(Q.prefixItems)$.array=$.array||H7.array(H7.any())}},DK4=class{apply($,Z){if(Z.type!=="array")return;let Q=Z;if(!Array.isArray(Q.items))return;if($.array===!1)return;let Y=Q.items.map((J)=>i7(J)),X;if(Y.length===0)X=DQ$.tuple([]);else X=DQ$.tuple(Y);if(Q.minItems!==void 0&&Q.minItems>Y.length)X=!1;if(Q.maxItems!==void 0&&Q.maxItems<Y.length)X=!1;$.tuple=X,$.array=!1}},OK4=class{apply($,Z){let Q=Z;if($.object===!1)return;if(Q.properties||Q.required||Q.additionalProperties!==void 0)$.object=$.object||TX0.object({}).passthrough()}},LK4=class{apply($,Z){let Q=Z;if(Z.type===void 0&&(Q.maxProperties!==void 0||Q.minProperties!==void 0)){if($.object===void 0)$.object=TX0.object({}).passthrough()}}},wK4=class{apply($,Z){let Q=Z;if(Q.maxProperties===void 0)return;if($.object!==!1){let Y=$.object||TX0.object({}).passthrough();$.object=Y.refine((X)=>Object.keys(X).length<=Q.maxProperties,{message:`Object must have at most ${Q.maxProperties} properties`})}}},jK4=class{apply($,Z){let Q=Z;if(Q.minProperties===void 0)return;if($.object!==!1){let Y=$.object||TX0.object({}).passthrough();$.object=Y.refine((X)=>Object.keys(X).length>=Q.minProperties,{message:`Object must have at least ${Q.minProperties} properties`})}}},zK4=class{apply($,Z){if(!Z.not)return $;let Q=i7(Z.not);return $.refine((Y)=>!AX0(Q,Y),{message:"Value must not match the 'not' schema"})}},PK4=class{apply($,Z){if(Z.uniqueItems!==!0)return $;return $.refine(EK4(),{message:"Array items must be unique"})}},TK4=class{apply($,Z){if(!Z.allOf||Z.allOf.length===0)return $;return Z.allOf.map((Y)=>i7(Y)).reduce((Y,X)=>AK4.intersection(Y,X),$)}},RK4=class{apply($,Z){if(!Z.anyOf||Z.anyOf.length===0)return $;let Q=Z.anyOf.length===1?i7(Z.anyOf[0]):OQ$.union([i7(Z.anyOf[0]),i7(Z.anyOf[1]),...Z.anyOf.slice(2).map((Y)=>i7(Y))]);return OQ$.intersection($,Q)}},qK4=class{apply($,Z){if(!Z.oneOf||Z.oneOf.length===0)return $;let Q=Z.oneOf.map((Y)=>i7(Y));return $.refine((Y)=>{let X=0;for(let J of Q)if(J.safeParse(Y).success){if(X++,X>1)return!1}return X===1},{message:"Value must match exactly one of the oneOf schemas"})}},MK4=class{apply($,Z){let Q=Z;if(Q.prefixItems&&Array.isArray(Q.prefixItems)){let X=Q.prefixItems.map((J)=>i7(J));return $.refine((J)=>{if(!Array.isArray(J))return!0;for(let G=0;G<Math.min(J.length,X.length);G++)if(!AX0(X[G],J[G]))return!1;if(J.length>X.length){if(typeof Q.items==="boolean"&&Q.items===!1)return!1;else if(Q.items&&typeof Q.items==="object"&&!Array.isArray(Q.items)){let G=i7(Q.items);for(let W=X.length;W<J.length;W++)if(!AX0(G,J[W]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return $}},IK4=class{apply($,Z){let Q=Z;if(!Q.properties&&!Q.required&&Q.additionalProperties!==!1)return $;if($ instanceof PX0.ZodObject||$ instanceof PX0.ZodRecord){let Y={};if(Q.properties){for(let[X,J]of Object.entries(Q.properties))if(J!==void 0)Y[X]=i7(J)}if(Q.required&&Array.isArray(Q.required)){let X=new Set(Q.required);for(let J of Object.keys(Y))if(!X.has(J))Y[J]=Y[J].optional()}else for(let X of Object.keys(Y))Y[X]=Y[X].optional();if(Q.additionalProperties===!1)return PX0.object(Y);else return PX0.object(Y).passthrough()}return $.refine((Y)=>{if(typeof Y!=="object"||Y===null||Array.isArray(Y))return!0;if(Q.properties){for(let[X,J]of Object.entries(Q.properties))if(J!==void 0){if(Object.getOwnPropertyDescriptor(Y,X)!==void 0){if(!i7(J).safeParse(Y[X]).success)return!1}}}if(Q.required&&Array.isArray(Q.required)){for(let X of Q.required)if(Object.getOwnPropertyDescriptor(Y,X)===void 0)return!1}if(Q.additionalProperties===!1&&Q.properties){let X=new Set(Object.keys(Q.properties));for(let J in Y)if(!X.has(J))return!1}return!0},{message:"Object constraints validation failed"})}},VK4=class{apply($,Z){if(!Z.enum||Z.enum.length===0)return $;let Q=Z.enum.filter((Y)=>Array.isArray(Y)||typeof Y==="object"&&Y!==null);if(Q.length===0)return $;return $.refine((Y)=>{if(typeof Y!=="object"||Y===null)return!0;return Q.some((X)=>Lr(Y,X))},{message:"Value must match one of the enum values"})}},kK4=class{apply($,Z){if(Z.const===void 0)return $;let Q=Z.const;if(typeof Q!=="object"||Q===null)return $;return $.refine((Y)=>Lr(Y,Q),{message:"Value must equal the const value"})}},SK4=class{apply($,Z){if(Z.description)$=$.describe(Z.description);return $}},_K4=class{apply($,Z){var Q;let Y=Z;if(!((Q=Y.required)==null?void 0:Q.includes("__proto__"))||Z.type!==void 0)return $;return CK4.any().refine((X)=>this.validateRequired(X,Y.required),{message:"Missing required properties"})}validateRequired($,Z){if(typeof $!=="object"||$===null||Array.isArray($))return!0;return Z.every((Q)=>Object.prototype.hasOwnProperty.call($,Q))}},vK4=class{apply($,Z){var Q;let Y=Z;if(Y.contains===void 0)return $;let X=i7(Y.contains),J=(Q=Y.minContains)!=null?Q:1,G=Y.maxContains;return $.refine((W)=>{if(!Array.isArray(W))return!0;let K=0;for(let H of W)if(AX0(X,H))K++;if(K<J)return!1;if(G!==void 0&&K>G)return!1;return!0},{message:"Array must contain required items matching the schema"})}},fK4=class{apply($,Z){let{default:Q}=Z;if(Q===void 0)return $;if(!$.safeParse(Q).success)return $;return $.default(Q)}},bK4,xK4;var LQ$=O(()=>{bK4=[new sW4,new aW4,new rW4,new $K4,new ZK4,new FK4,new LK4,new QK4,new YK4,new XK4,new JK4,new GK4,new WK4,new KK4,new HK4,new DK4,new UK4,new NK4,new BK4,new wK4,new jK4,new OK4],xK4=[new _K4,new VK4,new kK4,new TK4,new RK4,new qK4,new MK4,new IK4,new vK4,new zK4,new PK4,new fK4,new SK4]});class ho0{constructor($){this._url=$}start(){if(this._socket)throw Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise(($,Z)=>{this._socket=new WebSocket(this._url,yK4),this._socket.onerror=(Q)=>{let Y="error"in Q?Q.error:Error(`WebSocket error: ${JSON.stringify(Q)}`);Z(Y),this.onerror?.(Y)},this._socket.onopen=()=>{$()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=(Q)=>{let Y;try{Y=EJ.parse(JSON.parse(Q.data))}catch(X){this.onerror?.(X);return}this.onmessage?.(Y)}})}async close(){this._socket?.close()}send($){return new Promise((Z,Q)=>{if(!this._socket){Q(Error("Not connected"));return}this._socket?.send(JSON.stringify($)),Z()})}}var yK4="mcp";var wQ$=O(()=>{w9()});function gK4($){let Z=$;if(!Z||typeof Z!=="object"||!("method"in Z))return null;switch(Z.method){case"initialize":{let Q=Z?.params?.protocolVersion;if(!Q)return null;return{type:"emit",message:{result:{protocolVersion:Q,capabilities:{tools:{}},serverInfo:{name:"deco-chat-server",version:"1.0.0"}},jsonrpc:Z.jsonrpc??"2.0",id:Z.id}}}case"notifications/roots/list_changed":case"notifications/initialized":case"notifications/cancelled":case"notifications/progress":return{type:"suppress"};default:return null}}var RX0;var uo0=O(()=>{Mg();RX0=class RX0 extends DH{constructor($,Z){super($,Z)}send($,Z){let Q=gK4($);if(Q?.type==="emit")return this.onmessage?.(Q.message),Promise.resolve();if(Q?.type==="suppress")return Promise.resolve();return super.send($,Z)}}});var jQ$,EQ$=async($,Z,Q)=>{let Y=hK4($.connection,Z,Q);if(!Y)throw Error("Unknown MCP connection type");let X=new jQ$({name:$?.name??"MCP Client",version:"1.0.0"});return await X.connect(Y),{client:X}},hK4=($,Z,Q)=>{if($.type==="Websocket")return new ho0(new URL($.url));if($.type!=="SSE"&&$.type!=="HTTP")return null;let X={...$.token?{authorization:`Bearer ${$.token}`}:{},...Q??{},..."headers"in $?$.headers||{}:{}};if($.type==="SSE"){let J={requestInit:{headers:X,signal:Z}};if($.token)J.eventSourceInit={fetch:(G,W)=>{return fetch(G,{...W,headers:{...X,Accept:"text/event-stream"},signal:Z})}};return new lU(new URL($.url),J)}return new RX0(new URL($.url),{requestInit:{headers:X,signal:Z,credentials:"include"}})};var zQ$=O(()=>{NH();Wt();wQ$();w9();CQ();uo0();jQ$=class jQ$ extends JZ{constructor($,Z){super($,{jsonSchemaValidator:k5,...Z})}async listTools($,Z){return await this.request({method:"tools/list",params:$},hi,Z)}}});function lK4($,Z){if(vz.set($,Z),vz.size>uK4){let Q=vz.keys().next().value;if(Q!==void 0)vz.delete(Q)}}function TQ$($){let Z=(Q)=>{if("connection"in $)return EQ$({connection:$.connection},void 0,Q);return $.client};return new Proxy({},{get(Q,Y){if(Y==="toJSON")return null;if(typeof Y!=="string")throw Error("Name must be a string");if(Y==="listTools")return W;async function X(K,H=Y){let F=$?.debugId?.(),U=F?{"x-trace-debug-id":F}:void 0,{client:N}=await Z(U),{structuredContent:B,isError:D,content:L}=await N.callTool({name:String(H),arguments:K});if(D){let j=L?.[0]?.text,E=typeof j==="string"?PQ$(j):null,z=E?.code&&typeof $?.getErrorByStatusCode==="function"?$.getErrorByStatusCode(E.code,E.message,E.traceId):null;if(z)throw z;throw Error(`Tool ${String(H)} returned an error: ${JSON.stringify(B??L)}`)}if(B!==void 0)return B;let w=L?.[0]?.text;return typeof w==="string"?PQ$(w):void 0}async function J(){let{client:K}=await Z(),{tools:H}=await K.listTools();return H}async function G(){if(!("connection"in $))return J();let K=$.connection,H=JSON.stringify(K);try{if(!vz.has(H))lK4(H,J());return await vz.get(H)}catch(F){console.error("Failed to list tools",F),vz.delete(H);return}}async function W(){return(await G()??[]).map((H)=>AQ$(H,X))}return X.asTool=async()=>{let H=(await G()??[]).find((F)=>F.name===Y);if(!H)throw Error(`Tool ${Y} not found`);return AQ$(H,X)},X}})}var PQ$=($)=>{try{return JSON.parse($)}catch{return $}},uK4=500,vz,AQ$=($,Z)=>{return{...$,id:$.name,inputSchema:$.inputSchema?i7($.inputSchema):void 0,outputSchema:$.outputSchema?i7($.outputSchema):void 0,execute:(Q)=>{return Z(Q.context,$.name)}}};var RQ$=O(()=>{LQ$();zQ$();vz=new Map});function hO($){return TQ$($)}var Ju;var lo0=O(()=>{RQ$();Ju=new Proxy({},{get($,Z){if(Z==="toJSON")return null;if(Z==="forConnection")return(Q)=>hO({connection:Q});if(Z==="forClient")return(Q)=>hO({client:Q});return globalThis[Z]}})});function qX0($){return{isImplementedBy:(Z)=>{for(let Q of $){let Y=typeof Q.name==="string"?new RegExp(`^${Q.name}$`):Q.name,X=Z.find((J)=>Y.test(J.name));if(!X&&Q.opt)continue;if(!X)return!1}return!0}}}var kH=($)=>{return{...qX0($),forClient:(Z)=>{return hO({client:Z})},forConnection:(Z)=>{return hO({connection:Z})}}};var fz=O(()=>{lo0()});import{z as Y9}from"zod";var qQ$,MX0,MQ$,IX0,IQ$,cK4;var VQ$=O(()=>{fz();qQ$=Y9.object({specversion:Y9.literal("1.0").describe("CloudEvents specification version"),id:Y9.string().describe("Unique identifier for this event (UUID recommended)"),source:Y9.string().describe("Connection ID of the event publisher"),type:Y9.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:Y9.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:Y9.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:Y9.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:Y9.string().url().optional().describe("URI to the schema for the data attribute"),data:Y9.unknown().optional().describe("Event payload (any JSON value)")}),MX0=Y9.object({events:Y9.array(qQ$).min(1).describe("Batch of CloudEvents to process")}),MQ$=Y9.object({success:Y9.boolean().optional().describe("Whether this event was processed successfully"),error:Y9.string().optional().describe("Error message for this event"),retryAfter:Y9.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),IX0=Y9.object({success:Y9.boolean().optional().describe("Batch success - applies to events not in results"),error:Y9.string().optional().describe("Batch error message - applies to events not in results"),processedCount:Y9.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:Y9.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:Y9.record(Y9.string(),MQ$).optional().describe("Per-event results keyed by event ID")}),IQ$=[{name:"ON_EVENTS",inputSchema:MX0,outputSchema:IX0}],cK4=kH(IQ$)});import{z as X9}from"zod";var kQ$,SQ$,CQ$,_Q$,vQ$,fQ$,VX0,co0;var do0=O(()=>{fz();kQ$=X9.object({type:X9.literal("string"),enum:X9.array(X9.string()).optional(),description:X9.string().optional()}),SQ$=X9.object({type:X9.string(),description:X9.string(),paramsSchema:X9.record(X9.string(),kQ$)}),CQ$=X9.object({}),_Q$=X9.object({triggers:X9.array(SQ$)}),vQ$=X9.object({type:X9.string(),params:X9.record(X9.string(),X9.string()),enabled:X9.boolean(),callbackUrl:X9.url().optional(),callbackToken:X9.string().min(1).optional()}),fQ$=X9.object({success:X9.boolean()}),VX0=[{name:"TRIGGER_LIST",inputSchema:CQ$,outputSchema:_Q$},{name:"TRIGGER_CONFIGURE",inputSchema:vQ$,outputSchema:fQ$}],co0=kH(VX0)});import{z as _$}from"zod";var dK4,mK4,iK4,pK4,nK4,tK4,oK4,rK4,sK4,aK4,eK4,$H4,bz;var wr=O(()=>{dK4=_$.object({prefix:_$.string().optional().describe("Filter objects by prefix (e.g., 'folder/' for folder contents)"),maxKeys:_$.number().optional().default(1000).describe("Maximum number of keys to return (default: 1000)"),continuationToken:_$.string().optional().describe("Token for pagination from previous response"),delimiter:_$.string().optional().describe("Delimiter for grouping keys (typically '/'). When set, commonPrefixes returns folder paths.")}),mK4=_$.object({objects:_$.array(_$.object({key:_$.string().describe("Object key/path"),size:_$.number().describe("Object size in bytes"),lastModified:_$.string().describe("Last modified timestamp"),etag:_$.string().describe("Entity tag for the object")})),nextContinuationToken:_$.string().optional().describe("Token for fetching next page of results"),isTruncated:_$.boolean().describe("Whether there are more results available"),commonPrefixes:_$.array(_$.string()).optional().describe("Folder paths when delimiter is used (e.g., ['photos/2024/', 'photos/2025/'])")}),iK4=_$.object({key:_$.string().describe("Object key/path to get metadata for")}),pK4=_$.object({contentType:_$.string().optional().describe("MIME type of the object"),contentLength:_$.number().describe("Size of the object in bytes"),lastModified:_$.string().describe("Last modified timestamp"),etag:_$.string().describe("Entity tag for the object"),metadata:_$.record(_$.string(),_$.string()).optional().describe("Custom metadata key-value pairs")}),nK4=_$.object({key:_$.string().describe("Object key/path to generate URL for"),expiresIn:_$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)")}),tK4=_$.object({url:_$.string().describe("Presigned URL for downloading the object"),expiresIn:_$.number().describe("Expiration time in seconds that was used")}),oK4=_$.object({key:_$.string().describe("Object key/path for the upload"),expiresIn:_$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)"),contentType:_$.string().optional().describe("MIME type for the object being uploaded")}),rK4=_$.object({url:_$.string().describe("Presigned URL for uploading the object"),expiresIn:_$.number().describe("Expiration time in seconds that was used")}),sK4=_$.object({key:_$.string().describe("Object key/path to delete")}),aK4=_$.object({success:_$.boolean().describe("Whether the deletion was successful"),key:_$.string().describe("The key that was deleted")}),eK4=_$.object({keys:_$.array(_$.string()).max(1000).describe("Array of object keys/paths to delete (max 1000)")}),$H4=_$.object({deleted:_$.array(_$.string()).describe("Array of successfully deleted keys"),errors:_$.array(_$.object({key:_$.string(),message:_$.string()})).describe("Array of errors for failed deletions")}),bz=[{name:"LIST_OBJECTS",inputSchema:dK4,outputSchema:mK4},{name:"GET_OBJECT_METADATA",inputSchema:iK4,outputSchema:pK4},{name:"GET_PRESIGNED_URL",inputSchema:nK4,outputSchema:tK4},{name:"PUT_PRESIGNED_URL",inputSchema:oK4,outputSchema:rK4},{name:"DELETE_OBJECT",inputSchema:sK4,outputSchema:aK4},{name:"DELETE_OBJECTS",inputSchema:eK4,outputSchema:$H4}]});import{z as _6}from"zod";var bQ$,xQ$,yQ$,jr,kX0,SX0,CX0,_X0,ZH4;var mo0=O(()=>{fz();bQ$=_6.object({primary:_6.string().optional().describe("Primary brand color (hex)"),secondary:_6.string().optional().describe("Secondary brand color (hex)"),accent:_6.string().optional().describe("Accent / highlight color (hex)"),background:_6.string().optional().describe("Background color (hex)"),foreground:_6.string().optional().describe("Foreground / text color (hex)")}),xQ$=_6.object({heading:_6.string().optional().describe("Font family for headings"),body:_6.string().optional().describe("Font family for body text"),code:_6.string().optional().describe("Font family for code / monospace")}),yQ$=_6.object({logo:_6.string().optional().describe("Logo URL"),favicon:_6.string().optional().describe("Favicon URL"),ogImage:_6.string().optional().describe("Open Graph image URL")}),jr=_6.object({id:_6.string(),name:_6.string().describe("Brand / company name"),domain:_6.string().optional().describe("Company domain (e.g. example.com)"),colors:bQ$.optional().describe("Semantic color palette"),fonts:xQ$.optional().describe("Font families by role"),assets:yQ$.optional().describe("Visual identity assets"),overview:_6.string().optional().describe("Company overview / description"),tagline:_6.string().optional().describe("Brand tagline"),tone:_6.string().optional().describe("Tone of voice description"),metadata:_6.record(_6.string(),_6.unknown()).optional().describe("Extra design tokens and metadata")}),kX0=_6.object({id:_6.string().optional().describe("Brand ID. Omit to get the default brand.")}),SX0=_6.object({}),CX0=_6.object({items:_6.array(jr)}),_X0=[{name:"BRAND_GET",inputSchema:kX0,outputSchema:jr},{name:"BRAND_LIST",inputSchema:SX0,outputSchema:CX0,opt:!0}],ZH4=kH(_X0)});var io0=O(()=>{fz();VQ$();do0();wr();mo0()});import{z as M8}from"zod";function fX0($){let Q=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${Q}$`,"i")}function rU($){return M8.object({items:M8.array($).describe("Array of collection items"),totalCount:M8.number().int().min(0).optional().describe("Total number of matching items (if available)"),hasMore:M8.boolean().optional().describe("Whether there are more items available")})}function zr($){return M8.object({item:$.nullable().describe("The retrieved item, or null if not found")})}function XH4($){return M8.object({data:$.partial().describe("Data for the new entity (id may be auto-generated)")})}function JH4($){return M8.object({item:$.describe("The created entity with generated id")})}function GH4($){return M8.object({id:M8.string().describe("ID of the entity to update"),data:$.partial().describe("Partial entity data to update")})}function WH4($){return M8.object({item:$.describe("The updated entity")})}function Ar($){return M8.object({item:$.describe("The deleted entity")})}function bX0($,Z,Q){let Y=$.toUpperCase(),X=Q?.readOnly??!1,J=[{name:`COLLECTION_${Y}_LIST`,inputSchema:hW,outputSchema:rU(Z)},{name:`COLLECTION_${Y}_GET`,inputSchema:Er,outputSchema:zr(Z)}];if(!X)J.push({name:`COLLECTION_${Y}_CREATE`,inputSchema:XH4(Z),outputSchema:JH4(Z),opt:!0},{name:`COLLECTION_${Y}_UPDATE`,inputSchema:GH4(Z),outputSchema:WH4(Z),opt:!0},{name:`COLLECTION_${Y}_DELETE`,inputSchema:Pr,outputSchema:Ar(Z),opt:!0});return J}var vX0,QH4,gQ$,YH4,hW,Er,Pr;var hJ=O(()=>{vX0=M8.object({id:M8.string().describe("Unique identifier for the entity"),title:M8.string().describe("Human-readable title for the entity"),description:M8.string().nullish().describe("Description of the entity"),created_at:M8.string().datetime(),updated_at:M8.string().datetime(),created_by:M8.string().optional(),updated_by:M8.string().optional()}),QH4=M8.object({field:M8.array(M8.string()),operator:M8.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:M8.unknown()}),gQ$=M8.lazy(()=>M8.union([QH4,M8.object({operator:M8.enum(["and","or","not"]),conditions:M8.array(gQ$)})]));YH4=M8.object({field:M8.array(M8.string()),direction:M8.enum(["asc","desc"]),nulls:M8.enum(["first","last"]).optional()}),hW=M8.object({where:gQ$.optional().describe("Filter expression"),orderBy:M8.array(YH4).optional().describe("Sort expressions"),limit:M8.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:M8.number().int().min(0).optional().describe("Number of items to skip")});Er=M8.object({id:M8.string().describe("ID of the entity to retrieve")});Pr=M8.object({id:M8.string().describe("ID of the entity to delete")})});import{z as Gu}from"zod";var KH4,HH4,hQ$;var uQ$=O(()=>{hJ();KH4=vX0.extend({avatar:Gu.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:Gu.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:Gu.string().describe("Virtual MCP ID to use for this assistant"),model:Gu.object({id:Gu.string().describe("Model ID"),connectionId:Gu.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),HH4=bX0("assistant",KH4),hQ$=[...HH4]});import{z as F0}from"zod";var Tr,sU,cQ$,FH4,UH4,dQ$,NH4,BH4,DH4,OH4,LH4,wH4,mQ$,jH4,EH4,zH4,PH4,AH4,TH4,RH4,qH4,MH4,IH4,KS5,VH4,HS5,lQ$,kH4,SH4,xX0,FS5;var iQ$=O(()=>{fz();hJ();Tr=F0.lazy(()=>F0.union([F0.null(),F0.string(),F0.number(),F0.boolean(),F0.record(F0.string(),Tr),F0.array(Tr)])),sU=F0.record(F0.string(),F0.record(F0.string(),Tr)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),cQ$=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerOptions:sU}),FH4=F0.object({type:F0.literal("text"),text:F0.string().describe("The text content"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),UH4=F0.string().describe("File data as URL string"),dQ$=F0.object({type:F0.literal("file"),filename:F0.string().optional().describe("Optional filename of the file"),data:UH4,mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:sU}),NH4=F0.object({type:F0.literal("file"),mediaType:F0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:F0.string().describe("Generated file data as base64 encoded string")}),BH4=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerOptions:sU}),DH4=F0.object({type:F0.literal("reasoning"),text:F0.string().describe("The reasoning text"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),OH4=F0.object({type:F0.literal("tool-call"),toolCallId:F0.string().describe("ID of the tool call, used to match with tool result"),toolName:F0.string().describe("Name of the tool being called"),input:F0.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:F0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:sU}),LH4=F0.object({type:F0.literal("tool-call"),toolCallId:F0.string().describe("ID of the tool call"),toolName:F0.string().describe("Name of the tool being called"),input:F0.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:F0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),wH4=F0.union([F0.object({type:F0.literal("text"),value:F0.string()}),F0.object({type:F0.literal("json"),value:Tr}),F0.object({type:F0.literal("error-text"),value:F0.string()}),F0.object({type:F0.literal("error-json"),value:Tr}),F0.object({type:F0.literal("content"),value:F0.array(F0.union([F0.object({type:F0.literal("text"),text:F0.string().describe("Text content")}),F0.object({type:F0.literal("media"),data:F0.string().describe("Base-64 encoded media data"),mediaType:F0.string().describe("IANA media type")})]))}),F0.object({type:F0.literal("execution-denied"),reason:F0.string().optional()}),F0.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),mQ$=F0.object({type:F0.literal("tool-result"),toolCallId:F0.string().describe("ID of the tool call that this result is associated with"),toolName:F0.string().describe("Name of the tool that generated this result"),output:wH4.describe("Result of the tool call"),result:F0.unknown().describe("Unknown result of the tool call"),providerOptions:sU}),jH4=F0.object({type:F0.literal("tool-result"),toolCallId:F0.string().describe("ID of the tool call that this result is associated with"),toolName:F0.string().describe("Name of the tool that generated this result"),result:F0.any().describe("Result of the tool call (JSON-serializable)"),isError:F0.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:F0.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),EH4=F0.union([F0.object({type:F0.literal("source"),sourceType:F0.literal("url"),id:F0.string().describe("The ID of the source"),url:F0.string().describe("The URL of the source"),title:F0.string().optional().describe("The title of the source"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")}),F0.object({type:F0.literal("source"),sourceType:F0.literal("document"),id:F0.string().describe("The ID of the source"),mediaType:F0.string().describe("IANA media type of the document (e.g., application/pdf)"),title:F0.string().describe("The title of the document"),filename:F0.string().optional().describe("Optional filename of the document"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata")})]),zH4=F0.object({role:F0.literal("system"),content:F0.string().describe("System message content"),providerOptions:sU}),PH4=F0.object({role:F0.literal("user"),content:F0.array(F0.union([cQ$,dQ$])).describe("User message content parts (text or file)"),providerOptions:sU}),AH4=F0.object({role:F0.literal("assistant"),content:F0.array(F0.union([cQ$,dQ$,BH4,OH4,mQ$])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:sU}),TH4=F0.object({role:F0.literal("tool"),content:F0.array(mQ$).describe("Tool message content (tool results)"),providerOptions:sU}),RH4=F0.union([zH4,PH4,AH4,TH4]),qH4=F0.array(RH4).describe("A list of messages forming the prompt"),MH4=F0.object({prompt:qH4.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:F0.number().optional().describe("Maximum number of tokens to generate"),temperature:F0.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:F0.number().optional().describe("Nucleus sampling parameter"),topK:F0.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:F0.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:F0.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:F0.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:F0.array(F0.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:F0.union([F0.object({type:F0.literal("text")}),F0.object({type:F0.literal("json"),schema:F0.any().optional().describe("JSON schema that the generated output should conform to"),name:F0.string().optional().describe("Name of output that should be generated"),description:F0.string().optional().describe("Description of the output that should be generated")})]).optional().describe("Response format. The output can either be text or JSON. Default is text"),tools:F0.array(F0.any()).optional().describe("The tools that are available for the model"),toolChoice:F0.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:F0.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:F0.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:F0.any().optional().describe("Additional provider-specific options")}),IH4=F0.object({content:F0.array(F0.union([FH4,NH4,DH4,LH4,jH4,EH4])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:F0.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:F0.looseObject({inputTokens:F0.number().optional(),outputTokens:F0.number().optional(),totalTokens:F0.number().optional(),reasoningTokens:F0.number().optional()}).describe("Usage information for the language model call"),providerMetadata:F0.any().optional().describe("Additional provider-specific metadata"),request:F0.object({body:F0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:F0.object({id:F0.string().optional().describe("ID for the generated response"),timestamp:F0.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:F0.string().optional().describe("The ID of the response model that was used"),headers:F0.record(F0.string(),F0.string()).optional().describe("Response headers"),body:F0.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:F0.array(F0.any()).describe("Warnings for the call, e.g. unsupported settings")}),KS5=F0.object({stream:F0.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:F0.object({body:F0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:F0.object({headers:F0.record(F0.string(),F0.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),VH4=F0.object({supportedUrls:F0.record(F0.string(),F0.array(F0.string())).describe("Supported URL patterns by media type for the provider")}),HS5=F0.object({modelId:F0.string().describe("The ID of the model"),logo:F0.string().nullable(),description:F0.string().nullable(),capabilities:F0.array(F0.string()),limits:F0.object({contextWindow:F0.number(),maxOutputTokens:F0.number()}).nullable(),costs:F0.object({input:F0.number(),output:F0.number()}).nullable(),provider:F0.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),lQ$=F0.object({modelId:F0.string().describe("The ID of the model"),callOptions:MH4}),kH4=vX0.extend({logo:F0.string().nullable(),description:F0.string().nullable(),capabilities:F0.array(F0.string()),limits:F0.object({contextWindow:F0.number(),maxOutputTokens:F0.number()}).nullable(),costs:F0.object({input:F0.number(),output:F0.number()}).nullable(),provider:F0.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),SH4=bX0("llm",kH4,{readOnly:!0}),xX0=[{name:"LLM_METADATA",inputSchema:F0.object({modelId:F0.string().describe("The ID of the model")}),outputSchema:VH4},{name:"LLM_DO_STREAM",inputSchema:lQ$},{name:"LLM_DO_GENERATE",inputSchema:lQ$,outputSchema:IH4},...SH4],FS5=kH(xX0)});import{z as xz}from"zod";var CH4,pQ$;var nQ$=O(()=>{CH4=xz.object({scopes:xz.array(xz.string()).describe("List of scopes available"),stateSchema:xz.record(xz.string(),xz.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),pQ$=[{name:"MCP_CONFIGURATION",inputSchema:xz.object({}),outputSchema:CH4}]});import{z as J9}from"zod";var _H4,vH4,tQ$;var oQ$=O(()=>{_H4=J9.object({}).strict(),vH4=J9.object({billing:J9.object({mode:J9.enum(["prepaid","postpaid"]),limitPeriod:J9.enum(["daily","weekly","monthly"]).nullable()}),limit:J9.object({total:J9.number().nullable(),remaining:J9.number().nullable(),reset:J9.string().nullable()}),usage:J9.object({total:J9.number(),daily:J9.number(),weekly:J9.number(),monthly:J9.number()}),alert:J9.object({enabled:J9.boolean(),threshold_usd:J9.number(),email:J9.string().nullable()}),connectionId:J9.string()}),tQ$=[{name:"GATEWAY_USAGE",inputSchema:_H4,outputSchema:vH4},{name:"GATEWAY_SET_LIMIT",inputSchema:J9.object({}),outputSchema:J9.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:J9.object({}),outputSchema:J9.object({}),opt:!0}]});import{z as rQ$}from"zod";function qX(){return BY()===null}function Wu($,Z){return $===A8.DEV_ASSETS(Z)}function Ku($,Z){let Q=la1(Z,$),Y=new Date().toISOString();return{id:Q.id??A8.DEV_ASSETS($),title:Q.title,description:Q.description??null,icon:Q.icon??null,app_name:Q.app_name??null,app_id:Q.app_id??null,organization_id:$,created_by:"system",created_at:Y,updated_at:Y,connection_type:Q.connection_type,connection_url:Q.connection_url??null,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:Q.metadata??null,tools:fH4,bindings:["OBJECT_STORAGE"],status:"active"}}var fH4;var yz=O(()=>{ZD();wr();T8();fH4=bz.map(($)=>({name:$.name,description:`${$.name} operation for local file storage`,inputSchema:rQ$.toJSONSchema($.inputSchema),outputSchema:rQ$.toJSONSchema($.outputSchema)}))});function sQ$($,Z){return $||Z===0}function aQ$($,Z,Q,Y,X){let J=Z?X+1:X,G=$.slice(0,Q),W=Y+Q<J;return{items:G,totalCount:J,hasMore:W}}function eQ$($,Z,Q){if(!Q)return{sqlOffset:$,sqlLimit:Z};if($===0)return{sqlOffset:0,sqlLimit:Math.max(Z-1,0)};return{sqlOffset:$-1,sqlLimit:Z}}function bH4($,Z){if(Z.length===0)return;let[Q,...Y]=Z,X=Q==="slug"?rD($):$[Q];for(let J of Y){if(X===null||typeof X!=="object")return;X=X[J]}return X}function xH4($,Z,Q){if($===void 0)return!0;switch(Z){case"eq":return Q===null?$===null:$===Q;case"gt":return $>Q;case"gte":return $>=Q;case"lt":return $<Q;case"lte":return $<=Q;case"in":return Array.isArray(Q)&&Q.includes($);case"like":return typeof $==="string"&&fX0(String(Q)).test($);case"contains":return String($).toLowerCase().includes(String(Q).toLowerCase());default:return!0}}function Rr($,Z){if(!Z)return!0;if("conditions"in Z){let{operator:Y,conditions:X}=Z;if(X.length===0)return!0;switch(Y){case"and":return X.every((J)=>Rr($,J));case"or":return X.some((J)=>Rr($,J));case"not":return!X.every((J)=>Rr($,J));default:return!0}}let Q=bH4($,Z.field);return xH4(Q,Z.operator,Z.value)}var $Y$=O(()=>{$Q0();hJ()});import{z as uO}from"zod";var yH4=8,gH4,hH4,uH4,lH4,gz;var po0=O(()=>{io0();uQ$();hJ();iQ$();nQ$();wr();oQ$();T8();R0();R5();RX();Cz();yz();mK();$Q0();$Y$();gH4=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:uO.object({})}],hH4={LLM:xX0,LLMS:xX0,ASSISTANTS:hQ$,MCP:pQ$,OBJECT_STORAGE:bz,AI_GATEWAY_BILLING:tQ$,TRIGGER:VX0,REGISTRY:gH4,BRAND:_X0},uH4=hW.extend({binding:uO.union([uO.array(uO.object({}).passthrough()),uO.object({}).passthrough(),uO.string()]).optional(),include_virtual:uO.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:uO.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),lH4=rU(wQ),gz=g({name:"COLLECTION_CONNECTIONS_LIST",description:"List all connections in the organization with filtering, sorting, and pagination",annotations:{title:"List Connections",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:uH4,outputSchema:lH4,handler:async($,Z)=>{await Z.access.check();let Q=i(Z),Y=$.binding?typeof $.binding==="string"?(()=>{let j=hH4[$.binding.toUpperCase()];if(!j)throw Error(`Unknown binding: ${$.binding}`);return j})():$.binding:void 0,X=Y?qX0(Y):void 0,J=!!X,G=$.limit??100,W=$.offset??0,K=h5(),H=A8.DEV_ASSETS(Q.id),F=Ku(Q.id,K),U=(!$.slug||rD(F)===$.slug)&&Rr(F,$.where),N=qX()&&!J&&U,{sqlOffset:B,sqlLimit:D}=eQ$(W,G,N),{items:L,totalCount:w}=await Z.storage.connections.list(Q.id,{includeVirtual:$.include_virtual??!1,slug:$.slug,where:$.where,orderBy:$.orderBy,limit:J?void 0:D,offset:J?void 0:B});if(X){let j=R9(),E=A8.SELF(Q.id);await $u(L,yH4,async(z)=>{if(z.tools!==null)return;let P=z.id===E?async()=>{let{listManagementTools:q}=await Promise.resolve().then(() => (lO(),yX0));return q(Z)}:()=>Mo0(z,Z,ZQ0),A=await bO("tools",z.id,P,j,(q)=>Z.pendingRevalidations.push(q),fO);if(A!==null)z.tools=A})}if(qX()&&sQ$(J,W)&&U&&!L.some((j)=>j.id===H))L.unshift(F);if(J){let j=(await Promise.all(L.map(async(A)=>{if(!A.tools||A.tools.length===0)return null;return X.isImplementedBy(A.tools.map((k)=>({name:k.name,inputSchema:k.inputSchema,outputSchema:k.outputSchema})))?A:null}))).filter((A)=>A!==null),E=j.length,z=j.slice(W,W+G),P=W+G<E;return{items:z,totalCount:E,hasMore:P}}return aQ$(L,N,G,W,w)}})});var cH4,hz;var no0=O(()=>{hJ();T8();R0();R5();RX();Cz();yz();mK();cH4=zr(wQ),hz=g({name:"COLLECTION_CONNECTIONS_GET",description:"Get a connection's configuration, tools list, and status by ID.",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:["app"]}},inputSchema:Er,outputSchema:cH4,handler:async($,Z)=>{let Q=i(Z);if(await Z.access.check(),qX()&&Wu($.id,Q.id))return{item:Ku(Q.id,h5())};let Y=await Z.storage.connections.findById($.id);if(!Y||Y.organization_id!==Q.id)return{item:null};if(Y.tools===null){let X=A8.SELF(Q.id),J=Y.id===X?async()=>{let{listManagementTools:W}=await Promise.resolve().then(() => (lO(),yX0));return W(Z)}:async()=>{let W=await m7(Y,Z,!0);try{return(await W.listTools()).tools}finally{await W.close().catch(()=>{})}},G=await bO("tools",Y.id,J,R9(),(W)=>Z.pendingRevalidations.push(W),fO);if(G!==null)Y.tools=G}return{item:Y}}})});class S5{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("downstream_tokens").selectAll().where("connectionId","=",$).executeTakeFirst();if(!Z)return null;return dH4(this.vault,Z)}async upsert($){let Z=new Date().toISOString(),Q=await this.vault.encrypt($.accessToken),Y=$.refreshToken?await this.vault.encrypt($.refreshToken):null,X=$.clientSecret?await this.vault.encrypt($.clientSecret):null,J=$.expiresAt?.toISOString()??null,G=await this.db.insertInto("downstream_tokens").values({id:C8("dtok"),connectionId:$.connectionId,accessToken:Q,refreshToken:Y,scope:$.scope,expiresAt:J,clientId:$.clientId,clientSecret:X,tokenEndpoint:$.tokenEndpoint,createdAt:Z,updatedAt:Z}).onConflict((W)=>W.column("connectionId").doUpdateSet({accessToken:Q,refreshToken:Y,scope:$.scope,expiresAt:J,clientId:$.clientId,clientSecret:X,tokenEndpoint:$.tokenEndpoint,updatedAt:Z})).returning(["id","createdAt"]).executeTakeFirstOrThrow();return{id:G.id,connectionId:$.connectionId,accessToken:$.accessToken,refreshToken:$.refreshToken,scope:$.scope,expiresAt:$.expiresAt,createdAt:G.createdAt,updatedAt:Z,clientId:$.clientId,clientSecret:$.clientSecret,tokenEndpoint:$.tokenEndpoint}}async delete($){await this.db.deleteFrom("downstream_tokens").where("connectionId","=",$).execute()}isExpired($,Z=0){if(!$.expiresAt)return!1;let Y=($.expiresAt instanceof Date?$.expiresAt:new Date($.expiresAt)).getTime();if(Number.isNaN(Y))return!0;return Y-Z<Date.now()}}async function dH4($,Z){try{let Q=await $.decrypt(Z.accessToken),Y=Z.refreshToken?await $.decrypt(Z.refreshToken):null,X=Z.clientSecret?await $.decrypt(Z.clientSecret):null;return{id:Z.id,connectionId:Z.connectionId,accessToken:Q,refreshToken:Y,scope:Z.scope,expiresAt:Z.expiresAt,createdAt:Z.createdAt,updatedAt:Z.updatedAt,clientId:Z.clientId,clientSecret:X,tokenEndpoint:Z.tokenEndpoint}}catch(Q){return console.warn("[DownstreamToken] failed to decrypt token row",{connectionId:Z.connectionId,message:Q instanceof Error?Q.message:String(Q)}),null}}var uW=O(()=>{_Q()});function Hu(...$){if(nH4)console.log("[mcp-read-cache]",...$)}function tH4($){return $.kind==="org"?"org":`u:${$.userId}`}function to0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(to0).join(",")}]`;return`{${Object.keys($).sort().map((Q)=>`${JSON.stringify(Q)}:${to0($[Q])}`).join(",")}}`}class uX0{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=mH4,Z=iH4,Q=()=>Date.now(),Y=pH4){this.config=$;this.maxEntries=Z;this.now=Q;this.maxTotalBytes=Y}stats(){return{entries:this.store.size,bytes:this.totalBytes}}deleteKey($){let Z=this.store.get($);if(Z)this.store.delete($),this.totalBytes-=Z.bytes}key($,Z,Q,Y){return`${Z}:${tH4(Q)}:${$}:${to0(Y)}`}storeSet($,Z,Q,Y){let X;try{X=JSON.stringify(Z).length}catch{Hu("SKIP non-serializable",$);return}if(X>Y){Hu("SKIP oversize",$,`${X}b > cap ${Y}b`);return}this.deleteKey($);while(this.store.size>0&&(this.store.size>=this.maxEntries||this.totalBytes+X>this.maxTotalBytes)){let J=this.store.keys().next().value;if(J===void 0)break;this.deleteKey(J)}this.store.set($,{value:Z,storedAt:Q,bytes:X}),this.totalBytes+=X}async fetch($){let{type:Z,connectionId:Q,scope:Y,params:X,fetchLive:J,shouldCache:G,onRevalidation:W}=$,K=this.config[Z],H=this.key(Z,Q,Y,X),F=this.now(),U=this.store.get(H),N=U?F-U.storedAt:1/0;if(!U||N>K.maxStaleMs){gX0.add(1,{type:Z,outcome:"miss"}),Hu(U?"EXPIRED":"MISS",H);let B=await J();if(G?.(B)??!0)this.storeSet(H,B,this.now(),K.maxValueBytes);else Hu("NOT-CACHED (shouldCache=false)",H);return B}if(this.store.delete(H),this.store.set(H,U),N>K.revalidateAfterMs&&!this.revalidating.has(H)){gX0.add(1,{type:Z,outcome:"stale"}),Hu("STALE \u2192 serve + revalidate",H,`age=${N}ms`),this.revalidating.add(H);let B=J().then((D)=>{if(G?.(D)??!0)this.storeSet(H,D,this.now(),K.maxValueBytes)}).catch(()=>{gX0.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(H));W?.(B)}else gX0.add(1,{type:Z,outcome:"hit"}),Hu("HIT",H,`age=${N}ms`);return U.value}invalidate($){let Z=`${$}:`;for(let Q of[...this.store.keys()])if(Q.startsWith(Z))this.deleteKey(Q)}}function ro0(){return O0().mcpCacheEnabled}function lX0(){return ro0()?oo0:null}var gX0,hX0=1024,ZY$,mH4,iH4=2000,pH4,nH4,oo0;var qr=O(()=>{J6();Z$();gX0=Q$.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),ZY$=hX0*hX0,mH4={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*hX0},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*ZY$},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*hX0}},pH4=256*ZY$,nH4=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;oo0=new uX0;Q$.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(oo0.stats().entries));Q$.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(oo0.stats().bytes))});function JY$(){if(QY$)return;QY$=!0;try{YY$=Q$.createCounter("virtual_mcp.aggregate_cache.lookups",{description:"Virtual MCP aggregate tool-list cache lookups by outcome (hit, miss, expired)",unit:"{lookups}"}),XY$=Q$.createCounter("virtual_mcp.aggregate_cache.evictions",{description:"Virtual MCP aggregate tool-list cache entries dropped, by reason (capacity, invalidated, failed)",unit:"{entries}"}),Q$.createObservableGauge("virtual_mcp.aggregate_cache.entries",{description:"Live entries in this pod's Virtual MCP aggregate tool-list cache",unit:"{entries}"}).addCallback(($)=>$.observe(WG.size))}catch($){console.error("[aggregate-cache] failed to register metrics:",$)}}function so0($){JY$(),YY$?.add(1,{outcome:$})}function ao0($,Z=1){if(Z<=0)return;JY$(),XY$?.add(Z,{reason:$})}function GY$($){return[$.virtualMcpId??"",$.userId??"",$.superUser?"su":"",[...$.connectionIds].sort().join(",")].join("|")}function WY$($){let Z=WG.get($);if(!Z)return so0("miss"),null;if(Date.now()-Z.at>=oH4)return WG.delete($),so0("expired"),null;return so0("hit"),Z.value}function KY$($,Z,Q){let Y=Q.catch((J)=>{if(WG.get($)?.value===Y)WG.delete($),ao0("failed");throw J});WG.delete($),WG.set($,{at:Date.now(),deps:Z,value:Y});let X=0;while(WG.size>rH4){let J=WG.keys().next();if(J.done)break;WG.delete(J.value),X++}return ao0("capacity",X),Y}function HY$($){let Z=0;for(let[Q,Y]of WG)if(Y.deps.includes($))WG.delete(Q),Z++;ao0("invalidated",Z)}var oH4=30000,rH4=500,WG,YY$=null,XY$=null,QY$=!1;var eo0=O(()=>{J6();WG=new Map});function NY$($){lX0()?.invalidate($),XQ$($),HY$($)}function Fu($){NY$($);let Z=$r0?.();if(!Z)return;try{Z.publish(FY$,sH4.encode(JSON.stringify({connectionId:$,originId:UY$})))}catch(Q){console.warn("[McpCacheInvalidation] publish failed (non-critical):",Q)}}function BY$($){if($r0=$,Mr)return;let Z=$();if(!Z)return;Mr=Z.subscribe(FY$),(async()=>{for await(let Q of Mr)try{let Y=JSON.parse(aH4.decode(Q.data));if(Y.originId===UY$)continue;NY$(Y.connectionId)}catch{}})().catch(console.error)}function DY$(){Mr?.unsubscribe(),Mr=null,$r0=void 0}var FY$="studio.mcp-cache.invalidate",UY$,sH4,aH4,$r0,Mr=null;var Ir=O(()=>{qr();RX();eo0();UY$=crypto.randomUUID(),sH4=new TextEncoder,aH4=new TextDecoder});import{z as Zr0}from"zod";function $F4($){let Z={...$};for(let Q of eH4)delete Z[Q];return Z}function ZF4($,Z){return $.connection_url!==void 0?$.connection_url:Z}function XF4($,Z){return $.length===Z.length&&$.every((Q,Y)=>Q===Z[Y])}var eH4,QF4,YF4,Qr0;var OY$=O(()=>{_o0();uW();R0();Z$();RX();Ir();yo0();$X0();mK();eH4=["id","organization_id","created_by","created_at"];QF4=Zr0.object({id:Zr0.string().describe("ID of the connection to update"),data:l50.describe("Partial connection data to update")}),YF4=Zr0.object({item:wQ.describe("The updated connection entity")});Qr0=g({name:"COLLECTION_CONNECTIONS_UPDATE",description:"Update a connection's configuration. Re-fetches tools from the server on URL change.",annotations:{title:"Update Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:QF4,outputSchema:YF4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to update connection");let{id:X}=$,J=$F4($.data),G=J.configuration_state!==void 0||J.configuration_scopes!==void 0,W=await Z.storage.connections.findById(X);if(!W||W.organization_id!==Q.id)throw Error("Connection not found in organization");let K=J.connection_type??W.connection_type,H=ZF4(J,W.connection_url);if(K==="VIRTUAL"){let f=Ly(H);if(!f)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let b=await Z.storage.virtualMcps.findById(f);if(!b)throw Error(`Virtual MCP not found: ${f}`);if(b.organization_id!==Q.id)throw Error("Virtual MCP does not belong to the current organization");H=wy(f)}let F=J.configuration_state??W.configuration_state??{},U=J.configuration_scopes??W.configuration_scopes??[];if(G){if(J.configuration_state!==void 0)F=J.configuration_state??{};else if(F===null||F===void 0)F={};if(J.configuration_scopes!==void 0)U=J.configuration_scopes??[];if(U.length>0){let f=F;Br(f,U,Q.id),await Or(f,U,Q.id,Z)}}if(K==="STDIO"&&!O0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let N=J.connection_token??W.connection_token;if(!N)try{let b=await new S5(Z.db,Z.vault).get(X);if(b?.accessToken)N=b.accessToken}catch{}let B=await eh({id:W.id,title:J.title??W.title,connection_type:K,connection_url:H,connection_token:N,connection_headers:J.connection_headers??W.connection_headers}).catch(()=>null),D=B?.tools?.length?B.tools:null,L=!1;if(J.configuration_scopes===void 0&&B?.scopes?.length)L=!XF4(U,B.scopes),U=B.scopes;if(Br(F,U,Q.id),L&&U.length>0)await Or(F,U,Q.id,Z);let w=G||L,j=w?Dr(F,U):[],E=w?Dr(W.configuration_state??{},W.configuration_scopes??[]):[],z=W.configuration_state,P=z==null||Object.keys(z).length===0,A,q,k=async()=>{try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:Q.id,subjectConnectionId:X,createdBy:Y,grants:E})}catch(f){console.error("Failed to restore credential grants after credential vault mutation failed",f)}},M={...J,connection_url:H,tools:null,configuration_state:F,configuration_scopes:U,updated_by:Y},S={...W,...M};if(w)try{if(await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:Q.id,subjectConnectionId:X,createdBy:Y,grants:j}),j.length>0){if(!await Z.storage.connectionCredentialVault.findActiveWorkloadToken({organizationId:Q.id,subjectConnectionId:X})){let{plaintextToken:b,record:o}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:Q.id,subjectConnectionId:X});q=o.id,A={baseUrl:Z.baseUrl,org:Q.slug??Q.id,subjectConnectionId:X,token:b}}}}catch(f){if(q)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:Q.id,subjectConnectionId:X,tokenId:q});throw await k(),f}if(w&&F&&U)try{await jX0(Z,S,{state:F,scopes:U,firstRun:P,...A?{vault:A}:{}})}catch(f){if(console.error("Failed to invoke ON_MCP_CONFIGURATION callback",f),q)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:Q.id,subjectConnectionId:X,tokenId:q});if(j.length>0)throw await k(),f}let d;try{d=await Z.storage.connections.update(X,M)}catch(f){if(w){if(q)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:Q.id,subjectConnectionId:X,tokenId:q});await k()}throw f}if(D)R9()?.set("tools",X,D).catch(()=>{});return Fu(X),{item:d}}})});import{z as JF4}from"zod";var GF4,Yr0;var LY$=O(()=>{hJ();_4();R0();RX();Ir();KG();yz();mK();GF4=Pr.extend({force:JF4.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Yr0=g({name:"COLLECTION_CONNECTIONS_DELETE",description:"Permanently delete a connection. Set force=true to auto-remove from referencing Virtual MCPs.",annotations:{title:"Delete Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:GF4,outputSchema:Ar(wQ),handler:async($,Z)=>{p(Z);let Q=i(Z);if(await Z.access.check(),qX()&&Wu($.id,Q.id))throw Error("This connection is a fixed system connection and cannot be deleted");let Y=await Z.storage.connections.findById($.id);if(!Y)throw Error(`Connection not found: ${$.id}`);if(Y.organization_id!==Q.id)throw Error("Connection not found in organization");if(Y.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let J=await Z.storage.virtualMcps.listByConnectionId(Q.id,$.id);if(J.length>0)if($.force)await Z.storage.virtualMcps.removeConnectionReferences($.id);else throw Error(JSON.stringify({code:"CONNECTION_IN_USE",agentNames:J.map((H)=>H.title)}));let G=await Z.storage.automations.listActiveByEventTriggerConnectionId($.id);if(G.length>0)if($.force)await Promise.all(G.map((H)=>Z.storage.automations.deactivateAutomation(H.id)));else throw Error(JSON.stringify({code:"CONNECTION_IN_USE_BY_AUTOMATION",automationNames:G.map((H)=>H.name)}));await Z.storage.connections.delete($.id),wY$($.id),await Z.storage.triggerCallbackTokens.deleteByConnection($.id,Q.id);let W=await Z.storage.organizationSettings.get(Q.id);if(W?.registry_config){let{registries:H,blockedMcps:F}=W.registry_config;if($.id in H){let{[$.id]:U,...N}=H;await Z.storage.organizationSettings.upsert(Q.id,{registry_config:{registries:N,blockedMcps:F}})}}R9()?.invalidate($.id).catch(()=>{}),Fu($.id);let K=c0(Z);if(K)M1.capture({distinctId:K,event:"connection_deleted",groups:{organization:Q.id},properties:{connection_id:Y.id,connection_type:Y.connection_type,app_name:Y.app_name??null,organization_id:Q.id,forced:$.force??!1}});return{item:Y}}})});import{z as Uu}from"zod";var Xr0;var jY$=O(()=>{R0();Xr0=g({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Uu.object({id:Uu.string()}),outputSchema:Uu.object({id:Uu.string(),healthy:Uu.boolean(),latencyMs:Uu.number()}),handler:async($,Z)=>{let Q=i(Z);await Z.access.check();let Y=await Z.storage.connections.findById($.id);if(!Y||Y.organization_id!==Q.id)throw Error("Connection not found");let X=await Z.storage.connections.testConnection($.id);return{id:$.id,...X}}})});var EY$=O(()=>{NQ$();po0();no0();OY$();LY$();jY$()});import{sql as m4}from"kysely";import{z as SH}from"zod";function zY$($){if($===null||$===void 0)return"NULL";if(typeof $==="number")return String($);if(typeof $==="boolean")return $?"TRUE":"FALSE";if(typeof $==="string")return`'${$.replace(/'/g,"''")}'`;if($ instanceof Date)return`'${$.toISOString()}'`;return`'${JSON.stringify($).replace(/'/g,"''")}'`}function HF4($,Z){let Q="",Y=0,X=!1,J=!1,G=!1,W=null;for(let K=0;K<$.length;K++){let H=$[K];if(!X&&!J&&W===null){if($.startsWith("--",K)){let F=$.indexOf(`
993
993
  `,K),U=F===-1?$.slice(K):$.slice(K,F);Q+=U,K+=U.length-1;continue}if($.startsWith("/*",K)){let F=1,U=K+2;while(F>0&&U<$.length)if($.startsWith("/*",U))F++,U+=2;else if($.startsWith("*/",U))F--,U+=2;else U++;let N=$.slice(K,U);Q+=N,K+=N.length-1;continue}}if(W!==null){let F=`$${W}$`;if($.startsWith(F,K))Q+=F,K+=F.length-1,W=null;else Q+=H;continue}if(X&&G&&H==="\\"&&K+1<$.length){Q+=H+$[K+1],K+=1;continue}if(!J&&H==="'"){if(!X){let F=$[K-1],U=$[K-2]??"";G=(F==="e"||F==="E")&&!/[A-Za-z0-9_]/.test(U)}X=!X,Q+=H;continue}if(!X&&H==='"'){J=!J,Q+=H;continue}if(!X&&!J&&H==="$"){let F=/^\$(\d+)/.exec($.slice(K)),U=F?Number(F[1])-1:-1;if(F&&U>=0&&U<Z.length){Q+=zY$(Z[U]),K+=F[0].length-1;continue}let N=/^\$([A-Za-z_][A-Za-z0-9_]*)?\$/.exec($.slice(K));if(N){W=N[1]??"",Q+=N[0],K+=N[0].length-1;continue}}else if(!X&&!J&&H==="?"&&Y<Z.length){Q+=zY$(Z[Y]),Y++;continue}Q+=H}return Q}function PY$($){return $.replace(/-/g,"_")}function UF4($){return`app_${PY$($)}`}function NF4($){return`app_role_${PY$($)}`}function BF4($){if($ instanceof Error){let Z=$.message.toLowerCase(),Q=$.code;return Q==="3F000"||Q==="42704"||Q==="22023"||Z.includes("schema")&&Z.includes("does not exist")||Z.includes("role")&&Z.includes("does not exist")}return!1}async function DF4($,Z,Q){if(await m4`CREATE SCHEMA IF NOT EXISTS ${m4.id(Z)}`.execute($),!(await m4`
994
994
  SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${Q}) as exists
995
995
  `.execute($)).rows[0]?.exists)await m4`CREATE ROLE ${m4.id(Q)} NOLOGIN`.execute($);await m4`GRANT ${m4.id(Q)} TO CURRENT_USER`.execute($),await m4`GRANT USAGE, CREATE ON SCHEMA ${m4.id(Z)} TO ${m4.id(Q)}`.execute($),await m4`GRANT ALL ON ALL TABLES IN SCHEMA ${m4.id(Z)} TO ${m4.id(Q)}`.execute($),await m4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${m4.id(Z)} TO ${m4.id(Q)}`.execute($),await m4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${m4.id(Z)} GRANT ALL ON TABLES TO ${m4.id(Q)}`.execute($),await m4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${m4.id(Z)} GRANT ALL ON SEQUENCES TO ${m4.id(Q)}`.execute($),await m4`REVOKE ALL ON SCHEMA public FROM ${m4.id(Q)}`.execute($)}async function OF4($,Z,Q,Y){try{return await $.transaction().execute(async(X)=>{return await m4`SET LOCAL ROLE ${m4.id(Q)}`.execute(X),await m4`SET LOCAL search_path TO ${m4.id(Z)}`.execute(X),await m4.raw(Y).execute(X)})}catch(X){if(BF4(X))return await DF4($,Z,Q),await $.transaction().execute(async(J)=>{return await m4`SET LOCAL ROLE ${m4.id(Q)}`.execute(J),await m4`SET LOCAL search_path TO ${m4.id(Z)}`.execute(J),await m4.raw(Y).execute(J)});throw X}}var KF4,FF4,AY$;var TY$=O(()=>{R0();KF4=SH.object({results:SH.array(SH.unknown()).optional(),success:SH.boolean().optional()});FF4=SH.object({sql:SH.string().describe("The SQL query to run"),params:SH.array(SH.unknown()).describe("The parameters to pass to the SQL query").optional()});AY$=g({name:"DATABASES_RUN_SQL",description:"Run a SQL query in a connection-scoped isolated schema. Supports SELECT, DDL, and DML.",annotations:{title:"Run SQL Query",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:FF4,outputSchema:SH.object({result:SH.array(KF4)}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=HF4($.sql,$.params||[]);if(!Z.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":Z.connectionId,"organization.id":Z.organization?.id??null,"user.id":Z.auth.user?.id??null});let Y=UF4(Z.connectionId),X=NF4(Z.connectionId);return{result:[{results:(await OF4(Z.db,Y,X,Q)).rows,success:!0}]}}})});function cX0($){let Z=$.access.getRole();if(!f9(Z))throw new Q7("Only organization owners and admins can change org-wide pin status")}var Jr0=O(()=>{EQ();JW()});async function dX0($,Z,Q){let Y=[...new Set(Q)],X=await Promise.all(Y.map((G)=>$.storage.connections.findById(G,Z))),J=Y.filter((G,W)=>!X[W]);if(J.length>0)throw Error(`Connection not found: ${J.join(", ")}`)}function aU($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function mX0($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z=Math.imul(Z^$.charCodeAt(Q),16777619);return`a${(Z>>>0).toString(36).padStart(6,"0").slice(-6)}`}function iX0($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function pX0($,Z){if(!Z)return $;let Q=`${mX0(Z)}_`;return $.startsWith(Q)?$.slice(Q.length):$}function wF4($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}function jF4($,Z,Q){let Y,X=new Promise((J,G)=>{Y=setTimeout(()=>G(Error(Q)),Z)});return Promise.race([$,X]).finally(()=>clearTimeout(Y))}var uz;var RY$=O(()=>{NH();uz=class uz extends JZ{static MAX_PAGES_PER_CLIENT=1000;static DEFAULT_LIST_TIMEOUT_MS=30000;clients;slugToKey=new Map;resolvedClients=new Map;toolsCache=null;resourcesCache=null;resourceTemplatesCache=null;promptsCache=null;resourceRouteMap=new Map;listTimeoutMs;constructor($,Z){super(Z?.clientInfo??{name:"gateway-client",version:"1.0.0"},{capabilities:Z?.capabilities});this.clients=$,this.listTimeoutMs=Z?.listTimeoutMs??uz.DEFAULT_LIST_TIMEOUT_MS;for(let Q of Object.keys($)){let Y=mX0(Q);if(this.slugToKey.has(Y))throw Error(`GatewayClient: duplicate namespace code "${Y}" from keys "${this.slugToKey.get(Y)}" and "${Q}"`);this.slugToKey.set(Y,Q)}}namespace($,Z){return`${mX0($)}_${Z}`}async resolveNamespacedTarget($,Z,Q){let Y=$.indexOf("_");if(Y!==-1){let X=$.slice(0,Y),J=this.slugToKey.get(X);if(J)return[J,$.slice(Y+1)]}for(let X of await Q()){let J=iX0(X._meta);if(!J)continue;if(pX0(X.name,J)===$)return[J,$]}if(Y===-1)throw Error(`GatewayClient: could not resolve ${Z} "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Y)}" in "${$}" and not found by original name in any client`)}resolveToolTarget($){return this.resolveNamespacedTarget($,"tool",async()=>(await this.listTools()).tools)}resolvePromptTarget($){return this.resolveNamespacedTarget($,"prompt",async()=>(await this.listPrompts()).prompts)}resolveClient($){let Z=this.resolvedClients.get($);if(Z)return Z;let Q=this.clients[$];if(!Q)return Promise.reject(Error(`GatewayClient: unknown client key "${$}"`));let Y=Q.client,X;try{X=typeof Y==="function"?Promise.resolve(Y()):Promise.resolve(Y)}catch(G){return Promise.reject(G)}let J=X.catch((G)=>{throw this.resolvedClients.delete($),G});return this.resolvedClients.set($,J),J}getResolvedClient($){return this.resolveClient($)}async listFromClient($,Z,Q){try{return await jF4((async()=>{let Y=await this.resolveClient($);return await Z(Y)})(),this.listTimeoutMs,`timed out after ${this.listTimeoutMs}ms`)}catch(Y){return console.warn(`GatewayClient: skipping ${Q} from client "${$}" \u2014 ${Y?.message??Y}`),[]}}listFromAllClients($,Z){return Promise.all(Object.entries(this.clients).map(async([Q,Y])=>[Q,Y,await this.listFromClient(Q,(X)=>$(X,Q),Z)]))}async paginate($,Z,Q){let Y=[],X,J=0;do{let G=await Q(X);Y.push(...G.items),X=G.nextCursor,J++}while(X&&J<uz.MAX_PAGES_PER_CLIENT);if(X)console.warn(`GatewayClient: client "${$}" exceeded ${uz.MAX_PAGES_PER_CLIENT} pages listing ${Z} \u2014 truncating`);return Y}fetchAllTools($,Z){return this.paginate(Z,"tools",async(Q)=>{let Y=await $.listTools(Q?{cursor:Q}:void 0);return{items:Y.tools,nextCursor:Y.nextCursor}})}fetchAllResources($,Z){return this.paginate(Z,"resources",async(Q)=>{let Y=await $.listResources(Q?{cursor:Q}:void 0);return{items:Y.resources,nextCursor:Y.nextCursor}})}fetchAllResourceTemplates($,Z){return this.paginate(Z,"resource templates",async(Q)=>{let Y=await $.listResourceTemplates(Q?{cursor:Q}:void 0);return{items:Y.resourceTemplates,nextCursor:Y.nextCursor}})}fetchAllPrompts($,Z){return this.paginate(Z,"prompts",async(Q)=>{let Y=await $.listPrompts(Q?{cursor:Q}:void 0);return{items:Y.prompts,nextCursor:Y.nextCursor}})}listTools($,Z){if(!this.toolsCache)this.toolsCache=this.aggregateTools();return this.toolsCache}async aggregateTools(){let $=[],Z=await this.listFromAllClients((Q,Y)=>this.fetchAllTools(Q,Y),"tools");for(let[Q,Y,X]of Z){let J=Y.tools,G=J?new Set(J):null;for(let W of X){if(G&&!G.has(W.name))continue;$.push({...W,name:this.namespace(Q,W.name),_meta:{...W._meta??{},gatewayClientId:Q}})}}return{tools:$}}listResources($,Z){if(!this.resourcesCache)this.resourcesCache=this.aggregateResources();return this.resourcesCache}async aggregateResources(){let $=new Set,Z=[],Q=new Map,Y=await this.listFromAllClients((X,J)=>this.fetchAllResources(X,J),"resources");for(let[X,J,G]of Y){let W=J.resources,K=W?new Set(W):null;for(let H of G){if(K&&!K.has(H.uri)&&!(H.name&&K.has(H.name)))continue;if($.has(H.uri)){console.warn(`GatewayClient: duplicate resource "${H.uri}" from client "${X}" \u2014 skipping`);continue}$.add(H.uri),Q.set(H.uri,X),Z.push({...H,_meta:{...H._meta??{},gatewayClientId:X}})}}return this.resourceRouteMap=Q,{resources:Z}}listResourceTemplates($,Z){if(!this.resourceTemplatesCache)this.resourceTemplatesCache=this.aggregateResourceTemplates();return this.resourceTemplatesCache}async aggregateResourceTemplates(){let $=new Set,Z=[],Q=await this.listFromAllClients((Y,X)=>this.fetchAllResourceTemplates(Y,X),"resource templates");for(let[Y,X,J]of Q)for(let G of J){if($.has(G.uriTemplate)){console.warn(`GatewayClient: duplicate resource template "${G.uriTemplate}" from client "${Y}" \u2014 skipping`);continue}$.add(G.uriTemplate),Z.push({...G,_meta:{...G._meta??{},gatewayClientId:Y}})}return{resourceTemplates:Z}}listPrompts($,Z){if(!this.promptsCache)this.promptsCache=this.aggregatePrompts();return this.promptsCache}async aggregatePrompts(){let $=[],Z=await this.listFromAllClients((Q,Y)=>this.fetchAllPrompts(Q,Y),"prompts");for(let[Q,Y,X]of Z){let J=Y.prompts,G=J?new Set(J):null;for(let W of X){if(G&&!G.has(W.name))continue;$.push({...W,name:this.namespace(Q,W.name),title:W.title??wF4(W.name),_meta:{...W._meta??{},gatewayClientId:Q}})}}return{prompts:$}}async callTool($,Z,Q){let[Y,X]=await this.resolveToolTarget($.name);return(await this.resolveClient(Y)).callTool({...$,name:X},Z,Q)}async readResource($,Z){let Q=await this.resolveResourceRoute($.uri);return(await this.resolveClient(Q)).readResource($)}async getPrompt($,Z){let[Q,Y]=await this.resolvePromptTarget($.name);return(await this.resolveClient(Q)).getPrompt({...$,name:Y})}async resolveResourceRoute($){let Z=this.resourceRouteMap.get($);if(Z)return Z;if(this.resourcesCache=null,await this.listResources(),Z=this.resourceRouteMap.get($),Z)return Z;throw Error(`GatewayClient: resource "${$}" not found in any upstream client`)}getServerCapabilities(){return{tools:{},resources:{},prompts:{}}}getInstructions(){return}refresh(){this.toolsCache=null,this.resourcesCache=null,this.resourceTemplatesCache=null,this.promptsCache=null}async close(){let $=[...this.resolvedClients.values()].map((Z)=>Z.then((Q)=>Q.close()).catch(()=>{}));await Promise.allSettled($),await super.close()}}});var nX0=O(()=>{RY$()});function Wr0($){return aU($)}function zF4($,Z){let Q=aU(Z)||"prompt";return`${String($).padStart(EF4,"0")}-${Q}`}async function Kr0($,Z,Q){try{await $.delete(tX0,Wr0(Z),{actor:Q})}catch(Y){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:Y})}}async function oX0($,Z,Q,Y){let X=Wr0(Z);await Kr0($,Z,Q),await Promise.all(Y.slice(0,Gr0).map(async(J,G)=>{let W=zF4(G,J.title),K={name:W,title:J.title,description:J.description,text:J.text};try{await $.write(tX0,`${X}/${W}.json`,JSON.stringify(K),{actor:Q,contentType:"application/json"})}catch(H){console.error("[agent-prompts] failed to seed prompt",{agentId:Z,name:W,err:H})}}))}async function qY$($,Z){let Q=Wr0(Z),Y;try{Y=await $.listDir(tX0,Q)}catch{return[]}let X=Y.filter((G)=>G.kind==="file"&&G.path.endsWith(".json")).slice(0,Gr0),J=[];for(let G of X)try{let W=await $.read(tX0,G.path),K=JSON.parse(new TextDecoder().decode(W));if(K&&typeof K.name==="string"&&typeof K.title==="string"&&typeof K.text==="string")J.push(K)}catch{}return J}var tX0="agent-prompts",Gr0=20,EF4;var Vr=O(()=>{nX0();EF4=String(Gr0-1).length});function Nu($){if(!$)return $;let Z={...$};return delete Z.sandboxMap,Z}import{z as VY$}from"zod";function PF4(){let $=MY$[Math.floor(Math.random()*MY$.length)];return`icon://${IY$[Math.floor(Math.random()*IY$.length)]}?color=${$}`}var MY$,IY$,AF4,TF4,lz;var Hr0=O(()=>{R0();gO();Jr0();Vr();MY$=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],IY$=["Star01","Zap","Heart","Globe01","Compass03","Lightbulb02","Rocket01","Flag01","BookOpen01","Shield01","Key01","Diamond01","Cube01","Target04","Award01","Briefcase01","Coffee","Feather","Hexagon01","Layers3_01","Map01","Palette","Package","Terminal"];AF4=VY$.object({data:d50.describe("Data for the new virtual MCP")}),TF4=VY$.object({item:jQ.describe("The created virtual MCP entity")}),lz=g({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP (agent) that aggregates tools from multiple connections into one endpoint. Pass `prompts` to seed the agent with kickstart prompts (conversation starters shown as icebreakers). Author them from the agent's role/instructions and the descriptions of the tools it will have, so the starters are coherent and immediately useful.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:AF4,outputSchema:TF4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)cX0(Z);let{prompts:X,metadata:J,...G}=$.data,W=Nu(J);if(G.connections.length>0)await dX0(Z,Q.id,G.connections.map((F)=>F.connection_id));let K={...G,metadata:W,icon:G.icon??PF4()},H=await Z.storage.virtualMcps.create(Q.id,Y,K);if(X?.length&&Z.orgFs&&H.id)await oX0(Z.orgFs,H.id,Y,X);return{item:H}}})});function Fr0($){if(!$)return null;let Z=$.projects;return Array.isArray(Z)?Z:null}function CH($,Z){if($===null)return!0;if($.includes("*"))return!0;return $.includes(Z)}async function _H($){if($.auth.apiKey)return null;let Z=$.organization?.id;if(!Z)return null;let Q=$.access.getRole()??$.organization?.role??$.auth.user?.role;if(!Q||f9(Q))return null;if($.auth.permissions&&$.auth.permissionsOrganizationId===Z)return Fr0($.auth.permissions);let Y=await cz($.db,Z,Q);return Fr0(Y)}var Bu=O(()=>{EQ();vH()});function cO($){return typeof $==="string"||typeof $==="number"}function Ur0($,Z){let Q=Z.split("."),Y=$;for(let X of Q){if(Y==null||typeof Y!=="object")return;Y=Y[X]}return Y}function RF4($,Z){return $.connections.some((Q)=>Q.connection_id===Z)}function rX0($,Z){if("conditions"in Z){let{operator:W,conditions:K}=Z;switch(W){case"and":return K.every((H)=>rX0($,H));case"or":return K.some((H)=>rX0($,H));case"not":return!K.every((H)=>rX0($,H));default:return!0}}let{field:Q,operator:Y,value:X}=Z,J=Q.join(".");if(J==="connection_id"){if(Y!=="eq"||typeof X!=="string")return!1;return RF4($,X)}let G=Ur0($,J);switch(Y){case"eq":return G===X;case"gt":return cO(G)&&cO(X)&&G>X;case"gte":return cO(G)&&cO(X)&&G>=X;case"lt":return cO(G)&&cO(X)&&G<X;case"lte":return cO(G)&&cO(X)&&G<=X;case"in":return Array.isArray(X)&&X.includes(G);case"like":if(typeof G!=="string"||typeof X!=="string")return!1;if(X.length>100)return!1;return fX0(X).test(G);case"contains":if(typeof G!=="string"||typeof X!=="string")return!1;return G.toLowerCase().includes(X.toLowerCase());default:return!0}}function qF4($,Z){return[...$].sort((Q,Y)=>{for(let X of Z){let J=X.field.join("."),G=Ur0(Q,J),W=Ur0(Y,J),K=0;if(G==null&&W==null)continue;if(G==null)K=X.nulls==="first"?-1:1;else if(W==null)K=X.nulls==="first"?1:-1;else if(typeof G==="string"&&typeof W==="string")K=G.localeCompare(W);else if(typeof G==="number"&&typeof W==="number")K=G-W;else K=String(G).localeCompare(String(W));if(K!==0)return X.direction==="desc"?-K:K}return 0})}var MF4,IF4,dz;var Nr0=O(()=>{hJ();R0();Bu();gO();MF4=hW,IF4=rU(jQ),dz=g({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",annotations:{title:"List Virtual MCPs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:MF4,outputSchema:IF4,handler:async($,Z)=>{await Z.access.check();let Q=i(Z),Y=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="connection_id"&&$.where.operator==="eq"&&typeof $.where.value==="string"?$.where.value:void 0,X=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="pinned"&&$.where.operator==="eq"&&typeof $.where.value==="boolean"?$.where.value:void 0,G=Y?await Z.storage.virtualMcps.listByConnectionId(Q.id,Y):await Z.storage.virtualMcps.list(Q.id,X!==void 0?{pinnedOnly:X}:void 0);if($.where)G=G.filter((B)=>rX0(B,$.where));let W=await _H(Z);if(W!==null)G=G.filter((B)=>CH(W,B.id));if($.orderBy&&$.orderBy.length>0)G=qF4(G,$.orderBy);let K=G.length,H=$.offset??0,F=$.limit??100,U=G.slice(H,H+F),N=H+F<K;return{items:U,totalCount:K,hasMore:N}}})});import{z as Br0}from"zod";var VF4,kF4,mz;var Dr0=O(()=>{R0();Bu();gO();VF4=Br0.object({id:Br0.string().describe("ID of the virtual MCP to retrieve")}),kF4=Br0.object({item:jQ.nullable().describe("The retrieved virtual MCP, or null if not found")}),mz=g({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get a Virtual MCP's configuration, connections, and virtual tools by ID.",annotations:{title:"Get Virtual MCP",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:VF4,outputSchema:kF4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=await Z.storage.virtualMcps.findById($.id);if(Y&&Y.organization_id!==Q.id)return{item:null};if(!Y)return{item:null};let X=await _H(Z);if(!CH(X,Y.id))return{item:null};return{item:Y}}})});function p7($){return Or0.test($)}function kY$($){let Z=(Q)=>typeof Q==="string"?Q.trim().toLowerCase():"";return Z($?.metadata?.siteSlug)||Z($?.title)||null}var Or0;var fH=O(()=>{Or0=/^[a-z0-9][a-z0-9-]{0,59}$/});function SY$($){let{nextTitle:Z,currentTitle:Q,currentSiteSlug:Y}=$;if(Y?.trim())return null;if(Z===void 0||Z===Q)return null;let X=Q?.trim().toLowerCase()??"";return p7(X)?X:null}var CY$=O(()=>{fH()});import{z as Lr0}from"zod";var SF4,CF4,iz;var wr0=O(()=>{R0();Bu();Vr();gO();Jr0();CY$();SF4=Lr0.object({id:Lr0.string().describe("ID of the virtual MCP to update"),data:m50.describe("Partial virtual MCP data to update")}),CF4=Lr0.object({item:jQ.describe("The updated virtual MCP entity")}),iz=g({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, connection list, or kickstart prompts. Pass `prompts` to replace the agent's conversation starters (full set; empty array clears them).",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:SF4,outputSchema:CF4,handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let Y=c0(Z);if(!Y)throw Error("User ID required to update virtual MCP");let X=await Z.storage.virtualMcps.findById($.id);if(!X)throw Error(`Virtual MCP not found: ${$.id}`);if(X.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${$.id}`);let J=await _H(Z);if(!CH(J,X.id))throw Error(`Virtual MCP not found: ${$.id}`);let{prompts:G,metadata:W,...K}=$.data,H=Nu(W);if(H&&X.metadata)H={...X.metadata,...H};else if(H===null&&X.metadata?.sandboxMap)H={sandboxMap:X.metadata.sandboxMap};let F={...K,...W!==void 0?{metadata:H}:{}},U=SY$({nextTitle:F.title,currentTitle:X.title,currentSiteSlug:X.metadata?.siteSlug});if(U)F.metadata={...X.metadata,...F.metadata,siteSlug:U};if(F.pinned!==void 0&&F.pinned!==X.pinned)cX0(Z);if(F.connections?.length)await dX0(Z,Q.id,F.connections.map((B)=>B.connection_id));let N=await Z.storage.virtualMcps.update($.id,Y,F);if(G!==void 0&&Z.orgFs)await oX0(Z.orgFs,$.id,Y,G);return{item:N}}})});function Er0($){if(!$)return!1;let Z=kr.join("|");return new RegExp(`permission\\s+"?(?:${Z})"?\\s+is not allowed`,"i").test($)||/permissions exceed what the github app/i.test($)}function _Y$($){let Z={...$};for(let Q of kr)Z[Q]="read";return Z}async function vY$($,Z){let Q={...Z};for(;;){let Y=await $(Q);if(!Y.isError)return{result:Y,grantedPermissions:Q};let X=Y.content?.find((K)=>K.type==="text")?.text,J=kr.find((K)=>(K in Q));if(!J||!Er0(X))return{result:Y,grantedPermissions:Q};let{[J]:G,...W}=Q;Q=W}}function _F4($){if(!$||typeof $!=="object"||Array.isArray($))return sX0;let Z=$;if(Object.values(Z).some((Q)=>typeof Q!=="string"))return sX0;return Z}function vF4($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function G9($){let Z=$.metadata?.repoScope;if(!Z||typeof Z.installationId!=="number"||!Number.isFinite(Z.installationId)||!Number.isInteger(Z.installationId)||Z.installationId<=0||typeof Z.owner!=="string"||typeof Z.repo!=="string"||Z.owner.length===0||Z.repo.length===0)return null;let Q=vF4(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:Q,owner:Z.owner,repo:Z.repo,permissions:_F4(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function dO($){return $.metadata?.orgShared===!0}function fY$($){let Z=new Set,Q=[];for(let Y of $??[]){if(Y.status!=="active")continue;let X=G9(Y);if(X===null)continue;let J=jr0(X.owner,X.repo);if(Z.has(J))continue;Z.add(J),Q.push(`${X.owner}/${X.repo}`)}return Q}function aX0($,Z,Q){let Y=jr0(Z,Q),X=($??[]).filter((J)=>{if(J.status&&J.status!=="active")return!1;let G=G9(J);return G!==null&&jr0(G.owner,G.repo)===Y});return X.find(dO)??X[0]??null}var sX0,kr,jr0=($,Z)=>`${$}/${Z}`.toLowerCase();var MX=O(()=>{sX0={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read",deployments:"read"},kr=["deployments","checks"]});function bY$($){return vQ($)!==null||s70($)!==null}var xY$=O(()=>{T8()});import{z as zr0}from"zod";var fF4,bF4,pz;var Pr0=O(()=>{MX();uW();R0();Bu();Vr();gO();xY$();fF4=zr0.object({id:zr0.string().describe("ID of the virtual MCP to delete")}),bF4=zr0.object({item:jQ.describe("The deleted virtual MCP entity")}),pz=g({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:fF4,outputSchema:bF4,handler:async($,Z)=>{p(Z);let Q=i(Z);if(await Z.access.check(),bY$($.id))throw Error(`Virtual MCP not found: ${$.id}`);let Y=await Z.storage.virtualMcps.findById($.id);if(!Y)throw Error(`Virtual MCP not found: ${$.id}`);if(Y.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${$.id}`);let X=await _H(Z);if(!CH(X,Y.id))throw Error(`Virtual MCP not found: ${$.id}`);if(await Z.storage.virtualMcps.delete($.id),Z.orgFs)await Kr0(Z.orgFs,$.id,c0(Z)??"system");let J=Y.metadata?.githubRepo?.connectionId;if(J)try{let G=await Z.storage.connections.findById(J,Q.id),W=G&&(dO(G)||(await Z.storage.virtualMcps.listByConnectionId(Q.id,J)).length>0||await Z.storage.connections.isReferencedByThread(J));if(G&&G9(G)&&!W){let H=await new S5(Z.db,Z.vault).get(J);if(H?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${H.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await Z.storage.connections.delete(J)}}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:J,error:G.message})}return{item:Y}}})});import{z as IX}from"zod";var xF4,nz;var Ar0=O(()=>{R0();xF4=IX.object({id:IX.string(),virtualMcpId:IX.string(),pluginId:IX.string(),connectionId:IX.string().nullable(),settings:IX.record(IX.string(),IX.unknown()).nullable(),createdAt:IX.string(),updatedAt:IX.string()}),nz=g({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:IX.object({virtualMcpId:IX.string().describe("Virtual MCP ID"),pluginId:IX.string().describe("Plugin ID")}),outputSchema:IX.object({config:xF4.nullable()}),handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let{virtualMcpId:Y,pluginId:X}=$,J=await Z.storage.connections.findById(Y);if(!J||J.organization_id!==Q.id)return{config:null};if(J.connection_type!=="VIRTUAL")return{config:null};let G=await Z.storage.virtualMcpPluginConfigs.get(Y,X);if(!G)return{config:null};return{config:{id:G.id,virtualMcpId:G.virtualMcpId,pluginId:G.pluginId,connectionId:G.connectionId,settings:G.settings,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}}})});import{z as F7}from"zod";var yF4,tz;var Tr0=O(()=>{R0();yz();R5();yF4=F7.object({id:F7.string(),virtualMcpId:F7.string(),pluginId:F7.string(),connectionId:F7.string().nullable(),settings:F7.record(F7.string(),F7.unknown()).nullable(),createdAt:F7.string(),updatedAt:F7.string()}),tz=g({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:F7.object({virtualMcpId:F7.string().describe("Virtual MCP ID"),pluginId:F7.string().describe("Plugin ID"),connectionId:F7.string().nullable().optional().describe("MCP connection to bind"),settings:F7.record(F7.string(),F7.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:F7.object({config:yF4}),handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let{virtualMcpId:Y,pluginId:X,connectionId:J,settings:G}=$,W=c0(Z),K=await Z.storage.connections.findById(Y);if(!K)throw Error(`Connection not found: ${Y}`);if(K.organization_id!==Q.id)throw Error(`Connection not found: ${Y}`);if(K.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Y}`);let H=J?await Z.storage.connections.findById(J):null;if(J&&H&&H.organization_id!==Q.id)throw Error(`Connection not found: ${J}`);if(J&&K.organization_id&&!H&&qX()&&Wu(J,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let U=Ku(K.organization_id,h5());await Z.storage.connections.create({...U,organization_id:K.organization_id,created_by:W})}else if(J&&!H)throw Error(`Connection not found: ${J}`);let F=await Z.storage.virtualMcpPluginConfigs.upsert(Y,X,{connectionId:J,settings:G});return{config:{id:F.id,virtualMcpId:F.virtualMcpId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});function yY$($,Z){let Q=$!==null&&typeof $==="object"&&!Array.isArray($)?$:null;if(Z===void 0)return Q;return{...Q??{},...Z}}import{z as VY}from"zod";var gF4,oz;var Rr0=O(()=>{R0();Bu();gO();gF4=VY.object({connectionId:VY.string(),toolName:VY.string(),label:VY.string(),icon:VY.string().nullable().optional()}),oz=g({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:VY.object({virtualMcpId:VY.string().describe("Virtual MCP ID"),pinnedViews:VY.array(gF4).describe("Pinned views to set for the virtual MCP sidebar"),layout:VY.object({defaultMainView:VY.object({type:VY.string(),id:VY.string().optional(),toolName:VY.string().optional()}).nullable().optional(),chatDefaultOpen:VY.boolean().nullable().optional()}).optional()}),outputSchema:VY.object({item:jQ.nullable()}),handler:async($,Z)=>{p(Z);let Q=i(Z);await Z.access.check();let{virtualMcpId:Y,pinnedViews:X,layout:J}=$,G=c0(Z),W=await Z.storage.virtualMcps.findById(Y);if(!W)throw Error(`Virtual MCP not found: ${Y}`);if(W.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${Y}`);let K=await _H(Z);if(!CH(K,W.id))throw Error(`Virtual MCP not found: ${Y}`);let H=W.metadata?.ui??{},F={...H,pinnedViews:X.length>0?X:null,layout:yY$(H.layout,J)};return{item:await Z.storage.virtualMcps.update(Y,G??"system",{metadata:{...W.metadata,ui:F}})}}})});import{z as eU}from"zod";var hF4,uF4,qr0;var gY$=O(()=>{R0();hF4=eU.object({ids:eU.array(eU.string()).max(1000).describe("Virtual MCP ids to look up")}),uF4=eU.object({items:eU.array(eU.object({id:eU.string(),last_used_at:eU.string().optional(),last_used_by:eU.string().optional()}))}),qr0=g({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hF4,outputSchema:uF4,handler:async($,Z)=>{p(Z),i(Z),await Z.access.check();let Q=await Z.storage.threads.findLastUsedByVirtualMcpIds($.ids);return{items:$.ids.map((Y)=>({id:Y,last_used_at:Q.get(Y)?.last_used_at,last_used_by:Q.get(Y)?.last_used_by}))}}})});var hY$=O(()=>{Hr0();Nr0();Dr0();wr0();Pr0();Ar0();Tr0();Rr0();gY$()});import{z as gQ}from"zod";var Mr0;var uY$=O(()=>{J6();R0();Mr0=g({name:"MONITORING_HEATMAP",description:"Get tool-call volume broken down by agent and tool name, for spotting heavily-used tools per agent.",annotations:{title:"Get Tool-Call Heatmap",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gQ.object({startDate:gQ.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:gQ.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:gQ.array(gQ.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:gQ.array(gQ.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:gQ.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:gQ.object({cells:gQ.array(gQ.object({virtualMcpId:gQ.string().nullable(),toolName:gQ.string(),calls:gQ.number(),errors:gQ.number(),outputSize:gQ.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let Q=i(Z);return await Z.access.check(),await mY(),Z.storage.monitoring.queryToolCallHeatmap({organizationId:Q.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{virtualMcpIds:$.virtualMcpIds,excludeConnectionIds:$.excludeConnectionIds},limit:$.limit})}})});import{z as C5}from"zod";var Ir0;var lY$=O(()=>{J6();R0();Ir0=g({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:C5.object({id:C5.string().describe("Log ID to fetch")}),outputSchema:C5.object({log:C5.object({id:C5.string().optional(),organizationId:C5.string(),connectionId:C5.string(),toolName:C5.string(),input:C5.record(C5.string(),C5.unknown()),output:C5.record(C5.string(),C5.unknown()),isError:C5.boolean(),errorMessage:C5.string().nullish(),durationMs:C5.number(),timestamp:C5.string(),userId:C5.string().nullish(),requestId:C5.string(),userAgent:C5.string().nullish(),virtualMcpId:C5.string().nullish(),properties:C5.record(C5.string(),C5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await mY();let Q=i(Z),Y=await Z.storage.monitoring.getById(Q.id,$.id);if(!Y)return{log:null};return{log:{...Y,timestamp:Y.timestamp instanceof Date?Y.timestamp.toISOString():Y.timestamp}}}})});import{z as z8}from"zod";var cF4,Vr0;var cY$=O(()=>{J6();R0();cF4=z8.object({id:z8.string().optional().describe("Unique log identifier"),organizationId:z8.string().describe("Organization ID"),connectionId:z8.string().describe("Connection ID"),toolName:z8.string().describe("Name of the tool that was called"),isError:z8.boolean().describe("Whether the call resulted in an error"),errorMessage:z8.string().nullish().describe("Error message if applicable"),durationMs:z8.number().describe("Call duration in milliseconds"),timestamp:z8.string().describe("ISO 8601 timestamp of the call"),userId:z8.string().nullish().describe("User who triggered the call"),requestId:z8.string().describe("Unique request identifier"),userAgent:z8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:z8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:z8.record(z8.string(),z8.string()).nullish().describe("Custom key-value metadata attached to the log")}),Vr0=g({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:z8.object({connectionId:z8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:z8.array(z8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:z8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:z8.string().optional().describe("Filter by tool name"),isError:z8.boolean().optional().describe("Filter by error status"),startDate:z8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:z8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:z8.number().default(20).describe("Maximum number of results"),offset:z8.number().default(0).describe("Offset for pagination"),properties:z8.record(z8.string(),z8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:z8.array(z8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:z8.record(z8.string(),z8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:z8.record(z8.string(),z8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:z8.object({logs:z8.array(cF4).describe("Array of monitoring logs"),total:z8.number().describe("Total number of logs matching filters"),offset:z8.number().describe("Current offset for pagination"),limit:z8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await Z.access.check(),await mY();let Q=i(Z),X=$.properties||$.propertyKeys||$.propertyPatterns||$.propertyInValues?{properties:$.properties,propertyKeys:$.propertyKeys,propertyPatterns:$.propertyPatterns,propertyInValues:$.propertyInValues}:void 0,J={organizationId:Q.id,connectionId:$.connectionId,excludeConnectionIds:$.excludeConnectionIds,virtualMcpId:$.virtualMcpId,toolName:$.toolName,isError:$.isError,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,limit:$.limit,offset:$.offset,propertyFilters:X},G=await Z.storage.monitoring.query(J);return{logs:G.logs.map(({input:W,output:K,...H})=>({...H,timestamp:H.timestamp instanceof Date?H.timestamp.toISOString():H.timestamp})),total:G.total,offset:$.offset,limit:$.limit}}})});import{z as U$}from"zod";var kr0;var dY$=O(()=>{J6();R0();kr0=g({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:U$.object({startDate:U$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:U$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:U$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:U$.array(U$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:U$.array(U$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:U$.array(U$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:U$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:U$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:U$.array(U$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:U$.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:U$.object({totalCalls:U$.number().describe("Total number of tool calls"),errorRate:U$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:U$.number().describe("Average call duration in milliseconds"),errorRatePercent:U$.string().optional().describe("Error rate as a percentage string"),totalErrors:U$.number().optional().describe("Total number of errors"),p50DurationMs:U$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:U$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:U$.array(U$.object({connectionId:U$.string(),calls:U$.number(),errors:U$.number(),errorRate:U$.number(),avgDurationMs:U$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:U$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:U$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:U$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:U$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:U$.array(U$.object({toolName:U$.string(),connectionId:U$.string().nullable(),calls:U$.number(),inputTokens:U$.number().optional(),outputTokens:U$.number().optional(),costUsd:U$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:U$.array(U$.object({timestamp:U$.string(),toolName:U$.string(),calls:U$.number(),errors:U$.number(),avg:U$.number(),p95:U$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:U$.array(U$.object({timestamp:U$.string(),calls:U$.number(),errors:U$.number(),errorRate:U$.number(),avg:U$.number(),p50:U$.number(),p95:U$.number(),inputTokens:U$.number().optional(),outputTokens:U$.number().optional(),totalTokens:U$.number().optional(),costUsd:U$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let Q=i(Z);if(await Z.access.check(),await mY(),$.interval&&$.llmUsage)return Z.storage.monitoring.queryLlmUsageStats({organizationId:Q.id,interval:$.interval,connectionId:$.connectionIds?.[0]??"decopilot",startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,userIds:$.userIds,topN:$.topN});if($.interval){let X=await Z.storage.monitoring.queryMetricTimeseries({organizationId:Q.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});if(!$.topN)return X;let J=await Z.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:Q.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,topN:$.topN,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});return{...X,topTools:J.topTools,topToolsTimeseries:J.timeseries}}let Y=await Z.storage.monitoring.getStats({organizationId:Q.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});return{...Y,errorRatePercent:(Y.errorRate*100).toFixed(2)}}})});import{z as kY}from"zod";var Sr0;var mY$=O(()=>{J6();R0();Sr0=g({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:kY.object({threadIds:kY.array(kY.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:kY.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:kY.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:kY.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:kY.object({items:kY.array(kY.object({threadId:kY.string(),calls:kY.number(),inputTokens:kY.number(),outputTokens:kY.number(),totalTokens:kY.number(),costUsd:kY.number()}))}),handler:async($,Z)=>{let Q=i(Z);return await Z.access.check(),await mY(),{items:await Z.storage.monitoring.queryThreadUsage({organizationId:Q.id,connectionId:$.connectionId??"decopilot",threadIds:$.threadIds,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0})}}})});var iY$=O(()=>{uY$();lY$();cY$();dY$();mY$()});function eX0($){return typeof $==="string"&&mF4.has($.trim().toLowerCase())}var mF4;var Cr0=O(()=>{mF4=new Set([".well-known","_admin","_users","api","auth","choose-editor","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reports-onboarding","reset-password"])});import{z as uJ}from"zod";var _r0;var pY$=O(()=>{R0();Cr0();_r0=g({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:uJ.object({slug:uJ.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!eX0($),"Slug is reserved by Studio"),name:uJ.string().min(1).max(255),description:uJ.string().optional()}),outputSchema:uJ.object({id:uJ.string(),name:uJ.string(),slug:uJ.string(),logo:uJ.string().nullable().optional(),metadata:uJ.any().optional(),createdAt:uJ.string().datetime().describe("ISO 8601 timestamp"),members:uJ.array(uJ.any()).optional()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=c0(Z);if(!Q)throw Error("User ID required to create organization");let Y=await Z.boundAuth.organization.create({name:$.name,slug:$.slug,metadata:$.description?{description:$.description}:void 0,userId:Q});if(!Y)throw Error("Failed to create organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as bH}from"zod";var vr0;var nY$=O(()=>{R0();vr0=g({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:bH.object({}),outputSchema:bH.object({organizations:bH.array(bH.object({id:bH.string(),name:bH.string(),slug:bH.string(),logo:bH.string().nullable().optional(),metadata:bH.any().optional(),createdAt:bH.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{if(p(Z),await Z.access.check(),!c0(Z))throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list()).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}))}}})});import{z as HG}from"zod";var fr0;var tY$=O(()=>{R0();fr0=g({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:HG.object({}),outputSchema:HG.object({id:HG.string(),name:HG.string(),slug:HG.string(),logo:HG.string().nullable().optional(),metadata:HG.any().optional(),createdAt:HG.string().datetime().describe("ISO 8601 timestamp"),members:HG.array(HG.any()).optional(),invitations:HG.array(HG.any()).optional()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=await Z.boundAuth.organization.get(Q);if(!Y)throw Error("No active organization found");let X=new Date,J=Y.invitations?.filter((G)=>new Date(G.expiresAt)>X);return{...Y,invitations:J,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as lW}from"zod";var br0;var oY$=O(()=>{R0();br0=g({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:lW.object({id:lW.string(),name:lW.string().min(1).max(255).optional(),description:lW.string().optional()}),outputSchema:lW.object({id:lW.string(),name:lW.string(),slug:lW.string(),logo:lW.string().nullable().optional(),metadata:lW.any().optional(),createdAt:lW.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(p(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q={};if($.name)Q.name=$.name;if($.description!==void 0){let X=await Z.boundAuth.organization.get($.id);Q.metadata={...X?.metadata,description:$.description}}let Y=await Z.boundAuth.organization.update({organizationId:$.id,data:Q});if(!Y)throw Error("Failed to update organization");return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as Sr}from"zod";var xr0;var rY$=O(()=>{R0();xr0=g({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Sr.object({id:Sr.string()}),outputSchema:Sr.object({success:Sr.boolean(),id:Sr.string()}),handler:async($,Z)=>{if(p(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=(await Z.boundAuth.organization.get($.id))?.metadata??{};if(Y.archived===!0)return{success:!0,id:$.id};return await Z.boundAuth.organization.update({organizationId:$.id,data:{metadata:{...Y,archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:$.id}}})});import{z as h1}from"zod";function n7($,Z){let Q=$?.[Z];return iF4.has(Z)?Q!==!1:Q===!0}function aY$($){let Z=$?.auto_resolve_conflicts;return typeof Z==="boolean"?Z:$?.auto_merge===!0}var ZN=500,Cr,_r,$N,sY$,mO,vr,fr,br,rz,iF4,$J0=262144,pF4=50,lJ=500,nF4=5000,iO;var c9=O(()=>{Cr=h1.object({title:h1.string().max(ZN),url:h1.string().max(ZN),icon:h1.string().max(ZN)}),_r=h1.object({registries:h1.record(h1.string().max(ZN),h1.object({enabled:h1.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:h1.array(h1.string().max(ZN)).describe("List of MCP app_name or app_id values to hide from the store.")}),$N=h1.object({keyId:h1.string().max(ZN),modelId:h1.string().max(ZN),title:h1.string().max(ZN).optional()}).nullable(),sY$=h1.enum(["fast","smart","thinking","image","web_search","deep_research"]),mO=h1.enum(["fast","smart","thinking"]),vr=h1.object({tiers:h1.object({fast:$N,smart:$N,thinking:$N,image:$N,web_search:$N,deep_research:$N})}),fr=h1.object({tiers:h1.object({fast:$N.optional(),smart:$N.optional(),thinking:$N.optional()})}),br=h1.object({ids:h1.array(h1.string().max(ZN)).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),rz=h1.object({home_task_intake_enabled:h1.boolean().optional().describe("Show Task mode on the Home composer and allow reports to start tasks."),demo_mode:h1.boolean().optional().describe("Curated demo org: the commerce connect modal proceeds without a configured required data source."),reports_only:h1.boolean().optional().describe("Curated commerce (reports) look: hides agent navigation, the home Customize button, and the Settings/Automations tabs. Defaulted on for orgs created by commerce onboarding."),reviewer_enabled:h1.boolean().optional().describe("Run the Reviewer on a task's pull request once it's In Review \u2014 it reviews the code with the repo's stack-appropriate skills, fixes what it finds on the PR's own branch, then exercises the change on the deploy preview and approves or hands the card to a human."),qa_agent_enabled:h1.boolean().optional().describe("Deprecated: see reviewer_enabled."),code_reviewer_enabled:h1.boolean().optional().describe("Deprecated: see reviewer_enabled."),auto_merge:h1.boolean().optional().describe("When the Reviewer approves a task's pull request, merge it automatically instead of leaving the merge to a human."),auto_resolve_conflicts:h1.boolean().optional().describe("When an approved pull request can't be merged because it conflicts with its base branch, hand it back to the Super Agent to resolve the conflict (check out the branch, merge the base, push). Unset, it follows `auto_merge`; set it explicitly to run one without the other."),cheap_reviewer_model:h1.boolean().optional().describe("Run the Reviewer on a cheaper model than the Super Agent that wrote the code. On by default \u2014 turning it off trades cost for some review depth."),coding_agent_org_mcps:h1.boolean().optional().describe("Give a coding-agent run (the claude-code harness in a sandbox) every MCP connection in the org as its own MCP server, on top of the narrow task-run surface it always gets. Off by default: each connection is one more server the agent connects to at session start, and all of their tools land in its context."),coding_agents_claude_code:h1.boolean().optional().describe("Run chats on a Code Agent (an agent imported from a GitHub repo) with the claude-code harness inside its sandbox, instead of hosted Decopilot. Off by default: it changes the runtime of every such chat, and claude-code flushes whole turns rather than streaming tokens."),auto_assign_report_tasks_to_super_agent:h1.boolean().optional().describe("When a report import creates a task board item without an assignee, delegate it to the Super Agent automatically instead of leaving it unassigned."),hosting_enabled:h1.boolean().optional().describe("Per-site Hosting tab (deployments, domains, deploy outcomes). Off by default. deco.cx staff and local dev always see it; this flag is the per-client lever to open it to one external org. `HOSTING_CONTROL_PLANE_GA` opens it (and its peers) to every org at once."),deco_analytics_enabled:h1.boolean().optional().describe("Per-site Deco Analytics tab (traffic, realtime, usage & limits). Off by default. deco.cx staff and local dev always see it; this flag is the per-client lever to open it to one external org. `HOSTING_CONTROL_PLANE_GA` opens it (and its peers) to every org at once."),e2e_enabled:h1.boolean().optional().describe("Per-site E2E tab (end-to-end test runs). Off by default. deco.cx staff and local dev always see it; this flag is the per-client lever to open it to one external org. `HOSTING_CONTROL_PLANE_GA` opens it (and its peers) to every org at once."),monitor_enabled:h1.boolean().optional().describe("Per-site Monitor tab (CDN Performance + Audience from the stats-lake warehouse). Off by default. deco.cx staff and local dev always see it; this flag is the per-client lever to open it to one external org. Its own deployment-wide switch `MONITOR_GA` opens it to every org at once (independent of the control-plane trio)."),delivery_lanes_enabled:h1.boolean().optional().describe("Board lanes for shipping: Approved, Merged and Post-deploy Validation sit between In Review and Done, and a merged pull request lands on Merged instead of Done. For teams whose release process continues after the merge. Off by default \u2014 with it off the board and the state machine behave exactly as if the lanes did not exist."),cms_auto_fresh_branch:h1.boolean().optional().describe("When a user opens the CMS on a branch whose last commit is older than the staleness window (2 days), move the session to a freshly minted branch cut from the default branch. The stale branch is left intact on GitHub. Off by default.")}),iF4=new Set(["reviewer_enabled","cheap_reviewer_model"]);iO=h1.object({id:h1.string().describe("Brand context ID"),name:h1.string().max(lJ).describe("Company name"),domain:h1.string().max(lJ).describe("Company domain (e.g. example.com)"),overview:h1.string().max(nF4).describe("Company overview / description"),logo:h1.string().max(lJ).nullable().optional().describe("Logo URL"),favicon:h1.string().max(lJ).nullable().optional().describe("Favicon URL"),ogImage:h1.string().max(lJ).nullable().optional().describe("OG image URL"),fonts:h1.object({heading:h1.string().max(lJ).optional().describe("Font family for headings"),body:h1.string().max(lJ).optional().describe("Font family for body text"),code:h1.string().max(lJ).optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:h1.object({primary:h1.string().max(lJ).optional().describe("Primary brand color (hex)"),secondary:h1.string().max(lJ).optional().describe("Secondary brand color (hex)"),accent:h1.string().max(lJ).optional().describe("Accent / highlight color (hex)"),background:h1.string().max(lJ).optional().describe("Background color (hex)"),foreground:h1.string().max(lJ).optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:h1.array(h1.record(h1.string(),h1.unknown())).max(pF4).nullable().optional().refine(($)=>$===null||$===void 0||JSON.stringify($).length<=$J0,{message:`images must serialize to at most ${$J0} bytes`}).describe("Brand images"),metadata:h1.record(h1.string(),h1.unknown()).nullable().optional().refine(($)=>$===null||$===void 0||JSON.stringify($).length<=$J0,{message:`metadata must serialize to at most ${$J0} bytes`}).describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:h1.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:h1.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as pO}from"zod";var yr0;var eY$=O(()=>{R0();c9();yr0=g({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:pO.object({}),outputSchema:pO.object({organizationId:pO.string(),sidebar_items:pO.array(Cr).nullable().optional(),enabled_plugins:pO.array(pO.string()).nullable().optional(),registry_config:_r.nullable().optional(),simple_mode:vr.nullable().optional(),default_home_agents:br.nullable().optional(),flags:rz.nullable().optional(),createdAt:pO.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:pO.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=await Z.storage.organizationSettings.get(Q);if(!Y)return{organizationId:Q};return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as gr0}from"zod";var hr0;var $X$=O(()=>{R0();hr0=g({name:"ORGANIZATION_HAS_SITE",description:"Whether this organization owns at least one legacy deco.cx site. Boolean only \u2014 does not expose site slugs.",annotations:{title:"Has Owned Site",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gr0.object({}),outputSchema:gr0.object({hasSite:gr0.boolean()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z);return{hasSite:(await Z.storage.orgSites.listByOrg(Q.id)).length>0}}})});import{z as p5}from"zod";var tF4=50,oF4=500,rF4=100,sF4=200,aF4=500,ZX$=200,xr=500,ur0;var QX$=O(()=>{R0();c9();ur0=g({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:p5.object({organizationId:p5.string(),sidebar_items:p5.array(Cr).max(tF4).optional(),enabled_plugins:p5.array(p5.string().max(xr)).max(sF4).optional(),coding_agent_mcp_excluded:p5.array(p5.string().max(xr)).max(aF4).optional().describe("Connection ids a coding-agent run must not mount, even with `coding_agent_org_mcps` on. Replaces the stored list; pass [] to clear it."),registry_config:_r.extend({registries:p5.record(p5.string().max(xr),p5.object({enabled:p5.boolean()})).refine(($)=>Object.keys($).length<=ZX$,{message:`registries must have at most ${ZX$} entries`}),blockedMcps:p5.array(p5.string().max(xr)).max(oF4)}).optional(),simple_mode:vr.optional(),default_home_agents:br.extend({ids:p5.array(p5.string().max(xr)).max(rF4)}).optional(),flags:rz.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value.")}),outputSchema:p5.object({organizationId:p5.string(),sidebar_items:p5.array(Cr).nullable().optional(),enabled_plugins:p5.array(p5.string()).nullable().optional(),coding_agent_mcp_excluded:p5.array(p5.string()).nullable().optional(),registry_config:_r.nullable().optional(),simple_mode:vr.nullable().optional(),default_home_agents:br.nullable().optional(),flags:rz.nullable().optional(),createdAt:p5.string().datetime().describe("ISO 8601 timestamp"),updatedAt:p5.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(p(Z),await Z.access.check(),i(Z).id!==$.organizationId)throw Error("Cannot update settings for a different organization");let Y=await Z.storage.organizationSettings.upsert($.organizationId,{sidebar_items:$.sidebar_items,enabled_plugins:$.enabled_plugins,coding_agent_mcp_excluded:$.coding_agent_mcp_excluded,registry_config:$.registry_config,simple_mode:$.simple_mode,default_home_agents:$.default_home_agents,flags:$.flags});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as cW}from"zod";var YX$,lr0,cr0;var XX$=O(()=>{R0();c9();YX$=iO.extend({organizationId:cW.string(),archivedAt:cW.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:cW.string().describe("ISO 8601 timestamp"),updatedAt:cW.string().describe("ISO 8601 timestamp")}),lr0=g({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cW.object({includeArchived:cW.boolean().optional().describe("Include archived brands in the list")}),outputSchema:cW.object({items:cW.array(YX$)}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(Q,{includeArchived:$.includeArchived})).map((X)=>({...X,archivedAt:X.archivedAt instanceof Date?X.archivedAt.toISOString():X.archivedAt,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}))}}}),cr0=g({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cW.object({id:cW.string().describe("Brand context ID")}),outputSchema:YX$.extend({organizationId:cW.string()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=await Z.storage.brandContext.get($.id,Q);if(!Y)throw Error("Brand context not found");return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}})});import{z as sz}from"zod";var JX$,dr0,mr0,ir0;var GX$=O(()=>{R0();c9();JX$=iO.extend({organizationId:sz.string(),createdAt:sz.string().describe("ISO 8601 timestamp"),updatedAt:sz.string().describe("ISO 8601 timestamp")}),dr0=g({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:iO.omit({id:!0}),outputSchema:JX$,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=await Z.storage.brandContext.create(Q,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo??null,favicon:$.favicon??null,ogImage:$.ogImage??null,fonts:$.fonts??null,colors:$.colors??null,images:$.images??null,metadata:$.metadata??null});return{...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}}}),mr0=g({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:iO.partial().required({id:!0}),outputSchema:JX$,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,Q))throw Error("Brand context not found");let{id:X,...J}=$;if(J.isDefault===!0)await Z.storage.brandContext.setDefault(X,Q);let G=await Z.storage.brandContext.update(X,Q,{name:J.name,domain:J.domain,overview:J.overview,logo:J.logo!==void 0?J.logo??null:void 0,favicon:J.favicon!==void 0?J.favicon??null:void 0,ogImage:J.ogImage!==void 0?J.ogImage??null:void 0,fonts:J.fonts!==void 0?J.fonts??null:void 0,colors:J.colors!==void 0?J.colors??null:void 0,images:J.images!==void 0?J.images??null:void 0,metadata:J.metadata!==void 0?J.metadata??null:void 0,archivedAt:J.archivedAt!==void 0?J.archivedAt??null:void 0,isDefault:J.isDefault===!1?!1:void 0});return{...G,archivedAt:G.archivedAt instanceof Date?G.archivedAt.toISOString():G.archivedAt,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}}),ir0=g({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:sz.object({id:sz.string().describe("Brand context ID")}),outputSchema:sz.object({success:sz.boolean()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,Q))throw Error("Brand context not found");return await Z.storage.brandContext.update($.id,Q,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function ZJ0($,Z,Q){let Y=$.trim();if(!Y.startsWith("http"))Y=`https://${Y}`;let X=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify({url:Y,formats:["branding"]})});if(!X.ok){let N=await X.text().catch(()=>"");throw Error(`Firecrawl API error: ${X.status} ${N.slice(0,200)}`)}let J=await X.json();if(!J.success||!J.data?.branding)return null;let G=J.data.branding,W=J.data.metadata??{},K=ZU4(G,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((N)=>N.trim()).filter(Boolean)?.slice().sort((N,B)=>N.length-B.length)[0]??W.ogSiteName??Q??$,domain:$,overview:W.description??"",logo:K.logo,favicon:K.favicon,ogImage:K.ogImage,fonts:K.fonts,colors:K.colors,images:null,metadata:Object.keys(K.metadata).length>0?K.metadata:null}}function ZU4($,Z){let Q=$.images??{},Y=$.colors??{},X={};for(let[F,U]of Object.entries(Y))if(typeof U==="string"&&U&&eF4.has(F))X[F]=U;let J={},W=($.typography??{}).fontFamilies??{};for(let[F,U]of Object.entries(W))if(typeof U==="string"&&U){let N=$U4[F.toLowerCase()];if(N&&!J[N])J[N]=U}let K=$.fonts;if(Array.isArray(K))for(let F of K){let U=F.family;if(typeof U==="string"&&U&&!J.body)J.body=U}let H={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[F]!==void 0)H[F]=$[F];return{logo:Q.logo??null,favicon:Q.favicon??null,ogImage:Q.ogImage??Z.ogImage??null,fonts:Object.keys(J).length>0?J:null,colors:Object.keys(X).length>0?X:null,metadata:H}}var eF4,$U4;var pr0=O(()=>{eF4=new Set(["primary","secondary","accent","background","foreground"]),$U4={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as QJ0}from"zod";var QU4,nr0;var WX$=O(()=>{R0();pr0();c9();QU4=iO.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:QJ0.boolean()}),nr0=g({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:QJ0.object({domain:QJ0.string().describe("Website domain to extract brand from"),brandId:QJ0.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:QU4,modelSummary:($)=>$.success?`Brand saved (id=${$.id}, name=${$.name}, domain=${$.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=Z.firecrawlApiKey;if(!Y)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let X=await ZJ0($.domain,Y,$.domain);if(!X)throw Error("Firecrawl did not return branding data for this URL");let J={name:X.name,domain:X.domain,overview:X.overview,logo:X.logo,favicon:X.favicon,ogImage:X.ogImage,fonts:X.fonts,colors:X.colors,images:X.images,metadata:X.metadata},G=$.brandId?await(async()=>{if(!await Z.storage.brandContext.get($.brandId,Q))throw Error("Brand context not found");return Z.storage.brandContext.update($.brandId,Q,J)})():await Z.storage.brandContext.create(Q,J);return{id:G.id,name:G.name,domain:G.domain,overview:G.overview,logo:G.logo,favicon:G.favicon,ogImage:G.ogImage,fonts:G.fonts,colors:G.colors,success:!0}}})});function KX$($){let Z=$.metadata??{};return{id:$.id,name:$.name,domain:$.domain||void 0,colors:$.colors??void 0,fonts:$.fonts??void 0,assets:$.logo||$.favicon||$.ogImage?{logo:$.logo??void 0,favicon:$.favicon??void 0,ogImage:$.ogImage??void 0}:void 0,overview:$.overview||void 0,tagline:typeof Z.tagline==="string"?Z.tagline:void 0,tone:typeof Z.tone==="string"?Z.tone:void 0,metadata:(()=>{let Q=Object.fromEntries(Object.entries(Z).filter(([Y])=>Y!=="tagline"&&Y!=="tone"));return Object.keys(Q).length>0?Q:void 0})()}}var tr0,or0;var HX$=O(()=>{mo0();R0();tr0=g({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:kX0,outputSchema:jr,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let Y=$.id?await Z.storage.brandContext.get($.id,Q):await Z.storage.brandContext.getDefault(Q);if(!Y)throw Error($.id?"Brand not found":"No default brand configured");return KX$(Y)}}),or0=g({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:SX0,outputSchema:CX0,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(Q)).map(KX$)}}})});import{resolveTxt as YU4}from"dns/promises";function rr0($){return`${XU4}.${$.toLowerCase()}`}function FX$(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function UX$($,Z,Q=YU4){if(!Z)return!1;try{return(await Q(rr0($))).some((X)=>X.join("").trim()===Z)}catch{return!1}}var XU4="_deco-verify";var NX$=()=>{};import{z as n5}from"zod";function nO($){let Z=$.verificationStatus==="pending"&&Boolean($.verificationToken);return{id:$.id,domain:$.domain,joinMode:$.joinMode,verificationStatus:$.verificationStatus,verificationMethod:$.verificationMethod,verifiedAt:$.verifiedAt?new Date($.verifiedAt).toISOString():null,recordName:Z?rr0($.domain):null,recordValue:Z?$.verificationToken:null}}function GU4($){let Z=$.toLowerCase().trim();if(!JU4.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(dW.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var JU4,sr0,YJ0,ar0,er0,$s0,Zs0,Qs0;var BX$=O(()=>{cJ();NX$();R0();JU4=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,sr0=n5.enum(["off","auto","request"]),YJ0=n5.object({id:n5.string(),domain:n5.string(),joinMode:sr0,verificationStatus:n5.enum(["pending","verified"]),verificationMethod:n5.enum(["email","dns"]).nullable(),verifiedAt:n5.string().nullable(),recordName:n5.string().nullable(),recordValue:n5.string().nullable()});ar0=g({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:n5.object({}),outputSchema:n5.object({domains:n5.array(YJ0)}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(Q.id)).map(nO)}}}),er0=g({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:n5.object({domain:n5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:sr0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:YJ0,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z),Y=GU4($.domain),J=Z.auth.user?.email?.split("@")[1]?.toLowerCase(),G=Boolean(Z.auth.user?.emailVerified)&&J===Y,W=await Z.storage.organizationDomains.getByOrgAndDomain(Q.id,Y);if(W){if(W.verificationStatus!=="verified"&&G){let H=await Z.storage.organizationDomains.markVerified(W.id,"email");return nO(H)}return nO(W)}let K=G?await Z.storage.organizationDomains.add(Q.id,Y,{joinMode:$.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await Z.storage.organizationDomains.add(Q.id,Y,{joinMode:"off",verificationStatus:"pending",verificationToken:FX$()});return nO(K)}}),$s0=g({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:n5.object({id:n5.string(),joinMode:sr0}),outputSchema:YJ0,handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z),Y=await Z.storage.organizationDomains.getById($.id);if(!Y||Y.organizationId!==Q.id)throw Error("Domain not found");if($.joinMode!=="off"&&Y.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let X=await Z.storage.organizationDomains.updateJoinMode($.id,$.joinMode);return nO(X)}}),Zs0=g({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:n5.object({id:n5.string()}),outputSchema:n5.object({verified:n5.boolean(),domain:YJ0}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z),Y=await Z.storage.organizationDomains.getById($.id);if(!Y||Y.organizationId!==Q.id)throw Error("Domain not found");if(Y.verificationStatus==="verified")return{verified:!0,domain:nO(Y)};if(!Y.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await UX$(Y.domain,Y.verificationToken))return{verified:!1,domain:nO(Y)};let J=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:nO(J)}}}),Qs0=g({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:n5.object({id:n5.string()}),outputSchema:n5.object({success:n5.boolean()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z),Y=await Z.storage.organizationDomains.getById($.id);if(!Y||Y.organizationId!==Q.id)throw Error("Domain not found");return await Z.storage.organizationDomains.removeById($.id),{success:!0}}})});function tO($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as d9}from"zod";var WU4,Ys0,Xs0,Js0;var DX$=O(()=>{R0();_4();WU4=d9.object({id:d9.string(),userId:d9.string(),status:d9.enum(["pending","approved","denied"]),createdAt:d9.string(),user:d9.object({id:d9.string(),name:d9.string(),email:d9.string(),image:d9.string().nullable()}).nullable()}),Ys0=g({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:d9.object({}),outputSchema:d9.object({requests:d9.array(WU4)}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z);return{requests:(await Z.storage.organizationJoinRequests.listPendingWithUser(Q.id)).map((X)=>({id:X.id,userId:X.userId,status:X.status,createdAt:new Date(X.createdAt).toISOString(),user:X.user}))}}}),Xs0=g({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:d9.object({requestId:d9.string()}),outputSchema:d9.object({success:d9.boolean()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z),Y=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Y||Y.organizationId!==Q.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let X=c0(Z);if(!await Z.storage.organizationJoinRequests.decide(Y.id,"approved",X??Y.userId))return{success:!0};try{await Z.boundAuth.organization.addMember({organizationId:Q.id,userId:Y.userId,role:["user"]})}catch(G){if(!tO(G))throw G}if(X)M1.capture({distinctId:X,event:"organization_join_request_approved",groups:{organization:Q.id},properties:{organization_id:Q.id,user_id:Y.userId}});return{success:!0}}}),Js0=g({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:d9.object({requestId:d9.string()}),outputSchema:d9.object({success:d9.boolean()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z),Y=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Y||Y.organizationId!==Q.id)throw Error("Join request not found");if(Y.status!=="pending")throw Error("Join request has already been decided");let X=c0(Z);if(await Z.storage.organizationJoinRequests.decide(Y.id,"denied",X??Y.userId)&&X)M1.capture({distinctId:X,event:"organization_join_request_denied",groups:{organization:Q.id},properties:{organization_id:Q.id,user_id:Y.userId}});return{success:!0}}})});import{z as VX}from"zod";var Gs0;var OX$=O(()=>{_4();R0();EQ();Gs0=g({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:VX.object({organizationId:VX.string().optional(),userId:VX.string(),role:VX.array(VX.string())}),outputSchema:VX.object({id:VX.string(),organizationId:VX.string(),userId:VX.string(),role:VX.union([VX.string(),VX.array(VX.string())]),createdAt:VX.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=$.organizationId||Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(Q!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=await Z.db.selectFrom("member").select(["role"]).where("userId","=",c0(Z)??"").where("organizationId","=",Q).executeTakeFirst();if(!s50(Y?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let X=await Z.boundAuth.organization.addMember({organizationId:Q,userId:$.userId,role:$.role});if(!X)throw Error("Failed to add member");let J=c0(Z);if(J)M1.capture({distinctId:J,event:"organization_member_added",groups:{organization:Q},properties:{organization_id:Q,added_user_id:$.userId,role:$.role}});return{...X,role:X.role,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as Du}from"zod";var Ws0;var LX$=O(()=>{_4();R0();Ws0=g({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Du.object({organizationId:Du.string().optional(),memberIdOrEmail:Du.string()}),outputSchema:Du.object({success:Du.boolean(),memberIdOrEmail:Du.string()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=$.organizationId||Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(Q!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=await Z.boundAuth.organization.removeMember({organizationId:Q,memberIdOrEmail:$.memberIdOrEmail});Z.invalidateMemberRole?.(Y.member.userId,Q);let X=c0(Z);if(X)M1.capture({distinctId:X,event:"organization_member_removed",groups:{organization:Q},properties:{organization_id:Q,member_id_or_email:$.memberIdOrEmail}});return{success:!0,memberIdOrEmail:$.memberIdOrEmail}}})});import{z as hQ}from"zod";var Ks0;var wX$=O(()=>{R0();Ks0=g({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hQ.object({limit:hQ.number().int().min(1).max(1000).optional(),offset:hQ.number().int().min(0).optional()}),outputSchema:hQ.object({members:hQ.array(hQ.object({id:hQ.string(),organizationId:hQ.string(),userId:hQ.string(),role:hQ.string(),createdAt:hQ.string().datetime().describe("ISO 8601 timestamp"),user:hQ.object({id:hQ.string(),name:hQ.string(),email:hQ.string(),image:hQ.string().optional()}).optional()}))}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");return{members:((await Z.boundAuth.organization.listMembers({organizationId:Q,limit:$.limit,offset:$.offset}))?.members??[]).map((J)=>({...J,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt}))}}})});import{z as U7}from"zod";var Hs0;var jX$=O(()=>{_4();R0();EQ();Hs0=g({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:U7.object({organizationId:U7.string().optional(),memberId:U7.string(),role:U7.array(U7.string())}),outputSchema:U7.object({id:U7.string(),organizationId:U7.string(),userId:U7.string(),role:U7.union([U7.string(),U7.array(U7.string())]),createdAt:U7.string().datetime().describe("ISO 8601 timestamp"),user:U7.object({email:U7.string(),name:U7.string(),image:U7.string().optional()})}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=$.organizationId||Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(Q!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Y=await Z.db.selectFrom("member").select(["role"]).where("userId","=",c0(Z)??"").where("organizationId","=",Q).executeTakeFirst();if(!s50(Y?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let X=await Z.boundAuth.organization.updateMemberRole({organizationId:Q,memberId:$.memberId,role:$.role});if(!X)throw Error("Failed to update member role");Z.invalidateMemberRole?.(X.userId,Q);let J=c0(Z);if(J)M1.capture({distinctId:J,event:"organization_member_role_updated",groups:{organization:Q},properties:{organization_id:Q,member_id:$.memberId,target_user_id:X.userId,new_role:Array.isArray($.role)?$.role.join(","):$.role}});return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});async function EX$(){if(yr&&Date.now()-yr.fetchedAt<600000)return yr.rate;try{let Z=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),Q=parseFloat(Z.USDBRL?.bid??"");if(Number.isNaN(Q)||Q<=0)throw Error("Invalid rate");return yr={rate:Q,fetchedAt:Date.now()},Q}catch{return yr?.rate??5.5}}function zX$($,Z,Q){if(Z==="brl")return Math.round($/Q);return $}var yr=null;function Fs0($,Z="",Q=new URLSearchParams){for(let[Y,X]of Object.entries($)){if(X===void 0||X===null)continue;let J=Z?`${Z}[${Y}]`:Y;if(Array.isArray(X))X.forEach((G,W)=>{if(typeof G==="object"&&G!==null)Fs0(G,`${J}[${W}]`,Q);else Q.append(`${J}[${W}]`,String(G))});else if(typeof X==="object")Fs0(X,J,Q);else Q.append(J,String(X))}return Q}async function QN($,Z){let Q=O0().stripeSecretKey;if(!Q)throw new m9(503,"billing is not configured");let Y=Z?.params?Fs0(Z.params).toString():void 0,X=await fetch(`${KU4}${$}`,{method:Z?.method??(Y?"POST":"GET"),headers:{Authorization:`Bearer ${Q}`,...Y&&{"Content-Type":"application/x-www-form-urlencoded"},...Z?.idempotencyKey&&{"Idempotency-Key":Z.idempotencyKey}},body:Y,signal:AbortSignal.timeout(HU4)}),J=await X.json().catch(()=>({}));if(!X.ok){let G=J.error?.message??`HTTP ${X.status}`;throw new m9(X.status,G)}return J}function PX$($){return{billing_address_collection:"required",custom_fields:[{key:FU4,label:{type:"custom",custom:"CPF / CNPJ"},type:"text",optional:!1,text:{minimum_length:UU4,maximum_length:NU4}}],...$&&{customer_update:{address:"auto",name:"auto"}}}}function AX$($){return Boolean((O0().stripePlanPriceIds??{})[$])}function Us0($){let Z=O0().stripePlanPriceIds??{};return Object.entries(Z).find(([,Q])=>Q===$)?.[0]}function BU4($){return["checkout",$.organizationId,$.planId??"flat",$.lastStripeEventAt?.getTime()??0].join(":")}async function TX$($){let Z=O0(),Q=$.planId?Us0($.planId):Z.stripeOrgPriceId;if(!Q)throw new m9(503,$.planId?`plan '${$.planId}' has no Stripe price configured`:"billing is not configured");let Y=await QN("/checkout/sessions",{idempotencyKey:BU4({organizationId:$.organizationId,...$.planId?{planId:$.planId}:{},...$.lastStripeEventAt!==void 0&&{lastStripeEventAt:$.lastStripeEventAt}}),params:{mode:"subscription",...PX$(null),line_items:[{price:Q,quantity:1}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:{orgId:$.organizationId,...$.planId?{planId:$.planId}:{}},subscription_data:{billing_cycle_anchor_config:{day_of_month:1,hour:0,minute:0,second:0},metadata:{orgId:$.organizationId,...$.planId?{planId:$.planId}:{}}}}});if(!Y.url)throw new m9(500,"checkout session lacks url");return{url:Y.url}}function DU4($,Z){return Math.round($*(1+Z/100))}function LU4($){let Z=Math.floor(($.nowMs??Date.now())/OU4);return["topup",$.organizationId,$.currency,$.amountCents,Z].join(":")}async function RX$($){let Z=DU4($.amountCents,$.feePercent),Q=zX$($.amountCents,$.currency,await EX$()),Y=O0().stripeTopupProductId,X={kind:"topup",orgId:$.organizationId,creditCents:Q},J=$.currency==="brl"?`Studio AI credits (R$ ${($.amountCents/100).toFixed(2)})`:`Studio AI credits ($${($.amountCents/100).toFixed(2)})`,G=await QN("/checkout/sessions",{idempotencyKey:LU4({organizationId:$.organizationId,amountCents:$.amountCents,currency:$.currency}),params:{mode:"payment",...$.customerId&&{customer:$.customerId},...PX$($.customerId),line_items:[{quantity:1,price_data:{currency:$.currency,unit_amount:Z,...Y?{product:Y}:{product_data:{name:J}}}}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:X,payment_intent_data:{metadata:X}}});if(!G.url)throw new m9(500,"checkout session lacks url");return{url:G.url}}async function XJ0($){let Z=await QN("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new m9(500,"portal session lacks url");return{url:Z.url}}async function qX$($){let Z=await QN("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl,...O0().stripePortalConfigurationId&&{configuration:O0().stripePortalConfigurationId},flow_data:{type:"subscription_update_confirm",subscription_update_confirm:{subscription:$.subscriptionId,items:[{id:$.subscriptionItemId,price:$.priceId}]},after_completion:{type:"redirect",redirect:{return_url:$.returnUrl}}}}});if(!Z.url)throw new m9(500,"portal session lacks url");return{url:Z.url}}async function MX$($){return QN(`/prices/${encodeURIComponent($)}`)}async function oO($){return QN(`/subscriptions/${encodeURIComponent($)}`)}async function IX$($){await QN(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}async function VX$($){let Z=await QN(`/invoices?subscription=${encodeURIComponent($)}&status=paid&limit=100`),Q=wU4($,Z.data??[]);for(let Y of Q)await QN("/refunds",{params:{payment_intent:Y.paymentIntent,reason:"duplicate"},idempotencyKey:Y.idempotencyKey});return{refundedCents:Q.reduce((Y,X)=>Y+X.amountCents,0)}}function wU4($,Z){let Q=[];for(let Y of Z){let X=Y.amount_paid??0;if(X<=0)continue;let J=typeof Y.payment_intent==="string"?Y.payment_intent:Y.payment_intent?.id;if(!J)continue;Q.push({paymentIntent:J,amountCents:X,idempotencyKey:`orphan-refund:${$}:${Y.id??J}`})}return Q}var KU4="https://api.stripe.com/v1",m9,HU4=15000,FU4="taxid",UU4=11,NU4=18,OU4=120000;var YN=O(()=>{Z$();m9=class m9 extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});import{z as JJ0}from"zod";async function jU4($){if(!$.planId)throw Error("This organization already has an active subscription.");let Z=Us0($.planId);if(!Z)throw new m9(503,`plan '${$.planId}' has no Stripe price configured`);let Q=await oO($.subscriptionId),Y=(Q.items?.data??[]).filter((G)=>G.price?.id?AX$(G.price.id):!1),X=Y[0];if(Y.length>1)throw Error("This organization's subscription has more than one plan line \u2014 change it in Stripe, not here.");if(!X?.id)throw new m9(500,"subscription has no plan line to move to another price");if(X.price?.id===Z)throw Error("This organization is already on that plan.");let{url:J}=await qX$({customerId:Q.customer,subscriptionId:$.subscriptionId,subscriptionItemId:X.id,priceId:Z,returnUrl:$.returnUrl});return J}var Ns0;var kX$=O(()=>{YN();R5();R0();_4();Ns0=g({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's subscription: creates a Stripe Checkout session and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:JJ0.object({planId:JJ0.string().optional()}),outputSchema:JJ0.object({url:JJ0.string()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=Z.organization?.id,Y=Z.organization?.slug;if(!Q||!Y)throw Error("Organization context required");let X=await Z.storage.organizationBilling.getBilling(Q),J=`${Z5()}${yO(Y,"members")}`;if(X?.status==="active"&&X.stripeSubscriptionId){let W=await jU4({subscriptionId:X.stripeSubscriptionId,planId:$.planId,returnUrl:`${J}?checkout=updated`});return PX({event:"subscription_plan_change_started",organizationId:Q,...$.planId?{properties:{plan_id:$.planId}}:{},...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:W}}if(X?.status==="active")throw Error("This organization already has an active subscription.");if(X?.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let{url:G}=await TX$({organizationId:Q,successUrl:`${J}?checkout=success`,cancelUrl:`${J}?checkout=canceled`,...$.planId?{planId:$.planId}:{},lastStripeEventAt:X?.lastStripeEventAt??null});return PX({event:"subscription_checkout_started",organizationId:Q,...$.planId?{properties:{plan_id:$.planId}}:{},...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:G}}})});import{z as rO}from"zod";async function AU4(){if(gr&&Date.now()-gr.at<gr.ttlMs)return gr.prices;let $=new Set,Z=Object.entries(O0().stripePlanPriceIds??{}).filter(([,J])=>{if($.has(J))return!1;return $.add(J),!0}),Y=(await Promise.all(Z.map(async([J,G])=>{try{let W=await MX$(J);if(W.unit_amount===null)return null;return{planId:G,amountCents:W.unit_amount,currency:W.currency,interval:W.recurring?.interval??null}}catch(W){return console.warn(`plan price ${J} (${G}) unreadable:`,W instanceof m9?W.message:W),null}}))).filter((J)=>J!==null),X=Y.length===Z.length;return gr={at:Date.now(),prices:Y,ttlMs:X?zU4:PU4},Y}var EU4,zU4=600000,PU4=30000,gr=null,Bs0;var SX$=O(()=>{YN();R0();Z$();EU4=rO.object({planId:rO.string(),amountCents:rO.number(),currency:rO.string(),interval:rO.string().nullable()});Bs0=g({name:"ORGANIZATION_BILLING_PLAN_PRICES",description:"The monthly price of each purchasable plan, read from Stripe. Empty when no plan prices are configured.",annotations:{title:"Plan Prices",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:rO.object({}),outputSchema:rO.object({prices:rO.array(EU4)}),handler:async($,Z)=>{return p(Z),await Z.access.check(),{prices:await AU4()}}})});import{z as Ds0}from"zod";var Os0;var CX$=O(()=>{YN();R5();R0();Os0=g({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:Ds0.object({}),outputSchema:Ds0.object({url:Ds0.string()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z);if(!Q.slug)throw Error("Organization context required");let Y=await Z.storage.organizationBilling.getBilling(Q.id);if(!Y?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");try{return await XJ0({customerId:Y.stripeCustomerId,returnUrl:`${Z5()}${yO(Q.slug,"members")}`})}catch(X){if(X instanceof m9)throw Error(X.message);throw X}}})});function GJ0($){return Ls0[$%Ls0.length]??TU4}function kX($){return $.createdBy==="system"}function qU4($){if($?.reviewer_enabled===void 0&&$?.qa_agent_enabled===!1&&$?.code_reviewer_enabled===!1)return!1;return n7($,"reviewer_enabled")}function XN($){return qU4($)?xH:[]}function MU4($){return n7($,"delivery_lanes_enabled")}function gH($){return MU4($)?"merged":"done"}function aO($,Z){if(!$)return!1;return[yH[Z],...RU4].some((Q)=>$.startsWith(`${Q}:`))}function JN($,Z){if(Z)return new Date(Z).getTime();let Q=0;for(let Y of $){if(Y.action!=="status_changed")continue;if(Y.data?.to!=="in_review")continue;Q=Math.max(Q,new Date(Y.occurredAt).getTime())}return Q}function eO($,Z){let Q=JN($,Z.cycleStartedAt),Y=new Map;for(let X of $){if(X.action!=="review_approved"&&X.action!=="review_changes_requested")continue;if(new Date(X.occurredAt).getTime()<Q)continue;let J=X.data??{};if(J.reviewer!=="reviewer")continue;if(X.action==="review_approved"){if(Z?.verifiedOnly&&J.verified!==!0)continue;Y.set("reviewer","approved")}else Y.set("reviewer","changes_requested")}return Y}function sO($,Z,Q){if(Z.length===0)return!1;let Y=eO($,Q);return Z.every((X)=>Y.get(X)==="approved")}function fX$($,Z,Q){return sO($,Z,Q)&&!sO($,Z,{...Q,verifiedOnly:!0})}function bX$($){let Z=null;for(let Q of $){if(Q.action!=="review_approved"&&Q.action!=="review_changes_requested")continue;let Y=new Date(Q.occurredAt).getTime();if(Z&&Y<Z.at)continue;let X=Q.data?.notes;Z={at:Y,notes:Q.action==="review_changes_requested"&&typeof X==="string"?X:null}}return Z?.notes??null}function uX$($,Z=Date.now()){if($.state!==null&&$.state!=="open")return!1;if($.state===null)return!0;if($.checksStatus==="pending")return!0;if($.previewUrl!==null)return!1;let Q=$.updatedAt?Date.parse($.updatedAt):Number.NaN;return Number.isFinite(Q)&&Z-Q<IU4}var t$="super-agent",Ls0,TU4,hr='Your checkout is SHALLOW (`git clone --depth 1`), so it has no merge base and `git diff main...HEAD` (three dots) fails with "fatal: main...HEAD: no merge base". To see a branch diff, either use the two-dot form against the fetched remote ref (`git fetch origin <base> && git diff origin/<base> HEAD`), or deepen first with `git fetch --deepen=100`. Same for `git log main..HEAD` and anything else that needs shared history.',_X$,ws0="chore",xH,yH,RU4,ur="NO VISUAL SURFACE",mW,T$,vX$,WJ0,xX$="task-board.item.updated",yX$="task-board.item.deleted",gX$="task-board.item.prs.updated",hX$=4000,IU4=600000;var z4=O(()=>{c9();Ls0=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],TU4=Ls0[0];_X$="Read the diff with `gh pr diff <number>`. It comes from the API, so it needs no fetch, no merge base, and is unaffected by the shallow checkout. "+"Read it ONCE \u2014 `gh pr diff <number> --name-only` first if you need to size "+"it, then pull the hunks you need per FILE. Do NOT re-run the diff sliced by directory: each slice re-reads bytes you already have into every remaining turn's context, and it is the largest avoidable cost in a review.",xH=["reviewer"],yH={reviewer:"Reviewer"},RU4=["QA Agent","Code Reviewer"];mW=["triage","todo","in_progress","in_review","approved","merged","post_deploy_validation","done","archived"],T$={intake:"triage",queue:"todo",progress:"in_progress",review:"in_review",archive:"archived"},vX$=mW.map(($,Z)=>({key:$,title:$,position:Z})),WJ0=["approved","merged","post_deploy_validation"]});function js0($){return $==="trial"?"trial":"subscription"}function lr($,Z,Q,Y={}){PX({event:Z,organizationId:Q.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:Q.id,...Y}})}function Es0($){return $?.status==="active"||$?.status==="past_due"}function KJ0($,Z){if(Es0($))return{periodKey:$?.currentPeriodEnd?`sub:${$.currentPeriodEnd.toISOString()}`:"sub:pending",limit:$?.monthlyTaskExecutions??Z.monthlyTaskExecutions,exhaustedReason:"monthly_exhausted"};return{periodKey:"trial",limit:$?.freeTaskExecutions??Z.freeTaskExecutions,exhaustedReason:"trial_exhausted"}}function cr(){let $=O0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function $L(){return{...cr(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function Ou($,Z,Q=cr()){if(!Q.enforced||!kX(Z))return;let Y=await $.storage.organizationBilling.taskClaim(Z.id);if(Y&&Y.runCount>=Q.maxRunsPerTask)throw lr($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new SY("runs_exhausted");if(Y&&Y.state!=="released")return;let X=await $.storage.organizationBilling.getBilling(Z.organizationId),J=KJ0(X,Q);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,J.periodKey)>=J.limit)throw lr($,"task_quota_blocked",Z,{phase:"precheck",reason:J.exhaustedReason,billing_mode:js0(J.periodKey),limit:J.limit}),new SY(J.exhaustedReason)}async function lX$($,Z,Q=cr()){if(!Q.enforced||!kX(Z))return"skipped";let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),X=KJ0(Y,Q),J=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,X.periodKey,X.limit,Q.maxRunsPerTask);if(J==="exhausted")throw lr($,"task_quota_blocked",Z,{phase:"claim",reason:X.exhaustedReason,billing_mode:js0(X.periodKey),limit:X.limit}),new SY(X.exhaustedReason);if(J==="runs_exhausted")throw lr($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new SY("runs_exhausted");if(J==="claimed")lr($,"task_quota_claimed",Z,{billing_mode:js0(X.periodKey),period_key:X.periodKey,limit:X.limit});return J}async function cX$($,Z,Q,Y){if(Y==="skipped")return;await $.rollbackTaskClaim(Z,Q,{releaseSlot:Y==="claimed"}).catch((X)=>console.error("[task-quota] rollback failed (stays charged)",X))}async function dX$($,Z){let Q=await $.storage.organizationBilling.taskClaim(Z);return!!Q&&Q.state!=="released"}async function mX$($,Z,Q){if(await $.releaseTaskClaim(Z,Q).catch((X)=>{return console.error("[task-quota] refund failed (stays charged)",X),!1}))PX({event:"task_quota_refunded",organizationId:Z,properties:{task_id:Q}})}var VU4="[SUBSCRIPTION_REQUIRED]",kU4,SY;var FG=O(()=>{z4();_4();Z$();kU4={trial_exhausted:"this organization used its free task executions \u2014 subscribe to keep running tasks",monthly_exhausted:"this organization used its monthly task executions \u2014 more become available next billing cycle",runs_exhausted:"this task reached its execution limit \u2014 create a new task to keep going"};SY=class SY extends Error{reason;constructor($){super(`${VU4} ${kU4[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as GN}from"zod";var zs0;var iX$=O(()=>{R0();FG();zs0=g({name:"ORGANIZATION_TASK_QUOTA_GET",description:"Get the organization's auto-task quota: how many runs are used in the current period, the limit, and the subscription's billing status.",annotations:{title:"Get Task Quota",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:GN.object({}),outputSchema:GN.object({enforced:GN.boolean(),billingStatus:GN.string(),subscribed:GN.boolean(),hasBillingAccount:GN.boolean(),used:GN.number(),limit:GN.number(),currentPeriodEnd:GN.string().datetime().nullable()}),handler:async($,Z)=>{p(Z),await Z.access.check();let Q=i(Z),Y=cr(),X=await Z.storage.organizationBilling.getBilling(Q.id),J=KJ0(X,Y),G=await Z.storage.organizationBilling.countTaskClaims(Q.id,J.periodKey);return{enforced:Y.enforced,billingStatus:X?.status??"none",subscribed:Es0(X),hasBillingAccount:!!X?.stripeCustomerId,used:G,limit:J.limit,currentPeriodEnd:X?.currentPeriodEnd?.toISOString()??null}}})});var pX$=O(()=>{pY$();nY$();tY$();oY$();rY$();eY$();$X$();QX$();XX$();GX$();WX$();HX$();BX$();DX$();OX$();LX$();wX$();jX$();kX$();SX$();CX$();iX$()});function UG($){let Z=$?.status;return typeof Z==="number"?Z:null}function nX$($){let Z=$;if(Z?.isRateLimited!==!0)return;return typeof Z.retryAfterMs==="number"?Z.retryAfterMs:null}async function SX($,Z){let Q=await $.getBranch(Z);if(Q)return Q.sha;throw new f0({provider:$.repo.provider,status:404,message:`Branch ${Z} does not exist in ${$.repo.path}`})}var j6;var dr=O(()=>{h6();j6=class j6 extends Error{constructor($,Z){super($,Z);this.name="RepoWriteConflict"}}});function Lu($){if($.length===0)return null;let Z=!1;for(let Q of $){if(Q.state!=="completed"){Z=!0;continue}if(Q.conclusion&&CU4.has(Q.conclusion))return"failing"}return Z?"pending":"passing"}var CU4,az;var mr=O(()=>{CU4=new Set(["failure","cancelled","timed_out","action_required"]);az=class az extends Error{existing;constructor($,Z){super($);this.name="ChangeRequestExists",this.existing=Z}}});function wu($){return _U4.test($.trim())}function i9($,Z,Q){if($===void 0||!Number.isFinite($)||$<=0)return Math.min(Z,Q);return Math.min(Math.floor($),Q)}async function ju($,Z){let Q=$.headers.get("content-length"),Y=Q===null?Number.NaN:Number(Q),X=Number.isFinite(Y)&&Y>=0?Y:null,J=$.body;if(!J)return{content:"",size:X??0,truncated:!1};let G=J.getReader(),W=[],K=0,H=!1;try{for(;;){let{done:U,value:N}=await G.read();if(U)break;if(!N)continue;let B=Z-K;if(N.byteLength>=B){W.push(N.subarray(0,B)),K+=B,H=N.byteLength>B;break}W.push(N),K+=N.byteLength}}finally{await G.cancel().catch(()=>{})}return{content:new TextDecoder().decode(vU4(W,K)),size:X??K,truncated:H||X!==null&&X>K}}function vU4($,Z){let Q=new Uint8Array(Z),Y=0;for(let X of $)Q.set(X,Y),Y+=X.byteLength;return Q}function Ps0($){let Z=Number($);return Number.isInteger(Z)&&Z>1?Z:1}var ZL=400,WN=2000,QL=60000,KN=200000,YL=50,XL=50,iW=100,_U4;var ir=O(()=>{_U4=/\[bot\]$|[-_.]bot$|^bot[-_.]|^(dependabot|renovate)$/i});var hH;var As0=O(()=>{hH={name:"Deco Bot",email:"114028756+decobot@users.noreply.github.com"}});import{sql as fU4}from"kysely";function tX$($){return $ instanceof Date?$.toISOString():String($)}function pr($){let Z=$.installation_id===null||$.installation_id===void 0?null:Number($.installation_id);return{id:$.id,organizationId:$.organization_id,type:$.type,host:$.host,authKind:$.auth_kind,externalAccountId:$.external_account_id,login:$.login,avatarUrl:$.avatar_url,installationId:Number.isFinite(Z)?Z:null,status:$.status,installationAuthorizedBy:$.installation_authorized_by??null,installationRepositoryIds:$.installation_repository_ids??null,credentialConnectionId:$.credential_connection_id,connectedBy:$.connected_by_name?{name:$.connected_by_name}:null,createdAt:tX$($.created_at),updatedAt:tX$($.updated_at)}}class JL{db;constructor($){this.db=$}async upsert($){let Z=new Date,Q=await this.db.insertInto("git_provider_accounts").values({organization_id:$.organizationId,type:$.type,host:$.host.toLowerCase(),auth_kind:$.authKind,external_account_id:$.externalAccountId,login:$.login,avatar_url:$.avatarUrl??null,installation_id:$.installationId??null,installation_authorized_by:$.installationAuthorizedBy??null,installation_repository_ids:$.installationRepositoryIds?JSON.stringify($.installationRepositoryIds):null,credential_connection_id:null,status:"active",created_by:$.createdBy??null}).onConflict((Y)=>Y.columns(["organization_id","host","external_account_id"]).doUpdateSet({type:$.type,auth_kind:$.authKind,login:$.login,avatar_url:$.avatarUrl??null,installation_id:$.installationId??null,installation_authorized_by:$.installationAuthorizedBy??null,installation_repository_ids:$.installationRepositoryIds?JSON.stringify($.installationRepositoryIds):null,credential_connection_id:null,status:"active",updated_at:fU4`GREATEST(${Z}, git_provider_accounts.updated_at + interval '1 millisecond')`})).returningAll().executeTakeFirstOrThrow();return pr(Q)}async get($,Z){let Q=await this.db.selectFrom("git_provider_accounts").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return Q?pr(Q):null}async getUnscoped($){let Z=await this.db.selectFrom("git_provider_accounts").selectAll().where("id","=",$).executeTakeFirst();return Z?pr(Z):null}async listByOrg($){return(await this.db.selectFrom("git_provider_accounts").leftJoin("user as connector","connector.id","git_provider_accounts.created_by").selectAll("git_provider_accounts").select("connector.name as connected_by_name").where("git_provider_accounts.organization_id","=",$).orderBy("git_provider_accounts.created_at","asc").execute()).map(pr)}async findByExternalId($){let Z=await this.db.selectFrom("git_provider_accounts").selectAll().where("organization_id","=",$.organizationId).where("host","=",$.host.toLowerCase()).where("external_account_id","=",$.externalAccountId).executeTakeFirst();return Z?pr(Z):null}async setStatus($,Z,Q){await this.db.updateTable("git_provider_accounts").set({status:Q,updated_at:new Date}).where("id","=",$).where("organization_id","=",Z).execute()}async delete($,Z){return(await this.db.deleteFrom("git_provider_accounts").where("id","=",$).where("organization_id","=",Z).executeTakeFirst()).numDeletedRows>0n}}var HJ0=()=>{};class nr{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("git_provider_account_credentials").selectAll().where("account_id","=",$).executeTakeFirst();if(!Z)return null;return bU4(this.vault,Z)}async upsert($){let Z=new Date,Q=await this.vault.encrypt($.accessToken),Y=$.refreshToken?await this.vault.encrypt($.refreshToken):null,X=$.clientSecret?await this.vault.encrypt($.clientSecret):null;await this.db.insertInto("git_provider_account_credentials").values({account_id:$.connectionId,access_token:Q,refresh_token:Y,scope:$.scope,expires_at:$.expiresAt,client_id:$.clientId,client_secret:X,token_endpoint:$.tokenEndpoint}).onConflict((J)=>J.column("account_id").doUpdateSet({access_token:Q,refresh_token:Y,scope:$.scope,expires_at:$.expiresAt,client_id:$.clientId,client_secret:X,token_endpoint:$.tokenEndpoint,updated_at:Z})).execute()}async delete($){await this.db.deleteFrom("git_provider_account_credentials").where("account_id","=",$).execute()}isExpired($,Z=0){if(!$.expiresAt)return!1;let Y=($.expiresAt instanceof Date?$.expiresAt:new Date($.expiresAt)).getTime();if(Number.isNaN(Y))return!0;return Y-Z<Date.now()}}async function bU4($,Z){try{let Q=await $.decrypt(Z.access_token),Y=Z.refresh_token?await $.decrypt(Z.refresh_token):null,X=Z.client_secret?await $.decrypt(Z.client_secret):null;return{id:Z.account_id,connectionId:Z.account_id,accessToken:Q,refreshToken:Y,scope:Z.scope,expiresAt:Z.expires_at,createdAt:Z.created_at,updatedAt:Z.updated_at,clientId:Z.client_id,clientSecret:X,tokenEndpoint:Z.token_endpoint}}catch(Q){return console.warn("[GitProviderAccountCredential] failed to decrypt credential row",{accountId:Z.account_id,message:Q instanceof Error?Q.message:String(Q)}),null}}import{sql as xU4}from"kysely";function oX$($){return $ instanceof Date?$.toISOString():String($)}function Eu($){return{id:$.id,organizationId:$.organization_id,accountId:$.account_id,provider:$.provider,host:$.host,path:$.path,externalId:$.external_id,defaultBranch:$.default_branch,webUrl:$.web_url,visibility:$.visibility,legacyConnectionId:$.legacy_connection_id,createdAt:oX$($.created_at),updatedAt:oX$($.updated_at)}}function HN($){return{provider:$.provider,host:$.host,path:$.path}}class tr{db;constructor($){this.db=$}async upsert($){let Z=$.ref.host.toLowerCase(),Q=await this.findByRef($.organizationId,$.ref);if(Q){let X=await this.db.updateTable("repositories").set({path:$.ref.path,provider:$.ref.provider,web_url:TX({...$.ref,host:Z}),...$.accountId!==void 0?{account_id:$.accountId}:{},...$.externalId!==void 0?{external_id:$.externalId}:{},...$.defaultBranch!==void 0?{default_branch:$.defaultBranch}:{},...$.visibility!==void 0?{visibility:$.visibility}:{},...$.legacyConnectionId!==void 0?{legacy_connection_id:$.legacyConnectionId}:{},updated_at:new Date}).where("id","=",Q.id).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return Eu(X)}let Y=await this.db.insertInto("repositories").values({organization_id:$.organizationId,account_id:$.accountId??null,provider:$.ref.provider,host:Z,path:$.ref.path,external_id:$.externalId??null,default_branch:$.defaultBranch??null,web_url:TX({...$.ref,host:Z}),visibility:$.visibility??null,legacy_connection_id:$.legacyConnectionId??null,created_by:$.createdBy??null}).returningAll().executeTakeFirstOrThrow();return Eu(Y)}async get($,Z){let Q=await this.db.selectFrom("repositories").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return Q?Eu(Q):null}async getUnscoped($){let Z=await this.db.selectFrom("repositories").selectAll().where("id","=",$).executeTakeFirst();return Z?Eu(Z):null}async findByRef($,Z){let Q=await this.db.selectFrom("repositories").selectAll().where("organization_id","=",$).where("host","=",Z.host.toLowerCase()).where(xU4`lower(path)`,"=",Z.path.toLowerCase()).executeTakeFirst();return Q?Eu(Q):null}async listByOrg($,Z){let Q=this.db.selectFrom("repositories").selectAll().where("organization_id","=",$);if(Z?.accountId)Q=Q.where("account_id","=",Z.accountId);return(await Q.orderBy("path","asc").execute()).map(Eu)}async delete($,Z){try{return(await this.db.deleteFrom("repositories").where("id","=",$).where("organization_id","=",Z).executeTakeFirst()).numDeletedRows>0n}catch(Q){if(Q instanceof Error&&"constraint"in Q&&Q.constraint==="org_repo_sync_source_present")throw Error("Remove this repository's sync configurations before unlinking it");throw Q}}}var zu=O(()=>{Q6()});function sX$($){return Bun.hash($).toString(36)}function yU4($){for(let[Z,Q]of GL)if(Q.expiresAt<=$)GL.delete(Z);while(GL.size>=512){let Z=GL.keys().next();if(Z.done)break;GL.delete(Z.value)}}function Rs0($,Z,Q,Y=Date.now()){yU4(Y),GL.set(sX$($),{owner:Z,expiresAt:Q})}function Pu($,Z=Date.now()){let Q=sX$($),Y=GL.get(Q);if(!Y)return"unknown";if(Y.expiresAt<=Z)return GL.delete(Q),"unknown";return Y.owner}var rX$="app",Ts0="user",GL;var Au=O(()=>{GL=new Map});function WL($=process.env){let Z=$.GITHUB_APP_ID?.trim(),Q=$.GITHUB_APP_PRIVATE_KEY?.trim(),Y=$.GITHUB_APP_CLIENT_ID?.trim(),X=$.GITHUB_APP_CLIENT_SECRET?.trim(),J=$.GITHUB_APP_SLUG?.trim();if(!Z||!Q||!Y||!X||!J)return null;return{appId:Z,privateKeyPem:Q.replace(/\\n/g,`
@@ -2990,7 +2990,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
2990
2990
  ${J.join(`
2991
2991
  `)}`:X}function Fq6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
2992
2992
  `)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var ls$=200,$q6=12,Qq6,Xq6=300,VM0=3;var MG1=O(()=>{gZ();u$();IM0();Qq6={aheadBy:0,behindBy:0,files:[]}});function Nq6($){if(!$||$.includes(".."))return!1;return Uq6.test($)}function ds$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Nq6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function ms$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Uq6;var is$=O(()=>{Uq6=/^[\w./@-]+$/});function S10($,Z){let Q=$?.githubRepo;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function ns$($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new _w(yZ);let J=await jL($.storage,X,Y);if(J&&await BN($.storage,J)){let F=await lH($,J,{forceRefresh:!0}).catch((U)=>{throw new _w(U instanceof Error?U.message:yZ)});await ps$($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new _w("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Su({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:yZ;throw new _w(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await cH(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=E3$(F instanceof Error?F.message:String(F));throw U?new _w(N):F});await ps$($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function ps$($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Ed($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await cL(K,Bq6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Bq6=10485760,_w;var IG1=O(()=>{KG();jM0();wa();hJ0();Bs();gZ();_w=class _w extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Oq6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Dq6.test(Z))throw Error(`Invalid branch name: ${$}`)}function fb($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(wq6)])}async function Eq6($,Z){let Q=$.var.studioContext,Y=rH(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=$f(G?.metadata?.runtime);if(W)return W;let K=Az0(Z.virtualMcpMetadata),H=K==="cms"?await GG1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)ja(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function zq6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await gY($.var.studioContext)}catch{return null}}function bb($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Rd($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=S10(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=i(Y);return Vu(Y,J.id,X)}function VG1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=nX$(Z);if(Y!==void 0)return $.json({error:Q},429,{...E5,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof j6)return $.json({error:Q},409,E5);let X=UG(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,E5)}return $.json({error:Q},502,E5)}async function rs$($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function ss$($){try{let Z=await Rd($),Q=await kM0(Z,$.get("vmClaim").branch);return $.json(Q,200,E5)}catch(Z){return VG1($,Z)}}function C10($,Z){let Y=(_M0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return _M0.set($,X),X.finally(()=>{if(_M0.get($)===X)_M0.delete($)}),Y}async function z7($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,E5);let Y=Q?.runner??bb($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...E5}})}}let D=await B.text(),L=Q?.redactRepoDir?Pq6(D):D,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...E5}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let D=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${D}`},502)}}function Pq6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function vM0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function Aq6($){return as$.includes($)}var Dq6,ts$=524288,Lq6=65536,wq6=1e4,os$=2000,jq6,_M0,E5,as$,es$=()=>{let $=new e0;$.use("/:virtualMcpId/:branch/*",jq6),$.post("/:virtualMcpId/:branch/write",(Q)=>z7(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:fb(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>z7(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:fb(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>z7(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:fb(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>z7(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:fb(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>z7(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:fb(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>z7(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:fb(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>z7(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:fb(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return z7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return z7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>z7(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>z7(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!Aq6(Y))return Q.json({error:`step must be one of: ${as$.join(", ")}`},400);let X=Q.get("vmClaim"),J=await GG1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await zq6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,E5);if(Y==="start"){let G=i(Q.var.studioContext),W=Kl(X.virtualMcpMetadata);try{await jz0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return z7(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return UB(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return ar$(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return ss$(Q);return Z(Q)});let Z=(Q)=>z7(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(os$)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return ss$(Q);return z7(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(os$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await Rd(Q),G=await SM0(J,Y.branch,X.base);return Q.json(G,200,E5)}catch(X){return VG1(Q,X)}return z7(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,E5);let Y=bb(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return C10(X,async()=>{try{await WG1(W,Y,X);let K=S10(J,G);if(K)await ns$(W,Y,X,K)}catch(K){if(K instanceof _w)return Q.json({error:K.message},403,E5);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,E5)}return z7(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return C10(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,E5);try{let G=await Rd(Q);return await cs$(G,Y.branch,J),Q.json({ok:!0},200,E5)}catch(G){let W=UG(G)===409||G instanceof j6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,E5)}});return C10(Y.claimName,()=>z7(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return C10(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await Rd(Q),H=W.base??await K.getDefaultBranch();return await CM0(K,Y.branch,H),Q.json({ok:!0},200,E5)}catch(W){return VG1(Q,W)}});let X=bb(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return C10(J,async()=>{try{await WG1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,E5)}return z7(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",x5({maxSize:ts$,onError:(Q)=>Q.json({error:"Payload too large"},413,E5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=bb(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=FG1(F)&&N?[F,U]:X?await Promise.all([vM0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),vM0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Rd(Q);return Promise.all([kM0(w,Y.branch),SM0(w,Y.branch)])})();await EW(K,i(K).id,"suggesting a commit message");let L=await Ys$(K,B,D);return Q.json(L,200,E5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E5);return Q.json({error:F},502,E5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",x5({maxSize:ts$,onError:(Q)=>Q.json({error:"Payload too large"},413,E5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=bb(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=FG1(F)&&N?[F,U]:X?await Promise.all([vM0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),vM0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Rd(Q);return Promise.all([kM0(w,Y.branch),SM0(w,Y.branch)])})();await EW(K,i(K).id,"judging whether a change needs review");let L=await Js$(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,E5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E5);return Q.json({error:F},502,E5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=bb(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return rs$(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",x5({maxSize:Lq6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=bb(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=ds$(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=ms$(J,W.resolveType);return rs$(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var $a$=O(()=>{y$();PK();jd();JG1();Ba();or$();LG();Hl();rr$();sW();WH();sr$();er$();Q$1();Oa();BG1();Gs$();gZ();h6();MG1();is$();IG1();Dq6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;jq6=wM0(async($,Z)=>{let Q=$.var.studioContext;try{p(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=c0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=i(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{Oq6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=gs({orgId:X.id,virtualMcpId:J,branch:G}),H=await f01(Q,G),F=b01(H,Y),U=tr$({userId:F,projectRef:K}),N=W.metadata??null,B=await Eq6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let D;try{D=await gY(Q)}catch{D=null}if(!D)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:D,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});_M0=new Map;E5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};as$=["clone","install","start"]});function Za$($,Z,Q){let Y=kG1.get($);if(!Y)Y={pending:null,running:!1},kG1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)Rq6($,Y);return J}async function Rq6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await qq6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)kG1.delete($)}}async function qq6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Td(Z,Q),W=await Z.listDecofileEntries(G,Y),K=TG1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let D=RG1(K,N),L=`${JSON.stringify(B,null,2)}
2993
- `;await ys$(Z.repo,L);let w=D[0]??`${MM0(Y)}/${LG1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of RG1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await gs$(Z,F.values(),X),{decofile:B,skipped:D}=q10(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:yW(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:Mq6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof j6)||J>=Tq6-1)throw N;await P$(T7(2000,200,J,2,0.5))}}}function Mq6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return W01(Y,$.deps.coAuthor)}var Tq6=3,kG1;var Qa$=O(()=>{NE0();zM0();Q6();u$();gZ();IM0();kG1=new Map});import{createHmac as Ya$,randomBytes as Iq6,timingSafeEqual as Vq6}from"crypto";function Xa$(){if(fM0)return fM0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return fM0=$?Buffer.from($):Iq6(32),fM0}function SG1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+kq6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Ya$("sha256",Xa$()).update(Y).digest("base64url");return`${Y}.${X}`}function Ja$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Ya$("sha256",Xa$()).update(Y).digest("base64url"));if(X.length!==J.length||!Vq6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var kq6=21600000,fM0=null;var Ga$=O(()=>{Z$()});import{z as qd}from"zod";function Cq6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Sq6.test($)}function Ua$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function _10($){let Z=$.get("decofileScope");return Vu($.var.studioContext,Z.organizationId,Z.githubRepo)}function v10($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof j6)return $.json({error:Q},409);let Y=UG(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function Na$(){let $=new e0;return $.use("/:virtualMcpId/:branch",Fa$),$.use("/:virtualMcpId/:branch/*",Fa$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await _10(Z),X=await hs$(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(X.decofile,200,{...J,"content-type":"application/json"});let G=SG1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(Ua$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return v10(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await _10(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return v10(Z,X)}}),$.patch("/:virtualMcpId/:branch",vq6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=fq6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{EM0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(OG1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await _10(Z),W=await Za$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Ed(Y)},J),K=SG1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:Ua$(Z)})}catch(G){return v10(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await _10(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(UG(W)!==409)throw W;await CM0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(UG(G)===409)return Z.json({error:"merge-conflict"},409);if(UG(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return v10(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await _10(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(UG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return v10(Z,Y)}}),$}var Sq6,Wa$=500,Ka$=1048576,Ha$=1024,_q6=8388608,vq6,fq6,Fa$;var Ba$=O(()=>{Y$1();zM0();y$();PK();JG1();jM0();IG1();gZ();Qa$();Ga$();MG1();IM0();WH();Sq6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;vq6=x5({maxSize:_q6,onError:($)=>$.json({error:"Payload too large"},413)}),fq6=qd.object({set:qd.record(qd.string(),qd.unknown()).optional(),delete:qd.array(qd.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Wa$,{message:`Patch cannot touch more than ${Wa$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Ka$),{message:`Each block must be at most ${Ka$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Ha$),{message:`Each block key must be at most ${Ha$} characters`}),Fa$=wM0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!Cq6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Ja$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await m3(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Pz0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=S10(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var Da$=($)=>{let Z=new e0;if(Z.use("*",rc),Z.use("*",dp$),Z.route("/",Iq0()),Z.route("/",qn$()),Z.route("/",Un$()),Z.route("/",br$()),Z.route("/",Mr$()),Z.route("/",_r$()),Z.route("/",Vr$()),Z.route("/",DM0()),Z.route("/tools",cr$()),Z.route("/",hr$()),Z.route("/",Xr$({kvStorage:$.kvStorage})),Z.route("/",Qr$()),Z.route("/fs",wr$({getConnection:$.getNatsConnection})),Z.route("/sandbox",es$()),Z.route("/decofile",Na$()),Z.route("/",Tr$()),Z.route("/",Er$()),Z.route("/deco-sites",kq0()),Z.route("/hosting",$n$()),Z.route("/monitor",Wn$()),Z.route("/sso",Aq0()),Z.route("/",OM0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",op$()),$.mountDevAssets)Z.route("/dev-assets",vq0({orgFromPath:!0}));return 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),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ed$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Pr$()),Z.route("/mcp",OA0()),Z.route("/mcp/self",UM0()),Z.route("/mcp",jA0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Oa$=O(()=>{y$();mp$();Uq0();rp$();MJ1();Zn$();Kn$();fq0();Ab();PJ1();CJ1();Yr$();Jr$();jr$();zr$();Fe();OJ1();EA0();r31();Ar$();Rr$();Ir$();kr$();e31();xr$();ur$();$G1();dr$();ZG1();LA0();$a$();Ba$()});function bq6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var xq6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},La$=()=>{let $=new e0;return $.use("*",xq6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await eX(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:bq6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var wa$=O(()=>{y$();Z$();BR0()});import{z as V1}from"zod";function xF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function pq6($){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 nq6($,Z,Q){try{return JSON.parse($)}catch{throw new za$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function tq6($){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:nq6(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 oq6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?TJ(Q.function.parameters):TJ({type:"object",properties:{}});return[Q.function.name,X$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function rq6($){if(!$)return;return{openai:{response_format:$}}}function sq6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function ja$($,Z,Q,Y,X,J){let G={model:$,messages:Z,tools:Q,temperature:Y.temperature,maxTokens: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 Ea$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var yq6=256,gq6,hq6,uq6,lq6,cq6,dq6,mq6,iq6,za$,Pa$,Aa$;var Ta$=O(()=>{v4();y$();jd();HK();gq6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),hq6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),uq6=V1.discriminatedUnion("role",[V1.object({role:V1.literal("system"),content:V1.string(),name:V1.string().optional()}),V1.object({role:V1.literal("user"),content:V1.union([V1.string(),V1.array(V1.union([V1.object({type:V1.literal("text"),text:V1.string()}),V1.object({type:V1.literal("image_url"),image_url:V1.object({url:V1.string(),detail:V1.string().optional()})})]))]),name:V1.string().optional()}),V1.object({role:V1.literal("assistant"),content:V1.string().nullable().optional(),name:V1.string().optional(),tool_calls:V1.array(hq6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),lq6=V1.object({type:V1.literal("text")}),cq6=V1.object({type:V1.literal("json_object")}),dq6=V1.object({type:V1.literal("json_schema"),json_schema:V1.object({name:V1.string(),description:V1.string().optional(),schema:V1.record(V1.string(),V1.unknown()),strict:V1.boolean().optional()})}),mq6=V1.union([lq6,cq6,dq6]),iq6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(uq6),stream:V1.boolean().optional().default(!1),temperature:V1.number().min(0).max(2).optional(),max_tokens:V1.number().positive().optional(),top_p:V1.number().min(0).max(1).optional(),frequency_penalty:V1.number().min(-2).max(2).optional(),presence_penalty:V1.number().min(-2).max(2).optional(),stop:V1.union([V1.string(),V1.array(V1.string())]).optional(),tools:V1.array(gq6).optional(),tool_choice:V1.union([V1.literal("auto"),V1.literal("none"),V1.literal("required"),V1.object({type:V1.literal("function"),function:V1.object({name:V1.string()})})]).optional(),response_format:mq6.optional(),user:V1.string().optional()});za$=class za$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Pa$=new e0;Pa$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(xF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(xF("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(xF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=iq6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(xF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=pq6(J.model);if(!G)return $.json(xF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>cj(E.providerId));if(!j)return $.json(xF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(xF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=tq6(J.messages),N=J.tools?oq6(J.tools):void 0,B=rq6(J.response_format),D=sq6(),L=Math.floor(Date.now()/1000);if(J.stream)return UB($,async(w)=>{let j=ja$(F,U,N,J,B,$.req.raw.signal);try{let E=hL(j),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of E.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=yq6)await q()}else if(k.type==="tool-call"){await q();let M=P++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:Ea$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await q(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=ja$(F,U,N,J,B,$.req.raw.signal),j=await yL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:Ea$(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(xF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(xF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(xF(X.message,"server_error"),500)}});Aa$=Pa$});function aq6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Ra$(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!p7(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||i5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(kY$(U)!==J)continue;if(!aq6(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 qa$=O(()=>{y$();fH()});var Ia$;var Ma$=O(()=>{Ia$={name:"decocms",version:"4.367.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 migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","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 ZM6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??$M6}}var Va$,$M6="https://ph.studio.decocms.com",ka$;var Sa$=O(()=>{y$();ho();Rf();R5();Z$();ZJ1();Ma$();Va$=new e0;Va$.get("/",($)=>{let Z={version:Ia$.version,theme:q6$(),...bW().logo&&{logo:bW().logo},...yN()&&{internalUrl:Wg1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:mi$(),posthog:ZM6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:wB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ka$=Va$});function Md($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function CG1($){return(Md($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function _a$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Md($))}&sz=${Z}`}function Ca$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function va$($){let{brand:Z,domain:Q,score:Y,verdict:X}=$,J=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=X?.trim()?Ca$(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):Ca$(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var xb,QM6,YM6,XM6,JM6,fa$;var ba$=O(()=>{xb=m0.enum(["good","bad","neutral"]),QM6=m0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},m0.object({kind:m0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:m0.coerce.string().optional(),tone:xb.optional(),muted:m0.boolean().optional(),delta:m0.coerce.string().optional(),deltaDir:m0.enum(["up","down","neutral"]).optional(),points:m0.array(m0.coerce.number()).optional(),label:m0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),YM6=m0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},m0.array(QM6)),XM6={key:m0.coerce.string(),title:m0.coerce.string(),eyebrow:m0.coerce.string().optional(),headline:m0.coerce.string(),annotation:m0.coerce.string().optional(),methodology:m0.coerce.string().optional(),sources:m0.array(m0.object({name:m0.coerce.string(),logoUrl:m0.coerce.string()})).optional()},JM6=m0.discriminatedUnion("template",[m0.object({template:m0.literal("cover"),score:m0.object({value:m0.coerce.number(),max:m0.coerce.number().optional(),grade:m0.coerce.string().optional(),label:m0.coerce.string().optional()}).optional(),brandImage:m0.coerce.string().optional(),screenshot:m0.coerce.string().optional(),mobileScreenshot:m0.coerce.string().optional()}),m0.object({template:m0.literal("cta"),ctaUrl:m0.coerce.string().optional(),ctaLabel:m0.coerce.string().optional(),bullets:m0.array(m0.coerce.string()).optional()}),m0.object({template:m0.literal("series"),points:m0.array(m0.coerce.number()).min(2),xLabels:m0.array(m0.coerce.string()).min(1),unit:m0.coerce.string().optional(),callout:m0.object({index:m0.coerce.number(),value:m0.coerce.string(),tone:xb.optional()})}),m0.object({template:m0.literal("threshold"),value:m0.coerce.string().default(""),metricLabel:m0.coerce.string().optional(),ratio:m0.coerce.number(),thresholdRatio:m0.coerce.number().optional(),thresholdLabel:m0.coerce.string().default(""),tone:xb.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:xb.optional()})).min(1)}),m0.object({template:m0.literal("bars"),items:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),ratio:m0.coerce.number(),tone:xb.optional()})).min(1)}),m0.object({template:m0.literal("gauges"),gauges:m0.array(m0.object({label:m0.coerce.string(),value:m0.coerce.string(),status:m0.enum(["good","warn","bad"]).catch("warn"),caption:m0.coerce.string().optional(),ratio:m0.coerce.number().optional()})).min(1)}),m0.object({template:m0.literal("checklist"),checks:m0.array(m0.object({label:m0.coerce.string(),status:m0.enum(["pass","fail","warn"]).catch("fail"),value:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("table"),columns:m0.array(m0.object({label:m0.coerce.string(),align:m0.enum(["left","right"]).optional()})).min(1),rows:m0.array(YM6).min(1),highlightRow:m0.coerce.number().optional()}),m0.object({template:m0.literal("products"),products:m0.array(m0.object({name:m0.coerce.string(),price:m0.coerce.string().optional(),image:m0.coerce.string().optional(),url:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("list"),entries:m0.array(m0.object({label:m0.coerce.string(),severity:m0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:m0.coerce.number().optional()}),m0.object({template:m0.literal("keywords"),volumeLabel:m0.coerce.string().optional(),keywords:m0.array(m0.object({term:m0.coerce.string(),volume:m0.coerce.string(),position:m0.coerce.number().catch(0)})).min(1)}),m0.object({template:m0.literal("competitor"),metricLabel:m0.coerce.string().optional(),competitors:m0.array(m0.object({name:m0.coerce.string(),value:m0.coerce.string(),tone:xb.optional(),isYou:m0.boolean().optional()})).min(1)}),m0.object({template:m0.literal("scorecard"),rivalLabel:m0.coerce.string().optional(),dimensions:m0.array(m0.object({label:m0.coerce.string(),you:m0.coerce.string(),rival:m0.coerce.string().optional(),rivalName:m0.coerce.string().optional(),tone:xb.optional()})).min(1)})]),fa$=m0.object({...XM6,template:JM6})});function bM0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=fa$.safeParse(X.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:X.section_type,position:X.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((X)=>X!==null),Y=Q.filter((X)=>X.template.template!=="cover"&&X.template.template!=="cta").map((X)=>({key:X.key,title:X.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Y},slides:Q},drops:Z}}var _G1=O(()=>{ba$()});import{join as xa$}from"path";async function WM6($){try{let Z=await fetch(`${RH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(GM6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=bM0(Q);if(!Y.slides.length)return null;let X=Y.slides.find((W)=>W.template.template==="cover"),J=X?.template,G=J&&J.template==="cover"?J:void 0;return{brand:Y.meta.brand?.trim()||CG1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function N3($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function KM6($,Z){let Q=Md($),Y=Z?.brand?.trim()||CG1(Q),X=_a$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=va$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${N3(W)}</title>`,`<meta name="description" content="${N3(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="${N3(W)}" />`,`<meta property="og:description" content="${N3(K)}" />`,`<meta property="og:url" content="${N3(G)}" />`,`<meta property="og:image" content="${N3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${N3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${N3(W)}" />`,`<meta name="twitter:description" content="${N3(K)}" />`,`<meta name="twitter:image" content="${N3(H)}" />`,`<meta name="twitter:image:alt" content="${N3(F)}" />`,`<link rel="canonical" href="${N3(G)}" />`,`<link rel="icon" href="${N3(X)}" sizes="any" />`].join(`
2993
+ `;await ys$(Z.repo,L);let w=D[0]??`${MM0(Y)}/${LG1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of RG1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await gs$(Z,F.values(),X),{decofile:B,skipped:D}=q10(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:yW(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:Mq6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof j6)||J>=Tq6-1)throw N;await P$(T7(2000,200,J,2,0.5))}}}function Mq6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return W01(Y,$.deps.coAuthor)}var Tq6=3,kG1;var Qa$=O(()=>{NE0();zM0();Q6();u$();gZ();IM0();kG1=new Map});import{createHmac as Ya$,randomBytes as Iq6,timingSafeEqual as Vq6}from"crypto";function Xa$(){if(fM0)return fM0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return fM0=$?Buffer.from($):Iq6(32),fM0}function SG1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+kq6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Ya$("sha256",Xa$()).update(Y).digest("base64url");return`${Y}.${X}`}function Ja$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Ya$("sha256",Xa$()).update(Y).digest("base64url"));if(X.length!==J.length||!Vq6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var kq6=21600000,fM0=null;var Ga$=O(()=>{Z$()});import{z as qd}from"zod";function Cq6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Sq6.test($)}function Ua$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function _10($){let Z=$.get("decofileScope");return Vu($.var.studioContext,Z.organizationId,Z.githubRepo)}function v10($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof j6)return $.json({error:Q},409);let Y=UG(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function Na$(){let $=new e0;return $.use("/:virtualMcpId/:branch",Fa$),$.use("/:virtualMcpId/:branch/*",Fa$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await _10(Z),X=await hs$(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(X.decofile,200,{...J,"content-type":"application/json"});let G=SG1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(Ua$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return v10(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await _10(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return v10(Z,X)}}),$.patch("/:virtualMcpId/:branch",vq6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=fq6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{EM0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(OG1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await _10(Z),W=await Za$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Ed(Y)},J),K=SG1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:Ua$(Z)})}catch(G){return v10(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await _10(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(UG(W)!==409)throw W;await CM0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(UG(G)===409)return Z.json({error:"merge-conflict"},409);if(UG(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return v10(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await _10(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(UG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return v10(Z,Y)}}),$}var Sq6,Wa$=500,Ka$=1048576,Ha$=1024,_q6=8388608,vq6,fq6,Fa$;var Ba$=O(()=>{Y$1();zM0();y$();PK();JG1();jM0();IG1();gZ();Qa$();Ga$();MG1();IM0();WH();Sq6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;vq6=x5({maxSize:_q6,onError:($)=>$.json({error:"Payload too large"},413)}),fq6=qd.object({set:qd.record(qd.string(),qd.unknown()).optional(),delete:qd.array(qd.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Wa$,{message:`Patch cannot touch more than ${Wa$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Ka$),{message:`Each block must be at most ${Ka$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Ha$),{message:`Each block key must be at most ${Ha$} characters`}),Fa$=wM0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!Cq6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Ja$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await m3(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Pz0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=S10(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var Da$=($)=>{let Z=new e0;if(Z.use("*",rc),Z.use("*",dp$),Z.route("/",Iq0()),Z.route("/",qn$()),Z.route("/",Un$()),Z.route("/",br$()),Z.route("/",Mr$()),Z.route("/",_r$()),Z.route("/",Vr$()),Z.route("/",DM0()),Z.route("/tools",cr$()),Z.route("/",hr$()),Z.route("/",Xr$({kvStorage:$.kvStorage})),Z.route("/",Qr$()),Z.route("/fs",wr$({getConnection:$.getNatsConnection})),Z.route("/sandbox",es$()),Z.route("/decofile",Na$()),Z.route("/",Tr$()),Z.route("/",Er$()),Z.route("/deco-sites",kq0()),Z.route("/hosting",$n$()),Z.route("/monitor",Wn$()),Z.route("/sso",Aq0()),Z.route("/",OM0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",op$()),$.mountDevAssets)Z.route("/dev-assets",vq0({orgFromPath:!0}));return 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),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ed$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",Pr$()),Z.route("/mcp",OA0()),Z.route("/mcp/self",UM0()),Z.route("/mcp",jA0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Oa$=O(()=>{y$();mp$();Uq0();rp$();MJ1();Zn$();Kn$();fq0();Ab();PJ1();CJ1();Yr$();Jr$();jr$();zr$();Fe();OJ1();EA0();r31();Ar$();Rr$();Ir$();kr$();e31();xr$();ur$();$G1();dr$();ZG1();LA0();$a$();Ba$()});function bq6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var xq6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},La$=()=>{let $=new e0;return $.use("*",xq6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await eX(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:bq6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var wa$=O(()=>{y$();Z$();BR0()});import{z as V1}from"zod";function xF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function pq6($){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 nq6($,Z,Q){try{return JSON.parse($)}catch{throw new za$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function tq6($){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:nq6(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 oq6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?TJ(Q.function.parameters):TJ({type:"object",properties:{}});return[Q.function.name,X$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function rq6($){if(!$)return;return{openai:{response_format:$}}}function sq6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function ja$($,Z,Q,Y,X,J){let G={model:$,messages:Z,tools:Q,temperature:Y.temperature,maxTokens: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 Ea$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var yq6=256,gq6,hq6,uq6,lq6,cq6,dq6,mq6,iq6,za$,Pa$,Aa$;var Ta$=O(()=>{v4();y$();jd();HK();gq6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),hq6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),uq6=V1.discriminatedUnion("role",[V1.object({role:V1.literal("system"),content:V1.string(),name:V1.string().optional()}),V1.object({role:V1.literal("user"),content:V1.union([V1.string(),V1.array(V1.union([V1.object({type:V1.literal("text"),text:V1.string()}),V1.object({type:V1.literal("image_url"),image_url:V1.object({url:V1.string(),detail:V1.string().optional()})})]))]),name:V1.string().optional()}),V1.object({role:V1.literal("assistant"),content:V1.string().nullable().optional(),name:V1.string().optional(),tool_calls:V1.array(hq6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),lq6=V1.object({type:V1.literal("text")}),cq6=V1.object({type:V1.literal("json_object")}),dq6=V1.object({type:V1.literal("json_schema"),json_schema:V1.object({name:V1.string(),description:V1.string().optional(),schema:V1.record(V1.string(),V1.unknown()),strict:V1.boolean().optional()})}),mq6=V1.union([lq6,cq6,dq6]),iq6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(uq6),stream:V1.boolean().optional().default(!1),temperature:V1.number().min(0).max(2).optional(),max_tokens:V1.number().positive().optional(),top_p:V1.number().min(0).max(1).optional(),frequency_penalty:V1.number().min(-2).max(2).optional(),presence_penalty:V1.number().min(-2).max(2).optional(),stop:V1.union([V1.string(),V1.array(V1.string())]).optional(),tools:V1.array(gq6).optional(),tool_choice:V1.union([V1.literal("auto"),V1.literal("none"),V1.literal("required"),V1.object({type:V1.literal("function"),function:V1.object({name:V1.string()})})]).optional(),response_format:mq6.optional(),user:V1.string().optional()});za$=class za$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Pa$=new e0;Pa$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(xF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(xF("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(xF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=iq6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(xF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=pq6(J.model);if(!G)return $.json(xF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>cj(E.providerId));if(!j)return $.json(xF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(xF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=tq6(J.messages),N=J.tools?oq6(J.tools):void 0,B=rq6(J.response_format),D=sq6(),L=Math.floor(Date.now()/1000);if(J.stream)return UB($,async(w)=>{let j=ja$(F,U,N,J,B,$.req.raw.signal);try{let E=hL(j),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of E.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=yq6)await q()}else if(k.type==="tool-call"){await q();let M=P++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:Ea$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await q(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=ja$(F,U,N,J,B,$.req.raw.signal),j=await yL(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:Ea$(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(xF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(xF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(xF(X.message,"server_error"),500)}});Aa$=Pa$});function aq6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Ra$(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!p7(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||i5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(kY$(U)!==J)continue;if(!aq6(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 qa$=O(()=>{y$();fH()});var Ia$;var Ma$=O(()=>{Ia$={name:"decocms",version:"4.367.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","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 ZM6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??$M6}}var Va$,$M6="https://ph.studio.decocms.com",ka$;var Sa$=O(()=>{y$();ho();Rf();R5();Z$();ZJ1();Ma$();Va$=new e0;Va$.get("/",($)=>{let Z={version:Ia$.version,theme:q6$(),...bW().logo&&{logo:bW().logo},...yN()&&{internalUrl:Wg1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:mi$(),posthog:ZM6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:wB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ka$=Va$});function Md($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function CG1($){return(Md($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function _a$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Md($))}&sz=${Z}`}function Ca$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function va$($){let{brand:Z,domain:Q,score:Y,verdict:X}=$,J=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=X?.trim()?Ca$(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):Ca$(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var xb,QM6,YM6,XM6,JM6,fa$;var ba$=O(()=>{xb=m0.enum(["good","bad","neutral"]),QM6=m0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},m0.object({kind:m0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:m0.coerce.string().optional(),tone:xb.optional(),muted:m0.boolean().optional(),delta:m0.coerce.string().optional(),deltaDir:m0.enum(["up","down","neutral"]).optional(),points:m0.array(m0.coerce.number()).optional(),label:m0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),YM6=m0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},m0.array(QM6)),XM6={key:m0.coerce.string(),title:m0.coerce.string(),eyebrow:m0.coerce.string().optional(),headline:m0.coerce.string(),annotation:m0.coerce.string().optional(),methodology:m0.coerce.string().optional(),sources:m0.array(m0.object({name:m0.coerce.string(),logoUrl:m0.coerce.string()})).optional()},JM6=m0.discriminatedUnion("template",[m0.object({template:m0.literal("cover"),score:m0.object({value:m0.coerce.number(),max:m0.coerce.number().optional(),grade:m0.coerce.string().optional(),label:m0.coerce.string().optional()}).optional(),brandImage:m0.coerce.string().optional(),screenshot:m0.coerce.string().optional(),mobileScreenshot:m0.coerce.string().optional()}),m0.object({template:m0.literal("cta"),ctaUrl:m0.coerce.string().optional(),ctaLabel:m0.coerce.string().optional(),bullets:m0.array(m0.coerce.string()).optional()}),m0.object({template:m0.literal("series"),points:m0.array(m0.coerce.number()).min(2),xLabels:m0.array(m0.coerce.string()).min(1),unit:m0.coerce.string().optional(),callout:m0.object({index:m0.coerce.number(),value:m0.coerce.string(),tone:xb.optional()})}),m0.object({template:m0.literal("threshold"),value:m0.coerce.string().default(""),metricLabel:m0.coerce.string().optional(),ratio:m0.coerce.number(),thresholdRatio:m0.coerce.number().optional(),thresholdLabel:m0.coerce.string().default(""),tone:xb.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:xb.optional()})).min(1)}),m0.object({template:m0.literal("bars"),items:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),ratio:m0.coerce.number(),tone:xb.optional()})).min(1)}),m0.object({template:m0.literal("gauges"),gauges:m0.array(m0.object({label:m0.coerce.string(),value:m0.coerce.string(),status:m0.enum(["good","warn","bad"]).catch("warn"),caption:m0.coerce.string().optional(),ratio:m0.coerce.number().optional()})).min(1)}),m0.object({template:m0.literal("checklist"),checks:m0.array(m0.object({label:m0.coerce.string(),status:m0.enum(["pass","fail","warn"]).catch("fail"),value:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("table"),columns:m0.array(m0.object({label:m0.coerce.string(),align:m0.enum(["left","right"]).optional()})).min(1),rows:m0.array(YM6).min(1),highlightRow:m0.coerce.number().optional()}),m0.object({template:m0.literal("products"),products:m0.array(m0.object({name:m0.coerce.string(),price:m0.coerce.string().optional(),image:m0.coerce.string().optional(),url:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("list"),entries:m0.array(m0.object({label:m0.coerce.string(),severity:m0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:m0.coerce.number().optional()}),m0.object({template:m0.literal("keywords"),volumeLabel:m0.coerce.string().optional(),keywords:m0.array(m0.object({term:m0.coerce.string(),volume:m0.coerce.string(),position:m0.coerce.number().catch(0)})).min(1)}),m0.object({template:m0.literal("competitor"),metricLabel:m0.coerce.string().optional(),competitors:m0.array(m0.object({name:m0.coerce.string(),value:m0.coerce.string(),tone:xb.optional(),isYou:m0.boolean().optional()})).min(1)}),m0.object({template:m0.literal("scorecard"),rivalLabel:m0.coerce.string().optional(),dimensions:m0.array(m0.object({label:m0.coerce.string(),you:m0.coerce.string(),rival:m0.coerce.string().optional(),rivalName:m0.coerce.string().optional(),tone:xb.optional()})).min(1)})]),fa$=m0.object({...XM6,template:JM6})});function bM0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=fa$.safeParse(X.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:X.section_type,position:X.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((X)=>X!==null),Y=Q.filter((X)=>X.template.template!=="cover"&&X.template.template!=="cta").map((X)=>({key:X.key,title:X.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Y},slides:Q},drops:Z}}var _G1=O(()=>{ba$()});import{join as xa$}from"path";async function WM6($){try{let Z=await fetch(`${RH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(GM6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=bM0(Q);if(!Y.slides.length)return null;let X=Y.slides.find((W)=>W.template.template==="cover"),J=X?.template,G=J&&J.template==="cover"?J:void 0;return{brand:Y.meta.brand?.trim()||CG1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function N3($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function KM6($,Z){let Q=Md($),Y=Z?.brand?.trim()||CG1(Q),X=_a$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=va$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${N3(W)}</title>`,`<meta name="description" content="${N3(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="${N3(W)}" />`,`<meta property="og:description" content="${N3(K)}" />`,`<meta property="og:url" content="${N3(G)}" />`,`<meta property="og:image" content="${N3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${N3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${N3(W)}" />`,`<meta name="twitter:description" content="${N3(K)}" />`,`<meta name="twitter:image" content="${N3(H)}" />`,`<meta name="twitter:image:alt" content="${N3(F)}" />`,`<link rel="canonical" href="${N3(G)}" />`,`<link rel="icon" href="${N3(X)}" sizes="any" />`].join(`
2994
2994
  `)}function HM6($,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}
2995
2995
  </head>`)}function ya$($){let Z=new e0;return Z.get("/:domain/og.png",async(Q)=>{let Y=Md(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(xa$($,"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(`${RH({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(FM6)}),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("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?xa$($,"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 WM6(Md(Y)),K=KM6(Y,W);return Q.html(HM6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var GM6=2500,FM6=1e4;var ga$=O(()=>{y$();_G1();kz();Z$()});function f10($,Z){return fetch(`${RH({})}${$}`,Z)}async function UM6($,Z,Q){let Y=new URLSearchParams;if(Z)Y.set("pw",Z);if(Q)Y.set("lang",Q);let X=Y.toString()?`?${Y.toString()}`:"",J=await f10(`/api/v2/public/diagnostics/${encodeURIComponent($)}${X}`,{headers:{Accept:"application/json"}});if(J.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!J.ok)throw Error(`report read HTTP ${J.status}`);let G=await J.json(),{deck:W,drops:K}=bM0(G);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:G.scanned_at,drops:K}}var NM6,BB,ha$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},ua$;var la$=O(()=>{y$();cJ();kz();_G1();NM6=new Set(["complete","errored","terminated","unknown"]),BB=new e0;BB.use("*",async($,Z)=>{let Q=await J8.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});BB.use("/link-token/*",ha$);BB.use("/suggest",ha$);BB.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.get("reportUser"),Y=$.req.query("key")?.trim()||void 0,X=$.req.query("lang")?.trim()||void 0;try{let J=await UM6(Z,Y,X);if($.header("Cache-Control","private, no-store"),Q||!J.deck)return $.json(J);return $.json({...J,deck:{...J.deck,slides:J.deck.slides.slice(0,1)},truncated:J.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});BB.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Y=typeof Q.domain==="string"?Q.domain.trim():"";if(!Y)return $.json({error:"domain is required"},400);let X=Z?.email,J=typeof Q.distinctId==="string"&&Q.distinctId.trim()&&Q.distinctId.length<=200?Q.distinctId.trim():void 0;try{let G=await f10("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Vz({})}`},body:JSON.stringify({url:Y,...X?{email:X}:{},distinct_id:J})});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)}});BB.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await f10(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${Vz({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:NM6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});BB.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await f10(`/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)}});BB.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await f10(`/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:[]})}});ua$=BB});var BM6=1048576,vG1;var ca$=O(()=>{y$();PK();Z$();uX1();vG1=new e0;vG1.post("/webhook",x5({maxSize:BM6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=O0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!Qi$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=Yi$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await Xi$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as DM6}from"crypto";function wM6($,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 DM6(Buffer.from(X),Buffer.from(Y))}function jM6($,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 da$($){let Z=new e0;return Z.post("/webhook",x5({maxSize:OM6,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(!wM6(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"&&!LM6.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"});let N=(await C01())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=jM6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await EM6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function EM6($,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 uP$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var OM6=5242880,LM6;var ma$=O(()=>{y$();PK();sW();cZ();LM6=new Set(["check_suite","issue_comment"])});function ia$($){let Z=new ZB($.db,new OY($.encryptionKey)),Q=new e0;return Q.get("/attachments/:token",async(Y)=>{let X=Wz$(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 Z3(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 pa$=O(()=>{y$();XD();k$1();Kf()});function na$($){let Z=new ZB($.db,new OY($.encryptionKey));async function Q(X,J){let G=bg$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await KF($.db,W.organizationId);if(!K)return;if(await OR0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new e0;return Y.post("/webhook/:secret",x5({maxSize:zM6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var zM6=1048576;var ta$=O(()=>{y$();PK();XD();LR0();Pl()});import{DBOS as xM0,SchedulerMode as PM6}from"@dbos-inc/dbos-sdk";function ra$($){bG1=$}function sa$(){if(!bG1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return bG1}function aa$(){let $=sa$();return new ZB($.db,new OY($.encryptionKey))}async function RM6($,Z){try{let Q=await aa$().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await KF(sa$().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new Z3(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${oa$}m"`,K=0,H;for(let F=0;F<TM6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=xg$(N,N.changelog?.histories??[],Z);for(let D of B)if(await OR0(Y,Q,D)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function qM6($,Z){let Q=new Date($.getTime()-oa$*60000),Y=await xM0.runStep(()=>aa$().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>xM0.runStep(()=>RM6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function ea$(){if(fG1)return;fG1=xM0.registerWorkflow(qM6,{name:"jiraTriggerSweepWorkflow"}),xM0.registerScheduled(fG1,{name:"jiraTriggerSweepWorkflow",crontab:AM6,mode:PM6.ExactlyOncePerIntervalWhenActive})}var AM6="7-59/10 * * * *",oa$=15,TM6=5,bG1=null,fG1=null;var $e$=O(()=>{XD();Pl();Kf();LR0()});function Ze$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Qe$,MM6,IM6,Ye$;var Xe$=O(()=>{y$();fW();ql();yz();Qe$=new e0,MM6=["range","if-none-match","if-modified-since"],IM6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Qe$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(oc($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new J$(401,{message:"Authentication required"})}if(!Q)throw new J$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new J$(400,{message:"Missing file key"});let X=await ia(Y,Z);if(!X)throw new J$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&qX()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new J$(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 Ze$(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of MM6){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 J$(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 J$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of IM6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Ze$(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});Ye$=Qe$});var b10=_((yb)=>{var VM6=yb&&yb.__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]}),kM6=yb&&yb.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))VM6(Z,$,Q)};Object.defineProperty(yb,"__esModule",{value:!0});kM6(KJ(),yb)});var We$=_((Je$)=>{Object.defineProperty(Je$,"__esModule",{value:!0});Je$.version=void 0;Je$.version="3.4.0"});var Fe$=_((yF)=>{var SM6=yF&&yF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(yF,"__esModule",{value:!0});yF.NodeTransport=yF.VERSION=void 0;yF.nodeResolveHost=xM6;var U5=b10(),CM6=P0("net"),xG1=P0("tls"),_M6=P0("path"),Ke$=P0("fs"),vM6=SM6(P0("dns")),fM6=We$();yF.VERSION=fM6.version;var bM6="nats.js";class He${socket;version;lang;yields=[];signal=(0,U5.deferred)();closedNotification=(0,U5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=bM6,this.version=yF.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,U5.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 U5.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 U5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new U5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,U5.deferred)(),Q,Y=(0,CM6.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,U5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=U5.DataBuffer.concat(...this.yields),X=(0,U5.extractProtocolMessage)(Y);if(X!=="")try{let J=U5.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,U5.deferred)();try{if($=(0,_M6.resolve)($),!(0,Ke$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Ke$.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,U5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new U5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,U5.deferred)();try{let X=(0,xG1.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 U5.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,U5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new U5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,U5.deferred)();try{let Y=(0,xG1.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 U5.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,U5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,U5.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 xG1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,U5.render)($)}`);let Z=(0,U5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,U5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,U5.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}}yF.NodeTransport=He$;function xM6($){let Z=(0,U5.deferred)();return vM6.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 Oe$=_((De$)=>{Object.defineProperty(De$,"__esModule",{value:!0});De$.connect=yM6;var Ue$=Fe$(),Ne$=b10(),Be$=b10();function yM6($={}){if((0,Be$.hasWsProtocol)($))return Promise.reject(Be$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Ne$.setTransportFactory)({factory:()=>{return new Ue$.NodeTransport},dnsResolveFn:Ue$.nodeResolveHost}),Ne$.NatsConnectionImpl.connect($)}});var Le$=_((DB)=>{var hM6=DB&&DB.__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]}),uM6=DB&&DB.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))hM6(Z,$,Q)};Object.defineProperty(DB,"__esModule",{value:!0});DB.connect=void 0;var lM6=Oe$();Object.defineProperty(DB,"connect",{enumerable:!0,get:function(){return lM6.connect}});uM6(b10(),DB)});function ze$($){let Z=$?.connectFn??iM6,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:mM6,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 L=T7(dM6,cM6,D-1,2,0.5);await P$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?we$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=Ee$.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 iM6($){return je$.connect($)}var we$,je$,Ee$,cM6=100,dM6=3000,mM6=3000;var Pe$=O(()=>{u$();we$=V(sd(),1),je$=V(Le$(),1),Ee$=V(nF(),1)});function yG1($,Z){return`${$}.${Z}`}class gG1{cache;constructor($){this.cache=gc({ttlMs:$?.ttlMs??pM6,maxSize:$?.maxSize??nM6})}async get($,Z){return this.cache.get(yG1($,Z))??null}async set($,Z,Q){this.cache.set(yG1($,Z),Q)}async invalidate($,Z){this.cache.delete(yG1($,Z))}teardown(){this.cache.clear()}}var pM6=600000,nM6=5000;var Ae$=()=>{};function yM0($,Z){return`${$}:${Z}`}function hG1($){let Z=gc({ttlMs:$?.ttlMs??tM6,maxSize:$?.maxSize??oM6}),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(Te$,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(yM0(K,H))},set(K,H,F){Z.set(yM0(K,H),F)},invalidate(K,H){Z.delete(yM0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(Te$),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(yM0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var Te$="studio.ai-provider-keys.invalidate",tM6=30000,oM6=5000;var Re$=()=>{};class uG1{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 qe$=($)=>{let Z;return()=>Z??=$()},lG1,cG1;var Me$=O(()=>{J6();lG1=qe$(()=>Q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),cG1=qe$(()=>Q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function QI6($=ke$){return{name:FF,subjects:[`${q41}.>`],storage:RK.StorageType.File,max_age:aM6,max_bytes:$I6,max_msgs_per_subject:ZI6,discard:RK.DiscardPolicy.Old,retention:RK.RetentionPolicy.Limits,duplicate_window:eM6,num_replicas:$}}class Se${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 Ie$($){let Z=Ve$.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function GI6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,sM6().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 WI6($,Z){return $.info?.cluster?Z:1}function KI6($){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 dG1{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=QI6(X);try{await Y.streams.info(FF),await Y.streams.update(FF,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(FF,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(FF),await Y.streams.add(J);else throw G}},Q=await U8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await RK.jetstreamManager($),X=WI6($,ke$);try{await Z(Y,X)}catch(J){if(X<=1||!KI6(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:bl});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=GI6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=AT$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=I41(H,{runId:Z}),N=performance.now()-F;lG1().record(N),cG1().add(1,{"org.id":Y??"unknown"}),JI6?.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?Ie$(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((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),XI6)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 U8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Ie$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:bl}),!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=I41(Z,{runId:$,dedup:Q});lG1().record(performance.now()-X),cG1().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=PT$({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"?RK.DeliverPolicy.New:RK.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=eL($),W;try{W=await U8(async()=>{return(await Y.consumers.get(FF,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:bl})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=oP0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(iP0()).pipeThrough(pP0()).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(L){for(;;){let{done:w,value:j}=await F.read();if(w){D(),L.close();return}let E=j;if(E.kind==="done"){if(J){D(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(FF,{filter:eL($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var RK,Ve$,rM6=($)=>{let Z;return()=>Z??=$()},sM6,aM6=86400000000000,eM6=120000000000,$I6=4294967296,ke$,ZI6=500000,YI6,XI6,JI6;var Ce$=O(()=>{u$();V41();rP0();nP0();J6();Me$();RK=V(nF(),1),Ve$=V(sd(),1),sM6=rM6(()=>Q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),ke$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);YI6=process.env.STREAM_ENCODE_TRACE==="1",XI6=process.env.DECOPILOT_STREAM_TRACE==="1";JI6=YI6?new Se$:null});function gM0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,dK(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 _e$=O(()=>{T8()});class mG1{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 HI6($,Z){let Q=$.startsWith("thread:")?aW($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function ve$($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await sH($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await nu($,{threadId:X,runBranch:G?.branch}),K=HI6(W,await PE0($,X)),H=await Hs($,Q,Ja0(J)).catch(()=>null);if(!H){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}for(let F of K){let U=await H.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:H.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await PG(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 fe$=O(()=>{gZ();LG();cZ()});async function be$($,Z,Q){let Y=Z.organizationId;if(!dX(Z))return!1;if(!Df(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=gH(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await f6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),H8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var xe$=O(()=>{z4();nQ();El();JK();K9()});function LI6($){return $ instanceof SY}function wI6($,Z){return Z-$>=DI6}class iG1{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??FI6;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??NI6,Q=this.options.itemIntervalMs??UI6,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)}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()-T$1),b81);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()-OI6));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 _81(this.taskBoard,X,Y),await v81(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}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!==T$.progress||G.assigneeId!==t$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await GK(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),LI6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+BI6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==T$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),H8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!wI6(JN(Q,Z.reviewCycleStartedAt),Date.now()))return;await GF($,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(!dX(Y))return!1;let X=Y.assigneeId===t$,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 ve$(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 Al(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 be$(G,Y,W))return!0;if(await NR$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!V81(W))return!1;return await KP0(G,Y,{previewMatchesHead:k81(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await tL($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var FI6=60000,UI6=300000,NI6=50,BI6=60000,DI6=900000,OI6=120000;var ye$=O(()=>{z4();L81();fe$();WF();Qe();JK();xe$();K9();FG();x81();cZ();la();zl()});import{readdir as jI6,rm as hM0}from"fs/promises";import{join as uM0}from"path";async function lM0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-EI6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await gb($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await ge$($,X,Z);else if(!X.startsWith(".")){let J=uM0($,X),G=await gb(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await ge$(J,K,Z)}if((await gb(J)).length===0)await hM0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function ge$($,Z,Q){let Y=0,X=uM0($,Z),J=await gb(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=uM0(X,W),H=await gb(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=uM0(K,U);await hM0(B,{recursive:!0,force:!0}),Y++}}if((await gb(K)).length===0)await hM0(K,{recursive:!0,force:!0})}if((await gb(X)).length===0)await hM0(X,{recursive:!0,force:!0});return Y}async function gb($){try{return(await jI6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var EI6=30;var pG1=()=>{};import{DBOS as nG1,SchedulerMode as zI6}from"@dbos-inc/dbos-sdk";async function AI6(){let $=[yG(),hb(),uF()],Z=0;for(let Q of $)try{Z+=await lM0(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 TI6($,Z){await nG1.runStep(()=>AI6(),{name:"monitoringRetention"})}function ue$(){if(he$)return;he$=!0;let $=nG1.registerWorkflow(TI6,{name:"monitoringRetentionWorkflow"});nG1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:PI6,mode:zI6.ExactlyOncePerIntervalWhenActive})}var PI6="23 4 * * *",he$=!1;var le$=O(()=>{w3();pG1()});function ce$($){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 s7.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await cz($.db,Z,Y.role);return X.boundAuth=_X1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new mj(Q,void 0,X.boundAuth,Y.role,"self"),oL(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var de$=O(()=>{JW();vH()});function RI6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function qI6(){return{services:RI6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function II6(){for(let $ of MI6)$()}function me$($){let Z=[...tG1.logs,$];tG1={...tG1,logs:Z.length>500?Z.slice(-500):Z},II6()}function oG1(){return VI6}var tG1,MI6,VI6=!1;var rG1=O(()=>{tG1=qI6(),MI6=new Set});import{EventEmitter as kI6}from"events";var sG1;var ie$=O(()=>{rG1();sG1=new kI6;sG1.on("request",($)=>{me$($)})});function pe$(){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=Id(N.params.name),D=N.params.arguments||{},L=Object.keys(D).map((j)=>Id(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${z5.tool}${B}${z5.dim}(${w})${z5.reset}`}else if(N.method)J=`${z5.dim}${Id(N.method)}${z5.reset}`}}catch{}}let W=Id(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${z5.mcp}${Id(F.slice(0,12))}\u2026${z5.reset}`}else if(X==="/mcp")W=`${z5.mcp}/mcp${z5.reset}`;else if(X==="/mcp/registry")W=`${z5.mcp}/mcp/registry${z5.reset}`;let K=CI6(Y),H=G?"\u25C0":"\u2190";if(!oG1())console.log(`${z5.dim}${H}${z5.reset} ${K}${Y}${z5.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=SI6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";if(!oG1())console.log(`${z5.dim}${D}${z5.reset} ${K}${Y}${z5.reset} ${W}${J?` ${J}`:""} ${N}${U}${z5.reset} ${z5.duration}${B}${z5.reset}`);sG1.emit("request",{method:Y,path:Id(X),status:U,duration:F,timestamp:new Date})}}}var z5,SI6=($)=>{if($>=500)return z5.serverError;if($>=400)return z5.clientError;if($>=300)return z5.redirect;return z5.ok},CI6=($)=>{return z5[$]||z5.reset},Id=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var ne$=O(()=>{rG1();ie$();z5={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 se$}from"crypto";import{mkdir as _I6,readdir as vI6,rm as te$,stat as ae$}from"fs/promises";import{join as eG1,relative as fI6}from"path";import{z as V$}from"zod";function $08($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return eG1(bI6,Z)}function Z08($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function aG1($,Z){let Q=$08($),Y=Z08(Z);return eG1(Q,Y)}function xI6($,Z,Q,Y){let X=O0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return se$("sha256",X).update(J).digest("hex")}function re$($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=xI6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${Z08(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function Q08($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${se$("md5","etag").update(Y).digest("hex")}"`}async function Y08($,Z,Q,Y,X){try{let J=await vI6($,{withFileTypes:!0});for(let G of J){let W=eG1($,G.name),H=fI6(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 Y08(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 ae$(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Q08(W,F.mtime,F.size)})}catch{}}}}catch{}}function X08($,Z){let Y=i($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:V$.object({prefix:V$.string().optional(),maxKeys:V$.number().optional().default(1000),continuationToken:V$.string().optional(),delimiter:V$.string().optional()}),outputSchema:V$.object({objects:V$.array(V$.object({key:V$.string(),size:V$.number(),lastModified:V$.string(),etag:V$.string()})),nextContinuationToken:V$.string().optional(),isTruncated:V$.boolean(),commonPrefixes:V$.array(V$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=$08(Y);await _I6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await Y08(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,L=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:V$.object({key:V$.string()}),outputSchema:V$.object({contentType:V$.string().optional(),contentLength:V$.number(),lastModified:V$.string(),etag:V$.string(),metadata:V$.record(V$.string(),V$.string()).optional()}),handler:async(X)=>{let J=X,G=aG1(Y,J.key),W=await ae$(G);return{contentType:kJ1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Q08(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:V$.object({key:V$.string(),expiresIn:V$.number().optional()}),outputSchema:V$.object({url:V$.string(),expiresIn:V$.number()}),handler:async(X)=>{let J=X,G=J.expiresIn??oe$;return{url:re$(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:V$.object({key:V$.string(),expiresIn:V$.number().optional(),contentType:V$.string().optional()}),outputSchema:V$.object({url:V$.string(),expiresIn:V$.number()}),handler:async(X)=>{let J=X,G=J.expiresIn??oe$;return{url:re$(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:V$.object({key:V$.string()}),outputSchema:V$.object({success:V$.boolean(),key:V$.string()}),handler:async(X)=>{let J=X,G=aG1(Y,J.key);try{return await te$(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:V$.object({keys:V$.array(V$.string()).max(1000)}),outputSchema:V$.object({deleted:V$.array(V$.string()),errors:V$.array(V$.object({key:V$.string(),message:V$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=aG1(Y,K);try{await te$(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function $W1($,Z,Q){let Y=X08(Z,Q),X=new BH({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:k5});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:V$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:V$.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 uY({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),MG(X,J,$,"mcp:dev-assets")}async function J08($,Z,Q,Y){let J=X08(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 bI6="./data/assets",oe$=3600,ee$,G08;var W08=O(()=>{Z$();ul();y$();Qt();ff();CQ();fq0();ee$=new e0;ee$.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return $W1($.req.raw,Z,Y)});G08=ee$});var K08={};T4(K08,{mountDevRoutes:()=>yI6});function yI6($,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 $W1(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 J08(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",G08);let Q=new e0;Q.use("*",AK({mountPath:"/api/dev-assets"})),Q.route("/",vq0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var H08=O(()=>{y$();AJ1();fq0();W08()});import{sql as gI6}from"kysely";import{randomUUID as F08}from"crypto";import{z as hI6}from"zod";async function lI6($){let Z=new Date().toISOString(),Q=F08(),Y=A8.SELF($.organizationId),X="registry.publish_request.created",J={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:Q,organization_id:$.organizationId,type:"registry.publish_request.created",source:Y,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(J),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let G=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Y)])).execute();if(G.length>0)await $.db.insertInto("event_deliveries").values(G.map((W)=>({id:F08(),event_id:Q,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await gI6`SELECT
2996
2996
  pg_notify('studio_events', ${Q}),