decocms 4.260.6 → 4.260.7

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 (224) hide show
  1. package/dist/client/assets/{AlertCircle-CgEoD4lZ.js → AlertCircle-DPxLor_N.js} +1 -1
  2. package/dist/client/assets/{AreaChart-BDTLy8q_.js → AreaChart-CQ8AQeCQ.js} +1 -1
  3. package/dist/client/assets/{ArrowLeft-J5TzpwHh.js → ArrowLeft-CebARimI.js} +1 -1
  4. package/dist/client/assets/{ArrowUp-Br9WC54o.js → ArrowUp-BqoaaU8K.js} +1 -1
  5. package/dist/client/assets/{Check-Dlhcsxlj.js → Check-goUIXyKh.js} +1 -1
  6. package/dist/client/assets/{CheckCircle-CHouRXdd.js → CheckCircle-CfYLlYpa.js} +1 -1
  7. package/dist/client/assets/{ChevronDown-Dzd4vauS.js → ChevronDown-CshG0CLE.js} +1 -1
  8. package/dist/client/assets/{ChevronRight-BdydQji7.js → ChevronRight-DHPEiysZ.js} +1 -1
  9. package/dist/client/assets/{ChevronSelectorVertical-i6ae783E.js → ChevronSelectorVertical-BSN6L-kf.js} +1 -1
  10. package/dist/client/assets/{ChevronUp-CSPP29vw.js → ChevronUp-yLSqRFP2.js} +1 -1
  11. package/dist/client/assets/{Copy01-imf6s21i.js → Copy01-D06Nj471.js} +1 -1
  12. package/dist/client/assets/{CreditCard01-B5S2uLjO.js → CreditCard01-B1UTUF3S.js} +1 -1
  13. package/dist/client/assets/{DotsVertical-BdO6PP_i.js → DotsVertical-DQmsQK31.js} +1 -1
  14. package/dist/client/assets/{Download01-BzQwQB-u.js → Download01-gvaU1x7n.js} +1 -1
  15. package/dist/client/assets/{Eye-D7by4RCW.js → Eye-EuKR0cdc.js} +1 -1
  16. package/dist/client/assets/{FilterLines-BOvoXcAH.js → FilterLines-DONN5_Cr.js} +1 -1
  17. package/dist/client/assets/{Globe01-DscL8aFG.js → Globe01-DasUaQ7o.js} +1 -1
  18. package/dist/client/assets/{Globe04-85JpCX0d.js → Globe04-D5pYASny.js} +1 -1
  19. package/dist/client/assets/{HardDrive-ByTdSXM0.js → HardDrive-DLmaCR34.js} +1 -1
  20. package/dist/client/assets/{Key01-D3Y0iXzU.js → Key01-D0Ze8cKU.js} +1 -1
  21. package/dist/client/assets/{LinkExternal01-Ddn7evZS.js → LinkExternal01-NXbWBz8j.js} +1 -1
  22. package/dist/client/assets/{LockUnlocked01-BLJ3VK6H.js → LockUnlocked01-DyiTD5kX.js} +1 -1
  23. package/dist/client/assets/{LogOut01-B-LkvRlY.js → LogOut01-CoX2zuKq.js} +1 -1
  24. package/dist/client/assets/{Monitor01-CM-W8WKW.js → Monitor01-Br-Vply-.js} +1 -1
  25. package/dist/client/assets/{Palette-BV0Y-7Mc.js → Palette-Cr4vdMo1.js} +1 -1
  26. package/dist/client/assets/{Play-CDlWw-C0.js → Play-ah8BQMUd.js} +1 -1
  27. package/dist/client/assets/{Plus-D5VDJrCZ.js → Plus-BuARW-kj.js} +1 -1
  28. package/dist/client/assets/{SearchLg-ovIpohuT.js → SearchLg-CM-HDueP.js} +1 -1
  29. package/dist/client/assets/{SearchMd-BE28PKZ1.js → SearchMd-v0i-9mb6.js} +1 -1
  30. package/dist/client/assets/{Settings02-D_tIgZaL.js → Settings02-CZkcys2z.js} +1 -1
  31. package/dist/client/assets/{Share07-DjzfworK.js → Share07-2DaeVrns.js} +1 -1
  32. package/dist/client/assets/{Shield01-C_c4ps-0.js → Shield01-DyOH3F5t.js} +1 -1
  33. package/dist/client/assets/{Stars01-D_WDvLgr.js → Stars01-D7SANbwY.js} +1 -1
  34. package/dist/client/assets/{Stars02-2QIwNsWt.js → Stars02-vKykI9rT.js} +1 -1
  35. package/dist/client/assets/{Sun-BkC6jcaw.js → Sun-6sARTz6p.js} +1 -1
  36. package/dist/client/assets/{SwitchHorizontal01-VHbc6S7N.js → SwitchHorizontal01-DjswD-Lu.js} +1 -1
  37. package/dist/client/assets/{Tool01-Cmtn3aZX.js → Tool01-Dt9O1gYs.js} +1 -1
  38. package/dist/client/assets/{Tool02-CIeYpVYB.js → Tool02-BChNfLOv.js} +1 -1
  39. package/dist/client/assets/{Trash01-Cyt8FGre.js → Trash01-Bf9HLbXj.js} +1 -1
  40. package/dist/client/assets/{TrendUp01-Caf2YPh_.js → TrendUp01-D2PIsDRw.js} +1 -1
  41. package/dist/client/assets/{Upload01-CLcf29aB.js → Upload01-DBzRhz4G.js} +1 -1
  42. package/dist/client/assets/{User01-DKKGk-bj.js → User01-DDOq4f2P.js} +1 -1
  43. package/dist/client/assets/{UserSquare-BxJ2lW4C.js → UserSquare-Tef66cIA.js} +1 -1
  44. package/dist/client/assets/{Users01-Diq2vhlk.js → Users01-C-AEVUNQ.js} +1 -1
  45. package/dist/client/assets/{Users03-DLUW_LML.js → Users03-3rdNv0Aq.js} +1 -1
  46. package/dist/client/assets/{XCircle-B13Iv7TG.js → XCircle-PTEWxL9B.js} +1 -1
  47. package/dist/client/assets/{XClose-Bqy8uFJn.js → XClose-BevPXZGh.js} +1 -1
  48. package/dist/client/assets/{YAxis-z0pdXPhV.js → YAxis-BNr0lYG_.js} +1 -1
  49. package/dist/client/assets/{Zap-sdXh7xcV.js → Zap-DYsvHlt6.js} +1 -1
  50. package/dist/client/assets/{ZapSquare-Cxx2wPBU.js → ZapSquare-tNtUTBa2.js} +1 -1
  51. package/dist/client/assets/{access-gate-D4EsHOaO.js → access-gate-CIMwdiYc.js} +1 -1
  52. package/dist/client/assets/{agent-icon-DunxnH8u.js → agent-icon-DNQa0L3Y.js} +1 -1
  53. package/dist/client/assets/{agents-list-D806oBF4.js → agents-list-BZ4alovn.js} +1 -1
  54. package/dist/client/assets/{ai-providers-DMZxoI5Q.js → ai-providers-cxOBQS8S.js} +1 -1
  55. package/dist/client/assets/{alert-DUPboyE6.js → alert-CRQ4uFWW.js} +1 -1
  56. package/dist/client/assets/{alert-dialog-DtlRsg5m.js → alert-dialog-CKAksQyg.js} +1 -1
  57. package/dist/client/assets/{api-keys-BXOWoijb.js → api-keys-CrlNakil.js} +1 -1
  58. package/dist/client/assets/{app-editor-DiKG5lSE.js → app-editor-hiHTVELa.js} +1 -1
  59. package/dist/client/assets/{auth-DIhHdeRM.js → auth-DdsveUCf.js} +1 -1
  60. package/dist/client/assets/{auth-catchall-NuUlthkh.js → auth-catchall-nEgO5299.js} +1 -1
  61. package/dist/client/assets/{auth-entry-muhJoBQ2.js → auth-entry-fEXpHRWt.js} +1 -1
  62. package/dist/client/assets/{auth-split-layout-BjFINRZ9.js → auth-split-layout-CaZEC7Zm.js} +1 -1
  63. package/dist/client/assets/{authenticate-and-persist-oauth-BDD2OfUW.js → authenticate-and-persist-oauth-Du7ghXvx.js} +1 -1
  64. package/dist/client/assets/{automation-list-row-D_5XsIL7.js → automation-list-row-Bp7xqqWe.js} +1 -1
  65. package/dist/client/assets/{automation-runs-CqNFEMnk.js → automation-runs-BgF6DO74.js} +1 -1
  66. package/dist/client/assets/{automations-BcWWVfBw.js → automations-CxE0eLXe.js} +1 -1
  67. package/dist/client/assets/{avatar-ecBvsHkT.js → avatar-Csdlmxjv.js} +1 -1
  68. package/dist/client/assets/{badge-B1wEdypA.js → badge-CSLr-YWj.js} +1 -1
  69. package/dist/client/assets/{block-document-CGiGdFmY.js → block-document-B_FdRaFh.js} +1 -1
  70. package/dist/client/assets/{buckets-DKHC3HW3.js → buckets-CcVeiYaZ.js} +1 -1
  71. package/dist/client/assets/{bulk-category-panel-DuCkYLz6.js → bulk-category-panel-Nx64uZrX.js} +1 -1
  72. package/dist/client/assets/{capability-load-error-DdDToXLr.js → capability-load-error-C55c4GE8.js} +1 -1
  73. package/dist/client/assets/{cards-Cqexu080.js → cards-Bp-0ATfZ.js} +1 -1
  74. package/dist/client/assets/{category-editor-DRbB7v7j.js → category-editor-HPW9FCZF.js} +1 -1
  75. package/dist/client/assets/{chart-OsJIEUCN.js → chart-CGkKX3le.js} +1 -1
  76. package/dist/client/assets/{chat-context-B9AtRZpc.js → chat-context-B_j3IM_l.js} +1 -1
  77. package/dist/client/assets/{checkbox-BiPvcvpS.js → checkbox-DE00eebZ.js} +1 -1
  78. package/dist/client/assets/{choose-editor-C5gXYcRf.js → choose-editor-BUIws1__.js} +1 -1
  79. package/dist/client/assets/{cli-auth-success-CCQwbQSi.js → cli-auth-success-yrCz_Z9a.js} +1 -1
  80. package/dist/client/assets/{collection-detail-D5siYxc8.js → collection-detail-DyAJgn5p.js} +1 -1
  81. package/dist/client/assets/{collection-display-button-BBtZ-Lbq.js → collection-display-button-0ci5cZSY.js} +1 -1
  82. package/dist/client/assets/{collection-search-DzSxTblg.js → collection-search-DFBsUG61.js} +1 -1
  83. package/dist/client/assets/{collection-table-wrapper-DB4_arec.js → collection-table-wrapper-D7D9JRRE.js} +1 -1
  84. package/dist/client/assets/{collection-tabs-Cc_kG5CH.js → collection-tabs-CerdExZs.js} +1 -1
  85. package/dist/client/assets/{command-BYAPX5_p.js → command-HSQBlsqS.js} +1 -1
  86. package/dist/client/assets/{commerce-onboarding-DJuTjWdW.js → commerce-onboarding-DRMB4AUW.js} +1 -1
  87. package/dist/client/assets/{connect-BTIqLBDn.js → connect-Dd3xNj6G.js} +1 -1
  88. package/dist/client/assets/{connection-DTV2uY9d.js → connection-Cygc8dVo.js} +1 -1
  89. package/dist/client/assets/{connection-card-p7T1pUvu.js → connection-card-CI8lW38q.js} +1 -1
  90. package/dist/client/assets/{connection-detail-COw_a24h.js → connection-detail-D7IHwHcH.js} +1 -1
  91. package/dist/client/assets/{connection-form-helpers-C1b3zckT.js → connection-form-helpers-D0ZdJOaq.js} +1 -1
  92. package/dist/client/assets/{connections-C_4vBJec.js → connections-D2CTLrzk.js} +1 -1
  93. package/dist/client/assets/{decopilot-sse-pool-pqIBZDfy.js → decopilot-sse-pool-D3aQYIxz.js} +1 -1
  94. package/dist/client/assets/{dialog-pKdETLR2.js → dialog-DTSI1xNI.js} +1 -1
  95. package/dist/client/assets/{domain-settings-BUTdQptf.js → domain-settings-DN8rk2gT.js} +1 -1
  96. package/dist/client/assets/{drawer-n8GvVoc1.js → drawer-BtUlgqvD.js} +1 -1
  97. package/dist/client/assets/{dropdown-menu-B9v1abrd.js → dropdown-menu-BHP7A1I2.js} +1 -1
  98. package/dist/client/assets/{empty-state-CYafLC41.js → empty-state-BxsbYIp7.js} +1 -1
  99. package/dist/client/assets/{extract-connection-data-BT-OVTSx.js → extract-connection-data-D4V_ONCC.js} +1 -1
  100. package/dist/client/assets/{file-explorer-DFedsU5c.js → file-explorer-WS9yPd_H.js} +1 -1
  101. package/dist/client/assets/{file-type-icon-CD9Xu9RX.js → file-type-icon-RB13T8PF.js} +1 -1
  102. package/dist/client/assets/{form-DbJUfPW0.js → form-CRZ4MuCs.js} +1 -1
  103. package/dist/client/assets/{general-O-luJ_6S.js → general-CMWO9gS8.js} +1 -1
  104. package/dist/client/assets/{github-repo-picker-D8fE6100.js → github-repo-picker-B9Mr6gvy.js} +1 -1
  105. package/dist/client/assets/{hooks-nQguIlxx.js → hooks-BBoNrQa_.js} +1 -1
  106. package/dist/client/assets/{index-C-DhkNwe.js → index-1uLbu33H.js} +1 -1
  107. package/dist/client/assets/{index-CEcd5XTf.js → index-B_SZfBN6.js} +1 -1
  108. package/dist/client/assets/{index-CZf46eBu.js → index-BuJjPhKH.js} +1 -1
  109. package/dist/client/assets/{index-DGbOt3Kz.js → index-CpSoUcDB.js} +1 -1
  110. package/dist/client/assets/{index-DTbZW3Pm.js → index-DVv1zNSe.js} +4 -4
  111. package/dist/client/assets/{index-CD59IPb5.js → index-DcKlgJWf.js} +1 -1
  112. package/dist/client/assets/{index-DsdUFD17.js → index-DuzYwBH0.js} +1 -1
  113. package/dist/client/assets/{index-CkelgOwY.js → index-XpBhIBWK.js} +49 -49
  114. package/dist/client/assets/{index-D69h_5BY.js → index-cgIkmy0Q.js} +1 -1
  115. package/dist/client/assets/{index-Cvd_kl-0.js → index-i-ED7xp7.js} +1 -1
  116. package/dist/client/assets/{index-redirect-h19IqyDj.js → index-redirect-DNqxKBc_.js} +1 -1
  117. package/dist/client/assets/{infra-billing-Cy0Y5Tdb.js → infra-billing-BGOiJH70.js} +1 -1
  118. package/dist/client/assets/{input-B6O7KH1F.js → input-DqFAdini.js} +1 -1
  119. package/dist/client/assets/{integration-icon-1FUBm8hl.js → integration-icon-BFak0SI8.js} +1 -1
  120. package/dist/client/assets/{invite-member-dialog-CAnx6NLx.js → invite-member-dialog-BJVf4Lit.js} +1 -1
  121. package/dist/client/assets/{label-DmjS-jq4.js → label-Dkt4oKx0.js} +1 -1
  122. package/dist/client/assets/{layout-Dbai1XJv.js → layout-DsahlsQM.js} +1 -1
  123. package/dist/client/assets/{login-oZ39MMN2.js → login-B1o2PzAS.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-D5hFkAb5.js → mcp-oauth-BblG8wHV.js} +1 -1
  125. package/dist/client/assets/{members-CMVkVwld.js → members-B4IZhHPb.js} +1 -1
  126. package/dist/client/assets/{monaco-editor-wC9OIupS.js → monaco-editor-CUyLtPdQ.js} +1 -1
  127. package/dist/client/assets/{monitoring-stats-row-pYqIqvxk.js → monitoring-stats-row-Cti1EIds.js} +1 -1
  128. package/dist/client/assets/{multi-select-ByYwYW_r.js → multi-select-CIHJ_e7S.js} +1 -1
  129. package/dist/client/assets/{oauth-callback-Bl1n_3o7.js → oauth-callback-BJr-QM_r.js} +1 -1
  130. package/dist/client/assets/{oauth-callback-ai-provider-CLKgIeKb.js → oauth-callback-ai-provider-CXzrC9Wy.js} +1 -1
  131. package/dist/client/assets/{onboarding-Dgg-lh5T.js → onboarding-DwhkE1tE.js} +1 -1
  132. package/dist/client/assets/{org-layout-Dxc9QmlE.js → org-layout-DjF43U9C.js} +1 -1
  133. package/dist/client/assets/{organization-choice-D6HqsfWi.js → organization-choice-Dc1Mwxy5.js} +1 -1
  134. package/dist/client/assets/{orgs-3_onE2f-.js → orgs-Bi5i6Jga.js} +1 -1
  135. package/dist/client/assets/{page-seo-form-B95h0-Vg.js → page-seo-form-C8FrECqq.js} +1 -1
  136. package/dist/client/assets/{popover-CpCzL0-B.js → popover-CqmhhGtl.js} +1 -1
  137. package/dist/client/assets/{post-calendar-DzfEXM28.js → post-calendar-xz3jPWdb.js} +1 -1
  138. package/dist/client/assets/{post-editor-C11Tw-Da.js → post-editor-CwVbahu1.js} +1 -1
  139. package/dist/client/assets/{primitives-C6nMorsF.js → primitives-B3TtquI6.js} +1 -1
  140. package/dist/client/assets/{profile-tOx_RyW9.js → profile-kKBQHJie.js} +1 -1
  141. package/dist/client/assets/{project-app-view-eN1uJf4p.js → project-app-view-DUH9rYTH.js} +1 -1
  142. package/dist/client/assets/record-editor-Dolt8NW_.js +1 -0
  143. package/dist/client/assets/{redirect-editor-Z5O_ujG_.js → redirect-editor-Cks5QpBb.js} +1 -1
  144. package/dist/client/assets/registry-CCqqB3Vu.js +2 -0
  145. package/dist/client/assets/{registry-layout-qgDfMXKF.js → registry-layout-CGA5Xt6y.js} +1 -1
  146. package/dist/client/assets/{reports-D-gKWRVw.js → reports-Dbo7_Fhb.js} +1 -1
  147. package/dist/client/assets/{require-capability-BBUMAtfF.js → require-capability-D6zOzpbR.js} +1 -1
  148. package/dist/client/assets/{required-auth-layout-B52gn4bl.js → required-auth-layout-DXCBTHmS.js} +1 -1
  149. package/dist/client/assets/{reset-password-lJTj7K7k.js → reset-password-BnBCanZe.js} +1 -1
  150. package/dist/client/assets/{roles-DpR4RGRS.js → roles-BFq4gAI3.js} +1 -1
  151. package/dist/client/assets/{search-input-D_1vfWZE.js → search-input-BYf7i3hi.js} +1 -1
  152. package/dist/client/assets/{secrets-DL_Sx2xz.js → secrets-DjOW_LsN.js} +1 -1
  153. package/dist/client/assets/{sections-editor-CqLukB31.js → sections-editor-BMMNLW5_.js} +1 -1
  154. package/dist/client/assets/{select-By9ivaZI.js → select-B-GGh2_V.js} +1 -1
  155. package/dist/client/assets/{select-model-HCNJBB_1.js → select-model-BeXvLKYl.js} +1 -1
  156. package/dist/client/assets/{self-tool-result-DnoAf1ZT.js → self-tool-result-DvDs9N-4.js} +1 -1
  157. package/dist/client/assets/{seo-editor-CqUDdIcO.js → seo-editor-BpumBeQh.js} +1 -1
  158. package/dist/client/assets/{settings-layout-BW4yTVMn.js → settings-layout-DVFU0DFs.js} +1 -1
  159. package/dist/client/assets/{shell-controls-COdSQSVU.js → shell-controls-CGXyrKBX.js} +1 -1
  160. package/dist/client/assets/{shell-layout-CcPhPnyg.js → shell-layout-BxZc0X-W.js} +1 -1
  161. package/dist/client/assets/{spinner-1M28tiHf.js → spinner-CVJx70XX.js} +1 -1
  162. package/dist/client/assets/{sprints-6ljAoSC4.js → sprints-DGN2_Ylt.js} +1 -1
  163. package/dist/client/assets/{sso-DtLhSO0k.js → sso-DU7cP_hQ.js} +1 -1
  164. package/dist/client/assets/{store-n9-mJzUO.js → store-DWyak2J1.js} +1 -1
  165. package/dist/client/assets/store-registry-BKU6i61A.js +2 -0
  166. package/dist/client/assets/{switch-JLlAZCYJ.js → switch-CmfyUEXs.js} +1 -1
  167. package/dist/client/assets/{synced-repos-BdReXIoy.js → synced-repos-D0OhuqKp.js} +1 -1
  168. package/dist/client/assets/{tab-id-vBtt9OYk.js → tab-id-CrGXPqCz.js} +1 -1
  169. package/dist/client/assets/{table-Ccbmr8s2.js → table-C3fNfG3L.js} +1 -1
  170. package/dist/client/assets/{tabs-4Il64Rpx.js → tabs-CAOzWXcF.js} +1 -1
  171. package/dist/client/assets/{task-key-BagLPtBu.js → task-key-CPpkyy9h.js} +1 -1
  172. package/dist/client/assets/{tasks-BU1JPNBP.js → tasks-wLGCwKEH.js} +1 -1
  173. package/dist/client/assets/{textarea-BjTo2mGL.js → textarea-Bnsbbz0C.js} +1 -1
  174. package/dist/client/assets/{toggle-group-C6OpL7DN.js → toggle-group-CFiKQ2ci.js} +1 -1
  175. package/dist/client/assets/{toolbar-DXgpkFr6.js → toolbar-DyKJS-nc.js} +1 -1
  176. package/dist/client/assets/{track-B0e0tQsg.js → track-mMdBmn4Q.js} +1 -1
  177. package/dist/client/assets/{types-BLRK14g-.js → types-CMe4kheB.js} +1 -1
  178. package/dist/client/assets/{use-ai-providers-BCmRFQig.js → use-ai-providers-DdpG9tV0.js} +1 -1
  179. package/dist/client/assets/{use-api-keys-BQ54_fNM.js → use-api-keys-DVPztQ5p.js} +1 -1
  180. package/dist/client/assets/{use-automations-C-F0evvd.js → use-automations-BRSTjiIh.js} +1 -1
  181. package/dist/client/assets/{use-autosave-BKsuSBva.js → use-autosave-w1T6MwcX.js} +1 -1
  182. package/dist/client/assets/{use-clock-tick-C8v98GQP.js → use-clock-tick-BDwoTF5M.js} +1 -1
  183. package/dist/client/assets/{use-commerce-diagnostic-BFUJQ-4o.js → use-commerce-diagnostic-3uST7evt.js} +1 -1
  184. package/dist/client/assets/{use-connection-BWd9k7zT.js → use-connection-B0HWsSWf.js} +1 -1
  185. package/dist/client/assets/{use-copy-Cei-KY5b.js → use-copy-D6lko-Ct.js} +1 -1
  186. package/dist/client/assets/{use-create-virtual-mcp-Du6ZmsfB.js → use-create-virtual-mcp-B6x22JQj.js} +1 -1
  187. package/dist/client/assets/{use-debounced-autosave-Cdgf9jBK.js → use-debounced-autosave-BWqJCbp3.js} +1 -1
  188. package/dist/client/assets/{use-debounced-value-BKun_qJz.js → use-debounced-value-zlJQkNCj.js} +1 -1
  189. package/dist/client/assets/{use-decopilot-events-CylrM4gQ.js → use-decopilot-events-CHZQZmLm.js} +1 -1
  190. package/dist/client/assets/{use-delete-connection-Dpw1Tudk.js → use-delete-connection-JiuVog3X.js} +1 -1
  191. package/dist/client/assets/{use-deployment-admin-DtLJPzEp.js → use-deployment-admin-DfNR9jPj.js} +1 -1
  192. package/dist/client/assets/{use-file-configs-DvygNfHt.js → use-file-configs-Ceye1Qoj.js} +1 -1
  193. package/dist/client/assets/{use-infinite-scroll-Cd2dTawJ.js → use-infinite-scroll-BhqIdVF5.js} +1 -1
  194. package/dist/client/assets/{use-join-requests-C2YryJTr.js → use-join-requests-Bln02fyA.js} +1 -1
  195. package/dist/client/assets/{use-mcp-client-Ch7mwMBE.js → use-mcp-client-Hon16yO6.js} +1 -1
  196. package/dist/client/assets/{use-mcp-tools-BIf9b-PX.js → use-mcp-tools-C1LZQoaw.js} +1 -1
  197. package/dist/client/assets/{use-members-BpvprT06.js → use-members-Cw0HKujz.js} +1 -1
  198. package/dist/client/assets/{use-navigate-to-agent-C9QwB03t.js → use-navigate-to-agent-hdxxzq-j.js} +1 -1
  199. package/dist/client/assets/{use-org-auth-client-BaitIh3V.js → use-org-auth-client-C8YjjNNv.js} +1 -1
  200. package/dist/client/assets/{use-org-repo-syncs-zEXyO_-l.js → use-org-repo-syncs-C_dTdh9t.js} +1 -1
  201. package/dist/client/assets/{use-org-sso-CDBfK2Lk.js → use-org-sso-BfwnLC5V.js} +1 -1
  202. package/dist/client/assets/{use-organization-roles-CcsEOzS8.js → use-organization-roles-DMWAgMno.js} +1 -1
  203. package/dist/client/assets/{use-organization-settings-BBEfgU6Q.js → use-organization-settings-C3EICgtS.js} +1 -1
  204. package/dist/client/assets/{use-registry-connections-CvQQSWDS.js → use-registry-connections-DfEduXQX.js} +1 -1
  205. package/dist/client/assets/{use-secrets-Bm0gt9bn.js → use-secrets-CUyP2P-8.js} +1 -1
  206. package/dist/client/assets/{use-section-preview-base-B9CSz3sK.js → use-section-preview-base-BbcdED6p.js} +1 -1
  207. package/dist/client/assets/{use-status-sounds-Bwy7-zCs.js → use-status-sounds-PMPfLxgu.js} +1 -1
  208. package/dist/client/assets/{use-tags-COCho_Bq.js → use-tags-ClcBaO1e.js} +1 -1
  209. package/dist/client/assets/{use-view-mode-Lsm7SHCF.js → use-view-mode-97pegvdd.js} +1 -1
  210. package/dist/client/assets/{use-virtual-mcp-BR44XYr4.js → use-virtual-mcp-DTFqoUsv.js} +1 -1
  211. package/dist/client/assets/useInfiniteQuery-BrXoWint.js +1 -0
  212. package/dist/client/assets/useSuspenseInfiniteQuery-DxKFJSz9.js +1 -0
  213. package/dist/client/assets/{users-DgYpM4Ml.js → users-czV_D1-k.js} +1 -1
  214. package/dist/client/assets/{variant-calendar-Dl4Kis9m.js → variant-calendar-BkTP4xqh.js} +1 -1
  215. package/dist/client/assets/{view-mode-toggle-CreTaUJc.js → view-mode-toggle-CRxR1eLS.js} +1 -1
  216. package/dist/client/index.html +1 -1
  217. package/dist/server/cli.js +3 -3
  218. package/dist/server/server.js +3 -3
  219. package/package.json +1 -1
  220. package/dist/client/assets/record-editor-JNc3s2Ti.js +0 -1
  221. package/dist/client/assets/registry-D8OWXmi_.js +0 -2
  222. package/dist/client/assets/store-registry-CfScOx3n.js +0 -2
  223. package/dist/client/assets/useInfiniteQuery-DDGgJ3x1.js +0 -1
  224. package/dist/client/assets/useSuspenseInfiniteQuery-MeRtysP2.js +0 -1
