decocms 4.207.0 → 4.207.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/dist/client/assets/{AlertCircle-BIsXZUEO.js → AlertCircle-CXc40Ar6.js} +1 -1
  2. package/dist/client/assets/{AreaChart-CoasZrX-.js → AreaChart-C27tNchs.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-BNm4jfzs.js → ArrowLeft-BLxfklwI.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-u32tNbR1.js → ArrowUp-Dt_UBFfb.js} +1 -1
  5. package/dist/client/assets/{ArrowUpRight-DVVt11mJ.js → ArrowUpRight-B-uxDkHp.js} +1 -1
  6. package/dist/client/assets/{Check-Bs-R8wY0.js → Check-bZA9Z1eF.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-CGtmaXJ3.js → CheckCircle-D2XQVczr.js} +1 -1
  8. package/dist/client/assets/{ChevronDown-CAqrusJs.js → ChevronDown-BGaOCqOd.js} +1 -1
  9. package/dist/client/assets/{ChevronRight-Cd_UlsvT.js → ChevronRight-DgtqlYpW.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-DHpSE6iq.js → ChevronUp-CU6rC-TG.js} +1 -1
  11. package/dist/client/assets/{Copy01-CZJepdy4.js → Copy01-BvlcT5Ak.js} +1 -1
  12. package/dist/client/assets/{CpuChip01-C8cqXunC.js → CpuChip01-De0DRzcV.js} +1 -1
  13. package/dist/client/assets/{CreditCard01-D6PzfgWu.js → CreditCard01-HzK6QPzC.js} +1 -1
  14. package/dist/client/assets/{DotsVertical-Vpwvdr0J.js → DotsVertical-Bag93q8O.js} +1 -1
  15. package/dist/client/assets/{Eye-BPXX6VoG.js → Eye-C2y40JOs.js} +1 -1
  16. package/dist/client/assets/{FilterLines-CgbRxiww.js → FilterLines-8Tl5IgAp.js} +1 -1
  17. package/dist/client/assets/{Globe01-D-EcIcjy.js → Globe01-DnjVyKuc.js} +1 -1
  18. package/dist/client/assets/{Globe04-BJ1ETG77.js → Globe04-BSBp9x9K.js} +1 -1
  19. package/dist/client/assets/{HardDrive-CW66Zlzo.js → HardDrive-ztiySPY3.js} +1 -1
  20. package/dist/client/assets/{Key01-Dm0VSwoE.js → Key01-DgMd07Bt.js} +1 -1
  21. package/dist/client/assets/{LayoutLeft-DAM1ssfV.js → LayoutLeft-CSX405Cu.js} +1 -1
  22. package/dist/client/assets/{LinkExternal01-CGD6IOB8.js → LinkExternal01-DdJQIgWn.js} +1 -1
  23. package/dist/client/assets/{LogOut01-CLpRV4f-.js → LogOut01-B0-7s2BH.js} +1 -1
  24. package/dist/client/assets/{Monitor01-BNJLU4eV.js → Monitor01-BBsMz7mA.js} +1 -1
  25. package/dist/client/assets/{Palette-G2-WnzIs.js → Palette-CmXv5yHg.js} +1 -1
  26. package/dist/client/assets/{Play-BDuxhiMt.js → Play-CFmLewXQ.js} +1 -1
  27. package/dist/client/assets/{Plus-B0eVBe4O.js → Plus-lM34Fm-Y.js} +1 -1
  28. package/dist/client/assets/{SearchLg-COL5Pxp8.js → SearchLg-CuGk6O6r.js} +1 -1
  29. package/dist/client/assets/{SearchMd-98Yunm63.js → SearchMd-DAvgULQa.js} +1 -1
  30. package/dist/client/assets/{Settings02-Cdk2KHA2.js → Settings02-C8pTBq19.js} +1 -1
  31. package/dist/client/assets/{Share07-DUxBHhPW.js → Share07-CvTKb5Cr.js} +1 -1
  32. package/dist/client/assets/{Shield01-CWIglVdc.js → Shield01-C4-B78z8.js} +1 -1
  33. package/dist/client/assets/{Star01-bE5Nu5fA.js → Star01-CUGeyTl-.js} +1 -1
  34. package/dist/client/assets/{Stars01-Co1kSV-L.js → Stars01-DCLEiWVl.js} +1 -1
  35. package/dist/client/assets/{Stars02-BkdGU3id.js → Stars02-C6NUxJ3v.js} +1 -1
  36. package/dist/client/assets/{Sun-DxdxUNls.js → Sun-CCpfLp3_.js} +1 -1
  37. package/dist/client/assets/{SwitchHorizontal01-DjU8_mcJ.js → SwitchHorizontal01-DI2GMRDp.js} +1 -1
  38. package/dist/client/assets/{Tool01-DwPmealV.js → Tool01-CPX10VXL.js} +1 -1
  39. package/dist/client/assets/{Tool02-DQj02UM8.js → Tool02-B1Y3c2VD.js} +1 -1
  40. package/dist/client/assets/{Trash01-BkDAP6Ui.js → Trash01-BMmfvKlv.js} +1 -1
  41. package/dist/client/assets/{TrendUp01-CdZjUaI8.js → TrendUp01-BKg0xQwM.js} +1 -1
  42. package/dist/client/assets/{Upload01-98MfYlMN.js → Upload01-B1cBCKT8.js} +1 -1
  43. package/dist/client/assets/{User01-yY2eh1_d.js → User01-BWxiE43u.js} +1 -1
  44. package/dist/client/assets/{Users01-CsLOaOqj.js → Users01-Bm4pxg61.js} +1 -1
  45. package/dist/client/assets/{Users03-DM0x0Tg1.js → Users03-D9fqA39L.js} +1 -1
  46. package/dist/client/assets/{X-BbkFrdIq.js → X-Cqi1_WmZ.js} +1 -1
  47. package/dist/client/assets/{XCircle-CJrledJK.js → XCircle-7dp2AJa7.js} +1 -1
  48. package/dist/client/assets/{XClose-HopZyIt-.js → XClose-CCYFw001.js} +1 -1
  49. package/dist/client/assets/{Zap-D__0UMqn.js → Zap-BjAoOGZy.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-Cc7FxAwc.js → ZapSquare-CySeWwxR.js} +1 -1
  51. package/dist/client/assets/{access-gate-C8DnsdiI.js → access-gate-B1fm4HnI.js} +1 -1
  52. package/dist/client/assets/{agent-icon-1vKhAiKW.js → agent-icon-CsKv98kn.js} +1 -1
  53. package/dist/client/assets/{agents-list-DaBNoT0j.js → agents-list-B4fEE15t.js} +1 -1
  54. package/dist/client/assets/{ai-providers-DfQ-3Mtn.js → ai-providers-Dg70YHFf.js} +1 -1
  55. package/dist/client/assets/{alert-wnC44Lcu.js → alert-DtUrF-Jl.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-B94RKrpB.js → alert-dialog-aW9uE3iw.js} +1 -1
  57. package/dist/client/assets/{app-editor-DnQbSXlY.js → app-editor-B0jVKIpV.js} +1 -1
  58. package/dist/client/assets/{auth-BCvvRTRT.js → auth-2KiKWAkl.js} +1 -1
  59. package/dist/client/assets/{auth-catchall-BDWRJ7VM.js → auth-catchall-DVcTU2RJ.js} +1 -1
  60. package/dist/client/assets/{auth-entry-CIdfCkx0.js → auth-entry-Cc644sSQ.js} +1 -1
  61. package/dist/client/assets/{auth-split-layout-7vwIV9m_.js → auth-split-layout-CYkTtEXP.js} +1 -1
  62. package/dist/client/assets/{authenticate-and-persist-oauth-Cl9pN4A7.js → authenticate-and-persist-oauth-CJ0AY64X.js} +1 -1
  63. package/dist/client/assets/{automation-list-row-B8lsVwA9.js → automation-list-row-q5ph9tUp.js} +1 -1
  64. package/dist/client/assets/{automation-runs-COGzW48W.js → automation-runs-C6JMyCKb.js} +1 -1
  65. package/dist/client/assets/{automations-D-A522sd.js → automations-BsYbBUoP.js} +1 -1
  66. package/dist/client/assets/{avatar-DdgFyVIK.js → avatar-ZnWhik7z.js} +1 -1
  67. package/dist/client/assets/{badge-Ds1Wnxgf.js → badge-BrTFVDsZ.js} +1 -1
  68. package/dist/client/assets/{billing-Yb3sA68U.js → billing-Dkv0Ch6o.js} +1 -1
  69. package/dist/client/assets/{block-document-DVEtY996.js → block-document-CgKO9mVv.js} +1 -1
  70. package/dist/client/assets/{brand-context-CVKoHubR.js → brand-context-8g7zhW8B.js} +1 -1
  71. package/dist/client/assets/{buckets-CkFa01HI.js → buckets-Cs8HaBE9.js} +1 -1
  72. package/dist/client/assets/{bulk-category-panel-CHKdOPND.js → bulk-category-panel-r4P7-YZG.js} +1 -1
  73. package/dist/client/assets/{capability-load-error-BktCLsTE.js → capability-load-error-DGN89M4A.js} +1 -1
  74. package/dist/client/assets/{card-DlHf-lsN.js → card-Djbfm7g6.js} +1 -1
  75. package/dist/client/assets/{cards-RuESfpOS.js → cards-DfWQ7Qfa.js} +1 -1
  76. package/dist/client/assets/{category-editor-CJpr4IWv.js → category-editor-BT99_Xr2.js} +1 -1
  77. package/dist/client/assets/{chat-context-nBPGo5Lk.js → chat-context-DaRp_QoN.js} +1 -1
  78. package/dist/client/assets/{checkbox-DKT6dO8Z.js → checkbox-BVl4NM3V.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-A61_Ra8B.js → cli-auth-success-DeHP94Wy.js} +1 -1
  80. package/dist/client/assets/{collection-detail-BlwZCaka.js → collection-detail-BDqwAwhM.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-H1biHeps.js → collection-display-button-CQqHdi-q.js} +1 -1
  82. package/dist/client/assets/{collection-search-27Z_ZWZT.js → collection-search-Bw4RaUQw.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-JUU17uAc.js → collection-table-wrapper-CQJ5ywVm.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-DkBeoa5Z.js → collection-tabs-C6tpry-d.js} +1 -1
  85. package/dist/client/assets/{command-DjAcFSs1.js → command-C1hTHyH4.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-Cy-gCnLt.js → commerce-onboarding-BGNqNLKO.js} +1 -1
  87. package/dist/client/assets/{connect-kZOs8CHa.js → connect-CueoMMwi.js} +1 -1
  88. package/dist/client/assets/{connection-Cy8L3aJ3.js → connection-CqYrQzJN.js} +1 -1
  89. package/dist/client/assets/{connection-card-BCOCK_Eb.js → connection-card-ChLOu03x.js} +1 -1
  90. package/dist/client/assets/{connection-detail-DhPSnaZV.js → connection-detail-Bz9MpROg.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-DmSfP11N.js → connection-form-helpers-DqJddwE8.js} +1 -1
  92. package/dist/client/assets/{connections-HOeS1AJd.js → connections-Cx_h9o6t.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-DeMGFbxJ.js → decopilot-sse-pool-19xPv_KT.js} +1 -1
  94. package/dist/client/assets/{dialog-B9uSdMGN.js → dialog-CA0qqjyi.js} +1 -1
  95. package/dist/client/assets/{domain-settings-CxG8FQYU.js → domain-settings-W1Cr8ngd.js} +1 -1
  96. package/dist/client/assets/{drawer-98eLt1an.js → drawer-GuYvsNGa.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-C1hjqODM.js → dropdown-menu-BAbRcskP.js} +1 -1
  98. package/dist/client/assets/{empty-state-o0gQhpc4.js → empty-state-B4pZCQIN.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-BFlArbmP.js → extract-connection-data-DlldFhRH.js} +1 -1
  100. package/dist/client/assets/{file-explorer-Bc1LxF5Z.js → file-explorer-CaJe6BOl.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-CUqlbkN4.js → file-type-icon-jYSypdXz.js} +1 -1
  102. package/dist/client/assets/{form-D_woCs7l.js → form-CXgKW-FR.js} +1 -1
  103. package/dist/client/assets/{general-Dk9AO_Dn.js → general-DQT1SG48.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-BMJy82Ev.js → github-repo-picker-DBv3km-6.js} +1 -1
  105. package/dist/client/assets/{hooks-Gv0gN8aJ.js → hooks-DXhypX2m.js} +1 -1
  106. package/dist/client/assets/{index-9XUiIWTR.js → index-6hsDNm7n.js} +1 -1
  107. package/dist/client/assets/{index-LkjnDNlx.js → index-B4QMrIft.js} +1 -1
  108. package/dist/client/assets/{index-C3G-6I1r.js → index-CGTxx1y8.js} +1 -1
  109. package/dist/client/assets/{index-C1vwFKI6.js → index-CfFRy8o8.js} +1 -1
  110. package/dist/client/assets/{index-CHLuEKuC.js → index-CsogwfdS.js} +1 -1
  111. package/dist/client/assets/{index-BruORjTP.js → index-DAn-7yTL.js} +1 -1
  112. package/dist/client/assets/{index-DI3yzcq9.js → index-DFAQ1EJ-.js} +3 -3
  113. package/dist/client/assets/{index-BROruwzJ.js → index-Dq4RN-Tc.js} +1 -1
  114. package/dist/client/assets/{index-51f6XlwG.js → index-Vqs_AAna.js} +1 -1
  115. package/dist/client/assets/{index-DN_t9Vle.js → index-i1MJ6BZf.js} +5 -5
  116. package/dist/client/assets/{index-redirect-Xm-Wfcmk.js → index-redirect-BErKD-Ul.js} +1 -1
  117. package/dist/client/assets/{input-rqb9s9a8.js → input-9WxsmvVz.js} +1 -1
  118. package/dist/client/assets/{integration-icon-NgM6caDc.js → integration-icon-DxLv-APu.js} +1 -1
  119. package/dist/client/assets/{invite-member-dialog-CFpFsOm-.js → invite-member-dialog-Dexd3Uay.js} +1 -1
  120. package/dist/client/assets/{label-CQkrTrwb.js → label-CFZCMSb8.js} +1 -1
  121. package/dist/client/assets/{layout-CPTYQuI4.js → layout-BcuDRyLO.js} +1 -1
  122. package/dist/client/assets/{login-D59iMEla.js → login-BDdcyKEE.js} +1 -1
  123. package/dist/client/assets/{mcp-oauth-X21IvZ1G.js → mcp-oauth-DDhIYBuK.js} +1 -1
  124. package/dist/client/assets/{members-CyiAS0Pa.js → members-BRSj6r0T.js} +1 -1
  125. package/dist/client/assets/{monaco-editor-CaRaMucM.js → monaco-editor-CmKmm0FK.js} +1 -1
  126. package/dist/client/assets/{monitoring-stats-row-B4DBqbQ2.js → monitoring-stats-row-DST0zWF_.js} +1 -1
  127. package/dist/client/assets/{multi-select-DOObsNJA.js → multi-select-DxOQZVfL.js} +1 -1
  128. package/dist/client/assets/{oauth-callback-BzGwDXCC.js → oauth-callback-BOVgVCFm.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-ai-provider-BKWs28AL.js → oauth-callback-ai-provider-SPBIZ07m.js} +1 -1
  130. package/dist/client/assets/{onboarding-Czj8G4s9.js → onboarding-C-QSMb-G.js} +1 -1
  131. package/dist/client/assets/{org-layout-D_JBIC42.js → org-layout-CTP3vumM.js} +1 -1
  132. package/dist/client/assets/{organization-choice-CNtAOuw9.js → organization-choice-4tixXzlH.js} +1 -1
  133. package/dist/client/assets/{orgs-WFw9FKpT.js → orgs-C-g9pi2K.js} +1 -1
  134. package/dist/client/assets/{page-seo-form-C1g7UFST.js → page-seo-form-rwXXHzG0.js} +1 -1
  135. package/dist/client/assets/{popover-1grKPHF-.js → popover-Cj9zRw6i.js} +1 -1
  136. package/dist/client/assets/{post-editor-B_Fg_PtG.js → post-editor-ip8KBLaE.js} +1 -1
  137. package/dist/client/assets/{primitives-B1JFDByD.js → primitives-2GzooOrV.js} +1 -1
  138. package/dist/client/assets/{profile-awrxi6Uz.js → profile-Cvu_EoMx.js} +1 -1
  139. package/dist/client/assets/{project-app-view-mt45EZmG.js → project-app-view-CJIo89x6.js} +1 -1
  140. package/dist/client/assets/record-editor-DI3Bhe1G.js +1 -0
  141. package/dist/client/assets/{redirect-editor-CcmQCF7Y.js → redirect-editor-BjmS8eUr.js} +1 -1
  142. package/dist/client/assets/registry-BPqrOBsl.js +2 -0
  143. package/dist/client/assets/{registry-layout-7yZvOqOy.js → registry-layout-DMDDnV_q.js} +1 -1
  144. package/dist/client/assets/{reports-DCwj-kO-.js → reports-BO4tWYW7.js} +1 -1
  145. package/dist/client/assets/{require-capability-D1cW6Q8M.js → require-capability-D5OkbEgr.js} +1 -1
  146. package/dist/client/assets/{required-auth-layout-BvG-ioDs.js → required-auth-layout-Da5oFv2d.js} +1 -1
  147. package/dist/client/assets/{reset-password-CkKHp2p5.js → reset-password-DtLAFqy7.js} +1 -1
  148. package/dist/client/assets/{roles-21C2zkxi.js → roles-CPQLfaqM.js} +1 -1
  149. package/dist/client/assets/{search-input-CJHrGfWW.js → search-input-C_0BXBUE.js} +1 -1
  150. package/dist/client/assets/{secrets-CvR9yj2i.js → secrets-BPAYuBeu.js} +1 -1
  151. package/dist/client/assets/{sections-editor-fp1wM8pw.js → sections-editor-dBBkYgzd.js} +1 -1
  152. package/dist/client/assets/{select--TLOq7j8.js → select-90QtnyOa.js} +1 -1
  153. package/dist/client/assets/{select-model-BHOo1rp9.js → select-model-BehxtIgI.js} +1 -1
  154. package/dist/client/assets/{self-tool-result-CrB2rXFl.js → self-tool-result-BZdNeZSO.js} +1 -1
  155. package/dist/client/assets/{seo-editor-CYyt6O16.js → seo-editor-sivkxRiC.js} +1 -1
  156. package/dist/client/assets/{settings-layout-REfjxme3.js → settings-layout-CfUQ0tRJ.js} +1 -1
  157. package/dist/client/assets/{settings-section-C3ONEfGE.js → settings-section-BZ5lvRtv.js} +1 -1
  158. package/dist/client/assets/{shell-controls-BzV056SW.js → shell-controls-BQjORh0z.js} +1 -1
  159. package/dist/client/assets/{shell-layout-DlKj27bb.js → shell-layout-BFfYBuH8.js} +1 -1
  160. package/dist/client/assets/{sidebar-CNeZ85zy.js → sidebar-BGD7QssJ.js} +1 -1
  161. package/dist/client/assets/{skeleton-Dl3k4lxd.js → skeleton-BrszoFmI.js} +1 -1
  162. package/dist/client/assets/{spinner-kqhk2wdd.js → spinner-CcXrJu8r.js} +1 -1
  163. package/dist/client/assets/{sso-CPPmaCwP.js → sso-BvzSSLNB.js} +1 -1
  164. package/dist/client/assets/{store-Dmee7NFI.js → store-DZOEfSbI.js} +1 -1
  165. package/dist/client/assets/store-registry-Dyf7ckJJ.js +2 -0
  166. package/dist/client/assets/{studio-tools-Bdk11iXL.js → studio-tools-B67rnasf.js} +1 -1
  167. package/dist/client/assets/{switch-CG0_fDX9.js → switch-A_8GxjwB.js} +1 -1
  168. package/dist/client/assets/{synced-repos-B9BOntjb.js → synced-repos-C0OQcT4d.js} +1 -1
  169. package/dist/client/assets/{tab-id-BgguDV_T.js → tab-id-00aGi4r-.js} +1 -1
  170. package/dist/client/assets/{table-Cx2OcF-5.js → table-BnFpCqDf.js} +1 -1
  171. package/dist/client/assets/{tabs-CbawcjgJ.js → tabs-6cs1ZcJu.js} +1 -1
  172. package/dist/client/assets/{textarea-DLes0m8p.js → textarea-DOMWl7hz.js} +1 -1
  173. package/dist/client/assets/{toggle-group-DyUnK4OS.js → toggle-group-BPptYrIi.js} +1 -1
  174. package/dist/client/assets/{toolbar-D8hTZ_p2.js → toolbar-Bl6qY3rO.js} +1 -1
  175. package/dist/client/assets/{tooltip-DcLUD06s.js → tooltip-CHWh13MB.js} +1 -1
  176. package/dist/client/assets/{use-ai-providers-CUYq8orO.js → use-ai-providers-WSA7m6LX.js} +1 -1
  177. package/dist/client/assets/{use-automations-BjstAQWn.js → use-automations-D3vG6yKH.js} +1 -1
  178. package/dist/client/assets/{use-autosave-oRIz3IWx.js → use-autosave-BxhftnSO.js} +1 -1
  179. package/dist/client/assets/{use-capability-A1Nh-1c-.js → use-capability-DakEJHuv.js} +1 -1
  180. package/dist/client/assets/{use-clock-tick-CFHYPlbJ.js → use-clock-tick-Be7huOEc.js} +1 -1
  181. package/dist/client/assets/{use-connection-MqEPg6ky.js → use-connection-BbSK0zCm.js} +1 -1
  182. package/dist/client/assets/{use-copy-_jjDU2g1.js → use-copy-BefhlW44.js} +1 -1
  183. package/dist/client/assets/{use-create-virtual-mcp-Svxxjbnm.js → use-create-virtual-mcp-DY6DJSU_.js} +1 -1
  184. package/dist/client/assets/{use-debounced-autosave-D9paTl-2.js → use-debounced-autosave-CeYXg8DG.js} +1 -1
  185. package/dist/client/assets/{use-debounced-value-BIPN2O6h.js → use-debounced-value-Bj8A4dgk.js} +1 -1
  186. package/dist/client/assets/{use-deco-credits-D-bUjGxi.js → use-deco-credits-BuN_0hQH.js} +1 -1
  187. package/dist/client/assets/{use-decopilot-events-BBTIMFGs.js → use-decopilot-events-KbbNQEic.js} +1 -1
  188. package/dist/client/assets/{use-delete-connection-SIfEMhcg.js → use-delete-connection-B4bGuw52.js} +1 -1
  189. package/dist/client/assets/{use-deployment-admin-DkqoZQYC.js → use-deployment-admin-CeceKVIb.js} +1 -1
  190. package/dist/client/assets/{use-file-configs-BuZ7hFmK.js → use-file-configs-DZngbiME.js} +1 -1
  191. package/dist/client/assets/{use-infinite-scroll-72q6jUv6.js → use-infinite-scroll-DQhZHsvX.js} +1 -1
  192. package/dist/client/assets/{use-join-requests-Cbz31rNV.js → use-join-requests-DpJ7-Al5.js} +1 -1
  193. package/dist/client/assets/{use-mcp-client-BekaO9lz.js → use-mcp-client-CVm31V6F.js} +1 -1
  194. package/dist/client/assets/{use-mcp-tools-CIXlr8N2.js → use-mcp-tools-CYLIBnYs.js} +1 -1
  195. package/dist/client/assets/{use-members-0qUDlbAr.js → use-members-BzaWrkKT.js} +1 -1
  196. package/dist/client/assets/{use-mobile-DMbNnlTA.js → use-mobile-D8UMZtPl.js} +1 -1
  197. package/dist/client/assets/{use-navigate-to-agent-CET38Vg9.js → use-navigate-to-agent-CuaGQwJF.js} +1 -1
  198. package/dist/client/assets/{use-open-billing-url-CCadFnV1.js → use-open-billing-url-Cc80RM1m.js} +1 -1
  199. package/dist/client/assets/{use-org-auth-client-DFK_0KSz.js → use-org-auth-client-D5YL3Y-K.js} +1 -1
  200. package/dist/client/assets/{use-org-sso-B_1DEBvf.js → use-org-sso-CL5Bnwn7.js} +1 -1
  201. package/dist/client/assets/{use-organization-roles-Cx3CvgUK.js → use-organization-roles-Z8qc0s_T.js} +1 -1
  202. package/dist/client/assets/{use-organization-settings-Bxh2HDDm.js → use-organization-settings-Akz9Tqr2.js} +1 -1
  203. package/dist/client/assets/{use-registry-connections-Mw00EKui.js → use-registry-connections-DZ4rBsG_.js} +1 -1
  204. package/dist/client/assets/{use-secrets-Dp3WT00a.js → use-secrets-Bq5oFU1S.js} +1 -1
  205. package/dist/client/assets/{use-section-preview-base-DdNJ2arm.js → use-section-preview-base-CoF5vuNM.js} +1 -1
  206. package/dist/client/assets/{use-status-sounds-Bc12sBux.js → use-status-sounds-BNQaG5gv.js} +1 -1
  207. package/dist/client/assets/{use-tags-j37diAvW.js → use-tags-R_IwgWua.js} +1 -1
  208. package/dist/client/assets/{use-view-mode-DCcwKbXe.js → use-view-mode-Cs3yL9pb.js} +1 -1
  209. package/dist/client/assets/{use-virtual-mcp-CqU6VupE.js → use-virtual-mcp-DxweTSkQ.js} +1 -1
  210. package/dist/client/assets/useInfiniteQuery-DtySonqq.js +1 -0
  211. package/dist/client/assets/{useRouterState-xxRU2w37.js → useRouterState-DlqVqaTo.js} +1 -1
  212. package/dist/client/assets/useSuspenseInfiniteQuery-BL9Mn7SA.js +1 -0
  213. package/dist/client/assets/{users-DYAgABwe.js → users-ChvPEbAw.js} +1 -1
  214. package/dist/client/assets/{variant-calendar-eFgFIV4T.js → variant-calendar-DXB8YJhY.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-g5jce1H8.js → view-mode-toggle-DX-7gXWI.js} +1 -1
  216. package/dist/client/index.html +1 -1
  217. package/dist/server/cli.js +4 -4
  218. package/dist/server/migrate.js +20 -20
  219. package/dist/server/server.js +4 -4
  220. package/package.json +1 -1
  221. package/dist/client/assets/record-editor-BBEHvVwc.js +0 -1
  222. package/dist/client/assets/registry-BlqGlt4F.js +0 -2
  223. package/dist/client/assets/store-registry-PhKSKGkg.js +0 -2
  224. package/dist/client/assets/useInfiniteQuery-BFbHksQ0.js +0 -1
  225. package/dist/client/assets/useSuspenseInfiniteQuery-Ciwo96ge.js +0 -1
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var gy$=Object.create;var{getPrototypeOf:hy$,defineProperty:Dh,getOwnPropertyNames:p61,getOwnPropertyDescriptor:uy$}=Object,t61=Object.prototype.hasOwnProperty;function o61($){return this[$]}var cy$,ly$,k=($,Z,X)=>{var Q=$!=null&&typeof $==="object";if(Q){var Y=Z?cy$??=new WeakMap:ly$??=new WeakMap,G=Y.get($);if(G)return G}X=$!=null?gy$(hy$($)):{};let J=Z||!$||!$.__esModule?Dh(X,"default",{value:$,enumerable:!0}):X;for(let W of p61($))if(!t61.call(J,W))Dh(J,W,{get:o61.bind($,W),enumerable:!0});if(Q)Y.set($,J);return J},kz0=($)=>{var Z=(n61??=new WeakMap).get($),X;if(Z)return Z;if(Z=Dh({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function"){for(var Q of p61($))if(!t61.call(Z,Q))Dh(Z,Q,{get:o61.bind($,Q),enumerable:!(X=uy$($,Q))||X.enumerable})}return n61.set($,Z),Z},n61,C=($,Z)=>()=>(Z||$((Z={exports:{}}).exports,Z),Z.exports);var dy$=($)=>$;function my$($,Z){this[$]=dy$.bind(null,Z)}var N4=($,Z)=>{for(var X in Z)Dh($,X,{get:Z[X],enumerable:!0,configurable:!0,set:my$.bind(Z,X)})};var B=($,Z)=>()=>($&&(Z=$($=0)),Z);var z0=import.meta.require;function C$($,Z={}){let{signal:X}=Z;if(X?.aborted)return Promise.reject(X.reason);return new Promise((Q,Y)=>{let G=()=>{clearTimeout(+W),Y(X?.reason)},W=iy$(()=>{X?.removeEventListener("abort",G),Q()},$);X?.addEventListener("abort",G,{once:!0})})}function iy$($,Z){if(Z=Math.trunc(Math.max(Z,0)||0),Z<=Sz0){let G=Number(setTimeout($,Z));return{valueOf:()=>G}}let X=Date.now(),Q,Y=()=>{let G=Z-(Date.now()-X);Q=G>Sz0?Number(setTimeout(Y,Sz0)):Number(setTimeout($,G))};return Y(),{valueOf:()=>Q}}var Sz0=2147483647;function uZ($,Z,X,Q,Y){let G=Math.min($,Z*Q**X);return(1-Y*Math.random())*G}async function cZ($,Z){let{multiplier:X=2,maxTimeout:Q=60000,maxAttempts:Y=5,minTimeout:G=1000,jitter:J=1,isRetriable:W=()=>!0,signal:K}=Z??{};if(!Number.isInteger(Y)||Y<1)throw RangeError(`Cannot retry as 'maxAttempts' must be a positive integer: current value is ${Y}`);if(!Number.isFinite(X)||X<1)throw RangeError(`Cannot retry as 'multiplier' must be a finite number >= 1: current value is ${X}`);if(Number.isNaN(Q)||Q<=0)throw RangeError(`Cannot retry as 'maxTimeout' must be a positive number: current value is ${Q}`);if(Number.isNaN(G)||G<0)throw RangeError(`Cannot retry as 'minTimeout' must be >= 0: current value is ${G}`);if(G>Q)throw RangeError(`Cannot retry as 'minTimeout' must be <= 'maxTimeout': current values 'minTimeout=${G}', 'maxTimeout=${Q}'`);if(Number.isNaN(J)||J<0||J>1)throw RangeError(`Cannot retry as 'jitter' must be between 0 and 1: current value is ${J}`);let H=0;while(!0){K?.throwIfAborted();try{return await $()}catch(N){if(!W(N))throw N;if(H+1>=Y)throw new NJ(N,Y);let F=uZ(Q,G,H,X,J);await C$(F,K?{signal:K}:void 0)}H++}}var NJ;var r61=B(()=>{NJ=class NJ extends Error{constructor($,Z){super(`Retrying exceeded the maxAttempts (${Z}).`);this.name="RetryError",this.cause=$}}});var $6=B(()=>{r61()});var FJ="thread-gate",iK="decopilot-hosted-harness",pY="automations",FF="background-tools";import{homedir as ny$}from"os";function ty$($){let Z=($??"").trim();return py$.has(Z)?Z:"all"}function ry$($){let Z=($??"").trim();return oy$.has(Z)?Z:"development"}function Z51($,Z,X){let Q=$==="worker"?0:Math.floor(Z*0.6);if(X===void 0||X==="")return Q;let Y=Number(X);return Number.isFinite(Y)&&Y>=0?Y:Q}function o3($){return $==="true"||$==="1"}function ay$($){if($===void 0||$==="")return;return o3($)}function Vz0($,Z,X){if(Z===void 0||Z==="")return;let Q=Number(Z);if(!Number.isSafeInteger(Q)||Q<=0)throw Error(`${$} must be a positive integer`);if(X!==void 0&&Q>X)throw Error(`${$} must be at most ${X}`);return Q}function UJ($,Z,X,Q){return Vz0($,Z,Q)??X}function sy$($,Z,X,Q){if(Z===void 0||Z==="")return X;let Y=Number(Z);if(!Number.isSafeInteger(Y)||Y<0)throw Error(`${$} must be a non-negative integer`);if(Q!==void 0&&Y>Q)throw Error(`${$} must be at most ${Q}`);return Y}function e61($,Z){if($===void 0||$==="")return Z;return $==="true"||$==="1"}function $51($){if(!$)return null;try{let X=new URL($).hostname.replace(/^\[|\]$/g,"");if(X==="localhost"||X==="127.0.0.1"||X==="::1")return null;return $}catch{return null}}function ey$($){return $===void 0||$===""||$==="true"||$==="1"}function Lh($,Z){return $||Z}function Zg$($){let Z=($??"").trim(),X=Z.length>0?Z:"user-desktop";if(X==="cluster")return"agent-sandbox";if(!$g$.has(X))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${$}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return X}function X51($,Z){let X=$.home||Z.DATA_DIR||Z.DECOCMS_HOME||`${ny$()}/deco`,Q=$.localMode,Y=$.nodeEnv||ry$(Z.NODE_ENV),G=Z.NATS_URL||"nats://localhost:4222",J=ay$(Z.NATS_TUNNEL_PUBLIC_ENABLED)??!!Z.NATS_PUBLIC_URL;return{settings:{nodeEnv:Y,port:UJ("PORT",$.port||Z.PORT,3000,65535),baseUrl:$.baseUrl||Z.BASE_URL,publicUrl:Lh(Z.STUDIO_PUBLIC_URL,Z.MESH_PUBLIC_URL),dataDir:X,databasePgSsl:o3(Z.DATABASE_PG_SSL),databasePoolMax:UJ("DATABASE_POOL_MAX",Z.DATABASE_POOL_MAX,5),dbosPoolSize:UJ("DBOS_POOL_SIZE",Z.DBOS_POOL_SIZE,5),betterAuthSecret:Z.BETTER_AUTH_SECRET||"",encryptionKey:Z.ENCRYPTION_KEY||"",studioJwtSecret:Lh(Z.STUDIO_JWT_SECRET,Z.MESH_JWT_SECRET),localMode:Q,disableRateLimit:o3(Z.DISABLE_RATE_LIMIT),studioProvisionSecretKey:Z.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(Z.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((K)=>K.trim().toLowerCase()).filter(Boolean),clickhouseUrl:Z.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:Vz0("CLICKHOUSE_MAX_MEMORY_USAGE",Z.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:Z.MONITORING_OTLP_ENDPOINT,otelServiceName:Z.OTEL_SERVICE_NAME||"studio",natsPublicUrl:Z.NATS_PUBLIC_URL,natsTunnelPublicEnabled:J,natsTunnelSessionTtlSeconds:UJ("NATS_TUNNEL_SESSION_TTL_SECONDS",Z.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:Z.NATS_OPERATOR_JWT,natsAccountJwt:Z.NATS_ACCOUNT_JWT,natsAccountSigningKey:Z.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:Z.NATS_CREDS,configPath:Z.CONFIG_PATH||"./config.json",aiGatewayEnabled:o3(Z.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:Z.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:Z.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:Z.STRIPE_WEBHOOK_SECRET,stripeSecretKey:Z.STRIPE_SECRET_KEY,stripeOrgPriceId:Z.STRIPE_ORG_PRICE_ID,topupFeePercent:sy$("STUDIO_TOPUP_FEE_PERCENT",Z.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:o3(Z.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:UJ("STUDIO_FREE_TASKS",Z.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:UJ("STUDIO_MONTHLY_TASKS",Z.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:UJ("STUDIO_MAX_RUNS_PER_TASK",Z.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:o3(Z.ENABLE_DECO_IMPORT),mcpCacheEnabled:e61(Z.MCP_CACHE_ENABLED,Y!=="development"),orgFsPublicSetsJson:Z.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:o3(Z.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:UJ("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",Z.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:UJ("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",Z.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:e61(Z.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),sandboxMaxConcurrentHostedRuns:UJ("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",Z.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:Z.S3_ENDPOINT,s3Bucket:Z.S3_BUCKET,s3Region:Z.S3_REGION||"auto",s3AccessKeyId:Z.S3_ACCESS_KEY_ID,s3SecretAccessKey:Z.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:ey$(Z.S3_FORCE_PATH_STYLE),monitoringS3Bucket:Z.MONITORING_S3_BUCKET,monitoringS3Endpoint:Z.MONITORING_S3_ENDPOINT,monitoringS3Region:Z.MONITORING_S3_REGION,monitoringS3AccessKeyId:Z.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:Z.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:Z.MONITORING_S3_PREFIX,duckdbExtensionDirectory:Z.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:Z.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:Vz0("DUCKDB_THREADS",Z.DUCKDB_THREADS),isCli:!0,noTui:$.noTui===!0,podName:Z.POD_NAME||crypto.randomUUID(),dispatchRole:ty$(Lh(Z.STUDIO_DISPATCH_ROLE,Z.MESH_DISPATCH_ROLE)),sandboxProviderKind:Zg$(Z.STUDIO_SANDBOX_PROVIDER),sandboxStickyHeadRefEnabled:o3(Z.SANDBOX_STICKY_HEAD_REF),taskBoardRerunReusesPrBranch:o3(Z.TASK_BOARD_RERUN_REUSES_PR_BRANCH),sandboxReleaseOnRunEndEnabled:o3(Z.SANDBOX_RELEASE_ON_RUN_END),sandboxReleaseGraceMs:UJ("SANDBOX_RELEASE_GRACE_MS",Z.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:Z.DECO_SUPABASE_URL,decoSupabaseServiceKey:Z.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:Z.FIRECRAWL_API_KEY,reportsInternalApiUrl:Lh(Z.REPORTS_INTERNAL_API_URL,Z.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:Lh(Z.REPORTS_INTERNAL_API_KEY,Z.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:Z.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:Z.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:Z.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:Z.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:Z.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:Z.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:Z.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:$51(Z.DATABASE_URL),externalNatsUrl:$51(G),skipMigrations:$.skipMigrations}}var py$,oy$,$g$;var Cz0=B(()=>{py$=new Set(["all","worker","api"]);oy$=new Set(["production","development","test"]);$g$=new Set(["agent-sandbox","user-desktop"])});function y0(){if(!Dr)Xg$();return Dr}function Xg$(){if(Dr)return;let $={...process.env},Z=X51({port:$.PORT||"3000",home:$.DATA_DIR||$.DECOCMS_HOME||"",localMode:$.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:$.DECO_NO_TUI==="true",vitePort:$.VITE_PORT,baseUrl:$.BASE_URL},$);Dr=Object.freeze({...Z.settings,databaseUrl:$.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:($.NATS_URL||"nats://localhost:4222").split(",").map((X)=>X.trim()).filter(Boolean)})}var Dr=null;var M$=B(()=>{Cz0()});import{context as Qg$,propagation as Yg$,SpanKind as Gg$,SpanStatusCode as _z0}from"@opentelemetry/api";function Wg$($,Z){let X=$ instanceof Error?$.name:void 0;if(X==="TimeoutError")return"timeout";if(X==="AbortError")return"cancelled";if(Z?.aborted)return"cancelled";return null}function Kg$($,Z){if(Z.startsWith("/_sandbox/")){if($===404)return"daemon_gone";if($===409)return"daemon_not_ready"}if($===404&&Z.includes("/sandboxclaims/"))return"claim_gone";return null}function Hg$($,Z){if($===404&&(Z==="/.decofile"||Z==="/live/_meta"||Z==="/sprites.svg"))return"not_a_deco_site";return null}function Ng$($){if(!($ instanceof Error))return!1;if($.message.includes("socket connection was closed"))return!0;let Z=$.code;return Z==="ECONNRESET"||Z==="EPIPE"}async function Fg$($,Z){let X,Q;if($ instanceof Request)X=new URL($.url),Q=Z?.method??$.method;else if($ instanceof URL)X=$,Q=Z?.method??"GET";else X=new URL($),Q=Z?.method??"GET";let Y=`${Q} ${X.host}`;return UF.startActiveSpan(Y,{kind:Gg$.CLIENT,attributes:{"http.request.method":Q,"url.full":X.href,"url.scheme":X.protocol.replace(":",""),"url.path":X.pathname,"url.query":X.search||void 0,"server.address":X.hostname,"server.port":X.port?Number(X.port):void 0}},async(G)=>{try{let J=new Headers(Z?.headers??($ instanceof Request?$.headers:{}));Yg$.inject(Qg$.active(),J,{set:(U,w,O)=>U.set(w,O)});let W={...Z,headers:J},K=await Jg$($,W);G.setAttribute("http.response.status_code",K.status);let H=K.status===405&&Q==="GET"&&(J.get("accept")??"").includes("text/event-stream"),N=K.status>=400?Kg$(K.status,X.pathname):null,F=K.status>=400?Hg$(K.status,X.pathname):null;if(K.status>=400&&!H&&!N&&!F)G.setStatus({code:_z0.ERROR,message:`HTTP ${K.status}`});else{if(N)G.setAttribute("sandbox.lifecycle",N);if(F)G.setAttribute("preview.probe",F);G.setStatus({code:_z0.OK})}return K}catch(J){let W=Z?.signal??($ instanceof Request?$.signal:void 0),K=Wg$(J,W??void 0);if(K)G.setAttribute("abort.reason",K);else if(Ng$(J)&&X.pathname.startsWith("/_sandbox/"))G.setAttribute("sandbox.lifecycle","connection_closed");else G.recordException(J),G.setStatus({code:_z0.ERROR,message:J instanceof Error?J.message:"Fetch failed"});throw J}finally{G.end()}})}function Q51(){globalThis.fetch=Fg$}var Jg$;var Y51=B(()=>{C6();Jg$=globalThis.fetch});import{join as fz0}from"path";function wJ(){return fz0(y0().dataDir,"logs")}function Q_(){return fz0(y0().dataDir,"traces")}function nK(){return fz0(y0().dataDir,"metrics")}function wF($,Z){let X=$[Z];return X!=null?String(X):""}function Eh($,Z){let X=$[Z];return X!=null&&X!==""?String(X):null}function G51($){let{attributes:Z}=$,X=Z[F4.IS_ERROR],Q=Z[F4.DURATION_MS];return{v:1,id:$.id,type:wF(Z,F4.TYPE)||jh,organization_id:wF(Z,F4.ORGANIZATION_ID),connection_id:wF(Z,F4.CONNECTION_ID),connection_title:wF(Z,F4.CONNECTION_TITLE),tool_name:wF(Z,F4.TOOL_NAME),input:wF(Z,F4.INPUT),output:wF(Z,F4.OUTPUT),is_error:X===!0||X===1||X==="true"?1:0,error_message:Eh(Z,F4.ERROR_MESSAGE),duration_ms:typeof Q==="number"?Q:Number(Q)||0,timestamp:new Date(Number($.timestampNano/1000000n)).toISOString(),user_id:Eh(Z,F4.USER_ID),request_id:wF(Z,F4.REQUEST_ID),user_agent:Eh(Z,F4.USER_AGENT),virtual_mcp_id:Eh(Z,F4.VIRTUAL_MCP_ID),properties:Eh(Z,F4.PROPERTIES)}}function Er($){return $[0]*1000+$[1]/1e6}function G_($){return new Date(Er($)).toISOString()}var vz0="mcp.proxy.callTool",F4,jh="tool_call",Y_="llm_call",Lr="decopilot";var eQ=B(()=>{M$();F4={TYPE:"studio.monitoring.type",ORGANIZATION_ID:"studio.monitoring.organization_id",CONNECTION_ID:"studio.monitoring.connection_id",CONNECTION_TITLE:"studio.monitoring.connection_title",TOOL_NAME:"studio.monitoring.tool_name",INPUT:"studio.monitoring.input",OUTPUT:"studio.monitoring.output",IS_ERROR:"studio.monitoring.is_error",ERROR_MESSAGE:"studio.monitoring.error_message",DURATION_MS:"studio.monitoring.duration_ms",USER_ID:"studio.monitoring.user_id",REQUEST_ID:"studio.monitoring.request_id",USER_AGENT:"studio.monitoring.user_agent",VIRTUAL_MCP_ID:"studio.monitoring.virtual_mcp_id",PROPERTIES:"studio.monitoring.properties"}});import{ExportResultCode as jr}from"@opentelemetry/core";import{mkdir as Ug$,rename as wg$,writeFile as Og$}from"fs/promises";import{join as zr}from"path";class XB{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor($){this.basePath=$.basePath,this.flushThreshold=$.flushThreshold??1000,this.maxBufferBytes=$.maxBufferBytes??10485760,this.partitionKey=$.partitionKey;let Z=$.flushIntervalMs??60000;if(Z>0&&Z<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((X)=>{console.error("[NDJSONExporter] Timer flush failed:",X)})},Z),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows($){if(this.isShutdown)return Promise.resolve({code:jr.FAILED});for(let Z of $){let X=JSON.stringify(Z),Q=this.partitionKey?this.partitionKey(Z):"";this.bufferItems.push({partition:Q,json:X}),this.bufferBytes+=Buffer.byteLength(X,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:jr.SUCCESS})).catch((Z)=>{return console.error("[NDJSONExporter] Flush failed:",Z),{code:jr.FAILED}});return Promise.resolve({code:jr.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let Z=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=Z,Z}async doFlush(){if(this.bufferItems.length===0)return;let $=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let Z=new Map;for(let Y of $){let G=Z.get(Y.partition);if(!G)G=[],Z.set(Y.partition,G);G.push(Y.json)}let X=await Promise.allSettled(Array.from(Z.entries()).map(([Y,G])=>this.writeNDJSON(G,Y).then(()=>Y))),Q=X.find((Y)=>Y.status==="rejected");if(Q){let Y=new Set;for(let J of X)if(J.status==="fulfilled")Y.add(J.value);let G=$.filter((J)=>!Y.has(J.partition));this.bufferItems=G.concat(this.bufferItems),this.bufferBytes=0;for(let J of this.bufferItems)this.bufferBytes+=Buffer.byteLength(J.json,"utf8")+1;throw Q.reason}}async writeNDJSON($,Z){let X=new Date,Q=[String(X.getUTCFullYear()),String(X.getUTCMonth()+1).padStart(2,"0"),String(X.getUTCDate()).padStart(2,"0"),String(X.getUTCHours()).padStart(2,"0")],Y=Z?zr(this.basePath,Z,...Q):zr(this.basePath,...Q);if(!this.knownDirs.has(Y))await Ug$(Y,{recursive:!0,mode:448}),this.knownDirs.add(Y);let G=`${crypto.randomUUID()}.ndjson`,J=zr(Y,`.${G}.tmp`),W=zr(Y,G),K=$.join(`
2
+ var gy$=Object.create;var{getPrototypeOf:hy$,defineProperty:Dh,getOwnPropertyNames:p61,getOwnPropertyDescriptor:uy$}=Object,t61=Object.prototype.hasOwnProperty;function o61($){return this[$]}var cy$,ly$,k=($,Z,X)=>{var Q=$!=null&&typeof $==="object";if(Q){var Y=Z?cy$??=new WeakMap:ly$??=new WeakMap,G=Y.get($);if(G)return G}X=$!=null?gy$(hy$($)):{};let J=Z||!$||!$.__esModule?Dh(X,"default",{value:$,enumerable:!0}):X;for(let W of p61($))if(!t61.call(J,W))Dh(J,W,{get:o61.bind($,W),enumerable:!0});if(Q)Y.set($,J);return J},kz0=($)=>{var Z=(n61??=new WeakMap).get($),X;if(Z)return Z;if(Z=Dh({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function"){for(var Q of p61($))if(!t61.call(Z,Q))Dh(Z,Q,{get:o61.bind($,Q),enumerable:!(X=uy$($,Q))||X.enumerable})}return n61.set($,Z),Z},n61,C=($,Z)=>()=>(Z||$((Z={exports:{}}).exports,Z),Z.exports);var dy$=($)=>$;function my$($,Z){this[$]=dy$.bind(null,Z)}var N4=($,Z)=>{for(var X in Z)Dh($,X,{get:Z[X],enumerable:!0,configurable:!0,set:my$.bind(Z,X)})};var B=($,Z)=>()=>($&&(Z=$($=0)),Z);var z0=import.meta.require;function C$($,Z={}){let{signal:X}=Z;if(X?.aborted)return Promise.reject(X.reason);return new Promise((Q,Y)=>{let G=()=>{clearTimeout(+W),Y(X?.reason)},W=iy$(()=>{X?.removeEventListener("abort",G),Q()},$);X?.addEventListener("abort",G,{once:!0})})}function iy$($,Z){if(Z=Math.trunc(Math.max(Z,0)||0),Z<=Sz0){let G=Number(setTimeout($,Z));return{valueOf:()=>G}}let X=Date.now(),Q,Y=()=>{let G=Z-(Date.now()-X);Q=G>Sz0?Number(setTimeout(Y,Sz0)):Number(setTimeout($,G))};return Y(),{valueOf:()=>Q}}var Sz0=2147483647;function uZ($,Z,X,Q,Y){let G=Math.min($,Z*Q**X);return(1-Y*Math.random())*G}async function cZ($,Z){let{multiplier:X=2,maxTimeout:Q=60000,maxAttempts:Y=5,minTimeout:G=1000,jitter:J=1,isRetriable:W=()=>!0,signal:K}=Z??{};if(!Number.isInteger(Y)||Y<1)throw RangeError(`Cannot retry as 'maxAttempts' must be a positive integer: current value is ${Y}`);if(!Number.isFinite(X)||X<1)throw RangeError(`Cannot retry as 'multiplier' must be a finite number >= 1: current value is ${X}`);if(Number.isNaN(Q)||Q<=0)throw RangeError(`Cannot retry as 'maxTimeout' must be a positive number: current value is ${Q}`);if(Number.isNaN(G)||G<0)throw RangeError(`Cannot retry as 'minTimeout' must be >= 0: current value is ${G}`);if(G>Q)throw RangeError(`Cannot retry as 'minTimeout' must be <= 'maxTimeout': current values 'minTimeout=${G}', 'maxTimeout=${Q}'`);if(Number.isNaN(J)||J<0||J>1)throw RangeError(`Cannot retry as 'jitter' must be between 0 and 1: current value is ${J}`);let H=0;while(!0){K?.throwIfAborted();try{return await $()}catch(N){if(!W(N))throw N;if(H+1>=Y)throw new NJ(N,Y);let F=uZ(Q,G,H,X,J);await C$(F,K?{signal:K}:void 0)}H++}}var NJ;var r61=B(()=>{NJ=class NJ extends Error{constructor($,Z){super(`Retrying exceeded the maxAttempts (${Z}).`);this.name="RetryError",this.cause=$}}});var $6=B(()=>{r61()});var FJ="thread-gate",iK="decopilot-hosted-harness",pY="automations",FF="background-tools";import{homedir as ny$}from"os";function ty$($){let Z=($??"").trim();return py$.has(Z)?Z:"all"}function ry$($){let Z=($??"").trim();return oy$.has(Z)?Z:"development"}function Z51($,Z,X){let Q=$==="worker"?0:Math.floor(Z*0.6);if(X===void 0||X==="")return Q;let Y=Number(X);return Number.isFinite(Y)&&Y>=0?Y:Q}function o3($){return $==="true"||$==="1"}function ay$($){if($===void 0||$==="")return;return o3($)}function Vz0($,Z,X){if(Z===void 0||Z==="")return;let Q=Number(Z);if(!Number.isSafeInteger(Q)||Q<=0)throw Error(`${$} must be a positive integer`);if(X!==void 0&&Q>X)throw Error(`${$} must be at most ${X}`);return Q}function UJ($,Z,X,Q){return Vz0($,Z,Q)??X}function sy$($,Z,X,Q){if(Z===void 0||Z==="")return X;let Y=Number(Z);if(!Number.isSafeInteger(Y)||Y<0)throw Error(`${$} must be a non-negative integer`);if(Q!==void 0&&Y>Q)throw Error(`${$} must be at most ${Q}`);return Y}function e61($,Z){if($===void 0||$==="")return Z;return $==="true"||$==="1"}function $51($){if(!$)return null;try{let X=new URL($).hostname.replace(/^\[|\]$/g,"");if(X==="localhost"||X==="127.0.0.1"||X==="::1")return null;return $}catch{return null}}function ey$($){return $===void 0||$===""||$==="true"||$==="1"}function Lh($,Z){return $||Z}function Zg$($){let Z=($??"").trim(),X=Z.length>0?Z:"user-desktop";if(X==="cluster")return"agent-sandbox";if(!$g$.has(X))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${$}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return X}function X51($,Z){let X=$.home||Z.DATA_DIR||Z.DECOCMS_HOME||`${ny$()}/deco`,Q=$.localMode,Y=$.nodeEnv||ry$(Z.NODE_ENV),G=Z.NATS_URL||"nats://localhost:4222",J=ay$(Z.NATS_TUNNEL_PUBLIC_ENABLED)??!!Z.NATS_PUBLIC_URL;return{settings:{nodeEnv:Y,port:UJ("PORT",$.port||Z.PORT,3000,65535),baseUrl:$.baseUrl||Z.BASE_URL,publicUrl:Lh(Z.STUDIO_PUBLIC_URL,Z.MESH_PUBLIC_URL),dataDir:X,databasePgSsl:o3(Z.DATABASE_PG_SSL),databasePoolMax:UJ("DATABASE_POOL_MAX",Z.DATABASE_POOL_MAX,5),dbosPoolSize:UJ("DBOS_POOL_SIZE",Z.DBOS_POOL_SIZE,5),betterAuthSecret:Z.BETTER_AUTH_SECRET||"",encryptionKey:Z.ENCRYPTION_KEY||"",studioJwtSecret:Lh(Z.STUDIO_JWT_SECRET,Z.MESH_JWT_SECRET),localMode:Q,disableRateLimit:o3(Z.DISABLE_RATE_LIMIT),studioProvisionSecretKey:Z.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(Z.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((K)=>K.trim().toLowerCase()).filter(Boolean),clickhouseUrl:Z.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:Vz0("CLICKHOUSE_MAX_MEMORY_USAGE",Z.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:Z.MONITORING_OTLP_ENDPOINT,otelServiceName:Z.OTEL_SERVICE_NAME||"studio",natsPublicUrl:Z.NATS_PUBLIC_URL,natsTunnelPublicEnabled:J,natsTunnelSessionTtlSeconds:UJ("NATS_TUNNEL_SESSION_TTL_SECONDS",Z.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:Z.NATS_OPERATOR_JWT,natsAccountJwt:Z.NATS_ACCOUNT_JWT,natsAccountSigningKey:Z.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:Z.NATS_CREDS,configPath:Z.CONFIG_PATH||"./config.json",aiGatewayEnabled:o3(Z.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:Z.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:Z.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:Z.STRIPE_WEBHOOK_SECRET,stripeSecretKey:Z.STRIPE_SECRET_KEY,stripeOrgPriceId:Z.STRIPE_ORG_PRICE_ID,stripeTopupProductId:Z.STRIPE_TOPUP_PRODUCT_ID,topupFeePercent:sy$("STUDIO_TOPUP_FEE_PERCENT",Z.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:o3(Z.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:UJ("STUDIO_FREE_TASKS",Z.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:UJ("STUDIO_MONTHLY_TASKS",Z.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:UJ("STUDIO_MAX_RUNS_PER_TASK",Z.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:o3(Z.ENABLE_DECO_IMPORT),mcpCacheEnabled:e61(Z.MCP_CACHE_ENABLED,Y!=="development"),orgFsPublicSetsJson:Z.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:o3(Z.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:UJ("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",Z.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:UJ("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",Z.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:e61(Z.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),sandboxMaxConcurrentHostedRuns:UJ("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",Z.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:Z.S3_ENDPOINT,s3Bucket:Z.S3_BUCKET,s3Region:Z.S3_REGION||"auto",s3AccessKeyId:Z.S3_ACCESS_KEY_ID,s3SecretAccessKey:Z.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:ey$(Z.S3_FORCE_PATH_STYLE),monitoringS3Bucket:Z.MONITORING_S3_BUCKET,monitoringS3Endpoint:Z.MONITORING_S3_ENDPOINT,monitoringS3Region:Z.MONITORING_S3_REGION,monitoringS3AccessKeyId:Z.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:Z.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:Z.MONITORING_S3_PREFIX,duckdbExtensionDirectory:Z.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:Z.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:Vz0("DUCKDB_THREADS",Z.DUCKDB_THREADS),isCli:!0,noTui:$.noTui===!0,podName:Z.POD_NAME||crypto.randomUUID(),dispatchRole:ty$(Lh(Z.STUDIO_DISPATCH_ROLE,Z.MESH_DISPATCH_ROLE)),sandboxProviderKind:Zg$(Z.STUDIO_SANDBOX_PROVIDER),sandboxStickyHeadRefEnabled:o3(Z.SANDBOX_STICKY_HEAD_REF),taskBoardRerunReusesPrBranch:o3(Z.TASK_BOARD_RERUN_REUSES_PR_BRANCH),sandboxReleaseOnRunEndEnabled:o3(Z.SANDBOX_RELEASE_ON_RUN_END),sandboxReleaseGraceMs:UJ("SANDBOX_RELEASE_GRACE_MS",Z.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:Z.DECO_SUPABASE_URL,decoSupabaseServiceKey:Z.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:Z.FIRECRAWL_API_KEY,reportsInternalApiUrl:Lh(Z.REPORTS_INTERNAL_API_URL,Z.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:Lh(Z.REPORTS_INTERNAL_API_KEY,Z.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:Z.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:Z.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:Z.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:Z.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:Z.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:Z.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:Z.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:$51(Z.DATABASE_URL),externalNatsUrl:$51(G),skipMigrations:$.skipMigrations}}var py$,oy$,$g$;var Cz0=B(()=>{py$=new Set(["all","worker","api"]);oy$=new Set(["production","development","test"]);$g$=new Set(["agent-sandbox","user-desktop"])});function y0(){if(!Dr)Xg$();return Dr}function Xg$(){if(Dr)return;let $={...process.env},Z=X51({port:$.PORT||"3000",home:$.DATA_DIR||$.DECOCMS_HOME||"",localMode:$.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:$.DECO_NO_TUI==="true",vitePort:$.VITE_PORT,baseUrl:$.BASE_URL},$);Dr=Object.freeze({...Z.settings,databaseUrl:$.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:($.NATS_URL||"nats://localhost:4222").split(",").map((X)=>X.trim()).filter(Boolean)})}var Dr=null;var M$=B(()=>{Cz0()});import{context as Qg$,propagation as Yg$,SpanKind as Gg$,SpanStatusCode as _z0}from"@opentelemetry/api";function Wg$($,Z){let X=$ instanceof Error?$.name:void 0;if(X==="TimeoutError")return"timeout";if(X==="AbortError")return"cancelled";if(Z?.aborted)return"cancelled";return null}function Kg$($,Z){if(Z.startsWith("/_sandbox/")){if($===404)return"daemon_gone";if($===409)return"daemon_not_ready"}if($===404&&Z.includes("/sandboxclaims/"))return"claim_gone";return null}function Hg$($,Z){if($===404&&(Z==="/.decofile"||Z==="/live/_meta"||Z==="/sprites.svg"))return"not_a_deco_site";return null}function Ng$($){if(!($ instanceof Error))return!1;if($.message.includes("socket connection was closed"))return!0;let Z=$.code;return Z==="ECONNRESET"||Z==="EPIPE"}async function Fg$($,Z){let X,Q;if($ instanceof Request)X=new URL($.url),Q=Z?.method??$.method;else if($ instanceof URL)X=$,Q=Z?.method??"GET";else X=new URL($),Q=Z?.method??"GET";let Y=`${Q} ${X.host}`;return UF.startActiveSpan(Y,{kind:Gg$.CLIENT,attributes:{"http.request.method":Q,"url.full":X.href,"url.scheme":X.protocol.replace(":",""),"url.path":X.pathname,"url.query":X.search||void 0,"server.address":X.hostname,"server.port":X.port?Number(X.port):void 0}},async(G)=>{try{let J=new Headers(Z?.headers??($ instanceof Request?$.headers:{}));Yg$.inject(Qg$.active(),J,{set:(U,w,O)=>U.set(w,O)});let W={...Z,headers:J},K=await Jg$($,W);G.setAttribute("http.response.status_code",K.status);let H=K.status===405&&Q==="GET"&&(J.get("accept")??"").includes("text/event-stream"),N=K.status>=400?Kg$(K.status,X.pathname):null,F=K.status>=400?Hg$(K.status,X.pathname):null;if(K.status>=400&&!H&&!N&&!F)G.setStatus({code:_z0.ERROR,message:`HTTP ${K.status}`});else{if(N)G.setAttribute("sandbox.lifecycle",N);if(F)G.setAttribute("preview.probe",F);G.setStatus({code:_z0.OK})}return K}catch(J){let W=Z?.signal??($ instanceof Request?$.signal:void 0),K=Wg$(J,W??void 0);if(K)G.setAttribute("abort.reason",K);else if(Ng$(J)&&X.pathname.startsWith("/_sandbox/"))G.setAttribute("sandbox.lifecycle","connection_closed");else G.recordException(J),G.setStatus({code:_z0.ERROR,message:J instanceof Error?J.message:"Fetch failed"});throw J}finally{G.end()}})}function Q51(){globalThis.fetch=Fg$}var Jg$;var Y51=B(()=>{C6();Jg$=globalThis.fetch});import{join as fz0}from"path";function wJ(){return fz0(y0().dataDir,"logs")}function Q_(){return fz0(y0().dataDir,"traces")}function nK(){return fz0(y0().dataDir,"metrics")}function wF($,Z){let X=$[Z];return X!=null?String(X):""}function Eh($,Z){let X=$[Z];return X!=null&&X!==""?String(X):null}function G51($){let{attributes:Z}=$,X=Z[F4.IS_ERROR],Q=Z[F4.DURATION_MS];return{v:1,id:$.id,type:wF(Z,F4.TYPE)||jh,organization_id:wF(Z,F4.ORGANIZATION_ID),connection_id:wF(Z,F4.CONNECTION_ID),connection_title:wF(Z,F4.CONNECTION_TITLE),tool_name:wF(Z,F4.TOOL_NAME),input:wF(Z,F4.INPUT),output:wF(Z,F4.OUTPUT),is_error:X===!0||X===1||X==="true"?1:0,error_message:Eh(Z,F4.ERROR_MESSAGE),duration_ms:typeof Q==="number"?Q:Number(Q)||0,timestamp:new Date(Number($.timestampNano/1000000n)).toISOString(),user_id:Eh(Z,F4.USER_ID),request_id:wF(Z,F4.REQUEST_ID),user_agent:Eh(Z,F4.USER_AGENT),virtual_mcp_id:Eh(Z,F4.VIRTUAL_MCP_ID),properties:Eh(Z,F4.PROPERTIES)}}function Er($){return $[0]*1000+$[1]/1e6}function G_($){return new Date(Er($)).toISOString()}var vz0="mcp.proxy.callTool",F4,jh="tool_call",Y_="llm_call",Lr="decopilot";var eQ=B(()=>{M$();F4={TYPE:"studio.monitoring.type",ORGANIZATION_ID:"studio.monitoring.organization_id",CONNECTION_ID:"studio.monitoring.connection_id",CONNECTION_TITLE:"studio.monitoring.connection_title",TOOL_NAME:"studio.monitoring.tool_name",INPUT:"studio.monitoring.input",OUTPUT:"studio.monitoring.output",IS_ERROR:"studio.monitoring.is_error",ERROR_MESSAGE:"studio.monitoring.error_message",DURATION_MS:"studio.monitoring.duration_ms",USER_ID:"studio.monitoring.user_id",REQUEST_ID:"studio.monitoring.request_id",USER_AGENT:"studio.monitoring.user_agent",VIRTUAL_MCP_ID:"studio.monitoring.virtual_mcp_id",PROPERTIES:"studio.monitoring.properties"}});import{ExportResultCode as jr}from"@opentelemetry/core";import{mkdir as Ug$,rename as wg$,writeFile as Og$}from"fs/promises";import{join as zr}from"path";class XB{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor($){this.basePath=$.basePath,this.flushThreshold=$.flushThreshold??1000,this.maxBufferBytes=$.maxBufferBytes??10485760,this.partitionKey=$.partitionKey;let Z=$.flushIntervalMs??60000;if(Z>0&&Z<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((X)=>{console.error("[NDJSONExporter] Timer flush failed:",X)})},Z),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows($){if(this.isShutdown)return Promise.resolve({code:jr.FAILED});for(let Z of $){let X=JSON.stringify(Z),Q=this.partitionKey?this.partitionKey(Z):"";this.bufferItems.push({partition:Q,json:X}),this.bufferBytes+=Buffer.byteLength(X,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:jr.SUCCESS})).catch((Z)=>{return console.error("[NDJSONExporter] Flush failed:",Z),{code:jr.FAILED}});return Promise.resolve({code:jr.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let Z=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=Z,Z}async doFlush(){if(this.bufferItems.length===0)return;let $=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let Z=new Map;for(let Y of $){let G=Z.get(Y.partition);if(!G)G=[],Z.set(Y.partition,G);G.push(Y.json)}let X=await Promise.allSettled(Array.from(Z.entries()).map(([Y,G])=>this.writeNDJSON(G,Y).then(()=>Y))),Q=X.find((Y)=>Y.status==="rejected");if(Q){let Y=new Set;for(let J of X)if(J.status==="fulfilled")Y.add(J.value);let G=$.filter((J)=>!Y.has(J.partition));this.bufferItems=G.concat(this.bufferItems),this.bufferBytes=0;for(let J of this.bufferItems)this.bufferBytes+=Buffer.byteLength(J.json,"utf8")+1;throw Q.reason}}async writeNDJSON($,Z){let X=new Date,Q=[String(X.getUTCFullYear()),String(X.getUTCMonth()+1).padStart(2,"0"),String(X.getUTCDate()).padStart(2,"0"),String(X.getUTCHours()).padStart(2,"0")],Y=Z?zr(this.basePath,Z,...Q):zr(this.basePath,...Q);if(!this.knownDirs.has(Y))await Ug$(Y,{recursive:!0,mode:448}),this.knownDirs.add(Y);let G=`${crypto.randomUUID()}.ndjson`,J=zr(Y,`.${G}.tmp`),W=zr(Y,G),K=$.join(`
3
3
  `)+`
4
4
  `;await Og$(J,K,{mode:384}),await wg$(J,W)}}var Pr=()=>{};import{ExportResultCode as Bg$}from"@opentelemetry/core";class bz0{inner;constructor($){this.inner=new XB({...$,partitionKey:(Z)=>Z.organization_id})}export($,Z){let X=[];for(let Q of $){if(!Dg$.has(Q.attributes[F4.TYPE]))continue;let Y={};for(let[K,H]of Object.entries(Q.attributes))if(typeof H==="string"||typeof H==="number"||typeof H==="boolean")Y[K]=H;let G=Q.spanContext?.spanId??crypto.randomUUID(),J=Q.hrTime,W=BigInt(J[0])*1000000000n+BigInt(J[1]);X.push(G51({id:G,timestampNano:W,attributes:Y}))}this.inner.exportRows(X).then((Q)=>Z(Q)).catch(()=>Z({code:Bg$.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var Dg$;var J51=B(()=>{eQ();Pr();Dg$=new Set([jh,Y_])});import{ExportResultCode as Lg$}from"@opentelemetry/core";import{AggregationTemporality as Eg$,DataPointType as W51}from"@opentelemetry/sdk-metrics";class xz0{inner;constructor($){this.inner=new XB({...$,partitionKey:(Z)=>Z.organization_id})}selectAggregationTemporality($){return Eg$.DELTA}export($,Z){let X=[];for(let Q of $.scopeMetrics)for(let Y of Q.metrics){let{descriptor:G,dataPointType:J}=Y;if(J===W51.SUM)for(let W of Y.dataPoints){let K=W.attributes;X.push({v:1,name:G.name,type:"sum",unit:G.unit,timestamp:G_(W.endTime),organization_id:String(K["organization.id"]??""),connection_id:String(K["connection.id"]??""),tool_name:String(K["tool.name"]??""),status:String(K.status??""),error_type:String(K["error.type"]??""),value:W.value,hist_count:0,hist_sum:0,hist_min:0,hist_max:0,hist_boundaries:"[]",hist_bucket_counts:"[]"})}else if(J===W51.HISTOGRAM)for(let W of Y.dataPoints){let{attributes:K,value:H}=W;X.push({v:1,name:G.name,type:"histogram",unit:G.unit,timestamp:G_(W.endTime),organization_id:String(K["organization.id"]??""),connection_id:String(K["connection.id"]??""),tool_name:String(K["tool.name"]??""),status:String(K.status??""),error_type:String(K["error.type"]??""),value:H.count,hist_count:H.count,hist_sum:H.sum??0,hist_min:H.min??0,hist_max:H.max??0,hist_boundaries:JSON.stringify(H.buckets.boundaries),hist_bucket_counts:JSON.stringify(H.buckets.counts)})}}this.inner.exportRows(X).then((Q)=>Z(Q)).catch(()=>Z({code:Lg$.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var K51=B(()=>{eQ();Pr()});import{ExportResultCode as jg$}from"@opentelemetry/core";function zg$($){let Z=$.resource,X=Z.attributes["service.name"]??"unknown";return{v:1,trace_id:$.spanContext().traceId,span_id:$.spanContext().spanId,parent_span_id:$.parentSpanContext?.spanId||null,name:$.name,kind:$.kind,status:$.status.code,status_message:$.status.message||null,start_time:G_($.startTime),end_time:G_($.endTime),duration_ms:Er($.endTime)-Er($.startTime),service_name:X,attributes:JSON.stringify($.attributes),events:JSON.stringify($.events),links:JSON.stringify($.links),resource:JSON.stringify(Z.attributes)}}class yz0{inner;constructor($){this.inner=new XB($)}export($,Z){let X=$.map(zg$);this.inner.exportRows(X).then((Q)=>Z(Q)).catch(()=>Z({code:jg$.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var H51=B(()=>{eQ();Pr()});function J_($,Z=65536){if($.length<=Z&&Buffer.byteLength($,"utf8")<=Z)return $;let X=Z-Pg$;if(X<=0)return"... [TRUNCATED]".slice(0,Z);let Q=0,Y=0;for(let G of $){let J=G.charCodeAt(0)<=127?1:Buffer.byteLength(G,"utf8");if(Q+J>X)break;Q+=J,Y+=G.length}return $.slice(0,Y)+"... [TRUNCATED]"}var Pg$;var gz0=B(()=>{Pg$=Buffer.byteLength("... [TRUNCATED]","utf8")});import{NOOP_LOGGER as Ag$}from"@opentelemetry/api-logs";function F51($){N51=$.getLogger(Tg$,Rg$)}function U51(){return N51}var Tg$="studio.monitoring",Rg$="1.0.0",N51;var hz0=B(()=>{N51=Ag$});var B51={};N4(B51,{shouldSkipStudioContext:()=>uz0,isServerPath:()=>qg$,isHealthPath:()=>zh,SYSTEM_PATHS:()=>lZ});function zh($){return $===lZ.HEALTH||$===lZ.HEALTH_LIVE||$===lZ.HEALTH_READY}function w51($){return $===lZ.HEALTH||$===lZ.HEALTH_LIVE||$===lZ.HEALTH_READY||$===lZ.METRICS||$.startsWith(QB.WELL_KNOWN)||$.startsWith(lZ.DBOS_QUEUE_DEPTH_PREFIX)||$===lZ.HOSTED_RUN_PENDING}function O51($){return $.startsWith(QB.API)}function qg$($){return O51($)||$==="/mcp"||$.startsWith(QB.MCP)||$.startsWith(QB.OAUTH_PROXY)||$.startsWith(QB.ORG)||$.startsWith(QB.REPORT)||w51($)}function uz0($){return $==="/"||$.startsWith(QB.API_AUTH)||$==="/api/trigger-callback"||w51($)||!O51($)&&Ig$.test($)}var lZ,QB,Ig$;var Ar=B(()=>{lZ={HEALTH:"/health",HEALTH_LIVE:"/health/live",HEALTH_READY:"/health/ready",METRICS:"/metrics",DBOS_QUEUE_DEPTH_PREFIX:"/dbos-queue-depth/",HOSTED_RUN_PENDING:"/hosted-run-pending"},QB={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known",ORG:"/org/",REPORT:"/report/"},Ig$=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/});import{SpanStatusCode as cz0}from"@opentelemetry/api";var Mg$,kg$=()=>Mg$??=k$.createHistogram("http.server.request.duration",{description:"Duration of inbound HTTP requests handled by the API.",unit:"s",advice:{explicitBucketBoundaries:[0.005,0.01,0.025,0.05,0.075,0.1,0.25,0.5,0.75,1,2.5,5,7.5,10]}}),lz0=async($,Z)=>{if(zh($.req.path))return Z();let X=$.req.raw,Q=new URL(X.url),Y=performance.now(),G=E51(X),J=dz0(X),W={"http.request.url":X.url,"http.request.method":X.method,"http.request.body.size":X.headers.get("content-length")??void 0,"url.scheme":Q.protocol.replace(":",""),"server.address":Q.host,"url.query":Q.search||void 0,"url.path":Q.pathname,"user_agent.original":X.headers.get("user-agent")??void 0,"request.internal":X.headers.has("traceparent"),...J?{"trace.debug.id":J}:{}};await UF.startActiveSpan(`${X.method} ${Q.pathname}`,{attributes:W},G,async(K)=>{$.set("rootSpan",K);try{await Z()}catch(H){K.recordException(H),K.setStatus({code:cz0.ERROR});let N=typeof H==="object"&&H&&"message"in H?String(H.message):JSON.stringify(H);throw console.error("error: ",N,W),H}finally{let H=$.res?.status??500,N=H>=500;K.setStatus({code:N?cz0.ERROR:cz0.OK}),K.setAttribute("http.response.status_code",H);let F=$.get("studioContext");if(F){if(F.auth.user?.id)K.setAttribute("studio.user.id",F.auth.user.id);if(F.auth.apiKey?.id)K.setAttribute("studio.api_key.id",F.auth.apiKey.id);if(F.organization?.id)K.setAttribute("studio.organization.id",F.organization.id)}if(J)L51($.res.headers,J);kg$().record((performance.now()-Y)/1000,{"http.request.method":X.method,"http.route":$.req.routePath,"http.response.status_code":H}),K.end()}})};var D51=B(()=>{C6();Ar()});import{createContextKey as Sg$,metrics as I51,propagation as Vg$,ROOT_CONTEXT as Cg$,SpanStatusCode as j51,trace as iz0}from"@opentelemetry/api";import{logs as q51,SeverityNumber as qh}from"@opentelemetry/api-logs";import{OTLPLogExporter as z51}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as _g$}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as vg$}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as fg$}from"@opentelemetry/instrumentation-runtime-node";import{BatchLogRecordProcessor as mz0,LoggerProvider as P51}from"@opentelemetry/sdk-logs";import{detectResources as bg$,envDetector as xg$,hostDetector as yg$,osDetector as gg$,processDetector as hg$,resourceFromAttributes as A51}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as ug$}from"@opentelemetry/sdk-metrics";import{NodeSDK as cg$}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as T51,SamplingDecision as W_}from"@opentelemetry/sdk-trace-base";class k51{inner;ratio;constructor($,Z){this.inner=$;this.ratio=Z}onEmit($,Z){if($.severityNumber!==void 0&&$.severityNumber>=qh.ERROR||Math.random()<this.ratio)this.inner.onEmit($,Z)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class S51{inner;maxBytes;constructor($,Z){this.inner=$;this.maxBytes=Z}onEmit($,Z){let X=F4.OUTPUT,Q=$.attributes?.[X];if(typeof Q==="string"&&Q.length>this.maxBytes){let Y=J_(Q,this.maxBytes);this.inner.onEmit({...$,attributes:{...$.attributes,[X]:Y}},Z)}else this.inner.onEmit($,Z)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class V51{inner;constructor($){this.inner=$}shouldSample($,Z,X,Q,Y,G){let J=$.getValue(M51);if(!J){if(this.inner)return this.inner.shouldSample($,Z,X,Q,Y,G);return{decision:W_.RECORD_AND_SAMPLED}}let W=dz0(J);if(W)return{decision:W_.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":W}};if(this.inner){let K=this.inner.shouldSample($,Z,X,Q,Y,G);if(K.decision===W_.RECORD_AND_SAMPLED){let H=crypto.randomUUID();K.attributes={...K.attributes??{},"trace.debug.id":H}}return K}return{decision:W_.NOT_RECORD}}toString(){return"DebugSampler"}}class C51{ratio;constructor($){this.ratio=$}shouldSample(){if(Math.random()<this.ratio)return{decision:W_.RECORD_AND_SAMPLED};return{decision:W_.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}function _51(){if(R51)return;let $=y0(),Z=!!process.env.OTEL_EXPORTER_OTLP_ENDPOINT,X=Z?new vg$:void 0;Ph=$.nodeEnv==="test"?null:new bz0({basePath:wJ()}),Ah=$.nodeEnv==="test"?null:new yz0({basePath:Q_()}),Th=$.nodeEnv==="test"?null:new xz0({basePath:nK()}),Rh=Th?new ug$({exporter:Th,exportIntervalMillis:60000}):null;let Q=process.env.STUDIO_ENV??"production"??"unknown",Y={};if(!process.env.OTEL_RESOURCE_ATTRIBUTES?.includes("deployment.environment"))Y["deployment.environment"]=Q;new cg$({serviceName:$.otelServiceName,resource:A51(Y),metricReaders:[nz0,...Rh?[Rh]:[]],sampler:mg$,spanProcessors:[...X?[new T51(X,{scheduledDelayMillis:60000,maxExportBatchSize:1000})]:[],...Ah?[new T51(Ah,{scheduledDelayMillis:60000,maxExportBatchSize:250})]:[]],instrumentations:[new fg$]}).start(),k$=I51.getMeter("studio","1.0.0"),UF=iz0.getTracer("studio","1.0.0");let J=bg$({detectors:[xg$,yg$,gg$,hg$]}).merge(A51({"service.name":$.otelServiceName,...Y})),W=[];if(Z){let F=Q==="prod"||Q==="production"?1:0.1,U=process.env.INFRA_LOG_SAMPLE_RATIO,w=F;if(U!==void 0){let O=Number(U);if(Number.isFinite(O)&&O>=0&&O<=1)w=O;else console.warn(`[observability] Ignoring invalid INFRA_LOG_SAMPLE_RATIO="${U}" (expected 0..1); using ${F}`)}W.push(new k51(new mz0(new z51),w))}Ih=new P51({resource:J,processors:W}),q51.setGlobalLoggerProvider(Ih),v51=Ih.getLogger("studio","1.0.0");let K=$.monitoringOtlpEndpoint??process.env.OTEL_EXPORTER_OTLP_ENDPOINT,H=[];if(K){let N=K.replace(/\/$/,""),F=N.endsWith("/v1/logs")?N:`${N}/v1/logs`;H.push(new S51(new mz0(new z51({url:F})),8000))}if(Ph)H.push(new mz0(Ph,{scheduledDelayMillis:60000,maxExportBatchSize:250}));Tr=new P51({resource:J,processors:H}),F51(Tr),Q51(),R51=!0}async function oX(){let Z=(await Promise.allSettled([Ih?Ih.forceFlush():Promise.resolve(),(async()=>{if(Tr)await Tr.forceFlush();if(Ph)await Ph.forceFlush()})(),(async()=>{let X=iz0.getTracerProvider();if("forceFlush"in X)await X.forceFlush();if(Ah)await Ah.forceFlush()})(),(async()=>{if(Rh)await Rh.forceFlush();if(Th)await Th.forceFlush()})()])).find((X)=>X.status==="rejected");if(Z)throw Z.reason}function f51($,Z,X){return UF.startActiveSpan($,{attributes:X},async(Q)=>{try{let Y=await Z(Q);return Q.setStatus({code:j51.OK}),Y}catch(Y){let G=Y instanceof Error?Y:Error(String(Y??"unknown"));throw Q.setStatus({code:j51.ERROR,message:G.message}),Q.recordException(G),Y}finally{Q.end()}})}var lg$="__d",M51,dg$=1,dz0=($)=>{let X=new URL($.url).searchParams.get(lg$);if(X==="")return crypto.randomUUID();if(!X)X=$.headers.get("x-trace-debug-id");return X},L51=($,Z)=>{try{$.set("x-trace-debug-id",Z)}catch{}},nz0,mg$,Ph=null,Ah=null,Th=null,Rh=null,Ih=null,Tr=null,R51=!1,UF,k$,v51,pz0=($,Z,X)=>{let Q={},Y=X,G=X[X.length-1];if(G!==null&&typeof G==="object"&&!Array.isArray(G)&&!(G instanceof Error)&&Object.getPrototypeOf(G)===Object.prototype)Q=G,Y=X.slice(0,-1);let J=Y.map((W)=>{if(W instanceof Error)return`${W.name}: ${W.message}`;if(typeof W==="object")try{return JSON.stringify(W)}catch{return"[Object]"}return String(W)}).join(" ");v51.emit({severityNumber:$,severityText:Z,body:J,attributes:{"log.source":"console",...Q}})},tz0,E51=($)=>{return Vg$.extract(Cg$,$.headers,{get:(X,Q)=>X.get(Q)??void 0,keys:(X)=>[...X.keys()]}).setValue(M51,$)};var C6=B(()=>{Y51();J51();K51();H51();eQ();gz0();M$();hz0();D51();M51=Sg$("Current request");nz0=new _g$({preventServerStart:!0}),mg$=new V51(new C51(dg$));UF=iz0.getTracer("studio","1.0.0"),k$=I51.getMeter("studio","1.0.0"),v51=q51.getLogger("studio","1.0.0"),tz0={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...$)=>{pz0(qh.ERROR,"ERROR",$),tz0.error(...$)};console.warn=(...$)=>{pz0(qh.WARN,"WARN",$),tz0.warn(...$)};console.debug=(...$)=>{pz0(qh.DEBUG,"DEBUG",$),tz0.debug(...$)}});function YB(){try{return process.memoryUsage()}catch{return null}}import{Session as ng$}from"inspector";function GB($,Z){return new Promise((X,Q)=>K_.post($,Z,(Y,G)=>Y?Q(Y):X(G??{})))}async function x51($){try{return K_=new ng$,K_.connect(),await GB("Profiler.enable"),await GB("Profiler.setSamplingInterval",{interval:$}),await GB("Profiler.start"),N_=!0,!0}catch{return N_=!1,K_=null,!1}}function pg$($,Z){let{nodes:X,samples:Q,timeDeltas:Y}=$;if(!Q?.length)return null;let G=new Map,J=new Map;for(let D of X){G.set(D.id,D);for(let L of D.children??[])J.set(L,D.id)}let W=Math.max(1,Z)*1000,K=0,H=new Map;for(let D=Q.length-1;D>=0;D--){K+=Y[D]??0;let L=Q[D];if(L!==void 0)H.set(L,(H.get(L)??0)+1);if(K>=W)break}let N=-1,F=0;for(let[D,L]of H)if(L>F)F=L,N=D;if(N<0)return null;let U=[],w=new Set,O=N;while(O!=null&&!w.has(O)){w.add(O);let D=G.get(O);if(!D)break;let L=D.callFrame,E=L.url?` ${L.url}:${L.lineNumber+1}`:"";U.push(`${L.functionName||"(anonymous)"}${E}`),O=J.get(O)}return U}async function y51($){if(!N_||!K_||H_)return null;H_=!0;try{let{profile:Z}=await GB("Profiler.stop"),X=Z?pg$(Z,$):null;return await GB("Profiler.start"),X}catch{return N_=!1,null}finally{H_=!1}}async function g51(){if(!N_||!K_||H_)return;H_=!0;try{await GB("Profiler.stop"),await GB("Profiler.start")}catch{N_=!1}finally{H_=!1}}var K_=null,N_=!1,H_=!1;var h51=()=>{};function c51(){if(rz0)return;let $=performance.now()+az0;rz0=setInterval(()=>{let Z=performance.now();u51=Math.max(0,Z-$),$=Z+az0},az0),rz0.unref?.()}function l51(){return c51(),u51}function d51(){if(c51(),process.env.EVENT_LOOP_MONITOR!=="1")return()=>{};let $=Number(process.env.EVENT_LOOP_INTERVAL_MS??250),Z=Number(process.env.EVENT_LOOP_SPIKE_MS??100),X=process.env.EVENT_LOOP_PROFILE==="1",Q=Number(process.env.EVENT_LOOP_PROFILE_MS??1000),Y=Number(process.env.EVENT_LOOP_PROFILE_INTERVAL_US??1e4),G=30000,J=performance.now();if(X)x51(Y).then((H)=>{console.warn(JSON.stringify({msg:"event-loop-profiler",status:H?"started":"unavailable",intervalUs:Y}))});let W=k$.createHistogram("eventloop.delay",{description:"Event-loop lag measured as timer scheduling drift",unit:"ms"}),K=performance.now()+$;return Rr=setInterval(()=>{let H=performance.now(),N=Math.max(0,H-K);if(K=H+$,W.record(N),N>Z){let F=YB();console.warn(JSON.stringify({msg:"event-loop-stall",ts:new Date().toISOString(),lagMs:Math.round(N),rss:F?.rss,heapUsed:F?.heapUsed,heapTotal:F?.heapTotal,external:F?.external}))}if(X){if(N>Q)y51(Math.round(N)).then((F)=>{if(F?.length)console.warn(JSON.stringify({msg:"event-loop-stall-profile",ts:new Date().toISOString(),lagMs:Math.round(N),stack:F}))}),J=H;else if(H-J>G)g51(),J=H}},$),Rr.unref?.(),()=>{if(Rr)clearInterval(Rr)}}var Rr,rz0,u51=0,az0=500;var sz0=B(()=>{C6();h51()});var JB=C((p51)=>{Object.defineProperty(p51,"__esModule",{value:!0});p51.RepublishHeaders=p51.DirectMsgHeaders=p51.JsHeaders=p51.AdvisoryKind=void 0;p51.isOrderedPushConsumerOptions=ag$;p51.isPullConsumer=sg$;p51.isPushConsumer=eg$;p51.isBoundPushConsumerOptions=$h$;function ag$($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function sg$($){return $.isPullConsumer()}function eg$($){return $.isPushConsumer()}function $h$($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}p51.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};p51.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};p51.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};p51.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var $Y=C((o51)=>{Object.defineProperty(o51,"__esModule",{value:!0});o51.TD=o51.TE=o51.Empty=void 0;o51.encode=Hh$;o51.decode=Nh$;o51.Empty=new Uint8Array(0);o51.TE=new TextEncoder;o51.TD=new TextDecoder;function Kh$(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function Hh$(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(o51.TE.encode($[X]));if(Z.length===0)return o51.Empty;if(Z.length===1)return Z[0];return Kh$(...Z)}function Nh$($){if(!$||$.length===0)return"";return o51.TD.decode($)}});var ZY=C((s51)=>{Object.defineProperty(s51,"__esModule",{value:!0});s51.errors=s51.PermissionViolationError=s51.NoRespondersError=s51.TimeoutError=s51.RequestError=s51.ProtocolError=s51.ConnectionError=s51.DrainingConnectionError=s51.ClosedConnectionError=s51.AuthorizationError=s51.UserAuthenticationExpiredError=s51.InvalidOperationError=s51.InvalidArgumentError=s51.InvalidSubjectError=void 0;class $P0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}s51.InvalidSubjectError=$P0;class qr extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new qr(`${$} ${Z}`,X)}}s51.InvalidArgumentError=qr;class ZP0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}s51.InvalidOperationError=ZP0;class Mr extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new Mr($);return null}}s51.UserAuthenticationExpiredError=Mr;class kr extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new kr($);return null}}s51.AuthorizationError=kr;class XP0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}s51.ClosedConnectionError=XP0;class QP0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}s51.DrainingConnectionError=QP0;class YP0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}s51.ConnectionError=YP0;class GP0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}s51.ProtocolError=GP0;class JP0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof Sr}}s51.RequestError=JP0;class WP0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}s51.TimeoutError=WP0;class Sr extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}s51.NoRespondersError=Sr;class Vr extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new Vr($,X,Q,Y)}}s51.PermissionViolationError=Vr;s51.errors={AuthorizationError:kr,ClosedConnectionError:XP0,ConnectionError:YP0,DrainingConnectionError:QP0,InvalidArgumentError:qr,InvalidOperationError:ZP0,InvalidSubjectError:$P0,NoRespondersError:Sr,PermissionViolationError:Vr,ProtocolError:GP0,RequestError:JP0,TimeoutError:WP0,UserAuthenticationExpiredError:Mr}});var OJ=C((Q91)=>{Object.defineProperty(Q91,"__esModule",{value:!0});Q91.SimpleMutex=Q91.Perf=void 0;Q91.extend=Mh$;Q91.render=kh$;Q91.timeout=Sh$;Q91.delay=Vh$;Q91.deadline=Ch$;Q91.deferred=HP0;Q91.debugDeferred=_h$;Q91.shuffle=vh$;Q91.collect=fh$;Q91.jitter=X91;Q91.backoff=bh$;Q91.nanos=xh$;Q91.millis=yh$;Q91.randomToken=uh$;var qh$=$Y(),KP0=ZY();function Mh$($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function kh$($){return qh$.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function Sh$($,Z=!0){let X=Z?new KP0.TimeoutError:null,Q,Y,G=new Promise((J,W)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)W(new KP0.TimeoutError);else W(X)},$)});return Object.assign(G,Q)}function Vh$($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function Ch$($,Z=1000){let X=HP0(),Q=setTimeout(()=>{X.reject(new KP0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function HP0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function _h$(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function vh$($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function fh$($){let Z=[];for await(let X of $)Z.push(X);return Z}class $91{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}Q91.Perf=$91;class Z91{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=HP0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Q91.SimpleMutex=Z91;function X91($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function bh$($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return X91(X>Z?$[Z]:$[X])}}}function xh$($){return $*1e6}function yh$($){return Math.floor($/1e6)}var gh$="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",pK=new Uint8Array(62);for(let $=0;$<62;$++)pK[$]=gh$.charCodeAt($);var hh$=218340105584896;function uh$(){let $=Math.floor(Math.random()*hh$),Z=$%62,X=pK[Z];$=($-Z)/62,Z=$%62;let Q=pK[Z];$=($-Z)/62,Z=$%62;let Y=pK[Z];$=($-Z)/62,Z=$%62;let G=pK[Z];$=($-Z)/62,Z=$%62;let J=pK[Z];$=($-Z)/62,Z=$%62;let W=pK[Z];$=($-Z)/62,Z=$%62;let K=pK[Z];$=($-Z)/62;let H=pK[$];return String.fromCharCode(X,Q,Y,G,J,W,K,H)}});var F91=C((H91)=>{Object.defineProperty(H91,"__esModule",{value:!0});H91.nuid=H91.NuidImpl=void 0;var Xu$="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",OF=62,_r=12,W91=10,G91=33,Qu$=333,J91=_r+W91,FP0=new Uint8Array(OF);for(let $=0;$<OF;$++)FP0[$]=Xu$.charCodeAt($);var Cr=4294967296,K91=BigInt(OF)**BigInt(W91),Mh=Number(K91/(1n<<32n)),NP0=Number(K91%(1n<<32n));function Yu$($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function Gu$($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else Yu$($)}class UP0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(J91),this.cbuf=new Uint8Array(_r),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Mh+1)),this.seqLo=Math.floor(Math.random()*Cr);while($++<8&&this.seqHi===Mh&&this.seqLo>=NP0);if(this.seqHi===Mh&&this.seqLo>=NP0)this.seqLo=0;this.inc=Math.random()*(Qu$-G91)+G91|0}setPre(){Gu$(this.cbuf);for(let $=0;$<_r;$++)this.buf[$]=FP0[this.cbuf[$]%OF]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=J91-1;X>=_r;X--){let Q=Math.floor($/OF),G=($-Q*OF)*Cr+Z,J=Math.floor(G/OF),W=G-J*OF;this.buf[X]=FP0[W],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=Cr)this.seqLo-=Cr,this.seqHi+=1;if(this.seqHi>Mh||this.seqHi===Mh&&this.seqLo>=NP0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}H91.NuidImpl=UP0;H91.nuid=new UP0});var B91=C((w91)=>{Object.defineProperty(w91,"__esModule",{value:!0});w91.nuid=w91.Nuid=void 0;var U91=F91();w91.Nuid=U91.NuidImpl;w91.nuid=U91.nuid});var fr=C((vr)=>{Object.defineProperty(vr,"__esModule",{value:!0});vr.nuid=vr.Nuid=void 0;var D91=B91();Object.defineProperty(vr,"Nuid",{enumerable:!0,get:function(){return D91.Nuid}});Object.defineProperty(vr,"nuid",{enumerable:!0,get:function(){return D91.nuid}})});var BF=C((L91)=>{Object.defineProperty(L91,"__esModule",{value:!0});L91.DEFAULT_HOST=L91.DEFAULT_PORT=L91.Match=void 0;L91.syncIterator=Fu$;L91.createInbox=Uu$;var Hu$=fr(),Nu$=ZY();L91.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Fu$($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function Uu$($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Nu$.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Hu$.nuid.next()}`}L91.DEFAULT_PORT=4222;L91.DEFAULT_HOST="127.0.0.1"});var kh=C((P91)=>{Object.defineProperty(P91,"__esModule",{value:!0});P91.DataBuffer=void 0;var j91=$Y();class z91{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return j91.TE.encode($)}static toAscii($){return j91.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}P91.DataBuffer=z91});var WB=C((R91)=>{Object.defineProperty(R91,"__esModule",{value:!0});R91.LF=R91.CR=R91.CRLF=R91.CR_LF_LEN=R91.CR_LF=void 0;R91.setTransportFactory=zu$;R91.defaultPort=Pu$;R91.getUrlParseFn=Au$;R91.newTransport=Tu$;R91.getResolveFn=Ru$;R91.protoLen=T91;R91.extractProtocolMessage=Iu$;var Lu$=$Y(),Eu$=BF(),ju$=kh(),XY;function zu$($){XY=$}function Pu$(){return XY!==void 0&&XY.defaultPort!==void 0?XY.defaultPort:Eu$.DEFAULT_PORT}function Au$(){return XY!==void 0&&XY.urlParseFn?XY.urlParseFn:void 0}function Tu$(){if(!XY||typeof XY.factory!=="function")throw Error("transport fn is not set");return XY.factory()}function Ru$(){return XY!==void 0&&XY.dnsResolveFn?XY.dnsResolveFn:void 0}R91.CR_LF=`\r
5
5
  `;R91.CR_LF_LEN=R91.CR_LF.length;R91.CRLF=ju$.DataBuffer.fromAscii(R91.CR_LF);R91.CR=new Uint8Array(R91.CRLF)[0];R91.LF=new Uint8Array(R91.CRLF)[1];function T91($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===R91.CR&&$[X]===R91.LF)return X+1}return 0}function Iu$($){let Z=T91($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return Lu$.TD.decode(Q)}return""}});var LP0=C((_91)=>{Object.defineProperty(_91,"__esModule",{value:!0});_91.ipV4=S91;_91.isIP=xu$;_91.parseIP=V91;var Sh=4,KB=16,br=48,k91=57,q91=65,fu$=70,M91=97,bu$=102,DP0=16777215;function S91($,Z,X,Q){let Y=new Uint8Array(KB);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((J,W)=>{Y[W]=J}),Y[12]=$,Y[13]=Z,Y[14]=X,Y[15]=Q,Y}function xu$($){return V91($)!==void 0}function V91($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return C91($);case":":return yu$($)}return}function C91($){let Z=new Uint8Array(Sh);for(let X=0;X<Sh;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=gu$($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return S91(Z[0],Z[1],Z[2],Z[3])}function yu$($){let Z=new Uint8Array(KB),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<KB){let{n:Y,c:G,ok:J}=hu$($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=KB-Sh)return;if(Q+Sh>KB)return;let W=C91($);if(W===void 0)return;Z[Q]=W[12],Z[Q+1]=W[13],Z[Q+2]=W[14],Z[Q+3]=W[15],$="",Q+=Sh;break}if(Z[Q]=Y>>8,Z[Q+1]=Y,Q+=2,$=$.substring(G),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(X>=0)return;if(X=Q,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(Q<KB){if(X<0)return;let Y=KB-Q;for(let G=Q-1;G>=X;G--)Z[G+Y]=Z[G];for(let G=X+Y-1;G>=X;G--)Z[G]=0}else if(X>=0)return;return Z}function gu$($){let Z=0,X=0;for(Z=0;Z<$.length&&br<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=k91;Z++)if(X=X*10+($.charCodeAt(Z)-br),X>=DP0)return{n:DP0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function hu$($){let Z=0,X=0;for(X=0;X<$.length;X++){if(br<=$.charCodeAt(X)&&$.charCodeAt(X)<=k91)Z*=16,Z+=$.charCodeAt(X)-br;else if(M91<=$.charCodeAt(X)&&$.charCodeAt(X)<=bu$)Z*=16,Z+=$.charCodeAt(X)-M91+10;else if(q91<=$.charCodeAt(X)&&$.charCodeAt(X)<=fu$)Z*=16,Z+=$.charCodeAt(X)-q91+10;else break;if(Z>=DP0)return{n:0,c:X,ok:!1}}if(X===0)return{n:0,c:X,ok:!1};return{n:Z,c:X,ok:!0}}});var TP0=C((f91)=>{Object.defineProperty(f91,"__esModule",{value:!0});f91.Servers=f91.ServerImpl=void 0;f91.isIPV4OrHostname=v91;f91.hostPort=AP0;var EP0=WB(),jP0=OJ(),zP0=LP0(),du$=BF(),mu$=ZY();function v91($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function PP0($){return!v91($)}function iu$($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function AP0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=iu$($),PP0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=PP0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):du$.DEFAULT_PORT,Y=new URL(`${X===80?"https":"http"}://${$}`);Y.port=`${X}`;let G=Y.hostname;if(G.charAt(0)==="[")G=G.substring(1,G.length-1);return{listen:Y.host,hostname:G,port:X}}class F_{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=AP0($);this.listen=X.listen,this.hostname=X.hostname,this.port=X.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,zP0.isIP)(this.hostname))return[this];else{let X=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${X.join(",")}`);for(let Q of X){let Y=this.port===80?"https":"http",G=new URL(`${Y}://${PP0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new F_(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,jP0.shuffle)(Z);return this.resolves=Z,Z}}f91.ServerImpl=F_;class xr{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw mu$.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,EP0.getUrlParseFn)(),X=new Map;for(let Y of this.servers)X.set(Y.listen,Y);let Q=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:G}=AP0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new F_(Y))}if(this.randomize)(0,jP0.shuffle)(Q);if(this.servers=Q,this.currentServer===void 0||!Q.includes(this.currentServer))this.currentServer=Q[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,zP0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let X=(0,EP0.getUrlParseFn)();$=X?X($):$;let Q=new F_($,Z);if((0,zP0.isIP)(Q.hostname))Q.tlsName=this.tlsName;this.servers.push(Q)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return xr.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return xr.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let X=[],Q=[],Y=(0,EP0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((W)=>{W=Y?Y(W,Z):W;let K=new F_(W,!0);G.set(W,K)});let J=[];if(this.servers.forEach((W,K)=>{let H=W.listen;if(W.gossiped&&this.currentServer.listen!==H&&G.get(H)===void 0)J.push(K);G.delete(H)}),J.reverse(),J.forEach((W)=>{let K=this.servers.splice(W,1);Q=Q.concat(K[0].listen)}),G.forEach((W,K)=>{this.servers.push(W),X.push(K)}),this.randomize&&X.length>0){let W=this.currentServer,K=this.servers.filter((H)=>H!==W);(0,jP0.shuffle)(K),this.servers=W?[W,...K]:K}return{added:X,deleted:Q}}}f91.Servers=xr});var yr=C((g91)=>{Object.defineProperty(g91,"__esModule",{value:!0});g91.QueuedIteratorImpl=void 0;var RP0=OJ(),x91=ZY();class y91{inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,RP0.deferred)(),this.yields=[],this.iterClosed=(0,RP0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(X){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new x91.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new x91.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let Q=$[Z];try{Q()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let X=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-X:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,RP0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}g91.QueuedIteratorImpl=y91});var IP0=C((l91)=>{Object.defineProperty(l91,"__esModule",{value:!0});l91.MuxSubscription=void 0;var ou$=BF(),u91=ZY();class c91{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,ou$.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((X)=>{X.resolver(Z,{})}),!0;if(Z.operation==="publish"){let X=this.all().find((Q)=>{return Q.requestSubject===Z.subject});if(X)return X.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let X=this.getToken(Z);if(X){let Q=this.get(X);if(Q){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new u91.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new u91.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}l91.MuxSubscription=c91});var qP0=C((i91)=>{Object.defineProperty(i91,"__esModule",{value:!0});i91.Heartbeat=void 0;var ru$=OJ();class m91{ph;interval;maxOut;timer;pendings;constructor($,Z,X){this.ph=$,this.interval=Z,this.maxOut=X,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,ru$.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}i91.Heartbeat=m91});var SP0=C((r91)=>{Object.defineProperty(r91,"__esModule",{value:!0});r91.DenoBuffer=r91.MAX_SIZE=r91.AssertionError=void 0;r91.assert=t91;r91.concat=o91;r91.append=su$;r91.readAll=eu$;r91.writeAll=$c$;var au$=$Y();class MP0 extends Error{constructor($){super($);this.name="AssertionError"}}r91.AssertionError=MP0;function t91($,Z="Assertion failed."){if(!$)throw new MP0(Z)}var p91=32768;r91.MAX_SIZE=4294967294;function gr($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function o91($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let X=new Uint8Array($.length+Z.length);return X.set($,0),X.set(Z,$.length),X}function su$($,Z){return o91($,Uint8Array.of(Z))}class kP0{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){t91($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=gr(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(au$.TE.encode($))}write($){let Z=this._grow($.byteLength);return gr($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let X=this._tryGrowByReslice($);if(X>=0)return X;let Q=this.capacity;if($<=Math.floor(Q/2)-Z)gr(this._buf.subarray(this._off),this._buf);else if(Q+$>r91.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,r91.MAX_SIZE));gr(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,r91.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,X=new Uint8Array(p91);while(!0){let Q=this.capacity-this.length<p91,Y=Q?X:new Uint8Array(this._buf.buffer,this.length),G=$.read(Y);if(G===null)return Z;if(Q)this.write(Y.subarray(0,G));else this._reslice(this.length+G);Z+=G}}}r91.DenoBuffer=kP0;function eu$($){let Z=new kP0;return Z.readFrom($),Z.bytes()}function $c$($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var _P0=C((ZZ1)=>{Object.defineProperty(ZZ1,"__esModule",{value:!0});ZZ1.cc=ZZ1.State=ZZ1.Parser=ZZ1.Kind=void 0;ZZ1.describe=Wc$;var VP0=SP0(),CP0=$Y();ZZ1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function Wc$($){let Z,X="";switch($.kind){case ZZ1.Kind.MSG:Z="MSG";break;case ZZ1.Kind.OK:Z="OK";break;case ZZ1.Kind.ERR:Z="ERR",X=CP0.TD.decode($.data);break;case ZZ1.Kind.PING:Z="PING";break;case ZZ1.Kind.PONG:Z="PONG";break;case ZZ1.Kind.INFO:Z="INFO",X=CP0.TD.decode($.data)}return`${Z}: ${X}`}function s91(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var e91=48,Kc$=57,U_=67108864;class $Z1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=ZZ1.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let X=$[Z];switch(this.state){case ZZ1.State.OP_START:switch(X){case ZZ1.cc.M:case ZZ1.cc.m:this.state=ZZ1.State.OP_M,this.hdr=-1,this.ma=s91();break;case ZZ1.cc.H:case ZZ1.cc.h:this.state=ZZ1.State.OP_H,this.hdr=0,this.ma=s91();break;case ZZ1.cc.P:case ZZ1.cc.p:this.state=ZZ1.State.OP_P;break;case ZZ1.cc.PLUS:this.state=ZZ1.State.OP_PLUS;break;case ZZ1.cc.MINUS:this.state=ZZ1.State.OP_MINUS;break;case ZZ1.cc.I:case ZZ1.cc.i:this.state=ZZ1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_H:switch(X){case ZZ1.cc.M:case ZZ1.cc.m:this.state=ZZ1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_M:switch(X){case ZZ1.cc.S:case ZZ1.cc.s:this.state=ZZ1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_MS:switch(X){case ZZ1.cc.G:case ZZ1.cc.g:this.state=ZZ1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_MSG:switch(X){case ZZ1.cc.SPACE:case ZZ1.cc.TAB:this.state=ZZ1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_MSG_SPC:switch(X){case ZZ1.cc.SPACE:case ZZ1.cc.TAB:continue;default:this.state=ZZ1.State.MSG_ARG,this.as=Z}break;case ZZ1.State.MSG_ARG:switch(X){case ZZ1.cc.CR:this.drop=1;break;case ZZ1.cc.NL:{let Q=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(Q),this.drop=0,this.as=Z+1,this.state=ZZ1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case ZZ1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:ZZ1.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=ZZ1.State.MSG_END}else{let Q=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<Q)Q=Y;if(Q>0)this.msgBuf.write($.subarray(Z,Z+Q)),Z=Z+Q-1;else this.msgBuf.writeByte(X)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:ZZ1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=ZZ1.State.MSG_END;break;case ZZ1.State.MSG_END:switch(X){case ZZ1.cc.NL:this.drop=0,this.as=Z+1,this.state=ZZ1.State.OP_START;break;default:continue}break;case ZZ1.State.OP_PLUS:switch(X){case ZZ1.cc.O:case ZZ1.cc.o:this.state=ZZ1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_PLUS_O:switch(X){case ZZ1.cc.K:case ZZ1.cc.k:this.state=ZZ1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_PLUS_OK:switch(X){case ZZ1.cc.NL:this.dispatcher.push({kind:ZZ1.Kind.OK}),this.drop=0,this.state=ZZ1.State.OP_START;break}break;case ZZ1.State.OP_MINUS:switch(X){case ZZ1.cc.E:case ZZ1.cc.e:this.state=ZZ1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_MINUS_E:switch(X){case ZZ1.cc.R:case ZZ1.cc.r:this.state=ZZ1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_MINUS_ER:switch(X){case ZZ1.cc.R:case ZZ1.cc.r:this.state=ZZ1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_MINUS_ERR:switch(X){case ZZ1.cc.SPACE:case ZZ1.cc.TAB:this.state=ZZ1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_MINUS_ERR_SPC:switch(X){case ZZ1.cc.SPACE:case ZZ1.cc.TAB:continue;default:this.state=ZZ1.State.MINUS_ERR_ARG,this.as=Z}break;case ZZ1.State.MINUS_ERR_ARG:switch(X){case ZZ1.cc.CR:this.drop=1;break;case ZZ1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:ZZ1.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=ZZ1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case ZZ1.State.OP_P:switch(X){case ZZ1.cc.I:case ZZ1.cc.i:this.state=ZZ1.State.OP_PI;break;case ZZ1.cc.O:case ZZ1.cc.o:this.state=ZZ1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_PO:switch(X){case ZZ1.cc.N:case ZZ1.cc.n:this.state=ZZ1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_PON:switch(X){case ZZ1.cc.G:case ZZ1.cc.g:this.state=ZZ1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_PONG:switch(X){case ZZ1.cc.NL:this.dispatcher.push({kind:ZZ1.Kind.PONG}),this.drop=0,this.state=ZZ1.State.OP_START;break}break;case ZZ1.State.OP_PI:switch(X){case ZZ1.cc.N:case ZZ1.cc.n:this.state=ZZ1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_PIN:switch(X){case ZZ1.cc.G:case ZZ1.cc.g:this.state=ZZ1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_PING:switch(X){case ZZ1.cc.NL:this.dispatcher.push({kind:ZZ1.Kind.PING}),this.drop=0,this.state=ZZ1.State.OP_START;break}break;case ZZ1.State.OP_I:switch(X){case ZZ1.cc.N:case ZZ1.cc.n:this.state=ZZ1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_IN:switch(X){case ZZ1.cc.F:case ZZ1.cc.f:this.state=ZZ1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_INF:switch(X){case ZZ1.cc.O:case ZZ1.cc.o:this.state=ZZ1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_INFO:switch(X){case ZZ1.cc.SPACE:case ZZ1.cc.TAB:this.state=ZZ1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case ZZ1.State.OP_INFO_SPC:switch(X){case ZZ1.cc.SPACE:case ZZ1.cc.TAB:continue;default:this.state=ZZ1.State.INFO_ARG,this.as=Z}break;case ZZ1.State.INFO_ARG:switch(X){case ZZ1.cc.CR:this.drop=1;break;case ZZ1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:ZZ1.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=ZZ1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===ZZ1.State.MSG_ARG||this.state===ZZ1.State.MINUS_ERR_ARG||this.state===ZZ1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new VP0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===ZZ1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new VP0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,X=new Uint8Array($+Z);if(X.set(this.ma.subject),this.ma.reply)X.set(this.ma.reply,$);if(this.argBuf=new VP0.DenoBuffer(X),this.ma.subject=X.subarray(0,$),this.ma.reply)this.ma.reply=X.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case ZZ1.cc.SPACE:case ZZ1.cc.TAB:case ZZ1.cc.CR:case ZZ1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],U_);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],U_);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${CP0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case ZZ1.cc.SPACE:case ZZ1.cc.TAB:case ZZ1.cc.CR:case ZZ1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],U_),this.ma.size=this.protoParseInt(Z[3],U_);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],U_),this.ma.size=this.protoParseInt(Z[4],U_);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let X=0;for(let Q=0;Q<$.length;Q++){if($[Q]<e91||$[Q]>Kc$)return-1;X=X*10+($[Q]-e91)}return Z!==void 0&&X>Z?-1:X}}ZZ1.Parser=$Z1;ZZ1.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};ZZ1.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var cr=C((QZ1)=>{Object.defineProperty(QZ1,"__esModule",{value:!0});QZ1.MsgHdrsImpl=void 0;QZ1.canonicalMIMEHeaderKey=fP0;QZ1.headers=Fc$;var XZ1=$Y(),BJ=BF(),ur=ZY();function fP0($){let N=!0,F=Array($.length);for(let U=0;U<$.length;U++){let w=$.charCodeAt(U);if(w===58||w<33||w>126)throw ur.InvalidArgumentError.format("header",`'${$[U]}' is not a valid character in a header name`);if(N&&97<=w&&w<=122)w-=32;else if(!N&&65<=w&&w<=90)w+=32;F[U]=w,N=w==45}return String.fromCharCode(...F)}function Fc$($=0,Z=""){if($===0&&Z!=="")throw ur.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw ur.InvalidArgumentError.format("description","is required");return new w_($,Z)}var vP0="NATS/1.0";class w_{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,X]of this.headers){let Q=$.values(Z);if(X.length!==Q.length)return!1;let Y=[...X].sort(),G=[...Q].sort();for(let J=0;J<Y.length;J++)if(Y[J]!==G[J])return!1}return!0}return!1}static decode($){let Z=new w_,Q=XZ1.TD.decode($).split(`\r
@@ -946,7 +946,7 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
946
946
  d. Report the failing tool/connection, error pattern, and suggest the fix or owner.
947
947
  </workflows>`,kn1={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:Gd8,getId:b7.USAGE_MANAGER}});function pg0($){return FL.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function Jd8($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function D60({virtualMcp:$,agentId:Z=$.id,organizationId:X,ctx:Q}){let Y=pg0(Z);if(!Y)return $;let G=await Jd8(Y,{orgId:X,ctx:Q}),J=G.selectedTools?[...G.selectedTools]:null;return{...$,metadata:{...$.metadata??{},instructions:G.instructions},connections:$.connections.map((W)=>({...W,selected_tools:J}))}}async function L60($,Z){if(!("checklist"in $))return[];return Promise.all($.checklist.map(async(X)=>({label:X.label,activeForm:X.activeForm,action:X.action,completed:await X.isCompleted(Z),alwaysSuggest:X.alwaysSuggest})))}async function Vn1($,Z,X){let Q={self:u4.SELF($),registry:u4.REGISTRY($),"community-registry":u4.COMMUNITY_REGISTRY($)};await Promise.all(FL.map(async(Y)=>{let G=Y.getId($),J=await X.findById(G,$),K=(Y.selectedConnections??["self"]).map((H)=>Q[H]);if(J){await X.update(G,Z,{metadata:{...J.metadata??{},instructions:Y.instructions},connections:K.map((H)=>{let N=J.connections.find((F)=>F.connection_id===H);return{connection_id:H,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:N?.selected_resources??null,selected_prompts:N?.selected_prompts??null}})});return}await X.create($,Z,{title:Y.title,description:Y.description,icon:Y.icon,status:"active",pinned:!1,metadata:{instructions:Y.instructions},connections:K.map((H)=>({connection_id:H,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:null,selected_prompts:Y.selectedPrompts?[...Y.selectedPrompts]:null}))},{id:G})}))}var FL;var fb=B(()=>{L8();Un1();On1();Dn1();Pn1();Tn1();In1();Mn1();Sn1();FL=[zn1,Fn1,Bn1,An1,wn1,Rn1,qn1,kn1]});import{DBOS as E60}from"@dbos-inc/dbos-sdk";async function Wd8($){let Z=m8(),X=new Df(Z.db);await Vn1($.orgId,$.createdBy,X)}async function Kd8($){let Z=m8(),X=new Df(Z.db);for(let Q of FL){let Y=Q.getId($.orgId),G=await X.findById(Y,$.orgId);if(!G)continue;let J=Q.selectedPrompts?[...Q.selectedPrompts]:null;if(G.connections.every((K)=>{let H=K.selected_prompts;if(J===null)return H===null;if(H===null)return!1;if(H.length!==J.length)return!1;return H.every((N,F)=>N===J[F])}))continue;await X.update(Y,$.createdBy,{connections:G.connections.map((K)=>({connection_id:K.connection_id,selected_tools:K.selected_tools,selected_resources:K.selected_resources,selected_prompts:J}))})}}async function Hd8($){await E60.runStep(()=>Wd8($),{name:"installStudioPack"}),await E60.runStep(()=>Kd8($),{name:"backfillSelectedPrompts"})}async function tg0($){await E60.startWorkflow(Nd8,{workflowID:`install-studio-pack:${Fd8}:${$.orgId}`})($)}async function Cn1(){let Z=await m8().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),X=new Map;for(let Q of Z)if(!X.has(Q.organizationId))X.set(Q.organizationId,Q.userId);await Promise.all(Array.from(X).map(async([Q,Y])=>{try{await tg0({orgId:Q,createdBy:Y})}catch(G){console.error("[studio-pack-backfill] enqueue failed",{orgId:Q},G)}}))}var Nd8,Fd8="v5";var j60=B(()=>{jG();Kb0();fb();Nd8=E60.registerWorkflow(Hd8,{name:"installStudioPackWorkflow"})});class Bm{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new Bm,Z=new Bm;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 a8}from"zod";var z60,_n1,vn1,fn1,bn1,xn1,yn1,gn1,hn1,un1;var bb=B(()=>{z60=a8.record(a8.string(),a8.array(a8.string())),_n1=a8.object({id:a8.string().describe("Unique identifier for the API key"),name:a8.string().describe("Human-readable name for the API key"),userId:a8.string().describe("ID of the user who owns this API key"),permissions:z60.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:a8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:a8.string().datetime().describe("When the API key was created (ISO 8601)")}),vn1=a8.object({name:a8.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:z60.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:a8.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:a8.record(a8.string(),a8.unknown()).optional().describe("Additional metadata to store with the API key")}),fn1=a8.object({id:a8.string().describe("Unique identifier for the API key"),name:a8.string().describe("Human-readable name for the API key"),key:a8.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:z60.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:a8.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:a8.string().datetime().describe("When the API key was created (ISO 8601)")}),bn1=a8.object({}),xn1=a8.object({items:a8.array(_n1).describe("List of API keys (without key values)")}),yn1=a8.object({keyId:a8.string().describe("ID of the API key to update"),name:a8.string().min(1).max(64).optional().describe("New name for the API key"),permissions:z60.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:a8.record(a8.string(),a8.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),gn1=a8.object({item:_n1.describe("The updated API key (without key value)")}),hn1=a8.object({keyId:a8.string().describe("ID of the API key to delete")}),un1=a8.object({success:a8.boolean().describe("Whether the deletion was successful"),keyId:a8.string().describe("ID of the deleted API key")})});var og0;var cn1=B(()=>{x4();v0();bb();og0=m({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:vn1,outputSchema:fn1,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.create({name:$.name,permissions:$.permissions,expiresIn:$.expiresIn,metadata:{...$.metadata,organization:Z.organization}}),Q=X.expiresAt?X.expiresAt instanceof Date?X.expiresAt.toISOString():X.expiresAt:null,Y=X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,G=W1(Z);if(G)y1.capture({distinctId:G,event:"api_key_created",...Z.organization?.id?{groups:{organization:Z.organization.id}}:{},properties:{key_id:X.id,key_name:X.name??$.name,organization_id:Z.organization?.id,has_expiry:!!Q}});return{id:X.id,name:X.name??$.name,key:X.key,permissions:X.permissions??{},expiresAt:Q,createdAt:Y}}})});var rg0;var ln1=B(()=>{x4();v0();bb();rg0=m({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:hn1,outputSchema:un1,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=W1(Z);if(!X)throw Error("User ID required to delete API key");let Y=(await Z.boundAuth.apiKey.list())?.find((K)=>K.id===$.keyId);if(!Y)throw Error("API key not found");let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==W)throw Error("Cannot delete API key from another organization");if(await Z.boundAuth.apiKey.delete($.keyId),W)y1.capture({distinctId:X,event:"api_key_deleted",groups:{organization:W},properties:{key_id:$.keyId,organization_id:W}});return{success:!0,keyId:$.keyId}}})});var ag0;var dn1=B(()=>{v0();bb();ag0=m({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:bn1,outputSchema:xn1,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=await Z.boundAuth.apiKey.list(),Q=Z.organization?.id;return{items:(X??[]).filter((G)=>{return G.metadata?.organization?.id===Q}).map((G)=>({id:G.id,name:G.name??"Unnamed Key",userId:G.userId,permissions:G.permissions??{},expiresAt:G.expiresAt?G.expiresAt instanceof Date?G.expiresAt.toISOString():G.expiresAt:null,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});var sg0;var mn1=B(()=>{v0();bb();sg0=m({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:yn1,outputSchema:gn1,handler:async($,Z)=>{if(Z0(Z),await Z.access.check(),!W1(Z))throw Error("User ID required to update API key");let Y=(await Z.boundAuth.apiKey.list())?.find((H)=>H.id===$.keyId);if(!Y)throw Error(`API key not found: ${$.keyId}`);let J=Y.metadata?.organization?.id,W=Z.organization?.id;if(J!==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 in1=B(()=>{cn1();ln1();dn1();mn1();bb()});function Qw($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let X=wd8.test(Z),Q=Od8.test(Z),Y=Bd8.test(Z);if(X&&!Q&&!Y)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let G=Q?Z:`https://${Z}`,J;try{J=new URL(G)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(J.protocol!=="http:"&&J.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let W=J.hostname.split(".");if(W.length<2||W.some((K)=>!K||!Dd8.test(K)))return{ok:!1,error:"Enter a valid website URL."};return J.protocol="https:",{ok:!0,value:J.origin}}var wd8,Od8,Bd8,Dd8;var Dm=B(()=>{wd8=/^[a-zA-Z][a-zA-Z\d+.-]*:/,Od8=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,Bd8=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,Dd8=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as bX}from"zod";function gW($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??y0()).reportsInternalApiUrl??Ld8).replace(/\/+$/,"")}function pn1($={}){return`${gW($)}/api/v2/mcp`}function UL($){let Z=$.apiKey??($.settings??y0()).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 P60($){return new URL($).hostname}function jd8($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function zd8($,Z={}){switch($){case"ownership_unverified":{let X=Z.email?`O e-mail ${Z.email}`:"Este e-mail",Q=Z.domain?` ${Z.domain}`:" este site";return`${X} n\xE3o tem permiss\xE3o para reivindicar${Q}. 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 Commerce Discovery. Tente novamente ou fale com o suporte.";default:return $}}async function Pd8($){let Z=await $.text().catch(()=>"");if(!Z)return"unknown";try{let X=JSON.parse(Z);return jd8(X.error)?X.error:"unknown"}catch{return"unknown"}}async function eg0($){let Z=`Commerce Discovery auth failed with status ${$.status}.`,X=await $.text().catch(()=>"");if(!X)return Z;try{let Q=JSON.parse(X),Y=typeof Q.error==="string"?Q.error:typeof Q.message==="string"?Q.message:null;return Y?`Commerce Discovery auth failed: ${Y}.`:Z}catch{return Z}}async function on1($,Z={}){let X=gW(Z),Q=UL(Z),Y=Z.fetchImpl??fetch,G=P60($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/upgrade`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.orgName?{name:$.orgName}:{},...$.email?{email:$.email}:{},...$.reportUrl?{report_url:$.reportUrl}:{}})});if(!W.ok){let H=await Pd8(W);throw new tn1(H,{email:$.email,domain:G})}let K=Ed8.safeParse(await W.json());if(!K.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:K.data.token}}async function rn1($,Z={}){let X=gW(Z),Q=UL(Z),Y=Z.fetchImpl??fetch,G=P60($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/bindings`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,provider:$.provider,resource_id:$.resourceId})});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=nn1.safeParse(await W.json());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 eg0(W));let K=nn1.safeParse(await W.json());if(!K.success||!K.data.binding)throw Error("Commerce Discovery bind response did not include a binding.");return{ok:!0,resourceId:K.data.binding.resource_id,evidence:K.data.binding.evidence}}async function an1($,Z={}){let X=gW(Z),Q=UL(Z),Y=Z.fetchImpl??fetch,G=P60($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/run`,W=await Y(J,{method:"POST",headers:{Authorization:`Bearer ${Q}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:$.orgId,...$.githubRepo?{github_repo:$.githubRepo}:{}})});if(W.status===409)return{triggered:!1,reason:"not_upgraded"};if(!W.ok)throw Error(await eg0(W));return{triggered:!0}}async function sn1($,Z={}){let X=gW(Z),Q=UL(Z),Y=Z.fetchImpl??fetch,G=P60($.siteUrl),J=`${X}/api/v2/internal/diagnostics/${encodeURIComponent(G)}/connections/status?org_id=${encodeURIComponent($.orgId)}`,W=await Y(J,{method:"GET",headers:{Authorization:`Bearer ${Q}`}});if(W.status===404||W.status===409)return{providers:{},claimed:!1};if(!W.ok)throw Error(await eg0(W));let K=Ad8.safeParse(await W.json());return{providers:K.success?K.data.providers:{},claimed:!0}}var Ld8,Ed8,nn1,tn1,Ad8;var wL=B(()=>{L8();M$();Ld8=new URL(kf1).origin,Ed8=bX.object({token:bX.string().min(1)}),nn1=bX.object({binding:bX.object({resource_id:bX.string(),evidence:bX.string()}).optional(),reason:bX.string().optional(),detail:bX.string().optional()});tn1=class tn1 extends Error{code;constructor($,Z={}){super(zd8($,Z));this.name="CommerceDiscoveryClaimError",this.code=$}};Ad8=bX.object({providers:bX.record(bX.string(),bX.object({connected:bX.boolean(),via:bX.enum(["oauth","sa"]).nullable(),resource:bX.string().nullable()}))})});import{z as jY}from"zod";var Td8,Rd8,$h0;var en1=B(()=>{Dm();v0();wL();Td8=jY.object({siteUrl:jY.string().min(1).describe("Website URL of the store being bound."),provider:jY.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:jY.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/).")}),Rd8=jY.discriminatedUnion("ok",[jY.object({ok:jY.literal(!0),resourceId:jY.string(),evidence:jY.string()}),jY.object({ok:jY.literal(!1),reason:jY.string(),detail:jY.string()})]),$h0=m({name:"COMMERCE_DISCOVERY_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; Commerce Discovery 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 Commerce Discovery Data Source",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Td8,outputSchema:Rd8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=Qw($.siteUrl);if(!Q.ok)throw Error(Q.error);return rn1({siteUrl:Q.value,orgId:X.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as hW}from"zod";var Id8,qd8,Zh0;var $p1=B(()=>{Dm();v0();wL();Id8=hW.object({siteUrl:hW.string().min(1).describe("Website URL of the store to inspect.")}),qd8=hW.object({providers:hW.record(hW.string(),hW.object({connected:hW.boolean(),via:hW.enum(["oauth","sa"]).nullable(),resource:hW.string().nullable()})),claimed:hW.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.")}),Zh0=m({name:"COMMERCE_DISCOVERY_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:"Commerce Discovery Connection Status",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Id8,outputSchema:qd8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=Qw($.siteUrl);if(!Q.ok)throw Error(Q.error);return sn1({siteUrl:Q.value,orgId:X.id})}})});import{z as Lm}from"zod";var Md8,kd8,Xh0;var Zp1=B(()=>{L8();Dm();v0();wL();Md8=Lm.object({siteUrl:Lm.string().min(1).describe("Website URL to run the diagnostic for.")}),kd8=Lm.object({triggered:Lm.boolean(),reason:Lm.string().optional()}),Xh0=m({name:"COMMERCE_DISCOVERY_RUN",description:"Trigger the Commerce Discovery 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 Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Md8,outputSchema:kd8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=Qw($.siteUrl);if(!Q.ok)throw Error(Q.error);let Y=u4.COMMERCE_DISCOVERY(X.id),J=(await Z.storage.connections.findById(Y,X.id))?.configuration_state,W=J&&typeof J==="object"&&typeof J.github_repo==="string"&&J.github_repo.length>0?J.github_repo:void 0;return an1({siteUrl:Q.value,orgId:X.id,githubRepo:W})}})});var Yw=B(()=>{I10()});import{z as uW}from"zod";async function _d8($,Z,X,Q){let Y=await $.storage.connections.findById(Z,X);if(Y)return Y;throw Q}async function vd8($,Z,X,Q){let Y=await $.storage.virtualMcps.findById(Z,X);if(Y)return Y;throw Q}var Qh0,Sd8=3600000,Vd8,Cd8,Yh0;var Xp1=B(()=>{L8();Dm();v0();EW();Yw();wL();Qh0=i$0,Vd8=uW.object({siteUrl:uW.string().min(1).describe("Website URL to configure.")}),Cd8=uW.object({connection:C7,virtualMcp:_7,reportApp:uW.object({connectionId:uW.string(),virtualMcpId:uW.string(),toolName:uW.literal(Qh0)}),created:uW.object({connection:uW.boolean(),virtualMcp:uW.boolean()})});Yh0=m({name:"COMMERCE_DISCOVERY_SETUP",description:"Create or return the Commerce Discovery connection and virtual MCP for the current organization.",annotations:{title:"Set Up Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Vd8,outputSchema:Cd8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check("COLLECTION_CONNECTIONS_CREATE");let Q=W1(Z);if(!Q)throw Error("User ID required to set up Commerce Discovery");let Y=Qw($.siteUrl);if(!Y.ok)throw Error(Y.error);let G=u4.COMMERCE_DISCOVERY(X.id),J=p$0(X.id),W=new URLSearchParams({virtualmcpid:J,main:`app:${G}:${Qh0}`}),K={email:Z.auth.user?.email,reportUrl:`${Z.baseUrl}/${encodeURIComponent(X.slug??X.id)}/${crypto.randomUUID()}?${W.toString()}`},H=await Z.storage.connections.findById(G,X.id),N={connection:!1,virtualMcp:!1},F=await on1({siteUrl:Y.value,orgId:X.id,orgName:X.name,...K}),U=pn1();if(H)console.log("[commerce-discovery] syncing connection to claimed site",{orgId:X.id,siteUrl:Y.value,connectionId:G}),H=await Z.storage.connections.update(H.id,{connection_url:U,connection_token:F.authorizationToken,metadata:{...H.metadata??{},siteUrl:Y.value}});else{console.log("[commerce-discovery] creating connection",{orgId:X.id,siteUrl:Y.value,connectionId:G});try{let L=cf1(X.id,F.authorizationToken,U);H=await Z.storage.connections.create({...L,metadata:{...L.metadata??{},siteUrl:Y.value},organization_id:X.id,created_by:Q}),N.connection=!0}catch(L){H=await _d8(Z,G,X.id,L)}}let w=await Z.storage.virtualMcps.findById(J,X.id);if(!w){console.log("[commerce-discovery] creating virtual MCP",{orgId:X.id,siteUrl:Y.value,connectionId:H.id,virtualMcpId:J});try{w=await Z.storage.virtualMcps.create(X.id,Q,lf1(X.id,H.id),{id:J}),N.virtualMcp=!0}catch(L){w=await vd8(Z,J,X.id,L)}}if(!w.pinned)w=await Z.storage.virtualMcps.update(w.id,Q,{pinned:!0});let O=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",X.id).executeTakeFirst();if((O?Date.now()-new Date(O.createdAt).getTime():Number.POSITIVE_INFINITY)<Sd8){let E=(await Z.storage.organizationSettings.get(X.id))?.flags,j={};if(E?.reports_only==null){if(j.reports_only=!0,E?.qa_agent_enabled==null)j.qa_agent_enabled=!0;if(E?.code_reviewer_enabled==null)j.code_reviewer_enabled=!0}if(Object.keys(j).length>0)await Z.storage.organizationSettings.upsert(X.id,{flags:j})}return{connection:H,virtualMcp:w,reportApp:{connectionId:H.id,virtualMcpId:w.id,toolName:Qh0},created:N}}})});var Qp1=B(()=>{en1();$p1();Zp1();Xp1()});var Gh0=C((Yp1)=>{Object.defineProperty(Yp1,"__esModule",{value:!0});Yp1.kvPrefix=Yp1.KvWatchInclude=void 0;Yp1.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};Yp1.kvPrefix="KV_"});var Dp1=C((Op1)=>{Object.defineProperty(Op1,"__esModule",{value:!0});Op1.KvStatusImpl=Op1.Bucket=Op1.Kvm=Op1.kvOperationHdr=void 0;Op1.Base64KeyCodec=xd8;Op1.NoopKvCodecs=Jh0;Op1.defaultBucketOpts=Wp1;Op1.validateKey=Kp1;Op1.validateSearchKey=Hp1;Op1.hasWildcards=Np1;Op1.validateBucket=A60;var M5=QY(),a6=Oa(),q5=Gh0();function xd8(){let $=(Z,X)=>{let Q=[];for(let Y of Z.split("."))switch(Y){case">":case"*":Q.push(Y);break;default:Q.push(X(Y));break}return Q.join(".")};return{encode(Z){return $(Z,btoa)},decode(Z){return $(Z,atob)}}}function Jh0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function Wp1(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:Jh0(),storage:a6.StorageType.File}}Op1.kvOperationHdr="KV-Operation";var Jp1="$KV",yd8=/^[-/=.\w]+$/,gd8=/^[-/=.>*\w]+$/,hd8=/^[-\w]+$/;function Kp1($){if($.startsWith(".")||$.endsWith(".")||!yd8.test($))throw Error(`invalid key: ${$}`)}function Hp1($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!gd8.test($))throw Error(`invalid key: ${$}`)}function Np1($){if($.startsWith(".")||$.endsWith("."))throw Error(`invalid key: ${$}`);let Z=$.split("."),X=!1;for(let Q=0;Q<Z.length;Q++)switch(Z[Q]){case"*":X=!0;break;case">":if(Q!==Z.length-1)throw Error(`invalid key: ${$}`);X=!0;break;default:}return X}function A60($){if(!hd8.test($))throw Error(`invalid bucket name: ${$}`)}class Fp1{js;constructor($){this.js=(0,a6.toJetStreamClient)($)}create($,Z={}){return this.#$($,Z)}open($,Z={}){return Z.bindOnly=!0,this.#$($,Z)}#$($,Z={}){let{ok:X,min:Q}=this.js.nc.features.get(M5.Feature.JS_KV);if(!X)return Promise.reject(Error(`kv is only supported on servers ${Q} or better`));if(Z.bindOnly)return xb.bind(this.js,$,Z);return xb.create(this.js,$,Z)}list(){let $=(X)=>{let Y=X.streams.filter((J)=>{return J.config.name.startsWith(q5.kvPrefix)});Y.forEach((J)=>{J.config.sealed=J.config.sealed||!1,J.config.deny_delete=J.config.deny_delete||!1,J.config.deny_purge=J.config.deny_purge||!1,J.config.allow_rollup_hdrs=J.config.allow_rollup_hdrs||!1});let G="";if(Y.length)G=this.js.nc.info?.cluster??"";return Y.map((J)=>{return new T60(J,G)})},Z=`${this.js.prefix}.STREAM.LIST`;return new a6.ListerImpl(Z,$,this.js)}}Op1.Kvm=Fp1;class xb{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,X){A60($),this.js=Z,this.jsm=X,this.bucket=$,this.prefix=Jp1,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,X={}){A60(Z);let Q=await $.jetstreamManager(),Y=new xb(Z,$,Q);return await Y.init(X),Y}static async bind($,Z,X={}){let Q=$.getOptions()?.checkAPI||X.bindOnly===!1,Y=await $.jetstreamManager(Q),G={config:{allow_direct:X.allow_direct}};A60(Z);let J=new xb(Z,$,Y);return G.config.name=X.streamName??J.bucketName(),Object.assign(J,G),J.stream=G.config.name,J.codec=X.codec||Jh0(),J.direct=G.config.allow_direct??!1,J.initializePrefixes(G),J}async init($={}){let Z=Object.assign(Wp1(),$);this.codec=Z.codec;let X={};if(this.stream=X.name=$.streamName??this.bucketName(),X.retention=a6.RetentionPolicy.Limits,X.max_msgs_per_subject=Z.history,Z.max_bytes)X.max_bytes=Z.max_bytes;if(X.max_msg_size=Z.maxValueSize,X.storage=Z.storage,$.placement)X.placement=$.placement;if($.republish)X.republish=$.republish;if($.description)X.description=$.description;if($.markerTTL)X.allow_msg_ttl=!0,X.subject_delete_marker_ttl=(0,M5.nanos)(Z.markerTTL);if($.mirror){let H=Object.assign({},$.mirror);if(!H.name.startsWith(q5.kvPrefix))H.name=`${q5.kvPrefix}${H.name}`;X.mirror=H,X.mirror_direct=!0}else if($.sources){let H=$.sources.map((N)=>{let F=Object.assign({},N),U=F.name.startsWith(q5.kvPrefix)?F.name.substring(q5.kvPrefix.length):F.name;if(!F.name.startsWith(q5.kvPrefix))F.name=`${q5.kvPrefix}${F.name}`;if(!N.external&&U!==this.bucket)F.subject_transforms=[{src:`$KV.${U}.>`,dest:`$KV.${this.bucket}.>`}];return F});X.sources=H,X.subjects=[this.subjectForBucket()]}else X.subjects=[this.subjectForBucket()];if($.metadata)X.metadata=$.metadata;if(typeof $.compression==="boolean")X.compression=$.compression?a6.StoreCompression.S2:a6.StoreCompression.None;let Q=this.js.nc,Y=Q.getServerVersion(),G=Y?(0,M5.compare)(Y,(0,M5.parseSemVer)("2.7.2"))>=0:!1;X.discard=G?a6.DiscardPolicy.New:a6.DiscardPolicy.Old;let{ok:J,min:W}=Q.features.get(M5.Feature.JS_ALLOW_DIRECT);if(!J&&$.allow_direct===!0){let H=Y?`${Y.major}.${Y.minor}.${Y.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:J,X.allow_direct=$.allow_direct,this.direct=X.allow_direct,X.num_replicas=Z.replicas,Z.ttl)X.max_age=(0,M5.nanos)(Z.ttl);X.allow_rollup_hdrs=!0;let K;try{if(K=await this.jsm.streams.info(X.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(X);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 X=Z.name;if(X.startsWith(q5.kvPrefix))X=X.substring(q5.kvPrefix.length);if(Z.external&&Z.external.api!==""){let Q=Z.name.substring(q5.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${Q}`,this.editPrefix=`${Z.external.api}.$KV.${X}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${q5.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey($,Z=!1){let X=[];if(Z){if(this.useJsPrefix)X.push(this.js.apiPrefix);if(this.editPrefix!=="")X.push(this.editPrefix);else X.push(this.prefix)}else if(this.prefix)X.push(this.prefix);return X.push($),X.join(".")}fullKeyName($){if(this.prefix!=="")return`${this.prefix}.${$}`;return`${Jp1}.${this.bucket}.${$}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.encode(X));break}return Z.join(".")}decodeKey($){let Z=[];for(let X of $.split("."))switch(X){case">":case"*":Z.push(X);break;default:Z.push(this.codec.key.decode(X));break}return Z.join(".")}validateKey=Kp1;validateSearchKey=Hp1;hasWildcards=Np1;close(){return Promise.resolve()}dataLen($,Z){let X=Z?Z.get(a6.JsHeaders.MessageSizeHdr)||"":"";if(X!=="")return parseInt(X,10);return $.length}smToEntry($){return new Up1(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new wp1(this.bucket,this.prefixLen,$,Z,this.codec)}async create($,Z,X){let Q;try{let G={previousSeq:0},J=await this._put($,Z,G,X);return Promise.resolve(J)}catch(G){if(Q=G,G instanceof a6.JetStreamApiError){let J=G;if(J.code!==a6.JetStreamApiCodes.StreamWrongLastSequence&&J.code!==a6.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(G)}}let Y=0;try{let G=await this.get($);if(G?.operation==="DEL"||G?.operation==="PURGE")return Y=G!==null?G.revision:0,this._put($,Z,{previousSeq:Y},X);else return Promise.reject(Q)}catch(G){return Promise.reject(G)}}update($,Z,X,Q){if(X<=0)throw Error("version must be greater than 0");return this.put($,Z,{previousSeq:X,timeout:Q})}async _put($,Z,X={},Q){let Y=this.encodeKey($);this.validateKey(Y),Z=this.codec.value.encode(Z);let G={timeout:X?.timeout};if(X.previousSeq!==void 0){let J=(0,M5.headers)();G.headers=J,J.set(a6.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`)}if(Q)(G.headers||(0,M5.headers)()).set(a6.PubHeaders.MessageTTL,Q);try{return(await this.js.publish(this.subjectForKey(Y,!0),Z,G)).seq}catch(J){return Promise.reject(J)}}put($,Z,X={}){return this._put($,Z,X)}async get($,Z){let X=this.encodeKey($);this.validateKey(X);let Q={last_by_subj:this.subjectForKey(X)};if(Z&&Z.revision>0)Q={seq:Z.revision};let Y=null;try{if(this.direct)Y=await this.jsm.direct.getMessage(this.bucketName(),Q);else Y=await this.jsm.streams.getMessage(this.bucketName(),Q);if(Y===null)return null;let G=this.smToEntry(Y);if(G.rawKey!==X)return null;return G}catch(G){throw G}}purge($,Z){return this._deleteOrPurge($,"PURGE",Z)}delete($,Z){return this._deleteOrPurge($,"DEL",Z)}async purgeDeletes($=1800000){let Z=[],X=await this.history({key:">"});await(async()=>{for await(let J of X)if(J.operation==="DEL"||J.operation==="PURGE")Z.push(J)})().then(),X.stop();let Q=Date.now()-$,Y=Z.map((J)=>{let W=this.subjectForKey(J.key);if(J.created.getTime()>=Q)return this.jsm.streams.purge(this.stream,{filter:W,keep:1});else return this.jsm.streams.purge(this.stream,{filter:W,keep:0})}),G=await Promise.all(Y);return G.unshift({success:!0,purged:0}),G.reduce((J,W)=>{return J.purged+=W.purged,J})}async _deleteOrPurge($,Z,X){if(!this.hasWildcards($))return this._doDeleteOrPurge($,Z,X);let Q=await this.keys($),Y=[];for await(let G of Q)if(Y.push(this._doDeleteOrPurge(G,Z)),Y.length===100)await Promise.all(Y),Y.length=0;if(Y.length>0)await Promise.all(Y)}async _doDeleteOrPurge($,Z,X){let Q=this.encodeKey($);this.validateKey(Q);let Y=(0,M5.headers)();if(Y.set(Op1.kvOperationHdr,Z),Z==="PURGE"){let G=X;if(Y.set(a6.JsHeaders.RollupHdr,a6.JsHeaders.RollupValueSubject),typeof G?.ttl==="string"&&G.ttl!=="")Y.set(a6.PubHeaders.MessageTTL,`${G.ttl}`)}if(X?.previousSeq)Y.set(a6.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`);await this.js.publish(this.subjectForKey(Q,!0),M5.Empty,{headers:Y})}_buildCC($,Z,X={}){let Y=(!Array.isArray($)?[$]:$).map((W)=>{let K=this.encodeKey(W);return this.validateSearchKey(W),this.fullKeyName(K)}),G=a6.DeliverPolicy.LastPerSubject;if(Z===q5.KvWatchInclude.AllHistory)G=a6.DeliverPolicy.All;if(Z===q5.KvWatchInclude.UpdatesOnly)G=a6.DeliverPolicy.New;let J=void 0;if(Y.length===1)J=Y[0],Y=void 0;return Object.assign({deliver_policy:G,ack_policy:a6.AckPolicy.None,filter_subjects:Y,filter_subject:J,flow_control:!0,idle_heartbeat:(0,M5.nanos)(5000)},X)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",X={};X.headers_only=$.headers_only||!1;let Q=new M5.QueuedIteratorImpl,Y=()=>{Q.stop()},G=this._buildCC(Z,q5.KvWatchInclude.AllHistory,X),J=await this.js.consumers.getPushConsumer(this.stream,G);if(Q._data=J,(await J.info(!0)).num_pending===0)return Q.push(Y),Q;let K=await J.consume({callback:(H)=>{let N=this.jmToWatchEntry(H,!1);if(Q.push(N),Q.received++,H.info.pending===0)Q.push(Y)}});return K.closed().then(()=>{Q.push(Y)}),(async()=>{for await(let H of K.status())switch(H.type){case"heartbeat":Q.push(()=>{Q.stop()});break}})().then(),Q.iterClosed.then(()=>{K.stop()}),Q}canSetWatcherName(){let $=this.js.nc,{ok:Z}=$.features.get(M5.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",X=new M5.QueuedIteratorImpl,Q={};Q.headers_only=$.headers_only||!1;let Y=q5.KvWatchInclude.LastValue;if($.include===q5.KvWatchInclude.AllHistory)Y=q5.KvWatchInclude.AllHistory;else if($.include===q5.KvWatchInclude.UpdatesOnly)Y=q5.KvWatchInclude.UpdatesOnly;let G=$.ignoreDeletes===!0,J=this._buildCC(Z,Y,Q);if(J.name=`KV_WATCHER_${M5.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)J.deliver_policy=a6.DeliverPolicy.StartSequence,J.opt_start_seq=$.resumeFromRevision;let W=await this.js.consumers.getPushConsumer(this.stream,J),H=(await W.info(!0)).num_pending,N=Y===q5.KvWatchInclude.UpdatesOnly||H===0;X._data=W;let F=0,U=await W.consume({callback:(w)=>{if(!N)F++,N=F>=H;let O=this.jmToWatchEntry(w,N);if(G&&O.operation==="DEL")return;X.push(O),X.received++}});return X.iterClosed.then(()=>{U.stop()}),U.closed().then(()=>{X.push(()=>{X.stop()})}),X}async keys($=">"){let Z=new M5.QueuedIteratorImpl,X=this._buildCC($,q5.KvWatchInclude.LastValue,{headers_only:!0}),Q=await this.js.consumers.getPushConsumer(this.stream,X);if((await Q.info()).num_pending===0)return Z.stop(),Z;Z._data=Q;let G=await Q.consume({callback:(J)=>{let W=J.headers?.get(Op1.kvOperationHdr);if(W!=="DEL"&&W!=="PURGE"){let K=this.decodeKey(J.subject.substring(this.prefixLen));Z.push(K)}if(J.info.pending===0)G.stop()}});return(async()=>{for await(let J of G.status())switch(J.type){case"heartbeat":Z.push(()=>{Z.stop()});break}})().then(),G.closed().then(()=>{Z.push(()=>{Z.stop()})}),Z.iterClosed.then(()=>{G.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??"",X=this.bucketName(),Q=await this.jsm.streams.info(X);return new T60(Q,Z)}}Op1.Bucket=xb;class T60{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(q5.kvPrefix)?this.si.config.name.substring(q5.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,M5.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,M5.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!==a6.StoreCompression.None;return!1}}Op1.KvStatusImpl=T60;class Up1{bucket;sm;prefixLen;codec;constructor($,Z,X,Q){this.bucket=$,this.prefixLen=Z,this.sm=X,this.codec=Q}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(Op1.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(a6.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(M5.TD.decode(this.value),$)}string(){return M5.TD.decode(this.value)}}class wp1{bucket;sm;prefixLen;update;codec;constructor($,Z,X,Q,Y){this.bucket=$,this.prefixLen=Z,this.sm=X,this.update=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 created(){return new Date((0,M5.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(Op1.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(a6.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(M5.TD.decode(this.value),$)}string(){return M5.TD.decode(this.value)}}});var Wh0=C(($3)=>{Object.defineProperty($3,"__esModule",{value:!0});$3.validateKey=$3.validateBucket=$3.NoopKvCodecs=$3.Kvm=$3.defaultBucketOpts=$3.Bucket=$3.Base64KeyCodec=$3.KvWatchInclude=$3.kvPrefix=void 0;var Lp1=Gh0();Object.defineProperty($3,"kvPrefix",{enumerable:!0,get:function(){return Lp1.kvPrefix}});Object.defineProperty($3,"KvWatchInclude",{enumerable:!0,get:function(){return Lp1.KvWatchInclude}});var OL=Dp1();Object.defineProperty($3,"Base64KeyCodec",{enumerable:!0,get:function(){return OL.Base64KeyCodec}});Object.defineProperty($3,"Bucket",{enumerable:!0,get:function(){return OL.Bucket}});Object.defineProperty($3,"defaultBucketOpts",{enumerable:!0,get:function(){return OL.defaultBucketOpts}});Object.defineProperty($3,"Kvm",{enumerable:!0,get:function(){return OL.Kvm}});Object.defineProperty($3,"NoopKvCodecs",{enumerable:!0,get:function(){return OL.NoopKvCodecs}});Object.defineProperty($3,"validateBucket",{enumerable:!0,get:function(){return OL.validateBucket}});Object.defineProperty($3,"validateKey",{enumerable:!0,get:function(){return OL.validateKey}})});var Kh0=C((Gw)=>{Object.defineProperty(Gw,"__esModule",{value:!0});Gw.NoopKvCodecs=Gw.Kvm=Gw.defaultBucketOpts=Gw.Bucket=Gw.Base64KeyCodec=Gw.KvWatchInclude=void 0;var rd8=Wh0();Object.defineProperty(Gw,"KvWatchInclude",{enumerable:!0,get:function(){return rd8.KvWatchInclude}});var jm=Wh0();Object.defineProperty(Gw,"Base64KeyCodec",{enumerable:!0,get:function(){return jm.Base64KeyCodec}});Object.defineProperty(Gw,"Bucket",{enumerable:!0,get:function(){return jm.Bucket}});Object.defineProperty(Gw,"defaultBucketOpts",{enumerable:!0,get:function(){return jm.defaultBucketOpts}});Object.defineProperty(Gw,"Kvm",{enumerable:!0,get:function(){return jm.Kvm}});Object.defineProperty(Gw,"NoopKvCodecs",{enumerable:!0,get:function(){return jm.NoopKvCodecs}})});function R60(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(X)=>$.encode(JSON.stringify(X)),decode:(X)=>JSON.parse(Z.decode(X))}}class Nh0{options;kv=null;codec=R60();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new jp1.Kvm($).create(sd8,{storage:Ep1.StorageType.Memory})}async get($,Z){if(!this.kv)return null;try{let X=await this.kv.get(`${$}.${Z}`);if(!X?.value?.length)return null;if(X.operation==="DEL"||X.operation==="PURGE")return null;return this.codec.decode(X.value)}catch{return null}}async set($,Z,X){if(!this.kv)return;try{await this.kv.put(`${$}.${Z}`,this.codec.encode(X))}catch{}}async invalidate($){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(X)=>{try{await this.kv.delete(`${X}.${$}`)}catch{}}))}teardown(){this.kv=null}}function ed8($,Z,X){if(X<=0)return!0;if($===void 0)return!0;return Z-$>=X}function I60($){return $ instanceof D1&&$.code===I1.MethodNotFound}function $m8($){return $ instanceof D1&&$.code===-32000&&/connection closed/i.test($.message)}async function Ww($,Z,X,Q,Y,G=0){if(!Q)try{return await X()}catch(H){if(I60(H))return[];return zm.add(1,{type:$,outcome:"error",stage:"no_cache"}),null}let J=`${$}:${Z}`,W=await Q.get($,Z);if(W===null)try{let H=await X();return Q.set($,Z,H).catch(()=>{}),Hh0.set(J,Date.now()),zm.add(1,{type:$,outcome:"miss",stage:"miss"}),H}catch(H){if(I60(H))return Q.set($,Z,[]).catch(()=>{}),[];return zm.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(zm.add(1,{type:$,outcome:"hit",stage:"hit"}),ed8(Hh0.get(J),Date.now(),G)&&!q60.has(J)){q60.add(J),Hh0.set(J,Date.now());let H=X().then((N)=>Q.set($,Z,N)).catch((N)=>{if(I60(N)||$m8(N)){if(I60(N))Q.set($,Z,[]).catch(()=>{});return}zm.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>q60.delete(J));Y?.(H)}return W}function Fh0($){zp1=$}function n5(){return zp1}var Ep1,jp1,zm,sd8="DECOCMS_MCP_LISTS",q60,Hh0,Jw=30000,zp1=null;var zY=B(()=>{m5();C6();Ep1=k(LB(),1),jp1=k(Kh0(),1),zm=k$.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});q60=new Set;k$.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(q60.size));Hh0=new Map});async function Uh0($,Z,X){let Q=new AbortController,Y,G=new Promise((W,K)=>{Y=setTimeout(()=>{Q.abort(),K(new Pp1($.id,X))},X)}),J=(async()=>{let W=await j5($,Z,!0);try{return(await W.listTools(void 0,{timeout:X,signal:Q.signal})).tools}finally{await W.close().catch(()=>{})}})();J.catch(()=>{});try{return await Promise.race([J,G])}finally{if(Y)clearTimeout(Y)}}var Pp1;var Ap1=B(()=>{Pm();Pp1=class Pp1 extends Error{constructor($,Z){super(`listTools timed out after ${Z}ms for connection ${$}`);this.name="ListToolsTimeoutError"}}});function M60($){return(Z)=>{if(Z instanceof D1&&Z.code===I1.MethodNotFound)return $;throw Z}}var Tp1=B(()=>{m5()});function k60($,Z,X){let Q=Kw($,Z,X,n5()??void 0),Y=ED(Q,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:Zm8,toolCallTimeoutMs:Of});Y.server.setRequestHandler(XU,async()=>{return await Q.listResources().catch(M60({resources:[]}))}),Y.server.setRequestHandler(QU,async()=>{return await Q.listResourceTemplates().catch(M60({resourceTemplates:[]}))}),Y.server.setRequestHandler(YU,async()=>{return await Q.listPrompts().catch(M60({prompts:[]}))});let G=Y.close.bind(Y);return Y.close=async()=>{await G(),await Q.close().catch(()=>{})},Y}var Zm8;var Rp1=B(()=>{MX();m5();Am();zY();Tp1();Zm8={tools:{},resources:{},prompts:{}}});var pH=B(()=>{Pm();Ap1();Rp1()});function Tm($,Z,X){if(Z.some((Q)=>Q!=="*"&&Q.startsWith("SELF::"))&&$.SELF===void 0)$.SELF={value:`${X}_self`}}function Rm($,Z){let X=new Map;for(let Q of Z){if(Q==="*")continue;let[Y,G]=z40(Q);if(!Xm8.has(G))continue;let J=hd(Y,$);if(typeof J!=="object"||J===null||!("value"in J))continue;let W=J.value;if(typeof W!=="string")continue;X.set(`${W}:${G}`,{targetConnectionId:W,scope:G})}return[...X.values()]}async function Im($,Z,X,Q){for(let G of Z){if(G==="*")continue;let[J]=z40(G),W=hd(J,$);if(W===void 0||W===null)throw Error(`Scope references key "${J}" but it's not present in state`)}let Y=Iu1($,Z);for(let G of Y){if(G.endsWith("_self"))continue;let J=await Q.storage.connections.findById(G);if(!J||J.organization_id!==X)throw Error(`Referenced connection not found: ${G}`);try{await Q.access.check(G)}catch(W){throw Error(`Access denied to referenced connection: ${G}. ${W.message}`)}}}var Xm8;var wh0=B(()=>{By0();Z80();Xm8=new Set([e$0,$80])});import{z as Ip1}from"zod";var Qm8,Ym8,Oh0;var qp1=B(()=>{x4();v0();M$();zY();pH();wh0();Om();EW();Qm8=Ip1.object({data:L10.describe("Data for the new connection (id is auto-generated if not provided)")}),Ym8=Ip1.object({item:C7.describe("The created connection entity")}),Oh0=m({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:Qm8,outputSchema:Ym8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("User ID required to create connection");let Y={...$.data,organization_id:X.id,created_by:Q};if(Y.id){if((await Z.storage.connections.findById(Y.id))?.organization_id===X.id)throw Error("Connection already exists in organization")}if(Y.connection_type==="VIRTUAL"){let F=vv(Y.connection_url);if(!F)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let U=await Z.storage.virtualMcps.findById(F);if(!U)throw Error(`Virtual MCP not found: ${F}`);if(U.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");Y.connection_url=fv(F)}if(Y.connection_type==="STDIO"&&!y0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let G=await Xw({id:`pending-${Date.now()}`,title:Y.title,connection_type:Y.connection_type,connection_url:Y.connection_url,connection_token:Y.connection_token,connection_headers:Y.connection_headers}).catch(()=>null),J=G?.tools?.length?G.tools:null,W=G?.scopes?.length?G.scopes:Y.configuration_scopes??null,K=Y.configuration_state??null;if(K&&W?.length)Tm(K,W,X.id),await Im(K,W,X.id,Z);let H=await Z.storage.connections.createNew({...Y,tools:null,configuration_state:K,configuration_scopes:W}),N=K&&W?.length?Rm(K,W):[];if(N.length>0){let F;try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:H.id,createdBy:Q,grants:N});let{plaintextToken:U,record:w}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:H.id});F=w.id,await(await j5(H,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:K,scopes:W,firstRun:!0,vault:{baseUrl:Z.baseUrl,org:X.slug??X.id,subjectConnectionId:H.id,token:U}}})}catch(U){if(F)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:H.id,tokenId:F});throw await Z.storage.connections.delete(H.id),U}}if(J)n5()?.set("tools",H.id,J).catch(()=>{});return y1.capture({distinctId:Q,event:"connection_created",groups:{organization:X.id},properties:{connection_id:H.id,connection_type:H.connection_type,app_name:H.app_name??null,organization_id:X.id,tools_count:J?.length??0}}),{item:H}}})});import{z as PG}from"zod/v4";import{z as Mp1}from"zod/v4";import{z as S60}from"zod/v4";import{z as cW}from"zod/v4";import{z as Km8}from"zod/v4";import{z as BL}from"zod/v4";import{z as lW}from"zod/v4";import{z as IZ}from"zod/v4";import{z as kp1}from"zod/v4";import{z as _60}from"zod/v4";import{z as Cm8}from"zod/v4";import{z as Sp1}from"zod/v4";import{z as V60}from"zod/v4";import{z as um8}from"zod/v4";function qm($,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((X,Q)=>qm(X,Z[Q]))}if(typeof $==="object"&&typeof Z==="object"){let X=Object.keys($),Q=Object.keys(Z);if(X.length!==Q.length)return!1;return X.every((Y)=>Q.includes(Y)&&qm($[Y],Z[Y]))}return!1}function km8(){return($)=>{if(!Array.isArray($))return!0;let Z=[];return $.every((X)=>{if(Z.some((Y)=>qm(X,Y)))return!1;return Z.push(X),!0})}}function C60($,Z){return $.safeParse(Z).success}function Y7($){if(typeof $==="boolean")return $?PG.any():PG.never();let Z={};for(let Y of mm8)Y.apply(Z,$);let X=[];if(Z.string!==!1)X.push(Z.string||PG.string());if(Z.number!==!1)X.push(Z.number||PG.number());if(Z.boolean!==!1)X.push(Z.boolean||PG.boolean());if(Z.null!==!1)X.push(Z.null||PG.null());if(Z.array!==!1)X.push(Z.array||PG.array(PG.any()));if(Z.tuple!==!1&&Z.tuple!==void 0)X.push(Z.tuple);if(Z.object!==!1)if(Z.object)X.push(Z.object);else{let Y=PG.custom((G)=>{return typeof G==="object"&&G!==null&&!Array.isArray(G)},"Must be an object, not an array");X.push(Y)}if(Z.file!==!1&&Z.file!==void 0)X.push(Z.file);let Q;if(X.length===0)Q=PG.never();else if(X.length===1)Q=X[0];else if(!Object.keys($).some((G)=>G!=="$schema"&&G!=="title"&&G!=="description"))Q=PG.any();else Q=PG.union(X);for(let Y of im8)Q=Y.apply(Q,$);return Q}var Gm8=class{apply($,Z){if(!Z.type)return;let X=Array.isArray(Z.type)?Z.type:[Z.type],Q=new Set(X);if(!Q.has("string"))$.string=!1;if(!Q.has("number")&&!Q.has("integer"))$.number=!1;if(!Q.has("boolean"))$.boolean=!1;if(!Q.has("null"))$.null=!1;if(!Q.has("array"))$.array=!1;if(!Q.has("object"))$.object=!1;if(Q.has("integer")&&$.number!==!1){let Y=$.number||Mp1.number();if(Y instanceof Mp1.ZodNumber)$.number=Y.int()}}},Jm8=class{apply($,Z){if(Z.const===void 0)return;let X=Z.const;if($.string=!1,$.number=!1,$.boolean=!1,$.null=!1,$.array=!1,$.object=!1,typeof X==="string")$.string=S60.literal(X);else if(typeof X==="number")$.number=S60.literal(X);else if(typeof X==="boolean")$.boolean=S60.literal(X);else if(X===null)$.null=S60.null();else if(Array.isArray(X))$.array=void 0;else if(typeof X==="object")$.object=void 0}},Wm8=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 X={string:Z.enum.filter((Q)=>typeof Q==="string"),number:Z.enum.filter((Q)=>typeof Q==="number"),boolean:Z.enum.filter((Q)=>typeof Q==="boolean"),null:Z.enum.filter((Q)=>Q===null),array:Z.enum.filter((Q)=>Array.isArray(Q)),object:Z.enum.filter((Q)=>typeof Q==="object"&&Q!==null&&!Array.isArray(Q))};$.string=this.createTypeSchema(X.string,"string"),$.number=this.createTypeSchema(X.number,"number"),$.boolean=this.createTypeSchema(X.boolean,"boolean"),$.null=X.null.length>0?cW.null():!1,$.array=X.array.length>0?void 0:!1,$.object=X.object.length>0?void 0:!1}createTypeSchema($,Z){if($.length===0)return!1;if($.length===1)return cW.literal($[0]);if(Z==="string")return cW.enum($);if(Z==="number"){let[X,Q,...Y]=$;return cW.union([cW.literal(X),cW.literal(Q),...Y.map((G)=>cW.literal(G))])}if(Z==="boolean")return cW.union([cW.literal(!0),cW.literal(!1)]);return!1}},Hm8=class{apply($,Z){let X=Z;if(X.type==="string"&&X.format==="binary"&&X.contentEncoding==="binary"){let Q=Km8.file();if(X.minLength!==void 0)Q=Q.min(X.minLength);if(X.maxLength!==void 0)Q=Q.max(X.maxLength);if(X.contentMediaType!==void 0)Q=Q.mime(X.contentMediaType);$.file=Q,$.string=!1}}},Nm8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.minLength!==void 0||X.maxLength!==void 0||X.pattern!==void 0)){if($.string===void 0)$.string=BL.string()}}},Fm8=class{apply($,Z){let X=Z;if(X.minLength===void 0)return;if($.string!==!1){let Q=$.string||BL.string();if(Q instanceof BL.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length>=X.minLength},{message:`String must be at least ${X.minLength} characters long`})}}},Um8=class{apply($,Z){let X=Z;if(X.maxLength===void 0)return;if($.string!==!1){let Q=$.string||BL.string();if(Q instanceof BL.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length<=X.maxLength},{message:`String must be at most ${X.maxLength} characters long`})}}},wm8=class{apply($,Z){let X=Z;if(!X.pattern)return;if($.string!==!1){let Q=$.string||BL.string();if(Q instanceof BL.ZodString){let Y=new RegExp(X.pattern);$.string=Q.regex(Y)}}}},Om8=class{apply($,Z){let X=Z;if(X.minimum===void 0)return;if($.number!==!1){let Q=$.number||lW.number();if(Q instanceof lW.ZodNumber)$.number=Q.min(X.minimum)}}},Bm8=class{apply($,Z){let X=Z;if(X.maximum===void 0)return;if($.number!==!1){let Q=$.number||lW.number();if(Q instanceof lW.ZodNumber)$.number=Q.max(X.maximum)}}},Dm8=class{apply($,Z){let X=Z;if(X.exclusiveMinimum===void 0)return;if($.number!==!1){let Q=$.number||lW.number();if(Q instanceof lW.ZodNumber)if(typeof X.exclusiveMinimum==="number")$.number=Q.gt(X.exclusiveMinimum);else $.number=!1}}},Lm8=class{apply($,Z){let X=Z;if(X.exclusiveMaximum===void 0)return;if($.number!==!1){let Q=$.number||lW.number();if(Q instanceof lW.ZodNumber)if(typeof X.exclusiveMaximum==="number")$.number=Q.lt(X.exclusiveMaximum);else $.number=!1}}},Em8=class{apply($,Z){let X=Z;if(X.multipleOf===void 0)return;if($.number!==!1){let Q=$.number||lW.number();if(Q instanceof lW.ZodNumber)$.number=Q.refine((Y)=>{if(X.multipleOf===0)return!1;let G=Y/X.multipleOf,J=Math.round(G),W=Math.min(Math.abs(Y)*Number.EPSILON*10,Math.abs(X.multipleOf)*Number.EPSILON*10);return Math.abs(G-J)<=W/Math.abs(X.multipleOf)},{message:`Must be a multiple of ${X.multipleOf}`})}}},jm8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.minItems!==void 0||X.maxItems!==void 0||X.items!==void 0||X.prefixItems!==void 0)){if($.array===void 0)$.array=IZ.array(IZ.any())}}},zm8=class{apply($,Z){let X=Z;if(X.minItems===void 0)return;if($.array!==!1)$.array=($.array||IZ.array(IZ.any())).min(X.minItems)}},Pm8=class{apply($,Z){let X=Z;if(X.maxItems===void 0)return;if($.array!==!1)$.array=($.array||IZ.array(IZ.any())).max(X.maxItems)}},Am8=class{apply($,Z){let X=Z;if($.array===!1)return;if(Array.isArray(X.items))$.array=$.array||IZ.array(IZ.any());else if(X.items&&typeof X.items!=="boolean"&&!X.prefixItems){let Q=Y7(X.items),Y=IZ.array(Q);if($.array&&$.array instanceof IZ.ZodArray){let G=$.array._def;if(G.checks)G.checks.forEach((J)=>{if(J._zod&&J._zod.def){let W=J._zod.def;if(W.check==="min_length"&&W.minimum!==void 0)Y=Y.min(W.minimum);else if(W.check==="max_length"&&W.maximum!==void 0)Y=Y.max(W.maximum)}})}$.array=Y}else if(typeof X.items==="boolean"&&X.items===!1)if(!X.prefixItems)$.array=IZ.array(IZ.any()).max(0);else $.array=$.array||IZ.array(IZ.any());else if(typeof X.items==="boolean"&&X.items===!0)$.array=$.array||IZ.array(IZ.any());else if(X.prefixItems)$.array=$.array||IZ.array(IZ.any())}},Tm8=class{apply($,Z){if(Z.type!=="array")return;let X=Z;if(!Array.isArray(X.items))return;if($.array===!1)return;let Q=X.items.map((G)=>Y7(G)),Y;if(Q.length===0)Y=kp1.tuple([]);else Y=kp1.tuple(Q);if(X.minItems!==void 0&&X.minItems>Q.length)Y=!1;if(X.maxItems!==void 0&&X.maxItems<Q.length)Y=!1;$.tuple=Y,$.array=!1}},Rm8=class{apply($,Z){let X=Z;if($.object===!1)return;if(X.properties||X.required||X.additionalProperties!==void 0)$.object=$.object||_60.object({}).passthrough()}},Im8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.maxProperties!==void 0||X.minProperties!==void 0)){if($.object===void 0)$.object=_60.object({}).passthrough()}}},qm8=class{apply($,Z){let X=Z;if(X.maxProperties===void 0)return;if($.object!==!1){let Q=$.object||_60.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length<=X.maxProperties,{message:`Object must have at most ${X.maxProperties} properties`})}}},Mm8=class{apply($,Z){let X=Z;if(X.minProperties===void 0)return;if($.object!==!1){let Q=$.object||_60.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length>=X.minProperties,{message:`Object must have at least ${X.minProperties} properties`})}}},Sm8=class{apply($,Z){if(!Z.not)return $;let X=Y7(Z.not);return $.refine((Q)=>!C60(X,Q),{message:"Value must not match the 'not' schema"})}},Vm8=class{apply($,Z){if(Z.uniqueItems!==!0)return $;return $.refine(km8(),{message:"Array items must be unique"})}},_m8=class{apply($,Z){if(!Z.allOf||Z.allOf.length===0)return $;return Z.allOf.map((Q)=>Y7(Q)).reduce((Q,Y)=>Cm8.intersection(Q,Y),$)}},vm8=class{apply($,Z){if(!Z.anyOf||Z.anyOf.length===0)return $;let X=Z.anyOf.length===1?Y7(Z.anyOf[0]):Sp1.union([Y7(Z.anyOf[0]),Y7(Z.anyOf[1]),...Z.anyOf.slice(2).map((Q)=>Y7(Q))]);return Sp1.intersection($,X)}},fm8=class{apply($,Z){if(!Z.oneOf||Z.oneOf.length===0)return $;let X=Z.oneOf.map((Q)=>Y7(Q));return $.refine((Q)=>{let Y=0;for(let G of X)if(G.safeParse(Q).success){if(Y++,Y>1)return!1}return Y===1},{message:"Value must match exactly one of the oneOf schemas"})}},bm8=class{apply($,Z){let X=Z;if(X.prefixItems&&Array.isArray(X.prefixItems)){let Y=X.prefixItems.map((G)=>Y7(G));return $.refine((G)=>{if(!Array.isArray(G))return!0;for(let J=0;J<Math.min(G.length,Y.length);J++)if(!C60(Y[J],G[J]))return!1;if(G.length>Y.length){if(typeof X.items==="boolean"&&X.items===!1)return!1;else if(X.items&&typeof X.items==="object"&&!Array.isArray(X.items)){let J=Y7(X.items);for(let W=Y.length;W<G.length;W++)if(!C60(J,G[W]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return $}},xm8=class{apply($,Z){let X=Z;if(!X.properties&&!X.required&&X.additionalProperties!==!1)return $;if($ instanceof V60.ZodObject||$ instanceof V60.ZodRecord){let Q={};if(X.properties){for(let[Y,G]of Object.entries(X.properties))if(G!==void 0)Q[Y]=Y7(G)}if(X.required&&Array.isArray(X.required)){let Y=new Set(X.required);for(let G of Object.keys(Q))if(!Y.has(G))Q[G]=Q[G].optional()}else for(let Y of Object.keys(Q))Q[Y]=Q[Y].optional();if(X.additionalProperties===!1)return V60.object(Q);else return V60.object(Q).passthrough()}return $.refine((Q)=>{if(typeof Q!=="object"||Q===null||Array.isArray(Q))return!0;if(X.properties){for(let[Y,G]of Object.entries(X.properties))if(G!==void 0){if(Object.getOwnPropertyDescriptor(Q,Y)!==void 0){if(!Y7(G).safeParse(Q[Y]).success)return!1}}}if(X.required&&Array.isArray(X.required)){for(let Y of X.required)if(Object.getOwnPropertyDescriptor(Q,Y)===void 0)return!1}if(X.additionalProperties===!1&&X.properties){let Y=new Set(Object.keys(X.properties));for(let G in Q)if(!Y.has(G))return!1}return!0},{message:"Object constraints validation failed"})}},ym8=class{apply($,Z){if(!Z.enum||Z.enum.length===0)return $;let X=Z.enum.filter((Q)=>Array.isArray(Q)||typeof Q==="object"&&Q!==null);if(X.length===0)return $;return $.refine((Q)=>{if(typeof Q!=="object"||Q===null)return!0;return X.some((Y)=>qm(Q,Y))},{message:"Value must match one of the enum values"})}},gm8=class{apply($,Z){if(Z.const===void 0)return $;let X=Z.const;if(typeof X!=="object"||X===null)return $;return $.refine((Q)=>qm(Q,X),{message:"Value must equal the const value"})}},hm8=class{apply($,Z){if(Z.description)$=$.describe(Z.description);return $}},cm8=class{apply($,Z){var X;let Q=Z;if(!((X=Q.required)==null?void 0:X.includes("__proto__"))||Z.type!==void 0)return $;return um8.any().refine((Y)=>this.validateRequired(Y,Q.required),{message:"Missing required properties"})}validateRequired($,Z){if(typeof $!=="object"||$===null||Array.isArray($))return!0;return Z.every((X)=>Object.prototype.hasOwnProperty.call($,X))}},lm8=class{apply($,Z){var X;let Q=Z;if(Q.contains===void 0)return $;let Y=Y7(Q.contains),G=(X=Q.minContains)!=null?X:1,J=Q.maxContains;return $.refine((W)=>{if(!Array.isArray(W))return!0;let K=0;for(let H of W)if(C60(Y,H))K++;if(K<G)return!1;if(J!==void 0&&K>J)return!1;return!0},{message:"Array must contain required items matching the schema"})}},dm8=class{apply($,Z){let{default:X}=Z;if(X===void 0)return $;if(!$.safeParse(X).success)return $;return $.default(X)}},mm8,im8;var Vp1=B(()=>{mm8=[new Jm8,new Wm8,new Gm8,new Hm8,new Nm8,new jm8,new Im8,new Fm8,new Um8,new wm8,new Om8,new Bm8,new Dm8,new Lm8,new Em8,new Tm8,new zm8,new Pm8,new Am8,new qm8,new Mm8,new Rm8],im8=[new cm8,new ym8,new gm8,new _m8,new vm8,new fm8,new bm8,new xm8,new lm8,new Sm8,new Vm8,new dm8,new hm8]});class Bh0{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,nm8),this._socket.onerror=(X)=>{let Q="error"in X?X.error:Error(`WebSocket error: ${JSON.stringify(X)}`);Z(Q),this.onerror?.(Q)},this._socket.onopen=()=>{$()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=(X)=>{let Q;try{Q=wY.parse(JSON.parse(X.data))}catch(Y){this.onerror?.(Y);return}this.onmessage?.(Q)}})}async close(){this._socket?.close()}send($){return new Promise((Z,X)=>{if(!this._socket){X(Error("Not connected"));return}this._socket?.send(JSON.stringify($)),Z()})}}var nm8="mcp";var Cp1=B(()=>{m5()});function pm8($){let Z=$;if(!Z||typeof Z!=="object"||!("method"in Z))return null;switch(Z.method){case"initialize":{let X=Z?.params?.protocolVersion;if(!X)return null;return{type:"emit",message:{result:{protocolVersion:X,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 v60;var Dh0=B(()=>{Qf();v60=class v60 extends IW{constructor($,Z){super($,Z)}send($,Z){let X=pm8($);if(X?.type==="emit")return this.onmessage?.(X.message),Promise.resolve();if(X?.type==="suppress")return Promise.resolve();return super.send($,Z)}}});var _p1,vp1=async($,Z,X)=>{let Q=tm8($.connection,Z,X);if(!Q)throw Error("Unknown MCP connection type");let Y=new _p1({name:$?.name??"MCP Client",version:"1.0.0"});return await Y.connect(Q),{client:Y}},tm8=($,Z,X)=>{if($.type==="Websocket")return new Bh0(new URL($.url));if($.type!=="SSE"&&$.type!=="HTTP")return null;let Y={...$.token?{authorization:`Bearer ${$.token}`}:{},...X??{},..."headers"in $?$.headers||{}:{}};if($.type==="SSE"){let G={requestInit:{headers:Y,signal:Z}};if($.token)G.eventSourceInit={fetch:(J,W)=>{return fetch(J,{...W,headers:{...Y,Accept:"text/event-stream"},signal:Z})}};return new bH(new URL($.url),G)}return new v60(new URL($.url),{requestInit:{headers:Y,signal:Z,credentials:"include"}})};var fp1=B(()=>{TW();Dl();Cp1();m5();MX();Dh0();_p1=class _p1 extends I9{constructor($,Z){super($,{jsonSchemaValidator:J5,...Z})}async listTools($,Z){return await this.request({method:"tools/list",params:$},Cc,Z)}}});function yp1($){let Z=(X)=>{if("connection"in $)return vp1({connection:$.connection},void 0,X);return $.client};return new Proxy({},{get(X,Q){if(Q==="toJSON")return null;if(typeof Q!=="string")throw Error("Name must be a string");if(Q==="listTools")return W;async function Y(K,H=Q){let N=$?.debugId?.(),F=N?{"x-trace-debug-id":N}:void 0,{client:U}=await Z(F),{structuredContent:w,isError:O,content:D}=await U.callTool({name:String(H),arguments:K});if(O){let E=D?.[0]?.text,j=typeof E==="string"?bp1(E):null,z=j?.code&&typeof $?.getErrorByStatusCode==="function"?$.getErrorByStatusCode(j.code,j.message,j.traceId):null;if(z)throw z;throw Error(`Tool ${String(H)} returned an error: ${JSON.stringify(w??D)}`)}if(w!==void 0)return w;let L=D?.[0]?.text;return typeof L==="string"?bp1(L):void 0}async function G(){let{client:K}=await Z(),{tools:H}=await K.listTools();return H}async function J(){if(!("connection"in $))return G();let K=$.connection,H=JSON.stringify(K);try{if(!f60.has(H))f60.set(H,G());return await f60.get(H)}catch(N){console.error("Failed to list tools",N),f60.delete(H);return}}async function W(){return(await J()??[]).map((H)=>xp1(H,Y))}return Y.asTool=async()=>{let H=(await J()??[]).find((N)=>N.name===Q);if(!H)throw Error(`Tool ${Q} not found`);return xp1(H,Y)},Y}})}var bp1=($)=>{try{return JSON.parse($)}catch{return $}},f60,xp1=($,Z)=>{return{...$,id:$.name,inputSchema:$.inputSchema?Y7($.inputSchema):void 0,outputSchema:$.outputSchema?Y7($.outputSchema):void 0,execute:(X)=>{return Z(X.context,$.name)}}};var gp1=B(()=>{Vp1();fp1();f60=new Map});function Hw($){return yp1($)}var yb;var Lh0=B(()=>{gp1();yb=new Proxy({},{get($,Z){if(Z==="toJSON")return null;if(Z==="forConnection")return(X)=>Hw({connection:X});if(Z==="forClient")return(X)=>Hw({client:X});return globalThis[Z]}})});function b60($){return{isImplementedBy:(Z)=>{for(let X of $){let Q=typeof X.name==="string"?new RegExp(`^${X.name}$`):X.name,Y=Z.find((G)=>Q.test(G.name));if(!Y&&X.opt)continue;if(!Y)return!1}return!0}}}var dW=($)=>{return{...b60($),forClient:(Z)=>{return Hw({client:Z})},forConnection:(Z)=>{return Hw({connection:Z})}}};var DL=B(()=>{Lh0()});import{z as k5}from"zod";var hp1,x60,up1,y60,cp1,om8;var lp1=B(()=>{DL();hp1=k5.object({specversion:k5.literal("1.0").describe("CloudEvents specification version"),id:k5.string().describe("Unique identifier for this event (UUID recommended)"),source:k5.string().describe("Connection ID of the event publisher"),type:k5.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:k5.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:k5.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:k5.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:k5.string().url().optional().describe("URI to the schema for the data attribute"),data:k5.unknown().optional().describe("Event payload (any JSON value)")}),x60=k5.object({events:k5.array(hp1).min(1).describe("Batch of CloudEvents to process")}),up1=k5.object({success:k5.boolean().optional().describe("Whether this event was processed successfully"),error:k5.string().optional().describe("Error message for this event"),retryAfter:k5.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),y60=k5.object({success:k5.boolean().optional().describe("Batch success - applies to events not in results"),error:k5.string().optional().describe("Batch error message - applies to events not in results"),processedCount:k5.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:k5.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:k5.record(k5.string(),up1).optional().describe("Per-event results keyed by event ID")}),cp1=[{name:"ON_EVENTS",inputSchema:x60,outputSchema:y60}],om8=dW(cp1)});import{z as S5}from"zod";var dp1,mp1,ip1,np1,pp1,tp1,g60,Eh0;var jh0=B(()=>{DL();dp1=S5.object({type:S5.literal("string"),enum:S5.array(S5.string()).optional(),description:S5.string().optional()}),mp1=S5.object({type:S5.string(),description:S5.string(),paramsSchema:S5.record(S5.string(),dp1)}),ip1=S5.object({}),np1=S5.object({triggers:S5.array(mp1)}),pp1=S5.object({type:S5.string(),params:S5.record(S5.string(),S5.string()),enabled:S5.boolean(),callbackUrl:S5.url().optional(),callbackToken:S5.string().min(1).optional()}),tp1=S5.object({success:S5.boolean()}),g60=[{name:"TRIGGER_LIST",inputSchema:ip1,outputSchema:np1},{name:"TRIGGER_CONFIGURE",inputSchema:pp1,outputSchema:tp1}],Eh0=dW(g60)});import{z as A$}from"zod";var rm8,am8,sm8,em8,$i8,Zi8,Xi8,Qi8,Yi8,Gi8,Ji8,Wi8,LL;var Mm=B(()=>{rm8=A$.object({prefix:A$.string().optional().describe("Filter objects by prefix (e.g., 'folder/' for folder contents)"),maxKeys:A$.number().optional().default(1000).describe("Maximum number of keys to return (default: 1000)"),continuationToken:A$.string().optional().describe("Token for pagination from previous response"),delimiter:A$.string().optional().describe("Delimiter for grouping keys (typically '/'). When set, commonPrefixes returns folder paths.")}),am8=A$.object({objects:A$.array(A$.object({key:A$.string().describe("Object key/path"),size:A$.number().describe("Object size in bytes"),lastModified:A$.string().describe("Last modified timestamp"),etag:A$.string().describe("Entity tag for the object")})),nextContinuationToken:A$.string().optional().describe("Token for fetching next page of results"),isTruncated:A$.boolean().describe("Whether there are more results available"),commonPrefixes:A$.array(A$.string()).optional().describe("Folder paths when delimiter is used (e.g., ['photos/2024/', 'photos/2025/'])")}),sm8=A$.object({key:A$.string().describe("Object key/path to get metadata for")}),em8=A$.object({contentType:A$.string().optional().describe("MIME type of the object"),contentLength:A$.number().describe("Size of the object in bytes"),lastModified:A$.string().describe("Last modified timestamp"),etag:A$.string().describe("Entity tag for the object"),metadata:A$.record(A$.string(),A$.string()).optional().describe("Custom metadata key-value pairs")}),$i8=A$.object({key:A$.string().describe("Object key/path to generate URL for"),expiresIn:A$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)")}),Zi8=A$.object({url:A$.string().describe("Presigned URL for downloading the object"),expiresIn:A$.number().describe("Expiration time in seconds that was used")}),Xi8=A$.object({key:A$.string().describe("Object key/path for the upload"),expiresIn:A$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)"),contentType:A$.string().optional().describe("MIME type for the object being uploaded")}),Qi8=A$.object({url:A$.string().describe("Presigned URL for uploading the object"),expiresIn:A$.number().describe("Expiration time in seconds that was used")}),Yi8=A$.object({key:A$.string().describe("Object key/path to delete")}),Gi8=A$.object({success:A$.boolean().describe("Whether the deletion was successful"),key:A$.string().describe("The key that was deleted")}),Ji8=A$.object({keys:A$.array(A$.string()).max(1000).describe("Array of object keys/paths to delete (max 1000)")}),Wi8=A$.object({deleted:A$.array(A$.string()).describe("Array of successfully deleted keys"),errors:A$.array(A$.object({key:A$.string(),message:A$.string()})).describe("Array of errors for failed deletions")}),LL=[{name:"LIST_OBJECTS",inputSchema:rm8,outputSchema:am8},{name:"GET_OBJECT_METADATA",inputSchema:sm8,outputSchema:em8},{name:"GET_PRESIGNED_URL",inputSchema:$i8,outputSchema:Zi8},{name:"PUT_PRESIGNED_URL",inputSchema:Xi8,outputSchema:Qi8},{name:"DELETE_OBJECT",inputSchema:Yi8,outputSchema:Gi8},{name:"DELETE_OBJECTS",inputSchema:Ji8,outputSchema:Wi8}]});import{z as U6}from"zod";var op1,rp1,ap1,km,h60,u60,c60,l60,Ki8;var zh0=B(()=>{DL();op1=U6.object({primary:U6.string().optional().describe("Primary brand color (hex)"),secondary:U6.string().optional().describe("Secondary brand color (hex)"),accent:U6.string().optional().describe("Accent / highlight color (hex)"),background:U6.string().optional().describe("Background color (hex)"),foreground:U6.string().optional().describe("Foreground / text color (hex)")}),rp1=U6.object({heading:U6.string().optional().describe("Font family for headings"),body:U6.string().optional().describe("Font family for body text"),code:U6.string().optional().describe("Font family for code / monospace")}),ap1=U6.object({logo:U6.string().optional().describe("Logo URL"),favicon:U6.string().optional().describe("Favicon URL"),ogImage:U6.string().optional().describe("Open Graph image URL")}),km=U6.object({id:U6.string(),name:U6.string().describe("Brand / company name"),domain:U6.string().optional().describe("Company domain (e.g. example.com)"),colors:op1.optional().describe("Semantic color palette"),fonts:rp1.optional().describe("Font families by role"),assets:ap1.optional().describe("Visual identity assets"),overview:U6.string().optional().describe("Company overview / description"),tagline:U6.string().optional().describe("Brand tagline"),tone:U6.string().optional().describe("Tone of voice description"),metadata:U6.record(U6.string(),U6.unknown()).optional().describe("Extra design tokens and metadata")}),h60=U6.object({id:U6.string().optional().describe("Brand ID. Omit to get the default brand.")}),u60=U6.object({}),c60=U6.object({items:U6.array(km)}),l60=[{name:"BRAND_GET",inputSchema:h60,outputSchema:km},{name:"BRAND_LIST",inputSchema:u60,outputSchema:c60,opt:!0}],Ki8=dW(l60)});var Ph0=B(()=>{DL();lp1();jh0();Mm();zh0()});import{z as U8}from"zod";function tH($){return U8.object({items:U8.array($).describe("Array of collection items"),totalCount:U8.number().int().min(0).optional().describe("Total number of matching items (if available)"),hasMore:U8.boolean().optional().describe("Whether there are more items available")})}function Vm($){return U8.object({item:$.nullable().describe("The retrieved item, or null if not found")})}function Fi8($){return U8.object({data:$.partial().describe("Data for the new entity (id may be auto-generated)")})}function Ui8($){return U8.object({item:$.describe("The created entity with generated id")})}function wi8($){return U8.object({id:U8.string().describe("ID of the entity to update"),data:$.partial().describe("Partial entity data to update")})}function Oi8($){return U8.object({item:$.describe("The updated entity")})}function _m($){return U8.object({item:$.describe("The deleted entity")})}function m60($,Z,X){let Q=$.toUpperCase(),Y=X?.readOnly??!1,G=[{name:`COLLECTION_${Q}_LIST`,inputSchema:Z3,outputSchema:tH(Z)},{name:`COLLECTION_${Q}_GET`,inputSchema:Sm,outputSchema:Vm(Z)}];if(!Y)G.push({name:`COLLECTION_${Q}_CREATE`,inputSchema:Fi8(Z),outputSchema:Ui8(Z),opt:!0},{name:`COLLECTION_${Q}_UPDATE`,inputSchema:wi8(Z),outputSchema:Oi8(Z),opt:!0},{name:`COLLECTION_${Q}_DELETE`,inputSchema:Cm,outputSchema:_m(Z),opt:!0});return G}var d60,Hi8,sp1,Ni8,Z3,Sm,Cm;var AG=B(()=>{d60=U8.object({id:U8.string().describe("Unique identifier for the entity"),title:U8.string().describe("Human-readable title for the entity"),description:U8.string().nullish().describe("Description of the entity"),created_at:U8.string().datetime(),updated_at:U8.string().datetime(),created_by:U8.string().optional(),updated_by:U8.string().optional()}),Hi8=U8.object({field:U8.array(U8.string()),operator:U8.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:U8.unknown()}),sp1=U8.lazy(()=>U8.union([Hi8,U8.object({operator:U8.enum(["and","or","not"]),conditions:U8.array(sp1)})])),Ni8=U8.object({field:U8.array(U8.string()),direction:U8.enum(["asc","desc"]),nulls:U8.enum(["first","last"]).optional()}),Z3=U8.object({where:sp1.optional().describe("Filter expression"),orderBy:U8.array(Ni8).optional().describe("Sort expressions"),limit:U8.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:U8.number().int().min(0).optional().describe("Number of items to skip")});Sm=U8.object({id:U8.string().describe("ID of the entity to retrieve")});Cm=U8.object({id:U8.string().describe("ID of the entity to delete")})});import{z as gb}from"zod";var Bi8,Di8,ep1;var $t1=B(()=>{AG();Bi8=d60.extend({avatar:gb.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:gb.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:gb.string().describe("Virtual MCP ID to use for this assistant"),model:gb.object({id:gb.string().describe("Model ID"),connectionId:gb.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),Di8=m60("assistant",Bi8),ep1=[...Di8]});import{z as H0}from"zod";var vm,oH,Xt1,Li8,Ei8,Qt1,ji8,zi8,Pi8,Ai8,Ti8,Ri8,Yt1,Ii8,qi8,Mi8,ki8,Si8,Vi8,Ci8,_i8,vi8,fi8,Zs6,bi8,Xs6,Zt1,xi8,yi8,i60,Qs6;var Gt1=B(()=>{DL();AG();vm=H0.lazy(()=>H0.union([H0.null(),H0.string(),H0.number(),H0.boolean(),H0.record(H0.string(),vm),H0.array(vm)])),oH=H0.record(H0.string(),H0.record(H0.string(),vm)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Xt1=H0.object({type:H0.literal("text"),text:H0.string().describe("The text content"),providerOptions:oH}),Li8=H0.object({type:H0.literal("text"),text:H0.string().describe("The text content"),providerMetadata:H0.any().optional().describe("Additional provider-specific metadata")}),Ei8=H0.string().describe("File data as URL string"),Qt1=H0.object({type:H0.literal("file"),filename:H0.string().optional().describe("Optional filename of the file"),data:Ei8,mediaType:H0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:oH}),ji8=H0.object({type:H0.literal("file"),mediaType:H0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:H0.string().describe("Generated file data as base64 encoded string")}),zi8=H0.object({type:H0.literal("reasoning"),text:H0.string().describe("The reasoning text"),providerOptions:oH}),Pi8=H0.object({type:H0.literal("reasoning"),text:H0.string().describe("The reasoning text"),providerMetadata:H0.any().optional().describe("Additional provider-specific metadata")}),Ai8=H0.object({type:H0.literal("tool-call"),toolCallId:H0.string().describe("ID of the tool call, used to match with tool result"),toolName:H0.string().describe("Name of the tool being called"),input:H0.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:H0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:oH}),Ti8=H0.object({type:H0.literal("tool-call"),toolCallId:H0.string().describe("ID of the tool call"),toolName:H0.string().describe("Name of the tool being called"),input:H0.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:H0.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:H0.any().optional().describe("Additional provider-specific metadata")}),Ri8=H0.union([H0.object({type:H0.literal("text"),value:H0.string()}),H0.object({type:H0.literal("json"),value:vm}),H0.object({type:H0.literal("error-text"),value:H0.string()}),H0.object({type:H0.literal("error-json"),value:vm}),H0.object({type:H0.literal("content"),value:H0.array(H0.union([H0.object({type:H0.literal("text"),text:H0.string().describe("Text content")}),H0.object({type:H0.literal("media"),data:H0.string().describe("Base-64 encoded media data"),mediaType:H0.string().describe("IANA media type")})]))}),H0.object({type:H0.literal("execution-denied"),reason:H0.string().optional()}),H0.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),Yt1=H0.object({type:H0.literal("tool-result"),toolCallId:H0.string().describe("ID of the tool call that this result is associated with"),toolName:H0.string().describe("Name of the tool that generated this result"),output:Ri8.describe("Result of the tool call"),result:H0.unknown().describe("Unknown result of the tool call"),providerOptions:oH}),Ii8=H0.object({type:H0.literal("tool-result"),toolCallId:H0.string().describe("ID of the tool call that this result is associated with"),toolName:H0.string().describe("Name of the tool that generated this result"),result:H0.any().describe("Result of the tool call (JSON-serializable)"),isError:H0.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:H0.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:H0.any().optional().describe("Additional provider-specific metadata")}),qi8=H0.union([H0.object({type:H0.literal("source"),sourceType:H0.literal("url"),id:H0.string().describe("The ID of the source"),url:H0.string().describe("The URL of the source"),title:H0.string().optional().describe("The title of the source"),providerMetadata:H0.any().optional().describe("Additional provider-specific metadata")}),H0.object({type:H0.literal("source"),sourceType:H0.literal("document"),id:H0.string().describe("The ID of the source"),mediaType:H0.string().describe("IANA media type of the document (e.g., application/pdf)"),title:H0.string().describe("The title of the document"),filename:H0.string().optional().describe("Optional filename of the document"),providerMetadata:H0.any().optional().describe("Additional provider-specific metadata")})]),Mi8=H0.object({role:H0.literal("system"),content:H0.string().describe("System message content"),providerOptions:oH}),ki8=H0.object({role:H0.literal("user"),content:H0.array(H0.union([Xt1,Qt1])).describe("User message content parts (text or file)"),providerOptions:oH}),Si8=H0.object({role:H0.literal("assistant"),content:H0.array(H0.union([Xt1,Qt1,zi8,Ai8,Yt1])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:oH}),Vi8=H0.object({role:H0.literal("tool"),content:H0.array(Yt1).describe("Tool message content (tool results)"),providerOptions:oH}),Ci8=H0.union([Mi8,ki8,Si8,Vi8]),_i8=H0.array(Ci8).describe("A list of messages forming the prompt"),vi8=H0.object({prompt:_i8.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:H0.number().optional().describe("Maximum number of tokens to generate"),temperature:H0.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:H0.number().optional().describe("Nucleus sampling parameter"),topK:H0.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:H0.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:H0.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:H0.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:H0.array(H0.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:H0.union([H0.object({type:H0.literal("text")}),H0.object({type:H0.literal("json"),schema:H0.any().optional().describe("JSON schema that the generated output should conform to"),name:H0.string().optional().describe("Name of output that should be generated"),description:H0.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:H0.array(H0.any()).optional().describe("The tools that are available for the model"),toolChoice:H0.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:H0.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:H0.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:H0.any().optional().describe("Additional provider-specific options")}),fi8=H0.object({content:H0.array(H0.union([Li8,ji8,Pi8,Ti8,Ii8,qi8])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:H0.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:H0.looseObject({inputTokens:H0.number().optional(),outputTokens:H0.number().optional(),totalTokens:H0.number().optional(),reasoningTokens:H0.number().optional()}).describe("Usage information for the language model call"),providerMetadata:H0.any().optional().describe("Additional provider-specific metadata"),request:H0.object({body:H0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:H0.object({id:H0.string().optional().describe("ID for the generated response"),timestamp:H0.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:H0.string().optional().describe("The ID of the response model that was used"),headers:H0.record(H0.string(),H0.string()).optional().describe("Response headers"),body:H0.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:H0.array(H0.any()).describe("Warnings for the call, e.g. unsupported settings")}),Zs6=H0.object({stream:H0.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:H0.object({body:H0.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:H0.object({headers:H0.record(H0.string(),H0.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),bi8=H0.object({supportedUrls:H0.record(H0.string(),H0.array(H0.string())).describe("Supported URL patterns by media type for the provider")}),Xs6=H0.object({modelId:H0.string().describe("The ID of the model"),logo:H0.string().nullable(),description:H0.string().nullable(),capabilities:H0.array(H0.string()),limits:H0.object({contextWindow:H0.number(),maxOutputTokens:H0.number()}).nullable(),costs:H0.object({input:H0.number(),output:H0.number()}).nullable(),provider:H0.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),Zt1=H0.object({modelId:H0.string().describe("The ID of the model"),callOptions:vi8}),xi8=d60.extend({logo:H0.string().nullable(),description:H0.string().nullable(),capabilities:H0.array(H0.string()),limits:H0.object({contextWindow:H0.number(),maxOutputTokens:H0.number()}).nullable(),costs:H0.object({input:H0.number(),output:H0.number()}).nullable(),provider:H0.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),yi8=m60("llm",xi8,{readOnly:!0}),i60=[{name:"LLM_METADATA",inputSchema:H0.object({modelId:H0.string().describe("The ID of the model")}),outputSchema:bi8},{name:"LLM_DO_STREAM",inputSchema:Zt1},{name:"LLM_DO_GENERATE",inputSchema:Zt1,outputSchema:fi8},...yi8],Qs6=dW(i60)});import{z as EL}from"zod";var gi8,Jt1;var Wt1=B(()=>{gi8=EL.object({scopes:EL.array(EL.string()).describe("List of scopes available"),stateSchema:EL.record(EL.string(),EL.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),Jt1=[{name:"MCP_CONFIGURATION",inputSchema:EL.object({}),outputSchema:gi8}]});import{z as V5}from"zod";var hi8,ui8,Kt1;var Ht1=B(()=>{hi8=V5.object({}).strict(),ui8=V5.object({billing:V5.object({mode:V5.enum(["prepaid","postpaid"]),limitPeriod:V5.enum(["daily","weekly","monthly"]).nullable()}),limit:V5.object({total:V5.number().nullable(),remaining:V5.number().nullable(),reset:V5.string().nullable()}),usage:V5.object({total:V5.number(),daily:V5.number(),weekly:V5.number(),monthly:V5.number()}),alert:V5.object({enabled:V5.boolean(),threshold_usd:V5.number(),email:V5.string().nullable()}),connectionId:V5.string()}),Kt1=[{name:"GATEWAY_USAGE",inputSchema:hi8,outputSchema:ui8},{name:"GATEWAY_SET_LIMIT",inputSchema:V5.object({}),outputSchema:V5.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:V5.object({}),outputSchema:V5.object({}),opt:!0}]});import{z as Nt1}from"zod";function X3(){return FY()===null}function n60($,Z){return $===u4.DEV_ASSETS(Z)}function hb($,Z){let X=_f1(Z,$),Q=new Date().toISOString();return{id:X.id??u4.DEV_ASSETS($),title:X.title,description:X.description??null,icon:X.icon??null,app_name:X.app_name??null,app_id:X.app_id??null,organization_id:$,created_by:"system",created_at:Q,updated_at:Q,connection_type:X.connection_type,connection_url:X.connection_url??null,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:X.metadata??null,tools:ci8,bindings:["OBJECT_STORAGE"],status:"active"}}var ci8;var ub=B(()=>{YD();Mm();L8();ci8=LL.map(($)=>({name:$.name,description:`${$.name} operation for local file storage`,inputSchema:Nt1.toJSONSchema($.inputSchema),outputSchema:Nt1.toJSONSchema($.outputSchema)}))});function Ft1($,Z){return $||Z===0}function Ut1($,Z,X,Q,Y){let G=Z?Y+1:Y,J=Z?$.slice(0,X):$,W=Q+X<G;return{items:J,totalCount:G,hasMore:W}}function li8($,Z){if(Z.length===0)return;let[X,...Q]=Z,Y=X==="slug"?EU($):$[X];for(let G of Q){if(Y===null||typeof Y!=="object")return;Y=Y[G]}return Y}function di8($){let X=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${X}$`,"i")}function mi8($,Z,X){if($===void 0)return!0;switch(Z){case"eq":return X===null?$===null:$===X;case"gt":return $>X;case"gte":return $>=X;case"lt":return $<X;case"lte":return $<=X;case"in":return Array.isArray(X)&&X.includes($);case"like":return typeof $==="string"&&di8(String(X)).test($);case"contains":return String($).toLowerCase().includes(String(X).toLowerCase());default:return!0}}function fm($,Z){if(!Z)return!0;if("conditions"in Z){let{operator:Q,conditions:Y}=Z;if(Y.length===0)return!0;switch(Q){case"and":return Y.every((G)=>fm($,G));case"or":return Y.some((G)=>fm($,G));case"not":return!Y.every((G)=>fm($,G));default:return!0}}let X=li8($,Z.field);return mi8(X,Z.operator,Z.value)}var wt1=B(()=>{r$0()});async function Ot1($,Z,X){if($.length===0)return;let Q=0;async function Y(){while(Q<$.length){let G=Q++;await X($[G])}}await Promise.all(Array.from({length:Math.min(Z,$.length)},()=>Y()))}import{z as Nw}from"zod";var ii8=8,ni8,pi8,ti8,oi8,Ah0;var Bt1=B(()=>{Ph0();$t1();AG();Gt1();Wt1();Mm();Ht1();L8();v0();PZ();zY();pH();ub();EW();r$0();wt1();ni8=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:Nw.object({})}],pi8={LLM:i60,LLMS:i60,ASSISTANTS:ep1,MCP:Jt1,OBJECT_STORAGE:LL,AI_GATEWAY_BILLING:Kt1,TRIGGER:g60,REGISTRY:ni8,BRAND:l60},ti8=Z3.extend({binding:Nw.union([Nw.array(Nw.object({}).passthrough()),Nw.object({}).passthrough(),Nw.string()]).optional(),include_virtual:Nw.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:Nw.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),oi8=tH(C7),Ah0=m({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:ti8,outputSchema:oi8,handler:async($,Z)=>{await Z.access.check();let X=o(Z),Q=$.binding?typeof $.binding==="string"?(()=>{let F=pi8[$.binding.toUpperCase()];if(!F)throw Error(`Unknown binding: ${$.binding}`);return F})():$.binding:void 0,Y=Q?b60(Q):void 0,G=!!Y,J=$.limit??100,W=$.offset??0,{items:K,totalCount:H}=await Z.storage.connections.list(X.id,{includeVirtual:$.include_virtual??!1,slug:$.slug,where:$.where,orderBy:$.orderBy,limit:G?void 0:J,offset:G?void 0:W});if(Y){let F=n5(),U=u4.SELF(X.id);await Ot1(K,ii8,async(w)=>{if(w.tools!==null)return;let O=w.id===U?async()=>{let{listManagementTools:L}=await Promise.resolve().then(() => (Fw(),p60));return L(Z)}:()=>Uh0(w,Z,a$0),D=await Ww("tools",w.id,O,F,(L)=>Z.pendingRevalidations.push(L),Jw);if(D!==null)w.tools=D})}let N=!1;if(X3()&&Ft1(G,W)){let F=T9(),U=u4.DEV_ASSETS(X.id);if(!K.some((w)=>w.id===U)){let w=hb(X.id,F),O=!$.slug||EU(w)===$.slug,D=fm(w,$.where);if(O&&D)K.unshift(w),N=!0}}if(G){let F=(await Promise.all(K.map(async(D)=>{if(!D.tools||D.tools.length===0)return null;return Y.isImplementedBy(D.tools.map((E)=>({name:E.name,inputSchema:E.inputSchema,outputSchema:E.outputSchema})))?D:null}))).filter((D)=>D!==null),U=F.length,w=F.slice(W,W+J),O=W+J<U;return{items:w,totalCount:U,hasMore:O}}return Ut1(K,N,J,W,H)}})});var ri8,Th0;var Dt1=B(()=>{AG();L8();v0();PZ();zY();pH();ub();EW();ri8=Vm(C7),Th0=m({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:Sm,outputSchema:ri8,handler:async($,Z)=>{let X=o(Z);if(await Z.access.check(),X3()&&n60($.id,X.id))return{item:hb(X.id,T9())};let Q=await Z.storage.connections.findById($.id);if(!Q||Q.organization_id!==X.id)return{item:null};if(Q.tools===null){let Y=u4.SELF(X.id),G=Q.id===Y?async()=>{let{listManagementTools:W}=await Promise.resolve().then(() => (Fw(),p60));return W(Z)}:async()=>{let W=await j5(Q,Z,!0);try{return(await W.listTools()).tools}finally{await W.close().catch(()=>{})}},J=await Ww("tools",Q.id,G,n5(),(W)=>Z.pendingRevalidations.push(W),Jw);if(J!==null)Q.tools=J}return{item:Q}}})});class s6{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 this.decryptToken(Z)}async upsert($){let Z=new Date().toISOString(),X=await this.vault.encrypt($.accessToken),Q=$.refreshToken?await this.vault.encrypt($.refreshToken):null,Y=$.clientSecret?await this.vault.encrypt($.clientSecret):null;return await this.db.transaction().execute(async(G)=>{let J=await G.selectFrom("downstream_tokens").select(["id","createdAt"]).where("connectionId","=",$.connectionId).executeTakeFirst();if(J)return await G.updateTable("downstream_tokens").set({accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:$.expiresAt?.toISOString()??null,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,updatedAt:Z}).where("id","=",J.id).execute(),{id:J.id,connectionId:$.connectionId,accessToken:$.accessToken,refreshToken:$.refreshToken,scope:$.scope,expiresAt:$.expiresAt,createdAt:J.createdAt,updatedAt:Z,clientId:$.clientId,clientSecret:$.clientSecret,tokenEndpoint:$.tokenEndpoint};let W=l8("dtok");return await G.insertInto("downstream_tokens").values({id:W,connectionId:$.connectionId,accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:$.expiresAt?.toISOString()??null,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,createdAt:Z,updatedAt:Z}).execute(),{id:W,connectionId:$.connectionId,accessToken:$.accessToken,refreshToken:$.refreshToken,scope:$.scope,expiresAt:$.expiresAt,createdAt:Z,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 Q=($.expiresAt instanceof Date?$.expiresAt:new Date($.expiresAt)).getTime();if(Number.isNaN(Q))return!0;return Q-Z<Date.now()}async decryptToken($){let Z=await this.vault.decrypt($.accessToken),X=$.refreshToken?await this.vault.decrypt($.refreshToken):null,Q=$.clientSecret?await this.vault.decrypt($.clientSecret):null;return{id:$.id,connectionId:$.connectionId,accessToken:Z,refreshToken:X,scope:$.scope,expiresAt:$.expiresAt,createdAt:$.createdAt,updatedAt:$.updatedAt,clientId:$.clientId,clientSecret:Q,tokenEndpoint:$.tokenEndpoint}}}var TG=B(()=>{kX()});function cb(...$){if($n8)console.log("[mcp-read-cache]",...$)}function Zn8($){return $.kind==="org"?"org":`u:${$.userId}`}function Rh0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(Rh0).join(",")}]`;return`{${Object.keys($).sort().map((X)=>`${JSON.stringify(X)}:${Rh0($[X])}`).join(",")}}`}class r60{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=ai8,Z=si8,X=()=>Date.now(),Q=ei8){this.config=$;this.maxEntries=Z;this.now=X;this.maxTotalBytes=Q}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,X,Q){return`${Z}:${Zn8(X)}:${$}:${Rh0(Q)}`}storeSet($,Z,X,Q){let Y;try{Y=JSON.stringify(Z).length}catch{cb("SKIP non-serializable",$);return}if(Y>Q){cb("SKIP oversize",$,`${Y}b > cap ${Q}b`);return}this.deleteKey($);while(this.store.size>0&&(this.store.size>=this.maxEntries||this.totalBytes+Y>this.maxTotalBytes)){let G=this.store.keys().next().value;if(G===void 0)break;this.deleteKey(G)}this.store.set($,{value:Z,storedAt:X,bytes:Y}),this.totalBytes+=Y}async fetch($){let{type:Z,connectionId:X,scope:Q,params:Y,fetchLive:G,shouldCache:J,onRevalidation:W}=$,K=this.config[Z],H=this.key(Z,X,Q,Y),N=this.now(),F=this.store.get(H),U=F?N-F.storedAt:1/0;if(!F||U>K.maxStaleMs){t60.add(1,{type:Z,outcome:"miss"}),cb(F?"EXPIRED":"MISS",H);let w=await G();if(J?.(w)??!0)this.storeSet(H,w,this.now(),K.maxValueBytes);else cb("NOT-CACHED (shouldCache=false)",H);return w}if(this.store.delete(H),this.store.set(H,F),U>K.revalidateAfterMs&&!this.revalidating.has(H)){t60.add(1,{type:Z,outcome:"stale"}),cb("STALE \u2192 serve + revalidate",H,`age=${U}ms`),this.revalidating.add(H);let w=G().then((O)=>{if(J?.(O)??!0)this.storeSet(H,O,this.now(),K.maxValueBytes)}).catch(()=>{t60.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(H));W?.(w)}else t60.add(1,{type:Z,outcome:"hit"}),cb("HIT",H,`age=${U}ms`);return F.value}invalidate($){let Z=`${$}:`;for(let X of[...this.store.keys()])if(X.startsWith(Z))this.deleteKey(X)}}function qh0(){return y0().mcpCacheEnabled}function a60(){return qh0()?Ih0:null}var t60,o60=1024,Lt1,ai8,si8=2000,ei8,$n8,Ih0;var bm=B(()=>{C6();M$();t60=k$.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),Lt1=o60*o60,ai8={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*o60},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*Lt1},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*o60}},ei8=256*Lt1,$n8=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;Ih0=new r60;k$.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(Ih0.stats().entries));k$.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(Ih0.stats().bytes))});function zt1($){a60()?.invalidate($)}function lb($){zt1($);let Z=Mh0?.();if(!Z)return;try{Z.publish(Et1,Xn8.encode(JSON.stringify({connectionId:$,originId:jt1})))}catch(X){console.warn("[McpCacheInvalidation] publish failed (non-critical):",X)}}function Pt1($){if(Mh0=$,xm)return;let Z=$();if(!Z)return;xm=Z.subscribe(Et1),(async()=>{for await(let X of xm)try{let Q=JSON.parse(Qn8.decode(X.data));if(Q.originId===jt1)continue;zt1(Q.connectionId)}catch{}})().catch(console.error)}function At1(){xm?.unsubscribe(),xm=null,Mh0=void 0}var Et1="studio.mcp-cache.invalidate",jt1,Xn8,Qn8,Mh0,xm=null;var ym=B(()=>{bm();jt1=crypto.randomUUID(),Xn8=new TextEncoder,Qn8=new TextDecoder});import{z as kh0}from"zod";function Gn8($){let Z={...$};for(let X of Yn8)delete Z[X];return Z}function Kn8($,Z){return $.length===Z.length&&$.every((X,Q)=>X===Z[Q])}var Yn8,Jn8,Wn8,Sh0;var Tt1=B(()=>{pH();TG();v0();M$();zY();ym();wh0();Om();EW();Yn8=["id","organization_id","created_by","created_at"];Jn8=kh0.object({id:kh0.string().describe("ID of the connection to update"),data:E10.describe("Partial connection data to update")}),Wn8=kh0.object({item:C7.describe("The updated connection entity")});Sh0=m({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:Jn8,outputSchema:Wn8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("User ID required to update connection");let{id:Y}=$,G=Gn8($.data),J=G.configuration_state!==void 0||G.configuration_scopes!==void 0,W=await Z.storage.connections.findById(Y);if(!W||W.organization_id!==X.id)throw Error("Connection not found in organization");let K=G.connection_type??W.connection_type,H=G.connection_url??W.connection_url;if(K==="VIRTUAL"){let f=vv(H);if(!f)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let x=await Z.storage.virtualMcps.findById(f);if(!x)throw Error(`Virtual MCP not found: ${f}`);if(x.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");H=fv(f)}let N=G.configuration_state??W.configuration_state??{},F=G.configuration_scopes??W.configuration_scopes??[];if(J){if(G.configuration_state!==void 0)N=G.configuration_state??{};else if(N===null||N===void 0)N={};if(G.configuration_scopes!==void 0)F=G.configuration_scopes??[];if(F.length>0){let f=N;Tm(f,F,X.id),await Im(f,F,X.id,Z)}}if(K==="STDIO"&&!y0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let U=G.connection_token??W.connection_token;if(!U)try{let x=await new s6(Z.db,Z.vault).get(Y);if(x?.accessToken)U=x.accessToken}catch{}let w=await Xw({id:W.id,title:G.title??W.title,connection_type:K,connection_url:H,connection_token:U,connection_headers:G.connection_headers??W.connection_headers}).catch(()=>null),O=w?.tools?.length?w.tools:null,D=!1;if(G.configuration_scopes===void 0&&w?.scopes?.length)D=!Kn8(F,w.scopes),F=w.scopes;if(Tm(N,F,X.id),D&&F.length>0)await Im(N,F,X.id,Z);let L=J||D,E=L?Rm(N,F):[],j=L?Rm(W.configuration_state??{},W.configuration_scopes??[]):[],z=W.configuration_state,A=z==null||Object.keys(z).length===0,P,q,S=async()=>{try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:Y,createdBy:Q,grants:j})}catch(f){console.error("Failed to restore credential grants after credential vault mutation failed",f)}},M={...G,connection_url:H,tools:null,configuration_state:N,configuration_scopes:F,updated_by:Q},_={...W,...M};if(L)try{if(await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:Y,createdBy:Q,grants:E}),E.length>0){if(!await Z.storage.connectionCredentialVault.findActiveWorkloadToken({organizationId:X.id,subjectConnectionId:Y})){let{plaintextToken:x,record:p}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:Y});q=p.id,P={baseUrl:Z.baseUrl,org:X.slug??X.id,subjectConnectionId:Y,token:x}}}}catch(f){if(q)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:q});throw await S(),f}if(L&&N&&F)try{await(await j5(_,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:N,scopes:F,firstRun:A,...P?{vault:P}:{}}})}catch(f){if(console.error("Failed to invoke ON_MCP_CONFIGURATION callback",f),q)throw await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:q}),await S(),f}let l;try{l=await Z.storage.connections.update(Y,M)}catch(f){if(L){if(q)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:q});await S()}throw f}if(O)n5()?.set("tools",Y,O).catch(()=>{});return lb(Y),{item:l}}})});import{z as Hn8}from"zod";var Nn8,Vh0;var Rt1=B(()=>{AG();x4();v0();zY();ym();EW();Nn8=Cm.extend({force:Hn8.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),Vh0=m({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:Nn8,outputSchema:_m(C7),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=await Z.storage.connections.findById($.id);if(!Q)throw Error(`Connection not found: ${$.id}`);if(Q.organization_id!==X.id)throw Error("Connection not found in organization");if(Q.metadata?.isFixed===!0)throw Error("This connection is a fixed system connection and cannot be deleted");let G=await Z.storage.virtualMcps.listByConnectionId(X.id,$.id);if(G.length>0)if($.force)await Z.storage.virtualMcps.removeConnectionReferences($.id);else throw Error(JSON.stringify({code:"CONNECTION_IN_USE",agentNames:G.map((K)=>K.title)}));await Z.storage.connections.delete($.id);let J=await Z.storage.organizationSettings.get(X.id);if(J?.registry_config){let{registries:K,blockedMcps:H}=J.registry_config;if($.id in K){let{[$.id]:N,...F}=K;await Z.storage.organizationSettings.upsert(X.id,{registry_config:{registries:F,blockedMcps:H}})}}n5()?.invalidate($.id).catch(()=>{}),lb($.id);let W=W1(Z);if(W)y1.capture({distinctId:W,event:"connection_deleted",groups:{organization:X.id},properties:{connection_id:Q.id,connection_type:Q.connection_type,app_name:Q.app_name??null,organization_id:X.id,forced:$.force??!1}});return{item:Q}}})});import{z as db}from"zod";var Ch0;var It1=B(()=>{v0();Ch0=m({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:db.object({id:db.string()}),outputSchema:db.object({id:db.string(),healthy:db.boolean(),latencyMs:db.number()}),handler:async($,Z)=>{let X=o(Z);await Z.access.check();let Q=await Z.storage.connections.findById($.id);if(!Q||Q.organization_id!==X.id)throw Error("Connection not found");let Y=await Z.storage.connections.testConnection($.id);return{id:$.id,...Y}}})});var qt1=B(()=>{qp1();Bt1();Dt1();Tt1();Rt1();It1()});import{sql as I4}from"kysely";import{z as mW}from"zod";function Mt1($){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 wn8($,Z){let X=$;for(let Y=Z.length;Y>=1;Y--){let G=`$${Y}`;if(X.includes(G))X=X.replaceAll(G,Mt1(Z[Y-1]))}let Q=[];for(let Y=0;Y<X.length;Y++)if(X[Y]==="?")Q.push(Y);for(let Y=Math.min(Q.length,Z.length)-1;Y>=0;Y--){let G=Q[Y],J=Mt1(Z[Y]);X=X.slice(0,G)+J+X.slice(G+1)}return X}function kt1($){return $.replace(/-/g,"_")}function Bn8($){return`app_${kt1($)}`}function Dn8($){return`app_role_${kt1($)}`}function Ln8($){if($ instanceof Error){let Z=$.message.toLowerCase(),X=$.code;return X==="3F000"||X==="42704"||X==="22023"||Z.includes("schema")&&Z.includes("does not exist")||Z.includes("role")&&Z.includes("does not exist")}return!1}async function En8($,Z,X){if(await I4`CREATE SCHEMA IF NOT EXISTS ${I4.id(Z)}`.execute($),!(await I4`
948
948
  SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${X}) as exists
949
- `.execute($)).rows[0]?.exists)await I4`CREATE ROLE ${I4.id(X)} NOLOGIN`.execute($);await I4`GRANT ${I4.id(X)} TO CURRENT_USER`.execute($),await I4`GRANT USAGE, CREATE ON SCHEMA ${I4.id(Z)} TO ${I4.id(X)}`.execute($),await I4`GRANT ALL ON ALL TABLES IN SCHEMA ${I4.id(Z)} TO ${I4.id(X)}`.execute($),await I4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${I4.id(Z)} TO ${I4.id(X)}`.execute($),await I4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${I4.id(Z)} GRANT ALL ON TABLES TO ${I4.id(X)}`.execute($),await I4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${I4.id(Z)} GRANT ALL ON SEQUENCES TO ${I4.id(X)}`.execute($),await I4`REVOKE ALL ON SCHEMA public FROM ${I4.id(X)}`.execute($)}async function jn8($,Z,X,Q){try{return await $.transaction().execute(async(Y)=>{return await I4`SET LOCAL ROLE ${I4.id(X)}`.execute(Y),await I4`SET LOCAL search_path TO ${I4.id(Z)}`.execute(Y),await I4.raw(Q).execute(Y)})}catch(Y){if(Ln8(Y))return await En8($,Z,X),await $.transaction().execute(async(G)=>{return await I4`SET LOCAL ROLE ${I4.id(X)}`.execute(G),await I4`SET LOCAL search_path TO ${I4.id(Z)}`.execute(G),await I4.raw(Q).execute(G)});throw Y}}var Un8,On8,St1;var Vt1=B(()=>{v0();Un8=mW.object({results:mW.array(mW.unknown()).optional(),success:mW.boolean().optional()});On8=mW.object({sql:mW.string().describe("The SQL query to run"),params:mW.array(mW.any()).describe("The parameters to pass to the SQL query").optional()});St1=m({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:On8,outputSchema:mW.object({result:mW.array(Un8)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=wn8($.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 Q=Bn8(Z.connectionId),Y=Dn8(Z.connectionId);return{result:[{results:(await jn8(Z.db,Q,Y,X)).rows,success:!0}]}}})});function s60($){let Z=$.access.getRole();if(!BG(Z))throw new cH("Only organization owners and admins can change org-wide pin status")}var _h0=B(()=>{DG();rD()});async function e60($,Z,X){let Q=[...new Set(X)],Y=await Promise.all(Q.map((J)=>$.storage.connections.findById(J,Z))),G=Q.filter((J,W)=>!Y[W]);if(G.length>0)throw Error(`Connection not found: ${G.join(", ")}`)}function rH($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function $50($){let Z=2166136261;for(let X=0;X<$.length;X++)Z=Math.imul(Z^$.charCodeAt(X),16777619);return`a${(Z>>>0).toString(36).padStart(6,"0").slice(-6)}`}function gm($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function hm($,Z){if(!Z)return $;let X=`${$50(Z)}_`;return $.startsWith(X)?$.slice(X.length):$}function Pn8($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}var mb;var Ct1=B(()=>{TW();mb=class mb extends I9{static MAX_PAGES_PER_CLIENT=1000;clients;slugToKey=new Map;resolvedClients=new Map;toolsCache=null;resourcesCache=null;resourceTemplatesCache=null;promptsCache=null;resourceRouteMap=new Map;constructor($,Z){super(Z?.clientInfo??{name:"gateway-client",version:"1.0.0"},{capabilities:Z?.capabilities});this.clients=$;for(let X of Object.keys($)){let Q=$50(X);if(this.slugToKey.has(Q))throw Error(`GatewayClient: duplicate namespace code "${Q}" from keys "${this.slugToKey.get(Q)}" and "${X}"`);this.slugToKey.set(Q,X)}}namespace($,Z){return`${$50($)}_${Z}`}async resolveToolTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{tools:X}=await this.listTools();for(let Q of X){let Y=gm(Q._meta);if(!Y)continue;if(hm(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve tool "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}async resolvePromptTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{prompts:X}=await this.listPrompts();for(let Q of X){let Y=gm(Q._meta);if(!Y)continue;if(hm(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve prompt "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}resolveClient($){let Z=this.resolvedClients.get($);if(Z)return Z;let X=this.clients[$];if(!X)return Promise.reject(Error(`GatewayClient: unknown client key "${$}"`));let Q=X.client,Y;try{Y=typeof Q==="function"?Promise.resolve(Q()):Promise.resolve(Q)}catch(J){return Promise.reject(J)}let G=Y.catch((J)=>{throw this.resolvedClients.delete($),J});return this.resolvedClients.set($,G),G}getResolvedClient($){return this.resolveClient($)}async listFromClient($,Z,X){try{let Q=await this.resolveClient($);return await Z(Q)}catch(Q){return console.warn(`GatewayClient: skipping ${X} from client "${$}" \u2014 ${Q?.message??Q}`),[]}}async paginate($,Z,X){let Q=[],Y,G=0;do{let J=await X(Y);Q.push(...J.items),Y=J.nextCursor,G++}while(Y&&G<mb.MAX_PAGES_PER_CLIENT);if(Y)console.warn(`GatewayClient: client "${$}" exceeded ${mb.MAX_PAGES_PER_CLIENT} pages listing ${Z} \u2014 truncating`);return Q}fetchAllTools($,Z){return this.paginate(Z,"tools",async(X)=>{let Q=await $.listTools(X?{cursor:X}:void 0);return{items:Q.tools,nextCursor:Q.nextCursor}})}fetchAllResources($,Z){return this.paginate(Z,"resources",async(X)=>{let Q=await $.listResources(X?{cursor:X}:void 0);return{items:Q.resources,nextCursor:Q.nextCursor}})}fetchAllResourceTemplates($,Z){return this.paginate(Z,"resource templates",async(X)=>{let Q=await $.listResourceTemplates(X?{cursor:X}:void 0);return{items:Q.resourceTemplates,nextCursor:Q.nextCursor}})}fetchAllPrompts($,Z){return this.paginate(Z,"prompts",async(X)=>{let Q=await $.listPrompts(X?{cursor:X}:void 0);return{items:Q.prompts,nextCursor:Q.nextCursor}})}listTools($,Z){if(!this.toolsCache)this.toolsCache=this.aggregateTools();return this.toolsCache}async aggregateTools(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllTools(J,Z),"tools"),Y=X.tools,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{tools:$}}listResources($,Z){if(!this.resourcesCache)this.resourcesCache=this.aggregateResources();return this.resourcesCache}async aggregateResources(){let $=new Set,Z=[],X=new Map;for(let[Q,Y]of Object.entries(this.clients)){let G=await this.listFromClient(Q,(K)=>this.fetchAllResources(K,Q),"resources"),J=Y.resources,W=J?new Set(J):null;for(let K of G){if(W&&!W.has(K.uri)&&!(K.name&&W.has(K.name)))continue;if($.has(K.uri)){console.warn(`GatewayClient: duplicate resource "${K.uri}" from client "${Q}" \u2014 skipping`);continue}$.add(K.uri),X.set(K.uri,Q),Z.push({...K,_meta:{...K._meta??{},gatewayClientId:Q}})}}return this.resourceRouteMap=X,{resources:Z}}listResourceTemplates($,Z){if(!this.resourceTemplatesCache)this.resourceTemplatesCache=this.aggregateResourceTemplates();return this.resourceTemplatesCache}async aggregateResourceTemplates(){let $=new Set,Z=[];for(let[X,Q]of Object.entries(this.clients)){let Y=await this.listFromClient(X,(G)=>this.fetchAllResourceTemplates(G,X),"resource templates");for(let G of Y){if($.has(G.uriTemplate)){console.warn(`GatewayClient: duplicate resource template "${G.uriTemplate}" from client "${X}" \u2014 skipping`);continue}$.add(G.uriTemplate),Z.push({...G,_meta:{...G._meta??{},gatewayClientId:X}})}}return{resourceTemplates:Z}}listPrompts($,Z){if(!this.promptsCache)this.promptsCache=this.aggregatePrompts();return this.promptsCache}async aggregatePrompts(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllPrompts(J,Z),"prompts"),Y=X.prompts,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),title:J.title??Pn8(J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{prompts:$}}async callTool($,Z,X){let[Q,Y]=await this.resolveToolTarget($.name);return(await this.resolveClient(Q)).callTool({...$,name:Y},Z,X)}async readResource($,Z){let X=await this.resolveResourceRoute($.uri);return(await this.resolveClient(X)).readResource($)}async getPrompt($,Z){let[X,Q]=await this.resolvePromptTarget($.name);return(await this.resolveClient(X)).getPrompt({...$,name:Q})}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((X)=>X.close()).catch(()=>{}));await Promise.allSettled($),await super.close()}}});var Z50=B(()=>{Ct1()});function fh0($){return rH($)}function Tn8($,Z){let X=rH(Z)||"prompt";return`${String($).padStart(An8,"0")}-${X}`}async function bh0($,Z,X){try{await $.delete(X50,fh0(Z),{actor:X})}catch(Q){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:Q})}}async function Q50($,Z,X,Q){let Y=fh0(Z);await bh0($,Z,X),await Promise.all(Q.slice(0,vh0).map(async(G,J)=>{let W=Tn8(J,G.title),K={name:W,title:G.title,description:G.description,text:G.text};try{await $.write(X50,`${Y}/${W}.json`,JSON.stringify(K),{actor:X,contentType:"application/json"})}catch(H){console.error("[agent-prompts] failed to seed prompt",{agentId:Z,name:W,err:H})}}))}async function _t1($,Z){let X=fh0(Z),Q;try{Q=await $.listDir(X50,X)}catch{return[]}let Y=Q.filter((J)=>J.kind==="file"&&J.path.endsWith(".json")).slice(0,vh0),G=[];for(let J of Y)try{let W=await $.read(X50,J.path),K=JSON.parse(new TextDecoder().decode(W));if(K&&typeof K.name==="string"&&typeof K.title==="string"&&typeof K.text==="string")G.push(K)}catch{}return G}var X50="agent-prompts",vh0=20,An8;var um=B(()=>{Z50();An8=String(vh0-1).length});import{z as bt1}from"zod";function Rn8(){let $=vt1[Math.floor(Math.random()*vt1.length)];return`icon://${ft1[Math.floor(Math.random()*ft1.length)]}?color=${$}`}var vt1,ft1,In8,qn8,xh0;var xt1=B(()=>{v0();Yw();_h0();um();vt1=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],ft1=["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"];In8=bt1.object({data:P10.describe("Data for the new virtual MCP")}),qn8=bt1.object({item:_7.describe("The created virtual MCP entity")}),xh0=m({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:In8,outputSchema:qn8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)s60(Z);let{prompts:Y,...G}=$.data;if(G.connections.length>0)await e60(Z,X.id,G.connections.map((K)=>K.connection_id));let J={...G,icon:G.icon??Rn8()},W=await Z.storage.virtualMcps.create(X.id,Q,J);if(Y?.length&&Z.orgFs&&W.id)await Q50(Z.orgFs,W.id,Q,Y);return{item:W}}})});function Mn8($){let Z=[],X=0;while(X<$.length){let Q=$[X];if(Q==="%")Z.push(".*");else if(Q==="_")Z.push(".");else if(/[.*+?^${}()|[\]\\]/.test(Q))Z.push("\\"+Q);else Z.push(Q);X++}return Z.join("")}function Uw($){return typeof $==="string"||typeof $==="number"}function yh0($,Z){let X=Z.split("."),Q=$;for(let Y of X){if(Q==null||typeof Q!=="object")return;Q=Q[Y]}return Q}function kn8($,Z){return $.connections.some((X)=>X.connection_id===Z)}function Y50($,Z){if("conditions"in Z){let{operator:W,conditions:K}=Z;switch(W){case"and":return K.every((H)=>Y50($,H));case"or":return K.some((H)=>Y50($,H));case"not":return!K.every((H)=>Y50($,H));default:return!0}}let{field:X,operator:Q,value:Y}=Z,G=X.join(".");if(G==="connection_id"){if(Q!=="eq"||typeof Y!=="string")return!1;return kn8($,Y)}let J=yh0($,G);switch(Q){case"eq":return J===Y;case"gt":return Uw(J)&&Uw(Y)&&J>Y;case"gte":return Uw(J)&&Uw(Y)&&J>=Y;case"lt":return Uw(J)&&Uw(Y)&&J<Y;case"lte":return Uw(J)&&Uw(Y)&&J<=Y;case"in":return Array.isArray(Y)&&Y.includes(J);case"like":if(typeof J!=="string"||typeof Y!=="string")return!1;if(Y.length>100)return!1;let W=Mn8(Y);return new RegExp(`^${W}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Y!=="string")return!1;return J.toLowerCase().includes(Y.toLowerCase());default:return!0}}function Sn8($,Z){return[...$].sort((X,Q)=>{for(let Y of Z){let G=Y.field.join("."),J=yh0(X,G),W=yh0(Q,G),K=0;if(J==null&&W==null)continue;if(J==null)K=Y.nulls==="first"?-1:1;else if(W==null)K=Y.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof W==="string")K=J.localeCompare(W);else if(typeof J==="number"&&typeof W==="number")K=J-W;else K=String(J).localeCompare(String(W));if(K!==0)return Y.direction==="desc"?-K:K}return 0})}var Vn8,Cn8,gh0;var yt1=B(()=>{AG();v0();Yw();Vn8=Z3,Cn8=tH(_7),gh0=m({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:Vn8,outputSchema:Cn8,handler:async($,Z)=>{await Z.access.check();let X=o(Z),Q=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="connection_id"&&$.where.operator==="eq"&&typeof $.where.value==="string"?$.where.value:void 0,Y=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="pinned"&&$.where.operator==="eq"&&typeof $.where.value==="boolean"?$.where.value:void 0,J=Q?await Z.storage.virtualMcps.listByConnectionId(X.id,Q):await Z.storage.virtualMcps.list(X.id,Y!==void 0?{pinnedOnly:Y}:void 0);if($.where)J=J.filter((U)=>Y50(U,$.where));if($.orderBy&&$.orderBy.length>0)J=Sn8(J,$.orderBy);let W=J.length,K=$.offset??0,H=$.limit??100,N=J.slice(K,K+H),F=K+H<W;return{items:N,totalCount:W,hasMore:F}}})});import{z as hh0}from"zod";var _n8,vn8,uh0;var gt1=B(()=>{v0();Yw();_n8=hh0.object({id:hh0.string().describe("ID of the virtual MCP to retrieve")}),vn8=hh0.object({item:_7.nullable().describe("The retrieved virtual MCP, or null if not found")}),uh0=m({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:_n8,outputSchema:vn8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=await Z.storage.virtualMcps.findById($.id);if(Q&&Q.organization_id!==X.id)return{item:null};if(!Q)return{item:null};return{item:Q}}})});import{z as ch0}from"zod";var fn8,bn8,lh0;var ht1=B(()=>{v0();um();Yw();_h0();fn8=ch0.object({id:ch0.string().describe("ID of the virtual MCP to update"),data:A10.describe("Partial virtual MCP data to update")}),bn8=ch0.object({item:_7.describe("The updated virtual MCP entity")}),lh0=m({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:fn8,outputSchema:bn8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("User ID required to update virtual MCP");let Y=await Z.storage.virtualMcps.findById($.id);if(!Y)throw Error(`Virtual MCP not found: ${$.id}`);if(Y.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);let{prompts:G,...J}=$.data;if(J.metadata&&Y.metadata)J.metadata={...Y.metadata,...J.metadata};if(J.pinned!==void 0&&J.pinned!==Y.pinned)s60(Z);if(J.connections?.length)await e60(Z,X.id,J.connections.map((K)=>K.connection_id));let W=await Z.storage.virtualMcps.update($.id,Q,J);if(G!==void 0&&Z.orgFs)await Q50(Z.orgFs,$.id,Q,G);return{item:W}}})});function xn8($){if(!$)return!1;return/permission\s+"?checks"?\s+is not allowed/i.test($)||/permissions exceed what the github app/i.test($)}function yn8($){let{checks:Z,...X}=$;return X}async function lt1($,Z){let X={...Z,checks:"read"},Q=await $(X);if(Q.isError&&xn8(Q.content?.find((Y)=>Y.type==="text")?.text)){let Y=yn8(Z);return{result:await $(Y),grantedPermissions:Y}}return{result:Q,grantedPermissions:X}}function gn8($){if(!$||typeof $!=="object"||Array.isArray($))return ut1;let Z=$;if(Object.values(Z).some((X)=>typeof X!=="string"))return ut1;return Z}function hn8($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function S9($){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 X=hn8(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:X,owner:Z.owner,repo:Z.repo,permissions:gn8(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function jL($){return $.metadata?.orgShared===!0}function dt1($,Z,X){let Q=ct1(Z,X),Y=($??[]).filter((G)=>{if(G.status&&G.status!=="active")return!1;let J=S9(G);return J!==null&&ct1(J.owner,J.repo)===Q});return Y.find(jL)??Y[0]??null}var ut1,ct1=($,Z)=>`${$}/${Z}`.toLowerCase();var RG=B(()=>{ut1={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read"}});function mt1($){return NG($)!==null||n$0($)!==null}var it1=B(()=>{L8()});import{z as dh0}from"zod";var un8,cn8,mh0;var nt1=B(()=>{RG();TG();v0();um();Yw();it1();un8=dh0.object({id:dh0.string().describe("ID of the virtual MCP to delete")}),cn8=dh0.object({item:_7.describe("The deleted virtual MCP entity")}),mh0=m({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:un8,outputSchema:cn8,handler:async($,Z)=>{Z0(Z);let X=o(Z);if(await Z.access.check(),mt1($.id))throw Error(`Virtual MCP not found: ${$.id}`);let Q=await Z.storage.virtualMcps.findById($.id);if(!Q)throw Error(`Virtual MCP not found: ${$.id}`);if(Q.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);await Z.storage.virtualMcps.delete($.id);try{if((await Z.storage.organizationSettings.get(X.id))?.main_agent_id===$.id)await Z.storage.organizationSettings.upsert(X.id,{main_agent_id:null})}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to clear main agent pointer",{id:$.id,error:G.message})}if(Z.orgFs)await bh0(Z.orgFs,$.id,W1(Z)??"system");let Y=Q.metadata?.githubRepo?.connectionId;if(Y)try{let G=await Z.storage.connections.findById(Y,X.id),J=G&&(jL(G)||(await Z.storage.virtualMcps.listByConnectionId(X.id,Y)).length>0);if(G&&S9(G)&&!J){let K=await new s6(Z.db,Z.vault).get(Y);if(K?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${K.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await Z.storage.connections.delete(Y)}}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Y,error:G.message})}return{item:Q}}})});import{z as DQ}from"zod";var ln8,ih0;var pt1=B(()=>{v0();ln8=DQ.object({id:DQ.string(),virtualMcpId:DQ.string(),pluginId:DQ.string(),connectionId:DQ.string().nullable(),settings:DQ.record(DQ.string(),DQ.unknown()).nullable(),createdAt:DQ.string(),updatedAt:DQ.string()}),ih0=m({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:DQ.object({virtualMcpId:DQ.string().describe("Virtual MCP ID"),pluginId:DQ.string().describe("Plugin ID")}),outputSchema:DQ.object({config:ln8.nullable()}),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y}=$,G=await Z.storage.connections.findById(Q);if(!G||G.organization_id!==X.id)return{config:null};if(G.connection_type!=="VIRTUAL")return{config:null};let J=await Z.storage.virtualMcpPluginConfigs.get(Q,Y);if(!J)return{config:null};return{config:{id:J.id,virtualMcpId:J.virtualMcpId,pluginId:J.pluginId,connectionId:J.connectionId,settings:J.settings,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});import{z as qZ}from"zod";var dn8,nh0;var tt1=B(()=>{v0();ub();PZ();dn8=qZ.object({id:qZ.string(),virtualMcpId:qZ.string(),pluginId:qZ.string(),connectionId:qZ.string().nullable(),settings:qZ.record(qZ.string(),qZ.unknown()).nullable(),createdAt:qZ.string(),updatedAt:qZ.string()}),nh0=m({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:qZ.object({virtualMcpId:qZ.string().describe("Virtual MCP ID"),pluginId:qZ.string().describe("Plugin ID"),connectionId:qZ.string().nullable().optional().describe("MCP connection to bind"),settings:qZ.record(qZ.string(),qZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:qZ.object({config:dn8}),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y,connectionId:G,settings:J}=$,W=W1(Z),K=await Z.storage.connections.findById(Q);if(!K)throw Error(`Connection not found: ${Q}`);if(K.organization_id!==X.id)throw Error(`Connection not found: ${Q}`);if(K.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Q}`);let H=G?await Z.storage.connections.findById(G):null;if(G&&H&&H.organization_id!==X.id)throw Error(`Connection not found: ${G}`);if(G&&K.organization_id&&!H&&X3()&&n60(G,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let F=hb(K.organization_id,T9());await Z.storage.connections.create({...F,organization_id:K.organization_id,created_by:W})}else if(G&&!H)throw Error(`Connection not found: ${G}`);let N=await Z.storage.virtualMcpPluginConfigs.upsert(Q,Y,{connectionId:G,settings:J});return{config:{id:N.id,virtualMcpId:N.virtualMcpId,pluginId:N.pluginId,connectionId:N.connectionId,settings:N.settings,createdAt:N.createdAt instanceof Date?N.createdAt.toISOString():N.createdAt,updatedAt:N.updatedAt instanceof Date?N.updatedAt.toISOString():N.updatedAt}}}})});import{z as xX}from"zod";var mn8,ph0;var ot1=B(()=>{v0();Yw();mn8=xX.object({connectionId:xX.string(),toolName:xX.string(),label:xX.string(),icon:xX.string().nullable().optional()}),ph0=m({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:xX.object({virtualMcpId:xX.string().describe("Virtual MCP ID"),pinnedViews:xX.array(mn8).describe("Pinned views to set for the virtual MCP sidebar"),layout:xX.object({defaultMainView:xX.object({type:xX.string(),id:xX.string().optional(),toolName:xX.string().optional()}).nullable().optional(),chatDefaultOpen:xX.boolean().nullable().optional()}).optional()}),outputSchema:xX.object({item:_7.nullable()}),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pinnedViews:Y,layout:G}=$,J=W1(Z),W=await Z.storage.virtualMcps.findById(Q);if(!W)throw Error(`Virtual MCP not found: ${Q}`);if(W.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q}`);let K=W.metadata?.ui??{},H={...K,pinnedViews:Y.length>0?Y:null,layout:G??K.layout??null};return{item:await Z.storage.virtualMcps.update(Q,J??"system",{metadata:{...W.metadata,ui:H}})}}})});import{z as aH}from"zod";var in8,nn8,th0;var rt1=B(()=>{v0();in8=aH.object({ids:aH.array(aH.string()).describe("Virtual MCP ids to look up")}),nn8=aH.object({items:aH.array(aH.object({id:aH.string(),last_used_at:aH.string().optional(),last_used_by:aH.string().optional()}))}),th0=m({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:in8,outputSchema:nn8,handler:async($,Z)=>{Z0(Z),o(Z),await Z.access.check();let X=await Z.storage.threads.findLastUsedByVirtualMcpIds($.ids);return{items:$.ids.map((Q)=>({id:Q,last_used_at:X.get(Q)?.last_used_at,last_used_by:X.get(Q)?.last_used_by}))}}})});var at1=B(()=>{xt1();yt1();gt1();ht1();nt1();pt1();tt1();ot1();rt1()});import{z as c7}from"zod";var oh0;var st1=B(()=>{C6();v0();oh0=m({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:c7.object({startDate:c7.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:c7.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:c7.array(c7.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:c7.array(c7.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:c7.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:c7.object({cells:c7.array(c7.object({virtualMcpId:c7.string().nullable(),toolName:c7.string(),calls:c7.number(),errors:c7.number(),outputSize:c7.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let X=o(Z);return await Z.access.check(),await oX(),Z.storage.monitoring.queryToolCallHeatmap({organizationId:X.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 W5}from"zod";var rh0;var et1=B(()=>{C6();v0();rh0=m({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:W5.object({id:W5.string().describe("Log ID to fetch")}),outputSchema:W5.object({log:W5.object({id:W5.string().optional(),organizationId:W5.string(),connectionId:W5.string(),toolName:W5.string(),input:W5.record(W5.string(),W5.unknown()),output:W5.record(W5.string(),W5.unknown()),isError:W5.boolean(),errorMessage:W5.string().nullish(),durationMs:W5.number(),timestamp:W5.string(),userId:W5.string().nullish(),requestId:W5.string(),userAgent:W5.string().nullish(),virtualMcpId:W5.string().nullish(),properties:W5.record(W5.string(),W5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await oX();let X=o(Z),Q=await Z.storage.monitoring.getById(X.id,$.id);if(!Q)return{log:null};return{log:{...Q,timestamp:Q.timestamp instanceof Date?Q.timestamp.toISOString():Q.timestamp}}}})});import{z as J8}from"zod";var tn8,ah0;var $o1=B(()=>{C6();v0();tn8=J8.object({id:J8.string().optional().describe("Unique log identifier"),organizationId:J8.string().describe("Organization ID"),connectionId:J8.string().describe("Connection ID"),toolName:J8.string().describe("Name of the tool that was called"),isError:J8.boolean().describe("Whether the call resulted in an error"),errorMessage:J8.string().nullish().describe("Error message if applicable"),durationMs:J8.number().describe("Call duration in milliseconds"),timestamp:J8.string().describe("ISO 8601 timestamp of the call"),userId:J8.string().nullish().describe("User who triggered the call"),requestId:J8.string().describe("Unique request identifier"),userAgent:J8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:J8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:J8.record(J8.string(),J8.string()).nullish().describe("Custom key-value metadata attached to the log")}),ah0=m({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:J8.object({connectionId:J8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:J8.array(J8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:J8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:J8.string().optional().describe("Filter by tool name"),isError:J8.boolean().optional().describe("Filter by error status"),startDate:J8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:J8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:J8.number().default(20).describe("Maximum number of results"),offset:J8.number().default(0).describe("Offset for pagination"),properties:J8.record(J8.string(),J8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:J8.array(J8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:J8.record(J8.string(),J8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:J8.record(J8.string(),J8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:J8.object({logs:J8.array(tn8).describe("Array of monitoring logs"),total:J8.number().describe("Total number of logs matching filters"),offset:J8.number().describe("Current offset for pagination"),limit:J8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await oX();let X=o(Z),Y=$.properties||$.propertyKeys||$.propertyPatterns||$.propertyInValues?{properties:$.properties,propertyKeys:$.propertyKeys,propertyPatterns:$.propertyPatterns,propertyInValues:$.propertyInValues}:void 0,G={organizationId:X.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:Y},J=await Z.storage.monitoring.query(G);return{logs:J.logs.map(({input:W,output:K,...H})=>({...H,timestamp:H.timestamp instanceof Date?H.timestamp.toISOString():H.timestamp})),total:J.total,offset:$.offset,limit:$.limit}}})});import{z as Y$}from"zod";var sh0;var Zo1=B(()=>{C6();v0();sh0=m({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:Y$.object({startDate:Y$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:Y$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:Y$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:Y$.array(Y$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:Y$.array(Y$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:Y$.array(Y$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:Y$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:Y$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:Y$.array(Y$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:Y$.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:Y$.object({totalCalls:Y$.number().describe("Total number of tool calls"),errorRate:Y$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:Y$.number().describe("Average call duration in milliseconds"),errorRatePercent:Y$.string().optional().describe("Error rate as a percentage string"),totalErrors:Y$.number().optional().describe("Total number of errors"),p50DurationMs:Y$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:Y$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:Y$.array(Y$.object({connectionId:Y$.string(),calls:Y$.number(),errors:Y$.number(),errorRate:Y$.number(),avgDurationMs:Y$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:Y$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:Y$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:Y$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:Y$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:Y$.array(Y$.object({toolName:Y$.string(),connectionId:Y$.string().nullable(),calls:Y$.number(),inputTokens:Y$.number().optional(),outputTokens:Y$.number().optional(),costUsd:Y$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:Y$.array(Y$.object({timestamp:Y$.string(),toolName:Y$.string(),calls:Y$.number(),errors:Y$.number(),avg:Y$.number(),p95:Y$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:Y$.array(Y$.object({timestamp:Y$.string(),calls:Y$.number(),errors:Y$.number(),errorRate:Y$.number(),avg:Y$.number(),p50:Y$.number(),p95:Y$.number(),inputTokens:Y$.number().optional(),outputTokens:Y$.number().optional(),totalTokens:Y$.number().optional(),costUsd:Y$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let X=o(Z);if(await Z.access.check(),await oX(),$.interval&&$.llmUsage)return Z.storage.monitoring.queryLlmUsageStats({organizationId:X.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 Y=await Z.storage.monitoring.queryMetricTimeseries({organizationId:X.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 Y;let G=await Z.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:X.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{...Y,topTools:G.topTools,topToolsTimeseries:G.timeseries}}let Q=await Z.storage.monitoring.getStats({organizationId:X.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});return{...Q,errorRatePercent:(Q.errorRate*100).toFixed(2)}}})});import{z as yX}from"zod";var eh0;var Xo1=B(()=>{C6();v0();eh0=m({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:yX.object({threadIds:yX.array(yX.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:yX.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:yX.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:yX.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:yX.object({items:yX.array(yX.object({threadId:yX.string(),calls:yX.number(),inputTokens:yX.number(),outputTokens:yX.number(),totalTokens:yX.number(),costUsd:yX.number()}))}),handler:async($,Z)=>{let X=o(Z);return await Z.access.check(),await oX(),{items:await Z.storage.monitoring.queryThreadUsage({organizationId:X.id,connectionId:$.connectionId??"decopilot",threadIds:$.threadIds,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0})}}})});var Qo1=B(()=>{st1();et1();$o1();Zo1();Xo1()});function G50($){return typeof $==="string"&&rn8.has($.trim().toLowerCase())}var rn8;var $u0=B(()=>{rn8=new Set([".well-known","_admin","api","auth","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as PY}from"zod";var Zu0;var Yo1=B(()=>{v0();$u0();Zu0=m({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:PY.object({slug:PY.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!G50($),"Slug is reserved by Studio"),name:PY.string().min(1).max(255),description:PY.string().optional()}),outputSchema:PY.object({id:PY.string(),name:PY.string(),slug:PY.string(),logo:PY.string().nullable().optional(),metadata:PY.any().optional(),createdAt:PY.string().datetime().describe("ISO 8601 timestamp"),members:PY.array(PY.any()).optional()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=W1(Z);if(!X)throw Error("User ID required to create organization");let Q=await Z.boundAuth.organization.create({name:$.name,slug:$.slug,metadata:$.description?{description:$.description}:void 0,userId:X});if(!Q)throw Error("Failed to create organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as Q3}from"zod";var Xu0;var Go1=B(()=>{v0();Xu0=m({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:Q3.object({userId:Q3.string().optional()}),outputSchema:Q3.object({organizations:Q3.array(Q3.object({id:Q3.string(),name:Q3.string(),slug:Q3.string(),logo:Q3.string().nullable().optional(),metadata:Q3.any().optional(),createdAt:Q3.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=W1(Z),Q=$.userId||X;if(!Q)throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list(Q)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});import{z as IG}from"zod";var Qu0;var Jo1=B(()=>{v0();Qu0=m({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:IG.object({}),outputSchema:IG.object({id:IG.string(),name:IG.string(),slug:IG.string(),logo:IG.string().nullable().optional(),metadata:IG.any().optional(),createdAt:IG.string().datetime().describe("ISO 8601 timestamp"),members:IG.array(IG.any()).optional(),invitations:IG.array(IG.any()).optional()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.boundAuth.organization.get(X);if(!Q)throw Error("No active organization found");let Y=new Date,G=Q.invitations?.filter((J)=>new Date(J.expiresAt)>Y);return{...Q,invitations:G,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as Y3}from"zod";var Yu0;var Wo1=B(()=>{v0();Yu0=m({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Y3.object({id:Y3.string(),name:Y3.string().min(1).max(255).optional(),description:Y3.string().optional()}),outputSchema:Y3.object({id:Y3.string(),name:Y3.string(),slug:Y3.string(),logo:Y3.string().nullable().optional(),metadata:Y3.any().optional(),createdAt:Y3.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X={};if($.name)X.name=$.name;if($.description)X.metadata={description:$.description};let Q=await Z.boundAuth.organization.update({organizationId:$.id,data:X});if(!Q)throw Error("Failed to update organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as cm}from"zod";var Gu0;var Ko1=B(()=>{v0();Gu0=m({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:cm.object({id:cm.string()}),outputSchema:cm.object({success:cm.boolean(),id:cm.string()}),handler:async($,Z)=>{return Z0(Z),await Z.access.check(),await Z.boundAuth.organization.update({organizationId:$.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:$.id}}})});import{z as O$}from"zod";var lm,dm,sH,Ho1,ww,mm,im,nm,pm,Ow;var qG=B(()=>{lm=O$.object({title:O$.string(),url:O$.string(),icon:O$.string()}),dm=O$.object({registries:O$.record(O$.string(),O$.object({enabled:O$.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:O$.array(O$.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),sH=O$.object({keyId:O$.string(),modelId:O$.string(),title:O$.string().optional()}).nullable(),Ho1=O$.enum(["fast","smart","thinking","image","web_search","deep_research"]),ww=O$.enum(["fast","smart","thinking"]),mm=O$.object({tiers:O$.object({fast:sH,smart:sH,thinking:sH,image:sH,web_search:sH,deep_research:sH})}),im=O$.object({tiers:O$.object({fast:sH.optional(),smart:sH.optional(),thinking:sH.optional()})}),nm=O$.object({ids:O$.array(O$.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),pm=O$.object({demo_mode:O$.boolean().optional().describe("Curated demo org: the commerce connect modal proceeds without a configured required data source."),reports_only:O$.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."),qa_agent_enabled:O$.boolean().optional().describe("Run the QA Agent on a task's pull request once it's In Review \u2014 it verifies the task actually solved the problem (exercises the feature, not just the diff)."),code_reviewer_enabled:O$.boolean().optional().describe("Run the Code Reviewer on a task's pull request once it's In Review \u2014 it reviews the code using the repo's stack-appropriate review skills."),auto_merge:O$.boolean().optional().describe("When every enabled reviewer (QA Agent / Code Reviewer) approves a task's pull request, merge it automatically instead of leaving the merge to a human. If the merge is blocked by a conflict with the base branch, hand the PR back to the Super Agent to resolve the conflict (check out the branch, merge the base, push) so it can then merge."),auto_assign_report_tasks_to_super_agent:O$.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.")}),Ow=O$.object({id:O$.string().describe("Brand context ID"),name:O$.string().describe("Company name"),domain:O$.string().describe("Company domain (e.g. example.com)"),overview:O$.string().describe("Company overview / description"),logo:O$.string().nullable().optional().describe("Logo URL"),favicon:O$.string().nullable().optional().describe("Favicon URL"),ogImage:O$.string().nullable().optional().describe("OG image URL"),fonts:O$.object({heading:O$.string().optional().describe("Font family for headings"),body:O$.string().optional().describe("Font family for body text"),code:O$.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:O$.object({primary:O$.string().optional().describe("Primary brand color (hex)"),secondary:O$.string().optional().describe("Secondary brand color (hex)"),accent:O$.string().optional().describe("Accent / highlight color (hex)"),background:O$.string().optional().describe("Background color (hex)"),foreground:O$.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:O$.array(O$.record(O$.string(),O$.unknown())).nullable().optional().describe("Brand images"),metadata:O$.record(O$.string(),O$.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:O$.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:O$.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as eH}from"zod";var Ju0;var No1=B(()=>{v0();qG();Ju0=m({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:eH.object({}),outputSchema:eH.object({organizationId:eH.string(),sidebar_items:eH.array(lm).nullable().optional(),enabled_plugins:eH.array(eH.string()).nullable().optional(),registry_config:dm.nullable().optional(),simple_mode:mm.nullable().optional(),default_home_agents:nm.nullable().optional(),flags:pm.nullable().optional(),main_agent_id:eH.string().nullable().optional(),createdAt:eH.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:eH.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.organizationSettings.get(X);if(!Q)return{organizationId:X};return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as LQ}from"zod";var Wu0;var Fo1=B(()=>{v0();qG();Wu0=m({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:LQ.object({organizationId:LQ.string(),sidebar_items:LQ.array(lm).optional(),enabled_plugins:LQ.array(LQ.string()).optional(),registry_config:dm.optional(),simple_mode:mm.optional(),default_home_agents:nm.optional(),flags:pm.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value."),main_agent_id:LQ.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear.")}),outputSchema:LQ.object({organizationId:LQ.string(),sidebar_items:LQ.array(lm).nullable().optional(),enabled_plugins:LQ.array(LQ.string()).nullable().optional(),registry_config:dm.nullable().optional(),simple_mode:mm.nullable().optional(),default_home_agents:nm.nullable().optional(),flags:pm.nullable().optional(),main_agent_id:LQ.string().nullable().optional(),createdAt:LQ.string().datetime().describe("ISO 8601 timestamp"),updatedAt:LQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(Z0(Z),await Z.access.check(),o(Z).id!==$.organizationId)throw Error("Cannot update settings for a different organization");let Q=await Z.storage.organizationSettings.upsert($.organizationId,{sidebar_items:$.sidebar_items,enabled_plugins:$.enabled_plugins,registry_config:$.registry_config,simple_mode:$.simple_mode,default_home_agents:$.default_home_agents,flags:$.flags,main_agent_id:$.main_agent_id});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as G3}from"zod";var Uo1,Ku0,Hu0;var wo1=B(()=>{v0();qG();Uo1=Ow.extend({organizationId:G3.string(),archivedAt:G3.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:G3.string().describe("ISO 8601 timestamp"),updatedAt:G3.string().describe("ISO 8601 timestamp")}),Ku0=m({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:G3.object({includeArchived:G3.boolean().optional().describe("Include archived brands in the list")}),outputSchema:G3.object({items:G3.array(Uo1)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(X,{includeArchived:$.includeArchived})).map((Y)=>({...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}))}}}),Hu0=m({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:G3.object({id:G3.string().describe("Brand context ID")}),outputSchema:Uo1.extend({organizationId:G3.string()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.brandContext.get($.id,X);if(!Q)throw Error("Brand context not found");return{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as zL}from"zod";var Oo1,Nu0,Fu0,Uu0;var Bo1=B(()=>{v0();qG();Oo1=Ow.extend({organizationId:zL.string(),createdAt:zL.string().describe("ISO 8601 timestamp"),updatedAt:zL.string().describe("ISO 8601 timestamp")}),Nu0=m({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:Ow.omit({id:!0}),outputSchema:Oo1,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.brandContext.create(X,{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{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}),Fu0=m({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:Ow.partial().required({id:!0}),outputSchema:Oo1,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");let{id:Y,...G}=$;if(G.isDefault===!0)await Z.storage.brandContext.setDefault(Y,X);let J=await Z.storage.brandContext.update(Y,X,{name:G.name,domain:G.domain,overview:G.overview,logo:G.logo!==void 0?G.logo??null:void 0,favicon:G.favicon!==void 0?G.favicon??null:void 0,ogImage:G.ogImage!==void 0?G.ogImage??null:void 0,fonts:G.fonts!==void 0?G.fonts??null:void 0,colors:G.colors!==void 0?G.colors??null:void 0,images:G.images!==void 0?G.images??null:void 0,metadata:G.metadata!==void 0?G.metadata??null:void 0,archivedAt:G.archivedAt!==void 0?G.archivedAt??null:void 0,isDefault:G.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),Uu0=m({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:zL.object({id:zL.string().describe("Brand context ID")}),outputSchema:zL.object({success:zL.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");return await Z.storage.brandContext.update($.id,X,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function J50($,Z,X){let Q=$.trim();if(!Q.startsWith("http"))Q=`https://${Q}`;let Y=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify({url:Q,formats:["branding"]})});if(!Y.ok){let U=await Y.text().catch(()=>"");throw Error(`Firecrawl API error: ${Y.status} ${U.slice(0,200)}`)}let G=await Y.json();if(!G.success||!G.data?.branding)return null;let J=G.data.branding,W=G.data.metadata??{},K=en8(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((U)=>U.trim()).filter(Boolean)?.slice().sort((U,w)=>U.length-w.length)[0]??W.ogSiteName??X??$,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 en8($,Z){let X=$.images??{},Q=$.colors??{},Y={};for(let[N,F]of Object.entries(Q))if(typeof F==="string"&&F&&an8.has(N))Y[N]=F;let G={},W=($.typography??{}).fontFamilies??{};for(let[N,F]of Object.entries(W))if(typeof F==="string"&&F){let U=sn8[N.toLowerCase()];if(U&&!G[U])G[U]=F}let K=$.fonts;if(Array.isArray(K))for(let N of K){let F=N.family;if(typeof F==="string"&&F&&!G.body)G.body=F}let H={};for(let N of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[N]!==void 0)H[N]=$[N];return{logo:X.logo??null,favicon:X.favicon??null,ogImage:X.ogImage??Z.ogImage??null,fonts:Object.keys(G).length>0?G:null,colors:Object.keys(Y).length>0?Y:null,metadata:H}}var an8,sn8;var wu0=B(()=>{an8=new Set(["primary","secondary","accent","background","foreground"]),sn8={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as W50}from"zod";var $p8,Ou0;var Do1=B(()=>{v0();wu0();qG();$p8=Ow.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:W50.boolean()}),Ou0=m({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:W50.object({domain:W50.string().describe("Website domain to extract brand from"),brandId:W50.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:$p8,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)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=Z.firecrawlApiKey;if(!Q)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Y=await J50($.domain,Q,$.domain);if(!Y)throw Error("Firecrawl did not return branding data for this URL");let G={name:Y.name,domain:Y.domain,overview:Y.overview,logo:Y.logo,favicon:Y.favicon,ogImage:Y.ogImage,fonts:Y.fonts,colors:Y.colors,images:Y.images,metadata:Y.metadata},J=$.brandId?await(async()=>{if(!await Z.storage.brandContext.get($.brandId,X))throw Error("Brand context not found");return Z.storage.brandContext.update($.brandId,X,G)})():await Z.storage.brandContext.create(X,G);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function Lo1($){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 X=Object.fromEntries(Object.entries(Z).filter(([Q])=>Q!=="tagline"&&Q!=="tone"));return Object.keys(X).length>0?X:void 0})()}}var Bu0,Du0;var Eo1=B(()=>{zh0();v0();Bu0=m({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:h60,outputSchema:km,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=$.id?await Z.storage.brandContext.get($.id,X):await Z.storage.brandContext.getDefault(X);if(!Q)throw Error($.id?"Brand not found":"No default brand configured");return Lo1(Q)}}),Du0=m({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:u60,outputSchema:c60,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(X)).map(Lo1)}}})});import{resolveTxt as Zp8}from"dns/promises";function Lu0($){return`${Xp8}.${$.toLowerCase()}`}function jo1(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function zo1($,Z,X=Zp8){if(!Z)return!1;try{return(await X(Lu0($))).some((Y)=>Y.join("").trim()===Z)}catch{return!1}}var Xp8="_deco-verify";var Po1=()=>{};import{z as z5}from"zod";function Bw($){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?Lu0($.domain):null,recordValue:Z?$.verificationToken:null}}function Yp8($){let Z=$.toLowerCase().trim();if(!Qp8.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(J3.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var Qp8,Eu0,K50,ju0,zu0,Pu0,Au0,Tu0;var Ao1=B(()=>{MG();Po1();v0();Qp8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,Eu0=z5.enum(["off","auto","request"]),K50=z5.object({id:z5.string(),domain:z5.string(),joinMode:Eu0,verificationStatus:z5.enum(["pending","verified"]),verificationMethod:z5.enum(["email","dns"]).nullable(),verifiedAt:z5.string().nullable(),recordName:z5.string().nullable(),recordValue:z5.string().nullable()});ju0=m({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:z5.object({}),outputSchema:z5.object({domains:z5.array(K50)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(X.id)).map(Bw)}}}),zu0=m({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:z5.object({domain:z5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:Eu0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:K50,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=Yp8($.domain),G=Z.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(Z.auth.user?.emailVerified)&&G===Q,W=await Z.storage.organizationDomains.getByOrgAndDomain(X.id,Q);if(W){if(W.verificationStatus!=="verified"&&J){let H=await Z.storage.organizationDomains.markVerified(W.id,"email");return Bw(H)}return Bw(W)}let K=J?await Z.storage.organizationDomains.add(X.id,Q,{joinMode:$.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await Z.storage.organizationDomains.add(X.id,Q,{joinMode:"off",verificationStatus:"pending",verificationToken:jo1()});return Bw(K)}}),Pu0=m({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:z5.object({id:z5.string(),joinMode:Eu0}),outputSchema:K50,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if($.joinMode!=="off"&&Q.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Y=await Z.storage.organizationDomains.updateJoinMode($.id,$.joinMode);return Bw(Y)}}),Au0=m({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:z5.object({id:z5.string()}),outputSchema:z5.object({verified:z5.boolean(),domain:K50}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if(Q.verificationStatus==="verified")return{verified:!0,domain:Bw(Q)};if(!Q.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await zo1(Q.domain,Q.verificationToken))return{verified:!1,domain:Bw(Q)};let G=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:Bw(G)}}}),Tu0=m({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:z5.object({id:z5.string()}),outputSchema:z5.object({success:z5.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");return await Z.storage.organizationDomains.removeById($.id),{success:!0}}})});function Dw($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as H9}from"zod";var Gp8,Ru0,Iu0,qu0;var To1=B(()=>{v0();x4();Gp8=H9.object({id:H9.string(),userId:H9.string(),status:H9.enum(["pending","approved","denied"]),createdAt:H9.string(),user:H9.object({id:H9.string(),name:H9.string(),email:H9.string(),image:H9.string().nullable()}).nullable()}),Ru0=m({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:H9.object({}),outputSchema:H9.object({requests:H9.array(Gp8)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z);return{requests:(await Z.storage.organizationJoinRequests.listPendingWithUser(X.id)).map((Y)=>({id:Y.id,userId:Y.userId,status:Y.status,createdAt:new Date(Y.createdAt).toISOString(),user:Y.user}))}}}),Iu0=m({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:H9.object({requestId:H9.string()}),outputSchema:H9.object({success:H9.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=W1(Z);if(!await Z.storage.organizationJoinRequests.decide(Q.id,"approved",Y??Q.userId))return{success:!0};try{await Z.boundAuth.organization.addMember({organizationId:X.id,userId:Q.userId,role:["user"]})}catch(J){if(!Dw(J))throw J}if(Y)y1.capture({distinctId:Y,event:"organization_join_request_approved",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}}),qu0=m({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:H9.object({requestId:H9.string()}),outputSchema:H9.object({success:H9.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=W1(Z);if(await Z.storage.organizationJoinRequests.decide(Q.id,"denied",Y??Q.userId)&&Y)y1.capture({distinctId:Y,event:"organization_join_request_denied",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}})});import{z as EQ}from"zod";var Mu0;var Ro1=B(()=>{x4();v0();DG();Mu0=m({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:EQ.object({organizationId:EQ.string().optional(),userId:EQ.string(),role:EQ.array(EQ.string())}),outputSchema:EQ.object({id:EQ.string(),organizationId:EQ.string(),userId:EQ.string(),role:EQ.union([EQ.string(),EQ.array(EQ.string())]),createdAt:EQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",W1(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!B40(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.addMember({organizationId:X,userId:$.userId,role:$.role});if(!Y)throw Error("Failed to add member");let G=W1(Z);if(G)y1.capture({distinctId:G,event:"organization_member_added",groups:{organization:X},properties:{organization_id:X,added_user_id:$.userId,role:$.role}});return{...Y,role:Y.role,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as ib}from"zod";var ku0;var Io1=B(()=>{x4();v0();ku0=m({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:ib.object({organizationId:ib.string().optional(),memberIdOrEmail:ib.string()}),outputSchema:ib.object({success:ib.boolean(),memberIdOrEmail:ib.string()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.boundAuth.organization.removeMember({organizationId:X,memberIdOrEmail:$.memberIdOrEmail});Z.invalidateMemberRole?.(Q.member.userId,X);let Y=W1(Z);if(Y)y1.capture({distinctId:Y,event:"organization_member_removed",groups:{organization:X},properties:{organization_id:X,member_id_or_email:$.memberIdOrEmail}});return{success:!0,memberIdOrEmail:$.memberIdOrEmail}}})});import{z as l7}from"zod";var Su0;var qo1=B(()=>{v0();Su0=m({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:l7.object({limit:l7.number().optional(),offset:l7.number().optional()}),outputSchema:l7.object({members:l7.array(l7.object({id:l7.string(),organizationId:l7.string(),userId:l7.string(),role:l7.string(),createdAt:l7.string().datetime().describe("ISO 8601 timestamp"),user:l7.object({id:l7.string(),name:l7.string(),email:l7.string(),image:l7.string().optional()}).optional()}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.boundAuth.organization.listMembers({organizationId:X,limit:$.limit,offset:$.offset});return{members:(Array.isArray(Q)?Q:[]).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});import{z as MZ}from"zod";var Vu0;var Mo1=B(()=>{x4();v0();DG();Vu0=m({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:MZ.object({organizationId:MZ.string().optional(),memberId:MZ.string(),role:MZ.array(MZ.string())}),outputSchema:MZ.object({id:MZ.string(),organizationId:MZ.string(),userId:MZ.string(),role:MZ.union([MZ.string(),MZ.array(MZ.string())]),createdAt:MZ.string().datetime().describe("ISO 8601 timestamp"),user:MZ.object({email:MZ.string(),name:MZ.string(),image:MZ.string().optional()})}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",W1(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!B40(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.updateMemberRole({organizationId:X,memberId:$.memberId,role:$.role});if(!Y)throw Error("Failed to update member role");Z.invalidateMemberRole?.(Y.userId,X);let G=W1(Z);if(G)y1.capture({distinctId:G,event:"organization_member_role_updated",groups:{organization:X},properties:{organization_id:X,member_id:$.memberId,target_user_id:Y.userId,new_role:Array.isArray($.role)?$.role.join(","):$.role}});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});async function ko1(){if(tm&&Date.now()-tm.fetchedAt<600000)return tm.rate;try{let Z=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),X=parseFloat(Z.USDBRL?.bid??"");if(Number.isNaN(X)||X<=0)throw Error("Invalid rate");return tm={rate:X,fetchedAt:Date.now()},X}catch{return tm?.rate??5.5}}function So1($,Z,X){if(Z==="brl")return Math.round($/X);return $}var tm=null;function Cu0($,Z="",X=new URLSearchParams){for(let[Q,Y]of Object.entries($)){if(Y===void 0||Y===null)continue;let G=Z?`${Z}[${Q}]`:Q;if(Array.isArray(Y))Y.forEach((J,W)=>{if(typeof J==="object"&&J!==null)Cu0(J,`${G}[${W}]`,X);else X.append(`${G}[${W}]`,String(J))});else if(typeof Y==="object")Cu0(Y,G,X);else X.append(G,String(Y))}return X}async function H50($,Z){let X=y0().stripeSecretKey;if(!X)throw new W3(503,"billing is not configured");let Q=Z?.params?Cu0(Z.params).toString():void 0,Y=await fetch(`${Jp8}${$}`,{method:Z?.method??(Q?"POST":"GET"),headers:{Authorization:`Bearer ${X}`,...Q&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Q,signal:AbortSignal.timeout(Wp8)}),G=await Y.json().catch(()=>({}));if(!Y.ok){let J=G.error?.message??`HTTP ${Y.status}`;throw new W3(Y.status,J)}return G}function Vo1($){return{billing_address_collection:"required",tax_id_collection:{enabled:!0},...$&&{customer_update:{address:"auto",name:"auto"}}}}async function Co1($){let Z=y0().stripeOrgPriceId;if(!Z)throw new W3(503,"billing is not configured");let X=await H50("/checkout/sessions",{params:{mode:"subscription",...Vo1(null),line_items:[{price:Z,quantity:1}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:{orgId:$.organizationId},subscription_data:{metadata:{orgId:$.organizationId}}}});if(!X.url)throw new W3(500,"checkout session lacks url");return{url:X.url}}function Kp8($,Z){return Math.round($*(1+Z/100))}async function _o1($){let Z=Kp8($.amountCents,$.feePercent),X=So1($.amountCents,$.currency,await ko1()),Q=$.currency==="brl"?`Studio AI credits (R$ ${($.amountCents/100).toFixed(2)})`:`Studio AI credits ($${($.amountCents/100).toFixed(2)})`,Y=await H50("/checkout/sessions",{params:{mode:"payment",...$.customerId&&{customer:$.customerId},...Vo1($.customerId),line_items:[{quantity:1,price_data:{currency:$.currency,unit_amount:Z,product_data:{name:Q}}}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:{kind:"topup",orgId:$.organizationId,creditCents:X}}});if(!Y.url)throw new W3(500,"checkout session lacks url");return{url:Y.url}}async function vo1($){let Z=await H50("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new W3(500,"portal session lacks url");return{url:Z.url}}async function fo1($){await H50(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}var Jp8="https://api.stripe.com/v1",W3,Wp8=15000;var om=B(()=>{M$();W3=class W3 extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});import{z as _u0}from"zod";var vu0;var bo1=B(()=>{om();PZ();v0();x4();vu0=m({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:_u0.object({}),outputSchema:_u0.object({url:_u0.string()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id,Q=Z.organization?.slug;if(!X||!Q)throw Error("Organization context required");let Y=await Z.storage.organizationBilling.getBilling(X);if(Y?.status==="active")throw Error("This organization already has an active subscription.");if(Y?.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let G=`${GQ()}/${encodeURIComponent(Q)}/members`,{url:J}=await Co1({organizationId:X,successUrl:`${G}?checkout=success`,cancelUrl:`${G}?checkout=canceled`});return aJ({event:"subscription_checkout_started",organizationId:X,...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:J}}})});import{z as fu0}from"zod";var bu0;var xo1=B(()=>{om();PZ();v0();bu0=m({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:fu0.object({}),outputSchema:fu0.object({url:fu0.string()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z);if(!X.slug)throw Error("Organization context required");let Q=await Z.storage.organizationBilling.getBilling(X.id);if(!Q?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");try{return await vo1({customerId:Q.stripeCustomerId,returnUrl:`${GQ()}/${encodeURIComponent(X.slug)}/members`})}catch(Y){if(Y instanceof W3)throw Error(Y.message);throw Y}}})});function yo1($){return xu0[$%xu0.length]??Hp8}function jQ($){return $.createdBy==="system"}function rm($,Z){return $?.startsWith(`${nb[Z]}:`)??!1}function PL($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Np8($,Z){let X=PL($),Q=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let G=Y.data??{};if(G.reviewer!=="qa"&&G.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&G.verified!==!0)continue;Q.set(G.reviewer,"approved")}else Q.set(G.reviewer,"changes_requested")}return Q}function Lw($,Z,X){if(Z.length===0)return!1;let Q=Np8($,X);return Z.every((Y)=>Q.get(Y)==="approved")}function go1($,Z){return Lw($,Z)&&!Lw($,Z,{verifiedOnly:!0})}function ho1($,Z=yu0){return $.filter((Q)=>Q.action==="review_changes_requested").length+1>=Z}var L4="super-agent",xu0,Hp8,kG,nb,$N,yu0=5,uo1="task-board.item.updated",co1="task-board.item.deleted";var kZ=B(()=>{xu0=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],Hp8=xu0[0];kG=["qa","code_review"],nb={qa:"QA Agent",code_review:"Code Reviewer"},$N={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function gu0($){return $==="trial"?"trial":"subscription"}function am($,Z,X,Q={}){aJ({event:Z,organizationId:X.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:X.id,...Q}})}function hu0($){return $?.status==="active"||$?.status==="past_due"}function N50($,Z){if(hu0($))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 sm(){let $=y0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function pb(){return{...sm(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function F50($,Z,X=sm()){if(!X.enforced||!jQ(Z))return;let Q=await $.storage.organizationBilling.taskClaim(Z.id);if(Q&&Q.runCount>=X.maxRunsPerTask)throw am($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new zQ("runs_exhausted");if(Q&&Q.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),G=N50(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,G.periodKey)>=G.limit)throw am($,"task_quota_blocked",Z,{phase:"precheck",reason:G.exhaustedReason,billing_mode:gu0(G.periodKey),limit:G.limit}),new zQ(G.exhaustedReason)}async function lo1($,Z,X=sm()){if(!X.enforced||!jQ(Z))return"skipped";let Q=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=N50(Q,X),G=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(G==="exhausted")throw am($,"task_quota_blocked",Z,{phase:"claim",reason:Y.exhaustedReason,billing_mode:gu0(Y.periodKey),limit:Y.limit}),new zQ(Y.exhaustedReason);if(G==="runs_exhausted")throw am($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new zQ("runs_exhausted");if(G==="claimed")am($,"task_quota_claimed",Z,{billing_mode:gu0(Y.periodKey),period_key:Y.periodKey,limit:Y.limit});return G}async function do1($,Z,X,Q){if(Q==="skipped")return;await $.rollbackTaskClaim(Z,X,{releaseSlot:Q==="claimed"}).catch((Y)=>console.error("[task-quota] rollback failed (stays charged)",Y))}async function mo1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function io1($,Z,X){if(await $.releaseTaskClaim(Z,X).catch((Y)=>{return console.error("[task-quota] refund failed (stays charged)",Y),!1}))aJ({event:"task_quota_refunded",organizationId:Z,properties:{task_id:X}})}var Fp8="[SUBSCRIPTION_REQUIRED]",Up8,zQ;var K3=B(()=>{kZ();x4();M$();Up8={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"};zQ=class zQ extends Error{reason;constructor($){super(`${Fp8} ${Up8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as ZN}from"zod";var uu0;var no1=B(()=>{v0();K3();uu0=m({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:ZN.object({}),outputSchema:ZN.object({enforced:ZN.boolean(),billingStatus:ZN.string(),subscribed:ZN.boolean(),hasBillingAccount:ZN.boolean(),used:ZN.number(),limit:ZN.number(),currentPeriodEnd:ZN.string().datetime().nullable()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=sm(),Y=await Z.storage.organizationBilling.getBilling(X.id),G=N50(Y,Q),J=await Z.storage.organizationBilling.countTaskClaims(X.id,G.periodKey);return{enforced:Q.enforced,billingStatus:Y?.status??"none",subscribed:hu0(Y),hasBillingAccount:!!Y?.stripeCustomerId,used:J,limit:G.limit,currentPeriodEnd:Y?.currentPeriodEnd?.toISOString()??null}}})});var po1=B(()=>{Yo1();Go1();Jo1();Wo1();Ko1();No1();Fo1();wo1();Bo1();Do1();Eo1();Ao1();To1();Ro1();Io1();qo1();Mo1();bo1();xo1();no1()});function iW($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function U50($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(U50);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||U50(X)));return!1}function cu0($){return Array.isArray($)&&$.every(U50)}function em($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||U50(X)))}var Ar1="vercel.ai.error",Op8,to1,oo1,G1,Tr1="AI_APICallError",Rr1,Bp8,ro1,ao1,s8,Ir1="AI_EmptyResponseBodyError",qr1,Dp8,so1,eo1,w50,Mr1="AI_InvalidArgumentError",kr1,Lp8,$r1,Zr1,Ew,Sr1="AI_InvalidPromptError",Vr1,Ep8,Xr1,Qr1,SG,Cr1="AI_InvalidResponseDataError",_r1,jp8,Yr1,Gr1,tb,vr1="AI_JSONParseError",fr1,zp8,Jr1,Wr1,XN,br1="AI_LoadAPIKeyError",xr1,Pp8,Kr1,Hr1,AL,yr1="AI_LoadSettingError",gr1,Ap8,Nr1,Fr1,hr1,ur1="AI_NoContentGeneratedError",cr1,Tp8,Ur1,wr1,lr1,dr1="AI_NoSuchModelError",mr1,Rp8,Or1,Br1,C5,ir1="AI_TooManyEmbeddingValuesForCallError",nr1,Ip8,Dr1,Lr1,ob,pr1="AI_TypeValidationError",tr1,qp8,Er1,jr1,K5,or1="AI_UnsupportedFunctionalityError",rr1,Mp8,zr1,Pr1,q4;var r1=B(()=>{Op8=Symbol.for(Ar1),G1=class $ extends(oo1=Error,to1=Op8,oo1){constructor({name:Z,message:X,cause:Q}){super(X);this[to1]=!0,this.name=Z,this.cause=Q}static isInstance(Z){return $.hasMarker(Z,Ar1)}static hasMarker(Z,X){let Q=Symbol.for(X);return Z!=null&&typeof Z==="object"&&Q in Z&&typeof Z[Q]==="boolean"&&Z[Q]===!0}},Rr1=`vercel.ai.error.${Tr1}`,Bp8=Symbol.for(Rr1),s8=class extends(ao1=G1,ro1=Bp8,ao1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:Q,responseHeaders:Y,responseBody:G,cause:J,isRetryable:W=Q!=null&&(Q===408||Q===409||Q===429||Q>=500),data:K}){super({name:Tr1,message:$,cause:J});this[ro1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=Q,this.responseHeaders=Y,this.responseBody=G,this.isRetryable=W,this.data=K}static isInstance($){return G1.hasMarker($,Rr1)}},qr1=`vercel.ai.error.${Ir1}`,Dp8=Symbol.for(qr1),w50=class extends(eo1=G1,so1=Dp8,eo1){constructor({message:$="Empty response body"}={}){super({name:Ir1,message:$});this[so1]=!0}static isInstance($){return G1.hasMarker($,qr1)}};kr1=`vercel.ai.error.${Mr1}`,Lp8=Symbol.for(kr1),Ew=class extends(Zr1=G1,$r1=Lp8,Zr1){constructor({message:$,cause:Z,argument:X}){super({name:Mr1,message:$,cause:Z});this[$r1]=!0,this.argument=X}static isInstance($){return G1.hasMarker($,kr1)}},Vr1=`vercel.ai.error.${Sr1}`,Ep8=Symbol.for(Vr1),SG=class extends(Qr1=G1,Xr1=Ep8,Qr1){constructor({prompt:$,message:Z,cause:X}){super({name:Sr1,message:`Invalid prompt: ${Z}`,cause:X});this[Xr1]=!0,this.prompt=$}static isInstance($){return G1.hasMarker($,Vr1)}},_r1=`vercel.ai.error.${Cr1}`,jp8=Symbol.for(_r1),tb=class extends(Gr1=G1,Yr1=jp8,Gr1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:Cr1,message:Z});this[Yr1]=!0,this.data=$}static isInstance($){return G1.hasMarker($,_r1)}},fr1=`vercel.ai.error.${vr1}`,zp8=Symbol.for(fr1),XN=class extends(Wr1=G1,Jr1=zp8,Wr1){constructor({text:$,cause:Z}){super({name:vr1,message:`JSON parsing failed: Text: ${$}.
949
+ `.execute($)).rows[0]?.exists)await I4`CREATE ROLE ${I4.id(X)} NOLOGIN`.execute($);await I4`GRANT ${I4.id(X)} TO CURRENT_USER`.execute($),await I4`GRANT USAGE, CREATE ON SCHEMA ${I4.id(Z)} TO ${I4.id(X)}`.execute($),await I4`GRANT ALL ON ALL TABLES IN SCHEMA ${I4.id(Z)} TO ${I4.id(X)}`.execute($),await I4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${I4.id(Z)} TO ${I4.id(X)}`.execute($),await I4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${I4.id(Z)} GRANT ALL ON TABLES TO ${I4.id(X)}`.execute($),await I4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${I4.id(Z)} GRANT ALL ON SEQUENCES TO ${I4.id(X)}`.execute($),await I4`REVOKE ALL ON SCHEMA public FROM ${I4.id(X)}`.execute($)}async function jn8($,Z,X,Q){try{return await $.transaction().execute(async(Y)=>{return await I4`SET LOCAL ROLE ${I4.id(X)}`.execute(Y),await I4`SET LOCAL search_path TO ${I4.id(Z)}`.execute(Y),await I4.raw(Q).execute(Y)})}catch(Y){if(Ln8(Y))return await En8($,Z,X),await $.transaction().execute(async(G)=>{return await I4`SET LOCAL ROLE ${I4.id(X)}`.execute(G),await I4`SET LOCAL search_path TO ${I4.id(Z)}`.execute(G),await I4.raw(Q).execute(G)});throw Y}}var Un8,On8,St1;var Vt1=B(()=>{v0();Un8=mW.object({results:mW.array(mW.unknown()).optional(),success:mW.boolean().optional()});On8=mW.object({sql:mW.string().describe("The SQL query to run"),params:mW.array(mW.any()).describe("The parameters to pass to the SQL query").optional()});St1=m({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:On8,outputSchema:mW.object({result:mW.array(Un8)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=wn8($.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 Q=Bn8(Z.connectionId),Y=Dn8(Z.connectionId);return{result:[{results:(await jn8(Z.db,Q,Y,X)).rows,success:!0}]}}})});function s60($){let Z=$.access.getRole();if(!BG(Z))throw new cH("Only organization owners and admins can change org-wide pin status")}var _h0=B(()=>{DG();rD()});async function e60($,Z,X){let Q=[...new Set(X)],Y=await Promise.all(Q.map((J)=>$.storage.connections.findById(J,Z))),G=Q.filter((J,W)=>!Y[W]);if(G.length>0)throw Error(`Connection not found: ${G.join(", ")}`)}function rH($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function $50($){let Z=2166136261;for(let X=0;X<$.length;X++)Z=Math.imul(Z^$.charCodeAt(X),16777619);return`a${(Z>>>0).toString(36).padStart(6,"0").slice(-6)}`}function gm($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function hm($,Z){if(!Z)return $;let X=`${$50(Z)}_`;return $.startsWith(X)?$.slice(X.length):$}function Pn8($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}var mb;var Ct1=B(()=>{TW();mb=class mb extends I9{static MAX_PAGES_PER_CLIENT=1000;clients;slugToKey=new Map;resolvedClients=new Map;toolsCache=null;resourcesCache=null;resourceTemplatesCache=null;promptsCache=null;resourceRouteMap=new Map;constructor($,Z){super(Z?.clientInfo??{name:"gateway-client",version:"1.0.0"},{capabilities:Z?.capabilities});this.clients=$;for(let X of Object.keys($)){let Q=$50(X);if(this.slugToKey.has(Q))throw Error(`GatewayClient: duplicate namespace code "${Q}" from keys "${this.slugToKey.get(Q)}" and "${X}"`);this.slugToKey.set(Q,X)}}namespace($,Z){return`${$50($)}_${Z}`}async resolveToolTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{tools:X}=await this.listTools();for(let Q of X){let Y=gm(Q._meta);if(!Y)continue;if(hm(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve tool "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}async resolvePromptTarget($){let Z=$.indexOf("_");if(Z!==-1){let Q=$.slice(0,Z),Y=this.slugToKey.get(Q);if(Y)return[Y,$.slice(Z+1)]}let{prompts:X}=await this.listPrompts();for(let Q of X){let Y=gm(Q._meta);if(!Y)continue;if(hm(Q.name,Y)===$)return[Y,$]}if(Z===-1)throw Error(`GatewayClient: could not resolve prompt "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,Z)}" in "${$}" and not found by original name in any client`)}resolveClient($){let Z=this.resolvedClients.get($);if(Z)return Z;let X=this.clients[$];if(!X)return Promise.reject(Error(`GatewayClient: unknown client key "${$}"`));let Q=X.client,Y;try{Y=typeof Q==="function"?Promise.resolve(Q()):Promise.resolve(Q)}catch(J){return Promise.reject(J)}let G=Y.catch((J)=>{throw this.resolvedClients.delete($),J});return this.resolvedClients.set($,G),G}getResolvedClient($){return this.resolveClient($)}async listFromClient($,Z,X){try{let Q=await this.resolveClient($);return await Z(Q)}catch(Q){return console.warn(`GatewayClient: skipping ${X} from client "${$}" \u2014 ${Q?.message??Q}`),[]}}async paginate($,Z,X){let Q=[],Y,G=0;do{let J=await X(Y);Q.push(...J.items),Y=J.nextCursor,G++}while(Y&&G<mb.MAX_PAGES_PER_CLIENT);if(Y)console.warn(`GatewayClient: client "${$}" exceeded ${mb.MAX_PAGES_PER_CLIENT} pages listing ${Z} \u2014 truncating`);return Q}fetchAllTools($,Z){return this.paginate(Z,"tools",async(X)=>{let Q=await $.listTools(X?{cursor:X}:void 0);return{items:Q.tools,nextCursor:Q.nextCursor}})}fetchAllResources($,Z){return this.paginate(Z,"resources",async(X)=>{let Q=await $.listResources(X?{cursor:X}:void 0);return{items:Q.resources,nextCursor:Q.nextCursor}})}fetchAllResourceTemplates($,Z){return this.paginate(Z,"resource templates",async(X)=>{let Q=await $.listResourceTemplates(X?{cursor:X}:void 0);return{items:Q.resourceTemplates,nextCursor:Q.nextCursor}})}fetchAllPrompts($,Z){return this.paginate(Z,"prompts",async(X)=>{let Q=await $.listPrompts(X?{cursor:X}:void 0);return{items:Q.prompts,nextCursor:Q.nextCursor}})}listTools($,Z){if(!this.toolsCache)this.toolsCache=this.aggregateTools();return this.toolsCache}async aggregateTools(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllTools(J,Z),"tools"),Y=X.tools,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{tools:$}}listResources($,Z){if(!this.resourcesCache)this.resourcesCache=this.aggregateResources();return this.resourcesCache}async aggregateResources(){let $=new Set,Z=[],X=new Map;for(let[Q,Y]of Object.entries(this.clients)){let G=await this.listFromClient(Q,(K)=>this.fetchAllResources(K,Q),"resources"),J=Y.resources,W=J?new Set(J):null;for(let K of G){if(W&&!W.has(K.uri)&&!(K.name&&W.has(K.name)))continue;if($.has(K.uri)){console.warn(`GatewayClient: duplicate resource "${K.uri}" from client "${Q}" \u2014 skipping`);continue}$.add(K.uri),X.set(K.uri,Q),Z.push({...K,_meta:{...K._meta??{},gatewayClientId:Q}})}}return this.resourceRouteMap=X,{resources:Z}}listResourceTemplates($,Z){if(!this.resourceTemplatesCache)this.resourceTemplatesCache=this.aggregateResourceTemplates();return this.resourceTemplatesCache}async aggregateResourceTemplates(){let $=new Set,Z=[];for(let[X,Q]of Object.entries(this.clients)){let Y=await this.listFromClient(X,(G)=>this.fetchAllResourceTemplates(G,X),"resource templates");for(let G of Y){if($.has(G.uriTemplate)){console.warn(`GatewayClient: duplicate resource template "${G.uriTemplate}" from client "${X}" \u2014 skipping`);continue}$.add(G.uriTemplate),Z.push({...G,_meta:{...G._meta??{},gatewayClientId:X}})}}return{resourceTemplates:Z}}listPrompts($,Z){if(!this.promptsCache)this.promptsCache=this.aggregatePrompts();return this.promptsCache}async aggregatePrompts(){let $=[];for(let[Z,X]of Object.entries(this.clients)){let Q=await this.listFromClient(Z,(J)=>this.fetchAllPrompts(J,Z),"prompts"),Y=X.prompts,G=Y?new Set(Y):null;for(let J of Q){if(G&&!G.has(J.name))continue;$.push({...J,name:this.namespace(Z,J.name),title:J.title??Pn8(J.name),_meta:{...J._meta??{},gatewayClientId:Z}})}}return{prompts:$}}async callTool($,Z,X){let[Q,Y]=await this.resolveToolTarget($.name);return(await this.resolveClient(Q)).callTool({...$,name:Y},Z,X)}async readResource($,Z){let X=await this.resolveResourceRoute($.uri);return(await this.resolveClient(X)).readResource($)}async getPrompt($,Z){let[X,Q]=await this.resolvePromptTarget($.name);return(await this.resolveClient(X)).getPrompt({...$,name:Q})}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((X)=>X.close()).catch(()=>{}));await Promise.allSettled($),await super.close()}}});var Z50=B(()=>{Ct1()});function fh0($){return rH($)}function Tn8($,Z){let X=rH(Z)||"prompt";return`${String($).padStart(An8,"0")}-${X}`}async function bh0($,Z,X){try{await $.delete(X50,fh0(Z),{actor:X})}catch(Q){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:Q})}}async function Q50($,Z,X,Q){let Y=fh0(Z);await bh0($,Z,X),await Promise.all(Q.slice(0,vh0).map(async(G,J)=>{let W=Tn8(J,G.title),K={name:W,title:G.title,description:G.description,text:G.text};try{await $.write(X50,`${Y}/${W}.json`,JSON.stringify(K),{actor:X,contentType:"application/json"})}catch(H){console.error("[agent-prompts] failed to seed prompt",{agentId:Z,name:W,err:H})}}))}async function _t1($,Z){let X=fh0(Z),Q;try{Q=await $.listDir(X50,X)}catch{return[]}let Y=Q.filter((J)=>J.kind==="file"&&J.path.endsWith(".json")).slice(0,vh0),G=[];for(let J of Y)try{let W=await $.read(X50,J.path),K=JSON.parse(new TextDecoder().decode(W));if(K&&typeof K.name==="string"&&typeof K.title==="string"&&typeof K.text==="string")G.push(K)}catch{}return G}var X50="agent-prompts",vh0=20,An8;var um=B(()=>{Z50();An8=String(vh0-1).length});import{z as bt1}from"zod";function Rn8(){let $=vt1[Math.floor(Math.random()*vt1.length)];return`icon://${ft1[Math.floor(Math.random()*ft1.length)]}?color=${$}`}var vt1,ft1,In8,qn8,xh0;var xt1=B(()=>{v0();Yw();_h0();um();vt1=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],ft1=["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"];In8=bt1.object({data:P10.describe("Data for the new virtual MCP")}),qn8=bt1.object({item:_7.describe("The created virtual MCP entity")}),xh0=m({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:In8,outputSchema:qn8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)s60(Z);let{prompts:Y,...G}=$.data;if(G.connections.length>0)await e60(Z,X.id,G.connections.map((K)=>K.connection_id));let J={...G,icon:G.icon??Rn8()},W=await Z.storage.virtualMcps.create(X.id,Q,J);if(Y?.length&&Z.orgFs&&W.id)await Q50(Z.orgFs,W.id,Q,Y);return{item:W}}})});function Mn8($){let Z=[],X=0;while(X<$.length){let Q=$[X];if(Q==="%")Z.push(".*");else if(Q==="_")Z.push(".");else if(/[.*+?^${}()|[\]\\]/.test(Q))Z.push("\\"+Q);else Z.push(Q);X++}return Z.join("")}function Uw($){return typeof $==="string"||typeof $==="number"}function yh0($,Z){let X=Z.split("."),Q=$;for(let Y of X){if(Q==null||typeof Q!=="object")return;Q=Q[Y]}return Q}function kn8($,Z){return $.connections.some((X)=>X.connection_id===Z)}function Y50($,Z){if("conditions"in Z){let{operator:W,conditions:K}=Z;switch(W){case"and":return K.every((H)=>Y50($,H));case"or":return K.some((H)=>Y50($,H));case"not":return!K.every((H)=>Y50($,H));default:return!0}}let{field:X,operator:Q,value:Y}=Z,G=X.join(".");if(G==="connection_id"){if(Q!=="eq"||typeof Y!=="string")return!1;return kn8($,Y)}let J=yh0($,G);switch(Q){case"eq":return J===Y;case"gt":return Uw(J)&&Uw(Y)&&J>Y;case"gte":return Uw(J)&&Uw(Y)&&J>=Y;case"lt":return Uw(J)&&Uw(Y)&&J<Y;case"lte":return Uw(J)&&Uw(Y)&&J<=Y;case"in":return Array.isArray(Y)&&Y.includes(J);case"like":if(typeof J!=="string"||typeof Y!=="string")return!1;if(Y.length>100)return!1;let W=Mn8(Y);return new RegExp(`^${W}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Y!=="string")return!1;return J.toLowerCase().includes(Y.toLowerCase());default:return!0}}function Sn8($,Z){return[...$].sort((X,Q)=>{for(let Y of Z){let G=Y.field.join("."),J=yh0(X,G),W=yh0(Q,G),K=0;if(J==null&&W==null)continue;if(J==null)K=Y.nulls==="first"?-1:1;else if(W==null)K=Y.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof W==="string")K=J.localeCompare(W);else if(typeof J==="number"&&typeof W==="number")K=J-W;else K=String(J).localeCompare(String(W));if(K!==0)return Y.direction==="desc"?-K:K}return 0})}var Vn8,Cn8,gh0;var yt1=B(()=>{AG();v0();Yw();Vn8=Z3,Cn8=tH(_7),gh0=m({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:Vn8,outputSchema:Cn8,handler:async($,Z)=>{await Z.access.check();let X=o(Z),Q=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="connection_id"&&$.where.operator==="eq"&&typeof $.where.value==="string"?$.where.value:void 0,Y=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="pinned"&&$.where.operator==="eq"&&typeof $.where.value==="boolean"?$.where.value:void 0,J=Q?await Z.storage.virtualMcps.listByConnectionId(X.id,Q):await Z.storage.virtualMcps.list(X.id,Y!==void 0?{pinnedOnly:Y}:void 0);if($.where)J=J.filter((U)=>Y50(U,$.where));if($.orderBy&&$.orderBy.length>0)J=Sn8(J,$.orderBy);let W=J.length,K=$.offset??0,H=$.limit??100,N=J.slice(K,K+H),F=K+H<W;return{items:N,totalCount:W,hasMore:F}}})});import{z as hh0}from"zod";var _n8,vn8,uh0;var gt1=B(()=>{v0();Yw();_n8=hh0.object({id:hh0.string().describe("ID of the virtual MCP to retrieve")}),vn8=hh0.object({item:_7.nullable().describe("The retrieved virtual MCP, or null if not found")}),uh0=m({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:_n8,outputSchema:vn8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=await Z.storage.virtualMcps.findById($.id);if(Q&&Q.organization_id!==X.id)return{item:null};if(!Q)return{item:null};return{item:Q}}})});import{z as ch0}from"zod";var fn8,bn8,lh0;var ht1=B(()=>{v0();um();Yw();_h0();fn8=ch0.object({id:ch0.string().describe("ID of the virtual MCP to update"),data:A10.describe("Partial virtual MCP data to update")}),bn8=ch0.object({item:_7.describe("The updated virtual MCP entity")}),lh0=m({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:fn8,outputSchema:bn8,handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let Q=W1(Z);if(!Q)throw Error("User ID required to update virtual MCP");let Y=await Z.storage.virtualMcps.findById($.id);if(!Y)throw Error(`Virtual MCP not found: ${$.id}`);if(Y.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);let{prompts:G,...J}=$.data;if(J.metadata&&Y.metadata)J.metadata={...Y.metadata,...J.metadata};if(J.pinned!==void 0&&J.pinned!==Y.pinned)s60(Z);if(J.connections?.length)await e60(Z,X.id,J.connections.map((K)=>K.connection_id));let W=await Z.storage.virtualMcps.update($.id,Q,J);if(G!==void 0&&Z.orgFs)await Q50(Z.orgFs,$.id,Q,G);return{item:W}}})});function xn8($){if(!$)return!1;return/permission\s+"?checks"?\s+is not allowed/i.test($)||/permissions exceed what the github app/i.test($)}function yn8($){let{checks:Z,...X}=$;return X}async function lt1($,Z){let X={...Z,checks:"read"},Q=await $(X);if(Q.isError&&xn8(Q.content?.find((Y)=>Y.type==="text")?.text)){let Y=yn8(Z);return{result:await $(Y),grantedPermissions:Y}}return{result:Q,grantedPermissions:X}}function gn8($){if(!$||typeof $!=="object"||Array.isArray($))return ut1;let Z=$;if(Object.values(Z).some((X)=>typeof X!=="string"))return ut1;return Z}function hn8($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function S9($){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 X=hn8(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:X,owner:Z.owner,repo:Z.repo,permissions:gn8(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function jL($){return $.metadata?.orgShared===!0}function dt1($,Z,X){let Q=ct1(Z,X),Y=($??[]).filter((G)=>{if(G.status&&G.status!=="active")return!1;let J=S9(G);return J!==null&&ct1(J.owner,J.repo)===Q});return Y.find(jL)??Y[0]??null}var ut1,ct1=($,Z)=>`${$}/${Z}`.toLowerCase();var RG=B(()=>{ut1={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read"}});function mt1($){return NG($)!==null||n$0($)!==null}var it1=B(()=>{L8()});import{z as dh0}from"zod";var un8,cn8,mh0;var nt1=B(()=>{RG();TG();v0();um();Yw();it1();un8=dh0.object({id:dh0.string().describe("ID of the virtual MCP to delete")}),cn8=dh0.object({item:_7.describe("The deleted virtual MCP entity")}),mh0=m({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:un8,outputSchema:cn8,handler:async($,Z)=>{Z0(Z);let X=o(Z);if(await Z.access.check(),mt1($.id))throw Error(`Virtual MCP not found: ${$.id}`);let Q=await Z.storage.virtualMcps.findById($.id);if(!Q)throw Error(`Virtual MCP not found: ${$.id}`);if(Q.organization_id!==X.id)throw Error(`Virtual MCP not found: ${$.id}`);await Z.storage.virtualMcps.delete($.id);try{if((await Z.storage.organizationSettings.get(X.id))?.main_agent_id===$.id)await Z.storage.organizationSettings.upsert(X.id,{main_agent_id:null})}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to clear main agent pointer",{id:$.id,error:G.message})}if(Z.orgFs)await bh0(Z.orgFs,$.id,W1(Z)??"system");let Y=Q.metadata?.githubRepo?.connectionId;if(Y)try{let G=await Z.storage.connections.findById(Y,X.id),J=G&&(jL(G)||(await Z.storage.virtualMcps.listByConnectionId(X.id,Y)).length>0);if(G&&S9(G)&&!J){let K=await new s6(Z.db,Z.vault).get(Y);if(K?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${K.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await Z.storage.connections.delete(Y)}}catch(G){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Y,error:G.message})}return{item:Q}}})});import{z as DQ}from"zod";var ln8,ih0;var pt1=B(()=>{v0();ln8=DQ.object({id:DQ.string(),virtualMcpId:DQ.string(),pluginId:DQ.string(),connectionId:DQ.string().nullable(),settings:DQ.record(DQ.string(),DQ.unknown()).nullable(),createdAt:DQ.string(),updatedAt:DQ.string()}),ih0=m({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:DQ.object({virtualMcpId:DQ.string().describe("Virtual MCP ID"),pluginId:DQ.string().describe("Plugin ID")}),outputSchema:DQ.object({config:ln8.nullable()}),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y}=$,G=await Z.storage.connections.findById(Q);if(!G||G.organization_id!==X.id)return{config:null};if(G.connection_type!=="VIRTUAL")return{config:null};let J=await Z.storage.virtualMcpPluginConfigs.get(Q,Y);if(!J)return{config:null};return{config:{id:J.id,virtualMcpId:J.virtualMcpId,pluginId:J.pluginId,connectionId:J.connectionId,settings:J.settings,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}})});import{z as qZ}from"zod";var dn8,nh0;var tt1=B(()=>{v0();ub();PZ();dn8=qZ.object({id:qZ.string(),virtualMcpId:qZ.string(),pluginId:qZ.string(),connectionId:qZ.string().nullable(),settings:qZ.record(qZ.string(),qZ.unknown()).nullable(),createdAt:qZ.string(),updatedAt:qZ.string()}),nh0=m({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:qZ.object({virtualMcpId:qZ.string().describe("Virtual MCP ID"),pluginId:qZ.string().describe("Plugin ID"),connectionId:qZ.string().nullable().optional().describe("MCP connection to bind"),settings:qZ.record(qZ.string(),qZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:qZ.object({config:dn8}),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y,connectionId:G,settings:J}=$,W=W1(Z),K=await Z.storage.connections.findById(Q);if(!K)throw Error(`Connection not found: ${Q}`);if(K.organization_id!==X.id)throw Error(`Connection not found: ${Q}`);if(K.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${Q}`);let H=G?await Z.storage.connections.findById(G):null;if(G&&H&&H.organization_id!==X.id)throw Error(`Connection not found: ${G}`);if(G&&K.organization_id&&!H&&X3()&&n60(G,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let F=hb(K.organization_id,T9());await Z.storage.connections.create({...F,organization_id:K.organization_id,created_by:W})}else if(G&&!H)throw Error(`Connection not found: ${G}`);let N=await Z.storage.virtualMcpPluginConfigs.upsert(Q,Y,{connectionId:G,settings:J});return{config:{id:N.id,virtualMcpId:N.virtualMcpId,pluginId:N.pluginId,connectionId:N.connectionId,settings:N.settings,createdAt:N.createdAt instanceof Date?N.createdAt.toISOString():N.createdAt,updatedAt:N.updatedAt instanceof Date?N.updatedAt.toISOString():N.updatedAt}}}})});import{z as xX}from"zod";var mn8,ph0;var ot1=B(()=>{v0();Yw();mn8=xX.object({connectionId:xX.string(),toolName:xX.string(),label:xX.string(),icon:xX.string().nullable().optional()}),ph0=m({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:xX.object({virtualMcpId:xX.string().describe("Virtual MCP ID"),pinnedViews:xX.array(mn8).describe("Pinned views to set for the virtual MCP sidebar"),layout:xX.object({defaultMainView:xX.object({type:xX.string(),id:xX.string().optional(),toolName:xX.string().optional()}).nullable().optional(),chatDefaultOpen:xX.boolean().nullable().optional()}).optional()}),outputSchema:xX.object({item:_7.nullable()}),handler:async($,Z)=>{Z0(Z);let X=o(Z);await Z.access.check();let{virtualMcpId:Q,pinnedViews:Y,layout:G}=$,J=W1(Z),W=await Z.storage.virtualMcps.findById(Q);if(!W)throw Error(`Virtual MCP not found: ${Q}`);if(W.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q}`);let K=W.metadata?.ui??{},H={...K,pinnedViews:Y.length>0?Y:null,layout:G??K.layout??null};return{item:await Z.storage.virtualMcps.update(Q,J??"system",{metadata:{...W.metadata,ui:H}})}}})});import{z as aH}from"zod";var in8,nn8,th0;var rt1=B(()=>{v0();in8=aH.object({ids:aH.array(aH.string()).describe("Virtual MCP ids to look up")}),nn8=aH.object({items:aH.array(aH.object({id:aH.string(),last_used_at:aH.string().optional(),last_used_by:aH.string().optional()}))}),th0=m({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:in8,outputSchema:nn8,handler:async($,Z)=>{Z0(Z),o(Z),await Z.access.check();let X=await Z.storage.threads.findLastUsedByVirtualMcpIds($.ids);return{items:$.ids.map((Q)=>({id:Q,last_used_at:X.get(Q)?.last_used_at,last_used_by:X.get(Q)?.last_used_by}))}}})});var at1=B(()=>{xt1();yt1();gt1();ht1();nt1();pt1();tt1();ot1();rt1()});import{z as c7}from"zod";var oh0;var st1=B(()=>{C6();v0();oh0=m({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:c7.object({startDate:c7.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:c7.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:c7.array(c7.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:c7.array(c7.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:c7.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:c7.object({cells:c7.array(c7.object({virtualMcpId:c7.string().nullable(),toolName:c7.string(),calls:c7.number(),errors:c7.number(),outputSize:c7.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let X=o(Z);return await Z.access.check(),await oX(),Z.storage.monitoring.queryToolCallHeatmap({organizationId:X.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 W5}from"zod";var rh0;var et1=B(()=>{C6();v0();rh0=m({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:W5.object({id:W5.string().describe("Log ID to fetch")}),outputSchema:W5.object({log:W5.object({id:W5.string().optional(),organizationId:W5.string(),connectionId:W5.string(),toolName:W5.string(),input:W5.record(W5.string(),W5.unknown()),output:W5.record(W5.string(),W5.unknown()),isError:W5.boolean(),errorMessage:W5.string().nullish(),durationMs:W5.number(),timestamp:W5.string(),userId:W5.string().nullish(),requestId:W5.string(),userAgent:W5.string().nullish(),virtualMcpId:W5.string().nullish(),properties:W5.record(W5.string(),W5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await oX();let X=o(Z),Q=await Z.storage.monitoring.getById(X.id,$.id);if(!Q)return{log:null};return{log:{...Q,timestamp:Q.timestamp instanceof Date?Q.timestamp.toISOString():Q.timestamp}}}})});import{z as J8}from"zod";var tn8,ah0;var $o1=B(()=>{C6();v0();tn8=J8.object({id:J8.string().optional().describe("Unique log identifier"),organizationId:J8.string().describe("Organization ID"),connectionId:J8.string().describe("Connection ID"),toolName:J8.string().describe("Name of the tool that was called"),isError:J8.boolean().describe("Whether the call resulted in an error"),errorMessage:J8.string().nullish().describe("Error message if applicable"),durationMs:J8.number().describe("Call duration in milliseconds"),timestamp:J8.string().describe("ISO 8601 timestamp of the call"),userId:J8.string().nullish().describe("User who triggered the call"),requestId:J8.string().describe("Unique request identifier"),userAgent:J8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:J8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:J8.record(J8.string(),J8.string()).nullish().describe("Custom key-value metadata attached to the log")}),ah0=m({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:J8.object({connectionId:J8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:J8.array(J8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:J8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:J8.string().optional().describe("Filter by tool name"),isError:J8.boolean().optional().describe("Filter by error status"),startDate:J8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:J8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:J8.number().default(20).describe("Maximum number of results"),offset:J8.number().default(0).describe("Offset for pagination"),properties:J8.record(J8.string(),J8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:J8.array(J8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:J8.record(J8.string(),J8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:J8.record(J8.string(),J8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:J8.object({logs:J8.array(tn8).describe("Array of monitoring logs"),total:J8.number().describe("Total number of logs matching filters"),offset:J8.number().describe("Current offset for pagination"),limit:J8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await oX();let X=o(Z),Y=$.properties||$.propertyKeys||$.propertyPatterns||$.propertyInValues?{properties:$.properties,propertyKeys:$.propertyKeys,propertyPatterns:$.propertyPatterns,propertyInValues:$.propertyInValues}:void 0,G={organizationId:X.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:Y},J=await Z.storage.monitoring.query(G);return{logs:J.logs.map(({input:W,output:K,...H})=>({...H,timestamp:H.timestamp instanceof Date?H.timestamp.toISOString():H.timestamp})),total:J.total,offset:$.offset,limit:$.limit}}})});import{z as Y$}from"zod";var sh0;var Zo1=B(()=>{C6();v0();sh0=m({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:Y$.object({startDate:Y$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:Y$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:Y$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:Y$.array(Y$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:Y$.array(Y$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:Y$.array(Y$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:Y$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:Y$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:Y$.array(Y$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:Y$.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:Y$.object({totalCalls:Y$.number().describe("Total number of tool calls"),errorRate:Y$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:Y$.number().describe("Average call duration in milliseconds"),errorRatePercent:Y$.string().optional().describe("Error rate as a percentage string"),totalErrors:Y$.number().optional().describe("Total number of errors"),p50DurationMs:Y$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:Y$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:Y$.array(Y$.object({connectionId:Y$.string(),calls:Y$.number(),errors:Y$.number(),errorRate:Y$.number(),avgDurationMs:Y$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:Y$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:Y$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:Y$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:Y$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:Y$.array(Y$.object({toolName:Y$.string(),connectionId:Y$.string().nullable(),calls:Y$.number(),inputTokens:Y$.number().optional(),outputTokens:Y$.number().optional(),costUsd:Y$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:Y$.array(Y$.object({timestamp:Y$.string(),toolName:Y$.string(),calls:Y$.number(),errors:Y$.number(),avg:Y$.number(),p95:Y$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:Y$.array(Y$.object({timestamp:Y$.string(),calls:Y$.number(),errors:Y$.number(),errorRate:Y$.number(),avg:Y$.number(),p50:Y$.number(),p95:Y$.number(),inputTokens:Y$.number().optional(),outputTokens:Y$.number().optional(),totalTokens:Y$.number().optional(),costUsd:Y$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let X=o(Z);if(await Z.access.check(),await oX(),$.interval&&$.llmUsage)return Z.storage.monitoring.queryLlmUsageStats({organizationId:X.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 Y=await Z.storage.monitoring.queryMetricTimeseries({organizationId:X.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 Y;let G=await Z.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:X.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{...Y,topTools:G.topTools,topToolsTimeseries:G.timeseries}}let Q=await Z.storage.monitoring.getStats({organizationId:X.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});return{...Q,errorRatePercent:(Q.errorRate*100).toFixed(2)}}})});import{z as yX}from"zod";var eh0;var Xo1=B(()=>{C6();v0();eh0=m({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:yX.object({threadIds:yX.array(yX.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:yX.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:yX.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:yX.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:yX.object({items:yX.array(yX.object({threadId:yX.string(),calls:yX.number(),inputTokens:yX.number(),outputTokens:yX.number(),totalTokens:yX.number(),costUsd:yX.number()}))}),handler:async($,Z)=>{let X=o(Z);return await Z.access.check(),await oX(),{items:await Z.storage.monitoring.queryThreadUsage({organizationId:X.id,connectionId:$.connectionId??"decopilot",threadIds:$.threadIds,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0})}}})});var Qo1=B(()=>{st1();et1();$o1();Zo1();Xo1()});function G50($){return typeof $==="string"&&rn8.has($.trim().toLowerCase())}var rn8;var $u0=B(()=>{rn8=new Set([".well-known","_admin","api","auth","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as PY}from"zod";var Zu0;var Yo1=B(()=>{v0();$u0();Zu0=m({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:PY.object({slug:PY.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!G50($),"Slug is reserved by Studio"),name:PY.string().min(1).max(255),description:PY.string().optional()}),outputSchema:PY.object({id:PY.string(),name:PY.string(),slug:PY.string(),logo:PY.string().nullable().optional(),metadata:PY.any().optional(),createdAt:PY.string().datetime().describe("ISO 8601 timestamp"),members:PY.array(PY.any()).optional()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=W1(Z);if(!X)throw Error("User ID required to create organization");let Q=await Z.boundAuth.organization.create({name:$.name,slug:$.slug,metadata:$.description?{description:$.description}:void 0,userId:X});if(!Q)throw Error("Failed to create organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as Q3}from"zod";var Xu0;var Go1=B(()=>{v0();Xu0=m({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:Q3.object({userId:Q3.string().optional()}),outputSchema:Q3.object({organizations:Q3.array(Q3.object({id:Q3.string(),name:Q3.string(),slug:Q3.string(),logo:Q3.string().nullable().optional(),metadata:Q3.any().optional(),createdAt:Q3.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=W1(Z),Q=$.userId||X;if(!Q)throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list(Q)).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});import{z as IG}from"zod";var Qu0;var Jo1=B(()=>{v0();Qu0=m({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:IG.object({}),outputSchema:IG.object({id:IG.string(),name:IG.string(),slug:IG.string(),logo:IG.string().nullable().optional(),metadata:IG.any().optional(),createdAt:IG.string().datetime().describe("ISO 8601 timestamp"),members:IG.array(IG.any()).optional(),invitations:IG.array(IG.any()).optional()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.boundAuth.organization.get(X);if(!Q)throw Error("No active organization found");let Y=new Date,G=Q.invitations?.filter((J)=>new Date(J.expiresAt)>Y);return{...Q,invitations:G,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as Y3}from"zod";var Yu0;var Wo1=B(()=>{v0();Yu0=m({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Y3.object({id:Y3.string(),name:Y3.string().min(1).max(255).optional(),description:Y3.string().optional()}),outputSchema:Y3.object({id:Y3.string(),name:Y3.string(),slug:Y3.string(),logo:Y3.string().nullable().optional(),metadata:Y3.any().optional(),createdAt:Y3.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X={};if($.name)X.name=$.name;if($.description)X.metadata={description:$.description};let Q=await Z.boundAuth.organization.update({organizationId:$.id,data:X});if(!Q)throw Error("Failed to update organization");return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}}})});import{z as cm}from"zod";var Gu0;var Ko1=B(()=>{v0();Gu0=m({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:cm.object({id:cm.string()}),outputSchema:cm.object({success:cm.boolean(),id:cm.string()}),handler:async($,Z)=>{return Z0(Z),await Z.access.check(),await Z.boundAuth.organization.update({organizationId:$.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:$.id}}})});import{z as O$}from"zod";var lm,dm,sH,Ho1,ww,mm,im,nm,pm,Ow;var qG=B(()=>{lm=O$.object({title:O$.string(),url:O$.string(),icon:O$.string()}),dm=O$.object({registries:O$.record(O$.string(),O$.object({enabled:O$.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:O$.array(O$.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),sH=O$.object({keyId:O$.string(),modelId:O$.string(),title:O$.string().optional()}).nullable(),Ho1=O$.enum(["fast","smart","thinking","image","web_search","deep_research"]),ww=O$.enum(["fast","smart","thinking"]),mm=O$.object({tiers:O$.object({fast:sH,smart:sH,thinking:sH,image:sH,web_search:sH,deep_research:sH})}),im=O$.object({tiers:O$.object({fast:sH.optional(),smart:sH.optional(),thinking:sH.optional()})}),nm=O$.object({ids:O$.array(O$.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),pm=O$.object({demo_mode:O$.boolean().optional().describe("Curated demo org: the commerce connect modal proceeds without a configured required data source."),reports_only:O$.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."),qa_agent_enabled:O$.boolean().optional().describe("Run the QA Agent on a task's pull request once it's In Review \u2014 it verifies the task actually solved the problem (exercises the feature, not just the diff)."),code_reviewer_enabled:O$.boolean().optional().describe("Run the Code Reviewer on a task's pull request once it's In Review \u2014 it reviews the code using the repo's stack-appropriate review skills."),auto_merge:O$.boolean().optional().describe("When every enabled reviewer (QA Agent / Code Reviewer) approves a task's pull request, merge it automatically instead of leaving the merge to a human. If the merge is blocked by a conflict with the base branch, hand the PR back to the Super Agent to resolve the conflict (check out the branch, merge the base, push) so it can then merge."),auto_assign_report_tasks_to_super_agent:O$.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.")}),Ow=O$.object({id:O$.string().describe("Brand context ID"),name:O$.string().describe("Company name"),domain:O$.string().describe("Company domain (e.g. example.com)"),overview:O$.string().describe("Company overview / description"),logo:O$.string().nullable().optional().describe("Logo URL"),favicon:O$.string().nullable().optional().describe("Favicon URL"),ogImage:O$.string().nullable().optional().describe("OG image URL"),fonts:O$.object({heading:O$.string().optional().describe("Font family for headings"),body:O$.string().optional().describe("Font family for body text"),code:O$.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:O$.object({primary:O$.string().optional().describe("Primary brand color (hex)"),secondary:O$.string().optional().describe("Secondary brand color (hex)"),accent:O$.string().optional().describe("Accent / highlight color (hex)"),background:O$.string().optional().describe("Background color (hex)"),foreground:O$.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:O$.array(O$.record(O$.string(),O$.unknown())).nullable().optional().describe("Brand images"),metadata:O$.record(O$.string(),O$.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:O$.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:O$.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as eH}from"zod";var Ju0;var No1=B(()=>{v0();qG();Ju0=m({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:eH.object({}),outputSchema:eH.object({organizationId:eH.string(),sidebar_items:eH.array(lm).nullable().optional(),enabled_plugins:eH.array(eH.string()).nullable().optional(),registry_config:dm.nullable().optional(),simple_mode:mm.nullable().optional(),default_home_agents:nm.nullable().optional(),flags:pm.nullable().optional(),main_agent_id:eH.string().nullable().optional(),createdAt:eH.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:eH.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.organizationSettings.get(X);if(!Q)return{organizationId:X};return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as LQ}from"zod";var Wu0;var Fo1=B(()=>{v0();qG();Wu0=m({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:LQ.object({organizationId:LQ.string(),sidebar_items:LQ.array(lm).optional(),enabled_plugins:LQ.array(LQ.string()).optional(),registry_config:dm.optional(),simple_mode:mm.optional(),default_home_agents:nm.optional(),flags:pm.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value."),main_agent_id:LQ.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear.")}),outputSchema:LQ.object({organizationId:LQ.string(),sidebar_items:LQ.array(lm).nullable().optional(),enabled_plugins:LQ.array(LQ.string()).nullable().optional(),registry_config:dm.nullable().optional(),simple_mode:mm.nullable().optional(),default_home_agents:nm.nullable().optional(),flags:pm.nullable().optional(),main_agent_id:LQ.string().nullable().optional(),createdAt:LQ.string().datetime().describe("ISO 8601 timestamp"),updatedAt:LQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(Z0(Z),await Z.access.check(),o(Z).id!==$.organizationId)throw Error("Cannot update settings for a different organization");let Q=await Z.storage.organizationSettings.upsert($.organizationId,{sidebar_items:$.sidebar_items,enabled_plugins:$.enabled_plugins,registry_config:$.registry_config,simple_mode:$.simple_mode,default_home_agents:$.default_home_agents,flags:$.flags,main_agent_id:$.main_agent_id});return{...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as G3}from"zod";var Uo1,Ku0,Hu0;var wo1=B(()=>{v0();qG();Uo1=Ow.extend({organizationId:G3.string(),archivedAt:G3.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:G3.string().describe("ISO 8601 timestamp"),updatedAt:G3.string().describe("ISO 8601 timestamp")}),Ku0=m({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:G3.object({includeArchived:G3.boolean().optional().describe("Include archived brands in the list")}),outputSchema:G3.object({items:G3.array(Uo1)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(X,{includeArchived:$.includeArchived})).map((Y)=>({...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}))}}}),Hu0=m({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:G3.object({id:G3.string().describe("Brand context ID")}),outputSchema:Uo1.extend({organizationId:G3.string()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.brandContext.get($.id,X);if(!Q)throw Error("Brand context not found");return{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}})});import{z as zL}from"zod";var Oo1,Nu0,Fu0,Uu0;var Bo1=B(()=>{v0();qG();Oo1=Ow.extend({organizationId:zL.string(),createdAt:zL.string().describe("ISO 8601 timestamp"),updatedAt:zL.string().describe("ISO 8601 timestamp")}),Nu0=m({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:Ow.omit({id:!0}),outputSchema:Oo1,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.brandContext.create(X,{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{...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}),Fu0=m({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:Ow.partial().required({id:!0}),outputSchema:Oo1,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");let{id:Y,...G}=$;if(G.isDefault===!0)await Z.storage.brandContext.setDefault(Y,X);let J=await Z.storage.brandContext.update(Y,X,{name:G.name,domain:G.domain,overview:G.overview,logo:G.logo!==void 0?G.logo??null:void 0,favicon:G.favicon!==void 0?G.favicon??null:void 0,ogImage:G.ogImage!==void 0?G.ogImage??null:void 0,fonts:G.fonts!==void 0?G.fonts??null:void 0,colors:G.colors!==void 0?G.colors??null:void 0,images:G.images!==void 0?G.images??null:void 0,metadata:G.metadata!==void 0?G.metadata??null:void 0,archivedAt:G.archivedAt!==void 0?G.archivedAt??null:void 0,isDefault:G.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),Uu0=m({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:zL.object({id:zL.string().describe("Brand context ID")}),outputSchema:zL.object({success:zL.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,X))throw Error("Brand context not found");return await Z.storage.brandContext.update($.id,X,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function J50($,Z,X){let Q=$.trim();if(!Q.startsWith("http"))Q=`https://${Q}`;let Y=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify({url:Q,formats:["branding"]})});if(!Y.ok){let U=await Y.text().catch(()=>"");throw Error(`Firecrawl API error: ${Y.status} ${U.slice(0,200)}`)}let G=await Y.json();if(!G.success||!G.data?.branding)return null;let J=G.data.branding,W=G.data.metadata??{},K=en8(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((U)=>U.trim()).filter(Boolean)?.slice().sort((U,w)=>U.length-w.length)[0]??W.ogSiteName??X??$,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 en8($,Z){let X=$.images??{},Q=$.colors??{},Y={};for(let[N,F]of Object.entries(Q))if(typeof F==="string"&&F&&an8.has(N))Y[N]=F;let G={},W=($.typography??{}).fontFamilies??{};for(let[N,F]of Object.entries(W))if(typeof F==="string"&&F){let U=sn8[N.toLowerCase()];if(U&&!G[U])G[U]=F}let K=$.fonts;if(Array.isArray(K))for(let N of K){let F=N.family;if(typeof F==="string"&&F&&!G.body)G.body=F}let H={};for(let N of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[N]!==void 0)H[N]=$[N];return{logo:X.logo??null,favicon:X.favicon??null,ogImage:X.ogImage??Z.ogImage??null,fonts:Object.keys(G).length>0?G:null,colors:Object.keys(Y).length>0?Y:null,metadata:H}}var an8,sn8;var wu0=B(()=>{an8=new Set(["primary","secondary","accent","background","foreground"]),sn8={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as W50}from"zod";var $p8,Ou0;var Do1=B(()=>{v0();wu0();qG();$p8=Ow.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:W50.boolean()}),Ou0=m({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:W50.object({domain:W50.string().describe("Website domain to extract brand from"),brandId:W50.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:$p8,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)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=Z.firecrawlApiKey;if(!Q)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Y=await J50($.domain,Q,$.domain);if(!Y)throw Error("Firecrawl did not return branding data for this URL");let G={name:Y.name,domain:Y.domain,overview:Y.overview,logo:Y.logo,favicon:Y.favicon,ogImage:Y.ogImage,fonts:Y.fonts,colors:Y.colors,images:Y.images,metadata:Y.metadata},J=$.brandId?await(async()=>{if(!await Z.storage.brandContext.get($.brandId,X))throw Error("Brand context not found");return Z.storage.brandContext.update($.brandId,X,G)})():await Z.storage.brandContext.create(X,G);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function Lo1($){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 X=Object.fromEntries(Object.entries(Z).filter(([Q])=>Q!=="tagline"&&Q!=="tone"));return Object.keys(X).length>0?X:void 0})()}}var Bu0,Du0;var Eo1=B(()=>{zh0();v0();Bu0=m({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:h60,outputSchema:km,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=$.id?await Z.storage.brandContext.get($.id,X):await Z.storage.brandContext.getDefault(X);if(!Q)throw Error($.id?"Brand not found":"No default brand configured");return Lo1(Q)}}),Du0=m({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:u60,outputSchema:c60,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(X)).map(Lo1)}}})});import{resolveTxt as Zp8}from"dns/promises";function Lu0($){return`${Xp8}.${$.toLowerCase()}`}function jo1(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function zo1($,Z,X=Zp8){if(!Z)return!1;try{return(await X(Lu0($))).some((Y)=>Y.join("").trim()===Z)}catch{return!1}}var Xp8="_deco-verify";var Po1=()=>{};import{z as z5}from"zod";function Bw($){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?Lu0($.domain):null,recordValue:Z?$.verificationToken:null}}function Yp8($){let Z=$.toLowerCase().trim();if(!Qp8.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(J3.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var Qp8,Eu0,K50,ju0,zu0,Pu0,Au0,Tu0;var Ao1=B(()=>{MG();Po1();v0();Qp8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,Eu0=z5.enum(["off","auto","request"]),K50=z5.object({id:z5.string(),domain:z5.string(),joinMode:Eu0,verificationStatus:z5.enum(["pending","verified"]),verificationMethod:z5.enum(["email","dns"]).nullable(),verifiedAt:z5.string().nullable(),recordName:z5.string().nullable(),recordValue:z5.string().nullable()});ju0=m({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:z5.object({}),outputSchema:z5.object({domains:z5.array(K50)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(X.id)).map(Bw)}}}),zu0=m({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:z5.object({domain:z5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:Eu0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:K50,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=Yp8($.domain),G=Z.auth.user?.email?.split("@")[1]?.toLowerCase(),J=Boolean(Z.auth.user?.emailVerified)&&G===Q,W=await Z.storage.organizationDomains.getByOrgAndDomain(X.id,Q);if(W){if(W.verificationStatus!=="verified"&&J){let H=await Z.storage.organizationDomains.markVerified(W.id,"email");return Bw(H)}return Bw(W)}let K=J?await Z.storage.organizationDomains.add(X.id,Q,{joinMode:$.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await Z.storage.organizationDomains.add(X.id,Q,{joinMode:"off",verificationStatus:"pending",verificationToken:jo1()});return Bw(K)}}),Pu0=m({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:z5.object({id:z5.string(),joinMode:Eu0}),outputSchema:K50,handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if($.joinMode!=="off"&&Q.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Y=await Z.storage.organizationDomains.updateJoinMode($.id,$.joinMode);return Bw(Y)}}),Au0=m({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:z5.object({id:z5.string()}),outputSchema:z5.object({verified:z5.boolean(),domain:K50}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");if(Q.verificationStatus==="verified")return{verified:!0,domain:Bw(Q)};if(!Q.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await zo1(Q.domain,Q.verificationToken))return{verified:!1,domain:Bw(Q)};let G=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:Bw(G)}}}),Tu0=m({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:z5.object({id:z5.string()}),outputSchema:z5.object({success:z5.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationDomains.getById($.id);if(!Q||Q.organizationId!==X.id)throw Error("Domain not found");return await Z.storage.organizationDomains.removeById($.id),{success:!0}}})});function Dw($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as H9}from"zod";var Gp8,Ru0,Iu0,qu0;var To1=B(()=>{v0();x4();Gp8=H9.object({id:H9.string(),userId:H9.string(),status:H9.enum(["pending","approved","denied"]),createdAt:H9.string(),user:H9.object({id:H9.string(),name:H9.string(),email:H9.string(),image:H9.string().nullable()}).nullable()}),Ru0=m({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:H9.object({}),outputSchema:H9.object({requests:H9.array(Gp8)}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z);return{requests:(await Z.storage.organizationJoinRequests.listPendingWithUser(X.id)).map((Y)=>({id:Y.id,userId:Y.userId,status:Y.status,createdAt:new Date(Y.createdAt).toISOString(),user:Y.user}))}}}),Iu0=m({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:H9.object({requestId:H9.string()}),outputSchema:H9.object({success:H9.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=W1(Z);if(!await Z.storage.organizationJoinRequests.decide(Q.id,"approved",Y??Q.userId))return{success:!0};try{await Z.boundAuth.organization.addMember({organizationId:X.id,userId:Q.userId,role:["user"]})}catch(J){if(!Dw(J))throw J}if(Y)y1.capture({distinctId:Y,event:"organization_join_request_approved",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}}),qu0=m({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:H9.object({requestId:H9.string()}),outputSchema:H9.object({success:H9.boolean()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=await Z.storage.organizationJoinRequests.getById($.requestId);if(!Q||Q.organizationId!==X.id)throw Error("Join request not found");if(Q.status!=="pending")throw Error("Join request has already been decided");let Y=W1(Z);if(await Z.storage.organizationJoinRequests.decide(Q.id,"denied",Y??Q.userId)&&Y)y1.capture({distinctId:Y,event:"organization_join_request_denied",groups:{organization:X.id},properties:{organization_id:X.id,user_id:Q.userId}});return{success:!0}}})});import{z as EQ}from"zod";var Mu0;var Ro1=B(()=>{x4();v0();DG();Mu0=m({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:EQ.object({organizationId:EQ.string().optional(),userId:EQ.string(),role:EQ.array(EQ.string())}),outputSchema:EQ.object({id:EQ.string(),organizationId:EQ.string(),userId:EQ.string(),role:EQ.union([EQ.string(),EQ.array(EQ.string())]),createdAt:EQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",W1(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!B40(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.addMember({organizationId:X,userId:$.userId,role:$.role});if(!Y)throw Error("Failed to add member");let G=W1(Z);if(G)y1.capture({distinctId:G,event:"organization_member_added",groups:{organization:X},properties:{organization_id:X,added_user_id:$.userId,role:$.role}});return{...Y,role:Y.role,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as ib}from"zod";var ku0;var Io1=B(()=>{x4();v0();ku0=m({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:ib.object({organizationId:ib.string().optional(),memberIdOrEmail:ib.string()}),outputSchema:ib.object({success:ib.boolean(),memberIdOrEmail:ib.string()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");if(X!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q=await Z.boundAuth.organization.removeMember({organizationId:X,memberIdOrEmail:$.memberIdOrEmail});Z.invalidateMemberRole?.(Q.member.userId,X);let Y=W1(Z);if(Y)y1.capture({distinctId:Y,event:"organization_member_removed",groups:{organization:X},properties:{organization_id:X,member_id_or_email:$.memberIdOrEmail}});return{success:!0,memberIdOrEmail:$.memberIdOrEmail}}})});import{z as l7}from"zod";var Su0;var qo1=B(()=>{v0();Su0=m({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:l7.object({limit:l7.number().optional(),offset:l7.number().optional()}),outputSchema:l7.object({members:l7.array(l7.object({id:l7.string(),organizationId:l7.string(),userId:l7.string(),role:l7.string(),createdAt:l7.string().datetime().describe("ISO 8601 timestamp"),user:l7.object({id:l7.string(),name:l7.string(),email:l7.string(),image:l7.string().optional()}).optional()}))}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.boundAuth.organization.listMembers({organizationId:X,limit:$.limit,offset:$.offset});return{members:(Array.isArray(Q)?Q:[]).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});import{z as MZ}from"zod";var Vu0;var Mo1=B(()=>{x4();v0();DG();Vu0=m({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:MZ.object({organizationId:MZ.string().optional(),memberId:MZ.string(),role:MZ.array(MZ.string())}),outputSchema:MZ.object({id:MZ.string(),organizationId:MZ.string(),userId:MZ.string(),role:MZ.union([MZ.string(),MZ.array(MZ.string())]),createdAt:MZ.string().datetime().describe("ISO 8601 timestamp"),user:MZ.object({email:MZ.string(),name:MZ.string(),image:MZ.string().optional()})}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=$.organizationId||Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.db.selectFrom("member").select(["role"]).where("userId","=",W1(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!B40(Q?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.updateMemberRole({organizationId:X,memberId:$.memberId,role:$.role});if(!Y)throw Error("Failed to update member role");Z.invalidateMemberRole?.(Y.userId,X);let G=W1(Z);if(G)y1.capture({distinctId:G,event:"organization_member_role_updated",groups:{organization:X},properties:{organization_id:X,member_id:$.memberId,target_user_id:Y.userId,new_role:Array.isArray($.role)?$.role.join(","):$.role}});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});async function ko1(){if(tm&&Date.now()-tm.fetchedAt<600000)return tm.rate;try{let Z=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),X=parseFloat(Z.USDBRL?.bid??"");if(Number.isNaN(X)||X<=0)throw Error("Invalid rate");return tm={rate:X,fetchedAt:Date.now()},X}catch{return tm?.rate??5.5}}function So1($,Z,X){if(Z==="brl")return Math.round($/X);return $}var tm=null;function Cu0($,Z="",X=new URLSearchParams){for(let[Q,Y]of Object.entries($)){if(Y===void 0||Y===null)continue;let G=Z?`${Z}[${Q}]`:Q;if(Array.isArray(Y))Y.forEach((J,W)=>{if(typeof J==="object"&&J!==null)Cu0(J,`${G}[${W}]`,X);else X.append(`${G}[${W}]`,String(J))});else if(typeof Y==="object")Cu0(Y,G,X);else X.append(G,String(Y))}return X}async function H50($,Z){let X=y0().stripeSecretKey;if(!X)throw new W3(503,"billing is not configured");let Q=Z?.params?Cu0(Z.params).toString():void 0,Y=await fetch(`${Jp8}${$}`,{method:Z?.method??(Q?"POST":"GET"),headers:{Authorization:`Bearer ${X}`,...Q&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Q,signal:AbortSignal.timeout(Wp8)}),G=await Y.json().catch(()=>({}));if(!Y.ok){let J=G.error?.message??`HTTP ${Y.status}`;throw new W3(Y.status,J)}return G}function Vo1($){return{billing_address_collection:"required",tax_id_collection:{enabled:!0},...$&&{customer_update:{address:"auto",name:"auto"}}}}async function Co1($){let Z=y0().stripeOrgPriceId;if(!Z)throw new W3(503,"billing is not configured");let X=await H50("/checkout/sessions",{params:{mode:"subscription",...Vo1(null),line_items:[{price:Z,quantity:1}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:{orgId:$.organizationId},subscription_data:{metadata:{orgId:$.organizationId}}}});if(!X.url)throw new W3(500,"checkout session lacks url");return{url:X.url}}function Kp8($,Z){return Math.round($*(1+Z/100))}async function _o1($){let Z=Kp8($.amountCents,$.feePercent),X=So1($.amountCents,$.currency,await ko1()),Q=y0().stripeTopupProductId,Y={kind:"topup",orgId:$.organizationId,creditCents:X},G=$.currency==="brl"?`Studio AI credits (R$ ${($.amountCents/100).toFixed(2)})`:`Studio AI credits ($${($.amountCents/100).toFixed(2)})`,J=await H50("/checkout/sessions",{params:{mode:"payment",...$.customerId&&{customer:$.customerId},...Vo1($.customerId),line_items:[{quantity:1,price_data:{currency:$.currency,unit_amount:Z,...Q?{product:Q}:{product_data:{name:G}}}}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:Y,payment_intent_data:{metadata:Y}}});if(!J.url)throw new W3(500,"checkout session lacks url");return{url:J.url}}async function vo1($){let Z=await H50("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new W3(500,"portal session lacks url");return{url:Z.url}}async function fo1($){await H50(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}var Jp8="https://api.stripe.com/v1",W3,Wp8=15000;var om=B(()=>{M$();W3=class W3 extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});import{z as _u0}from"zod";var vu0;var bo1=B(()=>{om();PZ();v0();x4();vu0=m({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:_u0.object({}),outputSchema:_u0.object({url:_u0.string()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id,Q=Z.organization?.slug;if(!X||!Q)throw Error("Organization context required");let Y=await Z.storage.organizationBilling.getBilling(X);if(Y?.status==="active")throw Error("This organization already has an active subscription.");if(Y?.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let G=`${GQ()}/${encodeURIComponent(Q)}/members`,{url:J}=await Co1({organizationId:X,successUrl:`${G}?checkout=success`,cancelUrl:`${G}?checkout=canceled`});return aJ({event:"subscription_checkout_started",organizationId:X,...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:J}}})});import{z as fu0}from"zod";var bu0;var xo1=B(()=>{om();PZ();v0();bu0=m({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:fu0.object({}),outputSchema:fu0.object({url:fu0.string()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z);if(!X.slug)throw Error("Organization context required");let Q=await Z.storage.organizationBilling.getBilling(X.id);if(!Q?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");try{return await vo1({customerId:Q.stripeCustomerId,returnUrl:`${GQ()}/${encodeURIComponent(X.slug)}/members`})}catch(Y){if(Y instanceof W3)throw Error(Y.message);throw Y}}})});function yo1($){return xu0[$%xu0.length]??Hp8}function jQ($){return $.createdBy==="system"}function rm($,Z){return $?.startsWith(`${nb[Z]}:`)??!1}function PL($){let Z=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function Np8($,Z){let X=PL($),Q=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<X)continue;let G=Y.data??{};if(G.reviewer!=="qa"&&G.reviewer!=="code_review")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&G.verified!==!0)continue;Q.set(G.reviewer,"approved")}else Q.set(G.reviewer,"changes_requested")}return Q}function Lw($,Z,X){if(Z.length===0)return!1;let Q=Np8($,X);return Z.every((Y)=>Q.get(Y)==="approved")}function go1($,Z){return Lw($,Z)&&!Lw($,Z,{verifiedOnly:!0})}function ho1($,Z=yu0){return $.filter((Q)=>Q.action==="review_changes_requested").length+1>=Z}var L4="super-agent",xu0,Hp8,kG,nb,$N,yu0=5,uo1="task-board.item.updated",co1="task-board.item.deleted";var kZ=B(()=>{xu0=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],Hp8=xu0[0];kG=["qa","code_review"],nb={qa:"QA Agent",code_review:"Code Reviewer"},$N={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function gu0($){return $==="trial"?"trial":"subscription"}function am($,Z,X,Q={}){aJ({event:Z,organizationId:X.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:X.id,...Q}})}function hu0($){return $?.status==="active"||$?.status==="past_due"}function N50($,Z){if(hu0($))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 sm(){let $=y0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function pb(){return{...sm(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function F50($,Z,X=sm()){if(!X.enforced||!jQ(Z))return;let Q=await $.storage.organizationBilling.taskClaim(Z.id);if(Q&&Q.runCount>=X.maxRunsPerTask)throw am($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new zQ("runs_exhausted");if(Q&&Q.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),G=N50(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,G.periodKey)>=G.limit)throw am($,"task_quota_blocked",Z,{phase:"precheck",reason:G.exhaustedReason,billing_mode:gu0(G.periodKey),limit:G.limit}),new zQ(G.exhaustedReason)}async function lo1($,Z,X=sm()){if(!X.enforced||!jQ(Z))return"skipped";let Q=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=N50(Q,X),G=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(G==="exhausted")throw am($,"task_quota_blocked",Z,{phase:"claim",reason:Y.exhaustedReason,billing_mode:gu0(Y.periodKey),limit:Y.limit}),new zQ(Y.exhaustedReason);if(G==="runs_exhausted")throw am($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new zQ("runs_exhausted");if(G==="claimed")am($,"task_quota_claimed",Z,{billing_mode:gu0(Y.periodKey),period_key:Y.periodKey,limit:Y.limit});return G}async function do1($,Z,X,Q){if(Q==="skipped")return;await $.rollbackTaskClaim(Z,X,{releaseSlot:Q==="claimed"}).catch((Y)=>console.error("[task-quota] rollback failed (stays charged)",Y))}async function mo1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function io1($,Z,X){if(await $.releaseTaskClaim(Z,X).catch((Y)=>{return console.error("[task-quota] refund failed (stays charged)",Y),!1}))aJ({event:"task_quota_refunded",organizationId:Z,properties:{task_id:X}})}var Fp8="[SUBSCRIPTION_REQUIRED]",Up8,zQ;var K3=B(()=>{kZ();x4();M$();Up8={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"};zQ=class zQ extends Error{reason;constructor($){super(`${Fp8} ${Up8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as ZN}from"zod";var uu0;var no1=B(()=>{v0();K3();uu0=m({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:ZN.object({}),outputSchema:ZN.object({enforced:ZN.boolean(),billingStatus:ZN.string(),subscribed:ZN.boolean(),hasBillingAccount:ZN.boolean(),used:ZN.number(),limit:ZN.number(),currentPeriodEnd:ZN.string().datetime().nullable()}),handler:async($,Z)=>{Z0(Z),await Z.access.check();let X=o(Z),Q=sm(),Y=await Z.storage.organizationBilling.getBilling(X.id),G=N50(Y,Q),J=await Z.storage.organizationBilling.countTaskClaims(X.id,G.periodKey);return{enforced:Q.enforced,billingStatus:Y?.status??"none",subscribed:hu0(Y),hasBillingAccount:!!Y?.stripeCustomerId,used:J,limit:G.limit,currentPeriodEnd:Y?.currentPeriodEnd?.toISOString()??null}}})});var po1=B(()=>{Yo1();Go1();Jo1();Wo1();Ko1();No1();Fo1();wo1();Bo1();Do1();Eo1();Ao1();To1();Ro1();Io1();qo1();Mo1();bo1();xo1();no1()});function iW($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function U50($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(U50);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||U50(X)));return!1}function cu0($){return Array.isArray($)&&$.every(U50)}function em($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||U50(X)))}var Ar1="vercel.ai.error",Op8,to1,oo1,G1,Tr1="AI_APICallError",Rr1,Bp8,ro1,ao1,s8,Ir1="AI_EmptyResponseBodyError",qr1,Dp8,so1,eo1,w50,Mr1="AI_InvalidArgumentError",kr1,Lp8,$r1,Zr1,Ew,Sr1="AI_InvalidPromptError",Vr1,Ep8,Xr1,Qr1,SG,Cr1="AI_InvalidResponseDataError",_r1,jp8,Yr1,Gr1,tb,vr1="AI_JSONParseError",fr1,zp8,Jr1,Wr1,XN,br1="AI_LoadAPIKeyError",xr1,Pp8,Kr1,Hr1,AL,yr1="AI_LoadSettingError",gr1,Ap8,Nr1,Fr1,hr1,ur1="AI_NoContentGeneratedError",cr1,Tp8,Ur1,wr1,lr1,dr1="AI_NoSuchModelError",mr1,Rp8,Or1,Br1,C5,ir1="AI_TooManyEmbeddingValuesForCallError",nr1,Ip8,Dr1,Lr1,ob,pr1="AI_TypeValidationError",tr1,qp8,Er1,jr1,K5,or1="AI_UnsupportedFunctionalityError",rr1,Mp8,zr1,Pr1,q4;var r1=B(()=>{Op8=Symbol.for(Ar1),G1=class $ extends(oo1=Error,to1=Op8,oo1){constructor({name:Z,message:X,cause:Q}){super(X);this[to1]=!0,this.name=Z,this.cause=Q}static isInstance(Z){return $.hasMarker(Z,Ar1)}static hasMarker(Z,X){let Q=Symbol.for(X);return Z!=null&&typeof Z==="object"&&Q in Z&&typeof Z[Q]==="boolean"&&Z[Q]===!0}},Rr1=`vercel.ai.error.${Tr1}`,Bp8=Symbol.for(Rr1),s8=class extends(ao1=G1,ro1=Bp8,ao1){constructor({message:$,url:Z,requestBodyValues:X,statusCode:Q,responseHeaders:Y,responseBody:G,cause:J,isRetryable:W=Q!=null&&(Q===408||Q===409||Q===429||Q>=500),data:K}){super({name:Tr1,message:$,cause:J});this[ro1]=!0,this.url=Z,this.requestBodyValues=X,this.statusCode=Q,this.responseHeaders=Y,this.responseBody=G,this.isRetryable=W,this.data=K}static isInstance($){return G1.hasMarker($,Rr1)}},qr1=`vercel.ai.error.${Ir1}`,Dp8=Symbol.for(qr1),w50=class extends(eo1=G1,so1=Dp8,eo1){constructor({message:$="Empty response body"}={}){super({name:Ir1,message:$});this[so1]=!0}static isInstance($){return G1.hasMarker($,qr1)}};kr1=`vercel.ai.error.${Mr1}`,Lp8=Symbol.for(kr1),Ew=class extends(Zr1=G1,$r1=Lp8,Zr1){constructor({message:$,cause:Z,argument:X}){super({name:Mr1,message:$,cause:Z});this[$r1]=!0,this.argument=X}static isInstance($){return G1.hasMarker($,kr1)}},Vr1=`vercel.ai.error.${Sr1}`,Ep8=Symbol.for(Vr1),SG=class extends(Qr1=G1,Xr1=Ep8,Qr1){constructor({prompt:$,message:Z,cause:X}){super({name:Sr1,message:`Invalid prompt: ${Z}`,cause:X});this[Xr1]=!0,this.prompt=$}static isInstance($){return G1.hasMarker($,Vr1)}},_r1=`vercel.ai.error.${Cr1}`,jp8=Symbol.for(_r1),tb=class extends(Gr1=G1,Yr1=jp8,Gr1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:Cr1,message:Z});this[Yr1]=!0,this.data=$}static isInstance($){return G1.hasMarker($,_r1)}},fr1=`vercel.ai.error.${vr1}`,zp8=Symbol.for(fr1),XN=class extends(Wr1=G1,Jr1=zp8,Wr1){constructor({text:$,cause:Z}){super({name:vr1,message:`JSON parsing failed: Text: ${$}.
950
950
  Error message: ${iW(Z)}`,cause:Z});this[Jr1]=!0,this.text=$}static isInstance($){return G1.hasMarker($,fr1)}},xr1=`vercel.ai.error.${br1}`,Pp8=Symbol.for(xr1),AL=class extends(Hr1=G1,Kr1=Pp8,Hr1){constructor({message:$}){super({name:br1,message:$});this[Kr1]=!0}static isInstance($){return G1.hasMarker($,xr1)}},gr1=`vercel.ai.error.${yr1}`,Ap8=Symbol.for(gr1),hr1=class extends(Fr1=G1,Nr1=Ap8,Fr1){constructor({message:$}){super({name:yr1,message:$});this[Nr1]=!0}static isInstance($){return G1.hasMarker($,gr1)}},cr1=`vercel.ai.error.${ur1}`,Tp8=Symbol.for(cr1),lr1=class extends(wr1=G1,Ur1=Tp8,wr1){constructor({message:$="No content generated."}={}){super({name:ur1,message:$});this[Ur1]=!0}static isInstance($){return G1.hasMarker($,cr1)}},mr1=`vercel.ai.error.${dr1}`,Rp8=Symbol.for(mr1),C5=class extends(Br1=G1,Or1=Rp8,Br1){constructor({errorName:$=dr1,modelId:Z,modelType:X,message:Q=`No such ${X}: ${Z}`}){super({name:$,message:Q});this[Or1]=!0,this.modelId=Z,this.modelType=X}static isInstance($){return G1.hasMarker($,mr1)}},nr1=`vercel.ai.error.${ir1}`,Ip8=Symbol.for(nr1),ob=class extends(Lr1=G1,Dr1=Ip8,Lr1){constructor($){super({name:ir1,message:`Too many values for a single embedding call. The ${$.provider} model "${$.modelId}" can only embed up to ${$.maxEmbeddingsPerCall} values per call, but ${$.values.length} values were provided.`});this[Dr1]=!0,this.provider=$.provider,this.modelId=$.modelId,this.maxEmbeddingsPerCall=$.maxEmbeddingsPerCall,this.values=$.values}static isInstance($){return G1.hasMarker($,nr1)}},tr1=`vercel.ai.error.${pr1}`,qp8=Symbol.for(tr1),K5=class $ extends(jr1=G1,Er1=qp8,jr1){constructor({value:Z,cause:X,context:Q}){let Y="Type validation failed";if(Q==null?void 0:Q.field)Y+=` for ${Q.field}`;if((Q==null?void 0:Q.entityName)||(Q==null?void 0:Q.entityId)){Y+=" (";let G=[];if(Q.entityName)G.push(Q.entityName);if(Q.entityId)G.push(`id: "${Q.entityId}"`);Y+=G.join(", "),Y+=")"}super({name:pr1,message:`${Y}: Value: ${JSON.stringify(Z)}.
951
951
  Error message: ${iW(X)}`,cause:X});this[Er1]=!0,this.value=Z,this.context=Q}static isInstance(Z){return G1.hasMarker(Z,tr1)}static wrap({value:Z,cause:X,context:Q}){var Y,G,J;if($.isInstance(X)&&X.value===Z&&((Y=X.context)==null?void 0:Y.field)===(Q==null?void 0:Q.field)&&((G=X.context)==null?void 0:G.entityName)===(Q==null?void 0:Q.entityName)&&((J=X.context)==null?void 0:J.entityId)===(Q==null?void 0:Q.entityId))return X;return new $({value:Z,cause:X,context:Q})}},rr1=`vercel.ai.error.${or1}`,Mp8=Symbol.for(rr1),q4=class extends(Pr1=G1,zr1=Mp8,Pr1){constructor({functionality:$,message:Z=`'${$}' functionality not supported.`}){super({name:or1,message:Z});this[zr1]=!0,this.functionality=$}static isInstance($){return G1.hasMarker($,rr1)}}});import*as L50 from"zod/v4";import{ZodFirstPartyTypeKind as W4}from"zod/v3";import{ZodFirstPartyTypeKind as ip8}from"zod/v3";import{ZodFirstPartyTypeKind as O50}from"zod/v3";function n$(...$){return $.reduce((Z,X)=>({...Z,...X!=null?X:{}}),{})}function B50({tools:$=[],providerToolNames:Z,resolveProviderToolName:X}){var Q;let Y={},G={};for(let J of $)if(J.type==="provider"){let W=(Q=X==null?void 0:X(J))!=null?Q:(J.id in Z)?Z[J.id]:void 0;if(W==null)continue;Y[J.name]=W,G[W]=J.name}return{toProviderToolName:(J)=>{var W;return(W=Y[J])!=null?W:J},toCustomToolName:(J)=>{var W;return(W=G[J])!=null?W:J}}}async function AQ($,Z){if($==null)return Promise.resolve();let X=Z==null?void 0:Z.abortSignal;return new Promise((Q,Y)=>{if(X==null?void 0:X.aborted){Y(ar1());return}let G=setTimeout(()=>{J(),Q()},$),J=()=>{clearTimeout(G),X==null||X.removeEventListener("abort",W)},W=()=>{J(),Y(ar1())};X==null||X.addEventListener("abort",W)})}function ar1(){return new DOMException("Delay was aborted","AbortError")}function rb($){return Object.fromEntries([...$.headers])}function N9($){let Z=$.replace(/-/g,"+").replace(/_/g,"/"),X=Sp8(Z);return Uint8Array.from(X,(Q)=>Q.codePointAt(0))}function RQ($){let Z="";for(let X=0;X<$.length;X++)Z+=String.fromCodePoint($[X]);return kp8(Z)}function a9($){return $ instanceof Uint8Array?RQ($):$}function Qa1($,Z={}){let{useArrayBrackets:X=!0}=Z,Q=new FormData;for(let[Y,G]of Object.entries($)){if(G==null)continue;if(Array.isArray(G)){if(G.length===1){Q.append(Y,G[0]);continue}let J=X?`${Y}[]`:Y;for(let W of G)Q.append(J,W);continue}Q.append(Y,G)}return Q}async function $i($){var Z;try{await((Z=$.body)==null?void 0:Z.cancel())}catch(X){}}function Cp8($=globalThis){return $.window!=null}function _p8($){let Z;try{Z=new URL($)}catch(Q){throw new r9({url:$,message:`Invalid URL: ${$}`})}if(Z.protocol==="data:")return;if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw new r9({url:$,message:`URL scheme must be http, https, or data, got ${Z.protocol}`});let X=Z.hostname.toLowerCase().replace(/\.+$/,"");if(!X)throw new r9({url:$,message:"URL must have a hostname"});if(X==="localhost"||X.endsWith(".local")||X.endsWith(".localhost"))throw new r9({url:$,message:`URL with hostname ${X} is not allowed`});if(X.startsWith("[")&&X.endsWith("]")){let Q=X.slice(1,-1);if(fp8(Q))throw new r9({url:$,message:`URL with IPv6 address ${X} is not allowed`});return}if(Ja1(X)){if(Wa1(X))throw new r9({url:$,message:`URL with IP address ${X} is not allowed`});return}}function Ja1($){let Z=$.split(".");if(Z.length!==4)return!1;return Z.every((X)=>{let Q=Number(X);return Number.isInteger(Q)&&Q>=0&&Q<=255&&String(Q)===X})}function Wa1($){let Z=$.split(".").map(Number),[X,Q,Y]=Z;if(X===0)return!0;if(X===10)return!0;if(X===100&&Q>=64&&Q<=127)return!0;if(X===127)return!0;if(X===169&&Q===254)return!0;if(X===172&&Q>=16&&Q<=31)return!0;if(X===192&&Q===0&&Y===0)return!0;if(X===192&&Q===168)return!0;if(X===198&&(Q===18||Q===19))return!0;if(X>=240)return!0;return!1}function vp8($){let Z=$.toLowerCase(),X=Z.indexOf("%");if(X!==-1)Z=Z.slice(0,X);let Q=Z.split("::");if(Q.length>2)return null;let Y=(J)=>{if(J==="")return[];let W=[],K=J.split(":");for(let H=0;H<K.length;H++){let N=K[H];if(N.includes(".")){if(H!==K.length-1||!Ja1(N))return null;let[F,U,w,O]=N.split(".").map(Number);W.push(F<<8|U,w<<8|O);continue}if(!/^[0-9a-f]{1,4}$/.test(N))return null;W.push(parseInt(N,16))}return W},G=Y(Q[0]);if(G===null)return null;if(Q.length===2){let J=Y(Q[1]);if(J===null)return null;let W=8-G.length-J.length;if(W<0)return null;return[...G,...Array(W).fill(0),...J]}return G.length===8?G:null}function fp8($){let Z=vp8($);if(Z===null)return!0;let X=(Y)=>Z.slice(0,Y).every((G)=>G===0);if(X(7)&&(Z[7]===0||Z[7]===1))return!0;if((Z[0]&65024)===64512)return!0;if((Z[0]&65472)===65152)return!0;if((Z[0]&65472)===65216)return!0;if((Z[0]&65280)===65280)return!0;if(X(6)||X(5)&&Z[5]===65535||X(4)&&Z[4]===65535&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===0&&Z[3]===0&&Z[4]===0&&Z[5]===0||Z[0]===100&&Z[1]===65435&&Z[2]===1){let Y=Z[6]>>8&255,G=Z[6]&255,J=Z[7]>>8&255,W=Z[7]&255;return Wa1(`${Y}.${G}.${J}.${W}`)}return!1}async function nu0({url:$,headers:Z,abortSignal:X,maxRedirects:Q=bp8}){let Y={signal:X};if(Z!==void 0)Y.headers=Z;let G=$;for(let J=0;J<=Q;J++){_p8(G);let W=await fetch(G,{...Y,redirect:"manual"});if(W.type==="opaqueredirect"){if(!Cp8())throw new r9({url:$,message:`Redirect from ${G} could not be validated and was blocked`});return await fetch(G,{...Y,redirect:"follow"})}let K=W.headers.get("location");if(W.status>=300&&W.status<400&&K){await $i(W),G=new URL(K,G).toString();continue}return W}throw new r9({url:$,message:`Too many redirects (max ${Q})`})}async function pu0({response:$,url:Z,maxBytes:X=D50}){let Q=$.headers.get("content-length");if(Q!=null){let N=parseInt(Q,10);if(!isNaN(N)&&N>X)throw await $i($),new r9({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes (Content-Length: ${N}).`})}let Y=$.body;if(Y==null)return new Uint8Array(0);let G=Y.getReader(),J=[],W=0;try{while(!0){let{done:N,value:F}=await G.read();if(N)break;if(W+=F.length,W>X)throw new r9({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes.`});J.push(F)}}finally{try{await G.cancel()}finally{G.releaseLock()}}let K=new Uint8Array(W),H=0;for(let N of J)K.set(N,H),H+=N.length;return K}async function tu0($,Z){var X,Q;try{let Y=await nu0({url:$,abortSignal:Z==null?void 0:Z.abortSignal});if(!Y.ok)throw await $i(Y),new r9({url:$,statusCode:Y.status,statusText:Y.statusText});let G=await pu0({response:Y,url:$,maxBytes:(X=Z==null?void 0:Z.maxBytes)!=null?X:D50}),J=(Q=Y.headers.get("content-type"))!=null?Q:void 0;return new Blob([G],J?{type:J}:void 0)}catch(Y){if(r9.isInstance(Y))throw Y;throw new r9({url:$,cause:Y})}}function ab($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function PQ($){return($ instanceof Error||$ instanceof DOMException)&&($.name==="AbortError"||$.name==="ResponseAborted"||$.name==="TimeoutError")}function gp8($){if(!($ instanceof Error))return!1;let Z=$.code;if(typeof Z==="string"&&yp8.includes(Z))return!0;return!1}function Ka1({error:$,url:Z,requestBodyValues:X}){if(PQ($))return $;if($ instanceof TypeError&&xp8.includes($.message.toLowerCase())){let Q=$.cause;if(Q!=null)return new s8({message:`Cannot connect to API: ${Q.message}`,cause:Q,url:Z,requestBodyValues:X,isRetryable:!0})}if(gp8($))return new s8({message:`Cannot connect to API: ${$.message}`,cause:$,url:Z,requestBodyValues:X,isRetryable:!0});return $}function jw($=globalThis){var Z,X,Q;if($.window)return"runtime/browser";if((Z=$.navigator)==null?void 0:Z.userAgent)return`runtime/${$.navigator.userAgent.toLowerCase()}`;if((Q=(X=$.process)==null?void 0:X.versions)==null?void 0:Q.node)return`runtime/node.js/${$.process.version.substring(0)}`;if($.EdgeRuntime)return"runtime/vercel-edge";return"runtime/unknown"}function zw($){if($==null)return{};let Z={};if($ instanceof Headers)$.forEach((X,Q)=>{Z[Q.toLowerCase()]=X});else{if(!Array.isArray($))$=Object.entries($);for(let[X,Q]of $)if(Q!=null)Z[X.toLowerCase()]=Q}return Z}function m4($,...Z){let X=new Headers(zw($)),Q=X.get("user-agent")||"";return X.set("user-agent",[Q,...Z].filter(Boolean).join(" ")),Object.fromEntries(X.entries())}function RL($){return $!=null}function Na1($,Z){try{return new URL($).origin===new URL(Z).origin}catch(X){return!1}}function Fa1({mediaType:$,url:Z,supportedUrls:X}){return Z=Z.toLowerCase(),$=$.toLowerCase(),Object.entries(X).map(([Q,Y])=>{let G=Q.toLowerCase();return G==="*"||G==="*/*"?{mediaTypePrefix:"",regexes:Y}:{mediaTypePrefix:G.replace(/\*/,""),regexes:Y}}).filter(({mediaTypePrefix:Q})=>$.startsWith(Q)).flatMap(({regexes:Q})=>Q).some((Q)=>Q.test(Z))}function sb({apiKey:$,environmentVariableName:Z,apiKeyParameterName:X="apiKey",description:Q}){if(typeof $==="string")return $;if($!=null)throw new AL({message:`${Q} API key must be a string.`});if(typeof process>"u")throw new AL({message:`${Q} API key is missing. Pass it using the '${X}' parameter. Environment variables are not supported in this environment.`});if($=process.env[Z],$==null)throw new AL({message:`${Q} API key is missing. Pass it using the '${X}' parameter or the ${Z} environment variable.`});if(typeof $!=="string")throw new AL({message:`${Q} API key must be a string. The value of the ${Z} environment variable is not a string.`});return $}function nW({settingValue:$,environmentVariableName:Z}){if(typeof $==="string")return $;if($!=null||typeof process>"u")return;if($=process.env[Z],$==null||typeof $!=="string")return;return $}function Ua1($){var Z;let[X,Q=""]=$.toLowerCase().split("/");return(Z={mpeg:"mp3","x-wav":"wav",opus:"ogg",mp4:"m4a","x-m4a":"m4a"}[Q])!=null?Z:Q}function $a1($){let Z=JSON.parse($);if(Z===null||typeof Z!=="object")return Z;if(up8.test($)===!1&&cp8.test($)===!1)return Z;return lp8(Z)}function lp8($){let Z=[$];while(Z.length){let X=Z;Z=[];for(let Q of X){if(Object.prototype.hasOwnProperty.call(Q,"__proto__"))throw SyntaxError("Object contains forbidden prototype property");if(Object.prototype.hasOwnProperty.call(Q,"constructor")&&Q.constructor!==null&&typeof Q.constructor==="object"&&Object.prototype.hasOwnProperty.call(Q.constructor,"prototype"))throw SyntaxError("Object contains forbidden prototype property");for(let Y in Q){let G=Q[Y];if(G&&typeof G==="object")Z.push(G)}}}return $}function ou0($){let{stackTraceLimit:Z}=Error;try{Error.stackTraceLimit=0}catch(X){return $a1($)}try{return $a1($)}finally{Error.stackTraceLimit=Z}}function ru0($){if($.type==="object"||Array.isArray($.type)&&$.type.includes("object")){$.additionalProperties=!1;let{properties:X}=$;if(X!=null)for(let Q of Object.keys(X))X[Q]=TL(X[Q])}if($.items!=null)$.items=Array.isArray($.items)?$.items.map(TL):TL($.items);if($.anyOf!=null)$.anyOf=$.anyOf.map(TL);if($.allOf!=null)$.allOf=$.allOf.map(TL);if($.oneOf!=null)$.oneOf=$.oneOf.map(TL);let{definitions:Z}=$;if(Z!=null)for(let X of Object.keys(Z))Z[X]=TL(Z[X]);return $}function TL($){if(typeof $==="boolean")return $;return ru0($)}function AY(){return{}}function np8($,Z){var X,Q,Y;let G={type:"array"};if(((X=$.type)==null?void 0:X._def)&&((Y=(Q=$.type)==null?void 0:Q._def)==null?void 0:Y.typeName)!==ip8.ZodAny)G.items=w6($.type._def,{...Z,currentPath:[...Z.currentPath,"items"]});if($.minLength)G.minItems=$.minLength.value;if($.maxLength)G.maxItems=$.maxLength.value;if($.exactLength)G.minItems=$.exactLength.value,G.maxItems=$.exactLength.value;return G}function pp8($){let Z={type:"integer",format:"int64"};if(!$.checks)return Z;for(let X of $.checks)switch(X.kind){case"min":if(X.inclusive)Z.minimum=X.value;else Z.exclusiveMinimum=X.value;break;case"max":if(X.inclusive)Z.maximum=X.value;else Z.exclusiveMaximum=X.value;break;case"multipleOf":Z.multipleOf=X.value;break}return Z}function tp8(){return{type:"boolean"}}function wa1($,Z){return w6($.type._def,Z)}function Oa1($,Z,X){let Q=X!=null?X:Z.dateStrategy;if(Array.isArray(Q))return{anyOf:Q.map((Y,G)=>Oa1($,Z,Y))};switch(Q){case"string":case"format:date-time":return{type:"string",format:"date-time"};case"format:date":return{type:"string",format:"date"};case"integer":return rp8($)}}function ap8($,Z){return{...w6($.innerType._def,Z),default:$.defaultValue()}}function sp8($,Z){return Z.effectStrategy==="input"?w6($.schema._def,Z):AY()}function ep8($){return{type:"string",enum:Array.from($.values)}}function Zt8($,Z){let X=[w6($.left._def,{...Z,currentPath:[...Z.currentPath,"allOf","0"]}),w6($.right._def,{...Z,currentPath:[...Z.currentPath,"allOf","1"]})].filter((Y)=>!!Y),Q=[];return X.forEach((Y)=>{if($t8(Y))Q.push(...Y.allOf);else{let G=Y;if("additionalProperties"in Y&&Y.additionalProperties===!1){let{additionalProperties:J,...W}=Y;G=W}Q.push(G)}}),Q.length?{allOf:Q}:void 0}function Xt8($){let Z=typeof $.value;if(Z!=="bigint"&&Z!=="number"&&Z!=="boolean"&&Z!=="string")return{type:Array.isArray($.value)?"array":"object"};return{type:Z==="bigint"?"integer":Z,const:$.value}}function Ba1($,Z){let X={type:"string"};if($.checks)for(let Q of $.checks)switch(Q.kind){case"min":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,Q.value):Q.value;break;case"max":X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,Q.value):Q.value;break;case"email":switch(Z.emailStrategy){case"format:email":N3(X,"email",Q.message,Z);break;case"format:idn-email":N3(X,"idn-email",Q.message,Z);break;case"pattern:zod":gX(X,H3.email,Q.message,Z);break}break;case"url":N3(X,"uri",Q.message,Z);break;case"uuid":N3(X,"uuid",Q.message,Z);break;case"regex":gX(X,Q.regex,Q.message,Z);break;case"cuid":gX(X,H3.cuid,Q.message,Z);break;case"cuid2":gX(X,H3.cuid2,Q.message,Z);break;case"startsWith":gX(X,RegExp(`^${du0(Q.value,Z)}`),Q.message,Z);break;case"endsWith":gX(X,RegExp(`${du0(Q.value,Z)}$`),Q.message,Z);break;case"datetime":N3(X,"date-time",Q.message,Z);break;case"date":N3(X,"date",Q.message,Z);break;case"time":N3(X,"time",Q.message,Z);break;case"duration":N3(X,"duration",Q.message,Z);break;case"length":X.minLength=typeof X.minLength==="number"?Math.max(X.minLength,Q.value):Q.value,X.maxLength=typeof X.maxLength==="number"?Math.min(X.maxLength,Q.value):Q.value;break;case"includes":{gX(X,RegExp(du0(Q.value,Z)),Q.message,Z);break}case"ip":{if(Q.version!=="v6")N3(X,"ipv4",Q.message,Z);if(Q.version!=="v4")N3(X,"ipv6",Q.message,Z);break}case"base64url":gX(X,H3.base64url,Q.message,Z);break;case"jwt":gX(X,H3.jwt,Q.message,Z);break;case"cidr":{if(Q.version!=="v6")gX(X,H3.ipv4Cidr,Q.message,Z);if(Q.version!=="v4")gX(X,H3.ipv6Cidr,Q.message,Z);break}case"emoji":gX(X,H3.emoji(),Q.message,Z);break;case"ulid":{gX(X,H3.ulid,Q.message,Z);break}case"base64":{switch(Z.base64Strategy){case"format:binary":{N3(X,"binary",Q.message,Z);break}case"contentEncoding:base64":{X.contentEncoding="base64";break}case"pattern:zod":{gX(X,H3.base64,Q.message,Z);break}}break}case"nanoid":gX(X,H3.nanoid,Q.message,Z);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return X}function du0($,Z){return Z.patternStrategy==="escape"?Yt8($):$}function Yt8($){let Z="";for(let X=0;X<$.length;X++){if(!Qt8.has($[X]))Z+="\\";Z+=$[X]}return Z}function N3($,Z,X,Q){var Y;if($.format||((Y=$.anyOf)==null?void 0:Y.some((G)=>G.format))){if(!$.anyOf)$.anyOf=[];if($.format)$.anyOf.push({format:$.format}),delete $.format;$.anyOf.push({format:Z,...X&&Q.errorMessages&&{errorMessage:{format:X}}})}else $.format=Z}function gX($,Z,X,Q){var Y;if($.pattern||((Y=$.allOf)==null?void 0:Y.some((G)=>G.pattern))){if(!$.allOf)$.allOf=[];if($.pattern)$.allOf.push({pattern:$.pattern}),delete $.pattern;$.allOf.push({pattern:Xa1(Z,Q),...X&&Q.errorMessages&&{errorMessage:{pattern:X}}})}else $.pattern=Xa1(Z,Q)}function Xa1($,Z){var X;if(!Z.applyRegexFlags||!$.flags)return $.source;let Q={i:$.flags.includes("i"),m:$.flags.includes("m"),s:$.flags.includes("s")},Y=Q.i?$.source.toLowerCase():$.source,G="",J=!1,W=!1,K=!1;for(let H=0;H<Y.length;H++){if(J){G+=Y[H],J=!1;continue}if(Q.i){if(W){if(Y[H].match(/[a-z]/)){if(K)G+=Y[H],G+=`${Y[H-2]}-${Y[H]}`.toUpperCase(),K=!1;else if(Y[H+1]==="-"&&((X=Y[H+2])==null?void 0:X.match(/[a-z]/)))G+=Y[H],K=!0;else G+=`${Y[H]}${Y[H].toUpperCase()}`;continue}}else if(Y[H].match(/[a-z]/)){G+=`[${Y[H]}${Y[H].toUpperCase()}]`;continue}}if(Q.m){if(Y[H]==="^"){G+=`(^|(?<=[\r
952
952
  ]))`;continue}else if(Y[H]==="$"){G+=`($|(?=[\r
@@ -1409,7 +1409,7 @@ Guidelines:
1409
1409
  Guidelines:
1410
1410
  - Include file paths, function names, and specific code locations discovered during exploration.
1411
1411
  - List concrete implementation steps in order.
1412
- - Note any risks, dependencies, or trade-offs.`,Uw0=f$({description:FK4,inputSchema:$0(HK4),outputSchema:$0(NK4)})});function K7($){return`studio-storage://${$}`}function zn($){if($.startsWith("studio-storage://"))return $.slice(17);if($.startsWith("mesh-storage://"))return $.slice(15);return null}function li0(){return/(?:studio|mesh)-storage:\/\/([^\s"'<>[\]]+)/g}var MV=()=>{};var kV="https://chrome.browserless.io",SV=32000;import{z as k3}from"zod";function DK4($,Z=!1,X=OK4){return{...$&&Z?{clip:{x:0,y:0,width:X.width,height:Math.floor(ww0/X.deviceScaleFactor)}}:{fullPage:$},type:"jpeg",quality:wK4}}function LK4($,Z,X,Q){let Y=lG$[Z];return{url:$,options:DK4(X,Q,Y),viewport:Y,...Y.isMobile?{setExtraHTTPHeaders:{"User-Agent":BK4}}:{}}}async function EK4($){let{url:Z,token:X}=$,Q=$.fullPage??!1,Y=$.device??"desktop",G=async(F)=>await fetch(`${kV}/screenshot?token=${encodeURIComponent(X)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(LK4(Z,Y,Q,F))}),J=await G(!1);if(!J.ok){let F=await J.text().catch(()=>"Unknown error");return{ok:!1,error:`Browserless screenshot failed (${J.status}): ${F}`}}let W=new Uint8Array(await J.arrayBuffer()),K=uG$(W);if(!Q||K===null||K<=ww0)return{ok:!0,bytes:W,mediaType:"image/jpeg"};let H=await G(!0),N=H.ok?new Uint8Array(await H.arrayBuffer()):null;if(!N||(uG$(N)??0)>ww0)return{ok:!1,error:`Full-page screenshot of ${Z} is ${K}px tall, over the ${ww0}px limit, and the clipped retry did not come back within it. Retry with fullPage: false.`};return{ok:!0,bytes:N,mediaType:"image/jpeg"}}function uG$($){if($[0]!==255||$[1]!==216)return null;let Z=new DataView($.buffer,$.byteOffset,$.byteLength),X=2;while(X+9<$.length){if($[X]!==255)return null;let Q=$[X+1];if(Q>=192&&Q<=207&&![196,200,204].includes(Q))return Z.getUint16(X+5);X+=2+Z.getUint16(X+2)}return null}function Ow0($){if($>hG$){let Z=($/1048576).toFixed(1),X=hG$/1048576;throw Error(`Reference image too large: ${Z} MB (max ${X} MB). Use a smaller image.`)}}function PK4($,Z){let X;try{X=new URL($)}catch{throw Error("Invalid image URL")}if(X.protocol!=="https:"&&!(Z&&X.protocol==="http:"))throw Error("Image URL must use HTTPS");for(let Q of zK4)if(Q.test(X.hostname))throw Error("Image URL must not point to a private network address")}async function cG$($,Z){if(!Z?.getBytes)throw Error("Object storage read is not available");if(Z.head){let{size:Q}=await Z.head($);Ow0(Q)}let X=await Z.getBytes($);return Ow0(X.byteLength),X}async function AK4($,Z){let X=zn($);if(X!==null)return cG$(X,Z.objectStorage);let Q=$.match(UK4);if(Q)return cG$(Q[1],Z.objectStorage);if($.startsWith("data:")){let J=$.match(/^data:[^;]+;base64,(.+)$/s);if(!J)throw Error("Invalid data: URI");let W=Buffer.from(J[1],"base64");return Ow0(W.byteLength),W}PK4($,Z.allowHttpExternalUrls===!0);let Y=await fetch($,{signal:Z.abortSignal});if(!Y.ok)throw Error(`Failed to fetch image from ${$}: ${Y.status}`);let G=new Uint8Array(await Y.arrayBuffer());return Ow0(G.byteLength),G}async function di0($,Z){let{provider:X,imageModelInfo:Q,objectStorage:Y}=Z,G=X.aiSdk.imageModel(Q.id),J=$.referenceImages&&$.referenceImages.length>0,W=J?await Promise.all($.referenceImages.map((w)=>{let O=w.uri??w.url;if(!O)throw Error("Reference image missing uri");return AK4(O,Z)})):[],K=J?{text:$.prompt,images:W}:$.prompt,H=await c50({model:G,prompt:K,n:$.n??1,...$.aspectRatio?{aspectRatio:$.aspectRatio}:{},...Z.abortSignal?{abortSignal:Z.abortSignal}:{}});if(!Y)throw Error("Object storage is unavailable; cannot persist the generated image.");let N=$.n??1,F=H.images.length>N?H.images.slice(-N):H.images;return{success:!0,images:await Promise.all(F.map(async(w)=>{let O=w.mediaType??"image/png",D=O.split("/")[1]??"png",L=`generated-images/${crypto.randomUUID()}.${D}`,E=Uint8Array.from(atob(w.base64),(j)=>j.charCodeAt(0));return await Y.put(L,E,{contentType:O}),{uri:K7(L),mediaType:O}})),prompt:$.prompt,model:Q.id,usage:{inputTokens:H.usage.inputTokens??0,outputTokens:H.usage.outputTokens??0},usedReferenceImages:J?$.referenceImages.length:0}}function Bw0($,Z){return f$({description:"Generate an image from a text description, optionally using reference images. Use this when the user asks you to create, generate, draw, or design an image. If the user has attached images and wants to modify or use them as a reference, pass them as referenceImages. "+"The image is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:$0(Pn),execute:async(X,Q)=>{let Y=performance.now();try{return await di0(X,Z)}finally{$.write({type:"data-tool-metadata",id:Q.toolCallId,data:{latencyMs:performance.now()-Y}})}}})}function Dw0($,Z){let{objectStorage:X,toolOutputMap:Q,pendingImages:Y}=Z;return f$({description:'Take a screenshot of a web page. Use this when you need to visually see a website, check its layout, verify a deployment, or inspect a page\'s appearance. Pass `device: "mobile"` to capture the true mobile layout (phone viewport + mobile user-agent), and capture both `desktop` and `mobile` to document a responsive change. '+"The screenshot is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:$0(jK4),execute:async(G,J)=>{let W=performance.now();try{let K=Z.browserlessToken??process.env.BROWSERLESS_TOKEN;if(!K)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let H=G.device??"desktop",N=await EK4({url:G.url,token:K,device:H,fullPage:G.fullPage??!1});if(!N.ok)return{success:!1,error:N.error,url:G.url};let{bytes:F,mediaType:U}=N,w=`screenshots/${crypto.randomUUID()}.jpg`,O,D=null;if(X)try{await X.put(w,F,{contentType:U}),O=K7(w),D=await X.presignedGetUrl?.(w,600)??null}catch(L){console.error("[take-screenshot] Failed to upload, using data: URI fallback",L),O=`data:${U};base64,${Buffer.from(F).toString("base64")}`}else O=`data:${U};base64,${Buffer.from(F).toString("base64")}`;if(!D)D=O.startsWith("data:")?O:`data:${U};base64,${Buffer.from(F).toString("base64")}`;return Y.push({url:D,mediaType:U,pageUrl:G.url}),Q.set(J.toolCallId,`Screenshot (${H}) of ${G.url} stored at ${O}`),{success:!0,image:{uri:O,mediaType:U},url:G.url,device:H}}finally{$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:performance.now()-W}})}},toModelOutput({output:G}){if(!G.success)return{type:"text",value:G.error??"Screenshot failed"};return{type:"text",value:`Screenshot of ${G.url} (${G.device??"desktop"}) captured successfully. The image is attached below.`}}})}var UK4,hG$=20971520,wK4=80,lG$,OK4,BK4="Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1",ww0=7000,Pn,jK4,zK4;var gx=B(()=>{S4();S4();MV();UK4=/\/api\/[^/]+\/files\/([^?#]+)/,lG$={desktop:{width:1280,height:800,deviceScaleFactor:1,isMobile:!1,hasTouch:!1},mobile:{width:390,height:844,deviceScaleFactor:2,isMobile:!0,hasTouch:!0}},OK4=lG$.desktop;Pn=k3.object({prompt:k3.string().max(1e4).describe("Detailed description of the image to generate. Be specific about style, composition, colors, and subject matter."),referenceImages:k3.array(k3.object({uri:k3.string().describe("URI of the reference image (e.g. studio-storage://generated-images/uuid.png).")})).optional().describe("Reference images to use as input for image-to-image generation. Pass the URI of any image from the conversation (uploaded files, previously generated images, etc.) when the user wants to modify, transform, or use an existing image as a starting point."),aspectRatio:k3.enum(["1:1","16:9","9:16","4:3","3:4","3:2","2:3"]).optional().describe("Aspect ratio for the generated image. Defaults to 1:1."),n:k3.number().int().min(1).max(4).optional().describe("Number of images to generate. Defaults to 1.")}),jK4=k3.object({url:k3.string().url().describe("The URL of the web page to screenshot."),fullPage:k3.boolean().optional().describe("When true, captures the full scrollable page instead of just the viewport. Defaults to false."),device:k3.enum(["desktop","mobile"]).optional().describe("Device to emulate. `mobile` uses a phone viewport (390\xD7844) AND a mobile "+"user-agent, so sites that switch layout by user-agent \u2014 not just CSS "+"breakpoints \u2014 return their real mobile markup. To document a responsive "+"change, capture both `desktop` and `mobile`. Defaults to `desktop`.")}),zK4=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[fd/,/^\[fe80:/,/^\[::ffff:/i,/^localhost$/i]});function dG$($,Z){return Bw0($,{provider:Z.provider,imageModelInfo:Z.imageModelInfo,objectStorage:Z.objectStorage,allowHttpExternalUrls:Z.allowHttpExternalUrls})}var mG$=B(()=>{gx()});import{z as TK4}from"zod";function iG$($){return{background:!0,status:"started",jobId:$,note:RK4}}function qK4($){return!!$&&typeof $==="object"&&$.status==="started"&&$.background===!0}function An($,Z,X,Q,Y){if(!Q)return X;let G=X.execute,J=$0(Z.extend(IK4)),K=G.constructor.name==="AsyncGeneratorFunction"?async function*(N,F){let{background:U,...w}=N,O=async function*(){let{jobId:z}=await Q.start({toolName:$,input:w,toolCallId:F.toolCallId});yield iG$(z)};if(U){yield*O();return}let D=Y?.(F.toolCallId);if(!D){yield*G(w,F);return}let L=new AbortController,E=()=>L.abort();F.abortSignal?.addEventListener("abort",E,{once:!0});let j=G(w,{...F,abortSignal:L.signal})[Symbol.asyncIterator]();try{let z=j.next(),A=z.then((P)=>({kind:"next",r:P}));while(!0){let P=await Promise.race([A,D.flipped.then(()=>({kind:"flip"}))]);if(P.kind==="flip"){L.abort(),A.catch(()=>{}),(async()=>{try{await z}catch{}try{await j.return?.(void 0)}catch{}})(),yield*O();return}if(P.r.done)return;yield P.r.value,z=j.next(),A=z.then((q)=>({kind:"next",r:q}))}}finally{F.abortSignal?.removeEventListener("abort",E),D.dispose()}}:async(N,F)=>{let{background:U,...w}=N;if(U){let{jobId:O}=await Q.start({toolName:$,input:w,toolCallId:F.toolCallId});return iG$(O)}return G(w,F)};return{...X,inputSchema:J,execute:K,toModelOutput:(N)=>{if(qK4(N.output))return{type:"text",value:N.output.note};if(X.toModelOutput)return X.toModelOutput(N);return{type:"text",value:JSON.stringify(N.output)}}}}var RK4,IK4;var mi0=B(()=>{S4();RK4="Running in the background. The result will appear in the conversation as "+"soon as it's ready \u2014 keep helping the user in the meantime, and do not "+"wait for it or call this tool again for the same request.",IK4={background:TK4.boolean().optional().describe("Run this in the BACKGROUND and return immediately instead of blocking this turn. Set true for long, fire-and-forget work whose result you do "+"NOT need in this same reply \u2014 it's delivered to the conversation when "+"it finishes and you'll be nudged to use it then. Leave false/omit when you need the result now to act on it this turn.")}});function nG$($,Z){let X=Tn.get($);if(!X)X=new Map,Tn.set($,X);let Q,Y=new Promise((G)=>{Q=G});return X.set(Z,Q),{flipped:Y,dispose(){let G=Tn.get($);if(!G)return;if(G.delete(Z),G.size===0)Tn.delete($)}}}function ii0($,Z){Tn.get($)?.get(Z)?.()}var Tn;var ni0=B(()=>{Tn=new Map});import{z as pG$}from"zod";function pi0($,Z){let{researchJob:X,toolOutputMap:Q,taskId:Y}=Z;return f$({description:Z.description??kK4,inputSchema:$0(MK4),execute:async(G,J)=>{let W=performance.now(),K=(H)=>{$.write({type:"data-web-search",id:J.toolCallId,data:{text:H}})};try{let H=X({query:G.query,taskId:Y,toolCallId:J.toolCallId,abortSignal:J.abortSignal}),N=await H.next();while(!N.done)K(N.value.progress),N=await H.next();let F=N.value;return Q.set(J.toolCallId,F.text),SK4({query:G.query,text:F.text,citations:F.citations,usage:F.usage,resultUri:F.resultUri??null,preview:F.preview??""})}finally{let H=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:H}})}}})}function SK4($){if($.resultUri)return{success:!0,uri:$.resultUri,preview:$.preview,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}};return{success:!0,content:$.text,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}}}var MK4,kK4="Search the web for up-to-date information and synthesize a concise answer. Use this for quick lookups, fact-checking, current events, or when the answer requires knowledge beyond your training data and a fast response is enough. For exhaustive, multi-source reports prefer `deep_research` when available.";var tG$=B(()=>{S4();MK4=pG$.object({query:pG$.string().max(1e4).describe("The research query. Be specific about what information you need. The research model will search the web and synthesize a comprehensive answer.")})});var oG$=B(()=>{Ki0()});var rG$=B(()=>{oG$()});function VY($,Z,X){let Q=Object.entries(X).filter(([,G])=>G!==void 0&&G!==null).map(([G,J])=>`${G}=${typeof J==="string"?J:JSON.stringify(J)}`).join(" "),Y=`[web-search] ${Z} ${Q}`.trim();if($==="error")console.error(Y);else if($==="warn")console.warn(Y);else console.log(Y)}function ti0($){let{provider:Z,modelInfo:X,ctx:Q,mode:Y,toolName:G}=$,J=X.id;return async function*(K){let H=Z.asyncResearch;if(Y==="deep"&&H?.canHandle(J)===!0&&H)return yield*VK4({params:K,asyncResearch:H,providerId:Z.info.id,modelId:J,toolName:G,ctx:Q});return yield*_K4({params:K,provider:Z,modelId:J,ctx:Q})}}async function*VK4({params:$,asyncResearch:Z,providerId:X,modelId:Q,toolName:Y,ctx:G}){let{toolCallId:J,taskId:W}=$,K={tc:J,thread:W,provider:X,model:Q},H=await G.storage.asyncResearchJobs.upsertPending({threadId:W,toolCallId:J,provider:X,modelId:Q,query:$.query});if(H.status==="completed"&&H.resultPreview!=null)return VY("info","replay-completed",{...K,job:H.id}),CK4(H);if(H.status==="failed"||H.status==="cancelled")throw VY("warn",`replay-${H.status}`,{...K,job:H.id,err:H.lastError}),Error(H.lastError??`previous research ${H.status}`);if(!H.interactionId){VY("info","submit",{...K,job:H.id});let w;try{w=(await Z.start({modelId:Q,query:$.query,abortSignal:$.abortSignal})).jobId}catch(O){let D=O.message??String(O);throw await G.storage.asyncResearchJobs.markFailed(J,D),VY("error","submit-failed",{...K,job:H.id,err:D}),O}await G.storage.asyncResearchJobs.markPolling(J,w,{threadId:W,toolName:Y,query:$.query}),H={...H,interactionId:w,status:"polling"},VY("info","polling-started",{...K,job:H.id,interaction:w})}else VY("info","polling-resumed",{...K,job:H.id,interaction:H.interactionId,attempts:H.attempts});let N=0,F=50,U=[];try{let w=!1,O,D=Z.resume({jobId:H.interactionId,abortSignal:$.abortSignal,onProgress:(P)=>{let q=Date.now();if(q-N>=F)N=q,U.push(P);G.storage.asyncResearchJobs.recordPoll(J).catch((S)=>{VY("warn","record-poll-failed",{...K,job:H.id,err:S.message})})}}).catch((P)=>{O=P;return}).finally(()=>{w=!0});while(!w){while(U.length>0)yield{progress:U.shift()};await Promise.race([D,C$(F)])}while(U.length>0)yield{progress:U.shift()};if(await D,O!==void 0)throw O;let L=await D;if(yield{progress:L.text},L.text.trim()==="")throw VY("error","empty-result",{...K,job:H.id,tokens:L.usage.outputTokens}),new RV("research completed with empty result");let E={inputTokens:L.usage.inputTokens,outputTokens:L.usage.outputTokens},j=L.usage.outputTokens>SV&&G.objectStorage!=null,z=null;if(j&&G.objectStorage){let P=`web-search/${crypto.randomUUID()}.md`;try{await G.objectStorage.put(P,new TextEncoder().encode(L.text),{contentType:"text/markdown"}),z=K7(P)}catch(q){VY("warn","blob-upload-failed",{...K,job:H.id,err:q.message})}}let A=mX(L.text);return await G.storage.asyncResearchJobs.markCompleted(J,{inputTokens:E.inputTokens,outputTokens:E.outputTokens,citations:L.citations,resultUri:z,resultPreview:A,resultContent:z?null:L.text}),VY("info","completed",{...K,job:H.id,tokens:E.outputTokens,citations:L.citations.length,uri:z??"inline"}),{text:L.text,citations:L.citations,usage:E,resultUri:z,preview:z?A:void 0}}catch(w){if($.abortSignal?.aborted)throw await G.storage.asyncResearchJobs.markCancelled(J,"aborted"),VY("info","cancelled",{...K,job:H.id}),w;let O=w.message??String(w);if(w instanceof RV||w instanceof Error&&w.name==="AsyncResearchTerminalError")throw await G.storage.asyncResearchJobs.markFailed(J,O),VY("error","terminal-failure",{...K,job:H.id,err:O}),w;throw await G.storage.asyncResearchJobs.recordPoll(J,O).catch(()=>{}),VY("warn","transient-error",{...K,job:H.id,err:O}),w}}function CK4($){if($.resultUri)return{text:"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:$.resultUri,preview:$.resultPreview??""};return{text:$.resultContent??$.resultPreview??"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:null}}async function*_K4({params:$,provider:Z,modelId:X,ctx:Q}){let Y=Z.aiSdk.languageModel(X),G=kw({model:Y,prompt:$.query,abortSignal:$.abortSignal}),J="",W=0,K=50;for await(let L of G.textStream){J+=L;let E=Date.now();if(E-W>=K)W=E,yield{progress:J}}yield{progress:J};let[H,N,F]=await Promise.all([G.usage,G.sources,G.providerMetadata]),U=H.inputTokens??0,w=H.outputTokens??0;t$0(F);let O=[];if(N&&Array.isArray(N)){for(let L of N)if(L&&typeof L==="object"&&"sourceType"in L&&L.sourceType==="url"&&"url"in L&&typeof L.url==="string")O.push({url:L.url,title:"title"in L&&typeof L.title==="string"?L.title:void 0})}let D={inputTokens:U,outputTokens:w};if(w>SV&&Q.objectStorage){let L=`web-search/${crypto.randomUUID()}.md`,E=new TextEncoder().encode(J);try{return await Q.objectStorage.put(L,E,{contentType:"text/markdown"}),{text:J,citations:O,usage:D,resultUri:K7(L),preview:mX(J)}}catch(j){console.error("[web-search] Failed to upload to storage, returning inline",j)}}return{text:J,citations:O,usage:D,resultUri:null}}var aG$=B(()=>{S4();$6();rG$();L8();MV();RN()});function sG$($,Z){return Dw0($,{objectStorage:Z.objectStorage,toolOutputMap:Z.toolOutputMap,pendingImages:Z.pendingImages})}var eG$=B(()=>{gx()});import{z as $J$}from"zod";function XJ$($,Z){let{browserless:X,objectStorage:Q,toolOutputMap:Y}=Z;return f$({description:"Scrape the rendered HTML content of a web page. Use this when you need to read the content, structure, or data from a website. Returns the full HTML of the page after JavaScript has been executed. "+"For very large pages the result may be truncated \u2014 use read_tool_output to access the full content.",inputSchema:$0(fK4),execute:async(G,J)=>{let W=performance.now();try{let K;try{K=await fetch(`${X.baseUrl}/content?token=${encodeURIComponent(X.token)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:G.url}),signal:AbortSignal.timeout(ZJ$)})}catch(F){return{success:!1,error:F instanceof Error&&F.name==="TimeoutError"?`Browserless content fetch timed out after ${ZJ$}ms`:`Browserless content fetch failed: ${F instanceof Error?F.message:String(F)}`,url:G.url}}if(!K.ok){let F=await K.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless content fetch failed (${K.status}): ${F.slice(0,vK4)}`,url:G.url}}let H=await K.text();Y.set(J.toolCallId,H);let N=$X(H);if(N>SV){let F=`scraped-pages/${crypto.randomUUID()}.html`,U=new TextEncoder().encode(H);try{await Q.put(F,U,{contentType:"text/html"});let w=mX(H);return{success:!0,uri:K7(F),preview:w,url:G.url,tokenCount:N}}catch(w){console.error("[scrape-url] Failed to upload to storage, returning inline",w)}}return{success:!0,content:H,url:G.url,tokenCount:N}}finally{let K=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:K}})}}})}var ZJ$=45000,vK4=500,fK4;var QJ$=B(()=>{S4();RN();MV();fK4=$J$.object({url:$J$.string().url().refine(($)=>/^https?:\/\//i.test($),{message:"URL must use http or https"}).describe("The URL of the web page to scrape.")})});import{z as Lw0}from"zod";function yK4($,Z){let X=Z.waitUntil??"networkidle2",Q=Z.evaluate?JSON.stringify(Z.evaluate):"null";return`
1412
+ - Note any risks, dependencies, or trade-offs.`,Uw0=f$({description:FK4,inputSchema:$0(HK4),outputSchema:$0(NK4)})});function K7($){return`studio-storage://${$}`}function zn($){if($.startsWith("studio-storage://"))return $.slice(17);if($.startsWith("mesh-storage://"))return $.slice(15);return null}function li0(){return/(?:studio|mesh)-storage:\/\/([^\s"'<>[\]]+)/g}var MV=()=>{};var kV="https://chrome.browserless.io",SV=32000;import{z as k3}from"zod";function DK4($,Z=!1,X=OK4){return{...$&&Z?{clip:{x:0,y:0,width:X.width,height:Math.floor(ww0/X.deviceScaleFactor)}}:{fullPage:$},type:"jpeg",quality:wK4}}function LK4($,Z,X,Q){let Y=lG$[Z];return{url:$,options:DK4(X,Q,Y),viewport:Y,...Y.isMobile?{setExtraHTTPHeaders:{"User-Agent":BK4}}:{}}}async function EK4($){let{url:Z,token:X}=$,Q=$.fullPage??!1,Y=$.device??"desktop",G=async(F)=>await fetch(`${kV}/screenshot?token=${encodeURIComponent(X)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(LK4(Z,Y,Q,F))}),J=await G(!1);if(!J.ok){let F=await J.text().catch(()=>"Unknown error");return{ok:!1,error:`Browserless screenshot failed (${J.status}): ${F}`}}let W=new Uint8Array(await J.arrayBuffer()),K=uG$(W);if(!Q||K===null||K<=ww0)return{ok:!0,bytes:W,mediaType:"image/jpeg"};let H=await G(!0),N=H.ok?new Uint8Array(await H.arrayBuffer()):null;if(!N||(uG$(N)??0)>ww0)return{ok:!1,error:`Full-page screenshot of ${Z} is ${K}px tall, over the ${ww0}px limit, and the clipped retry did not come back within it. Retry with fullPage: false.`};return{ok:!0,bytes:N,mediaType:"image/jpeg"}}function uG$($){if($[0]!==255||$[1]!==216)return null;let Z=new DataView($.buffer,$.byteOffset,$.byteLength),X=2;while(X+9<$.length){if($[X]!==255)return null;let Q=$[X+1];if(Q>=192&&Q<=207&&![196,200,204].includes(Q))return Z.getUint16(X+5);X+=2+Z.getUint16(X+2)}return null}function Ow0($){if($>hG$){let Z=($/1048576).toFixed(1),X=hG$/1048576;throw Error(`Reference image too large: ${Z} MB (max ${X} MB). Use a smaller image.`)}}function PK4($,Z){let X;try{X=new URL($)}catch{throw Error("Invalid image URL")}if(X.protocol!=="https:"&&!(Z&&X.protocol==="http:"))throw Error("Image URL must use HTTPS");for(let Q of zK4)if(Q.test(X.hostname))throw Error("Image URL must not point to a private network address")}async function cG$($,Z){if(!Z?.getBytes)throw Error("Object storage read is not available");if(Z.head){let{size:Q}=await Z.head($);Ow0(Q)}let X=await Z.getBytes($);return Ow0(X.byteLength),X}async function AK4($,Z){let X=zn($);if(X!==null)return cG$(X,Z.objectStorage);let Q=$.match(UK4);if(Q)return cG$(Q[1],Z.objectStorage);if($.startsWith("data:")){let J=$.match(/^data:[^;]+;base64,(.+)$/s);if(!J)throw Error("Invalid data: URI");let W=Buffer.from(J[1],"base64");return Ow0(W.byteLength),W}PK4($,Z.allowHttpExternalUrls===!0);let Y=await fetch($,{signal:Z.abortSignal});if(!Y.ok)throw Error(`Failed to fetch image from ${$}: ${Y.status}`);let G=new Uint8Array(await Y.arrayBuffer());return Ow0(G.byteLength),G}async function di0($,Z){let{provider:X,imageModelInfo:Q,objectStorage:Y}=Z,G=X.aiSdk.imageModel(Q.id),J=$.referenceImages&&$.referenceImages.length>0,W=J?await Promise.all($.referenceImages.map((w)=>{let O=w.uri??w.url;if(!O)throw Error("Reference image missing uri");return AK4(O,Z)})):[],K=J?{text:$.prompt,images:W}:$.prompt,H=await c50({model:G,prompt:K,n:$.n??1,...$.aspectRatio?{aspectRatio:$.aspectRatio}:{},...Z.abortSignal?{abortSignal:Z.abortSignal}:{}});if(!Y)throw Error("Object storage is unavailable; cannot persist the generated image.");let N=$.n??1,F=H.images.length>N?H.images.slice(-N):H.images;return{success:!0,images:await Promise.all(F.map(async(w)=>{let O=w.mediaType??"image/png",D=O.split("/")[1]??"png",L=`generated-images/${crypto.randomUUID()}.${D}`,E=Uint8Array.from(atob(w.base64),(j)=>j.charCodeAt(0));return await Y.put(L,E,{contentType:O}),{uri:K7(L),mediaType:O}})),prompt:$.prompt,model:Q.id,usage:{inputTokens:H.usage.inputTokens??0,outputTokens:H.usage.outputTokens??0},usedReferenceImages:J?$.referenceImages.length:0}}function Bw0($,Z){return f$({description:"Generate an image from a text description, optionally using reference images. Use this when the user asks you to create, generate, draw, or design an image. If the user has attached images and wants to modify or use them as a reference, pass them as referenceImages. "+"The image is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:$0(Pn),execute:async(X,Q)=>{let Y=performance.now();try{return await di0(X,Z)}finally{$.write({type:"data-tool-metadata",id:Q.toolCallId,data:{latencyMs:performance.now()-Y}})}}})}function Dw0($,Z){let{objectStorage:X,toolOutputMap:Q,pendingImages:Y}=Z;return f$({description:'Take a screenshot of a web page. Use this when you need to visually see a website, check its layout, verify a deployment, or inspect a page\'s appearance. Pass `device: "mobile"` to capture the true mobile layout (phone viewport + mobile user-agent), and capture both `desktop` and `mobile` to document a responsive change. '+"The screenshot is displayed automatically by the UI \u2014 do NOT include image URLs or markdown images in your response.",inputSchema:$0(jK4),execute:async(G,J)=>{let W=performance.now();try{let K=Z.browserlessToken??process.env.BROWSERLESS_TOKEN;if(!K)return{success:!1,error:"BROWSERLESS_TOKEN is not configured."};let H=G.device??"desktop",N=await EK4({url:G.url,token:K,device:H,fullPage:G.fullPage??!1});if(!N.ok)return{success:!1,error:N.error,url:G.url};let{bytes:F,mediaType:U}=N,w=`screenshots/${crypto.randomUUID()}.jpg`,O,D=null;if(X)try{await X.put(w,F,{contentType:U}),O=K7(w),D=await X.presignedGetUrl?.(w,600)??null}catch(L){console.error("[take-screenshot] Failed to upload, using data: URI fallback",L),O=`data:${U};base64,${Buffer.from(F).toString("base64")}`}else O=`data:${U};base64,${Buffer.from(F).toString("base64")}`;if(!D)D=O.startsWith("data:")?O:`data:${U};base64,${Buffer.from(F).toString("base64")}`;return Y.push({url:D,mediaType:U,pageUrl:G.url}),Q.set(J.toolCallId,`Screenshot (${H}) of ${G.url} stored at ${O}`),{success:!0,image:{uri:O,mediaType:U},url:G.url,device:H}}finally{$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:performance.now()-W}})}},toModelOutput({output:G}){if(!G.success)return{type:"text",value:G.error??"Screenshot failed"};return{type:"text",value:`Screenshot of ${G.url} (${G.device??"desktop"}) captured successfully. The image is attached below.`}}})}var UK4,hG$=20971520,wK4=80,lG$,OK4,BK4="Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1",ww0=7000,Pn,jK4,zK4;var gx=B(()=>{S4();S4();MV();UK4=/\/api\/[^/]+\/files\/([^?#]+)/,lG$={desktop:{width:1280,height:800,deviceScaleFactor:1,isMobile:!1,hasTouch:!1},mobile:{width:390,height:844,deviceScaleFactor:2,isMobile:!0,hasTouch:!0}},OK4=lG$.desktop;Pn=k3.object({prompt:k3.string().max(1e4).describe("Detailed description of the image to generate. Be specific about style, composition, colors, and subject matter."),referenceImages:k3.array(k3.object({uri:k3.string().describe("URI of the reference image (e.g. studio-storage://generated-images/uuid.png).")})).optional().describe("Reference images to use as input for image-to-image generation. Pass the URI of any image from the conversation (uploaded files, previously generated images, etc.) when the user wants to modify, transform, or use an existing image as a starting point."),aspectRatio:k3.enum(["1:1","16:9","9:16","4:3","3:4","3:2","2:3"]).optional().describe("Aspect ratio for the generated image. Defaults to 1:1."),n:k3.number().int().min(1).max(4).optional().describe("Number of images to generate. Defaults to 1.")}),jK4=k3.object({url:k3.string().url().describe("The URL of the web page to screenshot."),fullPage:k3.boolean().optional().describe("When true, captures the full scrollable page instead of just the viewport. Defaults to false."),device:k3.enum(["desktop","mobile"]).optional().describe("Device to emulate. `mobile` uses a phone viewport (390\xD7844) AND a mobile "+"user-agent, so sites that switch layout by user-agent \u2014 not just CSS "+"breakpoints \u2014 return their real mobile markup. To document a responsive "+"change, capture both `desktop` and `mobile`. Defaults to `desktop`.")}),zK4=[/^127\./,/^10\./,/^172\.(1[6-9]|2\d|3[01])\./,/^192\.168\./,/^169\.254\./,/^0\./,/^\[::1\]$/,/^\[f[cd]/,/^\[fe80:/,/^\[::ffff:/i,/^localhost$/i]});function dG$($,Z){return Bw0($,{provider:Z.provider,imageModelInfo:Z.imageModelInfo,objectStorage:Z.objectStorage,allowHttpExternalUrls:Z.allowHttpExternalUrls})}var mG$=B(()=>{gx()});import{z as TK4}from"zod";function iG$($){return{background:!0,status:"started",jobId:$,note:RK4}}function qK4($){return!!$&&typeof $==="object"&&$.status==="started"&&$.background===!0}function An($,Z,X,Q,Y){if(!Q)return X;let G=X.execute,J=$0(Z.extend(IK4)),K=G.constructor.name==="AsyncGeneratorFunction"?async function*(N,F){let{background:U,...w}=N,O=async function*(){let{jobId:z}=await Q.start({toolName:$,input:w,toolCallId:F.toolCallId});yield iG$(z)};if(U){yield*O();return}let D=Y?.(F.toolCallId);if(!D){yield*G(w,F);return}let L=new AbortController,E=()=>L.abort();F.abortSignal?.addEventListener("abort",E,{once:!0});let j=G(w,{...F,abortSignal:L.signal})[Symbol.asyncIterator]();try{let z=j.next(),A=z.then((P)=>({kind:"next",r:P}));while(!0){let P=await Promise.race([A,D.flipped.then(()=>({kind:"flip"}))]);if(P.kind==="flip"){L.abort(),A.catch(()=>{}),(async()=>{try{await z}catch{}try{await j.return?.(void 0)}catch{}})(),yield*O();return}if(P.r.done)return;yield P.r.value,z=j.next(),A=z.then((q)=>({kind:"next",r:q}))}}finally{F.abortSignal?.removeEventListener("abort",E),D.dispose()}}:async(N,F)=>{let{background:U,...w}=N;if(U){let{jobId:O}=await Q.start({toolName:$,input:w,toolCallId:F.toolCallId});return iG$(O)}return G(w,F)};return{...X,inputSchema:J,execute:K,toModelOutput:(N)=>{if(qK4(N.output))return{type:"text",value:N.output.note};if(X.toModelOutput)return X.toModelOutput(N);return{type:"text",value:JSON.stringify(N.output)}}}}var RK4,IK4;var mi0=B(()=>{S4();RK4="Running in the background. The result will appear in the conversation as "+"soon as it's ready \u2014 keep helping the user in the meantime, and do not "+"wait for it or call this tool again for the same request.",IK4={background:TK4.boolean().optional().describe("Run this in the BACKGROUND and return immediately instead of blocking this turn. Set true for long, fire-and-forget work whose result you do "+"NOT need in this same reply \u2014 it's delivered to the conversation when "+"it finishes and you'll be nudged to use it then. Leave false/omit when you need the result now to act on it this turn.")}});function nG$($,Z){let X=Tn.get($);if(!X)X=new Map,Tn.set($,X);let Q,Y=new Promise((G)=>{Q=G});return X.set(Z,Q),{flipped:Y,dispose(){let G=Tn.get($);if(!G)return;if(G.delete(Z),G.size===0)Tn.delete($)}}}function ii0($,Z){Tn.get($)?.get(Z)?.()}var Tn;var ni0=B(()=>{Tn=new Map});import{z as pG$}from"zod";function pi0($,Z){let{researchJob:X,toolOutputMap:Q,taskId:Y}=Z;return f$({description:Z.description??kK4,inputSchema:$0(MK4),execute:async(G,J)=>{let W=performance.now(),K=(H)=>{$.write({type:"data-web-search",id:J.toolCallId,data:{text:H}})};try{let H=X({query:G.query,taskId:Y,toolCallId:J.toolCallId,abortSignal:J.abortSignal}),N=await H.next();while(!N.done)K(N.value.progress),N=await H.next();let F=N.value;return Q.set(J.toolCallId,F.text),SK4({query:G.query,text:F.text,citations:F.citations,usage:F.usage,resultUri:F.resultUri??null,preview:F.preview??""})}finally{let H=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:H}})}}})}function SK4($){if($.resultUri)return{success:!0,uri:$.resultUri,preview:$.preview,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}};return{success:!0,content:$.text,query:$.query,usage:$.usage,...$.citations.length>0&&{citations:$.citations}}}var MK4,kK4="Search the web for up-to-date information and synthesize a concise answer. Use this for quick lookups, fact-checking, current events, or when the answer requires knowledge beyond your training data and a fast response is enough. For exhaustive, multi-source reports prefer `deep_research` when available.";var tG$=B(()=>{S4();MK4=pG$.object({query:pG$.string().max(1e4).describe("The research query. Be specific about what information you need. The research model will search the web and synthesize a comprehensive answer.")})});var oG$=B(()=>{Ki0()});var rG$=B(()=>{oG$()});function VY($,Z,X){let Q=Object.entries(X).filter(([,G])=>G!==void 0&&G!==null).map(([G,J])=>`${G}=${typeof J==="string"?J:JSON.stringify(J)}`).join(" "),Y=`[web-search] ${Z} ${Q}`.trim();if($==="error")console.error(Y);else if($==="warn")console.warn(Y);else console.log(Y)}function ti0($){let{provider:Z,modelInfo:X,ctx:Q,mode:Y,toolName:G}=$,J=X.id;return async function*(K){let H=Z.asyncResearch;if(Y==="deep"&&H?.canHandle(J)===!0&&H)return yield*VK4({params:K,asyncResearch:H,providerId:Z.info.id,modelId:J,toolName:G,ctx:Q});return yield*_K4({params:K,provider:Z,modelId:J,ctx:Q})}}async function*VK4({params:$,asyncResearch:Z,providerId:X,modelId:Q,toolName:Y,ctx:G}){let{toolCallId:J,taskId:W}=$,K={tc:J,thread:W,provider:X,model:Q},H=await G.storage.asyncResearchJobs.upsertPending({threadId:W,toolCallId:J,provider:X,modelId:Q,query:$.query});if(H.status==="completed"&&H.resultPreview!=null)return VY("info","replay-completed",{...K,job:H.id}),CK4(H);if(H.status==="failed"||H.status==="cancelled")throw VY("warn",`replay-${H.status}`,{...K,job:H.id,err:H.lastError}),Error(H.lastError??`previous research ${H.status}`);if(!H.interactionId){VY("info","submit",{...K,job:H.id});let w;try{w=(await Z.start({modelId:Q,query:$.query,abortSignal:$.abortSignal})).jobId}catch(O){let D=O.message??String(O);throw await G.storage.asyncResearchJobs.markFailed(J,D),VY("error","submit-failed",{...K,job:H.id,err:D}),O}await G.storage.asyncResearchJobs.markPolling(J,w,{threadId:W,toolName:Y,query:$.query}),H={...H,interactionId:w,status:"polling"},VY("info","polling-started",{...K,job:H.id,interaction:w})}else VY("info","polling-resumed",{...K,job:H.id,interaction:H.interactionId,attempts:H.attempts});let N=0,F=50,U=[];try{let w=!1,O,D=Z.resume({jobId:H.interactionId,abortSignal:$.abortSignal,onProgress:(P)=>{let q=Date.now();if(q-N>=F)N=q,U.push(P);G.storage.asyncResearchJobs.recordPoll(J).catch((S)=>{VY("warn","record-poll-failed",{...K,job:H.id,err:S.message})})}}).catch((P)=>{O=P;return}).finally(()=>{w=!0});while(!w){while(U.length>0)yield{progress:U.shift()};await Promise.race([D,C$(F)])}while(U.length>0)yield{progress:U.shift()};if(await D,O!==void 0)throw O;let L=await D;if(yield{progress:L.text},L.text.trim()==="")throw VY("error","empty-result",{...K,job:H.id,tokens:L.usage.outputTokens}),new RV("research completed with empty result");let E={inputTokens:L.usage.inputTokens,outputTokens:L.usage.outputTokens},j=L.usage.outputTokens>SV&&G.objectStorage!=null,z=null;if(j&&G.objectStorage){let P=`web-search/${crypto.randomUUID()}.md`;try{await G.objectStorage.put(P,new TextEncoder().encode(L.text),{contentType:"text/markdown"}),z=K7(P)}catch(q){VY("warn","blob-upload-failed",{...K,job:H.id,err:q.message})}}let A=mX(L.text);return await G.storage.asyncResearchJobs.markCompleted(J,{inputTokens:E.inputTokens,outputTokens:E.outputTokens,citations:L.citations,resultUri:z,resultPreview:A,resultContent:z?null:L.text}),VY("info","completed",{...K,job:H.id,tokens:E.outputTokens,citations:L.citations.length,uri:z??"inline"}),{text:L.text,citations:L.citations,usage:E,resultUri:z,preview:z?A:void 0}}catch(w){if($.abortSignal?.aborted)throw await G.storage.asyncResearchJobs.markCancelled(J,"aborted"),VY("info","cancelled",{...K,job:H.id}),w;let O=w.message??String(w);if(w instanceof RV||w instanceof Error&&w.name==="AsyncResearchTerminalError")throw await G.storage.asyncResearchJobs.markFailed(J,O),VY("error","terminal-failure",{...K,job:H.id,err:O}),w;throw await G.storage.asyncResearchJobs.recordPoll(J,O).catch(()=>{}),VY("warn","transient-error",{...K,job:H.id,err:O}),w}}function CK4($){if($.resultUri)return{text:"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:$.resultUri,preview:$.resultPreview??""};return{text:$.resultContent??$.resultPreview??"",citations:[],usage:{inputTokens:0,outputTokens:0},resultUri:null}}async function*_K4({params:$,provider:Z,modelId:X,ctx:Q}){let Y=Z.aiSdk.languageModel(X),G=kw({model:Y,prompt:$.query,abortSignal:$.abortSignal}),J="",W=0,K=50;for await(let L of G.textStream){J+=L;let E=Date.now();if(E-W>=K)W=E,yield{progress:J}}yield{progress:J};let[H,N,F]=await Promise.all([G.usage,G.sources,G.providerMetadata]),U=H.inputTokens??0,w=H.outputTokens??0;t$0(F);let O=[];if(N&&Array.isArray(N)){for(let L of N)if(L&&typeof L==="object"&&"sourceType"in L&&L.sourceType==="url"&&"url"in L&&typeof L.url==="string")O.push({url:L.url,title:"title"in L&&typeof L.title==="string"?L.title:void 0})}let D={inputTokens:U,outputTokens:w};if(w>SV&&Q.objectStorage){let L=`web-search/${crypto.randomUUID()}.md`,E=new TextEncoder().encode(J);try{return await Q.objectStorage.put(L,E,{contentType:"text/markdown"}),{text:J,citations:O,usage:D,resultUri:K7(L),preview:mX(J)}}catch(j){console.error("[web-search] Failed to upload to storage, returning inline",j)}}return{text:J,citations:O,usage:D,resultUri:null}}var aG$=B(()=>{S4();$6();rG$();L8();MV();RN()});function sG$($,Z){return Dw0($,{objectStorage:Z.objectStorage,toolOutputMap:Z.toolOutputMap,pendingImages:Z.pendingImages})}var eG$=B(()=>{gx()});import{z as $J$}from"zod";function XJ$($,Z){let{browserless:X,objectStorage:Q,toolOutputMap:Y}=Z;return f$({description:"Scrape the rendered HTML content of a web page. Use this when you need to read the content, structure, or data from a website. Returns the full HTML of the page after JavaScript has been executed. "+"For very large pages the result may be truncated \u2014 use read_tool_output to access the full content.",inputSchema:$0(fK4),execute:async(G,J)=>{let W=performance.now();try{let K;try{K=await fetch(`${X.baseUrl}/content?token=${encodeURIComponent(X.token)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:G.url}),signal:AbortSignal.timeout(ZJ$)})}catch(F){return{success:!1,error:F instanceof Error&&F.name==="TimeoutError"?`Browserless content fetch timed out after ${ZJ$}ms`:`Browserless content fetch failed: ${F instanceof Error?F.message:String(F)}`,url:G.url}}if(!K.ok){let F=await K.text().catch(()=>"Unknown error");return{success:!1,error:`Browserless content fetch failed (${K.status}): ${F.slice(0,vK4)}`,url:G.url}}let H=await K.text();Y.set(J.toolCallId,H);let N=$X(H);if(N>SV){let F=`scraped-pages/${crypto.randomUUID()}.html`,U=new TextEncoder().encode(H);try{await Q.put(F,U,{contentType:"text/html"});let w=mX(H);return{success:!0,uri:K7(F),preview:w,url:G.url,tokenCount:N}}catch(w){console.error("[scrape-url] Failed to upload to storage, returning inline",w)}}return{success:!0,content:H,url:G.url,tokenCount:N}}finally{let K=performance.now()-W;$.write({type:"data-tool-metadata",id:J.toolCallId,data:{latencyMs:K}})}}})}var ZJ$=45000,vK4=500,fK4;var QJ$=B(()=>{S4();RN();MV();fK4=$J$.object({url:$J$.string().url().refine(($)=>/^https?:\/\//i.test($),{message:"URL must use http or https"}).describe("The URL of the web page to scrape.")})});import{z as Lw0}from"zod";function yK4($,Z){let X=Z.waitUntil??"networkidle2",Q=Z.evaluate?JSON.stringify(Z.evaluate):"null";return`
1413
1413
  export default async function ({ page }) {
1414
1414
  const consoleLogs = [];
1415
1415
  const errors = [];
@@ -2734,7 +2734,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
2734
2734
  When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
2735
2735
 
2736
2736
  Respond with the structured verdict and a short reason.`,Gf$;var Wf$=B(()=>{S4();rw();s41();X56=e41.object({requiresReview:e41.boolean().describe("true if the changes should go through pull-request review"),reason:e41.string().describe("One short sentence explaining the decision (max ~120 chars)")});Gf$={requiresReview:!1,reason:""}});function Kf$($){let Z=$?.trim();if(!Z)return null;try{let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;return X.href}catch{return null}}function rj0($){return Kf$($?.previewServerUrl)??Kf$($?.productionUrl)}function Hf$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function Nf$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function Ff$($){let Z=Wh.get($);if(!Z)return;Wh.delete($),$61-=Z.bytes}function K56($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(Ff$($),Q>W56)return;Wh.set($,{etag:Z,body:X,bytes:Q}),$61+=Q;while($61>J56||Wh.size>G56){let Y=Wh.keys().next().value;if(Y===void 0)break;Ff$(Y)}}function Uf$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,N){let F=`${Hf$()}${K}`,U=Nf$(W,K)?Wh.get(F):void 0,w=await fetch(F,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&w.status===304)return{status:200,json:U.body};if(!w.ok&&!N?.allow?.includes(w.status)){let D=await w.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new m6(w.status,W,K,L)}let O=w.status===204?void 0:await w.json();if(w.status===200&&Nf$(W,K)){let D=w.headers.get("etag");if(D)K56(F,D,O)}return{status:w.status,json:O}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${oC(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${oC(W)}`,H=await fetch(`${Hf$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let N=await H.text().catch(()=>"");throw new m6(H.status,"GET",K,N.slice(0,300))}if(!H.body)throw new m6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new m6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new m6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:N}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return N.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${oC(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:N,json:F}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return N===204?null:F?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:N}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:N.number,html_url:N.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),N=H[0];return N?{number:N.number,html_url:N.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${oC(W)}...${oC(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${oC(W)}...${oC(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((N)=>({filename:N.filename,status:N.status,sha:N.sha,...N.previous_filename?{previousFilename:N.previous_filename}:{}}))}}}}function oC($){return $.split("/").map(encodeURIComponent).join("/")}var G56=512,J56=8388608,W56=262144,Wh,$61=0,m6;var rC=B(()=>{Wh=new Map;m6=class m6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function aj0($,Z,X){if(!X.connectionId)throw new m6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new m6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await Kx($,Q);return Uf$({owner:X.owner,repo:X.name,accessToken:Y})}var Z61=B(()=>{t50();rC()});function H56($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function sj0($){if(H56($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function Xr($){let Z=$;for(;;){let X;try{X=decodeURIComponent(Z)}catch{return Z}if(X===Z)return Z;Z=X}}function X61($){return sj0($),encodeURIComponent($)}function Qr($){let Z=[...$].sort((Y,G)=>{let J=`${Y.stem}.json`,W=`${G.stem}.json`;return J<W?-1:J>W?1:0}),X="{",Q=!0;for(let Y of Z){let G=Y.content.trim();if(G.length===0)continue;if(!Q)X+=",";Q=!1,X+=`${JSON.stringify(Xr(Y.stem))}:${G}`}return`${X}}`}var wf$=()=>{};var ej0=B(()=>{wf$()});function N56($){return $.startsWith("merged/")?"merged":"blobs"}function Q61($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=N56(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function Of$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Kh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function Bf$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),N=[],F=new Set;if(Y==="merged")for(let[U,w]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||w.area!=="merged")continue;N.push(U),F.add(U),H-=w.bytes,K-=w.bytes}for(let[U,w]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||F.has(U))continue;N.push(U),F.add(U),K-=w.bytes}for(let U of N)Kh($,U);return Kh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:N}}function Yr($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function Y61($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as Pf$}from"crypto";import{mkdir as Gr,readdir as F56,readFile as U56,rename as w56,rm as Af$,stat as Tf$,statfs as O56,unlink as B56,writeFile as D56}from"fs/promises";import{tmpdir as L56}from"os";import{dirname as E56,join as A7}from"path";function Hh($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function P56(){if($z0)return $z0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?A7(L56(),"studio-fast-preview-cache"):$;return $z0={enabled:Z!=="",root:Z,index:{maxTotalBytes:Hh("FAST_PREVIEW_CACHE_MAX_BYTES",2*Df$),maxMergedBytes:Hh("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*Zz0),maxEntryBytes:{blobs:Hh("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",Zz0),merged:Hh("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*Zz0)}},freeFloorBytes:Hh("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Df$),sweepIntervalMs:Hh("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},$z0}function A56(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function T56(){if($B)return;$B={hits:k$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:k$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:k$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:k$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:k$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},k$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Nh)return;$.observe(Nh.index.areaBytes.blobs,{area:"blobs"}),$.observe(Nh.index.areaBytes.merged,{area:"merged"})}),k$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Nh)return;let Z={blobs:0,merged:0};for(let X of Nh.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function R56($){aC.hits[$]+=1,$B?.hits.add(1,{area:$})}function Lf$($){aC.misses[$]+=1,$B?.misses.add(1,{area:$})}function G61(){aC.evictions+=1,$B?.evictions.add(1)}function KF($){aC.errors+=1,$B?.errors.add(1,{op:$})}function I56($){aC.invalidKeySkips+=1,$B?.errors.add(1,{op:`${$}_invalid_key`})}function J61(){return Ef$??=M56(),Ef$}async function M56(){let $=P56();if(!$.enabled)return null;T56();try{await Gr(A7($.root,"blobs"),{recursive:!0}),await Gr(A7($.root,"merged"),{recursive:!0}),await Gr(A7($.root,"tmp"),{recursive:!0})}catch{return KF("init"),null}let Z=[];try{Z=await Rf$($.root)}catch{KF("scan"),Z=[]}let X={root:$.root,index:Q61(Z,$.index),cfg:$};return Nh=X,V56(X),X}async function Xz0($){try{return await F56($)}catch{return[]}}async function Rf$($){let Z=[];for(let X of["blobs","merged"]){let Q=A7($,X);for(let Y of await Xz0(Q)){let G=A7(Q,Y);for(let J of await Xz0(G)){let W=A7(G,J);for(let K of await Xz0(W))try{let H=await Tf$(A7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function If$($,Z,X){if(!Y61(X))return null;try{return`blobs/${Yr($)}/${Yr(Z)}/${X}`}catch{return null}}function qf$($,Z,X){if(!Y61(X))return null;try{return`merged/${Yr($)}/${Yr(Z)}/${X}.json`}catch{return null}}async function Mf$($,Z){try{let X=await J61();if(!X)return null;if(Z===null)return Lf$($),null;try{let Q=await U56(A7(X.root,Z),"utf8");return Of$(X.index,Z),R56($),Q}catch{return Lf$($),null}}catch{return KF(`get_${$}`),null}}function kf$($,Z,X){return Mf$("blobs",If$($,Z,X))}function Sf$($,Z,X){return Mf$("merged",qf$($,Z,X))}async function k56($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await O56($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function Qz0($){try{await B56($)}catch{}}async function S56($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Kh($.index,X.value),await Qz0(A7($.root,X.value)),G61()}}catch{KF("emergency_evict")}}async function Vf$($,Z,X,Q){try{let Y=await J61();if(!Y)return;if(X===null){I56(Z);return}if(!await k56(Y)){aC.floorSkips+=1,$B?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=Bf$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){aC.admissionRefusals+=1;return}for(let K of J.evict)await Qz0(A7(Y.root,K)),G61();let W=A7(Y.root,"tmp",`stage-${Pf$()}`);try{await D56(W,Q,"utf8");let K=A7(Y.root,X);await Gr(E56(K),{recursive:!0}),await w56(W,K)}catch(K){if(Kh(Y.index,X),await Qz0(W),KF(Z),K?.code==="ENOSPC")await S56(Y)}}catch{KF(Z)}}function Yz0($,Z,X,Q){return Vf$("blobs","put_blob",If$($,Z,X),Q)}function Cf$($,Z,X,Q){return Vf$("merged","put_merged",qf$($,Z,X),Q)}async function _f$(){try{let $=await J61();if(!$)return null;let Z=A7($.root,"tmp",Pf$());return await Gr(Z,{recursive:!0}),Z}catch{return KF("make_scratch"),null}}async function vf$($){try{await Af$($,{recursive:!0,force:!0})}catch{KF("remove_scratch")}}function V56($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;jf$=new AbortController,C$(Math.random()*Z,{signal:jf$.signal}).then(()=>{zf$($);let X=setInterval(()=>void zf$($),Z);X.unref?.(),q56=X}).catch(()=>{})}async function zf$($){try{let Z=Q61(await Rf$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;Kh(Z,G),await Qz0(A7($.root,G)),G61()}$.index=Z;let Q=A7($.root,"tmp"),Y=Date.now();for(let G of await Xz0(Q)){let J=A7(Q,G);try{let W=await Tf$(J);if(Y-W.mtimeMs>z56)await Af$(J,{recursive:!0,force:!0})}catch{}}}catch{KF("sweep")}}var j56=1024,Zz0,Df$,z56=3600000,$z0=null,$B=null,aC,Ef$=null,Nh=null,q56=null,jf$=null;var ff$=B(()=>{$6();C6();Zz0=1024*j56,Df$=1024*Zz0;aC=A56()});function bf$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as C56,stat as _56}from"fs/promises";import{join as xf$}from"path";function v56($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function f56(){return yf$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),yf$}async function gf$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new Jr(`invalid blocks path prefix: ${X}`);let Y=await f56(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...v56(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(F){throw new Jr("failed to spawn tar",{cause:F})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let F=(await K).trim().slice(0,500);throw new Jr(`tar exited with code ${H}${F?`: ${F}`:""}`)}let N=await b56(Z,Q);if(N.length===0)throw new Jr(`tar extracted no ${G} members into ${Z}`);return N}async function b56($,Z){let X=xf$($,...Z.split("/")),Q;try{Q=await C56(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=xf$(X,G);try{if(!(await _56(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var Jr,yf$=null;var hf$=B(()=>{Jr=class Jr extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as x56}from"crypto";import{readFile as y56}from"fs/promises";async function Wr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof m6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof m6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function h56(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return cf$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):cf$}function u56($){lf$??=k$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),lf$.add(1,{path:$})}async function Gz0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function Jz0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function W61($,Z){let X=`${Jz0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function K61($,Z){return $.filter((X)=>Xr(X.stem)===Z).map((X)=>X.path).sort()}function df$($,Z,X,Q){return Yz0($,Z,X,Q)}function c56($,Z){if(!Z)return $;return x56("sha1").update(`${$}:${Z}`).digest("hex")}async function mf$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await Wr($,Z):await $.getHeadSha(Z);return l56.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>d56($,Y,X))}async function d56($,Z,X){let{owner:Q,repo:Y}=$,G=c56(Z,X),J=await Sf$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=W61(K,X),N=new Map;if(await Gz0(H,uf$,async(O)=>{let D=await kf$(Q,Y,O.sha);if(D!==null)N.set(O.path,D)}),H.length-N.size>g56){let O=await m56($,Z,X,H);if(u56(O!==null?"tarball":"blobs"),O!==null)for(let[D,L]of O)N.set(D,L)}let U=await Gz0(H,uf$,async(O)=>{let D=N.get(O.path);if(D!==void 0)return{stem:O.stem,content:D};let L=await $.getBlobText(O.sha);return await Yz0(Q,Y,O.sha,L),{stem:O.stem,content:L}}),w=Qr(U);return await Cf$(Q,Y,G,w),{sha:Z,decofile:w}}async function m56($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=h56(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await _f$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await gf$(K,W,Jz0(X)),N=new Map(Q.map((U)=>[U.path,U.sha])),F=new Map;for(let U of H){let w=N.get(U.path);if(w===void 0)continue;let O=await y56(U.diskPath,"utf8");await Yz0($.owner,$.repo,w,O),F.set(U.path,O)}return F}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await vf$(W)}}var uf$=12,g56=50,cf$=134217728,lf$=null,l56;var Wz0=B(()=>{ej0();C6();ff$();rC();hf$();l56=bf$()});async function Kz0($,Z){let X=await $.getDefaultBranch(),Q=await Wr($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function Hz0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,i56),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((N)=>N.type==="blob").map((N)=>[N.path,N.sha])),H=await Gz0(G,n56,async(N)=>{let F=N.previousFilename??N.filename,U=N.status==="added"?void 0:K.get(F),w=U?await $.getBlobText(U):null,O=N.status==="removed"?null:await $.getBlobText(N.sha);return[N.filename,{from:w,to:O}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function if$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof m6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new m6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await o56($,Z,X)}async function o56($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=p56)throw new m6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=[];for(let U of J){let w=K.get(U.filename);if(U.status==="removed"||!w)H.push({path:U.filename,mode:"100644",type:"blob",sha:null});else H.push({path:U.filename,mode:"100644",type:"blob",sha:w.sha});if(U.previousFilename&&U.previousFilename!==U.filename)H.push({path:U.previousFilename,mode:"100644",type:"blob",sha:null})}let N=await $.createTree(await $.getCommitTreeSha(G),H),F=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:N,parentShas:[Y,G]});try{await $.updateRef(Z,F);return}catch(U){if(U instanceof m6&&U.status===422&&Q<t56)continue;throw U}}}var i56=200,n56=12,p56=300,t56=3;var nf$=B(()=>{rC();Wz0()});function a56($){if(!$||$.includes(".."))return!1;return r56.test($)}function pf$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!a56(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function tf$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var r56;var of$=B(()=>{r56=/^[\w./@-]+$/});function H61($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Kr($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function rf$($,Z,X,Q){if(!Q.connectionId)throw new Fh("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Fh(p7);await Vw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:p7;throw new Fh(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await Cw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Jh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await tw(H,s56).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var s56=10485760,Fh;var N61=B(()=>{WN();oj0();ei();Hx();Fh=class Fh extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function $96($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!e56.test(Z))throw Error(`Invalid branch name: ${$}`)}function sC($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(X96)])}function eC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Hr($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Kr(Z,X);if(!Y)throw new m6(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return aj0(Q,G.id,Y)}function F61($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,E9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,E9)}async function ef$($){try{let Z=await Hr($),X=await Kz0(Z,$.get("vmClaim").branch);return $.json(X,200,E9)}catch(Z){return F61($,Z)}}function Fz0($,Z){let Q=(Nz0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Nz0.set($,Y),Y.finally(()=>{if(Nz0.get($)===Y)Nz0.delete($)}),Q}async function yZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,E9);let Q=eC($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.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",...E9}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?Y96(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...E9}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function Y96($){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 Uz0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function G96($){return $b$.includes($)}var e56,af$=524288,Z96=65536,X96=1e4,sf$=2000,Q96,Nz0,E9,$b$,Zb$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",Q96),$.post("/:virtualMcpId/:branch/write",(X)=>yZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>yZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>yZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>yZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>yZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>yZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>yZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:sC(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return yZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return yZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>yZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>yZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!G96(Q))return X.json({error:`step must be one of: ${$b$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=o(X.var.studioContext),J=qx(Y.virtualMcpMetadata);try{await RU0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return yZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return WF(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return ev$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return ef$(X);return Z(X)});let Z=(X)=>yZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(sf$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return ef$(X);return yZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(sf$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await Hr(X),J=await Hz0(G,Q.branch,Y.base);return X.json(J,200,E9)}catch(Y){return F61(X,Y)}return yZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,E9);let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Fz0(Y,async()=>{try{await n41(W,Q,Y);let K=Kr(G,J);if(K)await rf$(W,Q,Y,K)}catch(K){if(K instanceof Fh)return X.json({error:K.message},403,E9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,E9)}return yZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,E9);return Fz0(Q,()=>yZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Fz0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Hr(X),H=W.base??await K.getDefaultBranch();return await if$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,E9)}catch(W){return F61(X,W)}});let Y=eC(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Fz0(G,async()=>{try{await n41(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,E9)}return yZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",FZ({maxSize:af$,onError:(X)=>X.json({error:"Payload too large"},413,E9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=eC(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=o41(N)&&U?[N,F]:Y?await Promise.all([Uz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Uz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hr(X);return Promise.all([Kz0(L,Q.branch),Hz0(L,Q.branch)])})(),D=await Yf$(K,w,O);return X.json(D,200,E9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E9);return X.json({error:N},502,E9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",FZ({maxSize:af$,onError:(X)=>X.json({error:"Payload too large"},413,E9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=eC(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=o41(N)&&U?[N,F]:Y?await Promise.all([Uz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Uz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Hr(X);return Promise.all([Kz0(L,Q.branch),Hz0(L,Q.branch)])})(),D=await Jf$(K,w,O,typeof H.language==="string"?H.language:void 0);return X.json(D,200,E9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,E9);return X.json({error:N},502,E9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=H61(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",FZ({maxSize:Z96,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=eC(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=pf$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=tf$(G,W.resolveType),H=H61(K),N;try{N=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await N.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var Xb$=B(()=>{C8();oO();Gh();i41();JN();av$();T3();mw();sv$();$f$();Im0();ai();s41();Wf$();Z61();rC();nf$();of$();N61();e56=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Q96=tj0(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{$96(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=ji({orgId:Y.id,virtualMcpId:G,branch:J}),H=await DN(X,J,Q),N=rv$({userId:H,projectRef:K}),F=W.metadata??null;if(F?.fastPreview===!0&&rj0(F))return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await dX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});Nz0=new Map;E9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};$b$=["clone","install","start"]});function Qb$($,Z,X){let Q=U61.get($);if(!Q)Q={pending:null,running:!1},U61.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)W96($,Q);return G}async function W96($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await K96(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)U61.delete($)}}async function K96($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Wr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=W61(W,Q),H=[],N=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,D]of $.set){let L=K61(K,O),E=`${JSON.stringify(D,null,2)}
2737
- `,j=await Z.createBlob(E);await df$(Z.owner,Z.repo,j,E);let z=L[0]??`${Jz0(Q)}/${X61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of K61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Qr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:H96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof m6&&O.status===422)||Y>=J96-1)throw O;await C$(uZ(2000,200,Y,2,0.5))}}}function H96($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return ac0(Q,$.deps.coAuthor)}var J96=3,U61;var Yb$=B(()=>{LU0();ej0();$6();rC();Wz0();U61=new Map});import{createHmac as Gb$,randomBytes as N96,timingSafeEqual as F96}from"crypto";function Jb$(){if(wz0)return wz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wz0=$?Buffer.from($):N96(32),wz0}function w61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+U96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Gb$("sha256",Jb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Wb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Gb$("sha256",Jb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!F96(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var U96=21600000,wz0=null;var Kb$=B(()=>{M$()});import{z as Uh}from"zod";function O96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&w96.test($)}function Nb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Oz0($){let Z=$.get("decofileScope");return aj0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bz0($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Fb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Hb$),$.use("/:virtualMcpId/:branch/*",Hb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await mf$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Nb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=B96.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{sj0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Oz0(Z),W=await Qb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jh(Q)},G),K=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Nb$(Z)})}catch(J){return Bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof m6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof m6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return Bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof m6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Bz0(Z,Q)}}),$}var w96,B96,Hb$;var Ub$=B(()=>{ej0();C8();i41();oj0();N61();Z61();Yb$();Kb$();rC();Wz0();w96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;B96=Uh.object({set:Uh.record(Uh.string(),Uh.unknown()).optional(),delete:Uh.array(Uh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Hb$=tj0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!O96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Wb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!rj0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Kr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var wb$=($)=>{let Z=new U1;if(Z.use("*",uC),Z.route("/",Fj0()),Z.route("/",fV$()),Z.route("/",yv$()),Z.route("/",fv$()),Z.route("/",ij0()),Z.route("/tools",mv$()),Z.route("/",cv$()),Z.route("/",Dv$({kvStorage:$.kvStorage})),Z.route("/",Ov$()),Z.route("/fs",Mv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Zb$()),Z.route("/decofile",Fb$()),Z.route("/",Cv$()),Z.route("/deco-sites",wj0()),Z.route("/sso",Gj0()),Z.route("/",nj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",qV$()),$.mountDevAssets)Z.route("/dev-assets",Oj0({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("/",Rk$()),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",Sv$()),Z.route("/mcp",kO0()),Z.route("/mcp/self",mj0()),Z.route("/mcp",CO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ob$=B(()=>{C8();U81();MV$();L81();Bj0();ko();N81();Bv$();Lv$();kv$();un();X81();_O0();g41();Vv$();_v$();bv$();gv$();lv$();u41();iv$();c41();SO0();Xb$();Ub$()});function L96($){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}}))}async function E96($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(D96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var D96=1e4,j96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Bb$=()=>{let $=new U1;return $.use("*",j96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await E96(Q,Y);return Z.json({apps:L96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Db$=B(()=>{C8();M$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function S96($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function V96($,Z,X){try{return JSON.parse($)}catch{throw new jb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function C96($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:V96(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function _96($){let Z=$.map((X)=>{let Q=X.function.parameters?RY(X.function.parameters):RY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function v96($){if(!$)return;return{openai:{response_format:$}}}function f96(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Lb$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Eb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var z96=256,P96,A96,T96,R96,I96,q96,M96,k96,jb$,zb$,Pb$;var Ab$=B(()=>{S4();C8();Gh();uN();P96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),A96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),T96=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(A96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),R96=M1.object({type:M1.literal("text")}),I96=M1.object({type:M1.literal("json_object")}),q96=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),M96=M1.union([R96,I96,q96]),k96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(T96),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(P96).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:M96.optional(),user:M1.string().optional()});jb$=class jb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zb$=new U1;zb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=k96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=S96(G.model);if(!J)return $.json(lK("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}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>HD(j.providerId));if(!E)return $.json(lK("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=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=C96(G.messages),U=G.tools?_96(G.tools):void 0,w=v96(G.response_format),O=f96(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=Lb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=z96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Eb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Lb$(N,F,U,G,w,$.req.raw.signal),E=await qw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Eb$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Pb$=zb$});var Rb$;var Tb$=B(()=>{Rb$={name:"decocms",version:"4.207.0",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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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","@nats-io/jwt":"0.0.10-5","@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 y96(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??x96}}var Ib$,x96="https://ph.studio.decocms.com",qb$;var Mb$=B(()=>{C8();_y0();fV();PZ();M$();a$1();Tb$();Ib$=new U1;Ib$.get("/",($)=>{let Z={version:Rb$.version,theme:Fc1(),...eD().logo&&{logo:eD().logo},...wK()&&{internalUrl:uM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:mS$(),posthog:y96(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});qb$=Ib$});function wh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function O61($){return(wh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Sb$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(wh($))}&sz=${Z}`}function kb$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function Vb$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?kb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):kb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var $_,g96,h96,u96,c96,Cb$;var _b$=B(()=>{$_=c0.enum(["good","bad","neutral"]),g96=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:$_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),h96=c0.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},c0.array(g96)),u96={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},c96=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:$_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:$_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(h96).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:$_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:$_.optional()})).min(1)})]),Cb$=c0.object({...u96,template:c96})});function Dz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Cb$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var B61=B(()=>{_b$()});import{join as vb$}from"path";async function d96($){try{let Z=await fetch(`${gW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(l96)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dz0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||O61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function mY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function m96($,Z){let X=wh($),Q=Z?.brand?.trim()||O61(X),Y=Sb$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Vb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${mY(W)}</title>`,`<meta name="description" content="${mY(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="${mY(W)}" />`,`<meta property="og:description" content="${mY(K)}" />`,`<meta property="og:url" content="${mY(J)}" />`,`<meta property="og:image" content="${mY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mY(W)}" />`,`<meta name="twitter:description" content="${mY(K)}" />`,`<meta name="twitter:image" content="${mY(H)}" />`,`<meta name="twitter:image:alt" content="${mY(N)}" />`,`<link rel="canonical" href="${mY(J)}" />`,`<link rel="icon" href="${mY(Y)}" sizes="any" />`].join(`
2737
+ `,j=await Z.createBlob(E);await df$(Z.owner,Z.repo,j,E);let z=L[0]??`${Jz0(Q)}/${X61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of K61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Qr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:H96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof m6&&O.status===422)||Y>=J96-1)throw O;await C$(uZ(2000,200,Y,2,0.5))}}}function H96($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return ac0(Q,$.deps.coAuthor)}var J96=3,U61;var Yb$=B(()=>{LU0();ej0();$6();rC();Wz0();U61=new Map});import{createHmac as Gb$,randomBytes as N96,timingSafeEqual as F96}from"crypto";function Jb$(){if(wz0)return wz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wz0=$?Buffer.from($):N96(32),wz0}function w61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+U96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Gb$("sha256",Jb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Wb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Gb$("sha256",Jb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!F96(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var U96=21600000,wz0=null;var Kb$=B(()=>{M$()});import{z as Uh}from"zod";function O96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&w96.test($)}function Nb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Oz0($){let Z=$.get("decofileScope");return aj0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Bz0($,Z){if(Z instanceof m6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Fb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Hb$),$.use("/:virtualMcpId/:branch/*",Hb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await mf$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Nb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=B96.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{sj0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Oz0(Z),W=await Qb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jh(Q)},G),K=w61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Nb$(Z)})}catch(J){return Bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof m6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof m6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return Bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Oz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof m6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Bz0(Z,Q)}}),$}var w96,B96,Hb$;var Ub$=B(()=>{ej0();C8();i41();oj0();N61();Z61();Yb$();Kb$();rC();Wz0();w96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;B96=Uh.object({set:Uh.record(Uh.string(),Uh.unknown()).optional(),delete:Uh.array(Uh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Hb$=tj0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!O96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Wb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!rj0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Kr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var wb$=($)=>{let Z=new U1;if(Z.use("*",uC),Z.route("/",Fj0()),Z.route("/",fV$()),Z.route("/",yv$()),Z.route("/",fv$()),Z.route("/",ij0()),Z.route("/tools",mv$()),Z.route("/",cv$()),Z.route("/",Dv$({kvStorage:$.kvStorage})),Z.route("/",Ov$()),Z.route("/fs",Mv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Zb$()),Z.route("/decofile",Fb$()),Z.route("/",Cv$()),Z.route("/deco-sites",wj0()),Z.route("/sso",Gj0()),Z.route("/",nj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",qV$()),$.mountDevAssets)Z.route("/dev-assets",Oj0({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("/",Rk$()),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",Sv$()),Z.route("/mcp",kO0()),Z.route("/mcp/self",mj0()),Z.route("/mcp",CO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ob$=B(()=>{C8();U81();MV$();L81();Bj0();ko();N81();Bv$();Lv$();kv$();un();X81();_O0();g41();Vv$();_v$();bv$();gv$();lv$();u41();iv$();c41();SO0();Xb$();Ub$()});function L96($){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}}))}async function E96($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(D96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var D96=1e4,j96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Bb$=()=>{let $=new U1;return $.use("*",j96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await E96(Q,Y);return Z.json({apps:L96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Db$=B(()=>{C8();M$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function S96($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function V96($,Z,X){try{return JSON.parse($)}catch{throw new jb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function C96($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:V96(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function _96($){let Z=$.map((X)=>{let Q=X.function.parameters?RY(X.function.parameters):RY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function v96($){if(!$)return;return{openai:{response_format:$}}}function f96(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Lb$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Eb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var z96=256,P96,A96,T96,R96,I96,q96,M96,k96,jb$,zb$,Pb$;var Ab$=B(()=>{S4();C8();Gh();uN();P96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),A96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),T96=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(A96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),R96=M1.object({type:M1.literal("text")}),I96=M1.object({type:M1.literal("json_object")}),q96=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),M96=M1.union([R96,I96,q96]),k96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(T96),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(P96).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:M96.optional(),user:M1.string().optional()});jb$=class jb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zb$=new U1;zb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=k96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=S96(G.model);if(!J)return $.json(lK("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}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>HD(j.providerId));if(!E)return $.json(lK("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=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=C96(G.messages),U=G.tools?_96(G.tools):void 0,w=v96(G.response_format),O=f96(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=Lb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=z96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Eb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Lb$(N,F,U,G,w,$.req.raw.signal),E=await qw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Eb$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Pb$=zb$});var Rb$;var Tb$=B(()=>{Rb$={name:"decocms",version:"4.207.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run 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",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.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","@nats-io/jwt":"0.0.10-5","@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 y96(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??x96}}var Ib$,x96="https://ph.studio.decocms.com",qb$;var Mb$=B(()=>{C8();_y0();fV();PZ();M$();a$1();Tb$();Ib$=new U1;Ib$.get("/",($)=>{let Z={version:Rb$.version,theme:Fc1(),...eD().logo&&{logo:eD().logo},...wK()&&{internalUrl:uM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:mS$(),posthog:y96(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});qb$=Ib$});function wh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function O61($){return(wh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Sb$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(wh($))}&sz=${Z}`}function kb$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function Vb$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?kb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):kb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var $_,g96,h96,u96,c96,Cb$;var _b$=B(()=>{$_=c0.enum(["good","bad","neutral"]),g96=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:$_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),h96=c0.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},c0.array(g96)),u96={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},c96=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:$_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:$_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:$_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(h96).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:$_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:$_.optional()})).min(1)})]),Cb$=c0.object({...u96,template:c96})});function Dz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Cb$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var B61=B(()=>{_b$()});import{join as vb$}from"path";async function d96($){try{let Z=await fetch(`${gW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(l96)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=Dz0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||O61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function mY($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function m96($,Z){let X=wh($),Q=Z?.brand?.trim()||O61(X),Y=Sb$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Vb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${mY(W)}</title>`,`<meta name="description" content="${mY(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="${mY(W)}" />`,`<meta property="og:description" content="${mY(K)}" />`,`<meta property="og:url" content="${mY(J)}" />`,`<meta property="og:image" content="${mY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${mY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${mY(W)}" />`,`<meta name="twitter:description" content="${mY(K)}" />`,`<meta name="twitter:image" content="${mY(H)}" />`,`<meta name="twitter:image:alt" content="${mY(N)}" />`,`<link rel="canonical" href="${mY(J)}" />`,`<link rel="icon" href="${mY(Y)}" sizes="any" />`].join(`
2738
2738
  `)}function i96($,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}
2739
2739
  </head>`)}function fb$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=wh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(vb$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${gW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(n96)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?vb$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await d96(wh(Q)),K=m96(Q,W);return X.html(i96(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var l96=2500,n96=1e4;var bb$=B(()=>{C8();B61();wL();M$()});function Nr($,Z){return fetch(`${gW({})}${$}`,Z)}async function p96($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Nr(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=Dz0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var t96,HF,xb$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},yb$;var gb$=B(()=>{C8();MG();wL();B61();t96=new Set(["complete","errored","terminated","unknown"]),HF=new U1;HF.use("*",async($,Z)=>{let X=await j8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});HF.use("/link-token/*",xb$);HF.use("/suggest",xb$);HF.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await p96(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});HF.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Nr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${UL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.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)}});HF.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Nr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${UL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:t96.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});HF.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Nr(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});HF.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Nr(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});yb$=HF});import{createHmac as o96,timingSafeEqual as r96}from"crypto";function ub$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")Y=U;else if(F==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>a96)return!1;let W=o96("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&r96(K,N)})}function cb$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=KJ(Z),Q=KJ(KJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:dK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function lb$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function dK($){return typeof $==="string"?$:void 0}function KJ($){return typeof $==="object"&&$!==null?$:void 0}function Lz0($){return typeof $==="number"?new Date($*1000):null}function E61($){return dK($)??dK(KJ($)?.id)}function s96($){return E61($.subscription)??dK(KJ(KJ($.parent)?.subscription_details)?.subscription)}function e96($){let Z=Lz0($.current_period_end);if(Z)return Z;let X=KJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=KJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function D61($,Z){let X=Lz0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function L61($,Z){let X=Lz0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function $Z6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=dK(KJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(dK(KJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(dK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=dK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(KJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:KJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(dK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=E61(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(D61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:E61(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=dK(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&D61(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":lb$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:e96(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=s96(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(D61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:Lz0(X.period_end),lastStripeEventAt:L61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function ZZ6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:lb$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function hb$($,Z){let X=ZZ6($,Z);if(!X)return;aJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:jd1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function db$($){let Z=new fW(m8().db),X=await $Z6(Z,$);if(!(X.handled&&X.topUp))hb$($,X);if(X.handled&&X.topUp)await SU$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),hb$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await fo1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof W3&&(Q.status===400||Q.status===404)))throw Q}return X}var a96=300;var mb$=B(()=>{jG();x4();U40();om();nr0()});var XZ6=1048576,j61;var ib$=B(()=>{C8();oO();M$();mb$();j61=new U1;j61.post("/webhook",FZ({maxSize:XZ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=y0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!ub$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=cb$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await db$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as QZ6}from"crypto";function GZ6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return QZ6(Buffer.from(Y),Buffer.from(Q))}var YZ6=5242880,z61;var nb$=B(()=>{C8();oO();ti();z61=new U1;z61.post("/webhook",FZ({maxSize:YZ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!GZ6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await jm0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function pb$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var tb$,JZ6,WZ6,ob$;var rb$=B(()=>{C8();rJ();ux();ub();tb$=new U1,JZ6=["range","if-none-match","if-modified-since"],WZ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];tb$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ug($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new e1(401,{message:"Authentication required"})}if(!X)throw new e1(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new e1(400,{message:"Missing file key"});let Y=await Rn(Q,Z);if(!Y)throw new e1(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&X3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new e1(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return pb$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of JZ6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new e1(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new e1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of WZ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),pb$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});ob$=tb$});var Fr=C((Z_)=>{var KZ6=Z_&&Z_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),HZ6=Z_&&Z_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))KZ6(Z,$,X)};Object.defineProperty(Z_,"__esModule",{value:!0});HZ6(QY(),Z_)});var eb$=C((ab$)=>{Object.defineProperty(ab$,"__esModule",{value:!0});ab$.version=void 0;ab$.version="3.4.0"});var Xx$=C((mK)=>{var NZ6=mK&&mK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(mK,"__esModule",{value:!0});mK.NodeTransport=mK.VERSION=void 0;mK.nodeResolveHost=DZ6;var i6=Fr(),FZ6=z0("net"),P61=z0("tls"),UZ6=z0("path"),$x$=z0("fs"),wZ6=NZ6(z0("dns")),OZ6=eb$();mK.VERSION=OZ6.version;var BZ6="nats.js";class Zx${socket;version;lang;yields=[];signal=(0,i6.deferred)();closedNotification=(0,i6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=BZ6,this.version=mK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,i6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw i6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new i6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new i6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,i6.deferred)(),X,Q=(0,FZ6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,i6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=i6.DataBuffer.concat(...this.yields),Y=(0,i6.extractProtocolMessage)(Q);if(Y!=="")try{let G=i6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,i6.deferred)();try{if($=(0,UZ6.resolve)($),!(0,$x$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,$x$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,i6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new i6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,i6.deferred)();try{let Y=(0,P61.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new i6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,i6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new i6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,i6.deferred)();try{let Q=(0,P61.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new i6.errors.ConnectionError(Q.message,{cause:Q}))}return X}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,i6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,i6.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 P61.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,i6.render)($)}`);let Z=(0,i6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,i6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,i6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}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(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}mK.NodeTransport=Zx$;function DZ6($){let Z=(0,i6.deferred)();return wZ6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Wx$=C((Jx$)=>{Object.defineProperty(Jx$,"__esModule",{value:!0});Jx$.connect=LZ6;var Qx$=Xx$(),Yx$=Fr(),Gx$=Fr();function LZ6($={}){if((0,Gx$.hasWsProtocol)($))return Promise.reject(Gx$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Yx$.setTransportFactory)({factory:()=>{return new Qx$.NodeTransport},dnsResolveFn:Qx$.nodeResolveHost}),Yx$.NatsConnectionImpl.connect($)}});var Kx$=C((NF)=>{var jZ6=NF&&NF.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),zZ6=NF&&NF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))jZ6(Z,$,X)};Object.defineProperty(NF,"__esModule",{value:!0});NF.connect=void 0;var PZ6=Wx$();Object.defineProperty(NF,"connect",{enumerable:!0,get:function(){return PZ6.connect}});zZ6(Fr(),NF)});function Ux$($){let Z=$?.connectFn??IZ6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!G)try{X=await Z({servers:U,timeout:RZ6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=uZ(TZ6,AZ6,O-1,2,0.5);await C$(D)}}return{init(U,w){if(Y)return;Y=!0,G=!1;let O=w?.creds?Hx$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Fx$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function IZ6($){return Nx$.connect($)}var Hx$,Nx$,Fx$,AZ6=100,TZ6=3000,RZ6=3000;var wx$=B(()=>{$6();Hx$=k(hh(),1),Nx$=k(Kx$(),1),Fx$=k(LB(),1)});function A61($,Z){return`${$}.${Z}`}class T61{cache;constructor($){this.cache=qg({ttlMs:$?.ttlMs??qZ6,maxSize:$?.maxSize??MZ6})}async get($,Z){return this.cache.get(A61($,Z))??null}async set($,Z,X){this.cache.set(A61($,Z),X)}async invalidate($,Z){this.cache.delete(A61($,Z))}teardown(){this.cache.clear()}}var qZ6=600000,MZ6=5000;var Ox$=()=>{};function Ez0($,Z){return`${$}:${Z}`}function R61($){let Z=qg({ttlMs:$?.ttlMs??kZ6,maxSize:$?.maxSize??SZ6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(Bx$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(Ez0(K,H))},set(K,H,N){Z.set(Ez0(K,H),N)},invalidate(K,H){Z.delete(Ez0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Bx$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(Ez0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Bx$="studio.ai-provider-keys.invalidate",kZ6=30000,SZ6=5000;var Dx$=()=>{};class I61{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Lx$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.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 X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Lx$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Lx$;var Ex$=B(()=>{Lx$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var jx$=($)=>{let Z;return()=>Z??=$()},q61,M61;var zx$=B(()=>{C6();q61=jx$(()=>k$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),M61=jx$(()=>k$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function xZ6(){return{name:kN,subjects:[`${ow0}.>`],storage:t3.StorageType.File,max_age:_Z6,max_bytes:fZ6,max_msgs_per_subject:bZ6,discard:t3.DiscardPolicy.Old,retention:t3.RetentionPolicy.Limits,duplicate_window:vZ6,num_replicas:1}}class Tx${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 Px$($){let Z=Ax$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function uZ6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,CZ6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function cZ6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class k61{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=xZ6(),X=await cZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await t3.jetstreamManager($);try{await Q.streams.info(kN),await Q.streams.update(kN,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(kN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:cZ6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=uZ6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=BW$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=mn0(H,{runId:Z}),U=performance.now()-N;if(q61().record(U),M61().add(1,{"org.id":Q??"unknown"}),hZ6?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)G.publish(Y,w.subject,w.data,w.headers?Px$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),gZ6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=mn0(Z,{runId:$,dedup:X});if(q61().record(performance.now()-Y),M61().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:Px$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=OW$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?t3.DeliverPolicy.New:t3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=NO($),W;try{W=await(await Q.consumers.get(kN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=$O0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(rw0()).pipeThrough(aw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(G){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(kN,{filter:NO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var t3,Ax$,VZ6=($)=>{let Z;return()=>Z??=$()},CZ6,_Z6=86400000000000,vZ6=120000000000,fZ6=4294967296,bZ6=500000,yZ6,gZ6,hZ6;var Rx$=B(()=>{$6();in0();ZO0();sw0();C6();zx$();t3=k(LB(),1),Ax$=k(hh(),1),CZ6=VZ6(()=>k$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));yZ6=process.env.STREAM_ENCODE_TRACE==="1",gZ6=process.env.DECOPILOT_STREAM_TRACE==="1";hZ6=yZ6?new Tx$:null});function jz0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,LW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var Ix$=B(()=>{L8()});class S61{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 tZ6($){return $ instanceof zQ}function oZ6($,Z){return Z-$>=nZ6}class V61{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??lZ6;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??mZ6,X=this.options.itemIntervalMs??dZ6,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),Y=Q.at(-1);this.cursor=Q.length===Z&&Y?{updatedAt:Y.updatedAt,id:Y.id}:null;for(let{id:G,organizationId:J}of Q)try{if(await this.reconcileItem(G,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}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()-NJ$),Ip0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-pZ6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await wn0(this.taskBoard,Y,Q),await On0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==L4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await SN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),tZ6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+iZ6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),y4(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!oZ6(PL(X),Date.now()))return;await GO($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==L4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z),Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;if(Q.length===0)return await this.handOffReviewWithoutPr(Y,X),!1;if(await PK$(Y,X))return!0;let G=await Promise.all(Q.map(async(J)=>({...J,...await Ap0(Y,Z,J)})));if(G.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${G.length} PR(s)) \u2014 proceeding on unknown`);if(!Pp0(G))return!1;return await JO0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var lZ6=60000,dZ6=300000,mZ6=50,iZ6=60000,nZ6=900000,pZ6=120000;var qx$=B(()=>{kZ();Op0();FO();BO0();ZZ();K3();qp0();sx()});import{readdir as rZ6,rm as zz0}from"fs/promises";import{join as Pz0}from"path";async function Az0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-aZ6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await X_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Mx$($,Y,Z);else if(!Y.startsWith(".")){let G=Pz0($,Y),J=await X_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Mx$(G,K,Z)}if((await X_(G)).length===0)await zz0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Mx$($,Z,X){let Q=0,Y=Pz0($,Z),G=await X_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=Pz0(Y,W),H=await X_(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=Pz0(K,F);await zz0(w,{recursive:!0,force:!0}),Q++}}if((await X_(K)).length===0)await zz0(K,{recursive:!0,force:!0})}if((await X_(Y)).length===0)await zz0(Y,{recursive:!0,force:!0});return Q}async function X_($){try{return(await rZ6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var aZ6=30;var C61=()=>{};import{DBOS as _61,SchedulerMode as sZ6}from"@dbos-inc/dbos-sdk";async function $76(){let $=[wJ(),Q_(),nK()],Z=0;for(let X of $)try{Z+=await Az0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function Z76($,Z){await _61.runStep(()=>$76(),{name:"monitoringRetention"})}function Sx$(){if(kx$)return;kx$=!0;let $=_61.registerWorkflow(Z76,{name:"monitoringRetentionWorkflow"});_61.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:eZ6,mode:sZ6.ExactlyOncePerIntervalWhenActive})}var eZ6="23 4 * * *",kx$=!1;var Vx$=B(()=>{eQ();C61()});function Cx$($){return async(Z,X)=>{let Q=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","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await yK.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await g$1($.db,Z,Q.role);return Y.boundAuth=y$1({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new oD(X,void 0,Y.boundAuth,Q.role,"self"),gg(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var _x$=B(()=>{rD();Cg()});function X76(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function Y76(){for(let $ of Q76)$()}function vx$($){let Z=[...v61.logs,$];v61={...v61,logs:Z.length>500?Z.slice(-500):Z},Y76()}function f61(){return G76}var v61,Q76,G76=!1;var b61=B(()=>{v61=X76(),Q76=new Set});import{EventEmitter as J76}from"events";var x61;var fx$=B(()=>{b61();x61=new J76;x61.on("request",($)=>{vx$($)})});function bx$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=Oh(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Oh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Z5.tool}${w}${Z5.dim}(${L})${Z5.reset}`}else if(U.method)G=`${Z5.dim}${Oh(U.method)}${Z5.reset}`}}catch{}}let W=Oh(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${Z5.mcp}${Oh(N.slice(0,12))}\u2026${Z5.reset}`}else if(Y==="/mcp")W=`${Z5.mcp}/mcp${Z5.reset}`;else if(Y==="/mcp/registry")W=`${Z5.mcp}/mcp/registry${Z5.reset}`;let K=K76(Q),H=J?"\u25C0":"\u2190";if(!f61())console.log(`${Z5.dim}${H}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=W76(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!f61())console.log(`${Z5.dim}${O}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""} ${U}${F}${Z5.reset} ${Z5.duration}${w}${Z5.reset}`);x61.emit("request",{method:Q,path:Oh(Y),status:F,duration:N,timestamp:new Date})}}}var Z5,W76=($)=>{if($>=500)return Z5.serverError;if($>=400)return Z5.clientError;if($>=300)return Z5.redirect;return Z5.ok},K76=($)=>{return Z5[$]||Z5.reset},Oh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var xx$=B(()=>{b61();fx$();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 ux$}from"crypto";import{mkdir as H76,readdir as N76,rm as yx$,stat as cx$}from"fs/promises";import{join as g61,relative as F76}from"path";import{z as E$}from"zod";function dx$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return g61(U76,Z)}function mx$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function y61($,Z){let X=dx$($),Q=mx$(Z);return g61(X,Q)}function w76($,Z,X,Q){let Y=y0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ux$("sha256",Y).update(G).digest("hex")}function hx$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=w76(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${mx$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function ix$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ux$("md5","etag").update(Q).digest("hex")}"`}async function nx$($,Z,X,Q,Y){try{let G=await N76($,{withFileTypes:!0});for(let J of G){let W=g61($,J.name),H=F76(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(N)}}else await nx$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let N=await cx$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:ix$(W,N.mtime,N.size)})}catch{}}}}catch{}}function px$($,Z){let Q=o($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,N=dx$(Q);await H76(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await nx$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=y61(Q,G.key),W=await cx$(J);return{contentType:j81(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:ix$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??gx$;return{url:hx$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??gx$;return{url:hx$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(Y)=>{let G=Y,J=y61(Q,G.key);try{return await yx$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=y61(Q,K);try{await yx$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function h61($,Z,X){let Q=px$(Z,X),Y=new RW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let G=new iX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),pG(Y,G,$,"mcp:dev-assets")}async function tx$($,Z,X,Q){let G=px$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var U76="./data/assets",gx$=3600,lx$,ox$;var rx$=B(()=>{M$();Qy();C8();Nl();cV();MX();Bj0();lx$=new U1;lx$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return h61($.req.raw,Z,Q)});ox$=lx$});var ax$={};N4(ax$,{mountDevRoutes:()=>O76});function O76($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return h61(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await tx$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",ox$);let X=new U1;X.use("*",n3({mountPath:"/api/dev-assets"})),X.route("/",Oj0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var sx$=B(()=>{C8();F81();Bj0();rx$()});import{sql as B76}from"kysely";import{randomUUID as ex$}from"crypto";import{z as D76}from"zod";async function E76($){let Z=new Date().toISOString(),X=ex$(),Q=u4.SELF($.organizationId),Y="registry.publish_request.created",G={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:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=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","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:ex$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await B76`SELECT
2740
2740
  pg_notify('studio_events', ${X}),