@@ -106,7 +106,7 @@ You are running the brand-context onboarding for the user's organization. Your o
106
106
  4. Do NOT call any other tools in this thread. Do NOT call \`brand_context_setup\` more than once.
107
107
 
108
108
  If the tool returns an error, surface the error message to the user and ask whether they want to try a different URL.
109
- `.trim();sy1=kG("site-diagnostics_"),Wi6=sy1.is,Ki6=sy1.get,ey1=kG("commerce-discovery_"),Hi6=ey1.is,R40=ey1.get;cU={AGENT_MANAGER:kG("studio-agent-manager_"),AUTOMATION_MANAGER:kG("studio-automation-manager_"),CONNECTION_MANAGER:kG("studio-connection-manager_"),API_KEY_MANAGER:kG("studio-api-key-manager_"),STORE_MANAGER:kG("studio-store-manager_"),BRAND_MANAGER:kG("studio-brand-manager_"),USAGE_MANAGER:kG("studio-usage-manager_")},TQ={AGENT_MANAGER:cU.AGENT_MANAGER.get,AUTOMATION_MANAGER:cU.AUTOMATION_MANAGER.get,CONNECTION_MANAGER:cU.CONNECTION_MANAGER.get,API_KEY_MANAGER:cU.API_KEY_MANAGER.get,STORE_MANAGER:cU.STORE_MANAGER.get,BRAND_MANAGER:cU.BRAND_MANAGER.get,USAGE_MANAGER:cU.USAGE_MANAGER.get}});function Gg1($){return $.toLowerCase().replace(/[^a-z0-9]/g,"")}function Lv8($){return Gg1($).includes("deepresearch")}function Jg1($){let Z=Gg1($);if(Z.includes("deepresearch"))return!1;return Ev8.some((X)=>Z.includes(X))}function jv8($){return $.asyncResearch!==!0&&Jg1($.modelId)}function zv8($){return $.asyncResearch===!0||Lv8($.modelId)||Jg1($.modelId)}function Wb($,Z,X,Q){for(let Y of X){let G=$.find((J)=>J.modelId===Y);if(G)return{keyId:Z,modelId:G.modelId,title:G.title}}for(let Y of X){let G=$.find((J)=>J.modelId.includes(Y));if(G)return{keyId:Z,modelId:G.modelId,title:G.title}}if(Q){let Y=$.find(Q);if(Y)return{keyId:Z,modelId:Y.modelId,title:Y.title}}return null}function Wg1($,Z){let X={chat:{fast:null,smart:null,thinking:null},image:null,webSearch:null,deepResearch:null};for(let Q of $){let Y=Z[Q.id]??[],G=Q.providerId;if(!X.chat.fast)X.chat.fast=Wb(Y,Q.id,Nv8[G]??[]);if(!X.chat.smart)X.chat.smart=Wb(Y,Q.id,Uv8[G]??[]);if(!X.chat.thinking)X.chat.thinking=Wb(Y,Q.id,Ov8[G]??[]);if(!X.image)X.image=Wb(Y,Q.id,Bv8[G]??[],(J)=>J.capabilities?.includes("image")===!0);if(!X.webSearch)X.webSearch=Wb(Y,Q.id,Dv8[G]??[],jv8);if(!X.deepResearch)X.deepResearch=Wb(Y,Q.id,wv8[G]??[],zv8)}return X}var Nv8,Uv8,Ov8,Bv8,Dv8,wv8,Ev8;var Kg1=D(()=>{Nv8={anthropic:["claude-haiku-4-5","claude-haiku"],openrouter:["qwen/qwen3.5-flash","anthropic/claude-haiku-4.5","anthropic/claude-haiku","google/gemini-3-flash"],deco:["qwen/qwen3.5-flash","anthropic/claude-haiku"],llmapi:["claude-haiku-4-5","claude-haiku","gpt-4o-mini"],google:["gemini-2.5-flash","gemini-3-flash"]},Uv8={anthropic:["claude-sonnet-5","claude-sonnet"],openrouter:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude-opus-4.8","google/gemini-3-pro"],deco:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude"],llmapi:["claude-sonnet-4-6","claude-sonnet"],google:["gemini-3-pro","gemini-3-flash"]},Ov8={anthropic:["claude-opus-4-8","claude-sonnet-5","claude-sonnet","claude-fable-5"],openrouter:["anthropic/claude-opus-4.8:extended","anthropic/claude-opus-4.8","anthropic/claude-sonnet-5:extended","anthropic/claude-sonnet-5","google/gemini-3-pro","anthropic/claude-fable-5"],deco:["anthropic/claude-opus","anthropic/claude-sonnet-4.6","anthropic/claude-sonnet","anthropic/claude-fable"],llmapi:["claude-opus-4-8","claude-opus","claude-sonnet-4-6"],google:["gemini-3-pro"]},Bv8={openrouter:["openai/gpt-image-1","google/gemini-2.0-flash-image"],deco:["openai/gpt-image-1","google/gemini-2.0-flash-image"],llmapi:["gemini-2.5-flash-image","gpt-image-1"],google:["gemini-2.0-flash-image"]},Dv8={openrouter:["perplexity/sonar","perplexity/sonar-pro"],deco:["perplexity/sonar","perplexity/sonar-pro"]},wv8={openrouter:["perplexity/deep-research","perplexity/sonar-pro"],deco:["perplexity/deep-research","perplexity/sonar-pro"]};Ev8=["sonar","searchpreview","online"]});function I40($){if(!$)return;let Z={};for(let X in $){let Q=$[X];if(typeof Q==="object"&&Q!==null){let Y={};for(let G of Pv8)if(G in Q)Y[G]=Q[G];Z[X]=Y}}return Object.keys(Z).length>0?Z:void 0}var Pv8;var Hg1=D(()=>{Pv8=["usage","cost","model"]});var V8=D(()=>{X80();Yg1();Kg1();Hg1()});function q40($){return $.toLowerCase().trim().replace(/\//g,"-").replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function lU($){if($.app_name)return $.app_name;if($.connection_url)try{let Z=new URL($.connection_url),Q=((Z.port?`${Z.hostname}-${Z.port}`:Z.hostname)+Z.pathname).replace(/\/+$/,"");return q40(Q)}catch{return q40($.connection_url)}if($.title)return q40($.title);return $.id??"unknown"}var M40=()=>{};var Kb=300000,k40=5000,Ey0=3,jy0=30000,Fg1=65000,V40=1000,Hb=3,Ng1=5,Ug1=60000,Og1=300000,zy0=60000;function Bg1(){if(YF.size<V40)return;let $=null,Z=1/0;for(let[X,Q]of YF)if(Q.lastFailureAt<Z)Z=Q.lastFailureAt,$=X;if($)YF.delete($)}function Dg1($){let Z=YF.get($);if(!Z)return Bg1(),YF.set($,{consecutiveFailures:1,disabled:!1,lastFailureAt:Date.now()}),{consecutiveFailures:1,thresholdCrossed:1>=Hb};return Z.consecutiveFailures++,Z.lastFailureAt=Date.now(),{consecutiveFailures:Z.consecutiveFailures,thresholdCrossed:Z.consecutiveFailures>=Hb}}function Py0($){let Z=YF.get($);if(Z){Z.disabled=!0;return}Bg1(),YF.set($,{consecutiveFailures:Hb,disabled:!0,lastFailureAt:Date.now()})}function wg1($){return YF.get($)?.disabled??!1}function Lg1($){YF.delete($)}var YF;var Eg1=D(()=>{YF=new Map});import{sql as i$}from"kysely";function zg1($){if($.length===0)return null;let Z=$[0];if($.length===1&&Tv8.has(Z))return i$.ref(Z);if($.length===2&&jg1.has(Z)){let X=$[1];return i$`${i$.ref(Z)}->>${i$.lit(X)}`}if($.length>2&&jg1.has(Z)){let X=`{${$.slice(1).join(",")}}`;return i$`${i$.ref(Z)}#>>${i$.lit(X)}`}return null}function Pg1($){if("conditions"in $){let{operator:G,conditions:J}=$;if(J.length===0)return i$`true`;let W=J.map((K)=>Pg1(K));switch(G){case"and":return i$`(${i$.join(W,i$` AND `)})`;case"or":return i$`(${i$.join(W,i$` OR `)})`;case"not":return i$`NOT (${i$.join(W,i$` AND `)})`;default:return i$`true`}}let{field:Z,operator:X,value:Q}=$,Y=zg1(Z);if(!Y)return i$`true`;switch(X){case"eq":return Q===null?i$`${Y} IS NULL`:i$`${Y} = ${i$.val(Q)}`;case"gt":return i$`${Y} > ${i$.val(Q)}`;case"gte":return i$`${Y} >= ${i$.val(Q)}`;case"lt":return i$`${Y} < ${i$.val(Q)}`;case"lte":return i$`${Y} <= ${i$.val(Q)}`;case"in":if(!Array.isArray(Q)||Q.length===0)return i$`false`;return i$`${Y} IN (${i$.join(Q.map((G)=>i$.val(G)))})`;case"like":return i$`${Y} ILIKE ${i$.val(Q)}`;case"contains":{let G=String(Q).replace(/[%_\\]/g,"\\$&");return i$`${Y} ILIKE ${i$.val(`%${G}%`)}`}default:return i$`true`}}class Ad{db;vault;constructor($,Z){this.db=$;this.vault=Z}async create($){let Z=$.id??n8("conn"),X=new Date().toISOString(),Q=await this.db.selectFrom("connections").select("organization_id").where("id","=",Z).executeTakeFirst();if(Q){if(Q.organization_id!==$.organization_id)throw Error("Connection ID already exists");return this.update(Z,$)}let Y=lU($),G=await this.serializeConnection({...$,id:$.id??Z,slug:Y,status:"active",created_at:X,updated_at:X}),J=await this.db.insertInto("connections").values(G).returningAll().executeTakeFirst();if(!J)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(J)}async createNew($){let Z=$.id??n8("conn"),X=new Date().toISOString(),Q=lU($),Y=await this.serializeConnection({...$,id:Z,slug:Q,status:"active",created_at:X,updated_at:X}),G;try{G=await this.db.insertInto("connections").values(Y).returningAll().executeTakeFirst()}catch(J){if(J instanceof Error&&(J.message.includes("duplicate key")||J.message.includes("unique constraint")))throw Error("Connection ID already exists");throw J}if(!G)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(G)}async findById($,Z){let X=VG($);if(X)return Qg1(Z??X);let Q=this.db.selectFrom("connections").selectAll().where("id","=",$);if(Z)Q=Q.where("organization_id","=",Z);let Y=await Q.executeTakeFirst();return Y?this.deserializeConnection(Y):null}async list($,Z){let X=this.db.selectFrom("connections").selectAll().where("organization_id","=",$);if(!Z?.includeVirtual)X=X.where("connection_type","!=","VIRTUAL");if(Z?.slug)X=X.where("slug","=",Z.slug);if(Z?.where)X=X.where(Pg1(Z.where));let G=(await this.db.selectFrom(X.as("filtered")).select(i$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;if(Z?.orderBy&&Z.orderBy.length>0)for(let K of Z.orderBy){let H=zg1(K.field);if(!H)continue;let F=K.direction==="desc"?i$`desc`:i$`asc`,N=K.nulls==="first"?i$`nulls first`:i$`nulls last`;X=X.orderBy(i$`${H} ${F} ${N}`)}if(Z?.limit)X=X.limit(Z.limit);if(Z?.offset)X=X.offset(Z.offset);let J=await X.execute();return{items:await Promise.all(J.map((K)=>this.deserializeConnection(K))),totalCount:G}}async update($,Z){if(Object.keys(Z).length===0){let J=await this.findById($);if(!J)throw Error("Connection not found");return J}let X={...Z},Q=await this.db.selectFrom("connections").select(["app_name","connection_url","title"]).where("id","=",$).executeTakeFirst();if(Q){let J=(W)=>Z[W]===void 0?Q[W]:Z[W];X.slug=lU({app_name:J("app_name"),connection_url:J("connection_url"),title:J("title"),id:$})}let Y=await this.serializeConnection({...X,updated_at:new Date().toISOString()}),G=await this.db.updateTable("connections").set(Y).where("id","=",$).returningAll().executeTakeFirst();if(!G)throw Error("Connection not found after update");return this.deserializeConnection(G)}async isReferencedByThread($){return await this.db.selectFrom("threads").select("id").where(i$`metadata -> 'githubRepo' ->> 'connectionId' = ${$}`).limit(1).executeTakeFirst()!==void 0}async delete($){await this.db.deleteFrom("connections").where("id","=",$).execute()}async testConnection($,Z){let X=await this.findById($);if(!X)throw Error("Connection not found");let Q=Date.now();if(X.connection_type==="STDIO")return{healthy:!0,latencyMs:Date.now()-Q};if(!X.connection_url)return{healthy:!1,latencyMs:Date.now()-Q};try{if(await Yb(X.connection_url))return{healthy:!1,latencyMs:Date.now()-Q};let G=X.connection_headers,J=new AbortController,W=setTimeout(()=>J.abort(),1e4),K;try{K=await Gb()(X.connection_url,{method:"POST",signal:J.signal,headers:{"Content-Type":"application/json",...X.connection_token&&{Authorization:`Bearer ${X.connection_token}`},...G?.headers,...Z},body:JSON.stringify({jsonrpc:"2.0",method:"ping",id:1})})}finally{clearTimeout(W)}return{healthy:K.ok||K.status===404,latencyMs:Date.now()-Q}}catch{return{healthy:!1,latencyMs:Date.now()-Q}}}async serializeConnection($){let Z={};for(let[X,Q]of Object.entries($)){if(Q===void 0)continue;if(X==="tools")continue;if(X==="connection_token"&&Q)Z[X]=await this.vault.encrypt(Q);else if(X==="configuration_state"&&Q){let Y=JSON.stringify(Q);Z[X]=await this.vault.encrypt(Y)}else if(X==="connection_headers"&&Q){let Y=Q;if(bW(Y)&&Y.envVars){let G={};for(let[J,W]of Object.entries(Y.envVars))G[J]=await this.vault.encrypt(W);Z[X]=JSON.stringify({...Y,envVars:G})}else Z[X]=JSON.stringify(Y)}else if(Av8.includes(X))Z[X]=Q?JSON.stringify(Q):null;else Z[X]=Q}return Z}async handleDecryptFailures($,Z){let X=`connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title})`;if(wg1($.id))return;if($.status!=="active"){Py0($.id);return}let{thresholdCrossed:Q}=Dg1($.id);if(!Q){for(let{label:Y,error:G}of Z)console.error(`Failed to decrypt ${Y} for ${X}:`,G);return}try{await this.db.updateTable("connections").set({status:"error"}).where("id","=",$.id).execute(),Py0($.id),console.error(`Disabled ${X} after ${Hb} consecutive decryption failures.`,Z[0]?.error)}catch(Y){console.error(`Failed to disable ${X} after decryption failures:`,Y)}}async deserializeConnection($){let Z=[],X=null;if($.connection_token)try{X=await this.vault.decrypt($.connection_token)}catch(J){Z.push({label:"connection token",error:J})}let Q=null;if($.configuration_state)try{let J=await this.vault.decrypt($.configuration_state);Q=JSON.parse(J)}catch(J){Z.push({label:"configuration state",error:J})}if(Z.length>0)await this.handleDecryptFailures($,Z);else if($.connection_token||$.configuration_state)Lg1($.id);let Y=null;if($.connection_headers)try{let J=JSON.parse($.connection_headers);if(bW(J)&&J.envVars){let W={};for(let[K,H]of Object.entries(J.envVars))try{W[K]=await this.vault.decrypt(H)}catch{W[K]=H}Y={...J,envVars:W}}else Y=J}catch(J){console.error(`Failed to parse connection_headers for connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title}):`,J)}let G=(J)=>{if(J===null)return null;if(typeof J==="string")try{return JSON.parse(J)}catch{return null}return J};return{id:$.id,organization_id:$.organization_id,created_by:$.created_by,updated_by:$.updated_by??void 0,title:$.title,description:$.description,icon:$.icon,app_name:$.app_name,app_id:$.app_id,slug:$.slug,connection_type:$.connection_type,connection_url:$.connection_url,connection_token:X,connection_headers:Y,oauth_config:G($.oauth_config),configuration_state:Q,configuration_scopes:G($.configuration_scopes),metadata:G($.metadata),tools:null,bindings:G($.bindings),status:$.status,created_at:$.created_at,updated_at:$.updated_at}}}var Av8,Tv8,jg1;var Ay0=D(()=>{yW();Pd();xX();V8();M40();Eg1();Av8=["connection_headers","oauth_config","configuration_scopes","metadata","bindings"],Tv8=new Set(["id","organization_id","created_by","updated_by","title","description","icon","app_name","app_id","slug","connection_type","connection_url","status","created_at","updated_at"]),jg1=new Set(["metadata","configuration_scopes","bindings"])});import{createHash as Rv8,randomBytes as Iv8,timingSafeEqual as fi6}from"crypto";function Mv8($){return $.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Ry0($){return Rv8("sha256").update($).digest("hex")}function Rg1($){let Z=Ty0.length+1,X=Z+Tg1;if(!$.startsWith(`${Ty0}_`)||$.length<=X+1||$[X]!=="_")return null;let Q=$.slice(Z,X),Y=$.slice(X+1);if(!Ag1.test(Q)||!Ag1.test(Y))return null;return Q}function Ig1(){let $=Mv8(Iv8(qv8)),Z=$.slice(0,Tg1),X=`${Ty0}_${Z}_${$}`;return{plaintext:X,prefix:Z,hash:Ry0(X)}}var Ty0="stv",qv8=32,Tg1=12,Ag1;var qg1=D(()=>{Ag1=/^[A-Za-z0-9_-]+$/});function Mg1($){return{id:$.id,organizationId:$.organization_id,subjectConnectionId:$.subject_connection_id,tokenHash:$.token_hash,tokenPrefix:$.token_prefix,name:$.name,revokedAt:$.revoked_at,lastUsedAt:$.last_used_at,createdAt:$.created_at,updatedAt:$.updated_at}}class Iy0{db;constructor($){this.db=$}async createOrRotateWorkloadToken($){let Z=$.name??"default";return await this.db.transaction().execute(async(Q)=>{if(!await Q.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let G=Ig1(),J=new Date().toISOString();await Q.updateTable("connection_workload_tokens").set({revoked_at:J,updated_at:J}).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",Z).where("revoked_at","is",null).execute();let W=await Q.insertInto("connection_workload_tokens").values({id:n8("cwt"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,token_hash:G.hash,token_prefix:G.prefix,name:Z,revoked_at:null,last_used_at:null,created_at:J,updated_at:J}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:G.plaintext,record:Mg1(W)}})}async findActiveWorkloadToken($){let Z=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",$.name??"default").where("revoked_at","is",null).executeTakeFirst();return Z?Mg1(Z):null}async revokeWorkloadToken($){let Z=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:Z,updated_at:Z}).where("id","=",$.tokenId).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken($){let Z=Rg1($);if(!Z)return null;let X=Ry0($),Q=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",Z).where("token_hash","=",X).where("revoked_at","is",null).executeTakeFirst();if(!Q)return null;let Y=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:Y,updated_at:Y}).where("id","=",Q.id).execute(),{tokenId:Q.id,tokenPrefix:Q.token_prefix,organizationId:Q.organization_id,subjectConnectionId:Q.subject_connection_id}}async replaceGrantsForSubject($){await this.db.transaction().execute(async(Z)=>{if(!await Z.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let Q=[...new Set($.grants.map((J)=>J.targetConnectionId))];if(Q.length>0){if((await Z.selectFrom("connections").select("id").where("organization_id","=",$.organizationId).where("id","in",Q).execute()).length!==Q.length)throw Error("Referenced connection not found in organization")}if(await Z.deleteFrom("connection_credential_grants").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).execute(),$.grants.length===0)return;let Y=new Date().toISOString(),G=$.grants.map((J)=>({id:n8("ccg"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,target_connection_id:J.targetConnectionId,scope:J.scope,created_by:$.createdBy,created_at:Y,updated_at:Y}));await Z.insertInto("connection_credential_grants").values(G).execute()})}async hasGrant($){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("target_connection_id","=",$.targetConnectionId).where("scope","=",$.scope).executeTakeFirst()}}var S40="credential:access-token:read",C40="credential:configuration:read";var _40=D(()=>{xX();qg1()});class Fb{db;constructor($){this.db=$}async create($,Z,X,Q){let Y=Q?.id??n8("vir"),G=new Date().toISOString();await this.db.transaction().execute(async(W)=>{if(await W.insertInto("connections").values({id:Y,organization_id:$,created_by:Z,title:X.title,description:X.description??null,icon:X.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",pinned:X.pinned??!1,connection_url:`virtual://${Y}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:X.metadata?JSON.stringify(X.metadata):null,bindings:null,status:X.status??"active",created_at:G,updated_at:G}).execute(),X.connections.length>0)await W.insertInto("connection_aggregations").values(X.connections.map((K)=>({id:n8("agg"),parent_connection_id:Y,child_connection_id:K.connection_id,selected_tools:K.selected_tools?JSON.stringify(K.selected_tools):null,selected_resources:K.selected_resources?JSON.stringify(K.selected_resources):null,selected_prompts:K.selected_prompts?JSON.stringify(K.selected_prompts):null,dependency_mode:"direct",created_at:G}))).execute()});let J=await this.findById(Y);if(!J)throw Error(`Failed to create virtual MCP with id: ${Y}`);return J}async findById($,Z){let X=VG($);if(X)return{...Ly0(Z??X),pinned:!1,connections:[]};let Q=T40($);if(Q)return{...ay1(Z??Q),pinned:!1,connections:[]};return this.findByIdInternal(this.db,$)}async findByIdInternal($,Z){let X=await $.selectFrom("connections").selectAll().where("id","=",Z).where("connection_type","=","VIRTUAL").executeTakeFirst();if(!X)return null;let Q=await $.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","=",Z).where("dependency_mode","=","direct").execute();return this.deserializeVirtualMCPEntity(X,Q)}async list($,Z){let X=this.db.selectFrom("connections").selectAll().where("organization_id","=",$).where("connection_type","=","VIRTUAL");if(Z?.pinnedOnly)X=X.where("pinned","=",!0);let Q=await X.execute(),Y=Q.map((W)=>W.id);if(Y.length===0)return[];let G=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Y).where("dependency_mode","=","direct").execute(),J=new Map;for(let W of G){let K=J.get(W.parent_connection_id)??[];K.push(W),J.set(W.parent_connection_id,K)}return Q.map((W)=>this.deserializeVirtualMCPEntity(W,J.get(W.id)??[]))}async listByIds($,Z){if(Z.length===0)return[];let X=await this.db.selectFrom("connections").selectAll().where("id","in",Z).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(X.length===0)return[];let Q=X.map((J)=>J.id),Y=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Q).where("dependency_mode","=","direct").execute(),G=new Map;for(let J of Y){let W=G.get(J.parent_connection_id)??[];W.push(J),G.set(J.parent_connection_id,W)}return X.map((J)=>this.deserializeVirtualMCPEntity(J,G.get(J.id)??[]))}async listByConnectionId($,Z){let Q=(await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",Z).execute()).map((K)=>K.parent_connection_id);if(Q.length===0)return[];let Y=await this.db.selectFrom("connections").selectAll().where("id","in",Q).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(Y.length===0)return[];let G=Y.map((K)=>K.id),J=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",G).where("dependency_mode","=","direct").execute(),W=new Map;for(let K of J){let H=W.get(K.parent_connection_id)??[];H.push(K),W.set(K.parent_connection_id,H)}return Y.map((K)=>this.deserializeVirtualMCPEntity(K,W.get(K.id)??[]))}async update($,Z,X){let Q=new Date().toISOString(),Y={updated_at:Q,updated_by:Z};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.icon!==void 0)Y.icon=X.icon;if(X.status!==void 0)Y.status=X.status;if(X.pinned!==void 0)Y.pinned=X.pinned;if(X.metadata!==void 0)Y.metadata=X.metadata?JSON.stringify(X.metadata):null;let G=[];await this.db.transaction().execute(async(W)=>{if(await W.updateTable("connections").set(Y).where("id","=",$).where("connection_type","=","VIRTUAL").execute(),X.connections!==void 0){let K=await W.selectFrom("connection_aggregations").select("child_connection_id").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),H=new Set(K.map((N)=>N.child_connection_id));if(await W.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),X.connections.length>0)await W.insertInto("connection_aggregations").values(X.connections.map((N)=>({id:n8("agg"),parent_connection_id:$,child_connection_id:N.connection_id,selected_tools:N.selected_tools?JSON.stringify(N.selected_tools):null,selected_resources:N.selected_resources?JSON.stringify(N.selected_resources):null,selected_prompts:N.selected_prompts?JSON.stringify(N.selected_prompts):null,dependency_mode:"direct",created_at:Q}))).execute();let F=new Set(X.connections.map((N)=>N.connection_id));for(let N of H)if(!F.has(N))G.push(N)}});for(let W of G)await this.cleanOrphanedPinnedViews([$],W);let J=await this.findById($);if(!J)throw Error("Virtual MCP not found after update");return J}async delete($){await this.db.transaction().execute(async(Z)=>{await Z.deleteFrom("threads").where("virtual_mcp_id","=",$).execute(),await Z.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).execute(),await Z.deleteFrom("connections").where("id","=",$).where("connection_type","=","VIRTUAL").execute()})}async removeConnectionReferences($){let Z=await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",$).execute();await this.db.deleteFrom("connection_aggregations").where("child_connection_id","=",$).execute(),await this.cleanOrphanedPinnedViews(Z.map((X)=>X.parent_connection_id),$)}async cleanOrphanedPinnedViews($,Z){for(let X of $){let Q=await this.db.selectFrom("connections").select("metadata").where("id","=",X).executeTakeFirst();if(!Q?.metadata)continue;let Y;try{Y=typeof Q.metadata==="string"?JSON.parse(Q.metadata):Q.metadata}catch{continue}let G=Y?.ui?.pinnedViews;if(!Array.isArray(G))continue;let J=G.filter((H)=>H.connectionId!==Z);if(J.length===G.length)continue;let W=Y.ui??{},K={...Y,ui:{...W,pinnedViews:J.length>0?J:null}};await this.db.updateTable("connections").set({metadata:JSON.stringify(K)}).where("id","=",X).execute()}}deserializeVirtualMCPEntity($,Z){let X=$.created_at instanceof Date?$.created_at.toISOString():$.created_at,Q=$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at,Y=$.status==="active"?"active":"inactive",G=this.parseJson($.metadata),{sandboxMap:J,...W}=G??{},K=J!==void 0?lf0(J):void 0;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,icon:$.icon,status:Y,pinned:$.pinned,created_at:X,updated_at:Q,created_by:$.created_by,updated_by:$.updated_by??void 0,metadata:{...W,instructions:G?.instructions??null,...K!==void 0?{sandboxMap:K}:{}},connections:Z.map((H)=>({connection_id:H.child_connection_id,selected_tools:this.parseJson(H.selected_tools),selected_resources:this.parseJson(H.selected_resources),selected_prompts:this.parseJson(H.selected_prompts)}))}}parseJson($){if($===null)return null;if(typeof $==="string")try{return JSON.parse($)}catch{return null}return $}}function kg1($){let Z=new Map,X=(Q,Y)=>{let G=Z.get(Q);if(G)return G;let J=Y();return Z.set(Q,J),J};return new Proxy($,{get(Q,Y,G){if(Y==="list")return(J,W)=>X(`list:${J}:${W?.pinnedOnly?1:0}`,()=>Q.list(J,W));if(Y==="create"||Y==="update"||Y==="delete"||Y==="removeConnectionReferences")return(...J)=>{return Z.clear(),Q[Y](...J)};return Reflect.get(Q,Y,G)}})}var qy0=D(()=>{xX();V8()});function ew($){let Z=String($??"");if(Z&&!Z.includes("T"))return Z.replace(" ","T")+"Z";return Z}function L$($){return $.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function g8($){let Z=Number($??0);return Number.isFinite(Z)?Z:0}function Vv8($){if(!kv8.has($))throw Error(`Invalid groupByColumn: ${$}`);return $}function My0($){if(!Sv8.test($))throw Error(`Invalid JSONPath: ${$}`);if($.startsWith("$."))return $;if($.startsWith("."))return`$${$}`;return`$.${$}`}function Cy0($){return $.replace(/^\$\./,"").split(".").map((X)=>`'${L$(X)}'`).join(", ")}function vv8($){let Z=Cv8.exec($);if(!Z||!Z[1]||!Z[2])throw Error(`Invalid interval: ${$}`);let X=parseInt(Z[1],10),Q=Z[2],Y=_v8[Q];if(X<1||X>Y)throw Error(`Invalid interval amount: ${X}${Q} (max ${Y}${Q})`);return{amount:X,unit:Q}}function dU($,Z,X="timestamp"){let{amount:Q,unit:Y}=vv8($),J={m:"MINUTE",h:"HOUR",d:"DAY"}[Y];if(Z==="duckdb")return`time_bucket(INTERVAL '${Q} ${J}', CAST(${X} AS TIMESTAMP))`;return`toStartOfInterval(${X}, INTERVAL ${Q} ${J})`}function Td($,Z,X){if(X==="duckdb")return`json_extract_string(${$}, '${Z}')`;let Q=Cy0(Z);return`JSONExtractString(${$}, ${Q})`}function fv8($,Z,X){if(X==="duckdb")return`CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let Q=Cy0(Z);return`JSONExtractFloat(${$}, ${Q})`}function Vg1($,Z,X){if(X==="duckdb")return`TRY_CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let Q=Cy0(Z);return`toFloat64OrZero(JSONExtractString(${$}, ${Q}))`}function ky0($){if($===null||$===void 0)return{};if(typeof $==="object")return $;let Z=String($);try{return JSON.parse(Z)}catch{return{_decocms_truncated:Z}}}function Vy0($){return{id:String($.id??""),organizationId:String($.organization_id??""),connectionId:String($.connection_id??""),toolName:String($.tool_name??""),input:ky0($.input),output:ky0($.output),isError:$.is_error===1||$.is_error===!0||$.is_error==="1"||typeof $.is_error==="bigint"&&$.is_error===1n,errorMessage:$.error_message!=null?String($.error_message):null,durationMs:Number($.duration_ms??0),timestamp:(()=>{if($.timestamp instanceof Date)return $.timestamp.toISOString();let Z=String($.timestamp??""),X=new Date(Z.includes("T")?Z:Z.replace(" ","T")+"Z");return Number.isNaN(X.getTime())?Z:X.toISOString()})(),userId:$.user_id!=null?String($.user_id):null,requestId:String($.request_id??""),userAgent:$.user_agent!=null?String($.user_agent):null,virtualMcpId:$.virtual_mcp_id!=null?String($.virtual_mcp_id):null,properties:$.properties?ky0($.properties):null}}function vg1($,Z){let X=[];if($.properties)for(let[Q,Y]of Object.entries($.properties)){let G=L$(Q),J=L$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${G}') = '${J}'`);else X.push(`JSONExtractString(properties, '${G}') = '${J}'`)}if($.propertyKeys)for(let Q of $.propertyKeys){let Y=L$(Q);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Y}') IS NOT NULL AND json_extract_string(properties, '$.${Y}') != ''`);else X.push(`JSONExtractString(properties, '${Y}') IS NOT NULL AND JSONExtractString(properties, '${Y}') != ''`)}if($.propertyPatterns)for(let[Q,Y]of Object.entries($.propertyPatterns)){let G=L$(Q),J=L$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${G}') ILIKE '${J}'`);else X.push(`JSONExtractString(properties, '${G}') ILIKE '${J}'`)}if($.propertyInValues)for(let[Q,Y]of Object.entries($.propertyInValues)){let G=L$(Q),J=L$(Y);if(Z==="duckdb")X.push(`list_contains(string_split(json_extract_string(properties, '$.${G}'), ','), '${J}')`);else X.push(`has(splitByChar(',', JSONExtractString(properties, '${G}')), '${J}')`)}return X}function Cg1($,Z){let X=[];if(CG(X,Z?.startDate,$),!Z)return X;if(Z.connectionIds?.length){let Q=Z.connectionIds.map((Y)=>`'${L$(Y)}'`).join(",");X.push(`connection_id IN (${Q})`)}if(Z.toolNames?.length){let Q=Z.toolNames.map((Y)=>`'${L$(Y)}'`).join(",");X.push(`tool_name IN (${Q})`)}if(Z.virtualMcpIds?.length){let Q=Z.virtualMcpIds.map((Y)=>`'${L$(Y)}'`).join(",");X.push(`virtual_mcp_id IN (${Q})`)}if(Z.endDate)X.push(SG(Z.endDate,$));if(Z.propertyFilters)X.push(...vg1(Z.propertyFilters,$));return X}function _g1($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) >= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} >= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} >= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function SG($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) <= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} <= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} <= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function CG($,Z,X,Q="timestamp"){if(Z)$.push(_g1(Z,X,Q));else if(X==="clickhouse")$.push(_g1(new Date(Date.now()-bv8),X,Q))}class _y0{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor($,Z,X,Q,Y="clickhouse",G=!1){this.engine=$;this.sourceFactory=Z;this.metricEngine=X;this.metricSourceFactory=Q;this.dialect=Y;this.metricsFromLogs=G}async query($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${L$($.organizationId)}'`];if($.connectionId)X.push(`connection_id = '${L$($.connectionId)}'`);if($.excludeConnectionIds?.length){let U=$.excludeConnectionIds.map((O)=>`'${L$(O)}'`).join(",");X.push(`connection_id NOT IN (${U})`)}if($.virtualMcpId)X.push(`virtual_mcp_id = '${L$($.virtualMcpId)}'`);if($.toolName)X.push(`tool_name = '${L$($.toolName)}'`);if($.isError!==void 0)X.push(`is_error = ${$.isError?1:0}`);if(CG(X,$.startDate,this.dialect),$.endDate)X.push(SG($.endDate,this.dialect));if($.propertyFilters)X.push(...vg1($.propertyFilters,this.dialect));let Q=1000,Y=Math.min(Math.max(1,Math.floor($.limit??50)),Q),G=Math.max(0,Math.floor($.offset??0)),J=X.join(" AND ");if(this.dialect==="duckdb"){let U=`SELECT ${Sg1}, count(*) OVER () AS _total FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${G}`,O=await this.engine.query(U);if(O.length===0)return{logs:[],total:0};let B=Number(O[0]._total??0);return{logs:O.map(Vy0),total:B}}let W=`SELECT count(*) AS total FROM ${Z} WHERE ${J}`,K=`SELECT ${Sg1} FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${G}`,[H,F]=await Promise.all([this.engine.query(W),this.engine.query(K)]),N=Number(H[0]?.total??0);return{logs:F.map(Vy0),total:N}}async getById($,Z){if(!$||!Z)return null;let Q=`SELECT * FROM ${this.sourceFactory($)} WHERE organization_id = '${L$($)}' AND id = '${L$(Z)}' LIMIT 1`,Y=await this.engine.query(Q);if(Y.length===0)return null;return Vy0(Y[0])}async getStats($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${L$($.organizationId)}'`];if(CG(X,$.startDate,this.dialect),$.endDate)X.push(SG($.endDate,this.dialect));let Q=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${Z} WHERE ${X.join(" AND ")}`,G=(await this.engine.query(Q))[0]??{};return{totalCalls:Number(G.total_calls??0),errorRate:Number(G.error_rate??0),avgDurationMs:Number(G.avg_duration_ms??0)}}async queryToolCallHeatmap($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${L$($.organizationId)}'`,"type = 'tool_call'"];if($.filters?.virtualMcpIds?.length){let J=$.filters.virtualMcpIds.map((W)=>`'${L$(W)}'`).join(",");X.push(`virtual_mcp_id IN (${J})`)}if($.filters?.excludeConnectionIds?.length){let J=$.filters.excludeConnectionIds.map((W)=>`'${L$(W)}'`).join(",");X.push(`connection_id NOT IN (${J})`)}if(CG(X,$.startDate,this.dialect),$.endDate)X.push(SG($.endDate,this.dialect));let Q=Math.min(Math.max(1,Math.floor($.limit??500)),1000),Y=`SELECT virtual_mcp_id, tool_name, count(*) AS calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1 ELSE 0 END), 0) AS errors, coalesce(sum(length(output)), 0) AS output_size FROM ${Z} WHERE ${X.join(" AND ")} GROUP BY virtual_mcp_id, tool_name ORDER BY calls DESC LIMIT ${Q}`;return{cells:(await this.engine.query(Y)).map((J)=>({virtualMcpId:J.virtual_mcp_id?String(J.virtual_mcp_id):null,toolName:String(J.tool_name??""),calls:Number(J.calls??0),errors:Number(J.errors??0),outputSize:Number(J.output_size??0)}))}}async queryLlmUsageStats($){let Z={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!$.organizationId||!$.connectionId)return Z;let X=this.dialect,Q=X==="clickhouse",Y=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),G=dU($.interval,X,"timestamp"),J=(E)=>`coalesce(${Vg1("properties",`$.${E}`,X)}, 0)`,W=Q?"count()":"count(*)",K=Q?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",H=(E)=>Q?`quantile(${E})(duration_ms)`:`quantile_cont(duration_ms, ${E})`,F=[`organization_id = '${L$($.organizationId)}'`,`connection_id = '${L$($.connectionId)}'`];if(CG(F,$.startDate,X),$.endDate)F.push(SG($.endDate,X));if($.userIds?.length){let E=$.userIds.slice(0,100).map((j)=>`'${L$(j)}'`).join(",");F.push(`user_id IN (${E})`)}let N=F.join(" AND "),U=Math.min(Math.max(1,Math.floor($.topN??5)),20),O=`${W} AS calls,
109
+ `.trim();sy1=kG("site-diagnostics_"),Wi6=sy1.is,Ki6=sy1.get,ey1=kG("commerce-discovery_"),Hi6=ey1.is,R40=ey1.get;cU={AGENT_MANAGER:kG("studio-agent-manager_"),AUTOMATION_MANAGER:kG("studio-automation-manager_"),CONNECTION_MANAGER:kG("studio-connection-manager_"),API_KEY_MANAGER:kG("studio-api-key-manager_"),STORE_MANAGER:kG("studio-store-manager_"),BRAND_MANAGER:kG("studio-brand-manager_"),USAGE_MANAGER:kG("studio-usage-manager_")},TQ={AGENT_MANAGER:cU.AGENT_MANAGER.get,AUTOMATION_MANAGER:cU.AUTOMATION_MANAGER.get,CONNECTION_MANAGER:cU.CONNECTION_MANAGER.get,API_KEY_MANAGER:cU.API_KEY_MANAGER.get,STORE_MANAGER:cU.STORE_MANAGER.get,BRAND_MANAGER:cU.BRAND_MANAGER.get,USAGE_MANAGER:cU.USAGE_MANAGER.get}});function Gg1($){return $.toLowerCase().replace(/[^a-z0-9]/g,"")}function Lv8($){return Gg1($).includes("deepresearch")}function Jg1($){let Z=Gg1($);if(Z.includes("deepresearch"))return!1;return Ev8.some((X)=>Z.includes(X))}function jv8($){return $.asyncResearch!==!0&&Jg1($.modelId)}function zv8($){return $.asyncResearch===!0||Lv8($.modelId)||Jg1($.modelId)}function Wb($,Z,X,Q){for(let Y of X){let G=$.find((J)=>J.modelId===Y);if(G)return{keyId:Z,modelId:G.modelId,title:G.title}}for(let Y of X){let G=$.find((J)=>J.modelId.includes(Y));if(G)return{keyId:Z,modelId:G.modelId,title:G.title}}if(Q){let Y=$.find(Q);if(Y)return{keyId:Z,modelId:Y.modelId,title:Y.title}}return null}function Wg1($,Z){let X={chat:{fast:null,smart:null,thinking:null},image:null,webSearch:null,deepResearch:null};for(let Q of $){let Y=Z[Q.id]??[],G=Q.providerId;if(!X.chat.fast)X.chat.fast=Wb(Y,Q.id,Nv8[G]??[]);if(!X.chat.smart)X.chat.smart=Wb(Y,Q.id,Uv8[G]??[]);if(!X.chat.thinking)X.chat.thinking=Wb(Y,Q.id,Ov8[G]??[]);if(!X.image)X.image=Wb(Y,Q.id,Bv8[G]??[],(J)=>J.capabilities?.includes("image")===!0);if(!X.webSearch)X.webSearch=Wb(Y,Q.id,Dv8[G]??[],jv8);if(!X.deepResearch)X.deepResearch=Wb(Y,Q.id,wv8[G]??[],zv8)}return X}var Nv8,Uv8,Ov8,Bv8,Dv8,wv8,Ev8;var Kg1=D(()=>{Nv8={anthropic:["claude-haiku-4-5","claude-haiku"],openrouter:["qwen/qwen3.5-flash","anthropic/claude-haiku-4.5","anthropic/claude-haiku","google/gemini-3-flash"],deco:["qwen/qwen3.5-flash","anthropic/claude-haiku"],llmapi:["claude-haiku-4-5","claude-haiku","gpt-4o-mini"],google:["gemini-2.5-flash","gemini-3-flash"]},Uv8={anthropic:["claude-sonnet-5","claude-sonnet"],openrouter:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude-opus-4.8","google/gemini-3-pro"],deco:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude"],llmapi:["claude-sonnet-4-6","claude-sonnet"],google:["gemini-3-pro","gemini-3-flash"]},Ov8={anthropic:["claude-opus-4-8","claude-sonnet-5","claude-sonnet","claude-fable-5"],openrouter:["anthropic/claude-opus-4.8:extended","anthropic/claude-opus-4.8","anthropic/claude-sonnet-5:extended","anthropic/claude-sonnet-5","google/gemini-3-pro","anthropic/claude-fable-5"],deco:["anthropic/claude-opus","anthropic/claude-sonnet-4.6","anthropic/claude-sonnet","anthropic/claude-fable"],llmapi:["claude-opus-4-8","claude-opus","claude-sonnet-4-6"],google:["gemini-3-pro"]},Bv8={openrouter:["openai/gpt-image-1","google/gemini-2.0-flash-image"],deco:["openai/gpt-image-1","google/gemini-2.0-flash-image"],llmapi:["gemini-2.5-flash-image","gpt-image-1"],google:["gemini-2.0-flash-image"]},Dv8={openrouter:["perplexity/sonar","perplexity/sonar-pro"],deco:["perplexity/sonar","perplexity/sonar-pro"]},wv8={openrouter:["perplexity/deep-research","perplexity/sonar-pro"],deco:["perplexity/deep-research","perplexity/sonar-pro"]};Ev8=["sonar","searchpreview","online"]});function I40($){if(!$)return;let Z={};for(let X in $){let Q=$[X];if(typeof Q==="object"&&Q!==null){let Y={};for(let G of Pv8)if(G in Q)Y[G]=Q[G];Z[X]=Y}}return Object.keys(Z).length>0?Z:void 0}var Pv8;var Hg1=D(()=>{Pv8=["usage","cost","model"]});var V8=D(()=>{X80();Yg1();Kg1();Hg1()});function q40($){return $.toLowerCase().trim().replace(/\//g,"-").replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function lU($){if($.app_name)return $.app_name;if($.connection_url)try{let Z=new URL($.connection_url),Q=((Z.port?`${Z.hostname}-${Z.port}`:Z.hostname)+Z.pathname).replace(/\/+$/,"");return q40(Q)}catch{return q40($.connection_url)}if($.title)return q40($.title);return $.id??"unknown"}var M40=()=>{};var Kb=300000,k40=5000,Ey0=3,jy0=30000,Fg1=65000,V40=1000,Hb=3,Ng1=5,Ug1=60000,Og1=300000,zy0=60000;function Bg1(){if(YF.size<V40)return;let $=null,Z=1/0;for(let[X,Q]of YF)if(Q.lastFailureAt<Z)Z=Q.lastFailureAt,$=X;if($)YF.delete($)}function Dg1($){let Z=YF.get($);if(!Z)return Bg1(),YF.set($,{consecutiveFailures:1,disabled:!1,lastFailureAt:Date.now()}),{consecutiveFailures:1,thresholdCrossed:1>=Hb};return Z.consecutiveFailures++,Z.lastFailureAt=Date.now(),{consecutiveFailures:Z.consecutiveFailures,thresholdCrossed:Z.consecutiveFailures>=Hb}}function Py0($){let Z=YF.get($);if(Z){Z.disabled=!0;return}Bg1(),YF.set($,{consecutiveFailures:Hb,disabled:!0,lastFailureAt:Date.now()})}function wg1($){return YF.get($)?.disabled??!1}function Lg1($){YF.delete($)}var YF;var Eg1=D(()=>{YF=new Map});import{sql as i$}from"kysely";function zg1($){if($.length===0)return null;let Z=$[0];if($.length===1&&Tv8.has(Z))return i$.ref(Z);if($.length===2&&jg1.has(Z)){let X=$[1];return i$`${i$.ref(Z)}->>${i$.lit(X)}`}if($.length>2&&jg1.has(Z)){let X=`{${$.slice(1).join(",")}}`;return i$`${i$.ref(Z)}#>>${i$.lit(X)}`}return null}function Pg1($){if("conditions"in $){let{operator:G,conditions:J}=$;if(J.length===0)return i$`true`;let W=J.map((K)=>Pg1(K));switch(G){case"and":return i$`(${i$.join(W,i$` AND `)})`;case"or":return i$`(${i$.join(W,i$` OR `)})`;case"not":return i$`NOT (${i$.join(W,i$` AND `)})`;default:return i$`true`}}let{field:Z,operator:X,value:Q}=$,Y=zg1(Z);if(!Y)return i$`true`;switch(X){case"eq":return Q===null?i$`${Y} IS NULL`:i$`${Y} = ${i$.val(Q)}`;case"gt":return i$`${Y} > ${i$.val(Q)}`;case"gte":return i$`${Y} >= ${i$.val(Q)}`;case"lt":return i$`${Y} < ${i$.val(Q)}`;case"lte":return i$`${Y} <= ${i$.val(Q)}`;case"in":if(!Array.isArray(Q)||Q.length===0)return i$`false`;return i$`${Y} IN (${i$.join(Q.map((G)=>i$.val(G)))})`;case"like":return i$`${Y} ILIKE ${i$.val(Q)}`;case"contains":{let G=String(Q).replace(/[%_\\]/g,"\\$&");return i$`${Y} ILIKE ${i$.val(`%${G}%`)}`}default:return i$`true`}}class Ad{db;vault;constructor($,Z){this.db=$;this.vault=Z}async create($){let Z=$.id??n8("conn"),X=new Date().toISOString(),Q=await this.db.selectFrom("connections").select("organization_id").where("id","=",Z).executeTakeFirst();if(Q){if(Q.organization_id!==$.organization_id)throw Error("Connection ID already exists");return this.update(Z,$)}let Y=lU($),G=await this.serializeConnection({...$,id:$.id??Z,slug:Y,status:"active",created_at:X,updated_at:X}),J;try{J=await this.db.insertInto("connections").values(G).returningAll().executeTakeFirst()}catch(W){if(W instanceof Error&&(W.message.includes("duplicate key")||W.message.includes("unique constraint")))throw Error("Connection ID already exists");throw W}if(!J)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(J)}async createNew($){let Z=$.id??n8("conn"),X=new Date().toISOString(),Q=lU($),Y=await this.serializeConnection({...$,id:Z,slug:Q,status:"active",created_at:X,updated_at:X}),G;try{G=await this.db.insertInto("connections").values(Y).returningAll().executeTakeFirst()}catch(J){if(J instanceof Error&&(J.message.includes("duplicate key")||J.message.includes("unique constraint")))throw Error("Connection ID already exists");throw J}if(!G)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(G)}async findById($,Z){let X=VG($);if(X)return Qg1(Z??X);let Q=this.db.selectFrom("connections").selectAll().where("id","=",$);if(Z)Q=Q.where("organization_id","=",Z);let Y=await Q.executeTakeFirst();return Y?this.deserializeConnection(Y):null}async list($,Z){let X=this.db.selectFrom("connections").selectAll().where("organization_id","=",$);if(!Z?.includeVirtual)X=X.where("connection_type","!=","VIRTUAL");if(Z?.slug)X=X.where("slug","=",Z.slug);if(Z?.where)X=X.where(Pg1(Z.where));let G=(await this.db.selectFrom(X.as("filtered")).select(i$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;if(Z?.orderBy&&Z.orderBy.length>0)for(let K of Z.orderBy){let H=zg1(K.field);if(!H)continue;let F=K.direction==="desc"?i$`desc`:i$`asc`,N=K.nulls==="first"?i$`nulls first`:i$`nulls last`;X=X.orderBy(i$`${H} ${F} ${N}`)}if(Z?.limit)X=X.limit(Z.limit);if(Z?.offset)X=X.offset(Z.offset);let J=await X.execute();return{items:await Promise.all(J.map((K)=>this.deserializeConnection(K))),totalCount:G}}async update($,Z){if(Object.keys(Z).length===0){let J=await this.findById($);if(!J)throw Error("Connection not found");return J}let X={...Z},Q=await this.db.selectFrom("connections").select(["app_name","connection_url","title"]).where("id","=",$).executeTakeFirst();if(Q){let J=(W)=>Z[W]===void 0?Q[W]:Z[W];X.slug=lU({app_name:J("app_name"),connection_url:J("connection_url"),title:J("title"),id:$})}let Y=await this.serializeConnection({...X,updated_at:new Date().toISOString()}),G=await this.db.updateTable("connections").set(Y).where("id","=",$).returningAll().executeTakeFirst();if(!G)throw Error("Connection not found after update");return this.deserializeConnection(G)}async isReferencedByThread($){return await this.db.selectFrom("threads").select("id").where(i$`metadata -> 'githubRepo' ->> 'connectionId' = ${$}`).limit(1).executeTakeFirst()!==void 0}async delete($){await this.db.deleteFrom("connections").where("id","=",$).execute()}async testConnection($,Z){let X=await this.findById($);if(!X)throw Error("Connection not found");let Q=Date.now();if(X.connection_type==="STDIO")return{healthy:!0,latencyMs:Date.now()-Q};if(!X.connection_url)return{healthy:!1,latencyMs:Date.now()-Q};try{if(await Yb(X.connection_url))return{healthy:!1,latencyMs:Date.now()-Q};let G=X.connection_headers,J=new AbortController,W=setTimeout(()=>J.abort(),1e4),K;try{K=await Gb()(X.connection_url,{method:"POST",signal:J.signal,headers:{"Content-Type":"application/json",...X.connection_token&&{Authorization:`Bearer ${X.connection_token}`},...G?.headers,...Z},body:JSON.stringify({jsonrpc:"2.0",method:"ping",id:1})})}finally{clearTimeout(W)}return{healthy:K.ok||K.status===404,latencyMs:Date.now()-Q}}catch{return{healthy:!1,latencyMs:Date.now()-Q}}}async serializeConnection($){let Z={};for(let[X,Q]of Object.entries($)){if(Q===void 0)continue;if(X==="tools")continue;if(X==="connection_token"&&Q)Z[X]=await this.vault.encrypt(Q);else if(X==="configuration_state"&&Q){let Y=JSON.stringify(Q);Z[X]=await this.vault.encrypt(Y)}else if(X==="connection_headers"&&Q){let Y=Q;if(bW(Y)&&Y.envVars){let G={};for(let[J,W]of Object.entries(Y.envVars))G[J]=await this.vault.encrypt(W);Z[X]=JSON.stringify({...Y,envVars:G})}else Z[X]=JSON.stringify(Y)}else if(Av8.includes(X))Z[X]=Q?JSON.stringify(Q):null;else Z[X]=Q}return Z}async handleDecryptFailures($,Z){let X=`connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title})`;if(wg1($.id))return;if($.status!=="active"){Py0($.id);return}let{thresholdCrossed:Q}=Dg1($.id);if(!Q){for(let{label:Y,error:G}of Z)console.error(`Failed to decrypt ${Y} for ${X}:`,G);return}try{await this.db.updateTable("connections").set({status:"error"}).where("id","=",$.id).execute(),Py0($.id),console.error(`Disabled ${X} after ${Hb} consecutive decryption failures.`,Z[0]?.error)}catch(Y){console.error(`Failed to disable ${X} after decryption failures:`,Y)}}async deserializeConnection($){let Z=[],X=null;if($.connection_token)try{X=await this.vault.decrypt($.connection_token)}catch(J){Z.push({label:"connection token",error:J})}let Q=null;if($.configuration_state)try{let J=await this.vault.decrypt($.configuration_state);Q=JSON.parse(J)}catch(J){Z.push({label:"configuration state",error:J})}if(Z.length>0)await this.handleDecryptFailures($,Z);else if($.connection_token||$.configuration_state)Lg1($.id);let Y=null;if($.connection_headers)try{let J=JSON.parse($.connection_headers);if(bW(J)&&J.envVars){let W={};for(let[K,H]of Object.entries(J.envVars))try{W[K]=await this.vault.decrypt(H)}catch{W[K]=H}Y={...J,envVars:W}}else Y=J}catch(J){console.error(`Failed to parse connection_headers for connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title}):`,J)}let G=(J)=>{if(J===null)return null;if(typeof J==="string")try{return JSON.parse(J)}catch{return null}return J};return{id:$.id,organization_id:$.organization_id,created_by:$.created_by,updated_by:$.updated_by??void 0,title:$.title,description:$.description,icon:$.icon,app_name:$.app_name,app_id:$.app_id,slug:$.slug,connection_type:$.connection_type,connection_url:$.connection_url,connection_token:X,connection_headers:Y,oauth_config:G($.oauth_config),configuration_state:Q,configuration_scopes:G($.configuration_scopes),metadata:G($.metadata),tools:null,bindings:G($.bindings),status:$.status,created_at:$.created_at,updated_at:$.updated_at}}}var Av8,Tv8,jg1;var Ay0=D(()=>{yW();Pd();xX();V8();M40();Eg1();Av8=["connection_headers","oauth_config","configuration_scopes","metadata","bindings"],Tv8=new Set(["id","organization_id","created_by","updated_by","title","description","icon","app_name","app_id","slug","connection_type","connection_url","status","created_at","updated_at"]),jg1=new Set(["metadata","configuration_scopes","bindings"])});import{createHash as Rv8,randomBytes as Iv8,timingSafeEqual as fi6}from"crypto";function Mv8($){return $.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Ry0($){return Rv8("sha256").update($).digest("hex")}function Rg1($){let Z=Ty0.length+1,X=Z+Tg1;if(!$.startsWith(`${Ty0}_`)||$.length<=X+1||$[X]!=="_")return null;let Q=$.slice(Z,X),Y=$.slice(X+1);if(!Ag1.test(Q)||!Ag1.test(Y))return null;return Q}function Ig1(){let $=Mv8(Iv8(qv8)),Z=$.slice(0,Tg1),X=`${Ty0}_${Z}_${$}`;return{plaintext:X,prefix:Z,hash:Ry0(X)}}var Ty0="stv",qv8=32,Tg1=12,Ag1;var qg1=D(()=>{Ag1=/^[A-Za-z0-9_-]+$/});function Mg1($){return{id:$.id,organizationId:$.organization_id,subjectConnectionId:$.subject_connection_id,tokenHash:$.token_hash,tokenPrefix:$.token_prefix,name:$.name,revokedAt:$.revoked_at,lastUsedAt:$.last_used_at,createdAt:$.created_at,updatedAt:$.updated_at}}class Iy0{db;constructor($){this.db=$}async createOrRotateWorkloadToken($){let Z=$.name??"default";return await this.db.transaction().execute(async(Q)=>{if(!await Q.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let G=Ig1(),J=new Date().toISOString();await Q.updateTable("connection_workload_tokens").set({revoked_at:J,updated_at:J}).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",Z).where("revoked_at","is",null).execute();let W=await Q.insertInto("connection_workload_tokens").values({id:n8("cwt"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,token_hash:G.hash,token_prefix:G.prefix,name:Z,revoked_at:null,last_used_at:null,created_at:J,updated_at:J}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:G.plaintext,record:Mg1(W)}})}async findActiveWorkloadToken($){let Z=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",$.name??"default").where("revoked_at","is",null).executeTakeFirst();return Z?Mg1(Z):null}async revokeWorkloadToken($){let Z=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:Z,updated_at:Z}).where("id","=",$.tokenId).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken($){let Z=Rg1($);if(!Z)return null;let X=Ry0($),Q=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",Z).where("token_hash","=",X).where("revoked_at","is",null).executeTakeFirst();if(!Q)return null;let Y=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:Y,updated_at:Y}).where("id","=",Q.id).execute(),{tokenId:Q.id,tokenPrefix:Q.token_prefix,organizationId:Q.organization_id,subjectConnectionId:Q.subject_connection_id}}async replaceGrantsForSubject($){await this.db.transaction().execute(async(Z)=>{if(!await Z.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let Q=[...new Set($.grants.map((J)=>J.targetConnectionId))];if(Q.length>0){if((await Z.selectFrom("connections").select("id").where("organization_id","=",$.organizationId).where("id","in",Q).execute()).length!==Q.length)throw Error("Referenced connection not found in organization")}if(await Z.deleteFrom("connection_credential_grants").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).execute(),$.grants.length===0)return;let Y=new Date().toISOString(),G=$.grants.map((J)=>({id:n8("ccg"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,target_connection_id:J.targetConnectionId,scope:J.scope,created_by:$.createdBy,created_at:Y,updated_at:Y}));await Z.insertInto("connection_credential_grants").values(G).execute()})}async hasGrant($){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("target_connection_id","=",$.targetConnectionId).where("scope","=",$.scope).executeTakeFirst()}}var S40="credential:access-token:read",C40="credential:configuration:read";var _40=D(()=>{xX();qg1()});class Fb{db;constructor($){this.db=$}async create($,Z,X,Q){let Y=Q?.id??n8("vir"),G=new Date().toISOString();await this.db.transaction().execute(async(W)=>{if(await W.insertInto("connections").values({id:Y,organization_id:$,created_by:Z,title:X.title,description:X.description??null,icon:X.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",pinned:X.pinned??!1,connection_url:`virtual://${Y}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:X.metadata?JSON.stringify(X.metadata):null,bindings:null,status:X.status??"active",created_at:G,updated_at:G}).execute(),X.connections.length>0)await W.insertInto("connection_aggregations").values(X.connections.map((K)=>({id:n8("agg"),parent_connection_id:Y,child_connection_id:K.connection_id,selected_tools:K.selected_tools?JSON.stringify(K.selected_tools):null,selected_resources:K.selected_resources?JSON.stringify(K.selected_resources):null,selected_prompts:K.selected_prompts?JSON.stringify(K.selected_prompts):null,dependency_mode:"direct",created_at:G}))).execute()});let J=await this.findById(Y);if(!J)throw Error(`Failed to create virtual MCP with id: ${Y}`);return J}async findById($,Z){let X=VG($);if(X)return{...Ly0(Z??X),pinned:!1,connections:[]};let Q=T40($);if(Q)return{...ay1(Z??Q),pinned:!1,connections:[]};return this.findByIdInternal(this.db,$)}async findByIdInternal($,Z){let X=await $.selectFrom("connections").selectAll().where("id","=",Z).where("connection_type","=","VIRTUAL").executeTakeFirst();if(!X)return null;let Q=await $.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","=",Z).where("dependency_mode","=","direct").execute();return this.deserializeVirtualMCPEntity(X,Q)}async list($,Z){let X=this.db.selectFrom("connections").selectAll().where("organization_id","=",$).where("connection_type","=","VIRTUAL");if(Z?.pinnedOnly)X=X.where("pinned","=",!0);let Q=await X.execute(),Y=Q.map((W)=>W.id);if(Y.length===0)return[];let G=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Y).where("dependency_mode","=","direct").execute(),J=new Map;for(let W of G){let K=J.get(W.parent_connection_id)??[];K.push(W),J.set(W.parent_connection_id,K)}return Q.map((W)=>this.deserializeVirtualMCPEntity(W,J.get(W.id)??[]))}async listByIds($,Z){if(Z.length===0)return[];let X=await this.db.selectFrom("connections").selectAll().where("id","in",Z).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(X.length===0)return[];let Q=X.map((J)=>J.id),Y=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Q).where("dependency_mode","=","direct").execute(),G=new Map;for(let J of Y){let W=G.get(J.parent_connection_id)??[];W.push(J),G.set(J.parent_connection_id,W)}return X.map((J)=>this.deserializeVirtualMCPEntity(J,G.get(J.id)??[]))}async listByConnectionId($,Z){let Q=(await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",Z).execute()).map((K)=>K.parent_connection_id);if(Q.length===0)return[];let Y=await this.db.selectFrom("connections").selectAll().where("id","in",Q).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(Y.length===0)return[];let G=Y.map((K)=>K.id),J=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",G).where("dependency_mode","=","direct").execute(),W=new Map;for(let K of J){let H=W.get(K.parent_connection_id)??[];H.push(K),W.set(K.parent_connection_id,H)}return Y.map((K)=>this.deserializeVirtualMCPEntity(K,W.get(K.id)??[]))}async update($,Z,X){let Q=new Date().toISOString(),Y={updated_at:Q,updated_by:Z};if(X.title!==void 0)Y.title=X.title;if(X.description!==void 0)Y.description=X.description;if(X.icon!==void 0)Y.icon=X.icon;if(X.status!==void 0)Y.status=X.status;if(X.pinned!==void 0)Y.pinned=X.pinned;if(X.metadata!==void 0)Y.metadata=X.metadata?JSON.stringify(X.metadata):null;let G=[];await this.db.transaction().execute(async(W)=>{if(await W.updateTable("connections").set(Y).where("id","=",$).where("connection_type","=","VIRTUAL").execute(),X.connections!==void 0){let K=await W.selectFrom("connection_aggregations").select("child_connection_id").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),H=new Set(K.map((N)=>N.child_connection_id));if(await W.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),X.connections.length>0)await W.insertInto("connection_aggregations").values(X.connections.map((N)=>({id:n8("agg"),parent_connection_id:$,child_connection_id:N.connection_id,selected_tools:N.selected_tools?JSON.stringify(N.selected_tools):null,selected_resources:N.selected_resources?JSON.stringify(N.selected_resources):null,selected_prompts:N.selected_prompts?JSON.stringify(N.selected_prompts):null,dependency_mode:"direct",created_at:Q}))).execute();let F=new Set(X.connections.map((N)=>N.connection_id));for(let N of H)if(!F.has(N))G.push(N)}});for(let W of G)await this.cleanOrphanedPinnedViews([$],W);let J=await this.findById($);if(!J)throw Error("Virtual MCP not found after update");return J}async delete($){await this.db.transaction().execute(async(Z)=>{await Z.deleteFrom("threads").where("virtual_mcp_id","=",$).execute(),await Z.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).execute(),await Z.deleteFrom("connections").where("id","=",$).where("connection_type","=","VIRTUAL").execute()})}async removeConnectionReferences($){let Z=await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",$).execute();await this.db.deleteFrom("connection_aggregations").where("child_connection_id","=",$).execute(),await this.cleanOrphanedPinnedViews(Z.map((X)=>X.parent_connection_id),$)}async cleanOrphanedPinnedViews($,Z){for(let X of $){let Q=await this.db.selectFrom("connections").select("metadata").where("id","=",X).executeTakeFirst();if(!Q?.metadata)continue;let Y;try{Y=typeof Q.metadata==="string"?JSON.parse(Q.metadata):Q.metadata}catch{continue}let G=Y?.ui?.pinnedViews;if(!Array.isArray(G))continue;let J=G.filter((H)=>H.connectionId!==Z);if(J.length===G.length)continue;let W=Y.ui??{},K={...Y,ui:{...W,pinnedViews:J.length>0?J:null}};await this.db.updateTable("connections").set({metadata:JSON.stringify(K)}).where("id","=",X).execute()}}deserializeVirtualMCPEntity($,Z){let X=$.created_at instanceof Date?$.created_at.toISOString():$.created_at,Q=$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at,Y=$.status==="active"?"active":"inactive",G=this.parseJson($.metadata),{sandboxMap:J,...W}=G??{},K=J!==void 0?lf0(J):void 0;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,icon:$.icon,status:Y,pinned:$.pinned,created_at:X,updated_at:Q,created_by:$.created_by,updated_by:$.updated_by??void 0,metadata:{...W,instructions:G?.instructions??null,...K!==void 0?{sandboxMap:K}:{}},connections:Z.map((H)=>({connection_id:H.child_connection_id,selected_tools:this.parseJson(H.selected_tools),selected_resources:this.parseJson(H.selected_resources),selected_prompts:this.parseJson(H.selected_prompts)}))}}parseJson($){if($===null)return null;if(typeof $==="string")try{return JSON.parse($)}catch{return null}return $}}function kg1($){let Z=new Map,X=(Q,Y)=>{let G=Z.get(Q);if(G)return G;let J=Y();return Z.set(Q,J),J};return new Proxy($,{get(Q,Y,G){if(Y==="list")return(J,W)=>X(`list:${J}:${W?.pinnedOnly?1:0}`,()=>Q.list(J,W));if(Y==="create"||Y==="update"||Y==="delete"||Y==="removeConnectionReferences")return(...J)=>{return Z.clear(),Q[Y](...J)};return Reflect.get(Q,Y,G)}})}var qy0=D(()=>{xX();V8()});function ew($){let Z=String($??"");if(Z&&!Z.includes("T"))return Z.replace(" ","T")+"Z";return Z}function L$($){return $.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function g8($){let Z=Number($??0);return Number.isFinite(Z)?Z:0}function Vv8($){if(!kv8.has($))throw Error(`Invalid groupByColumn: ${$}`);return $}function My0($){if(!Sv8.test($))throw Error(`Invalid JSONPath: ${$}`);if($.startsWith("$."))return $;if($.startsWith("."))return`$${$}`;return`$.${$}`}function Cy0($){return $.replace(/^\$\./,"").split(".").map((X)=>`'${L$(X)}'`).join(", ")}function vv8($){let Z=Cv8.exec($);if(!Z||!Z[1]||!Z[2])throw Error(`Invalid interval: ${$}`);let X=parseInt(Z[1],10),Q=Z[2],Y=_v8[Q];if(X<1||X>Y)throw Error(`Invalid interval amount: ${X}${Q} (max ${Y}${Q})`);return{amount:X,unit:Q}}function dU($,Z,X="timestamp"){let{amount:Q,unit:Y}=vv8($),J={m:"MINUTE",h:"HOUR",d:"DAY"}[Y];if(Z==="duckdb")return`time_bucket(INTERVAL '${Q} ${J}', CAST(${X} AS TIMESTAMP))`;return`toStartOfInterval(${X}, INTERVAL ${Q} ${J})`}function Td($,Z,X){if(X==="duckdb")return`json_extract_string(${$}, '${Z}')`;let Q=Cy0(Z);return`JSONExtractString(${$}, ${Q})`}function fv8($,Z,X){if(X==="duckdb")return`CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let Q=Cy0(Z);return`JSONExtractFloat(${$}, ${Q})`}function Vg1($,Z,X){if(X==="duckdb")return`TRY_CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let Q=Cy0(Z);return`toFloat64OrZero(JSONExtractString(${$}, ${Q}))`}function ky0($){if($===null||$===void 0)return{};if(typeof $==="object")return $;let Z=String($);try{return JSON.parse(Z)}catch{return{_decocms_truncated:Z}}}function Vy0($){return{id:String($.id??""),organizationId:String($.organization_id??""),connectionId:String($.connection_id??""),toolName:String($.tool_name??""),input:ky0($.input),output:ky0($.output),isError:$.is_error===1||$.is_error===!0||$.is_error==="1"||typeof $.is_error==="bigint"&&$.is_error===1n,errorMessage:$.error_message!=null?String($.error_message):null,durationMs:Number($.duration_ms??0),timestamp:(()=>{if($.timestamp instanceof Date)return $.timestamp.toISOString();let Z=String($.timestamp??""),X=new Date(Z.includes("T")?Z:Z.replace(" ","T")+"Z");return Number.isNaN(X.getTime())?Z:X.toISOString()})(),userId:$.user_id!=null?String($.user_id):null,requestId:String($.request_id??""),userAgent:$.user_agent!=null?String($.user_agent):null,virtualMcpId:$.virtual_mcp_id!=null?String($.virtual_mcp_id):null,properties:$.properties?ky0($.properties):null}}function vg1($,Z){let X=[];if($.properties)for(let[Q,Y]of Object.entries($.properties)){let G=L$(Q),J=L$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${G}') = '${J}'`);else X.push(`JSONExtractString(properties, '${G}') = '${J}'`)}if($.propertyKeys)for(let Q of $.propertyKeys){let Y=L$(Q);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${Y}') IS NOT NULL AND json_extract_string(properties, '$.${Y}') != ''`);else X.push(`JSONExtractString(properties, '${Y}') IS NOT NULL AND JSONExtractString(properties, '${Y}') != ''`)}if($.propertyPatterns)for(let[Q,Y]of Object.entries($.propertyPatterns)){let G=L$(Q),J=L$(Y);if(Z==="duckdb")X.push(`json_extract_string(properties, '$.${G}') ILIKE '${J}'`);else X.push(`JSONExtractString(properties, '${G}') ILIKE '${J}'`)}if($.propertyInValues)for(let[Q,Y]of Object.entries($.propertyInValues)){let G=L$(Q),J=L$(Y);if(Z==="duckdb")X.push(`list_contains(string_split(json_extract_string(properties, '$.${G}'), ','), '${J}')`);else X.push(`has(splitByChar(',', JSONExtractString(properties, '${G}')), '${J}')`)}return X}function Cg1($,Z){let X=[];if(CG(X,Z?.startDate,$),!Z)return X;if(Z.connectionIds?.length){let Q=Z.connectionIds.map((Y)=>`'${L$(Y)}'`).join(",");X.push(`connection_id IN (${Q})`)}if(Z.toolNames?.length){let Q=Z.toolNames.map((Y)=>`'${L$(Y)}'`).join(",");X.push(`tool_name IN (${Q})`)}if(Z.virtualMcpIds?.length){let Q=Z.virtualMcpIds.map((Y)=>`'${L$(Y)}'`).join(",");X.push(`virtual_mcp_id IN (${Q})`)}if(Z.endDate)X.push(SG(Z.endDate,$));if(Z.propertyFilters)X.push(...vg1(Z.propertyFilters,$));return X}function _g1($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) >= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} >= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} >= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function SG($,Z,X="timestamp"){if(Z==="duckdb")return`CAST(${X} AS TIMESTAMP) <= TIMESTAMP '${$.toISOString()}'`;if(X==="bucket")return`${X} <= parseDateTimeBestEffort('${$.toISOString()}')`;return`${X} <= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function CG($,Z,X,Q="timestamp"){if(Z)$.push(_g1(Z,X,Q));else if(X==="clickhouse")$.push(_g1(new Date(Date.now()-bv8),X,Q))}class _y0{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor($,Z,X,Q,Y="clickhouse",G=!1){this.engine=$;this.sourceFactory=Z;this.metricEngine=X;this.metricSourceFactory=Q;this.dialect=Y;this.metricsFromLogs=G}async query($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${L$($.organizationId)}'`];if($.connectionId)X.push(`connection_id = '${L$($.connectionId)}'`);if($.excludeConnectionIds?.length){let U=$.excludeConnectionIds.map((O)=>`'${L$(O)}'`).join(",");X.push(`connection_id NOT IN (${U})`)}if($.virtualMcpId)X.push(`virtual_mcp_id = '${L$($.virtualMcpId)}'`);if($.toolName)X.push(`tool_name = '${L$($.toolName)}'`);if($.isError!==void 0)X.push(`is_error = ${$.isError?1:0}`);if(CG(X,$.startDate,this.dialect),$.endDate)X.push(SG($.endDate,this.dialect));if($.propertyFilters)X.push(...vg1($.propertyFilters,this.dialect));let Q=1000,Y=Math.min(Math.max(1,Math.floor($.limit??50)),Q),G=Math.max(0,Math.floor($.offset??0)),J=X.join(" AND ");if(this.dialect==="duckdb"){let U=`SELECT ${Sg1}, count(*) OVER () AS _total FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${G}`,O=await this.engine.query(U);if(O.length===0)return{logs:[],total:0};let B=Number(O[0]._total??0);return{logs:O.map(Vy0),total:B}}let W=`SELECT count(*) AS total FROM ${Z} WHERE ${J}`,K=`SELECT ${Sg1} FROM ${Z} WHERE ${J} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${G}`,[H,F]=await Promise.all([this.engine.query(W),this.engine.query(K)]),N=Number(H[0]?.total??0);return{logs:F.map(Vy0),total:N}}async getById($,Z){if(!$||!Z)return null;let Q=`SELECT * FROM ${this.sourceFactory($)} WHERE organization_id = '${L$($)}' AND id = '${L$(Z)}' LIMIT 1`,Y=await this.engine.query(Q);if(Y.length===0)return null;return Vy0(Y[0])}async getStats($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${L$($.organizationId)}'`];if(CG(X,$.startDate,this.dialect),$.endDate)X.push(SG($.endDate,this.dialect));let Q=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${Z} WHERE ${X.join(" AND ")}`,G=(await this.engine.query(Q))[0]??{};return{totalCalls:Number(G.total_calls??0),errorRate:Number(G.error_rate??0),avgDurationMs:Number(G.avg_duration_ms??0)}}async queryToolCallHeatmap($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),X=[`organization_id = '${L$($.organizationId)}'`,"type = 'tool_call'"];if($.filters?.virtualMcpIds?.length){let J=$.filters.virtualMcpIds.map((W)=>`'${L$(W)}'`).join(",");X.push(`virtual_mcp_id IN (${J})`)}if($.filters?.excludeConnectionIds?.length){let J=$.filters.excludeConnectionIds.map((W)=>`'${L$(W)}'`).join(",");X.push(`connection_id NOT IN (${J})`)}if(CG(X,$.startDate,this.dialect),$.endDate)X.push(SG($.endDate,this.dialect));let Q=Math.min(Math.max(1,Math.floor($.limit??500)),1000),Y=`SELECT virtual_mcp_id, tool_name, count(*) AS calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1 ELSE 0 END), 0) AS errors, coalesce(sum(length(output)), 0) AS output_size FROM ${Z} WHERE ${X.join(" AND ")} GROUP BY virtual_mcp_id, tool_name ORDER BY calls DESC LIMIT ${Q}`;return{cells:(await this.engine.query(Y)).map((J)=>({virtualMcpId:J.virtual_mcp_id?String(J.virtual_mcp_id):null,toolName:String(J.tool_name??""),calls:Number(J.calls??0),errors:Number(J.errors??0),outputSize:Number(J.output_size??0)}))}}async queryLlmUsageStats($){let Z={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!$.organizationId||!$.connectionId)return Z;let X=this.dialect,Q=X==="clickhouse",Y=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),G=dU($.interval,X,"timestamp"),J=(E)=>`coalesce(${Vg1("properties",`$.${E}`,X)}, 0)`,W=Q?"count()":"count(*)",K=Q?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",H=(E)=>Q?`quantile(${E})(duration_ms)`:`quantile_cont(duration_ms, ${E})`,F=[`organization_id = '${L$($.organizationId)}'`,`connection_id = '${L$($.connectionId)}'`];if(CG(F,$.startDate,X),$.endDate)F.push(SG($.endDate,X));if($.userIds?.length){let E=$.userIds.slice(0,100).map((j)=>`'${L$(j)}'`).join(",");F.push(`user_id IN (${E})`)}let N=F.join(" AND "),U=Math.min(Math.max(1,Math.floor($.topN??5)),20),O=`${W} AS calls,
110
110
  ${K} AS errors,
111
111
  avg(duration_ms) AS avg,
112
112
  sum(${J("input_tokens")}) AS in_tok,
@@ -888,7 +888,7 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
888
888
  d. Report the failing tool/connection, error pattern, and suggest the fix or owner.
889
889
  </workflows>`,ho1={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:ft8,getId:TQ.USAGE_MANAGER}});function Oc0($){return uL.find((Z)=>$.startsWith(`${Z.id}_`))??null}async function xt8($,Z){if("resolveRuntime"in $)return $.resolveRuntime(Z);return{instructions:$.instructions,selectedTools:$.selectedTools}}async function o50({virtualMcp:$,agentId:Z=$.id,organizationId:X,ctx:Q}){let Y=Oc0(Z);if(!Y)return $;let G=await xt8(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 r50($,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 co1($,Z,X){let Q={self:V4.SELF($),registry:V4.REGISTRY($),"community-registry":V4.COMMUNITY_REGISTRY($)};await Promise.all(bt8.map((Y)=>X.delete(`${Y}${$}`))),await Promise.all(uL.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 F=J.connections.find((N)=>N.connection_id===H);return{connection_id:H,selected_tools:Y.selectedTools?[...Y.selectedTools]:null,selected_resources:F?.selected_resources??null,selected_prompts:F?.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 bt8,uL;var Mx=D(()=>{V8();Io1();Mo1();Vo1();fo1();xo1();go1();uo1();bt8=["studio-task-manager_"],uL=[vo1,Ro1,ko1,bo1,qo1,yo1,ho1]});import{DBOS as a50}from"@dbos-inc/dbos-sdk";async function yt8($){let Z=c8(),X=new Fb(Z.db);await co1($.orgId,$.createdBy,X)}async function gt8($){let Z=c8(),X=new Fb(Z.db);for(let Q of uL){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((F,N)=>F===J[N])}))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 ht8($){await a50.runStep(()=>yt8($),{name:"installStudioPack"}),await a50.runStep(()=>gt8($),{name:"backfillSelectedPrompts"})}async function Bc0($){await a50.startWorkflow(ut8,{workflowID:`install-studio-pack:${ct8}:${$.orgId}`})($)}async function lo1(){let Z=await c8().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 t50(Array.from(X),10,async([Q,Y])=>{try{await Bc0({orgId:Q,createdBy:Y})}catch(G){console.error("[studio-pack-backfill] enqueue failed",{orgId:Q},G)}})}var ut8,ct8="v6";var s50=D(()=>{gG();qy0();Mx();ut8=a50.registerWorkflow(ht8,{name:"installStudioPackWorkflow"})});class qi{constructor(){this._messageQueue=[]}static createLinkedPair(){let $=new qi,Z=new qi;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 Z4}from"zod";var e50,do1,mo1,io1,po1,no1,to1,oo1,ro1,ao1;var kx=D(()=>{e50=Z4.record(Z4.string(),Z4.array(Z4.string())),do1=Z4.object({id:Z4.string().describe("Unique identifier for the API key"),name:Z4.string().describe("Human-readable name for the API key"),userId:Z4.string().describe("ID of the user who owns this API key"),permissions:e50.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:Z4.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:Z4.string().datetime().describe("When the API key was created (ISO 8601)")}),mo1=Z4.object({name:Z4.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:e50.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:Z4.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:Z4.record(Z4.string(),Z4.unknown()).optional().describe("Additional metadata to store with the API key")}),io1=Z4.object({id:Z4.string().describe("Unique identifier for the API key"),name:Z4.string().describe("Human-readable name for the API key"),key:Z4.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:e50.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:Z4.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:Z4.string().datetime().describe("When the API key was created (ISO 8601)")}),po1=Z4.object({}),no1=Z4.object({items:Z4.array(do1).describe("List of API keys (without key values)")}),to1=Z4.object({keyId:Z4.string().describe("ID of the API key to update"),name:Z4.string().min(1).max(64).optional().describe("New name for the API key"),permissions:e50.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:Z4.record(Z4.string(),Z4.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),oo1=Z4.object({item:do1.describe("The updated API key (without key value)")}),ro1=Z4.object({keyId:Z4.string().describe("ID of the API key to delete")}),ao1=Z4.object({success:Z4.boolean().describe("Whether the deletion was successful"),keyId:Z4.string().describe("ID of the deleted API key")})});var Dc0;var so1=D(()=>{C4();S0();kx();Dc0=c({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:mo1,outputSchema:io1,handler:async($,Z)=>{r(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=Y1(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 wc0;var eo1=D(()=>{C4();S0();kx();wc0=c({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:ro1,outputSchema:ao1,handler:async($,Z)=>{r(Z),await Z.access.check();let X=Y1(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 Lc0;var $r1=D(()=>{S0();kx();Lc0=c({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:po1,outputSchema:no1,handler:async($,Z)=>{r(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 Ec0;var Zr1=D(()=>{S0();kx();Ec0=c({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:to1,outputSchema:oo1,handler:async($,Z)=>{if(r(Z),await Z.access.check(),!Y1(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 Xr1=D(()=>{so1();eo1();$r1();Zr1();kx()});function VO($){let Z=$.trim();if(!Z)return{ok:!1,error:"Enter a website URL."};let X=dt8.test(Z),Q=mt8.test(Z),Y=it8.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||!pt8.test(K)))return{ok:!1,error:"Enter a valid website URL."};return J.protocol="https:",{ok:!0,value:J.origin}}var dt8,mt8,it8,pt8;var Mi=D(()=>{dt8=/^[a-zA-Z][a-zA-Z\d+.-]*:/,mt8=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,it8=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,pt8=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as dX}from"zod";function QK($){if($.baseUrl)return $.baseUrl.replace(/\/+$/,"");return(($.settings??b0()).reportsInternalApiUrl??nt8).replace(/\/+$/,"")}function Yr1($={}){return`${QK($)}/api/v2/mcp`}function cL($){let Z=$.apiKey??($.settings??b0()).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 $90($){return new URL($).hostname}function ot8($){return $==="ownership_unverified"||$==="already_claimed_by_other_org"}function rt8($,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 at8($){let Z=await ki($);return ot8(Z?.error)?Z.error:"unknown"}async function ki($){let Z=await $.text().catch(()=>"");if(!Z)return;try{return JSON.parse(Z)}catch{return}}async function jc0($){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 Jr1($,Z={}){let X=QK(Z),Q=cL(Z),Y=Z.fetchImpl??fetch,G=$90($.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 at8(W);throw new Gr1(H,{email:$.email,domain:G})}let K=tt8.safeParse(await ki(W));if(!K.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:K.data.token}}async function Wr1($,Z={}){let X=QK(Z),Q=cL(Z),Y=Z.fetchImpl??fetch,G=$90($.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=Qr1.safeParse(await ki(W));return{ok:!1,reason:H.success?H.data.reason??"verification_failed":"verification_failed",detail:(H.success?H.data.detail:void 0)??"N\xE3o foi poss\xEDvel verificar o acesso a este recurso."}}if(!W.ok)throw Error(await jc0(W));let K=Qr1.safeParse(await ki(W));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 Kr1($,Z={}){let X=QK(Z),Q=cL(Z),Y=Z.fetchImpl??fetch,G=$90($.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 jc0(W));return{triggered:!0}}async function Hr1($,Z={}){let X=QK(Z),Q=cL(Z),Y=Z.fetchImpl??fetch,G=$90($.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 jc0(W));let K=st8.safeParse(await ki(W));return{providers:K.success?K.data.providers:{},claimed:!0}}var nt8,tt8,Qr1,Gr1,st8;var lL=D(()=>{V8();q$();nt8=new URL(cy1).origin,tt8=dX.object({token:dX.string().min(1)}),Qr1=dX.object({binding:dX.object({resource_id:dX.string(),evidence:dX.string()}).optional(),reason:dX.string().optional(),detail:dX.string().optional()});Gr1=class Gr1 extends Error{code;constructor($,Z={}){super(rt8($,Z));this.name="CommerceDiscoveryClaimError",this.code=$}};st8=dX.object({providers:dX.record(dX.string(),dX.object({connected:dX.boolean(),via:dX.enum(["oauth","sa"]).nullable(),resource:dX.string().nullable()}))})});import{z as vY}from"zod";var et8,$o8,zc0;var Fr1=D(()=>{Mi();S0();lL();et8=vY.object({siteUrl:vY.string().min(1).describe("Website URL of the store being bound."),provider:vY.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:vY.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/).")}),$o8=vY.discriminatedUnion("ok",[vY.object({ok:vY.literal(!0),resourceId:vY.string(),evidence:vY.string()}),vY.object({ok:vY.literal(!1),reason:vY.string(),detail:vY.string()})]),zc0=c({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:et8,outputSchema:$o8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=VO($.siteUrl);if(!Q.ok)throw Error(Q.error);return Wr1({siteUrl:Q.value,orgId:X.id,provider:$.provider,resourceId:$.resourceId.trim()})}})});import{z as YK}from"zod";var Zo8,Xo8,Pc0;var Nr1=D(()=>{Mi();S0();lL();Zo8=YK.object({siteUrl:YK.string().min(1).describe("Website URL of the store to inspect.")}),Xo8=YK.object({providers:YK.record(YK.string(),YK.object({connected:YK.boolean(),via:YK.enum(["oauth","sa"]).nullable(),resource:YK.string().nullable()})),claimed:YK.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.")}),Pc0=c({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:Zo8,outputSchema:Xo8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=VO($.siteUrl);if(!Q.ok)throw Error(Q.error);return Hr1({siteUrl:Q.value,orgId:X.id})}})});import{z as Vi}from"zod";var Qo8,Yo8,Ac0;var Ur1=D(()=>{V8();Mi();S0();lL();Qo8=Vi.object({siteUrl:Vi.string().min(1).describe("Website URL to run the diagnostic for.")}),Yo8=Vi.object({triggered:Vi.boolean(),reason:Vi.string().optional()}),Ac0=c({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:Qo8,outputSchema:Yo8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=VO($.siteUrl);if(!Q.ok)throw Error(Q.error);let Y=V4.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 Kr1({siteUrl:Q.value,orgId:X.id,githubRepo:W})}})});var SO=D(()=>{X80()});import{z as GK}from"zod";async function Ko8($,Z,X,Q){let Y=await $.storage.connections.findById(Z,X);if(Y)return Y;throw Q}async function Ho8($,Z,X,Q){let Y=await $.storage.virtualMcps.findById(Z,X);if(Y)return Y;throw Q}var Tc0,Go8=3600000,Jo8,Wo8,Rc0;var Or1=D(()=>{V8();Mi();S0();yW();SO();lL();Tc0=A40,Jo8=GK.object({siteUrl:GK.string().min(1).describe("Website URL to configure.")}),Wo8=GK.object({connection:g7,virtualMcp:h7,reportApp:GK.object({connectionId:GK.string(),virtualMcpId:GK.string(),toolName:GK.literal(Tc0)}),created:GK.object({connection:GK.boolean(),virtualMcp:GK.boolean()})});Rc0=c({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:Jo8,outputSchema:Wo8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check("COLLECTION_CONNECTIONS_CREATE");let Q=Y1(Z);if(!Q)throw Error("User ID required to set up Commerce Discovery");let Y=VO($.siteUrl);if(!Y.ok)throw Error(Y.error);let G=V4.COMMERCE_DISCOVERY(X.id),J=R40(X.id),W=new URLSearchParams({virtualmcpid:J,main:`app:${G}:${Tc0}`}),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),F={connection:!1,virtualMcp:!1},N=await Jr1({siteUrl:Y.value,orgId:X.id,orgName:X.name,...K}),U=Yr1();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:N.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=$g1(X.id,N.authorizationToken,U);H=await Z.storage.connections.create({...L,metadata:{...L.metadata??{},siteUrl:Y.value},organization_id:X.id,created_by:Q}),F.connection=!0}catch(L){H=await Ko8(Z,G,X.id,L)}}let O=await Z.storage.virtualMcps.findById(J,X.id);if(!O){console.log("[commerce-discovery] creating virtual MCP",{orgId:X.id,siteUrl:Y.value,connectionId:H.id,virtualMcpId:J});try{O=await Z.storage.virtualMcps.create(X.id,Q,Zg1(X.id,H.id),{id:J}),F.virtualMcp=!0}catch(L){O=await Ho8(Z,J,X.id,L)}}if(!O.pinned)O=await Z.storage.virtualMcps.update(O.id,Q,{pinned:!0});let B=await Z.db.selectFrom("organization").select(["createdAt"]).where("id","=",X.id).executeTakeFirst();if((B?Date.now()-new Date(B.createdAt).getTime():Number.POSITIVE_INFINITY)<Go8){let E=(await Z.storage.organizationSettings.get(X.id))?.flags,j={};if(E?.reports_only==null)j.reports_only=!0;if(Object.keys(j).length>0)await Z.storage.organizationSettings.upsert(X.id,{flags:j})}return{connection:H,virtualMcp:O,reportApp:{connectionId:H.id,virtualMcpId:O.id,toolName:Tc0},created:F}}})});var Br1=D(()=>{Fr1();Nr1();Ur1();Or1()});var Ic0=_((Dr1)=>{Object.defineProperty(Dr1,"__esModule",{value:!0});Dr1.kvPrefix=Dr1.KvWatchInclude=void 0;Dr1.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};Dr1.kvPrefix="KV_"});var Mr1=_((Ir1)=>{Object.defineProperty(Ir1,"__esModule",{value:!0});Ir1.KvStatusImpl=Ir1.Bucket=Ir1.Kvm=Ir1.kvOperationHdr=void 0;Ir1.Base64KeyCodec=Uo8;Ir1.NoopKvCodecs=qc0;Ir1.defaultBucketOpts=Er1;Ir1.validateKey=jr1;Ir1.validateSearchKey=zr1;Ir1.hasWildcards=Pr1;Ir1.validateBucket=Z90;var x5=wY(),X5=is(),b5=Ic0();function Uo8(){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 qc0(){return{key:{encode($){return $},decode($){return $}},value:{encode($){return typeof $==="string"?new TextEncoder().encode($):$},decode($){return $}}}}function Er1(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:qc0(),storage:X5.StorageType.File}}Ir1.kvOperationHdr="KV-Operation";var Lr1="$KV",Oo8=/^[-/=.\w]+$/,Bo8=/^[-/=.>*\w]+$/,Do8=/^[-\w]+$/;function jr1($){if($.startsWith(".")||$.endsWith(".")||!Oo8.test($))throw Error(`invalid key: ${$}`)}function zr1($){if($.startsWith(".")||$.endsWith(".")||$.includes("..")||!Bo8.test($))throw Error(`invalid key: ${$}`)}function Pr1($){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 Z90($){if(!Do8.test($))throw Error(`invalid bucket name: ${$}`)}class Ar1{js;constructor($){this.js=(0,X5.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(x5.Feature.JS_KV);if(!X)return Promise.reject(Error(`kv is only supported on servers ${Q} or better`));if(Z.bindOnly)return Vx.bind(this.js,$,Z);return Vx.create(this.js,$,Z)}list(){let $=(X)=>{let Y=X.streams.filter((J)=>{return J.config.name.startsWith(b5.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 X90(J,G)})},Z=`${this.js.prefix}.STREAM.LIST`;return new X5.ListerImpl(Z,$,this.js)}}Ir1.Kvm=Ar1;class Vx{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor($,Z,X){Z90($),this.js=Z,this.jsm=X,this.bucket=$,this.prefix=Lr1,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create($,Z,X={}){Z90(Z);let Q=await $.jetstreamManager(),Y=new Vx(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}};Z90(Z);let J=new Vx(Z,$,Y);return G.config.name=X.streamName??J.bucketName(),Object.assign(J,G),J.stream=G.config.name,J.codec=X.codec||qc0(),J.direct=G.config.allow_direct??!1,J.initializePrefixes(G),J}async init($={}){let Z=Object.assign(Er1(),$);this.codec=Z.codec;let X={};if(this.stream=X.name=$.streamName??this.bucketName(),X.retention=X5.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,x5.nanos)(Z.markerTTL);if($.mirror){let H=Object.assign({},$.mirror);if(!H.name.startsWith(b5.kvPrefix))H.name=`${b5.kvPrefix}${H.name}`;X.mirror=H,X.mirror_direct=!0}else if($.sources){let H=$.sources.map((F)=>{let N=Object.assign({},F),U=N.name.startsWith(b5.kvPrefix)?N.name.substring(b5.kvPrefix.length):N.name;if(!N.name.startsWith(b5.kvPrefix))N.name=`${b5.kvPrefix}${N.name}`;if(!F.external&&U!==this.bucket)N.subject_transforms=[{src:`$KV.${U}.>`,dest:`$KV.${this.bucket}.>`}];return N});X.sources=H,X.subjects=[this.subjectForBucket()]}else X.subjects=[this.subjectForBucket()];if($.metadata)X.metadata=$.metadata;if(typeof $.compression==="boolean")X.compression=$.compression?X5.StoreCompression.S2:X5.StoreCompression.None;let Q=this.js.nc,Y=Q.getServerVersion(),G=Y?(0,x5.compare)(Y,(0,x5.parseSemVer)("2.7.2"))>=0:!1;X.discard=G?X5.DiscardPolicy.New:X5.DiscardPolicy.Old;let{ok:J,min:W}=Q.features.get(x5.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,x5.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(b5.kvPrefix))X=X.substring(b5.kvPrefix.length);if(Z.external&&Z.external.api!==""){let Q=Z.name.substring(b5.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??`${b5.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`${Lr1}.${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=jr1;validateSearchKey=zr1;hasWildcards=Pr1;close(){return Promise.resolve()}dataLen($,Z){let X=Z?Z.get(X5.JsHeaders.MessageSizeHdr)||"":"";if(X!=="")return parseInt(X,10);return $.length}smToEntry($){return new Tr1(this.bucket,this.prefixLen,$,this.codec)}jmToWatchEntry($,Z){return new Rr1(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 X5.JetStreamApiError){let J=G;if(J.code!==X5.JetStreamApiCodes.StreamWrongLastSequence&&J.code!==X5.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,x5.headers)();G.headers=J,J.set(X5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`)}if(Q)(G.headers||(0,x5.headers)()).set(X5.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,x5.headers)();if(Y.set(Ir1.kvOperationHdr,Z),Z==="PURGE"){let G=X;if(Y.set(X5.JsHeaders.RollupHdr,X5.JsHeaders.RollupValueSubject),typeof G?.ttl==="string"&&G.ttl!=="")Y.set(X5.PubHeaders.MessageTTL,`${G.ttl}`)}if(X?.previousSeq)Y.set(X5.PubHeaders.ExpectedLastSubjectSequenceHdr,`${X.previousSeq}`);await this.js.publish(this.subjectForKey(Q,!0),x5.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=X5.DeliverPolicy.LastPerSubject;if(Z===b5.KvWatchInclude.AllHistory)G=X5.DeliverPolicy.All;if(Z===b5.KvWatchInclude.UpdatesOnly)G=X5.DeliverPolicy.New;let J=void 0;if(Y.length===1)J=Y[0],Y=void 0;return Object.assign({deliver_policy:G,ack_policy:X5.AckPolicy.None,filter_subjects:Y,filter_subject:J,flow_control:!0,idle_heartbeat:(0,x5.nanos)(5000)},X)}remove($){return this.purge($)}async history($={}){let Z=$.key??">",X={};X.headers_only=$.headers_only||!1;let Q=new x5.QueuedIteratorImpl,Y=()=>{Q.stop()},G=this._buildCC(Z,b5.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 F=this.jmToWatchEntry(H,!1);if(Q.push(F),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(x5.Feature.JS_NEW_CONSUMER_CREATE_API);return Z}async watch($={}){let Z=$.key??">",X=new x5.QueuedIteratorImpl,Q={};Q.headers_only=$.headers_only||!1;let Y=b5.KvWatchInclude.LastValue;if($.include===b5.KvWatchInclude.AllHistory)Y=b5.KvWatchInclude.AllHistory;else if($.include===b5.KvWatchInclude.UpdatesOnly)Y=b5.KvWatchInclude.UpdatesOnly;let G=$.ignoreDeletes===!0,J=this._buildCC(Z,Y,Q);if(J.name=`KV_WATCHER_${x5.nuid.next()}`,$.resumeFromRevision&&$.resumeFromRevision>0)J.deliver_policy=X5.DeliverPolicy.StartSequence,J.opt_start_seq=$.resumeFromRevision;let W=await this.js.consumers.getPushConsumer(this.stream,J),H=(await W.info(!0)).num_pending,F=Y===b5.KvWatchInclude.UpdatesOnly||H===0;X._data=W;let N=0,U=await W.consume({callback:(O)=>{if(!F)N++,F=N>=H;let B=this.jmToWatchEntry(O,F);if(G&&B.operation==="DEL")return;X.push(B),X.received++}});return X.iterClosed.then(()=>{U.stop()}),U.closed().then(()=>{X.push(()=>{X.stop()})}),X}async keys($=">"){let Z=new x5.QueuedIteratorImpl,X=this._buildCC($,b5.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(Ir1.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 X90(Q,Z)}}Ir1.Bucket=Vx;class X90{si;cluster;constructor($,Z=""){this.si=$,this.cluster=Z}get bucket(){return this.si.config.name.startsWith(b5.kvPrefix)?this.si.config.name.substring(b5.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,x5.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,x5.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!==X5.StoreCompression.None;return!1}}Ir1.KvStatusImpl=X90;class Tr1{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(Ir1.kvOperationHdr)||"PUT"}get length(){let $=this.sm.header.get(X5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}json($){return JSON.parse(x5.TD.decode(this.value),$)}string(){return x5.TD.decode(this.value)}}class Rr1{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,x5.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(Ir1.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let $=this.sm.headers?.get(X5.JsHeaders.MessageSizeHdr)||"";if($!=="")return parseInt($,10);return this.sm.data.length}get isUpdate(){return this.update}json($){return JSON.parse(x5.TD.decode(this.value),$)}string(){return x5.TD.decode(this.value)}}});var Mc0=_((j3)=>{Object.defineProperty(j3,"__esModule",{value:!0});j3.validateKey=j3.validateBucket=j3.NoopKvCodecs=j3.Kvm=j3.defaultBucketOpts=j3.Bucket=j3.Base64KeyCodec=j3.KvWatchInclude=j3.kvPrefix=void 0;var kr1=Ic0();Object.defineProperty(j3,"kvPrefix",{enumerable:!0,get:function(){return kr1.kvPrefix}});Object.defineProperty(j3,"KvWatchInclude",{enumerable:!0,get:function(){return kr1.KvWatchInclude}});var dL=Mr1();Object.defineProperty(j3,"Base64KeyCodec",{enumerable:!0,get:function(){return dL.Base64KeyCodec}});Object.defineProperty(j3,"Bucket",{enumerable:!0,get:function(){return dL.Bucket}});Object.defineProperty(j3,"defaultBucketOpts",{enumerable:!0,get:function(){return dL.defaultBucketOpts}});Object.defineProperty(j3,"Kvm",{enumerable:!0,get:function(){return dL.Kvm}});Object.defineProperty(j3,"NoopKvCodecs",{enumerable:!0,get:function(){return dL.NoopKvCodecs}});Object.defineProperty(j3,"validateBucket",{enumerable:!0,get:function(){return dL.validateBucket}});Object.defineProperty(j3,"validateKey",{enumerable:!0,get:function(){return dL.validateKey}})});var kc0=_((CO)=>{Object.defineProperty(CO,"__esModule",{value:!0});CO.NoopKvCodecs=CO.Kvm=CO.defaultBucketOpts=CO.Bucket=CO.Base64KeyCodec=CO.KvWatchInclude=void 0;var qo8=Mc0();Object.defineProperty(CO,"KvWatchInclude",{enumerable:!0,get:function(){return qo8.KvWatchInclude}});var Ci=Mc0();Object.defineProperty(CO,"Base64KeyCodec",{enumerable:!0,get:function(){return Ci.Base64KeyCodec}});Object.defineProperty(CO,"Bucket",{enumerable:!0,get:function(){return Ci.Bucket}});Object.defineProperty(CO,"defaultBucketOpts",{enumerable:!0,get:function(){return Ci.defaultBucketOpts}});Object.defineProperty(CO,"Kvm",{enumerable:!0,get:function(){return Ci.Kvm}});Object.defineProperty(CO,"NoopKvCodecs",{enumerable:!0,get:function(){return Ci.NoopKvCodecs}})});function Q90(){let $=new TextEncoder,Z=new TextDecoder;return{encode:(X)=>$.encode(JSON.stringify(X)),decode:(X)=>JSON.parse(Z.decode(X))}}class Sc0{options;kv=null;codec=Q90();constructor($){this.options=$}async init(){let $=this.options.getJetStream();if(!$)return;this.kv=await new Sr1.Kvm($).create(ko8,{storage:Vr1.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 Vo8($,Z,X){if(X<=0)return!0;if($===void 0)return!0;return Z-$>=X}function Y90($){return $ instanceof w1&&$.code===I1.MethodNotFound}function So8($){return $ instanceof w1&&$.code===-32000&&/connection closed/i.test($.message)}async function vO($,Z,X,Q,Y,G=0){if(!Q)try{return await X()}catch(H){if(Y90(H))return[];return _i.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(()=>{}),Vc0.set(J,Date.now()),_i.add(1,{type:$,outcome:"miss",stage:"miss"}),H}catch(H){if(Y90(H))return Q.set($,Z,[]).catch(()=>{}),[];return _i.add(1,{type:$,outcome:"error",stage:"miss"}),null}if(_i.add(1,{type:$,outcome:"hit",stage:"hit"}),Vo8(Vc0.get(J),Date.now(),G)&&!G90.has(J)){G90.add(J),Vc0.set(J,Date.now());let H=X().then((F)=>Q.set($,Z,F)).catch((F)=>{if(Y90(F)||So8(F)){if(Y90(F))Q.set($,Z,[]).catch(()=>{});return}_i.add(1,{type:$,outcome:"error",stage:"revalidation"})}).finally(()=>G90.delete(J));Y?.(H)}return W}function Cc0($){Cr1=$}function Z9(){return Cr1}var Vr1,Sr1,_i,ko8="DECOCMS_MCP_LISTS",G90,Vc0,_O=30000,Cr1=null;var fY=D(()=>{e5();I6();Vr1=V(iD(),1),Sr1=V(kc0(),1),_i=w$.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});G90=new Set;w$.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback(($)=>$.observe(G90.size));Vc0=new Map});async function _c0($,Z,X){let Q=new AbortController,Y,G=new Promise((W,K)=>{Y=setTimeout(()=>{Q.abort(),K(new _r1($.id,X))},X)}),J=(async()=>{let W=await N5($,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 _r1;var vr1=D(()=>{vi();_r1=class _r1 extends Error{constructor($,Z){super(`listTools timed out after ${Z}ms for connection ${$}`);this.name="ListToolsTimeoutError"}}});function J90($){return(Z)=>{if(Z instanceof w1&&Z.code===I1.MethodNotFound)return $;throw Z}}var fr1=D(()=>{e5()});function W90($,Z,X){let Q=fO($,Z,X,Z9()??void 0),Y=nw(Q,{name:"studio-mcp-server",version:"1.0.0"},{capabilities:Co8,toolCallTimeoutMs:Kb});Y.server.setRequestHandler(IU,async()=>{return await Q.listResources().catch(J90({resources:[]}))}),Y.server.setRequestHandler(qU,async()=>{return await Q.listResourceTemplates().catch(J90({resourceTemplates:[]}))}),Y.server.setRequestHandler(MU,async()=>{return await Q.listPrompts().catch(J90({prompts:[]}))});let G=Y.close.bind(Y);return Y.close=async()=>{await G(),await Q.close().catch(()=>{})},Y}var Co8;var br1=D(()=>{bX();e5();fi();fY();fr1();Co8={tools:{},resources:{},prompts:{}}});var DF=D(()=>{vi();vr1();br1()});function bi($,Z,X){if(Z.some((Q)=>Q!=="*"&&Q.startsWith("SELF::"))&&$.SELF===void 0)$.SELF={value:`${X}_self`}}function xi($,Z){let X=new Map;for(let Q of Z){if(Q==="*")continue;let[Y,G]=a60(Q);if(!_o8.has(G))continue;let J=dm(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 yi($,Z,X,Q){for(let J of Z){if(J==="*")continue;let[W]=a60(J),K=dm(W,$);if(K===void 0||K===null)throw Error(`Scope references key "${W}" but it's not present in state`)}let Y=xd1($,Z),G=`${X}_self`;for(let J of Y){if(J===G)continue;let W=await Q.storage.connections.findById(J);if(!W||W.organization_id!==X)throw Error(`Referenced connection not found: ${J}`);try{await Q.access.check(J)}catch(K){throw Error(`Access denied to referenced connection: ${J}. ${K.message}`)}}}var _o8;var vc0=D(()=>{fh0();_40();_o8=new Set([S40,C40])});import{z as xr1}from"zod";var vo8,fo8,fc0;var yr1=D(()=>{C4();S0();q$();fY();DF();vc0();Ii();yW();vo8=xr1.object({data:t$0.describe("Data for the new connection (id is auto-generated if not provided)")}),fo8=xr1.object({item:g7.describe("The created connection entity")}),fc0=c({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:vo8,outputSchema:fo8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=Y1(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 N=qf(Y.connection_url);if(!N)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let U=await Z.storage.virtualMcps.findById(N);if(!U)throw Error(`Virtual MCP not found: ${N}`);if(U.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");Y.connection_url=Mf(N)}if(Y.connection_type==="STDIO"&&!b0().localMode)throw Error("STDIO connections are only available in local mode (--local-mode).");let G=await kO({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)bi(K,W,X.id),await yi(K,W,X.id,Z);let H=await Z.storage.connections.createNew({...Y,tools:null,configuration_state:K,configuration_scopes:W}),F=K&&W?.length?xi(K,W):[];if(F.length>0){let N;try{await Z.storage.connectionCredentialVault.replaceGrantsForSubject({organizationId:X.id,subjectConnectionId:H.id,createdBy:Q,grants:F});let{plaintextToken:U,record:O}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:H.id});N=O.id,await(await N5(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(N)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:H.id,tokenId:N});throw await Z.storage.connections.delete(H.id),U}}if(J)Z9()?.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 uG}from"zod/v4";import{z as gr1}from"zod/v4";import{z as K90}from"zod/v4";import{z as JK}from"zod/v4";import{z as go8}from"zod/v4";import{z as mL}from"zod/v4";import{z as WK}from"zod/v4";import{z as _Z}from"zod/v4";import{z as hr1}from"zod/v4";import{z as N90}from"zod/v4";import{z as Wr8}from"zod/v4";import{z as ur1}from"zod/v4";import{z as H90}from"zod/v4";import{z as wr8}from"zod/v4";function gi($,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)=>gi(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)&&gi($[Y],Z[Y]))}return!1}function Yr8(){return($)=>{if(!Array.isArray($))return!0;let Z=[];return $.every((X)=>{if(Z.some((Y)=>gi(X,Y)))return!1;return Z.push(X),!0})}}function F90($,Z){return $.safeParse(Z).success}function U7($){if(typeof $==="boolean")return $?uG.any():uG.never();let Z={};for(let Y of zr8)Y.apply(Z,$);let X=[];if(Z.string!==!1)X.push(Z.string||uG.string());if(Z.number!==!1)X.push(Z.number||uG.number());if(Z.boolean!==!1)X.push(Z.boolean||uG.boolean());if(Z.null!==!1)X.push(Z.null||uG.null());if(Z.array!==!1)X.push(Z.array||uG.array(uG.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=uG.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=uG.never();else if(X.length===1)Q=X[0];else if(!Object.keys($).some((G)=>G!=="$schema"&&G!=="title"&&G!=="description"))Q=uG.any();else Q=uG.union(X);for(let Y of Pr8)Q=Y.apply(Q,$);return Q}var bo8=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||gr1.number();if(Y instanceof gr1.ZodNumber)$.number=Y.int()}}},xo8=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=K90.literal(X);else if(typeof X==="number")$.number=K90.literal(X);else if(typeof X==="boolean")$.boolean=K90.literal(X);else if(X===null)$.null=K90.null();else if(Array.isArray(X))$.array=void 0;else if(typeof X==="object")$.object=void 0}},yo8=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?JK.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 JK.literal($[0]);if(Z==="string")return JK.enum($);if(Z==="number"){let[X,Q,...Y]=$;return JK.union([JK.literal(X),JK.literal(Q),...Y.map((G)=>JK.literal(G))])}if(Z==="boolean")return JK.union([JK.literal(!0),JK.literal(!1)]);return!1}},ho8=class{apply($,Z){let X=Z;if(X.type==="string"&&X.format==="binary"&&X.contentEncoding==="binary"){let Q=go8.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}}},uo8=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=mL.string()}}},co8=class{apply($,Z){let X=Z;if(X.minLength===void 0)return;if($.string!==!1){let Q=$.string||mL.string();if(Q instanceof mL.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length>=X.minLength},{message:`String must be at least ${X.minLength} characters long`})}}},lo8=class{apply($,Z){let X=Z;if(X.maxLength===void 0)return;if($.string!==!1){let Q=$.string||mL.string();if(Q instanceof mL.ZodString)$.string=Q.refine((Y)=>{return Array.from(Y).length<=X.maxLength},{message:`String must be at most ${X.maxLength} characters long`})}}},do8=class{apply($,Z){let X=Z;if(!X.pattern)return;if($.string!==!1){let Q=$.string||mL.string();if(Q instanceof mL.ZodString){let Y=new RegExp(X.pattern);$.string=Q.regex(Y)}}}},mo8=class{apply($,Z){let X=Z;if(X.minimum===void 0)return;if($.number!==!1){let Q=$.number||WK.number();if(Q instanceof WK.ZodNumber)$.number=Q.min(X.minimum)}}},io8=class{apply($,Z){let X=Z;if(X.maximum===void 0)return;if($.number!==!1){let Q=$.number||WK.number();if(Q instanceof WK.ZodNumber)$.number=Q.max(X.maximum)}}},po8=class{apply($,Z){let X=Z;if(X.exclusiveMinimum===void 0)return;if($.number!==!1){let Q=$.number||WK.number();if(Q instanceof WK.ZodNumber)if(typeof X.exclusiveMinimum==="number")$.number=Q.gt(X.exclusiveMinimum);else $.number=!1}}},no8=class{apply($,Z){let X=Z;if(X.exclusiveMaximum===void 0)return;if($.number!==!1){let Q=$.number||WK.number();if(Q instanceof WK.ZodNumber)if(typeof X.exclusiveMaximum==="number")$.number=Q.lt(X.exclusiveMaximum);else $.number=!1}}},to8=class{apply($,Z){let X=Z;if(X.multipleOf===void 0)return;if($.number!==!1){let Q=$.number||WK.number();if(Q instanceof WK.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}`})}}},oo8=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=_Z.array(_Z.any())}}},ro8=class{apply($,Z){let X=Z;if(X.minItems===void 0)return;if($.array!==!1)$.array=($.array||_Z.array(_Z.any())).min(X.minItems)}},ao8=class{apply($,Z){let X=Z;if(X.maxItems===void 0)return;if($.array!==!1)$.array=($.array||_Z.array(_Z.any())).max(X.maxItems)}},so8=class{apply($,Z){let X=Z;if($.array===!1)return;if(Array.isArray(X.items))$.array=$.array||_Z.array(_Z.any());else if(X.items&&typeof X.items!=="boolean"&&!X.prefixItems){let Q=U7(X.items),Y=_Z.array(Q);if($.array&&$.array instanceof _Z.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=_Z.array(_Z.any()).max(0);else $.array=$.array||_Z.array(_Z.any());else if(typeof X.items==="boolean"&&X.items===!0)$.array=$.array||_Z.array(_Z.any());else if(X.prefixItems)$.array=$.array||_Z.array(_Z.any())}},eo8=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)=>U7(G)),Y;if(Q.length===0)Y=hr1.tuple([]);else Y=hr1.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}},$r8=class{apply($,Z){let X=Z;if($.object===!1)return;if(X.properties||X.required||X.additionalProperties!==void 0)$.object=$.object||N90.object({}).passthrough()}},Zr8=class{apply($,Z){let X=Z;if(Z.type===void 0&&(X.maxProperties!==void 0||X.minProperties!==void 0)){if($.object===void 0)$.object=N90.object({}).passthrough()}}},Xr8=class{apply($,Z){let X=Z;if(X.maxProperties===void 0)return;if($.object!==!1){let Q=$.object||N90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length<=X.maxProperties,{message:`Object must have at most ${X.maxProperties} properties`})}}},Qr8=class{apply($,Z){let X=Z;if(X.minProperties===void 0)return;if($.object!==!1){let Q=$.object||N90.object({}).passthrough();$.object=Q.refine((Y)=>Object.keys(Y).length>=X.minProperties,{message:`Object must have at least ${X.minProperties} properties`})}}},Gr8=class{apply($,Z){if(!Z.not)return $;let X=U7(Z.not);return $.refine((Q)=>!F90(X,Q),{message:"Value must not match the 'not' schema"})}},Jr8=class{apply($,Z){if(Z.uniqueItems!==!0)return $;return $.refine(Yr8(),{message:"Array items must be unique"})}},Kr8=class{apply($,Z){if(!Z.allOf||Z.allOf.length===0)return $;return Z.allOf.map((Q)=>U7(Q)).reduce((Q,Y)=>Wr8.intersection(Q,Y),$)}},Hr8=class{apply($,Z){if(!Z.anyOf||Z.anyOf.length===0)return $;let X=Z.anyOf.length===1?U7(Z.anyOf[0]):ur1.union([U7(Z.anyOf[0]),U7(Z.anyOf[1]),...Z.anyOf.slice(2).map((Q)=>U7(Q))]);return ur1.intersection($,X)}},Fr8=class{apply($,Z){if(!Z.oneOf||Z.oneOf.length===0)return $;let X=Z.oneOf.map((Q)=>U7(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"})}},Nr8=class{apply($,Z){let X=Z;if(X.prefixItems&&Array.isArray(X.prefixItems)){let Y=X.prefixItems.map((G)=>U7(G));return $.refine((G)=>{if(!Array.isArray(G))return!0;for(let J=0;J<Math.min(G.length,Y.length);J++)if(!F90(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=U7(X.items);for(let W=Y.length;W<G.length;W++)if(!F90(J,G[W]))return!1}}return!0},{message:"Array does not match prefixItems schema"})}return $}},Ur8=class{apply($,Z){let X=Z;if(!X.properties&&!X.required&&X.additionalProperties!==!1)return $;if($ instanceof H90.ZodObject||$ instanceof H90.ZodRecord){let Q={};if(X.properties){for(let[Y,G]of Object.entries(X.properties))if(G!==void 0)Q[Y]=U7(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 H90.object(Q);else return H90.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(!U7(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"})}},Or8=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)=>gi(Q,Y))},{message:"Value must match one of the enum values"})}},Br8=class{apply($,Z){if(Z.const===void 0)return $;let X=Z.const;if(typeof X!=="object"||X===null)return $;return $.refine((Q)=>gi(Q,X),{message:"Value must equal the const value"})}},Dr8=class{apply($,Z){if(Z.description)$=$.describe(Z.description);return $}},Lr8=class{apply($,Z){var X;let Q=Z;if(!((X=Q.required)==null?void 0:X.includes("__proto__"))||Z.type!==void 0)return $;return wr8.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))}},Er8=class{apply($,Z){var X;let Q=Z;if(Q.contains===void 0)return $;let Y=U7(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(F90(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"})}},jr8=class{apply($,Z){let{default:X}=Z;if(X===void 0)return $;if(!$.safeParse(X).success)return $;return $.default(X)}},zr8,Pr8;var cr1=D(()=>{zr8=[new xo8,new yo8,new bo8,new ho8,new uo8,new oo8,new Zr8,new co8,new lo8,new do8,new mo8,new io8,new po8,new no8,new to8,new eo8,new ro8,new ao8,new so8,new Xr8,new Qr8,new $r8],Pr8=[new Lr8,new Or8,new Br8,new Kr8,new Hr8,new Fr8,new Nr8,new Ur8,new Er8,new Gr8,new Jr8,new jr8,new Dr8]});class bc0{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,Ar8),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=MY.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 Ar8="mcp";var lr1=D(()=>{e5()});function Tr8($){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 U90;var xc0=D(()=>{af();U90=class U90 extends mW{constructor($,Z){super($,Z)}send($,Z){let X=Tr8($);if(X?.type==="emit")return this.onmessage?.(X.message),Promise.resolve();if(X?.type==="suppress")return Promise.resolve();return super.send($,Z)}}});var dr1,mr1=async($,Z,X)=>{let Q=Rr8($.connection,Z,X);if(!Q)throw Error("Unknown MCP connection type");let Y=new dr1({name:$?.name??"MCP Client",version:"1.0.0"});return await Y.connect(Q),{client:Y}},Rr8=($,Z,X)=>{if($.type==="Websocket")return new bc0(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 QF(new URL($.url),G)}return new U90(new URL($.url),{requestInit:{headers:Y,signal:Z,credentials:"include"}})};var ir1=D(()=>{lW();jd();lr1();e5();bX();xc0();dr1=class dr1 extends x9{constructor($,Z){super($,{jsonSchemaValidator:F5,...Z})}async listTools($,Z){return await this.request({method:"tools/list",params:$},fl,Z)}}});function qr8($,Z){if(iL.set($,Z),iL.size>Ir8){let X=iL.keys().next().value;if(X!==void 0)iL.delete(X)}}function tr1($){let Z=(X)=>{if("connection"in $)return mr1({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 F=$?.debugId?.(),N=F?{"x-trace-debug-id":F}:void 0,{client:U}=await Z(N),{structuredContent:O,isError:B,content:w}=await U.callTool({name:String(H),arguments:K});if(B){let E=w?.[0]?.text,j=typeof E==="string"?pr1(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(O??w)}`)}if(O!==void 0)return O;let L=w?.[0]?.text;return typeof L==="string"?pr1(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(!iL.has(H))qr8(H,G());return await iL.get(H)}catch(F){console.error("Failed to list tools",F),iL.delete(H);return}}async function W(){return(await J()??[]).map((H)=>nr1(H,Y))}return Y.asTool=async()=>{let H=(await J()??[]).find((F)=>F.name===Q);if(!H)throw Error(`Tool ${Q} not found`);return nr1(H,Y)},Y}})}var pr1=($)=>{try{return JSON.parse($)}catch{return $}},Ir8=500,iL,nr1=($,Z)=>{return{...$,id:$.name,inputSchema:$.inputSchema?U7($.inputSchema):void 0,outputSchema:$.outputSchema?U7($.outputSchema):void 0,execute:(X)=>{return Z(X.context,$.name)}}};var or1=D(()=>{cr1();ir1();iL=new Map});function bO($){return tr1($)}var Sx;var yc0=D(()=>{or1();Sx=new Proxy({},{get($,Z){if(Z==="toJSON")return null;if(Z==="forConnection")return(X)=>bO({connection:X});if(Z==="forClient")return(X)=>bO({client:X});return globalThis[Z]}})});function O90($){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 KK=($)=>{return{...O90($),forClient:(Z)=>{return bO({client:Z})},forConnection:(Z)=>{return bO({connection:Z})}}};var pL=D(()=>{yc0()});import{z as y5}from"zod";var rr1,B90,ar1,D90,sr1,Mr8;var er1=D(()=>{pL();rr1=y5.object({specversion:y5.literal("1.0").describe("CloudEvents specification version"),id:y5.string().describe("Unique identifier for this event (UUID recommended)"),source:y5.string().describe("Connection ID of the event publisher"),type:y5.string().describe("Event type (e.g., 'order.created', 'user.signup')"),time:y5.string().datetime().optional().describe("Timestamp of when the event occurred (ISO 8601)"),subject:y5.string().optional().describe("Subject/resource identifier (e.g., order ID, user ID)"),datacontenttype:y5.string().optional().default("application/json").describe("Content type of the data attribute"),dataschema:y5.string().url().optional().describe("URI to the schema for the data attribute"),data:y5.unknown().optional().describe("Event payload (any JSON value)")}),B90=y5.object({events:y5.array(rr1).min(1).describe("Batch of CloudEvents to process")}),ar1=y5.object({success:y5.boolean().optional().describe("Whether this event was processed successfully"),error:y5.string().optional().describe("Error message for this event"),retryAfter:y5.number().int().positive().optional().describe("Re-deliver this event after this many ms")}),D90=y5.object({success:y5.boolean().optional().describe("Batch success - applies to events not in results"),error:y5.string().optional().describe("Batch error message - applies to events not in results"),processedCount:y5.number().int().min(0).optional().describe("Number of events successfully processed"),retryAfter:y5.number().int().positive().optional().describe("Batch retryAfter - applies to events not in results"),results:y5.record(y5.string(),ar1).optional().describe("Per-event results keyed by event ID")}),sr1=[{name:"ON_EVENTS",inputSchema:B90,outputSchema:D90}],Mr8=KK(sr1)});import{z as g5}from"zod";var $a1,Za1,Xa1,Qa1,Ya1,Ga1,w90,gc0;var hc0=D(()=>{pL();$a1=g5.object({type:g5.literal("string"),enum:g5.array(g5.string()).optional(),description:g5.string().optional()}),Za1=g5.object({type:g5.string(),description:g5.string(),paramsSchema:g5.record(g5.string(),$a1)}),Xa1=g5.object({}),Qa1=g5.object({triggers:g5.array(Za1)}),Ya1=g5.object({type:g5.string(),params:g5.record(g5.string(),g5.string()),enabled:g5.boolean(),callbackUrl:g5.url().optional(),callbackToken:g5.string().min(1).optional()}),Ga1=g5.object({success:g5.boolean()}),w90=[{name:"TRIGGER_LIST",inputSchema:Xa1,outputSchema:Qa1},{name:"TRIGGER_CONFIGURE",inputSchema:Ya1,outputSchema:Ga1}],gc0=KK(w90)});import{z as k$}from"zod";var kr8,Vr8,Sr8,Cr8,_r8,vr8,fr8,br8,xr8,yr8,gr8,hr8,nL;var hi=D(()=>{kr8=k$.object({prefix:k$.string().optional().describe("Filter objects by prefix (e.g., 'folder/' for folder contents)"),maxKeys:k$.number().optional().default(1000).describe("Maximum number of keys to return (default: 1000)"),continuationToken:k$.string().optional().describe("Token for pagination from previous response"),delimiter:k$.string().optional().describe("Delimiter for grouping keys (typically '/'). When set, commonPrefixes returns folder paths.")}),Vr8=k$.object({objects:k$.array(k$.object({key:k$.string().describe("Object key/path"),size:k$.number().describe("Object size in bytes"),lastModified:k$.string().describe("Last modified timestamp"),etag:k$.string().describe("Entity tag for the object")})),nextContinuationToken:k$.string().optional().describe("Token for fetching next page of results"),isTruncated:k$.boolean().describe("Whether there are more results available"),commonPrefixes:k$.array(k$.string()).optional().describe("Folder paths when delimiter is used (e.g., ['photos/2024/', 'photos/2025/'])")}),Sr8=k$.object({key:k$.string().describe("Object key/path to get metadata for")}),Cr8=k$.object({contentType:k$.string().optional().describe("MIME type of the object"),contentLength:k$.number().describe("Size of the object in bytes"),lastModified:k$.string().describe("Last modified timestamp"),etag:k$.string().describe("Entity tag for the object"),metadata:k$.record(k$.string(),k$.string()).optional().describe("Custom metadata key-value pairs")}),_r8=k$.object({key:k$.string().describe("Object key/path to generate URL for"),expiresIn:k$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)")}),vr8=k$.object({url:k$.string().describe("Presigned URL for downloading the object"),expiresIn:k$.number().describe("Expiration time in seconds that was used")}),fr8=k$.object({key:k$.string().describe("Object key/path for the upload"),expiresIn:k$.number().optional().describe("URL expiration time in seconds (default: from state config or 3600)"),contentType:k$.string().optional().describe("MIME type for the object being uploaded")}),br8=k$.object({url:k$.string().describe("Presigned URL for uploading the object"),expiresIn:k$.number().describe("Expiration time in seconds that was used")}),xr8=k$.object({key:k$.string().describe("Object key/path to delete")}),yr8=k$.object({success:k$.boolean().describe("Whether the deletion was successful"),key:k$.string().describe("The key that was deleted")}),gr8=k$.object({keys:k$.array(k$.string()).max(1000).describe("Array of object keys/paths to delete (max 1000)")}),hr8=k$.object({deleted:k$.array(k$.string()).describe("Array of successfully deleted keys"),errors:k$.array(k$.object({key:k$.string(),message:k$.string()})).describe("Array of errors for failed deletions")}),nL=[{name:"LIST_OBJECTS",inputSchema:kr8,outputSchema:Vr8},{name:"GET_OBJECT_METADATA",inputSchema:Sr8,outputSchema:Cr8},{name:"GET_PRESIGNED_URL",inputSchema:_r8,outputSchema:vr8},{name:"PUT_PRESIGNED_URL",inputSchema:fr8,outputSchema:br8},{name:"DELETE_OBJECT",inputSchema:xr8,outputSchema:yr8},{name:"DELETE_OBJECTS",inputSchema:gr8,outputSchema:hr8}]});import{z as E6}from"zod";var Ja1,Wa1,Ka1,ui,L90,E90,j90,z90,ur8;var uc0=D(()=>{pL();Ja1=E6.object({primary:E6.string().optional().describe("Primary brand color (hex)"),secondary:E6.string().optional().describe("Secondary brand color (hex)"),accent:E6.string().optional().describe("Accent / highlight color (hex)"),background:E6.string().optional().describe("Background color (hex)"),foreground:E6.string().optional().describe("Foreground / text color (hex)")}),Wa1=E6.object({heading:E6.string().optional().describe("Font family for headings"),body:E6.string().optional().describe("Font family for body text"),code:E6.string().optional().describe("Font family for code / monospace")}),Ka1=E6.object({logo:E6.string().optional().describe("Logo URL"),favicon:E6.string().optional().describe("Favicon URL"),ogImage:E6.string().optional().describe("Open Graph image URL")}),ui=E6.object({id:E6.string(),name:E6.string().describe("Brand / company name"),domain:E6.string().optional().describe("Company domain (e.g. example.com)"),colors:Ja1.optional().describe("Semantic color palette"),fonts:Wa1.optional().describe("Font families by role"),assets:Ka1.optional().describe("Visual identity assets"),overview:E6.string().optional().describe("Company overview / description"),tagline:E6.string().optional().describe("Brand tagline"),tone:E6.string().optional().describe("Tone of voice description"),metadata:E6.record(E6.string(),E6.unknown()).optional().describe("Extra design tokens and metadata")}),L90=E6.object({id:E6.string().optional().describe("Brand ID. Omit to get the default brand.")}),E90=E6.object({}),j90=E6.object({items:E6.array(ui)}),z90=[{name:"BRAND_GET",inputSchema:L90,outputSchema:ui},{name:"BRAND_LIST",inputSchema:E90,outputSchema:j90,opt:!0}],ur8=KK(z90)});var cc0=D(()=>{pL();er1();hc0();hi();uc0()});import{z as w8}from"zod";function wF($){return w8.object({items:w8.array($).describe("Array of collection items"),totalCount:w8.number().int().min(0).optional().describe("Total number of matching items (if available)"),hasMore:w8.boolean().optional().describe("Whether there are more items available")})}function li($){return w8.object({item:$.nullable().describe("The retrieved item, or null if not found")})}function dr8($){return w8.object({data:$.partial().describe("Data for the new entity (id may be auto-generated)")})}function mr8($){return w8.object({item:$.describe("The created entity with generated id")})}function ir8($){return w8.object({id:w8.string().describe("ID of the entity to update"),data:$.partial().describe("Partial entity data to update")})}function pr8($){return w8.object({item:$.describe("The updated entity")})}function mi($){return w8.object({item:$.describe("The deleted entity")})}function A90($,Z,X){let Q=$.toUpperCase(),Y=X?.readOnly??!1,G=[{name:`COLLECTION_${Q}_LIST`,inputSchema:z3,outputSchema:wF(Z)},{name:`COLLECTION_${Q}_GET`,inputSchema:ci,outputSchema:li(Z)}];if(!Y)G.push({name:`COLLECTION_${Q}_CREATE`,inputSchema:dr8(Z),outputSchema:mr8(Z),opt:!0},{name:`COLLECTION_${Q}_UPDATE`,inputSchema:ir8(Z),outputSchema:pr8(Z),opt:!0},{name:`COLLECTION_${Q}_DELETE`,inputSchema:di,outputSchema:mi(Z),opt:!0});return G}var P90,cr8,Ha1,lr8,z3,ci,di;var cG=D(()=>{P90=w8.object({id:w8.string().describe("Unique identifier for the entity"),title:w8.string().describe("Human-readable title for the entity"),description:w8.string().nullish().describe("Description of the entity"),created_at:w8.string().datetime(),updated_at:w8.string().datetime(),created_by:w8.string().optional(),updated_by:w8.string().optional()}),cr8=w8.object({field:w8.array(w8.string()),operator:w8.enum(["eq","gt","gte","lt","lte","in","like","contains"]),value:w8.unknown()}),Ha1=w8.lazy(()=>w8.union([cr8,w8.object({operator:w8.enum(["and","or","not"]),conditions:w8.array(Ha1)})])),lr8=w8.object({field:w8.array(w8.string()),direction:w8.enum(["asc","desc"]),nulls:w8.enum(["first","last"]).optional()}),z3=w8.object({where:Ha1.optional().describe("Filter expression"),orderBy:w8.array(lr8).optional().describe("Sort expressions"),limit:w8.number().int().min(1).max(1000).optional().describe("Maximum number of items to return"),offset:w8.number().int().min(0).optional().describe("Number of items to skip")});ci=w8.object({id:w8.string().describe("ID of the entity to retrieve")});di=w8.object({id:w8.string().describe("ID of the entity to delete")})});import{z as Cx}from"zod";var nr8,tr8,Fa1;var Na1=D(()=>{cG();nr8=P90.extend({avatar:Cx.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:Cx.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:Cx.string().describe("Virtual MCP ID to use for this assistant"),model:Cx.object({id:Cx.string().describe("Model ID"),connectionId:Cx.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),tr8=A90("assistant",nr8),Fa1=[...tr8]});import{z as H0}from"zod";var ii,LF,Oa1,or8,rr8,Ba1,ar8,sr8,er8,$a8,Za8,Xa8,Da1,Qa8,Ya8,Ga8,Ja8,Wa8,Ka8,Ha8,Fa8,Na8,Ua8,WZ5,Oa8,KZ5,Ua1,Ba8,Da8,T90,HZ5;var wa1=D(()=>{pL();cG();ii=H0.lazy(()=>H0.union([H0.null(),H0.string(),H0.number(),H0.boolean(),H0.record(H0.string(),ii),H0.array(ii)])),LF=H0.record(H0.string(),H0.record(H0.string(),ii)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Oa1=H0.object({type:H0.literal("text"),text:H0.string().describe("The text content"),providerOptions:LF}),or8=H0.object({type:H0.literal("text"),text:H0.string().describe("The text content"),providerMetadata:H0.any().optional().describe("Additional provider-specific metadata")}),rr8=H0.string().describe("File data as URL string"),Ba1=H0.object({type:H0.literal("file"),filename:H0.string().optional().describe("Optional filename of the file"),data:rr8,mediaType:H0.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:LF}),ar8=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")}),sr8=H0.object({type:H0.literal("reasoning"),text:H0.string().describe("The reasoning text"),providerOptions:LF}),er8=H0.object({type:H0.literal("reasoning"),text:H0.string().describe("The reasoning text"),providerMetadata:H0.any().optional().describe("Additional provider-specific metadata")}),$a8=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:LF}),Za8=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")}),Xa8=H0.union([H0.object({type:H0.literal("text"),value:H0.string()}),H0.object({type:H0.literal("json"),value:ii}),H0.object({type:H0.literal("error-text"),value:H0.string()}),H0.object({type:H0.literal("error-json"),value:ii}),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)")]),Da1=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:Xa8.describe("Result of the tool call"),result:H0.unknown().describe("Unknown result of the tool call"),providerOptions:LF}),Qa8=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")}),Ya8=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")})]),Ga8=H0.object({role:H0.literal("system"),content:H0.string().describe("System message content"),providerOptions:LF}),Ja8=H0.object({role:H0.literal("user"),content:H0.array(H0.union([Oa1,Ba1])).describe("User message content parts (text or file)"),providerOptions:LF}),Wa8=H0.object({role:H0.literal("assistant"),content:H0.array(H0.union([Oa1,Ba1,sr8,$a8,Da1])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:LF}),Ka8=H0.object({role:H0.literal("tool"),content:H0.array(Da1).describe("Tool message content (tool results)"),providerOptions:LF}),Ha8=H0.union([Ga8,Ja8,Wa8,Ka8]),Fa8=H0.array(Ha8).describe("A list of messages forming the prompt"),Na8=H0.object({prompt:Fa8.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")}),Ua8=H0.object({content:H0.array(H0.union([or8,ar8,er8,Za8,Qa8,Ya8])).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")}),WZ5=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")}),Oa8=H0.object({supportedUrls:H0.record(H0.string(),H0.array(H0.string())).describe("Supported URL patterns by media type for the provider")}),KZ5=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()}),Ua1=H0.object({modelId:H0.string().describe("The ID of the model"),callOptions:Na8}),Ba8=P90.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()}),Da8=A90("llm",Ba8,{readOnly:!0}),T90=[{name:"LLM_METADATA",inputSchema:H0.object({modelId:H0.string().describe("The ID of the model")}),outputSchema:Oa8},{name:"LLM_DO_STREAM",inputSchema:Ua1},{name:"LLM_DO_GENERATE",inputSchema:Ua1,outputSchema:Ua8},...Da8],HZ5=KK(T90)});import{z as tL}from"zod";var wa8,La1;var Ea1=D(()=>{wa8=tL.object({scopes:tL.array(tL.string()).describe("List of scopes available"),stateSchema:tL.record(tL.string(),tL.unknown()).describe("JSON Schema (draft-07) defining the state structure")}),La1=[{name:"MCP_CONFIGURATION",inputSchema:tL.object({}),outputSchema:wa8}]});import{z as h5}from"zod";var La8,Ea8,ja1;var za1=D(()=>{La8=h5.object({}).strict(),Ea8=h5.object({billing:h5.object({mode:h5.enum(["prepaid","postpaid"]),limitPeriod:h5.enum(["daily","weekly","monthly"]).nullable()}),limit:h5.object({total:h5.number().nullable(),remaining:h5.number().nullable(),reset:h5.string().nullable()}),usage:h5.object({total:h5.number(),daily:h5.number(),weekly:h5.number(),monthly:h5.number()}),alert:h5.object({enabled:h5.boolean(),threshold_usd:h5.number(),email:h5.string().nullable()}),connectionId:h5.string()}),ja1=[{name:"GATEWAY_USAGE",inputSchema:La8,outputSchema:Ea8},{name:"GATEWAY_SET_LIMIT",inputSchema:h5.object({}),outputSchema:h5.object({}),opt:!0},{name:"GATEWAY_SET_ALERT",inputSchema:h5.object({}),outputSchema:h5.object({}),opt:!0}]});import{z as Pa1}from"zod";function lG(){return RY()===null}function R90($,Z){return $===V4.DEV_ASSETS(Z)}function _x($,Z){let X=iy1(Z,$),Q=new Date().toISOString();return{id:X.id??V4.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:ja8,bindings:["OBJECT_STORAGE"],status:"active"}}var ja8;var vx=D(()=>{vw();hi();V8();ja8=nL.map(($)=>({name:$.name,description:`${$.name} operation for local file storage`,inputSchema:Pa1.toJSONSchema($.inputSchema),outputSchema:Pa1.toJSONSchema($.outputSchema)}))});function Aa1($,Z){return $||Z===0}function Ta1($,Z,X,Q,Y){let G=Z?Y+1:Y,J=$.slice(0,X),W=Q+X<G;return{items:J,totalCount:G,hasMore:W}}function Ra1($,Z,X){if(!X)return{sqlOffset:$,sqlLimit:Z};if($===0)return{sqlOffset:0,sqlLimit:Math.max(Z-1,0)};return{sqlOffset:$-1,sqlLimit:Z}}function za8($,Z){if(Z.length===0)return;let[X,...Q]=Z,Y=X==="slug"?lU($):$[X];for(let G of Q){if(Y===null||typeof Y!=="object")return;Y=Y[G]}return Y}function Pa8($){let X=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/%/g,".*").replace(/_/g,".");return new RegExp(`^${X}$`,"i")}function Aa8($,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"&&Pa8(String(X)).test($);case"contains":return String($).toLowerCase().includes(String(X).toLowerCase());default:return!0}}function pi($,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)=>pi($,G));case"or":return Y.some((G)=>pi($,G));case"not":return!Y.every((G)=>pi($,G));default:return!0}}let X=za8($,Z.field);return Aa8(X,Z.operator,Z.value)}var Ia1=D(()=>{M40()});import{z as xO}from"zod";var Ta8=8,Ra8,Ia8,qa8,Ma8,lc0;var qa1=D(()=>{cc0();Na1();cG();wa1();Ea1();hi();za1();V8();S0();f9();fY();DF();vx();yW();M40();Ia1();Ra8=[{name:/^(COLLECTION_REGISTRY_APP_LIST|REGISTRY_ITEM_LIST)$/,inputSchema:xO.object({})}],Ia8={LLM:T90,LLMS:T90,ASSISTANTS:Fa1,MCP:La1,OBJECT_STORAGE:nL,AI_GATEWAY_BILLING:ja1,TRIGGER:w90,REGISTRY:Ra8,BRAND:z90},qa8=z3.extend({binding:xO.union([xO.array(xO.object({}).passthrough()),xO.object({}).passthrough(),xO.string()]).optional(),include_virtual:xO.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false."),slug:xO.string().optional().describe("Filter by connection slug. Matches against app_name, or a slug derived from connection_url or title.")}),Ma8=wF(g7),lc0=c({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:qa8,outputSchema:Ma8,handler:async($,Z)=>{await Z.access.check();let X=t(Z),Q=$.binding?typeof $.binding==="string"?(()=>{let E=Ia8[$.binding.toUpperCase()];if(!E)throw Error(`Unknown binding: ${$.binding}`);return E})():$.binding:void 0,Y=Q?O90(Q):void 0,G=!!Y,J=$.limit??100,W=$.offset??0,K=v9(),H=V4.DEV_ASSETS(X.id),F=_x(X.id,K),N=(!$.slug||lU(F)===$.slug)&&pi(F,$.where),U=lG()&&!G&&N,{sqlOffset:O,sqlLimit:B}=Ra1(W,J,U),{items:w,totalCount:L}=await Z.storage.connections.list(X.id,{includeVirtual:$.include_virtual??!1,slug:$.slug,where:$.where,orderBy:$.orderBy,limit:G?void 0:B,offset:G?void 0:O});if(Y){let E=Z9(),j=V4.SELF(X.id);await t50(w,Ta8,async(z)=>{if(z.tools!==null)return;let A=z.id===j?async()=>{let{listManagementTools:I}=await Promise.resolve().then(() => (yO(),I90));return I(Z)}:()=>_c0(z,Z,k40),P=await vO("tools",z.id,A,E,(I)=>Z.pendingRevalidations.push(I),_O);if(P!==null)z.tools=P})}if(lG()&&Aa1(G,W)&&N&&!w.some((E)=>E.id===H))w.unshift(F);if(G){let E=(await Promise.all(w.map(async(P)=>{if(!P.tools||P.tools.length===0)return null;return Y.isImplementedBy(P.tools.map((q)=>({name:q.name,inputSchema:q.inputSchema,outputSchema:q.outputSchema})))?P:null}))).filter((P)=>P!==null),j=E.length,z=E.slice(W,W+J),A=W+J<j;return{items:z,totalCount:j,hasMore:A}}return Ta1(w,U,J,W,L)}})});var ka8,dc0;var Ma1=D(()=>{cG();V8();S0();f9();fY();DF();vx();yW();ka8=li(g7),dc0=c({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:ci,outputSchema:ka8,handler:async($,Z)=>{let X=t(Z);if(await Z.access.check(),lG()&&R90($.id,X.id))return{item:_x(X.id,v9())};let Q=await Z.storage.connections.findById($.id);if(!Q||Q.organization_id!==X.id)return{item:null};if(Q.tools===null){let Y=V4.SELF(X.id),G=Q.id===Y?async()=>{let{listManagementTools:W}=await Promise.resolve().then(() => (yO(),I90));return W(Z)}:async()=>{let W=await N5(Q,Z,!0);try{return(await W.listTools()).tools}finally{await W.close().catch(()=>{})}},J=await vO("tools",Q.id,G,Z9(),(W)=>Z.pendingRevalidations.push(W),_O);if(J!==null)Q.tools=J}return{item:Q}}})});class l6{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,G=$.expiresAt?.toISOString()??null,J=await this.db.insertInto("downstream_tokens").values({id:n8("dtok"),connectionId:$.connectionId,accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:G,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,createdAt:Z,updatedAt:Z}).onConflict((W)=>W.column("connectionId").doUpdateSet({accessToken:X,refreshToken:Q,scope:$.scope,expiresAt:G,clientId:$.clientId,clientSecret:Y,tokenEndpoint:$.tokenEndpoint,updatedAt:Z})).returning(["id","createdAt"]).executeTakeFirstOrThrow();return{id:J.id,connectionId:$.connectionId,accessToken:$.accessToken,refreshToken:$.refreshToken,scope:$.scope,expiresAt:$.expiresAt,createdAt:J.createdAt,updatedAt:Z,clientId:$.clientId,clientSecret:$.clientSecret,tokenEndpoint:$.tokenEndpoint}}async delete($){await this.db.deleteFrom("downstream_tokens").where("connectionId","=",$).execute()}isExpired($,Z=0){if(!$.expiresAt)return!1;let 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 dG=D(()=>{xX()});function fx(...$){if(_a8)console.log("[mcp-read-cache]",...$)}function va8($){return $.kind==="org"?"org":`u:${$.userId}`}function mc0($){if($===null||typeof $!=="object")return JSON.stringify($)??"null";if(Array.isArray($))return`[${$.map(mc0).join(",")}]`;return`{${Object.keys($).sort().map((X)=>`${JSON.stringify(X)}:${mc0($[X])}`).join(",")}}`}class k90{config;maxEntries;now;maxTotalBytes;store=new Map;revalidating=new Set;totalBytes=0;constructor($=Va8,Z=Sa8,X=()=>Date.now(),Q=Ca8){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}:${va8(X)}:${$}:${mc0(Q)}`}storeSet($,Z,X,Q){let Y;try{Y=JSON.stringify(Z).length}catch{fx("SKIP non-serializable",$);return}if(Y>Q){fx("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),F=this.now(),N=this.store.get(H),U=N?F-N.storedAt:1/0;if(!N||U>K.maxStaleMs){q90.add(1,{type:Z,outcome:"miss"}),fx(N?"EXPIRED":"MISS",H);let O=await G();if(J?.(O)??!0)this.storeSet(H,O,this.now(),K.maxValueBytes);else fx("NOT-CACHED (shouldCache=false)",H);return O}if(this.store.delete(H),this.store.set(H,N),U>K.revalidateAfterMs&&!this.revalidating.has(H)){q90.add(1,{type:Z,outcome:"stale"}),fx("STALE \u2192 serve + revalidate",H,`age=${U}ms`),this.revalidating.add(H);let O=G().then((B)=>{if(J?.(B)??!0)this.storeSet(H,B,this.now(),K.maxValueBytes)}).catch(()=>{q90.add(1,{type:Z,outcome:"error"})}).finally(()=>this.revalidating.delete(H));W?.(O)}else q90.add(1,{type:Z,outcome:"hit"}),fx("HIT",H,`age=${U}ms`);return N.value}invalidate($){let Z=`${$}:`;for(let X of[...this.store.keys()])if(X.startsWith(Z))this.deleteKey(X)}}function pc0(){return b0().mcpCacheEnabled}function V90(){return pc0()?ic0:null}var q90,M90=1024,ka1,Va8,Sa8=2000,Ca8,_a8,ic0;var ni=D(()=>{I6();q$();q90=w$.createCounter("mcp_read_cache.fetches",{description:"MCP read cache outcomes (hit, stale, miss, error)",unit:"{fetches}"}),ka1=M90*M90,Va8={"tools/call":{revalidateAfterMs:30000,maxStaleMs:300000,maxValueBytes:512*M90},"resources/read":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:4*ka1},"prompts/get":{revalidateAfterMs:60000,maxStaleMs:300000,maxValueBytes:512*M90}},Ca8=256*ka1,_a8=typeof process<"u"&&!!process.env?.MCP_CACHE_DEBUG;ic0=new k90;w$.createObservableGauge("mcp_read_cache.entries",{description:"Current entry count in the per-pod MCP read cache",unit:"{entries}"}).addCallback(($)=>$.observe(ic0.stats().entries));w$.createObservableGauge("mcp_read_cache.bytes",{description:"Approximate total bytes held in the per-pod MCP read cache",unit:"By"}).addCallback(($)=>$.observe(ic0.stats().bytes))});function Ca1($){V90()?.invalidate($)}function bx($){Ca1($);let Z=nc0?.();if(!Z)return;try{Z.publish(Va1,fa8.encode(JSON.stringify({connectionId:$,originId:Sa1})))}catch(X){console.warn("[McpCacheInvalidation] publish failed (non-critical):",X)}}function _a1($){if(nc0=$,ti)return;let Z=$();if(!Z)return;ti=Z.subscribe(Va1),(async()=>{for await(let X of ti)try{let Q=JSON.parse(ba8.decode(X.data));if(Q.originId===Sa1)continue;Ca1(Q.connectionId)}catch{}})().catch(console.error)}function va1(){ti?.unsubscribe(),ti=null,nc0=void 0}var Va1="studio.mcp-cache.invalidate",Sa1,fa8,ba8,nc0,ti=null;var oi=D(()=>{ni();Sa1=crypto.randomUUID(),fa8=new TextEncoder,ba8=new TextDecoder});import{z as tc0}from"zod";function ya8($){let Z={...$};for(let X of xa8)delete Z[X];return Z}function ga8($,Z){return $.connection_url!==void 0?$.connection_url:Z}function ca8($,Z){return $.length===Z.length&&$.every((X,Q)=>X===Z[Q])}var xa8,ha8,ua8,oc0;var fa1=D(()=>{DF();dG();S0();q$();fY();oi();vc0();Ii();yW();xa8=["id","organization_id","created_by","created_at"];ha8=tc0.object({id:tc0.string().describe("ID of the connection to update"),data:o$0.describe("Partial connection data to update")}),ua8=tc0.object({item:g7.describe("The updated connection entity")});oc0=c({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:ha8,outputSchema:ua8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=Y1(Z);if(!Q)throw Error("User ID required to update connection");let{id:Y}=$,G=ya8($.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=ga8(G,W.connection_url);if(K==="VIRTUAL"){let f=qf(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=Mf(f)}let F=G.configuration_state??W.configuration_state??{},N=G.configuration_scopes??W.configuration_scopes??[];if(J){if(G.configuration_state!==void 0)F=G.configuration_state??{};else if(F===null||F===void 0)F={};if(G.configuration_scopes!==void 0)N=G.configuration_scopes??[];if(N.length>0){let f=F;bi(f,N,X.id),await yi(f,N,X.id,Z)}}if(K==="STDIO"&&!b0().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 l6(Z.db,Z.vault).get(Y);if(x?.accessToken)U=x.accessToken}catch{}let O=await kO({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),B=O?.tools?.length?O.tools:null,w=!1;if(G.configuration_scopes===void 0&&O?.scopes?.length)w=!ca8(N,O.scopes),N=O.scopes;if(bi(F,N,X.id),w&&N.length>0)await yi(F,N,X.id,Z);let L=J||w,E=L?xi(F,N):[],j=L?xi(W.configuration_state??{},W.configuration_scopes??[]):[],z=W.configuration_state,A=z==null||Object.keys(z).length===0,P,I,q=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:F,configuration_scopes:N,updated_by:Q},C={...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:n}=await Z.storage.connectionCredentialVault.createOrRotateWorkloadToken({organizationId:X.id,subjectConnectionId:Y});I=n.id,P={baseUrl:Z.baseUrl,org:X.slug??X.id,subjectConnectionId:Y,token:x}}}}catch(f){if(I)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:I});throw await q(),f}if(L&&F&&N)try{await(await N5(C,Z,!1)).callTool({name:"ON_MCP_CONFIGURATION",arguments:{state:F,scopes:N,firstRun:A,...P?{vault:P}:{}}})}catch(f){if(console.error("Failed to invoke ON_MCP_CONFIGURATION callback",f),I)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:I});if(E.length>0)throw await q(),f}let l;try{l=await Z.storage.connections.update(Y,M)}catch(f){if(L){if(I)await Z.storage.connectionCredentialVault.revokeWorkloadToken({organizationId:X.id,subjectConnectionId:Y,tokenId:I});await q()}throw f}if(B)Z9()?.set("tools",Y,B).catch(()=>{});return bx(Y),{item:l}}})});import{z as la8}from"zod";var da8,rc0;var ba1=D(()=>{cG();C4();S0();fY();oi();yW();da8=di.extend({force:la8.boolean().optional().describe("If true, removes this connection from all agents that reference it before deleting")}),rc0=c({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:da8,outputSchema:mi(g7),handler:async($,Z)=>{r(Z);let X=t(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]:F,...N}=K;await Z.storage.organizationSettings.upsert(X.id,{registry_config:{registries:N,blockedMcps:H}})}}Z9()?.invalidate($.id).catch(()=>{}),bx($.id);let W=Y1(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 xx}from"zod";var ac0;var xa1=D(()=>{S0();ac0=c({name:"CONNECTION_TEST",description:"Test connection health and latency",annotations:{title:"Test Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:xx.object({id:xx.string()}),outputSchema:xx.object({id:xx.string(),healthy:xx.boolean(),latencyMs:xx.number()}),handler:async($,Z)=>{let X=t(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 ya1=D(()=>{yr1();qa1();Ma1();fa1();ba1();xa1()});import{sql as _4}from"kysely";import{z as HK}from"zod";function ga1($){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 pa8($,Z){let X=$;for(let Y=Z.length;Y>=1;Y--){let G=`$${Y}`;if(X.includes(G))X=X.replaceAll(G,ga1(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=ga1(Z[Y]);X=X.slice(0,G)+J+X.slice(G+1)}return X}function ha1($){return $.replace(/-/g,"_")}function ta8($){return`app_${ha1($)}`}function oa8($){return`app_role_${ha1($)}`}function ra8($){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 aa8($,Z,X){if(await _4`CREATE SCHEMA IF NOT EXISTS ${_4.id(Z)}`.execute($),!(await _4`
890
890
  SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${X}) as exists
891
- `.execute($)).rows[0]?.exists)await _4`CREATE ROLE ${_4.id(X)} NOLOGIN`.execute($);await _4`GRANT ${_4.id(X)} TO CURRENT_USER`.execute($),await _4`GRANT USAGE, CREATE ON SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`GRANT ALL ON ALL TABLES IN SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${_4.id(Z)} GRANT ALL ON TABLES TO ${_4.id(X)}`.execute($),await _4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${_4.id(Z)} GRANT ALL ON SEQUENCES TO ${_4.id(X)}`.execute($),await _4`REVOKE ALL ON SCHEMA public FROM ${_4.id(X)}`.execute($)}async function sa8($,Z,X,Q){try{return await $.transaction().execute(async(Y)=>{return await _4`SET LOCAL ROLE ${_4.id(X)}`.execute(Y),await _4`SET LOCAL search_path TO ${_4.id(Z)}`.execute(Y),await _4.raw(Q).execute(Y)})}catch(Y){if(ra8(Y))return await aa8($,Z,X),await $.transaction().execute(async(G)=>{return await _4`SET LOCAL ROLE ${_4.id(X)}`.execute(G),await _4`SET LOCAL search_path TO ${_4.id(Z)}`.execute(G),await _4.raw(Q).execute(G)});throw Y}}var ia8,na8,ua1;var ca1=D(()=>{S0();ia8=HK.object({results:HK.array(HK.unknown()).optional(),success:HK.boolean().optional()});na8=HK.object({sql:HK.string().describe("The SQL query to run"),params:HK.array(HK.any()).describe("The parameters to pass to the SQL query").optional()});ua1=c({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:na8,outputSchema:HK.object({result:HK.array(ia8)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=pa8($.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=ta8(Z.connectionId),Y=oa8(Z.connectionId);return{result:[{results:(await sa8(Z.db,Q,Y,X)).rows,success:!0}]}}})});function S90($){let Z=$.access.getRole();if(!fG(Z))throw new KF("Only organization owners and admins can change org-wide pin status")}var sc0=D(()=>{bG();IL()});async function C90($,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 EF($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function _90($){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 ri($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function ai($,Z){if(!Z)return $;let X=`${_90(Z)}_`;return $.startsWith(X)?$.slice(X.length):$}function $s8($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}var yx;var la1=D(()=>{lW();yx=class yx extends x9{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=_90(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`${_90($)}_${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=ri(Q._meta);if(!Y)continue;if(ai(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=ri(Q._meta);if(!Y)continue;if(ai(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<yx.MAX_PAGES_PER_CLIENT);if(Y)console.warn(`GatewayClient: client "${$}" exceeded ${yx.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??$s8(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 v90=D(()=>{la1()});function $l0($){return EF($)}function Xs8($,Z){let X=EF(Z)||"prompt";return`${String($).padStart(Zs8,"0")}-${X}`}async function Zl0($,Z,X){try{await $.delete(f90,$l0(Z),{actor:X})}catch(Q){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:Q})}}async function b90($,Z,X,Q){let Y=$l0(Z);await Zl0($,Z,X),await Promise.all(Q.slice(0,ec0).map(async(G,J)=>{let W=Xs8(J,G.title),K={name:W,title:G.title,description:G.description,text:G.text};try{await $.write(f90,`${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 da1($,Z){let X=$l0(Z),Q;try{Q=await $.listDir(f90,X)}catch{return[]}let Y=Q.filter((J)=>J.kind==="file"&&J.path.endsWith(".json")).slice(0,ec0),G=[];for(let J of Y)try{let W=await $.read(f90,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 f90="agent-prompts",ec0=20,Zs8;var si=D(()=>{v90();Zs8=String(ec0-1).length});import{z as pa1}from"zod";function Qs8(){let $=ma1[Math.floor(Math.random()*ma1.length)];return`icon://${ia1[Math.floor(Math.random()*ia1.length)]}?color=${$}`}var ma1,ia1,Ys8,Gs8,Xl0;var na1=D(()=>{S0();SO();sc0();si();ma1=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],ia1=["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"];Ys8=pa1.object({data:s$0.describe("Data for the new virtual MCP")}),Gs8=pa1.object({item:h7.describe("The created virtual MCP entity")}),Xl0=c({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:Ys8,outputSchema:Gs8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=Y1(Z);if(!Q)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)S90(Z);let{prompts:Y,...G}=$.data;if(G.connections.length>0)await C90(Z,X.id,G.connections.map((K)=>K.connection_id));let J={...G,icon:G.icon??Qs8()},W=await Z.storage.virtualMcps.create(X.id,Q,J);if(Y?.length&&Z.orgFs&&W.id)await b90(Z.orgFs,W.id,Q,Y);return{item:W}}})});function Js8($){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 gO($){return typeof $==="string"||typeof $==="number"}function Ql0($,Z){let X=Z.split("."),Q=$;for(let Y of X){if(Q==null||typeof Q!=="object")return;Q=Q[Y]}return Q}function Ws8($,Z){return $.connections.some((X)=>X.connection_id===Z)}function x90($,Z){if("conditions"in Z){let{operator:W,conditions:K}=Z;switch(W){case"and":return K.every((H)=>x90($,H));case"or":return K.some((H)=>x90($,H));case"not":return!K.every((H)=>x90($,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 Ws8($,Y)}let J=Ql0($,G);switch(Q){case"eq":return J===Y;case"gt":return gO(J)&&gO(Y)&&J>Y;case"gte":return gO(J)&&gO(Y)&&J>=Y;case"lt":return gO(J)&&gO(Y)&&J<Y;case"lte":return gO(J)&&gO(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=Js8(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 Ks8($,Z){return[...$].sort((X,Q)=>{for(let Y of Z){let G=Y.field.join("."),J=Ql0(X,G),W=Ql0(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 Hs8,Fs8,Yl0;var ta1=D(()=>{cG();S0();SO();Hs8=z3,Fs8=wF(h7),Yl0=c({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:Hs8,outputSchema:Fs8,handler:async($,Z)=>{await Z.access.check();let X=t(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)=>x90(U,$.where));if($.orderBy&&$.orderBy.length>0)J=Ks8(J,$.orderBy);let W=J.length,K=$.offset??0,H=$.limit??100,F=J.slice(K,K+H),N=K+H<W;return{items:F,totalCount:W,hasMore:N}}})});import{z as Gl0}from"zod";var Ns8,Us8,Jl0;var oa1=D(()=>{S0();SO();Ns8=Gl0.object({id:Gl0.string().describe("ID of the virtual MCP to retrieve")}),Us8=Gl0.object({item:h7.nullable().describe("The retrieved virtual MCP, or null if not found")}),Jl0=c({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:Ns8,outputSchema:Us8,handler:async($,Z)=>{r(Z);let X=t(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}}})});function mG($){return Wl0.test($)}function ra1($){let Z=(X)=>typeof X==="string"?X.trim().toLowerCase():"";return Z($?.metadata?.siteSlug)||Z($?.title)||null}var Wl0;var hO=D(()=>{Wl0=/^[a-z0-9][a-z0-9-]{0,59}$/});function aa1($){let{nextTitle:Z,currentTitle:X,currentSiteSlug:Q}=$;if(Q?.trim())return null;if(Z===void 0||Z===X)return null;let Y=X?.trim().toLowerCase()??"";return mG(Y)?Y:null}var sa1=D(()=>{hO()});import{z as Kl0}from"zod";var Os8,Bs8,Hl0;var ea1=D(()=>{S0();si();SO();sc0();sa1();Os8=Kl0.object({id:Kl0.string().describe("ID of the virtual MCP to update"),data:e$0.describe("Partial virtual MCP data to update")}),Bs8=Kl0.object({item:h7.describe("The updated virtual MCP entity")}),Hl0=c({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:Os8,outputSchema:Bs8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=Y1(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};let W=aa1({nextTitle:J.title,currentTitle:Y.title,currentSiteSlug:Y.metadata?.siteSlug});if(W)J.metadata={...Y.metadata,...J.metadata,siteSlug:W};if(J.pinned!==void 0&&J.pinned!==Y.pinned)S90(Z);if(J.connections?.length)await C90(Z,X.id,J.connections.map((H)=>H.connection_id));let K=await Z.storage.virtualMcps.update($.id,Q,J);if(G!==void 0&&Z.orgFs)await b90(Z.orgFs,$.id,Q,G);return{item:K}}})});function Ds8($){if(!$)return!1;let Z=Nl0.join("|");return new RegExp(`permission\\s+"?(?:${Z})"?\\s+is not allowed`,"i").test($)||/permissions exceed what the github app/i.test($)}function Zs1($){let Z={...$};for(let X of Nl0)Z[X]="read";return Z}async function Xs1($,Z){let X={...Z};for(;;){let Q=await $(X);if(!Q.isError)return{result:Q,grantedPermissions:X};let Y=Q.content?.find((K)=>K.type==="text")?.text,G=Nl0.find((K)=>(K in X));if(!G||!Ds8(Y))return{result:Q,grantedPermissions:X};let{[G]:J,...W}=X;X=W}}function ws8($){if(!$||typeof $!=="object"||Array.isArray($))return $s1;let Z=$;if(Object.values(Z).some((X)=>typeof X!=="string"))return $s1;return Z}function Ls8($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function q5($){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=Ls8(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:X,owner:Z.owner,repo:Z.repo,permissions:ws8(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function oL($){return $.metadata?.orgShared===!0}function Qs1($){let Z=new Set,X=[];for(let Q of $??[]){if(Q.status!=="active")continue;let Y=q5(Q);if(Y===null)continue;let G=Fl0(Y.owner,Y.repo);if(Z.has(G))continue;Z.add(G),X.push(`${Y.owner}/${Y.repo}`)}return X}function y90($,Z,X){let Q=Fl0(Z,X),Y=($??[]).filter((G)=>{if(G.status&&G.status!=="active")return!1;let J=q5(G);return J!==null&&Fl0(J.owner,J.repo)===Q});return Y.find(oL)??Y[0]??null}var $s1,Nl0,Fl0=($,Z)=>`${$}/${Z}`.toLowerCase();var MQ=D(()=>{$s1={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read",deployments:"read"},Nl0=["deployments","checks"]});function Ys1($){return VG($)!==null||T40($)!==null}var Gs1=D(()=>{V8()});import{z as Ul0}from"zod";var Es8,js8,Ol0;var Js1=D(()=>{MQ();dG();S0();si();SO();Gs1();Es8=Ul0.object({id:Ul0.string().describe("ID of the virtual MCP to delete")}),js8=Ul0.object({item:h7.describe("The deleted virtual MCP entity")}),Ol0=c({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:Es8,outputSchema:js8,handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),Ys1($.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 Zl0(Z.orgFs,$.id,Y1(Z)??"system");let Y=Q.metadata?.githubRepo?.connectionId;if(Y)try{let G=await Z.storage.connections.findById(Y,X.id),J=G&&(oL(G)||(await Z.storage.virtualMcps.listByConnectionId(X.id,Y)).length>0||await Z.storage.connections.isReferencedByThread(Y));if(G&&q5(G)&&!J){let K=await new l6(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 kQ}from"zod";var zs8,Bl0;var Ws1=D(()=>{S0();zs8=kQ.object({id:kQ.string(),virtualMcpId:kQ.string(),pluginId:kQ.string(),connectionId:kQ.string().nullable(),settings:kQ.record(kQ.string(),kQ.unknown()).nullable(),createdAt:kQ.string(),updatedAt:kQ.string()}),Bl0=c({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:kQ.object({virtualMcpId:kQ.string().describe("Virtual MCP ID"),pluginId:kQ.string().describe("Plugin ID")}),outputSchema:kQ.object({config:zs8.nullable()}),handler:async($,Z)=>{r(Z);let X=t(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 vZ}from"zod";var Ps8,Dl0;var Ks1=D(()=>{S0();vx();f9();Ps8=vZ.object({id:vZ.string(),virtualMcpId:vZ.string(),pluginId:vZ.string(),connectionId:vZ.string().nullable(),settings:vZ.record(vZ.string(),vZ.unknown()).nullable(),createdAt:vZ.string(),updatedAt:vZ.string()}),Dl0=c({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:vZ.object({virtualMcpId:vZ.string().describe("Virtual MCP ID"),pluginId:vZ.string().describe("Plugin ID"),connectionId:vZ.string().nullable().optional().describe("MCP connection to bind"),settings:vZ.record(vZ.string(),vZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:vZ.object({config:Ps8}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y,connectionId:G,settings:J}=$,W=Y1(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&&lG()&&R90(G,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let N=_x(K.organization_id,v9());await Z.storage.connections.create({...N,organization_id:K.organization_id,created_by:W})}else if(G&&!H)throw Error(`Connection not found: ${G}`);let F=await Z.storage.virtualMcpPluginConfigs.upsert(Q,Y,{connectionId:G,settings:J});return{config:{id:F.id,virtualMcpId:F.virtualMcpId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});import{z as mX}from"zod";var As8,wl0;var Hs1=D(()=>{S0();SO();As8=mX.object({connectionId:mX.string(),toolName:mX.string(),label:mX.string(),icon:mX.string().nullable().optional()}),wl0=c({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:mX.object({virtualMcpId:mX.string().describe("Virtual MCP ID"),pinnedViews:mX.array(As8).describe("Pinned views to set for the virtual MCP sidebar"),layout:mX.object({defaultMainView:mX.object({type:mX.string(),id:mX.string().optional(),toolName:mX.string().optional()}).nullable().optional(),chatDefaultOpen:mX.boolean().nullable().optional()}).optional()}),outputSchema:mX.object({item:h7.nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pinnedViews:Y,layout:G}=$,J=Y1(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 jF}from"zod";var Ts8,Rs8,Ll0;var Fs1=D(()=>{S0();Ts8=jF.object({ids:jF.array(jF.string()).describe("Virtual MCP ids to look up")}),Rs8=jF.object({items:jF.array(jF.object({id:jF.string(),last_used_at:jF.string().optional(),last_used_by:jF.string().optional()}))}),Ll0=c({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:Ts8,outputSchema:Rs8,handler:async($,Z)=>{r(Z),t(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 Ns1=D(()=>{na1();ta1();oa1();ea1();Js1();Ws1();Ks1();Hs1();Fs1()});import{z as n7}from"zod";var El0;var Us1=D(()=>{I6();S0();El0=c({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:n7.object({startDate:n7.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:n7.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:n7.array(n7.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:n7.array(n7.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:n7.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:n7.object({cells:n7.array(n7.object({virtualMcpId:n7.string().nullable(),toolName:n7.string(),calls:n7.number(),errors:n7.number(),outputSize:n7.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),await JQ(),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 U5}from"zod";var jl0;var Os1=D(()=>{I6();S0();jl0=c({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:U5.object({id:U5.string().describe("Log ID to fetch")}),outputSchema:U5.object({log:U5.object({id:U5.string().optional(),organizationId:U5.string(),connectionId:U5.string(),toolName:U5.string(),input:U5.record(U5.string(),U5.unknown()),output:U5.record(U5.string(),U5.unknown()),isError:U5.boolean(),errorMessage:U5.string().nullish(),durationMs:U5.number(),timestamp:U5.string(),userId:U5.string().nullish(),requestId:U5.string(),userAgent:U5.string().nullish(),virtualMcpId:U5.string().nullish(),properties:U5.record(U5.string(),U5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await JQ();let X=t(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 K8}from"zod";var qs8,zl0;var Bs1=D(()=>{I6();S0();qs8=K8.object({id:K8.string().optional().describe("Unique log identifier"),organizationId:K8.string().describe("Organization ID"),connectionId:K8.string().describe("Connection ID"),toolName:K8.string().describe("Name of the tool that was called"),isError:K8.boolean().describe("Whether the call resulted in an error"),errorMessage:K8.string().nullish().describe("Error message if applicable"),durationMs:K8.number().describe("Call duration in milliseconds"),timestamp:K8.string().describe("ISO 8601 timestamp of the call"),userId:K8.string().nullish().describe("User who triggered the call"),requestId:K8.string().describe("Unique request identifier"),userAgent:K8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:K8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:K8.record(K8.string(),K8.string()).nullish().describe("Custom key-value metadata attached to the log")}),zl0=c({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:K8.object({connectionId:K8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:K8.array(K8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:K8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:K8.string().optional().describe("Filter by tool name"),isError:K8.boolean().optional().describe("Filter by error status"),startDate:K8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:K8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:K8.number().default(20).describe("Maximum number of results"),offset:K8.number().default(0).describe("Offset for pagination"),properties:K8.record(K8.string(),K8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:K8.array(K8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:K8.record(K8.string(),K8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:K8.record(K8.string(),K8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:K8.object({logs:K8.array(qs8).describe("Array of monitoring logs"),total:K8.number().describe("Total number of logs matching filters"),offset:K8.number().describe("Current offset for pagination"),limit:K8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await Z.access.check(),await JQ();let X=t(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 J$}from"zod";var Pl0;var Ds1=D(()=>{I6();S0();Pl0=c({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:J$.object({startDate:J$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:J$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:J$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:J$.array(J$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:J$.array(J$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:J$.array(J$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:J$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:J$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:J$.array(J$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:J$.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:J$.object({totalCalls:J$.number().describe("Total number of tool calls"),errorRate:J$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:J$.number().describe("Average call duration in milliseconds"),errorRatePercent:J$.string().optional().describe("Error rate as a percentage string"),totalErrors:J$.number().optional().describe("Total number of errors"),p50DurationMs:J$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:J$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:J$.array(J$.object({connectionId:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avgDurationMs:J$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:J$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:J$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:J$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:J$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:J$.array(J$.object({toolName:J$.string(),connectionId:J$.string().nullable(),calls:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:J$.array(J$.object({timestamp:J$.string(),toolName:J$.string(),calls:J$.number(),errors:J$.number(),avg:J$.number(),p95:J$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:J$.array(J$.object({timestamp:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avg:J$.number(),p50:J$.number(),p95:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),totalTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let X=t(Z);if(await Z.access.check(),await JQ(),$.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 iX}from"zod";var Al0;var ws1=D(()=>{I6();S0();Al0=c({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:iX.object({threadIds:iX.array(iX.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:iX.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:iX.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:iX.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:iX.object({items:iX.array(iX.object({threadId:iX.string(),calls:iX.number(),inputTokens:iX.number(),outputTokens:iX.number(),totalTokens:iX.number(),costUsd:iX.number()}))}),handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),await JQ(),{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 Ls1=D(()=>{Us1();Os1();Bs1();Ds1();ws1()});function g90($){return typeof $==="string"&&ks8.has($.trim().toLowerCase())}var ks8;var Tl0=D(()=>{ks8=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 bY}from"zod";var Rl0;var Es1=D(()=>{S0();Tl0();Rl0=c({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:bY.object({slug:bY.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!g90($),"Slug is reserved by Studio"),name:bY.string().min(1).max(255),description:bY.string().optional()}),outputSchema:bY.object({id:bY.string(),name:bY.string(),slug:bY.string(),logo:bY.string().nullable().optional(),metadata:bY.any().optional(),createdAt:bY.string().datetime().describe("ISO 8601 timestamp"),members:bY.array(bY.any()).optional()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Y1(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 FK}from"zod";var Il0;var js1=D(()=>{S0();Il0=c({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:FK.object({}),outputSchema:FK.object({organizations:FK.array(FK.object({id:FK.string(),name:FK.string(),slug:FK.string(),logo:FK.string().nullable().optional(),metadata:FK.any().optional(),createdAt:FK.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),!Y1(Z))throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list()).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}}})});import{z as iG}from"zod";var ql0;var zs1=D(()=>{S0();ql0=c({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)=>{r(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 P3}from"zod";var Ml0;var Ps1=D(()=>{S0();Ml0=c({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:P3.object({id:P3.string(),name:P3.string().min(1).max(255).optional(),description:P3.string().optional()}),outputSchema:P3.object({id:P3.string(),name:P3.string(),slug:P3.string(),logo:P3.string().nullable().optional(),metadata:P3.any().optional(),createdAt:P3.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(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 ei}from"zod";var kl0;var As1=D(()=>{S0();kl0=c({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ei.object({id:ei.string()}),outputSchema:ei.object({success:ei.boolean(),id:ei.string()}),handler:async($,Z)=>{return r(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 zF}from"zod";var Vl0;var Ts1=D(()=>{S0();uX();Vl0=c({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:zF.object({}),outputSchema:zF.object({organizationId:zF.string(),sidebar_items:zF.array(Fi).nullable().optional(),enabled_plugins:zF.array(zF.string()).nullable().optional(),registry_config:Ni.nullable().optional(),simple_mode:Ui.nullable().optional(),default_home_agents:Bi.nullable().optional(),flags:wi.nullable().optional(),main_agent_id:zF.string().nullable().optional(),sprint_config:Di.nullable().optional(),createdAt:zF.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:zF.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(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 VQ}from"zod";var Sl0;var Rs1=D(()=>{S0();uX();Sl0=c({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:VQ.object({organizationId:VQ.string(),sidebar_items:VQ.array(Fi).optional(),enabled_plugins:VQ.array(VQ.string()).optional(),registry_config:Ni.optional(),simple_mode:Ui.optional(),default_home_agents:Bi.optional(),flags:wi.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:VQ.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear."),sprint_config:Di.optional().describe("Task board sprint cadence. Replaced whole (not merged), so pass all three fields.")}),outputSchema:VQ.object({organizationId:VQ.string(),sidebar_items:VQ.array(Fi).nullable().optional(),enabled_plugins:VQ.array(VQ.string()).nullable().optional(),registry_config:Ni.nullable().optional(),simple_mode:Ui.nullable().optional(),default_home_agents:Bi.nullable().optional(),flags:wi.nullable().optional(),main_agent_id:VQ.string().nullable().optional(),sprint_config:Di.nullable().optional(),createdAt:VQ.string().datetime().describe("ISO 8601 timestamp"),updatedAt:VQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),t(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,sprint_config:$.sprint_config});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 A3}from"zod";var Is1,Cl0,_l0;var qs1=D(()=>{S0();uX();Is1=AO.extend({organizationId:A3.string(),archivedAt:A3.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:A3.string().describe("ISO 8601 timestamp"),updatedAt:A3.string().describe("ISO 8601 timestamp")}),Cl0=c({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:A3.object({includeArchived:A3.boolean().optional().describe("Include archived brands in the list")}),outputSchema:A3.object({items:A3.array(Is1)}),handler:async($,Z)=>{r(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}))}}}),_l0=c({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:A3.object({id:A3.string().describe("Brand context ID")}),outputSchema:Is1.extend({organizationId:A3.string()}),handler:async($,Z)=>{r(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 rL}from"zod";var Ms1,vl0,fl0,bl0;var ks1=D(()=>{S0();uX();Ms1=AO.extend({organizationId:rL.string(),createdAt:rL.string().describe("ISO 8601 timestamp"),updatedAt:rL.string().describe("ISO 8601 timestamp")}),vl0=c({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:AO.omit({id:!0}),outputSchema:Ms1,handler:async($,Z)=>{r(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}}}),fl0=c({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:AO.partial().required({id:!0}),outputSchema:Ms1,handler:async($,Z)=>{r(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}}}),bl0=c({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:rL.object({id:rL.string().describe("Brand context ID")}),outputSchema:rL.object({success:rL.boolean()}),handler:async($,Z)=>{r(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 h90($,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=Cs8(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((U)=>U.trim()).filter(Boolean)?.slice().sort((U,O)=>U.length-O.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 Cs8($,Z){let X=$.images??{},Q=$.colors??{},Y={};for(let[F,N]of Object.entries(Q))if(typeof N==="string"&&N&&Vs8.has(F))Y[F]=N;let G={},W=($.typography??{}).fontFamilies??{};for(let[F,N]of Object.entries(W))if(typeof N==="string"&&N){let U=Ss8[F.toLowerCase()];if(U&&!G[U])G[U]=N}let K=$.fonts;if(Array.isArray(K))for(let F of K){let N=F.family;if(typeof N==="string"&&N&&!G.body)G.body=N}let H={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[F]!==void 0)H[F]=$[F];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 Vs8,Ss8;var xl0=D(()=>{Vs8=new Set(["primary","secondary","accent","background","foreground"]),Ss8={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as u90}from"zod";var _s8,yl0;var Vs1=D(()=>{S0();xl0();uX();_s8=AO.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:u90.boolean()}),yl0=c({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:u90.object({domain:u90.string().describe("Website domain to extract brand from"),brandId:u90.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:_s8,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)=>{r(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 h90($.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 Ss1($){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 gl0,hl0;var Cs1=D(()=>{uc0();S0();gl0=c({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:L90,outputSchema:ui,handler:async($,Z)=>{r(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 Ss1(Q)}}),hl0=c({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:E90,outputSchema:j90,handler:async($,Z)=>{r(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(Ss1)}}})});import{resolveTxt as vs8}from"dns/promises";function ul0($){return`${fs8}.${$.toLowerCase()}`}function _s1(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function vs1($,Z,X=vs8){if(!Z)return!1;try{return(await X(ul0($))).some((Y)=>Y.join("").trim()===Z)}catch{return!1}}var fs8="_deco-verify";var fs1=()=>{};import{z as M5}from"zod";function uO($){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?ul0($.domain):null,recordValue:Z?$.verificationToken:null}}function xs8($){let Z=$.toLowerCase().trim();if(!bs8.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(T3.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var bs8,cl0,c90,ll0,dl0,ml0,il0,pl0;var bs1=D(()=>{xY();fs1();S0();bs8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,cl0=M5.enum(["off","auto","request"]),c90=M5.object({id:M5.string(),domain:M5.string(),joinMode:cl0,verificationStatus:M5.enum(["pending","verified"]),verificationMethod:M5.enum(["email","dns"]).nullable(),verifiedAt:M5.string().nullable(),recordName:M5.string().nullable(),recordValue:M5.string().nullable()});ll0=c({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:M5.object({}),outputSchema:M5.object({domains:M5.array(c90)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(X.id)).map(uO)}}}),dl0=c({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:M5.object({domain:M5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:cl0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:c90,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=xs8($.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 uO(H)}return uO(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:_s1()});return uO(K)}}),ml0=c({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:M5.object({id:M5.string(),joinMode:cl0}),outputSchema:c90,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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 uO(Y)}}),il0=c({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:M5.object({id:M5.string()}),outputSchema:M5.object({verified:M5.boolean(),domain:c90}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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:uO(Q)};if(!Q.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await vs1(Q.domain,Q.verificationToken))return{verified:!1,domain:uO(Q)};let G=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:uO(G)}}}),pl0=c({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:M5.object({id:M5.string()}),outputSchema:M5.object({success:M5.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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 cO($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as j9}from"zod";var ys8,nl0,tl0,ol0;var xs1=D(()=>{S0();C4();ys8=j9.object({id:j9.string(),userId:j9.string(),status:j9.enum(["pending","approved","denied"]),createdAt:j9.string(),user:j9.object({id:j9.string(),name:j9.string(),email:j9.string(),image:j9.string().nullable()}).nullable()}),nl0=c({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:j9.object({}),outputSchema:j9.object({requests:j9.array(ys8)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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}))}}}),tl0=c({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:j9.object({requestId:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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=Y1(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(!cO(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}}}),ol0=c({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:j9.object({requestId:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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=Y1(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 SQ}from"zod";var rl0;var ys1=D(()=>{C4();S0();bG();rl0=c({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:SQ.object({organizationId:SQ.string().optional(),userId:SQ.string(),role:SQ.array(SQ.string())}),outputSchema:SQ.object({id:SQ.string(),organizationId:SQ.string(),userId:SQ.string(),role:SQ.union([SQ.string(),SQ.array(SQ.string())]),createdAt:SQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(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","=",Y1(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!p60(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=Y1(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 gx}from"zod";var al0;var gs1=D(()=>{C4();S0();al0=c({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:gx.object({organizationId:gx.string().optional(),memberIdOrEmail:gx.string()}),outputSchema:gx.object({success:gx.boolean(),memberIdOrEmail:gx.string()}),handler:async($,Z)=>{r(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=Y1(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 t7}from"zod";var sl0;var hs1=D(()=>{S0();sl0=c({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:t7.object({limit:t7.number().optional(),offset:t7.number().optional()}),outputSchema:t7.object({members:t7.array(t7.object({id:t7.string(),organizationId:t7.string(),userId:t7.string(),role:t7.string(),createdAt:t7.string().datetime().describe("ISO 8601 timestamp"),user:t7.object({id:t7.string(),name:t7.string(),email:t7.string(),image:t7.string().optional()}).optional()}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{members:((await Z.boundAuth.organization.listMembers({organizationId:X,limit:$.limit,offset:$.offset}))?.members??[]).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});import{z as fZ}from"zod";var el0;var us1=D(()=>{C4();S0();bG();el0=c({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:fZ.object({organizationId:fZ.string().optional(),memberId:fZ.string(),role:fZ.array(fZ.string())}),outputSchema:fZ.object({id:fZ.string(),organizationId:fZ.string(),userId:fZ.string(),role:fZ.union([fZ.string(),fZ.array(fZ.string())]),createdAt:fZ.string().datetime().describe("ISO 8601 timestamp"),user:fZ.object({email:fZ.string(),name:fZ.string(),image:fZ.string().optional()})}),handler:async($,Z)=>{r(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","=",Y1(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!p60(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=Y1(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 cs1(){if($p&&Date.now()-$p.fetchedAt<600000)return $p.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 $p={rate:X,fetchedAt:Date.now()},X}catch{return $p?.rate??5.5}}function ls1($,Z,X){if(Z==="brl")return Math.round($/X);return $}var $p=null;function $d0($,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)$d0(J,`${G}[${W}]`,X);else X.append(`${G}[${W}]`,String(J))});else if(typeof Y==="object")$d0(Y,G,X);else X.append(G,String(Y))}return X}async function Zp($,Z){let X=b0().stripeSecretKey;if(!X)throw new yY(503,"billing is not configured");let Q=Z?.params?$d0(Z.params).toString():void 0,Y=await fetch(`${gs8}${$}`,{method:Z?.method??(Q?"POST":"GET"),headers:{Authorization:`Bearer ${X}`,...Q&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Q,signal:AbortSignal.timeout(hs8)}),G=await Y.json().catch(()=>({}));if(!Y.ok){let J=G.error?.message??`HTTP ${Y.status}`;throw new yY(Y.status,J)}return G}function ds1($){return{billing_address_collection:"required",tax_id_collection:{enabled:!0},...$&&{customer_update:{address:"auto",name:"auto"}}}}async function ms1($){let Z=b0().stripeOrgPriceId;if(!Z)throw new yY(503,"billing is not configured");let X=await Zp("/checkout/sessions",{params:{mode:"subscription",...ds1(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 yY(500,"checkout session lacks url");return{url:X.url}}function us8($,Z){return Math.round($*(1+Z/100))}async function is1($){let Z=us8($.amountCents,$.feePercent),X=ls1($.amountCents,$.currency,await cs1()),Q=b0().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 Zp("/checkout/sessions",{params:{mode:"payment",...$.customerId&&{customer:$.customerId},...ds1($.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 yY(500,"checkout session lacks url");return{url:J.url}}async function l90($){let Z=await Zp("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new yY(500,"portal session lacks url");return{url:Z.url}}async function d90($){return Zp(`/subscriptions/${encodeURIComponent($)}`)}async function ps1($){await Zp(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}var gs8="https://api.stripe.com/v1",yY,hs8=15000;var aL=D(()=>{q$();yY=class yY extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});import{z as Zd0}from"zod";var Xd0;var ns1=D(()=>{aL();f9();S0();C4();Xd0=c({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:Zd0.object({}),outputSchema:Zd0.object({url:Zd0.string()}),handler:async($,Z)=>{r(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=`${kZ()}/${encodeURIComponent(Q)}/members`,{url:J}=await ms1({organizationId:X,successUrl:`${G}?checkout=success`,cancelUrl:`${G}?checkout=canceled`});return CY({event:"subscription_checkout_started",organizationId:X,...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:J}}})});import{z as Qd0}from"zod";var Yd0;var ts1=D(()=>{aL();f9();S0();Yd0=c({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:Qd0.object({}),outputSchema:Qd0.object({url:Qd0.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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 l90({customerId:Q.stripeCustomerId,returnUrl:`${kZ()}/${encodeURIComponent(X.slug)}/members`})}catch(Y){if(Y instanceof yY)throw Error(Y.message);throw Y}}})});function m90($){return Gd0[$%Gd0.length]??cs8}function CQ($){return $.createdBy==="system"}function PF($){return i90.filter((Z)=>S50($,ls8[Z]))}function ux($,Z){return $?.startsWith(`${hx[Z]}:`)??!1}function AF($){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 Jd0($,Z){let X=AF($),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 lO($,Z,X){if(Z.length===0)return!1;let Q=Jd0($,X);return Z.every((Y)=>Q.get(Y)==="approved")}function rs1($,Z){return lO($,Z)&&!lO($,Z,{verifiedOnly:!0})}function as1($){let Z=null;for(let X of $){if(X.action!=="review_approved"&&X.action!=="review_changes_requested")continue;let Q=new Date(X.occurredAt).getTime();if(Z&&Q<Z.at)continue;let Y=X.data?.notes;Z={at:Q,notes:X.action==="review_changes_requested"&&typeof Y==="string"?Y:null}}return Z?.notes??null}function ds8($){let Z=0;for(let X of $){if(X.action!=="assignee_changed")continue;if(X.data?.to!==A8)continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function ss1($,Z=Wd0){let X=ds8($),Q=new Set,Y=0;for(let G of[...$].sort((J,W)=>J.occurredAt.localeCompare(W.occurredAt))){let J=new Date(G.occurredAt).getTime();if(G.action==="status_changed"){if(G.data?.to==="in_review")Y=J;continue}if(G.action==="review_changes_requested"&&J>=X)Q.add(Y)}return Q.size+1>=Z}var A8="super-agent",Gd0,cs8,Xp='Your checkout is SHALLOW (`git clone --depth 1`), so it has no merge base and `git diff main...HEAD` (three dots) fails with "fatal: main...HEAD: no merge base". To see a branch diff, either use the two-dot form against the fetched remote ref (`git fetch origin <base> && git diff origin/<base> HEAD`), or deepen first with `git fetch --deepen=100`. Same for `git log main..HEAD` and anything else that needs shared history.',os1,i90,hx,ls8,Wd0=5,es1="task-board.item.updated",$e1="task-board.item.deleted";var X9=D(()=>{uX();Gd0=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],cs8=Gd0[0];os1="Read the diff with `gh pr diff <number>`. It comes from the API, so it needs no fetch, no merge base, and is unaffected by the shallow checkout. "+"Read it ONCE \u2014 `gh pr diff <number> --name-only` first if you need to size "+"it, then pull the hunks you need per FILE. Do NOT re-run the diff sliced by directory: each slice re-reads bytes you already have into every remaining turn's context, and it is the largest avoidable cost in a review.",i90=["qa","code_review"],hx={qa:"QA Agent",code_review:"Code Reviewer"},ls8={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Kd0($){return $==="trial"?"trial":"subscription"}function Qp($,Z,X,Q={}){CY({event:Z,organizationId:X.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:X.id,...Q}})}function Hd0($){return $?.status==="active"||$?.status==="past_due"}function p90($,Z){if(Hd0($))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 Yp(){let $=b0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function dO(){return{...Yp(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function cx($,Z,X=Yp()){if(!X.enforced||!CQ(Z))return;let Q=await $.storage.organizationBilling.taskClaim(Z.id);if(Q&&Q.runCount>=X.maxRunsPerTask)throw Qp($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new o7("runs_exhausted");if(Q&&Q.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),G=p90(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,G.periodKey)>=G.limit)throw Qp($,"task_quota_blocked",Z,{phase:"precheck",reason:G.exhaustedReason,billing_mode:Kd0(G.periodKey),limit:G.limit}),new o7(G.exhaustedReason)}async function Ze1($,Z,X=Yp()){if(!X.enforced||!CQ(Z))return"skipped";let Q=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=p90(Q,X),G=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(G==="exhausted")throw Qp($,"task_quota_blocked",Z,{phase:"claim",reason:Y.exhaustedReason,billing_mode:Kd0(Y.periodKey),limit:Y.limit}),new o7(Y.exhaustedReason);if(G==="runs_exhausted")throw Qp($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new o7("runs_exhausted");if(G==="claimed")Qp($,"task_quota_claimed",Z,{billing_mode:Kd0(Y.periodKey),period_key:Y.periodKey,limit:Y.limit});return G}async function Xe1($,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 Qe1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function Ye1($,Z,X){if(await $.releaseTaskClaim(Z,X).catch((Y)=>{return console.error("[task-quota] refund failed (stays charged)",Y),!1}))CY({event:"task_quota_refunded",organizationId:Z,properties:{task_id:X}})}var ms8="[SUBSCRIPTION_REQUIRED]",is8,o7;var pG=D(()=>{X9();C4();q$();is8={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"};o7=class o7 extends Error{reason;constructor($){super(`${ms8} ${is8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as TF}from"zod";var Fd0;var Ge1=D(()=>{S0();pG();Fd0=c({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:TF.object({}),outputSchema:TF.object({enforced:TF.boolean(),billingStatus:TF.string(),subscribed:TF.boolean(),hasBillingAccount:TF.boolean(),used:TF.number(),limit:TF.number(),currentPeriodEnd:TF.string().datetime().nullable()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Yp(),Y=await Z.storage.organizationBilling.getBilling(X.id),G=p90(Y,Q),J=await Z.storage.organizationBilling.countTaskClaims(X.id,G.periodKey);return{enforced:Q.enforced,billingStatus:Y?.status??"none",subscribed:Hd0(Y),hasBillingAccount:!!Y?.stripeCustomerId,used:J,limit:G.limit,currentPeriodEnd:Y?.currentPeriodEnd?.toISOString()??null}}})});var Je1=D(()=>{Es1();js1();zs1();Ps1();As1();Ts1();Rs1();qs1();ks1();Vs1();Cs1();bs1();xs1();ys1();gs1();hs1();us1();ns1();ts1();Ge1()});function NK($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function n90($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(n90);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||n90(X)));return!1}function Nd0($){return Array.isArray($)&&$.every(n90)}function Gp($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||n90(X)))}var be1="vercel.ai.error",ns8,We1,Ke1,J1,xe1="AI_APICallError",ye1,ts8,He1,Fe1,X4,ge1="AI_EmptyResponseBodyError",he1,os8,Ne1,Ue1,t90,ue1="AI_InvalidArgumentError",ce1,rs8,Oe1,Be1,mO,le1="AI_InvalidPromptError",de1,as8,De1,we1,nG,me1="AI_InvalidResponseDataError",ie1,ss8,Le1,Ee1,lx,pe1="AI_JSONParseError",ne1,es8,je1,ze1,RF,te1="AI_LoadAPIKeyError",oe1,$e8,Pe1,Ae1,sL,re1="AI_LoadSettingError",ae1,Ze8,Te1,Re1,se1,ee1="AI_NoContentGeneratedError",$0$,Xe8,Ie1,qe1,Z0$,X0$="AI_NoSuchModelError",Q0$,Qe8,Me1,ke1,u5,Y0$="AI_TooManyEmbeddingValuesForCallError",G0$,Ye8,Ve1,Se1,dx,J0$="AI_TypeValidationError",W0$,Ge8,Ce1,_e1,O5,K0$="AI_UnsupportedFunctionalityError",H0$,Je8,ve1,fe1,v4;var a1=D(()=>{ns8=Symbol.for(be1),J1=class $ extends(Ke1=Error,We1=ns8,Ke1){constructor({name:Z,message:X,cause:Q}){super(X);this[We1]=!0,this.name=Z,this.cause=Q}static isInstance(Z){return $.hasMarker(Z,be1)}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}},ye1=`vercel.ai.error.${xe1}`,ts8=Symbol.for(ye1),X4=class extends(Fe1=J1,He1=ts8,Fe1){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:xe1,message:$,cause:J});this[He1]=!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 J1.hasMarker($,ye1)}},he1=`vercel.ai.error.${ge1}`,os8=Symbol.for(he1),t90=class extends(Ue1=J1,Ne1=os8,Ue1){constructor({message:$="Empty response body"}={}){super({name:ge1,message:$});this[Ne1]=!0}static isInstance($){return J1.hasMarker($,he1)}};ce1=`vercel.ai.error.${ue1}`,rs8=Symbol.for(ce1),mO=class extends(Be1=J1,Oe1=rs8,Be1){constructor({message:$,cause:Z,argument:X}){super({name:ue1,message:$,cause:Z});this[Oe1]=!0,this.argument=X}static isInstance($){return J1.hasMarker($,ce1)}},de1=`vercel.ai.error.${le1}`,as8=Symbol.for(de1),nG=class extends(we1=J1,De1=as8,we1){constructor({prompt:$,message:Z,cause:X}){super({name:le1,message:`Invalid prompt: ${Z}`,cause:X});this[De1]=!0,this.prompt=$}static isInstance($){return J1.hasMarker($,de1)}},ie1=`vercel.ai.error.${me1}`,ss8=Symbol.for(ie1),lx=class extends(Ee1=J1,Le1=ss8,Ee1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:me1,message:Z});this[Le1]=!0,this.data=$}static isInstance($){return J1.hasMarker($,ie1)}},ne1=`vercel.ai.error.${pe1}`,es8=Symbol.for(ne1),RF=class extends(ze1=J1,je1=es8,ze1){constructor({text:$,cause:Z}){super({name:pe1,message:`JSON parsing failed: Text: ${$}.
891
+ `.execute($)).rows[0]?.exists)await _4`CREATE ROLE ${_4.id(X)} NOLOGIN`.execute($);await _4`GRANT ${_4.id(X)} TO CURRENT_USER`.execute($),await _4`GRANT USAGE, CREATE ON SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`GRANT ALL ON ALL TABLES IN SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${_4.id(Z)} TO ${_4.id(X)}`.execute($),await _4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${_4.id(Z)} GRANT ALL ON TABLES TO ${_4.id(X)}`.execute($),await _4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${_4.id(Z)} GRANT ALL ON SEQUENCES TO ${_4.id(X)}`.execute($),await _4`REVOKE ALL ON SCHEMA public FROM ${_4.id(X)}`.execute($)}async function sa8($,Z,X,Q){try{return await $.transaction().execute(async(Y)=>{return await _4`SET LOCAL ROLE ${_4.id(X)}`.execute(Y),await _4`SET LOCAL search_path TO ${_4.id(Z)}`.execute(Y),await _4.raw(Q).execute(Y)})}catch(Y){if(ra8(Y))return await aa8($,Z,X),await $.transaction().execute(async(G)=>{return await _4`SET LOCAL ROLE ${_4.id(X)}`.execute(G),await _4`SET LOCAL search_path TO ${_4.id(Z)}`.execute(G),await _4.raw(Q).execute(G)});throw Y}}var ia8,na8,ua1;var ca1=D(()=>{S0();ia8=HK.object({results:HK.array(HK.unknown()).optional(),success:HK.boolean().optional()});na8=HK.object({sql:HK.string().describe("The SQL query to run"),params:HK.array(HK.any()).describe("The parameters to pass to the SQL query").optional()});ua1=c({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:na8,outputSchema:HK.object({result:HK.array(ia8)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=pa8($.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=ta8(Z.connectionId),Y=oa8(Z.connectionId);return{result:[{results:(await sa8(Z.db,Q,Y,X)).rows,success:!0}]}}})});function S90($){let Z=$.access.getRole();if(!fG(Z))throw new KF("Only organization owners and admins can change org-wide pin status")}var sc0=D(()=>{bG();IL()});async function C90($,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 EF($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function _90($){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 ri($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function ai($,Z){if(!Z)return $;let X=`${_90(Z)}_`;return $.startsWith(X)?$.slice(X.length):$}function $s8($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}var yx;var la1=D(()=>{lW();yx=class yx extends x9{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=_90(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`${_90($)}_${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=ri(Q._meta);if(!Y)continue;if(ai(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=ri(Q._meta);if(!Y)continue;if(ai(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<yx.MAX_PAGES_PER_CLIENT);if(Y)console.warn(`GatewayClient: client "${$}" exceeded ${yx.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??$s8(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 v90=D(()=>{la1()});function $l0($){return EF($)}function Xs8($,Z){let X=EF(Z)||"prompt";return`${String($).padStart(Zs8,"0")}-${X}`}async function Zl0($,Z,X){try{await $.delete(f90,$l0(Z),{actor:X})}catch(Q){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:Q})}}async function b90($,Z,X,Q){let Y=$l0(Z);await Zl0($,Z,X),await Promise.all(Q.slice(0,ec0).map(async(G,J)=>{let W=Xs8(J,G.title),K={name:W,title:G.title,description:G.description,text:G.text};try{await $.write(f90,`${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 da1($,Z){let X=$l0(Z),Q;try{Q=await $.listDir(f90,X)}catch{return[]}let Y=Q.filter((J)=>J.kind==="file"&&J.path.endsWith(".json")).slice(0,ec0),G=[];for(let J of Y)try{let W=await $.read(f90,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 f90="agent-prompts",ec0=20,Zs8;var si=D(()=>{v90();Zs8=String(ec0-1).length});import{z as pa1}from"zod";function Qs8(){let $=ma1[Math.floor(Math.random()*ma1.length)];return`icon://${ia1[Math.floor(Math.random()*ia1.length)]}?color=${$}`}var ma1,ia1,Ys8,Gs8,Xl0;var na1=D(()=>{S0();SO();sc0();si();ma1=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],ia1=["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"];Ys8=pa1.object({data:s$0.describe("Data for the new virtual MCP")}),Gs8=pa1.object({item:h7.describe("The created virtual MCP entity")}),Xl0=c({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:Ys8,outputSchema:Gs8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=Y1(Z);if(!Q)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)S90(Z);let{prompts:Y,...G}=$.data;if(G.connections.length>0)await C90(Z,X.id,G.connections.map((K)=>K.connection_id));let J={...G,icon:G.icon??Qs8()},W=await Z.storage.virtualMcps.create(X.id,Q,J);if(Y?.length&&Z.orgFs&&W.id)await b90(Z.orgFs,W.id,Q,Y);return{item:W}}})});function Js8($){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 gO($){return typeof $==="string"||typeof $==="number"}function Ql0($,Z){let X=Z.split("."),Q=$;for(let Y of X){if(Q==null||typeof Q!=="object")return;Q=Q[Y]}return Q}function Ws8($,Z){return $.connections.some((X)=>X.connection_id===Z)}function x90($,Z){if("conditions"in Z){let{operator:W,conditions:K}=Z;switch(W){case"and":return K.every((H)=>x90($,H));case"or":return K.some((H)=>x90($,H));case"not":return!K.every((H)=>x90($,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 Ws8($,Y)}let J=Ql0($,G);switch(Q){case"eq":return J===Y;case"gt":return gO(J)&&gO(Y)&&J>Y;case"gte":return gO(J)&&gO(Y)&&J>=Y;case"lt":return gO(J)&&gO(Y)&&J<Y;case"lte":return gO(J)&&gO(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=Js8(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 Ks8($,Z){return[...$].sort((X,Q)=>{for(let Y of Z){let G=Y.field.join("."),J=Ql0(X,G),W=Ql0(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 Hs8,Fs8,Yl0;var ta1=D(()=>{cG();S0();SO();Hs8=z3,Fs8=wF(h7),Yl0=c({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:Hs8,outputSchema:Fs8,handler:async($,Z)=>{await Z.access.check();let X=t(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)=>x90(U,$.where));if($.orderBy&&$.orderBy.length>0)J=Ks8(J,$.orderBy);let W=J.length,K=$.offset??0,H=$.limit??100,F=J.slice(K,K+H),N=K+H<W;return{items:F,totalCount:W,hasMore:N}}})});import{z as Gl0}from"zod";var Ns8,Us8,Jl0;var oa1=D(()=>{S0();SO();Ns8=Gl0.object({id:Gl0.string().describe("ID of the virtual MCP to retrieve")}),Us8=Gl0.object({item:h7.nullable().describe("The retrieved virtual MCP, or null if not found")}),Jl0=c({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:Ns8,outputSchema:Us8,handler:async($,Z)=>{r(Z);let X=t(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}}})});function mG($){return Wl0.test($)}function ra1($){let Z=(X)=>typeof X==="string"?X.trim().toLowerCase():"";return Z($?.metadata?.siteSlug)||Z($?.title)||null}var Wl0;var hO=D(()=>{Wl0=/^[a-z0-9][a-z0-9-]{0,59}$/});function aa1($){let{nextTitle:Z,currentTitle:X,currentSiteSlug:Q}=$;if(Q?.trim())return null;if(Z===void 0||Z===X)return null;let Y=X?.trim().toLowerCase()??"";return mG(Y)?Y:null}var sa1=D(()=>{hO()});import{z as Kl0}from"zod";var Os8,Bs8,Hl0;var ea1=D(()=>{S0();si();SO();sc0();sa1();Os8=Kl0.object({id:Kl0.string().describe("ID of the virtual MCP to update"),data:e$0.describe("Partial virtual MCP data to update")}),Bs8=Kl0.object({item:h7.describe("The updated virtual MCP entity")}),Hl0=c({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:Os8,outputSchema:Bs8,handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let Q=Y1(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};let W=aa1({nextTitle:J.title,currentTitle:Y.title,currentSiteSlug:Y.metadata?.siteSlug});if(W)J.metadata={...Y.metadata,...J.metadata,siteSlug:W};if(J.pinned!==void 0&&J.pinned!==Y.pinned)S90(Z);if(J.connections?.length)await C90(Z,X.id,J.connections.map((H)=>H.connection_id));let K=await Z.storage.virtualMcps.update($.id,Q,J);if(G!==void 0&&Z.orgFs)await b90(Z.orgFs,$.id,Q,G);return{item:K}}})});function Ds8($){if(!$)return!1;let Z=Nl0.join("|");return new RegExp(`permission\\s+"?(?:${Z})"?\\s+is not allowed`,"i").test($)||/permissions exceed what the github app/i.test($)}function Zs1($){let Z={...$};for(let X of Nl0)Z[X]="read";return Z}async function Xs1($,Z){let X={...Z};for(;;){let Q=await $(X);if(!Q.isError)return{result:Q,grantedPermissions:X};let Y=Q.content?.find((K)=>K.type==="text")?.text,G=Nl0.find((K)=>(K in X));if(!G||!Ds8(Y))return{result:Q,grantedPermissions:X};let{[G]:J,...W}=X;X=W}}function ws8($){if(!$||typeof $!=="object"||Array.isArray($))return $s1;let Z=$;if(Object.values(Z).some((X)=>typeof X!=="string"))return $s1;return Z}function Ls8($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function q5($){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=Ls8(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:X,owner:Z.owner,repo:Z.repo,permissions:ws8(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function oL($){return $.metadata?.orgShared===!0}function Qs1($){let Z=new Set,X=[];for(let Q of $??[]){if(Q.status!=="active")continue;let Y=q5(Q);if(Y===null)continue;let G=Fl0(Y.owner,Y.repo);if(Z.has(G))continue;Z.add(G),X.push(`${Y.owner}/${Y.repo}`)}return X}function y90($,Z,X){let Q=Fl0(Z,X),Y=($??[]).filter((G)=>{if(G.status&&G.status!=="active")return!1;let J=q5(G);return J!==null&&Fl0(J.owner,J.repo)===Q});return Y.find(oL)??Y[0]??null}var $s1,Nl0,Fl0=($,Z)=>`${$}/${Z}`.toLowerCase();var MQ=D(()=>{$s1={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read",deployments:"read"},Nl0=["deployments","checks"]});function Ys1($){return VG($)!==null||T40($)!==null}var Gs1=D(()=>{V8()});import{z as Ul0}from"zod";var Es8,js8,Ol0;var Js1=D(()=>{MQ();dG();S0();si();SO();Gs1();Es8=Ul0.object({id:Ul0.string().describe("ID of the virtual MCP to delete")}),js8=Ul0.object({item:h7.describe("The deleted virtual MCP entity")}),Ol0=c({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:Es8,outputSchema:js8,handler:async($,Z)=>{r(Z);let X=t(Z);if(await Z.access.check(),Ys1($.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 Zl0(Z.orgFs,$.id,Y1(Z)??"system");let Y=Q.metadata?.githubRepo?.connectionId;if(Y)try{let G=await Z.storage.connections.findById(Y,X.id),J=G&&(oL(G)||(await Z.storage.virtualMcps.listByConnectionId(X.id,Y)).length>0||await Z.storage.connections.isReferencedByThread(Y));if(G&&q5(G)&&!J){let K=await new l6(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 kQ}from"zod";var zs8,Bl0;var Ws1=D(()=>{S0();zs8=kQ.object({id:kQ.string(),virtualMcpId:kQ.string(),pluginId:kQ.string(),connectionId:kQ.string().nullable(),settings:kQ.record(kQ.string(),kQ.unknown()).nullable(),createdAt:kQ.string(),updatedAt:kQ.string()}),Bl0=c({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:kQ.object({virtualMcpId:kQ.string().describe("Virtual MCP ID"),pluginId:kQ.string().describe("Plugin ID")}),outputSchema:kQ.object({config:zs8.nullable()}),handler:async($,Z)=>{r(Z);let X=t(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 vZ}from"zod";var Ps8,Dl0;var Ks1=D(()=>{S0();vx();f9();Ps8=vZ.object({id:vZ.string(),virtualMcpId:vZ.string(),pluginId:vZ.string(),connectionId:vZ.string().nullable(),settings:vZ.record(vZ.string(),vZ.unknown()).nullable(),createdAt:vZ.string(),updatedAt:vZ.string()}),Dl0=c({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:vZ.object({virtualMcpId:vZ.string().describe("Virtual MCP ID"),pluginId:vZ.string().describe("Plugin ID"),connectionId:vZ.string().nullable().optional().describe("MCP connection to bind"),settings:vZ.record(vZ.string(),vZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:vZ.object({config:Ps8}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pluginId:Y,connectionId:G,settings:J}=$,W=Y1(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&&lG()&&R90(G,K.organization_id)){if(!W)throw Error("User ID required to create dev-assets connection");let N=_x(K.organization_id,v9());await Z.storage.connections.create({...N,organization_id:K.organization_id,created_by:W})}else if(G&&!H)throw Error(`Connection not found: ${G}`);let F=await Z.storage.virtualMcpPluginConfigs.upsert(Q,Y,{connectionId:G,settings:J});return{config:{id:F.id,virtualMcpId:F.virtualMcpId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});import{z as mX}from"zod";var As8,wl0;var Hs1=D(()=>{S0();SO();As8=mX.object({connectionId:mX.string(),toolName:mX.string(),label:mX.string(),icon:mX.string().nullable().optional()}),wl0=c({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:mX.object({virtualMcpId:mX.string().describe("Virtual MCP ID"),pinnedViews:mX.array(As8).describe("Pinned views to set for the virtual MCP sidebar"),layout:mX.object({defaultMainView:mX.object({type:mX.string(),id:mX.string().optional(),toolName:mX.string().optional()}).nullable().optional(),chatDefaultOpen:mX.boolean().nullable().optional()}).optional()}),outputSchema:mX.object({item:h7.nullable()}),handler:async($,Z)=>{r(Z);let X=t(Z);await Z.access.check();let{virtualMcpId:Q,pinnedViews:Y,layout:G}=$,J=Y1(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 jF}from"zod";var Ts8,Rs8,Ll0;var Fs1=D(()=>{S0();Ts8=jF.object({ids:jF.array(jF.string()).describe("Virtual MCP ids to look up")}),Rs8=jF.object({items:jF.array(jF.object({id:jF.string(),last_used_at:jF.string().optional(),last_used_by:jF.string().optional()}))}),Ll0=c({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:Ts8,outputSchema:Rs8,handler:async($,Z)=>{r(Z),t(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 Ns1=D(()=>{na1();ta1();oa1();ea1();Js1();Ws1();Ks1();Hs1();Fs1()});import{z as n7}from"zod";var El0;var Us1=D(()=>{I6();S0();El0=c({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:n7.object({startDate:n7.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:n7.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:n7.array(n7.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:n7.array(n7.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:n7.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:n7.object({cells:n7.array(n7.object({virtualMcpId:n7.string().nullable(),toolName:n7.string(),calls:n7.number(),errors:n7.number(),outputSize:n7.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),await JQ(),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 U5}from"zod";var jl0;var Os1=D(()=>{I6();S0();jl0=c({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:U5.object({id:U5.string().describe("Log ID to fetch")}),outputSchema:U5.object({log:U5.object({id:U5.string().optional(),organizationId:U5.string(),connectionId:U5.string(),toolName:U5.string(),input:U5.record(U5.string(),U5.unknown()),output:U5.record(U5.string(),U5.unknown()),isError:U5.boolean(),errorMessage:U5.string().nullish(),durationMs:U5.number(),timestamp:U5.string(),userId:U5.string().nullish(),requestId:U5.string(),userAgent:U5.string().nullish(),virtualMcpId:U5.string().nullish(),properties:U5.record(U5.string(),U5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await JQ();let X=t(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 K8}from"zod";var qs8,zl0;var Bs1=D(()=>{I6();S0();qs8=K8.object({id:K8.string().optional().describe("Unique log identifier"),organizationId:K8.string().describe("Organization ID"),connectionId:K8.string().describe("Connection ID"),toolName:K8.string().describe("Name of the tool that was called"),isError:K8.boolean().describe("Whether the call resulted in an error"),errorMessage:K8.string().nullish().describe("Error message if applicable"),durationMs:K8.number().describe("Call duration in milliseconds"),timestamp:K8.string().describe("ISO 8601 timestamp of the call"),userId:K8.string().nullish().describe("User who triggered the call"),requestId:K8.string().describe("Unique request identifier"),userAgent:K8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:K8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:K8.record(K8.string(),K8.string()).nullish().describe("Custom key-value metadata attached to the log")}),zl0=c({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:K8.object({connectionId:K8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:K8.array(K8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:K8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:K8.string().optional().describe("Filter by tool name"),isError:K8.boolean().optional().describe("Filter by error status"),startDate:K8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:K8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:K8.number().default(20).describe("Maximum number of results"),offset:K8.number().default(0).describe("Offset for pagination"),properties:K8.record(K8.string(),K8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:K8.array(K8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:K8.record(K8.string(),K8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:K8.record(K8.string(),K8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:K8.object({logs:K8.array(qs8).describe("Array of monitoring logs"),total:K8.number().describe("Total number of logs matching filters"),offset:K8.number().describe("Current offset for pagination"),limit:K8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await Z.access.check(),await JQ();let X=t(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 J$}from"zod";var Pl0;var Ds1=D(()=>{I6();S0();Pl0=c({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:J$.object({startDate:J$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:J$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:J$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:J$.array(J$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:J$.array(J$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:J$.array(J$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:J$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:J$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:J$.array(J$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:J$.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:J$.object({totalCalls:J$.number().describe("Total number of tool calls"),errorRate:J$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:J$.number().describe("Average call duration in milliseconds"),errorRatePercent:J$.string().optional().describe("Error rate as a percentage string"),totalErrors:J$.number().optional().describe("Total number of errors"),p50DurationMs:J$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:J$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:J$.array(J$.object({connectionId:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avgDurationMs:J$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:J$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:J$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:J$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:J$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:J$.array(J$.object({toolName:J$.string(),connectionId:J$.string().nullable(),calls:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:J$.array(J$.object({timestamp:J$.string(),toolName:J$.string(),calls:J$.number(),errors:J$.number(),avg:J$.number(),p95:J$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:J$.array(J$.object({timestamp:J$.string(),calls:J$.number(),errors:J$.number(),errorRate:J$.number(),avg:J$.number(),p50:J$.number(),p95:J$.number(),inputTokens:J$.number().optional(),outputTokens:J$.number().optional(),totalTokens:J$.number().optional(),costUsd:J$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let X=t(Z);if(await Z.access.check(),await JQ(),$.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 iX}from"zod";var Al0;var ws1=D(()=>{I6();S0();Al0=c({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:iX.object({threadIds:iX.array(iX.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:iX.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:iX.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:iX.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:iX.object({items:iX.array(iX.object({threadId:iX.string(),calls:iX.number(),inputTokens:iX.number(),outputTokens:iX.number(),totalTokens:iX.number(),costUsd:iX.number()}))}),handler:async($,Z)=>{let X=t(Z);return await Z.access.check(),await JQ(),{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 Ls1=D(()=>{Us1();Os1();Bs1();Ds1();ws1()});function g90($){return typeof $==="string"&&ks8.has($.trim().toLowerCase())}var ks8;var Tl0=D(()=>{ks8=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 bY}from"zod";var Rl0;var Es1=D(()=>{S0();Tl0();Rl0=c({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:bY.object({slug:bY.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!g90($),"Slug is reserved by Studio"),name:bY.string().min(1).max(255),description:bY.string().optional()}),outputSchema:bY.object({id:bY.string(),name:bY.string(),slug:bY.string(),logo:bY.string().nullable().optional(),metadata:bY.any().optional(),createdAt:bY.string().datetime().describe("ISO 8601 timestamp"),members:bY.array(bY.any()).optional()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Y1(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 FK}from"zod";var Il0;var js1=D(()=>{S0();Il0=c({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:FK.object({}),outputSchema:FK.object({organizations:FK.array(FK.object({id:FK.string(),name:FK.string(),slug:FK.string(),logo:FK.string().nullable().optional(),metadata:FK.any().optional(),createdAt:FK.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),!Y1(Z))throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list()).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt}))}}})});import{z as iG}from"zod";var ql0;var zs1=D(()=>{S0();ql0=c({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)=>{r(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 P3}from"zod";var Ml0;var Ps1=D(()=>{S0();Ml0=c({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:P3.object({id:P3.string(),name:P3.string().min(1).max(255).optional(),description:P3.string().optional()}),outputSchema:P3.object({id:P3.string(),name:P3.string(),slug:P3.string(),logo:P3.string().nullable().optional(),metadata:P3.any().optional(),createdAt:P3.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(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 ei}from"zod";var kl0;var As1=D(()=>{S0();kl0=c({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ei.object({id:ei.string()}),outputSchema:ei.object({success:ei.boolean(),id:ei.string()}),handler:async($,Z)=>{return r(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 zF}from"zod";var Vl0;var Ts1=D(()=>{S0();uX();Vl0=c({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:zF.object({}),outputSchema:zF.object({organizationId:zF.string(),sidebar_items:zF.array(Fi).nullable().optional(),enabled_plugins:zF.array(zF.string()).nullable().optional(),registry_config:Ni.nullable().optional(),simple_mode:Ui.nullable().optional(),default_home_agents:Bi.nullable().optional(),flags:wi.nullable().optional(),main_agent_id:zF.string().nullable().optional(),sprint_config:Di.nullable().optional(),createdAt:zF.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:zF.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(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 VQ}from"zod";var Sl0;var Rs1=D(()=>{S0();uX();Sl0=c({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:VQ.object({organizationId:VQ.string(),sidebar_items:VQ.array(Fi).optional(),enabled_plugins:VQ.array(VQ.string()).optional(),registry_config:Ni.optional(),simple_mode:Ui.optional(),default_home_agents:Bi.optional(),flags:wi.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:VQ.string().nullable().optional().describe("Virtual MCP id the org lands on instead of the Super Agent. Pass null to clear."),sprint_config:Di.optional().describe("Task board sprint cadence. Replaced whole (not merged), so pass all three fields.")}),outputSchema:VQ.object({organizationId:VQ.string(),sidebar_items:VQ.array(Fi).nullable().optional(),enabled_plugins:VQ.array(VQ.string()).nullable().optional(),registry_config:Ni.nullable().optional(),simple_mode:Ui.nullable().optional(),default_home_agents:Bi.nullable().optional(),flags:wi.nullable().optional(),main_agent_id:VQ.string().nullable().optional(),sprint_config:Di.nullable().optional(),createdAt:VQ.string().datetime().describe("ISO 8601 timestamp"),updatedAt:VQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),t(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,sprint_config:$.sprint_config});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 A3}from"zod";var Is1,Cl0,_l0;var qs1=D(()=>{S0();uX();Is1=AO.extend({organizationId:A3.string(),archivedAt:A3.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:A3.string().describe("ISO 8601 timestamp"),updatedAt:A3.string().describe("ISO 8601 timestamp")}),Cl0=c({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:A3.object({includeArchived:A3.boolean().optional().describe("Include archived brands in the list")}),outputSchema:A3.object({items:A3.array(Is1)}),handler:async($,Z)=>{r(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}))}}}),_l0=c({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:A3.object({id:A3.string().describe("Brand context ID")}),outputSchema:Is1.extend({organizationId:A3.string()}),handler:async($,Z)=>{r(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 rL}from"zod";var Ms1,vl0,fl0,bl0;var ks1=D(()=>{S0();uX();Ms1=AO.extend({organizationId:rL.string(),createdAt:rL.string().describe("ISO 8601 timestamp"),updatedAt:rL.string().describe("ISO 8601 timestamp")}),vl0=c({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:AO.omit({id:!0}),outputSchema:Ms1,handler:async($,Z)=>{r(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}}}),fl0=c({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:AO.partial().required({id:!0}),outputSchema:Ms1,handler:async($,Z)=>{r(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}}}),bl0=c({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:rL.object({id:rL.string().describe("Brand context ID")}),outputSchema:rL.object({success:rL.boolean()}),handler:async($,Z)=>{r(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 h90($,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=Cs8(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((U)=>U.trim()).filter(Boolean)?.slice().sort((U,O)=>U.length-O.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 Cs8($,Z){let X=$.images??{},Q=$.colors??{},Y={};for(let[F,N]of Object.entries(Q))if(typeof N==="string"&&N&&Vs8.has(F))Y[F]=N;let G={},W=($.typography??{}).fontFamilies??{};for(let[F,N]of Object.entries(W))if(typeof N==="string"&&N){let U=Ss8[F.toLowerCase()];if(U&&!G[U])G[U]=N}let K=$.fonts;if(Array.isArray(K))for(let F of K){let N=F.family;if(typeof N==="string"&&N&&!G.body)G.body=N}let H={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[F]!==void 0)H[F]=$[F];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 Vs8,Ss8;var xl0=D(()=>{Vs8=new Set(["primary","secondary","accent","background","foreground"]),Ss8={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as u90}from"zod";var _s8,yl0;var Vs1=D(()=>{S0();xl0();uX();_s8=AO.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:u90.boolean()}),yl0=c({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:u90.object({domain:u90.string().describe("Website domain to extract brand from"),brandId:u90.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:_s8,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)=>{r(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 h90($.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 Ss1($){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 gl0,hl0;var Cs1=D(()=>{uc0();S0();gl0=c({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:L90,outputSchema:ui,handler:async($,Z)=>{r(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 Ss1(Q)}}),hl0=c({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:E90,outputSchema:j90,handler:async($,Z)=>{r(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(Ss1)}}})});import{resolveTxt as vs8}from"dns/promises";function ul0($){return`${fs8}.${$.toLowerCase()}`}function _s1(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function vs1($,Z,X=vs8){if(!Z)return!1;try{return(await X(ul0($))).some((Y)=>Y.join("").trim()===Z)}catch{return!1}}var fs8="_deco-verify";var fs1=()=>{};import{z as M5}from"zod";function uO($){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?ul0($.domain):null,recordValue:Z?$.verificationToken:null}}function xs8($){let Z=$.toLowerCase().trim();if(!bs8.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(T3.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var bs8,cl0,c90,ll0,dl0,ml0,il0,pl0;var bs1=D(()=>{xY();fs1();S0();bs8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,cl0=M5.enum(["off","auto","request"]),c90=M5.object({id:M5.string(),domain:M5.string(),joinMode:cl0,verificationStatus:M5.enum(["pending","verified"]),verificationMethod:M5.enum(["email","dns"]).nullable(),verifiedAt:M5.string().nullable(),recordName:M5.string().nullable(),recordValue:M5.string().nullable()});ll0=c({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:M5.object({}),outputSchema:M5.object({domains:M5.array(c90)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(X.id)).map(uO)}}}),dl0=c({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:M5.object({domain:M5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:cl0.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:c90,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=xs8($.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 uO(H)}return uO(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:_s1()});return uO(K)}}),ml0=c({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:M5.object({id:M5.string(),joinMode:cl0}),outputSchema:c90,handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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 uO(Y)}}),il0=c({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:M5.object({id:M5.string()}),outputSchema:M5.object({verified:M5.boolean(),domain:c90}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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:uO(Q)};if(!Q.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await vs1(Q.domain,Q.verificationToken))return{verified:!1,domain:uO(Q)};let G=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:uO(G)}}}),pl0=c({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:M5.object({id:M5.string()}),outputSchema:M5.object({success:M5.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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 cO($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as j9}from"zod";var ys8,nl0,tl0,ol0;var xs1=D(()=>{S0();C4();ys8=j9.object({id:j9.string(),userId:j9.string(),status:j9.enum(["pending","approved","denied"]),createdAt:j9.string(),user:j9.object({id:j9.string(),name:j9.string(),email:j9.string(),image:j9.string().nullable()}).nullable()}),nl0=c({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:j9.object({}),outputSchema:j9.object({requests:j9.array(ys8)}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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}))}}}),tl0=c({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:j9.object({requestId:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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=Y1(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(!cO(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}}}),ol0=c({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:j9.object({requestId:j9.string()}),outputSchema:j9.object({success:j9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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=Y1(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 SQ}from"zod";var rl0;var ys1=D(()=>{C4();S0();bG();rl0=c({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:SQ.object({organizationId:SQ.string().optional(),userId:SQ.string(),role:SQ.array(SQ.string())}),outputSchema:SQ.object({id:SQ.string(),organizationId:SQ.string(),userId:SQ.string(),role:SQ.union([SQ.string(),SQ.array(SQ.string())]),createdAt:SQ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(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","=",Y1(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!p60(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=Y1(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 gx}from"zod";var al0;var gs1=D(()=>{C4();S0();al0=c({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:gx.object({organizationId:gx.string().optional(),memberIdOrEmail:gx.string()}),outputSchema:gx.object({success:gx.boolean(),memberIdOrEmail:gx.string()}),handler:async($,Z)=>{r(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=Y1(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 t7}from"zod";var sl0;var hs1=D(()=>{S0();sl0=c({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:t7.object({limit:t7.number().int().min(1).max(1000).optional(),offset:t7.number().int().min(0).optional()}),outputSchema:t7.object({members:t7.array(t7.object({id:t7.string(),organizationId:t7.string(),userId:t7.string(),role:t7.string(),createdAt:t7.string().datetime().describe("ISO 8601 timestamp"),user:t7.object({id:t7.string(),name:t7.string(),email:t7.string(),image:t7.string().optional()}).optional()}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");return{members:((await Z.boundAuth.organization.listMembers({organizationId:X,limit:$.limit,offset:$.offset}))?.members??[]).map((G)=>({...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt}))}}})});import{z as fZ}from"zod";var el0;var us1=D(()=>{C4();S0();bG();el0=c({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:fZ.object({organizationId:fZ.string().optional(),memberId:fZ.string(),role:fZ.array(fZ.string())}),outputSchema:fZ.object({id:fZ.string(),organizationId:fZ.string(),userId:fZ.string(),role:fZ.union([fZ.string(),fZ.array(fZ.string())]),createdAt:fZ.string().datetime().describe("ISO 8601 timestamp"),user:fZ.object({email:fZ.string(),name:fZ.string(),image:fZ.string().optional()})}),handler:async($,Z)=>{r(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","=",Y1(Z)??"").where("organizationId","=",X).executeTakeFirst();if(!p60(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=Y1(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 cs1(){if($p&&Date.now()-$p.fetchedAt<600000)return $p.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 $p={rate:X,fetchedAt:Date.now()},X}catch{return $p?.rate??5.5}}function ls1($,Z,X){if(Z==="brl")return Math.round($/X);return $}var $p=null;function $d0($,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)$d0(J,`${G}[${W}]`,X);else X.append(`${G}[${W}]`,String(J))});else if(typeof Y==="object")$d0(Y,G,X);else X.append(G,String(Y))}return X}async function Zp($,Z){let X=b0().stripeSecretKey;if(!X)throw new yY(503,"billing is not configured");let Q=Z?.params?$d0(Z.params).toString():void 0,Y=await fetch(`${gs8}${$}`,{method:Z?.method??(Q?"POST":"GET"),headers:{Authorization:`Bearer ${X}`,...Q&&{"Content-Type":"application/x-www-form-urlencoded"}},body:Q,signal:AbortSignal.timeout(hs8)}),G=await Y.json().catch(()=>({}));if(!Y.ok){let J=G.error?.message??`HTTP ${Y.status}`;throw new yY(Y.status,J)}return G}function ds1($){return{billing_address_collection:"required",tax_id_collection:{enabled:!0},...$&&{customer_update:{address:"auto",name:"auto"}}}}async function ms1($){let Z=b0().stripeOrgPriceId;if(!Z)throw new yY(503,"billing is not configured");let X=await Zp("/checkout/sessions",{params:{mode:"subscription",...ds1(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 yY(500,"checkout session lacks url");return{url:X.url}}function us8($,Z){return Math.round($*(1+Z/100))}async function is1($){let Z=us8($.amountCents,$.feePercent),X=ls1($.amountCents,$.currency,await cs1()),Q=b0().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 Zp("/checkout/sessions",{params:{mode:"payment",...$.customerId&&{customer:$.customerId},...ds1($.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 yY(500,"checkout session lacks url");return{url:J.url}}async function l90($){let Z=await Zp("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new yY(500,"portal session lacks url");return{url:Z.url}}async function d90($){return Zp(`/subscriptions/${encodeURIComponent($)}`)}async function ps1($){await Zp(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}var gs8="https://api.stripe.com/v1",yY,hs8=15000;var aL=D(()=>{q$();yY=class yY extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});import{z as Zd0}from"zod";var Xd0;var ns1=D(()=>{aL();f9();S0();C4();Xd0=c({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:Zd0.object({}),outputSchema:Zd0.object({url:Zd0.string()}),handler:async($,Z)=>{r(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=`${kZ()}/${encodeURIComponent(Q)}/members`,{url:J}=await ms1({organizationId:X,successUrl:`${G}?checkout=success`,cancelUrl:`${G}?checkout=canceled`});return CY({event:"subscription_checkout_started",organizationId:X,...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:J}}})});import{z as Qd0}from"zod";var Yd0;var ts1=D(()=>{aL();f9();S0();Yd0=c({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:Qd0.object({}),outputSchema:Qd0.object({url:Qd0.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(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 l90({customerId:Q.stripeCustomerId,returnUrl:`${kZ()}/${encodeURIComponent(X.slug)}/members`})}catch(Y){if(Y instanceof yY)throw Error(Y.message);throw Y}}})});function m90($){return Gd0[$%Gd0.length]??cs8}function CQ($){return $.createdBy==="system"}function PF($){return i90.filter((Z)=>S50($,ls8[Z]))}function ux($,Z){return $?.startsWith(`${hx[Z]}:`)??!1}function AF($){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 Jd0($,Z){let X=AF($),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 lO($,Z,X){if(Z.length===0)return!1;let Q=Jd0($,X);return Z.every((Y)=>Q.get(Y)==="approved")}function rs1($,Z){return lO($,Z)&&!lO($,Z,{verifiedOnly:!0})}function as1($){let Z=null;for(let X of $){if(X.action!=="review_approved"&&X.action!=="review_changes_requested")continue;let Q=new Date(X.occurredAt).getTime();if(Z&&Q<Z.at)continue;let Y=X.data?.notes;Z={at:Q,notes:X.action==="review_changes_requested"&&typeof Y==="string"?Y:null}}return Z?.notes??null}function ds8($){let Z=0;for(let X of $){if(X.action!=="assignee_changed")continue;if(X.data?.to!==A8)continue;Z=Math.max(Z,new Date(X.occurredAt).getTime())}return Z}function ss1($,Z=Wd0){let X=ds8($),Q=new Set,Y=0;for(let G of[...$].sort((J,W)=>J.occurredAt.localeCompare(W.occurredAt))){let J=new Date(G.occurredAt).getTime();if(G.action==="status_changed"){if(G.data?.to==="in_review")Y=J;continue}if(G.action==="review_changes_requested"&&J>=X)Q.add(Y)}return Q.size+1>=Z}var A8="super-agent",Gd0,cs8,Xp='Your checkout is SHALLOW (`git clone --depth 1`), so it has no merge base and `git diff main...HEAD` (three dots) fails with "fatal: main...HEAD: no merge base". To see a branch diff, either use the two-dot form against the fetched remote ref (`git fetch origin <base> && git diff origin/<base> HEAD`), or deepen first with `git fetch --deepen=100`. Same for `git log main..HEAD` and anything else that needs shared history.',os1,i90,hx,ls8,Wd0=5,es1="task-board.item.updated",$e1="task-board.item.deleted";var X9=D(()=>{uX();Gd0=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],cs8=Gd0[0];os1="Read the diff with `gh pr diff <number>`. It comes from the API, so it needs no fetch, no merge base, and is unaffected by the shallow checkout. "+"Read it ONCE \u2014 `gh pr diff <number> --name-only` first if you need to size "+"it, then pull the hunks you need per FILE. Do NOT re-run the diff sliced by directory: each slice re-reads bytes you already have into every remaining turn's context, and it is the largest avoidable cost in a review.",i90=["qa","code_review"],hx={qa:"QA Agent",code_review:"Code Reviewer"},ls8={qa:"qa_agent_enabled",code_review:"code_reviewer_enabled"}});function Kd0($){return $==="trial"?"trial":"subscription"}function Qp($,Z,X,Q={}){CY({event:Z,organizationId:X.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:X.id,...Q}})}function Hd0($){return $?.status==="active"||$?.status==="past_due"}function p90($,Z){if(Hd0($))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 Yp(){let $=b0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function dO(){return{...Yp(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function cx($,Z,X=Yp()){if(!X.enforced||!CQ(Z))return;let Q=await $.storage.organizationBilling.taskClaim(Z.id);if(Q&&Q.runCount>=X.maxRunsPerTask)throw Qp($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new o7("runs_exhausted");if(Q&&Q.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),G=p90(Y,X);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,G.periodKey)>=G.limit)throw Qp($,"task_quota_blocked",Z,{phase:"precheck",reason:G.exhaustedReason,billing_mode:Kd0(G.periodKey),limit:G.limit}),new o7(G.exhaustedReason)}async function Ze1($,Z,X=Yp()){if(!X.enforced||!CQ(Z))return"skipped";let Q=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=p90(Q,X),G=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,X.maxRunsPerTask);if(G==="exhausted")throw Qp($,"task_quota_blocked",Z,{phase:"claim",reason:Y.exhaustedReason,billing_mode:Kd0(Y.periodKey),limit:Y.limit}),new o7(Y.exhaustedReason);if(G==="runs_exhausted")throw Qp($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new o7("runs_exhausted");if(G==="claimed")Qp($,"task_quota_claimed",Z,{billing_mode:Kd0(Y.periodKey),period_key:Y.periodKey,limit:Y.limit});return G}async function Xe1($,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 Qe1($,Z){let X=await $.storage.organizationBilling.taskClaim(Z);return!!X&&X.state!=="released"}async function Ye1($,Z,X){if(await $.releaseTaskClaim(Z,X).catch((Y)=>{return console.error("[task-quota] refund failed (stays charged)",Y),!1}))CY({event:"task_quota_refunded",organizationId:Z,properties:{task_id:X}})}var ms8="[SUBSCRIPTION_REQUIRED]",is8,o7;var pG=D(()=>{X9();C4();q$();is8={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"};o7=class o7 extends Error{reason;constructor($){super(`${ms8} ${is8[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as TF}from"zod";var Fd0;var Ge1=D(()=>{S0();pG();Fd0=c({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:TF.object({}),outputSchema:TF.object({enforced:TF.boolean(),billingStatus:TF.string(),subscribed:TF.boolean(),hasBillingAccount:TF.boolean(),used:TF.number(),limit:TF.number(),currentPeriodEnd:TF.string().datetime().nullable()}),handler:async($,Z)=>{r(Z),await Z.access.check();let X=t(Z),Q=Yp(),Y=await Z.storage.organizationBilling.getBilling(X.id),G=p90(Y,Q),J=await Z.storage.organizationBilling.countTaskClaims(X.id,G.periodKey);return{enforced:Q.enforced,billingStatus:Y?.status??"none",subscribed:Hd0(Y),hasBillingAccount:!!Y?.stripeCustomerId,used:J,limit:G.limit,currentPeriodEnd:Y?.currentPeriodEnd?.toISOString()??null}}})});var Je1=D(()=>{Es1();js1();zs1();Ps1();As1();Ts1();Rs1();qs1();ks1();Vs1();Cs1();bs1();xs1();ys1();gs1();hs1();us1();ns1();ts1();Ge1()});function NK($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function n90($){if($===null||typeof $==="string"||typeof $==="number"||typeof $==="boolean")return!0;if(Array.isArray($))return $.every(n90);if(typeof $==="object")return Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||n90(X)));return!1}function Nd0($){return Array.isArray($)&&$.every(n90)}function Gp($){return $!=null&&typeof $==="object"&&Object.entries($).every(([Z,X])=>typeof Z==="string"&&(X===void 0||n90(X)))}var be1="vercel.ai.error",ns8,We1,Ke1,J1,xe1="AI_APICallError",ye1,ts8,He1,Fe1,X4,ge1="AI_EmptyResponseBodyError",he1,os8,Ne1,Ue1,t90,ue1="AI_InvalidArgumentError",ce1,rs8,Oe1,Be1,mO,le1="AI_InvalidPromptError",de1,as8,De1,we1,nG,me1="AI_InvalidResponseDataError",ie1,ss8,Le1,Ee1,lx,pe1="AI_JSONParseError",ne1,es8,je1,ze1,RF,te1="AI_LoadAPIKeyError",oe1,$e8,Pe1,Ae1,sL,re1="AI_LoadSettingError",ae1,Ze8,Te1,Re1,se1,ee1="AI_NoContentGeneratedError",$0$,Xe8,Ie1,qe1,Z0$,X0$="AI_NoSuchModelError",Q0$,Qe8,Me1,ke1,u5,Y0$="AI_TooManyEmbeddingValuesForCallError",G0$,Ye8,Ve1,Se1,dx,J0$="AI_TypeValidationError",W0$,Ge8,Ce1,_e1,O5,K0$="AI_UnsupportedFunctionalityError",H0$,Je8,ve1,fe1,v4;var a1=D(()=>{ns8=Symbol.for(be1),J1=class $ extends(Ke1=Error,We1=ns8,Ke1){constructor({name:Z,message:X,cause:Q}){super(X);this[We1]=!0,this.name=Z,this.cause=Q}static isInstance(Z){return $.hasMarker(Z,be1)}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}},ye1=`vercel.ai.error.${xe1}`,ts8=Symbol.for(ye1),X4=class extends(Fe1=J1,He1=ts8,Fe1){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:xe1,message:$,cause:J});this[He1]=!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 J1.hasMarker($,ye1)}},he1=`vercel.ai.error.${ge1}`,os8=Symbol.for(he1),t90=class extends(Ue1=J1,Ne1=os8,Ue1){constructor({message:$="Empty response body"}={}){super({name:ge1,message:$});this[Ne1]=!0}static isInstance($){return J1.hasMarker($,he1)}};ce1=`vercel.ai.error.${ue1}`,rs8=Symbol.for(ce1),mO=class extends(Be1=J1,Oe1=rs8,Be1){constructor({message:$,cause:Z,argument:X}){super({name:ue1,message:$,cause:Z});this[Oe1]=!0,this.argument=X}static isInstance($){return J1.hasMarker($,ce1)}},de1=`vercel.ai.error.${le1}`,as8=Symbol.for(de1),nG=class extends(we1=J1,De1=as8,we1){constructor({prompt:$,message:Z,cause:X}){super({name:le1,message:`Invalid prompt: ${Z}`,cause:X});this[De1]=!0,this.prompt=$}static isInstance($){return J1.hasMarker($,de1)}},ie1=`vercel.ai.error.${me1}`,ss8=Symbol.for(ie1),lx=class extends(Ee1=J1,Le1=ss8,Ee1){constructor({data:$,message:Z=`Invalid response data: ${JSON.stringify($)}.`}){super({name:me1,message:Z});this[Le1]=!0,this.data=$}static isInstance($){return J1.hasMarker($,ie1)}},ne1=`vercel.ai.error.${pe1}`,es8=Symbol.for(ne1),RF=class extends(ze1=J1,je1=es8,ze1){constructor({text:$,cause:Z}){super({name:pe1,message:`JSON parsing failed: Text: ${$}.
892
892
  Error message: ${NK(Z)}`,cause:Z});this[je1]=!0,this.text=$}static isInstance($){return J1.hasMarker($,ne1)}},oe1=`vercel.ai.error.${te1}`,$e8=Symbol.for(oe1),sL=class extends(Ae1=J1,Pe1=$e8,Ae1){constructor({message:$}){super({name:te1,message:$});this[Pe1]=!0}static isInstance($){return J1.hasMarker($,oe1)}},ae1=`vercel.ai.error.${re1}`,Ze8=Symbol.for(ae1),se1=class extends(Re1=J1,Te1=Ze8,Re1){constructor({message:$}){super({name:re1,message:$});this[Te1]=!0}static isInstance($){return J1.hasMarker($,ae1)}},$0$=`vercel.ai.error.${ee1}`,Xe8=Symbol.for($0$),Z0$=class extends(qe1=J1,Ie1=Xe8,qe1){constructor({message:$="No content generated."}={}){super({name:ee1,message:$});this[Ie1]=!0}static isInstance($){return J1.hasMarker($,$0$)}},Q0$=`vercel.ai.error.${X0$}`,Qe8=Symbol.for(Q0$),u5=class extends(ke1=J1,Me1=Qe8,ke1){constructor({errorName:$=X0$,modelId:Z,modelType:X,message:Q=`No such ${X}: ${Z}`}){super({name:$,message:Q});this[Me1]=!0,this.modelId=Z,this.modelType=X}static isInstance($){return J1.hasMarker($,Q0$)}},G0$=`vercel.ai.error.${Y0$}`,Ye8=Symbol.for(G0$),dx=class extends(Se1=J1,Ve1=Ye8,Se1){constructor($){super({name:Y0$,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[Ve1]=!0,this.provider=$.provider,this.modelId=$.modelId,this.maxEmbeddingsPerCall=$.maxEmbeddingsPerCall,this.values=$.values}static isInstance($){return J1.hasMarker($,G0$)}},W0$=`vercel.ai.error.${J0$}`,Ge8=Symbol.for(W0$),O5=class $ extends(_e1=J1,Ce1=Ge8,_e1){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:J0$,message:`${Y}: Value: ${JSON.stringify(Z)}.
893
893
  Error message: ${NK(X)}`,cause:X});this[Ce1]=!0,this.value=Z,this.context=Q}static isInstance(Z){return J1.hasMarker(Z,W0$)}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})}},H0$=`vercel.ai.error.${K0$}`,Je8=Symbol.for(H0$),v4=class extends(fe1=J1,ve1=Je8,fe1){constructor({functionality:$,message:Z=`'${$}' functionality not supported.`}){super({name:K0$,message:Z});this[ve1]=!0,this.functionality=$}static isInstance($){return J1.hasMarker($,H0$)}}});import*as s90 from"zod/v4";import{ZodFirstPartyTypeKind as U4}from"zod/v3";import{ZodFirstPartyTypeKind as Re8}from"zod/v3";import{ZodFirstPartyTypeKind as o90}from"zod/v3";function o$(...$){return $.reduce((Z,X)=>({...Z,...X!=null?X:{}}),{})}function r90({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 vQ($,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(F0$());return}let G=setTimeout(()=>{J(),Q()},$),J=()=>{clearTimeout(G),X==null||X.removeEventListener("abort",W)},W=()=>{J(),Y(F0$())};X==null||X.addEventListener("abort",W)})}function F0$(){return new DOMException("Delay was aborted","AbortError")}function mx($){return Object.fromEntries([...$.headers])}function z9($){let Z=$.replace(/-/g,"+").replace(/_/g,"/"),X=Ke8(Z);return Uint8Array.from(X,(Q)=>Q.codePointAt(0))}function bQ($){let Z="";for(let X=0;X<$.length;X++)Z+=String.fromCodePoint($[X]);return We8(Z)}function WZ($){return $ instanceof Uint8Array?bQ($):$}function w0$($,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 Jp($){var Z;try{await((Z=$.body)==null?void 0:Z.cancel())}catch(X){}}function Fe8($=globalThis){return $.window!=null}function Ne8($){let Z;try{Z=new URL($)}catch(Q){throw new JZ({url:$,message:`Invalid URL: ${$}`})}if(Z.protocol==="data:")return;if(Z.protocol!=="http:"&&Z.protocol!=="https:")throw new JZ({url:$,message:`URL scheme must be http, https, or data, got ${Z.protocol}`});let X=Z.hostname.toLowerCase().replace(/\.+$/,"");if(!X)throw new JZ({url:$,message:"URL must have a hostname"});if(X==="localhost"||X.endsWith(".local")||X.endsWith(".localhost"))throw new JZ({url:$,message:`URL with hostname ${X} is not allowed`});if(X.startsWith("[")&&X.endsWith("]")){let Q=X.slice(1,-1);if(Oe8(Q))throw new JZ({url:$,message:`URL with IPv6 address ${X} is not allowed`});return}if(j0$(X)){if(z0$(X))throw new JZ({url:$,message:`URL with IP address ${X} is not allowed`});return}}function j0$($){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 z0$($){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 Ue8($){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 F=K[H];if(F.includes(".")){if(H!==K.length-1||!j0$(F))return null;let[N,U,O,B]=F.split(".").map(Number);W.push(N<<8|U,O<<8|B);continue}if(!/^[0-9a-f]{1,4}$/.test(F))return null;W.push(parseInt(F,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 Oe8($){let Z=Ue8($);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 z0$(`${Y}.${G}.${J}.${W}`)}return!1}async function wd0({url:$,headers:Z,abortSignal:X,maxRedirects:Q=Be8}){let Y={signal:X};if(Z!==void 0)Y.headers=Z;let G=$;for(let J=0;J<=Q;J++){Ne8(G);let W=await fetch(G,{...Y,redirect:"manual"});if(W.type==="opaqueredirect"){if(!Fe8())throw new JZ({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 Jp(W),G=new URL(K,G).toString();continue}return W}throw new JZ({url:$,message:`Too many redirects (max ${Q})`})}async function Ld0({response:$,url:Z,maxBytes:X=a90}){let Q=$.headers.get("content-length");if(Q!=null){let F=parseInt(Q,10);if(!isNaN(F)&&F>X)throw await Jp($),new JZ({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes (Content-Length: ${F}).`})}let Y=$.body;if(Y==null)return new Uint8Array(0);let G=Y.getReader(),J=[],W=0;try{while(!0){let{done:F,value:N}=await G.read();if(F)break;if(W+=N.length,W>X)throw new JZ({url:Z,message:`Download of ${Z} exceeded maximum size of ${X} bytes.`});J.push(N)}}finally{try{await G.cancel()}finally{G.releaseLock()}}let K=new Uint8Array(W),H=0;for(let F of J)K.set(F,H),H+=F.length;return K}async function Ed0($,Z){var X,Q;try{let Y=await wd0({url:$,abortSignal:Z==null?void 0:Z.abortSignal});if(!Y.ok)throw await Jp(Y),new JZ({url:$,statusCode:Y.status,statusText:Y.statusText});let G=await Ld0({response:Y,url:$,maxBytes:(X=Z==null?void 0:Z.maxBytes)!=null?X:a90}),J=(Q=Y.headers.get("content-type"))!=null?Q:void 0;return new Blob([G],J?{type:J}:void 0)}catch(Y){if(JZ.isInstance(Y))throw Y;throw new JZ({url:$,cause:Y})}}function ix($){if($==null)return"unknown error";if(typeof $==="string")return $;if($ instanceof Error)return $.message;return JSON.stringify($)}function _Q($){return($ instanceof Error||$ instanceof DOMException)&&($.name==="AbortError"||$.name==="ResponseAborted"||$.name==="TimeoutError")}function Le8($){if(!($ instanceof Error))return!1;let Z=$.code;if(typeof Z==="string"&&we8.includes(Z))return!0;return!1}function P0$({error:$,url:Z,requestBodyValues:X}){if(_Q($))return $;if($ instanceof TypeError&&De8.includes($.message.toLowerCase())){let Q=$.cause;if(Q!=null)return new X4({message:`Cannot connect to API: ${Q.message}`,cause:Q,url:Z,requestBodyValues:X,isRetryable:!0})}if(Le8($))return new X4({message:`Cannot connect to API: ${$.message}`,cause:$,url:Z,requestBodyValues:X,isRetryable:!0});return $}function iO($=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 pO($){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 t4($,...Z){let X=new Headers(pO($)),Q=X.get("user-agent")||"";return X.set("user-agent",[Q,...Z].filter(Boolean).join(" ")),Object.fromEntries(X.entries())}function $E($){return $!=null}function T0$($,Z){try{return new URL($).origin===new URL(Z).origin}catch(X){return!1}}function R0$({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 px({apiKey:$,environmentVariableName:Z,apiKeyParameterName:X="apiKey",description:Q}){if(typeof $==="string")return $;if($!=null)throw new sL({message:`${Q} API key must be a string.`});if(typeof process>"u")throw new sL({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 sL({message:`${Q} API key is missing. Pass it using the '${X}' parameter or the ${Z} environment variable.`});if(typeof $!=="string")throw new sL({message:`${Q} API key must be a string. The value of the ${Z} environment variable is not a string.`});return $}function UK({settingValue:$,environmentVariableName:Z}){if(typeof $==="string")return $;if($!=null||typeof process>"u")return;if($=process.env[Z],$==null||typeof $!=="string")return;return $}function I0$($){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 O0$($){let Z=JSON.parse($);if(Z===null||typeof Z!=="object")return Z;if(je8.test($)===!1&&ze8.test($)===!1)return Z;return Pe8(Z)}function Pe8($){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 jd0($){let{stackTraceLimit:Z}=Error;try{Error.stackTraceLimit=0}catch(X){return O0$($)}try{return O0$($)}finally{Error.stackTraceLimit=Z}}function zd0($){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]=eL(X[Q])}if($.items!=null)$.items=Array.isArray($.items)?$.items.map(eL):eL($.items);if($.anyOf!=null)$.anyOf=$.anyOf.map(eL);if($.allOf!=null)$.allOf=$.allOf.map(eL);if($.oneOf!=null)$.oneOf=$.oneOf.map(eL);let{definitions:Z}=$;if(Z!=null)for(let X of Object.keys(Z))Z[X]=eL(Z[X]);return $}function eL($){if(typeof $==="boolean")return $;return zd0($)}function gY(){return{}}function Ie8($,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)!==Re8.ZodAny)G.items=j6($.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 qe8($){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 Me8(){return{type:"boolean"}}function q0$($,Z){return j6($.type._def,Z)}function M0$($,Z,X){let Q=X!=null?X:Z.dateStrategy;if(Array.isArray(Q))return{anyOf:Q.map((Y,G)=>M0$($,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 Ve8($)}}function Se8($,Z){return{...j6($.innerType._def,Z),default:$.defaultValue()}}function Ce8($,Z){return Z.effectStrategy==="input"?j6($.schema._def,Z):gY()}function _e8($){return{type:"string",enum:Array.from($.values)}}function fe8($,Z){let X=[j6($.left._def,{...Z,currentPath:[...Z.currentPath,"allOf","0"]}),j6($.right._def,{...Z,currentPath:[...Z.currentPath,"allOf","1"]})].filter((Y)=>!!Y),Q=[];return X.forEach((Y)=>{if(ve8(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 be8($){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 k0$($,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":I3(X,"email",Q.message,Z);break;case"format:idn-email":I3(X,"idn-email",Q.message,Z);break;case"pattern:zod":pX(X,R3.email,Q.message,Z);break}break;case"url":I3(X,"uri",Q.message,Z);break;case"uuid":I3(X,"uuid",Q.message,Z);break;case"regex":pX(X,Q.regex,Q.message,Z);break;case"cuid":pX(X,R3.cuid,Q.message,Z);break;case"cuid2":pX(X,R3.cuid2,Q.message,Z);break;case"startsWith":pX(X,RegExp(`^${Od0(Q.value,Z)}`),Q.message,Z);break;case"endsWith":pX(X,RegExp(`${Od0(Q.value,Z)}$`),Q.message,Z);break;case"datetime":I3(X,"date-time",Q.message,Z);break;case"date":I3(X,"date",Q.message,Z);break;case"time":I3(X,"time",Q.message,Z);break;case"duration":I3(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":{pX(X,RegExp(Od0(Q.value,Z)),Q.message,Z);break}case"ip":{if(Q.version!=="v6")I3(X,"ipv4",Q.message,Z);if(Q.version!=="v4")I3(X,"ipv6",Q.message,Z);break}case"base64url":pX(X,R3.base64url,Q.message,Z);break;case"jwt":pX(X,R3.jwt,Q.message,Z);break;case"cidr":{if(Q.version!=="v6")pX(X,R3.ipv4Cidr,Q.message,Z);if(Q.version!=="v4")pX(X,R3.ipv6Cidr,Q.message,Z);break}case"emoji":pX(X,R3.emoji(),Q.message,Z);break;case"ulid":{pX(X,R3.ulid,Q.message,Z);break}case"base64":{switch(Z.base64Strategy){case"format:binary":{I3(X,"binary",Q.message,Z);break}case"contentEncoding:base64":{X.contentEncoding="base64";break}case"pattern:zod":{pX(X,R3.base64,Q.message,Z);break}}break}case"nanoid":pX(X,R3.nanoid,Q.message,Z);case"toLowerCase":case"toUpperCase":case"trim":break;default:}return X}function Od0($,Z){return Z.patternStrategy==="escape"?ye8($):$}function ye8($){let Z="";for(let X=0;X<$.length;X++){if(!xe8.has($[X]))Z+="\\";Z+=$[X]}return Z}function I3($,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 pX($,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:D0$(Z,Q),...X&&Q.errorMessages&&{errorMessage:{pattern:X}}})}else $.pattern=D0$(Z,Q)}function D0$($,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
894
894
  ]))`;continue}else if(Y[H]==="$"){G+=`($|(?=[\r
@@ -2861,7 +2861,7 @@ Respond with the structured verdict and a short reason.`,qh$;var kh$=D(()=>{O4()
2861
2861
  ${G.join(`
2862
2862
  `)}`:Y}function rW6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
2863
2863
  `)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Uu$=200,cW6=12,dW6,iW6=300,EZ1=3;var jZ1=D(()=>{l_();IA0();dW6={aheadBy:0,behindBy:0,files:[]}});function sW6($){if(!$||$.includes(".."))return!1;return aW6.test($)}function Bu$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!sW6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Du$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var aW6;var wu$=D(()=>{aW6=/^[\w./@-]+$/});function zZ1($){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 ha($,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 Lu$($,Z,X,Q){if(!Q.connectionId)throw new m_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new m_(Y9);await XB({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:Y9;throw new m_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await QB(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=K6$(F instanceof Error?F.message:String(F));throw N?new m_(U):F}),K=Nu($),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 F=await jB(H,eW6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var eW6=10485760,m_;var PZ1=D(()=>{oG();OA0();Hn();Sm0();Xy();m_=class m_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function ZK6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!$K6.test(Z))throw Error(`Invalid branch name: ${$}`)}function i_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(QK6)])}async function GK6($,Z){let X=$.var.studioContext,Q=b3(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=oS(J?.metadata?.runtime);if(W)return W;let K=wB0(Z.virtualMcpMetadata),H=K==="cms"?await s91(X,{claimName:Z.claimName,userId:Z.sandboxUserId,branch:Z.branch,virtualMcpMetadata:Z.virtualMcpMetadata}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",N=!!J&&(H==="gone"||H==="alive"&&K==="cms");if(N&&J)Fn(X,J.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:H,resolved:F,stamped:N});return F}async function JK6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{let{provider:X}=await gZ($.var.studioContext,{userId:Z.userId,branch:Z.branch,virtualMcpMetadata:Z.virtualMcpMetadata});return X}catch{return null}}function p_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Lu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=ha(Z,X);if(!Y)throw new u4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return DA0(Q,G.id,Y)}function AZ1($,Z){if(Z instanceof BA0)return $.json({error:Z.message},429,{...z5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,z5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,z5)}async function zu$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Pu$($){try{let Z=await Lu($),X=await qA0(Z,$.get("vmClaim").branch);return $.json(X,200,z5)}catch(Z){return AZ1($,Z)}}function ua($,Z){let Q=(VA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return VA0.set($,Y),Y.finally(()=>{if(VA0.get($)===Y)VA0.delete($)}),Q}async function pZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,z5);let Q=X?.runner??p_($);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 F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.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",...z5}})}}let B=await O.text(),w=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?WK6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(w,{status:O.status,headers:{"content-type":L,...z5}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((w,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function WK6($){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 SA0($,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 KK6($){return Au$.includes($)}var $K6,Eu$=524288,XK6=65536,QK6=1e4,ju$=2000,YK6,VA0,z5,Au$,Tu$=()=>{let $=new F1;$.use("/:virtualMcpId/:branch/*",YK6),$.post("/:virtualMcpId/:branch/write",(X)=>pZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>pZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>pZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>pZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>pZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>pZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:i_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>pZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:i_(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 pZ(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 pZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>pZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>pZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!KK6(Q))return X.json({error:`step must be one of: ${Au$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await s91(X.var.studioContext,{claimName:Y.claimName,userId:Y.userId,branch:Y.branch,virtualMcpMetadata:Y.virtualMcpMetadata})==="gone"?null:await JK6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,z5);if(Q==="start"){let J=t(X.var.studioContext),W=zy(Y.virtualMcpMetadata);try{await UB0({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${H}`},502)}}return pZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return kN(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 zh$(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").runtime==="cms")return Pu$(X);return Z(X)});let Z=(X)=>pZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(ju$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Pu$(X);return pZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(ju$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await Lu(X),J=await MA0(G,Q.branch,Y.base);return X.json(J,200,z5)}catch(Y){return AZ1(X,Y)}return pZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,z5);let Q=p_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return ua(Y,async()=>{try{await e91(W,Q,Y);let K=ha(G,J);if(K)await Lu$(W,Q,Y,K)}catch(K){if(K instanceof m_)return X.json({error:K.message},403,z5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,z5)}return pZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ua(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,z5);try{let J=await Lu(X);return await Ou$(J,Q.branch,G),X.json({ok:!0},200,z5)}catch(J){let W=J instanceof u4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,z5)}});return ua(Q.claimName,()=>pZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ua(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Lu(X),H=W.base??await K.getDefaultBranch();return await kA0(K,Q.branch,H),X.json({ok:!0},200,z5)}catch(W){return AZ1(X,W)}});let Y=p_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return ua(G,async()=>{try{await e91(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,z5)}return pZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Eu$,onError:(X)=>X.json({error:"Payload too large"},413,z5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=p_(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(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=XZ1(F)&&U?[F,N]:Y?await Promise.all([SA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),SA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Lu(X);return Promise.all([qA0(L,Q.branch),MA0(L,Q.branch)])})(),w=await Ih$(K,O,B);return X.json(w,200,z5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,z5);return X.json({error:F},502,z5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Eu$,onError:(X)=>X.json({error:"Payload too large"},413,z5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=p_(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(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=XZ1(F)&&U?[F,N]:Y?await Promise.all([SA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),SA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Lu(X);return Promise.all([qA0(L,Q.branch),MA0(L,Q.branch)])})(),w=await Mh$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(w,200,z5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,z5);return X.json({error:F},502,z5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=p_(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=zZ1(`${W}${G}`);return zu$(X,K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:XK6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=p_(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=Bu$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Du$(G,W.resolveType),H=zZ1(K);return zu$(X,H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Ru$=D(()=>{D8();jN();Fu();a91();kF();Lh$();x3();Py();Eh$();xF();jh$();Ph$();$n0();Wn();GZ1();kh$();FZ1();l_();jZ1();wu$();PZ1();$K6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;YK6=UA0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=Y1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(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{ZK6(J)}catch(w){let L=w instanceof Error?w.message:String(w);return $.json({error:L},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=Rp({orgId:Y.id,virtualMcpId:G,branch:J}),H=await op0(X,J),F=rp0(H,Q),N=wh$({userId:F,projectRef:K}),U=W.metadata??null,O=await GK6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:F,virtualMcpMetadata:U,branchThread:H});if(O==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:O}),Z();let B;try{B=(await gZ(X,{userId:F,branch:J,virtualMcpMetadata:U})).provider}catch{B=null}if(!B)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:B,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((w)=>w.connection_id)??[],runtime:O}),Z()});VA0=new Map;z5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Au$=["clone","install","start"]});function Iu$($,Z,X){let Q=TZ1.get($);if(!Q)Q={pending:null,running:!1},TZ1.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)FK6($,Q);return G}async function FK6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await NK6(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)TZ1.delete($)}}async function NK6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await wu(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=wZ1(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,w]of $.set){let L=LZ1(K,B),E=`${JSON.stringify(w,null,2)}
2864
- `,j=await Z.createBlob(E);await Hu$(Z.owner,Z.repo,j,E);let z=L[0]??`${RA0(Q)}/${NZ1(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.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}),F.delete(P)}for(let B of $.del)for(let w of LZ1(K,B))H.push({path:w,mode:"100644",type:"blob",sha:null}),F.delete(w);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:w,skipped:L}=ba(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(w);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:UK6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof u4&&B.status===422)||Y>=HK6-1)throw B;await D$(oZ(2000,200,Y,2,0.5))}}}function UK6($){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 Pm0(Q,$.deps.coAuthor)}var HK6=3,TZ1;var qu$=D(()=>{YB0();LA0();w4();l_();IA0();TZ1=new Map});import{createHmac as Mu$,randomBytes as OK6,timingSafeEqual as BK6}from"crypto";function ku$(){if(CA0)return CA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return CA0=$?Buffer.from($):OK6(32),CA0}function RZ1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+DK6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Mu$("sha256",ku$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Vu$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Mu$("sha256",ku$()).update(Q).digest("base64url"));if(Y.length!==G.length||!BK6(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 DK6=21600000,CA0=null;var Su$=D(()=>{q$()});import{z as Eu}from"zod";function LK6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&wK6.test($)}function _u$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function _A0($){let Z=$.get("decofileScope");return DA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function vA0($,Z){if(Z instanceof u4){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 vu$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Cu$),$.use("/:virtualMcpId/:branch/*",Cu$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await _A0(Z),Y=await Fu$(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=RZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(_u$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return vA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=EK6.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{wA0(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 _A0(Z),W=await Iu$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Nu(Q)},G),K=RZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:_u$(Z)})}catch(J){return vA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await _A0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof u4&&W.status===409))throw W;await kA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let K=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:K.number,url:K.html_url})}throw J}}catch(Q){return vA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await _A0(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 u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return vA0(Z,Q)}}),$}var wK6,EK6,Cu$;var fu$=D(()=>{LA0();D8();a91();OA0();PZ1();FZ1();qu$();Su$();jZ1();l_();IA0();wK6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;EK6=Eu.object({set:Eu.record(Eu.string(),Eu.unknown()).optional(),delete:Eu.array(Eu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Cu$=UA0(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(!LK6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Vu$(O,{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(!DB0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=ha(K,F);if(!N)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:N,userId:J}),Z()})});var bu$=($)=>{let Z=new F1;if(Z.use("*",v_),Z.route("/",VP0()),Z.route("/",ab$()),Z.route("/",Qh$()),Z.route("/",$h$()),Z.route("/",HA0()),Z.route("/tools",Fh$()),Z.route("/",Wh$()),Z.route("/",vg$({kvStorage:$.kvStorage})),Z.route("/",Cg$()),Z.route("/fs",ng$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Tu$()),Z.route("/decofile",vu$()),Z.route("/",ag$()),Z.route("/deco-sites",CP0()),Z.route("/sso",TP0()),Z.route("/",FA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",db$()),$.mountDevAssets)Z.route("/dev-assets",_P0({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("/",Tv$()),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",og$()),Z.route("/mcp",bw0()),Z.route("/mcp/self",KA0()),Z.route("/mcp",gw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var xu$=D(()=>{D8();j51();mb$();T51();vP0();Wa();L51();_g$();fg$();tg$();Bt();H51();hw0();m91();rg$();sg$();Zh$();Yh$();Kh$();p91();Nh$();n91();xw0();Ru$();fu$()});function jK6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var zK6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},yu$=()=>{let $=new F1;return $.use("*",zK6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await iZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:jK6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var gu$=D(()=>{D8();q$();Vz0()});import{z as M1}from"zod";function HH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function SK6($){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 CK6($,Z,X){try{return JSON.parse($)}catch{throw new cu$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function _K6($){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:CK6(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 vK6($){let Z=$.map((X)=>{let Q=X.function.parameters?uY(X.function.parameters):uY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function fK6($){if(!$)return;return{openai:{response_format:$}}}function bK6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function hu$($,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 uu$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var PK6=256,AK6,TK6,RK6,IK6,qK6,MK6,kK6,VK6,cu$,lu$,du$;var mu$=D(()=>{O4();D8();Fu();WN();AK6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),TK6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),RK6=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(TK6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),IK6=M1.object({type:M1.literal("text")}),qK6=M1.object({type:M1.literal("json_object")}),MK6=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()})}),kK6=M1.union([IK6,qK6,MK6]),VK6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(RK6),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(AK6).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:kK6.optional(),user:M1.string().optional()});cu$=class cu$ extends Error{constructor($){super($);this.name="MessageConversionError"}};lu$=new F1;lu$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(HH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(HH("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(HH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=VK6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(HH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=SK6(G.model);if(!J)return $.json(HH("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)=>gw(j.providerId));if(!E)return $.json(HH("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(HH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=_K6(G.messages),U=G.tools?vK6(G.tools):void 0,O=fK6(G.response_format),B=bK6(),w=Math.floor(Date.now()/1000);if(G.stream)return kN($,async(L)=>{let E=hu$(F,N,U,G,O,$.req.raw.signal);try{let j=$B(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=PK6)await I()}else if(q.type==="tool-call"){await I();let M=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:uu$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),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=hu$(F,N,U,G,O,$.req.raw.signal),E=await sO(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:B,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:uu$(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(HH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(HH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(HH(Y.message,"server_error"),500)}});du$=lu$});function xK6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function iu$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=Y1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!mG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||H7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(ra1(N)!==G)continue;if(!xK6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var pu$=D(()=>{D8();hO()});var tu$;var nu$=D(()=>{tu$={name:"decocms",version:"4.260.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 hK6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??gK6}}var ou$,gK6="https://ph.studio.decocms.com",ru$;var au$=D(()=>{D8();ah0();IC();f9();q$();Y51();nu$();ou$=new F1;ou$.get("/",($)=>{let Z={version:tu$.version,theme:Am1(),...kL().logo&&{logo:kL().logo},...fK()&&{internalUrl:eS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Wb$(),posthog:hK6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!fK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ru$=ou$});function ju($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function IZ1($){return(ju($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function eu$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ju($))}&sz=${Z}`}function su$($,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 $c$($){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()?su$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):su$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var n_,uK6,cK6,lK6,dK6,Zc$;var Xc$=D(()=>{n_=l0.enum(["good","bad","neutral"]),uK6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:n_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.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 $})),cK6=l0.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},l0.array(uK6)),lK6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},dK6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:n_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:n_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:n_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:n_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(cK6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:n_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:n_.optional()})).min(1)})]),Zc$=l0.object({...lK6,template:dK6})});function fA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Zc$.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 qZ1=D(()=>{Xc$()});import{join as Qc$}from"path";async function iK6($){try{let Z=await fetch(`${QK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(mK6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=fA0(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()||IZ1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function KG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function pK6($,Z){let X=ju($),Q=Z?.brand?.trim()||IZ1(X),Y=eu$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=$c$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${KG(W)}</title>`,`<meta name="description" content="${KG(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="${KG(W)}" />`,`<meta property="og:description" content="${KG(K)}" />`,`<meta property="og:url" content="${KG(J)}" />`,`<meta property="og:image" content="${KG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${KG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${KG(W)}" />`,`<meta name="twitter:description" content="${KG(K)}" />`,`<meta name="twitter:image" content="${KG(H)}" />`,`<meta name="twitter:image:alt" content="${KG(F)}" />`,`<link rel="canonical" href="${KG(J)}" />`,`<link rel="icon" href="${KG(Y)}" sizes="any" />`].join(`
2864
+ `,j=await Z.createBlob(E);await Hu$(Z.owner,Z.repo,j,E);let z=L[0]??`${RA0(Q)}/${NZ1(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.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}),F.delete(P)}for(let B of $.del)for(let w of LZ1(K,B))H.push({path:w,mode:"100644",type:"blob",sha:null}),F.delete(w);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:w,skipped:L}=ba(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(w);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:UK6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof u4&&B.status===422)||Y>=HK6-1)throw B;await D$(oZ(2000,200,Y,2,0.5))}}}function UK6($){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 Pm0(Q,$.deps.coAuthor)}var HK6=3,TZ1;var qu$=D(()=>{YB0();LA0();w4();l_();IA0();TZ1=new Map});import{createHmac as Mu$,randomBytes as OK6,timingSafeEqual as BK6}from"crypto";function ku$(){if(CA0)return CA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return CA0=$?Buffer.from($):OK6(32),CA0}function RZ1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+DK6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Mu$("sha256",ku$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Vu$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Mu$("sha256",ku$()).update(Q).digest("base64url"));if(Y.length!==G.length||!BK6(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 DK6=21600000,CA0=null;var Su$=D(()=>{q$()});import{z as Eu}from"zod";function LK6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&wK6.test($)}function _u$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function _A0($){let Z=$.get("decofileScope");return DA0($.var.studioContext,Z.organizationId,Z.githubRepo)}function vA0($,Z){if(Z instanceof u4){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 vu$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Cu$),$.use("/:virtualMcpId/:branch/*",Cu$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await _A0(Z),Y=await Fu$(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=RZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(_u$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return vA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=EK6.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{wA0(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 _A0(Z),W=await Iu$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Nu(Q)},G),K=RZ1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:_u$(Z)})}catch(J){return vA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await _A0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof u4&&W.status===409))throw W;await kA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&J.status===405){let K=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:K.number,url:K.html_url})}throw J}}catch(Q){return vA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await _A0(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 u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return vA0(Z,Q)}}),$}var wK6,EK6,Cu$;var fu$=D(()=>{LA0();D8();a91();OA0();PZ1();FZ1();qu$();Su$();jZ1();l_();IA0();wK6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;EK6=Eu.object({set:Eu.record(Eu.string(),Eu.unknown()).optional(),delete:Eu.array(Eu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Cu$=UA0(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(!LK6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Vu$(O,{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(!DB0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=ha(K,F);if(!N)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:N,userId:J}),Z()})});var bu$=($)=>{let Z=new F1;if(Z.use("*",v_),Z.route("/",VP0()),Z.route("/",ab$()),Z.route("/",Qh$()),Z.route("/",$h$()),Z.route("/",HA0()),Z.route("/tools",Fh$()),Z.route("/",Wh$()),Z.route("/",vg$({kvStorage:$.kvStorage})),Z.route("/",Cg$()),Z.route("/fs",ng$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Tu$()),Z.route("/decofile",vu$()),Z.route("/",ag$()),Z.route("/deco-sites",CP0()),Z.route("/sso",TP0()),Z.route("/",FA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",db$()),$.mountDevAssets)Z.route("/dev-assets",_P0({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("/",Tv$()),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",og$()),Z.route("/mcp",bw0()),Z.route("/mcp/self",KA0()),Z.route("/mcp",gw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var xu$=D(()=>{D8();j51();mb$();T51();vP0();Wa();L51();_g$();fg$();tg$();Bt();H51();hw0();m91();rg$();sg$();Zh$();Yh$();Kh$();p91();Nh$();n91();xw0();Ru$();fu$()});function jK6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var zK6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},yu$=()=>{let $=new F1;return $.use("*",zK6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await iZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:jK6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var gu$=D(()=>{D8();q$();Vz0()});import{z as M1}from"zod";function HH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function SK6($){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 CK6($,Z,X){try{return JSON.parse($)}catch{throw new cu$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function _K6($){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:CK6(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 vK6($){let Z=$.map((X)=>{let Q=X.function.parameters?uY(X.function.parameters):uY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function fK6($){if(!$)return;return{openai:{response_format:$}}}function bK6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function hu$($,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 uu$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var PK6=256,AK6,TK6,RK6,IK6,qK6,MK6,kK6,VK6,cu$,lu$,du$;var mu$=D(()=>{O4();D8();Fu();WN();AK6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),TK6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),RK6=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(TK6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),IK6=M1.object({type:M1.literal("text")}),qK6=M1.object({type:M1.literal("json_object")}),MK6=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()})}),kK6=M1.union([IK6,qK6,MK6]),VK6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(RK6),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(AK6).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:kK6.optional(),user:M1.string().optional()});cu$=class cu$ extends Error{constructor($){super($);this.name="MessageConversionError"}};lu$=new F1;lu$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(HH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(HH("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(HH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=VK6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(HH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=SK6(G.model);if(!J)return $.json(HH("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)=>gw(j.providerId));if(!E)return $.json(HH("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(HH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=_K6(G.messages),U=G.tools?vK6(G.tools):void 0,O=fK6(G.response_format),B=bK6(),w=Math.floor(Date.now()/1000);if(G.stream)return kN($,async(L)=>{let E=hu$(F,N,U,G,O,$.req.raw.signal);try{let j=$B(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=PK6)await I()}else if(q.type==="tool-call"){await I();let M=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:w,model:G.model,choices:[{index:0,delta:{},finish_reason:uu$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),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=hu$(F,N,U,G,O,$.req.raw.signal),E=await sO(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:B,object:"chat.completion",created:w,model:G.model,choices:[{index:0,message:j,finish_reason:uu$(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(HH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(HH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(HH(Y.message,"server_error"),500)}});du$=lu$});function xK6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function iu$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=Y1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!mG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||H7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(ra1(N)!==G)continue;if(!xK6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var pu$=D(()=>{D8();hO()});var tu$;var nu$=D(()=>{tu$={name:"decocms",version:"4.260.7",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@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 hK6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??gK6}}var ou$,gK6="https://ph.studio.decocms.com",ru$;var au$=D(()=>{D8();ah0();IC();f9();q$();Y51();nu$();ou$=new F1;ou$.get("/",($)=>{let Z={version:tu$.version,theme:Am1(),...kL().logo&&{logo:kL().logo},...fK()&&{internalUrl:eS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Wb$(),posthog:hK6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!fK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ru$=ou$});function ju($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function IZ1($){return(ju($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function eu$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ju($))}&sz=${Z}`}function su$($,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 $c$($){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()?su$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):su$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var n_,uK6,cK6,lK6,dK6,Zc$;var Xc$=D(()=>{n_=l0.enum(["good","bad","neutral"]),uK6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:n_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.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 $})),cK6=l0.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},l0.array(uK6)),lK6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},dK6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:n_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:n_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:n_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:n_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(cK6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:n_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:n_.optional()})).min(1)})]),Zc$=l0.object({...lK6,template:dK6})});function fA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Zc$.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 qZ1=D(()=>{Xc$()});import{join as Qc$}from"path";async function iK6($){try{let Z=await fetch(`${QK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(mK6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=fA0(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()||IZ1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function KG($){return $.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;")}function pK6($,Z){let X=ju($),Q=Z?.brand?.trim()||IZ1(X),Y=eu$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=$c$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${KG(W)}</title>`,`<meta name="description" content="${KG(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="${KG(W)}" />`,`<meta property="og:description" content="${KG(K)}" />`,`<meta property="og:url" content="${KG(J)}" />`,`<meta property="og:image" content="${KG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${KG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${KG(W)}" />`,`<meta name="twitter:description" content="${KG(K)}" />`,`<meta name="twitter:image" content="${KG(H)}" />`,`<meta name="twitter:image:alt" content="${KG(F)}" />`,`<link rel="canonical" href="${KG(J)}" />`,`<link rel="icon" href="${KG(Y)}" sizes="any" />`].join(`
2865
2865
  `)}function nK6($,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}
2866
2866
  </head>`)}function Yc$($){let Z=new F1;return Z.get("/:domain/og.png",async(X)=>{let Q=ju(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Qc$($,"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(`${QK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(tK6)}),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=$?Qc$($,"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 iK6(ju(Q)),K=pK6(Q,W);return X.html(nK6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var mK6=2500,tK6=1e4;var Gc$=D(()=>{D8();qZ1();lL();q$()});function ca($,Z){return fetch(`${QK({})}${$}`,Z)}async function oK6($,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 ca(`/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}=fA0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var rK6,SN,Jc$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Wc$;var Kc$=D(()=>{D8();xY();lL();qZ1();rK6=new Set(["complete","errored","terminated","unknown"]),SN=new F1;SN.use("*",async($,Z)=>{let X=await F8.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});SN.use("/link-token/*",Jc$);SN.use("/suggest",Jc$);SN.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 oK6(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)}});SN.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 ca("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${cL({})}`},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)}});SN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await ca(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${cL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:rK6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});SN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await ca(`/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)}});SN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await ca(`/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:[]})}});Wc$=SN});import{createHmac as aK6,timingSafeEqual as sK6}from"crypto";function Fc$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>eK6)return!1;let W=aK6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&sK6(K,F)})}function Nc$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=SJ(Z),Q=SJ(SJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:FH(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 Uc$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function FH($){return typeof $==="string"?$:void 0}function SJ($){return typeof $==="object"&&$!==null?$:void 0}function bA0($){return typeof $==="number"?new Date($*1000):null}function VZ1($){return FH($)??FH(SJ($)?.id)}function $H6($){return VZ1($.subscription)??FH(SJ(SJ($.parent)?.subscription_details)?.subscription)}function ZH6($){let Z=bA0($.current_period_end);if(Z)return Z;let X=SJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=SJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function MZ1($,Z){let X=bA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function kZ1($,Z){let X=bA0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function XH6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=FH(SJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(FH(SJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(FH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=FH(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(SJ(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:SJ(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(FH(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=VZ1(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(MZ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:VZ1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:kZ1(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=FH(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&&MZ1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Uc$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:ZH6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:kZ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=$H6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(MZ1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:bA0(X.period_end),lastStripeEventAt:kZ1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function QH6($,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:Uc$(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 Hc$($,Z){let X=QH6($,Z);if(!X)return;CY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Sp1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Oc$($){let Z=new eW(c8().db),X=await XH6(Z,$);if(!(X.handled&&X.topUp))Hc$($,X);if(X.handled&&X.topUp)await iw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Hc$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await ps1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof yY&&(Q.status===400||Q.status===404)))throw Q}return X}var eK6=300;var Bc$=D(()=>{gG();C4();d60();aL();ue0()});var YH6=1048576,SZ1;var Dc$=D(()=>{D8();jN();q$();Bc$();SZ1=new F1;SZ1.post("/webhook",k9({maxSize:YH6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Fc$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Nc$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Oc$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as GH6}from"crypto";function WH6($,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 GH6(Buffer.from(Y),Buffer.from(Q))}var JH6=5242880,CZ1;var wc$=D(()=>{D8();jN();Yn();CZ1=new F1;CZ1.post("/webhook",k9({maxSize:JH6,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(!WH6(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 pp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Lc$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Ec$,KH6,HH6,jc$;var zc$=D(()=>{D8();w3();iy();vx();Ec$=new F1,KH6=["range","if-none-match","if-modified-since"],HH6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Ec$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ih($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await on(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&lG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Lc$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of KH6){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 $$(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 $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of HH6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Lc$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});jc$=Ec$});var la=_((t_)=>{var FH6=t_&&t_.__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]}),NH6=t_&&t_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))FH6(Z,$,X)};Object.defineProperty(t_,"__esModule",{value:!0});NH6(wY(),t_)});var Tc$=_((Pc$)=>{Object.defineProperty(Pc$,"__esModule",{value:!0});Pc$.version=void 0;Pc$.version="3.4.0"});var qc$=_((NH)=>{var UH6=NH&&NH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(NH,"__esModule",{value:!0});NH.NodeTransport=NH.VERSION=void 0;NH.nodeResolveHost=EH6;var r6=la(),OH6=z0("net"),_Z1=z0("tls"),BH6=z0("path"),Rc$=z0("fs"),DH6=UH6(z0("dns")),wH6=Tc$();NH.VERSION=wH6.version;var LH6="nats.js";class Ic${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=LH6,this.version=NH.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,r6.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 r6.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 r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,OH6.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,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.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,r6.deferred)();try{if($=(0,BH6.resolve)($),!(0,Rc$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Rc$.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,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,_Z1.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 r6.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,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,_Z1.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 r6.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,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.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 _Z1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.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}}NH.NodeTransport=Ic$;function EH6($){let Z=(0,r6.deferred)();return DH6.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 Cc$=_((Sc$)=>{Object.defineProperty(Sc$,"__esModule",{value:!0});Sc$.connect=jH6;var Mc$=qc$(),kc$=la(),Vc$=la();function jH6($={}){if((0,Vc$.hasWsProtocol)($))return Promise.reject(Vc$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,kc$.setTransportFactory)({factory:()=>{return new Mc$.NodeTransport},dnsResolveFn:Mc$.nodeResolveHost}),kc$.NatsConnectionImpl.connect($)}});var _c$=_((CN)=>{var PH6=CN&&CN.__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]}),AH6=CN&&CN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))PH6(Z,$,X)};Object.defineProperty(CN,"__esModule",{value:!0});CN.connect=void 0;var TH6=Cc$();Object.defineProperty(CN,"connect",{enumerable:!0,get:function(){return TH6.connect}});AH6(la(),CN)});function xc$($){let Z=$?.connectFn??MH6,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 F(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:qH6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let w=oZ(IH6,RH6,B-1,2,0.5);await D$(w)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?vc$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=bc$.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 MH6($){return fc$.connect($)}var vc$,fc$,bc$,RH6=100,IH6=3000,qH6=3000;var yc$=D(()=>{w4();vc$=V(mu(),1),fc$=V(_c$(),1),bc$=V(iD(),1)});function vZ1($,Z){return`${$}.${Z}`}class fZ1{cache;constructor($){this.cache=kh({ttlMs:$?.ttlMs??kH6,maxSize:$?.maxSize??VH6})}async get($,Z){return this.cache.get(vZ1($,Z))??null}async set($,Z,X){this.cache.set(vZ1($,Z),X)}async invalidate($,Z){this.cache.delete(vZ1($,Z))}teardown(){this.cache.clear()}}var kH6=600000,VH6=5000;var gc$=()=>{};function xA0($,Z){return`${$}:${Z}`}function bZ1($){let Z=kh({ttlMs:$?.ttlMs??SH6,maxSize:$?.maxSize??CH6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(hc$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(xA0(K,H))},set(K,H,F){Z.set(xA0(K,H),F)},invalidate(K,H){Z.delete(xA0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(hc$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(xA0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var hc$="studio.ai-provider-keys.invalidate",SH6=30000,CH6=5000;var uc$=()=>{};class xZ1{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=cc$.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 cc$)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 cc$;var lc$=D(()=>{cc$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var dc$=($)=>{let Z;return()=>Z??=$()},yZ1,gZ1;var mc$=D(()=>{I6();yZ1=dc$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),gZ1=dc$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function gH6(){return{name:aF,subjects:[`${Fw0}.>`],storage:BW.StorageType.File,max_age:fH6,max_bytes:xH6,max_msgs_per_subject:yH6,discard:BW.DiscardPolicy.Old,retention:BW.RetentionPolicy.Limits,duplicate_window:bH6,num_replicas:1}}class nc${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 ic$($){let Z=pc$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function lH6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,vH6().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 dH6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class hZ1{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=gH6(),X=await v5(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await BW.jetstreamManager($);try{await Q.streams.info(aF),await Q.streams.update(aF,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(aF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:dH6});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=lH6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=tN$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=Wr0(H,{runId:Z}),U=performance.now()-F;if(yZ1().record(U),gZ1().add(1,{"org.id":Q??"unknown"}),cH6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?ic$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((w)=>setImmediate(w))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),uH6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,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=Wr0(Z,{runId:$,dedup:X});if(yZ1().record(performance.now()-Y),gZ1().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:ic$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=nN$({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"?BW.DeliverPolicy.New:BW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=yB($),W;try{W=await(await Q.consumers.get(aF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(w){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",w?.message??w),null}let F=Dw0({messages:async function*(){try{for await(let w of W)yield{subject:w.subject,data:w.data,headers:w.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Nw0()).pipeThrough(Uw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(w){for(;;){let{done:L,value:E}=await F.read();if(L){B(),w.close();return}let j=E;if(j.kind==="done"){if(G){B(),w.close();return}continue}w.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(aF,{filter:yB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var BW,pc$,_H6=($)=>{let Z;return()=>Z??=$()},vH6,fH6=86400000000000,bH6=120000000000,xH6=4294967296,yH6=500000,hH6,uH6,cH6;var tc$=D(()=>{w4();Kr0();ww0();Ow0();I6();mc$();BW=V(iD(),1),pc$=V(mu(),1),vH6=_H6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));hH6=process.env.STREAM_ENCODE_TRACE==="1",uH6=process.env.DECOPILOT_STREAM_TRACE==="1";cH6=hH6?new nc$:null});function yA0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,xW(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 oc$=D(()=>{V8()});class uZ1{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}}async function rc$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!$a(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await F6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),h$(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var ac$=D(()=>{WX();Za();L5()});function rH6($){return $ instanceof o7}function aH6($,Z){return Z-$>=tH6}class cZ1{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??mH6;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??pH6,X=this.options.itemIntervalMs??iH6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-Rt0),Jo0);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()-oH6));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 Yo0(this.taskBoard,Y,Q),await Go0(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!==A8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await n3(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),rH6(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()+nH6)).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(()=>{}),h$(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(!aH6(AF(X),Date.now()))return;await vK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===A8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await my(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await rc$(J,Q,W.map((K)=>K.merged)))return!0;if(await fU$(J,Q))return!0;if(!Y)return!1;if(!qo0(W))return!1;return await fD0(J,Q,{previewMatchesHead:Mo0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var mH6=60000,iH6=300000,pH6=50,nH6=60000,tH6=900000,oH6=120000;var sc$=D(()=>{X9();Lo0();_K();Kt();ac$();L5();pG();Wo0();HJ();mn()});import{readdir as sH6,rm as gA0}from"fs/promises";import{join as hA0}from"path";async function uA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-eH6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await o_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await ec$($,Y,Z);else if(!Y.startsWith(".")){let G=hA0($,Y),J=await o_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await ec$(G,K,Z)}if((await o_(G)).length===0)await gA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function ec$($,Z,X){let Q=0,Y=hA0($,Z),G=await o_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=hA0(Y,W),H=await o_(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=hA0(K,N);await gA0(O,{recursive:!0,force:!0}),Q++}}if((await o_(K)).length===0)await gA0(K,{recursive:!0,force:!0})}if((await o_(Y)).length===0)await gA0(Y,{recursive:!0,force:!0});return Q}async function o_($){try{return(await sH6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var eH6=30;var lZ1=()=>{};import{DBOS as dZ1,SchedulerMode as $F6}from"@dbos-inc/dbos-sdk";async function XF6(){let $=[vJ(),r_(),DH()],Z=0;for(let X of $)try{Z+=await uA0(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 QF6($,Z){await dZ1.runStep(()=>XF6(),{name:"monitoringRetention"})}function Zl$(){if($l$)return;$l$=!0;let $=dZ1.registerWorkflow(QF6,{name:"monitoringRetentionWorkflow"});dZ1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:ZF6,mode:$F6.ExactlyOncePerIntervalWhenActive})}var ZF6="23 4 * * *",$l$=!1;var Xl$=D(()=>{UY();lZ1()});function Ql$($){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 WJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await c61($.db,Z,Q.role);return Y.boundAuth=u61({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new RL(X,void 0,Y.boundAuth,Q.role,"self"),CB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Yl$=D(()=>{IL();DC()});function YF6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function JF6(){for(let $ of GF6)$()}function Gl$($){let Z=[...mZ1.logs,$];mZ1={...mZ1,logs:Z.length>500?Z.slice(-500):Z},JF6()}function iZ1(){return WF6}var mZ1,GF6,WF6=!1;var pZ1=D(()=>{mZ1=YF6(),GF6=new Set});import{EventEmitter as KF6}from"events";var nZ1;var Jl$=D(()=>{pZ1();nZ1=new KF6;nZ1.on("request",($)=>{Gl$($)})});function Wl$(){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 O=zu(U.params.name),B=U.params.arguments||{},w=Object.keys(B).map((E)=>zu(E)),L=w.length>0?w.slice(0,3).join(",")+(w.length>3?"\u2026":""):"";G=`${G5.tool}${O}${G5.dim}(${L})${G5.reset}`}else if(U.method)G=`${G5.dim}${zu(U.method)}${G5.reset}`}}catch{}}let W=zu(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${G5.mcp}${zu(F.slice(0,12))}\u2026${G5.reset}`}else if(Y==="/mcp")W=`${G5.mcp}/mcp${G5.reset}`;else if(Y==="/mcp/registry")W=`${G5.mcp}/mcp/registry${G5.reset}`;let K=FF6(Q),H=J?"\u25C0":"\u2190";if(!iZ1())console.log(`${G5.dim}${H}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=HF6(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!iZ1())console.log(`${G5.dim}${B}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""} ${U}${N}${G5.reset} ${G5.duration}${O}${G5.reset}`);nZ1.emit("request",{method:Q,path:zu(Y),status:N,duration:F,timestamp:new Date})}}}var G5,HF6=($)=>{if($>=500)return G5.serverError;if($>=400)return G5.clientError;if($>=300)return G5.redirect;return G5.ok},FF6=($)=>{return G5[$]||G5.reset},zu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Kl$=D(()=>{pZ1();Jl$();G5={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 Ul$}from"crypto";import{mkdir as NF6,readdir as UF6,rm as Hl$,stat as Ol$}from"fs/promises";import{join as oZ1,relative as OF6}from"path";import{z as A$}from"zod";function Dl$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return oZ1(BF6,Z)}function wl$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function tZ1($,Z){let X=Dl$($),Q=wl$(Z);return oZ1(X,Q)}function DF6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Ul$("sha256",Y).update(G).digest("hex")}function Nl$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=DF6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${wl$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Ll$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Ul$("md5","etag").update(Q).digest("hex")}"`}async function El$($,Z,X,Q,Y){try{let G=await UF6($,{withFileTypes:!0});for(let J of G){let W=oZ1($,J.name),H=OF6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await El$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await Ol$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Ll$(W,F.mtime,F.size)})}catch{}}}}catch{}}function jl$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:A$.object({prefix:A$.string().optional(),maxKeys:A$.number().optional().default(1000),continuationToken:A$.string().optional(),delimiter:A$.string().optional()}),outputSchema:A$.object({objects:A$.array(A$.object({key:A$.string(),size:A$.number(),lastModified:A$.string(),etag:A$.string()})),nextContinuationToken:A$.string().optional(),isTruncated:A$.boolean(),commonPrefixes:A$.array(A$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Dl$(Q);await NF6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await El$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,w=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:w,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:A$.object({key:A$.string()}),outputSchema:A$.object({contentType:A$.string().optional(),contentLength:A$.number(),lastModified:A$.string(),etag:A$.string(),metadata:A$.record(A$.string(),A$.string()).optional()}),handler:async(Y)=>{let G=Y,J=tZ1(Q,G.key),W=await Ol$(J);return{contentType:I51(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Ll$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:A$.object({key:A$.string(),expiresIn:A$.number().optional()}),outputSchema:A$.object({url:A$.string(),expiresIn:A$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Fl$;return{url:Nl$(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:A$.object({key:A$.string(),expiresIn:A$.number().optional(),contentType:A$.string().optional()}),outputSchema:A$.object({url:A$.string(),expiresIn:A$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Fl$;return{url:Nl$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:A$.object({key:A$.string()}),outputSchema:A$.object({success:A$.boolean(),key:A$.string()}),handler:async(Y)=>{let G=Y,J=tZ1(Q,G.key);try{return await Hl$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:A$.object({keys:A$.array(A$.string()).max(1000)}),outputSchema:A$.object({deleted:A$.array(A$.string()),errors:A$.array(A$.object({key:A$.string(),message:A$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=tZ1(Q,K);try{await Hl$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function rZ1($,Z,X){let Q=jl$(Z,X),Y=new dW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:F5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:A$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:A$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new ZQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),BJ(Y,G,$,"mcp:dev-assets")}async function zl$($,Z,X,Q){let G=jl$(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 BF6="./data/assets",Fl$=3600,Bl$,Pl$;var Al$=D(()=>{q$();Yg();D8();Od();_C();bX();vP0();Bl$=new F1;Bl$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return rZ1($.req.raw,Z,Q)});Pl$=Bl$});var Tl$={};G4(Tl$,{mountDevRoutes:()=>wF6});function wF6($,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 rZ1(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 zl$(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",Pl$);let X=new F1;X.use("*",UW({mountPath:"/api/dev-assets"})),X.route("/",_P0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Rl$=D(()=>{D8();E51();vP0();Al$()});import{sql as LF6}from"kysely";import{randomUUID as Il$}from"crypto";import{z as EF6}from"zod";async function zF6($){let Z=new Date().toISOString(),X=Il$(),Q=V4.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:Il$(),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 LF6`SELECT
2867
2867
  pg_notify('studio_events', ${X}),