@decocms/mesh 2.135.0 → 2.136.0

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 (216) hide show
  1. package/dist/client/assets/{AlertCircle-BqSf9XUV.js → AlertCircle-BmterM6-.js} +1 -1
  2. package/dist/client/assets/{AlignLeft-fmMf4Dhk.js → AlignLeft-D-24Asic.js} +1 -1
  3. package/dist/client/assets/{ArrowDown-C1XwJGei.js → ArrowDown-DhmtNBCn.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-v0wYt8Zz.js → ArrowLeft-BwnRcCxk.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-D96x2aXm.js → ArrowUp-B2lliNjJ.js} +1 -1
  6. package/dist/client/assets/{Check-CBQI4sX_.js → Check-Dy5Jwsdl.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-c8wiOGE1.js → CheckCircle-DCJamcsS.js} +1 -1
  8. package/dist/client/assets/{CheckDone01-BTaEYg_h.js → CheckDone01-BMlUtSk0.js} +1 -1
  9. package/dist/client/assets/{CheckVerified02-CPJrheMw.js → CheckVerified02-BEvXxeXZ.js} +1 -1
  10. package/dist/client/assets/{ChevronDown-sLr8XVsl.js → ChevronDown-B8UJn4iH.js} +1 -1
  11. package/dist/client/assets/{ChevronLeft-Bb-Z1INZ.js → ChevronLeft-LqDMtl3T.js} +1 -1
  12. package/dist/client/assets/{ChevronRight-DvHc-b9M.js → ChevronRight-UHmTzu6U.js} +1 -1
  13. package/dist/client/assets/{Clock-CHIf9oFX.js → Clock-CHKtyQRJ.js} +1 -1
  14. package/dist/client/assets/{Code01-dJCW2bE8.js → Code01-Ce_GLriH.js} +1 -1
  15. package/dist/client/assets/{Container-B6Xs6_xK.js → Container-nefPC-Vi.js} +1 -1
  16. package/dist/client/assets/{Copy01-DZUQRIVw.js → Copy01-DTrKcR-Q.js} +1 -1
  17. package/dist/client/assets/{Dataflow03-C15CIhqP.js → Dataflow03-DMAzBi98.js} +1 -1
  18. package/dist/client/assets/{DotsHorizontal-BTto-v_2.js → DotsHorizontal-BmF1jyTg.js} +1 -1
  19. package/dist/client/assets/{DotsVertical-CJ3pBFjL.js → DotsVertical-N7qtMw5m.js} +1 -1
  20. package/dist/client/assets/{Download01-BOSik_M0.js → Download01-C8dWfeAI.js} +1 -1
  21. package/dist/client/assets/{Edit01-Dm0PZjiv.js → Edit01-CMeQdBcS.js} +1 -1
  22. package/dist/client/assets/{Edit05-DhF5NlD_.js → Edit05-DZ_UN_S5.js} +1 -1
  23. package/dist/client/assets/{Eye-BR_9-9sx.js → Eye-DxLOh0i-.js} +1 -1
  24. package/dist/client/assets/{File02-DAE7GGwr.js → File02-vPAwJvd9.js} +1 -1
  25. package/dist/client/assets/{File06-DNepDitQ.js → File06-CJFI46Rj.js} +1 -1
  26. package/dist/client/assets/{FilterLines-CQm34GP3.js → FilterLines-BfBD1RVS.js} +1 -1
  27. package/dist/client/assets/{Globe01-BfbxrBLS.js → Globe01-CFu5KWUK.js} +1 -1
  28. package/dist/client/assets/{Globe02-DSMumXCe.js → Globe02-KBI1AO62.js} +1 -1
  29. package/dist/client/assets/{Grid01-DxL3VpUb.js → Grid01-CqnSySeu.js} +1 -1
  30. package/dist/client/assets/{Hash02-CFuGdZAM.js → Hash02-DJ4pr-VX.js} +1 -1
  31. package/dist/client/assets/{Home02-BVRQCIR4.js → Home02-Do5D--q6.js} +1 -1
  32. package/dist/client/assets/{Image01-CHnBumwc.js → Image01-C8E_92eh.js} +1 -1
  33. package/dist/client/assets/{Inbox01-ImXIGZnT.js → Inbox01-DFatNHSu.js} +1 -1
  34. package/dist/client/assets/{InfoCircle-C3KOURux.js → InfoCircle-BbDPfNIr.js} +1 -1
  35. package/dist/client/assets/{Key01-gRJDeefs.js → Key01-5M9GOooO.js} +1 -1
  36. package/dist/client/assets/{LayersTwo01-D_3HSgdj.js → LayersTwo01-D3z_72X4.js} +1 -1
  37. package/dist/client/assets/{LayoutLeft-D7CckYm4.js → LayoutLeft-CuouUkb7.js} +1 -1
  38. package/dist/client/assets/{Link01-dup1fxbM.js → Link01-phTHWMEc.js} +1 -1
  39. package/dist/client/assets/{LinkExternal01-DSo4qVUo.js → LinkExternal01-3GykVej2.js} +1 -1
  40. package/dist/client/assets/{List-C6WR2hvg.js → List-C81A8jh_.js} +1 -1
  41. package/dist/client/assets/{Loading01-9Lg_Mx7W.js → Loading01-BWjBCSBL.js} +1 -1
  42. package/dist/client/assets/{Lock01-D6q_Pfp1.js → Lock01-BF4OPECE.js} +1 -1
  43. package/dist/client/assets/{Play-BGC0DAwr.js → Play-CGCsuB7w.js} +1 -1
  44. package/dist/client/assets/{Plus-BnMd-Nlg.js → Plus-CK3qvOs-.js} +1 -1
  45. package/dist/client/assets/{RefreshCcw01-CzWuABhj.js → RefreshCcw01-DCU1xktc.js} +1 -1
  46. package/dist/client/assets/{Save01-CPtH6rzJ.js → Save01-sMmuMs88.js} +1 -1
  47. package/dist/client/assets/{SearchMd-Br2lRaPk.js → SearchMd-CpD1Xdqo.js} +1 -1
  48. package/dist/client/assets/{Settings01-CjytruXR.js → Settings01-Bhz_Vu7B.js} +1 -1
  49. package/dist/client/assets/{Shield01-XEBn-es0.js → Shield01-B4VkgvZ4.js} +1 -1
  50. package/dist/client/assets/{Terminal-CWZ1oaiF.js → Terminal-EynP_hYL.js} +1 -1
  51. package/dist/client/assets/{Trash01-DTIwE-5T.js → Trash01-p1zJKNMp.js} +1 -1
  52. package/dist/client/assets/{Upload01-BiL8UuQ_.js → Upload01-CuSBdknv.js} +1 -1
  53. package/dist/client/assets/{Users03-D9nwvJXd.js → Users03-C4-0uA3w.js} +1 -1
  54. package/dist/client/assets/{X-B_qRWJ2C.js → X-C0j62Xtl.js} +1 -1
  55. package/dist/client/assets/{XCircle-B4yxlakR.js → XCircle-BtpMj0Vx.js} +1 -1
  56. package/dist/client/assets/{XClose-ChV_2xLJ.js → XClose-BoXt6_S8.js} +1 -1
  57. package/dist/client/assets/{Zap-DywL0ofa.js → Zap-D7Nzarh3.js} +1 -1
  58. package/dist/client/assets/{agent-connections-preview-CR5wYkAd.js → agent-connections-preview-CHU0g32U.js} +1 -1
  59. package/dist/client/assets/agent-detail-DURsxgC5.js +2 -0
  60. package/dist/client/assets/agents-Cl7pGBMM.js +1 -0
  61. package/dist/client/assets/{alert-dialog-D90wrdGx.js → alert-dialog-D1XudKG9.js} +2 -2
  62. package/dist/client/assets/{auth-catchall-D2-i9TBI.js → auth-catchall-BgPC7rSe.js} +1 -1
  63. package/dist/client/assets/{avatar-D4ALUDCI.js → avatar-DNxsCl6r.js} +1 -1
  64. package/dist/client/assets/{badge-DuS2OMla.js → badge-D8RzvYJ4.js} +1 -1
  65. package/dist/client/assets/{binder-BCMoHYJm.js → binder-Blih3Yob.js} +1 -1
  66. package/dist/client/assets/{breadcrumb-g5L8PoZQ.js → breadcrumb-N-YM-0qC.js} +1 -1
  67. package/dist/client/assets/{card-Cj-GkUHD.js → card-DpIJfsV8.js} +1 -1
  68. package/dist/client/assets/{chart-Bmp1PhEI.js → chart-ClRGWH0O.js} +1 -1
  69. package/dist/client/assets/{checkbox-CKtularS.js → checkbox-CUOTkCKW.js} +1 -1
  70. package/dist/client/assets/{circle-alert-CrasxNEk.js → circle-alert-D8ryfTOx.js} +1 -1
  71. package/dist/client/assets/{collapsible-Dz2sA23f.js → collapsible-CpgZSwBN.js} +1 -1
  72. package/dist/client/assets/{collection-detail-B0kCQWSA.js → collection-detail-B3RGhDtS.js} +2 -2
  73. package/dist/client/assets/collection-display-button-DrtKZPsB.js +1 -0
  74. package/dist/client/assets/{collection-search-Dslk4ok0.js → collection-search-Cq4rjP0Z.js} +1 -1
  75. package/dist/client/assets/collection-tab-CDCwjyV8.js +1 -0
  76. package/dist/client/assets/collection-table-wrapper-CyGYWMWl.js +1 -0
  77. package/dist/client/assets/{collection-tabs-eMWLSkiq.js → collection-tabs-r7GKXx3H.js} +1 -1
  78. package/dist/client/assets/{command-RQQRkz7x.js → command-DazlgUs5.js} +1 -1
  79. package/dist/client/assets/{connect-DEIJWaRW.js → connect-CvX0kEdi.js} +1 -1
  80. package/dist/client/assets/{connection-card-M2mu32Xr.js → connection-card-BEmi4FHw.js} +1 -1
  81. package/dist/client/assets/connection-detail-CJDHlEwZ.js +1 -0
  82. package/dist/client/assets/connections-DZjwaIPT.js +1 -0
  83. package/dist/client/assets/{constants-CvFlNMMf.js → constants-BLSLjUCX.js} +1 -1
  84. package/dist/client/assets/constants-D_mJYCD9.js +1 -0
  85. package/dist/client/assets/{create-organization-dialog-Cy9g6fXy.js → create-organization-dialog-_OZHP19d.js} +1 -1
  86. package/dist/client/assets/{create-project-dialog-BokLXtCa.js → create-project-dialog-CBSHMrrx.js} +1 -1
  87. package/dist/client/assets/{danger-BRBu-XbG.js → danger-CPETFW7T.js} +1 -1
  88. package/dist/client/assets/{danger-zone-CW-YKRlc.js → danger-zone-LxdCiZtW.js} +1 -1
  89. package/dist/client/assets/{decopilot-events-Bt8Q6ljY.js → decopilot-events-BEPzMc6y.js} +1 -1
  90. package/dist/client/assets/{dependencies-EgZz5h4q.js → dependencies-Cz-sRh-1.js} +1 -1
  91. package/dist/client/assets/{dialog-DXvsnaeO.js → dialog-BEh9NHdw.js} +1 -1
  92. package/dist/client/assets/{dropdown-menu-CgkGkmVE.js → dropdown-menu-BBy53YtY.js} +1 -1
  93. package/dist/client/assets/{dynamic-plugin-layout-Bh-Sy3yI.js → dynamic-plugin-layout-p6ER6wNw.js} +1 -1
  94. package/dist/client/assets/{editable-task-title-B-3SGsGo.js → editable-task-title-CQx9B12m.js} +1 -1
  95. package/dist/client/assets/{empty-state-K_49Yi3c.js → empty-state-Cd-Y6dcy.js} +1 -1
  96. package/dist/client/assets/{env-vars-editor-DtCYaIFM.js → env-vars-editor-CFN3JqN6.js} +1 -1
  97. package/dist/client/assets/{extract-connection-data-DuIP9X1x.js → extract-connection-data-Bjwt_XIu.js} +1 -1
  98. package/dist/client/assets/{file-browser-D6y0-s-B.js → file-browser-B3GXvhIi.js} +2 -2
  99. package/dist/client/assets/{form-BMyUyHR8.js → form-DKOen-4i.js} +1 -1
  100. package/dist/client/assets/{general-DPne5Rst.js → general-i_n7wxur.js} +1 -1
  101. package/dist/client/assets/{grid-view-DWY5vx7E.js → grid-view-1tJniq0A.js} +1 -1
  102. package/dist/client/assets/{home-BLbBKv2q.js → home-B-4A2LlA.js} +1 -1
  103. package/dist/client/assets/{icon-picker-XNuq6Ojb.js → icon-picker-BXWmqDNl.js} +1 -1
  104. package/dist/client/assets/{index-BVNGR9tO.js → index-9MR1Aak3.js} +1 -1
  105. package/dist/client/assets/{index-BVkROdsW.js → index-Bxe5mObN.js} +1 -1
  106. package/dist/client/assets/{index-Bzupbb1x.js → index-C6W9eJZm.js} +1 -1
  107. package/dist/client/assets/{index-CpowEWO4.js → index-C79VipEf.js} +1 -1
  108. package/dist/client/assets/{index-Bk2D_7VR.js → index-CrfXnuko.js} +1 -1
  109. package/dist/client/assets/{index-YSA_3gRo.js → index-D3pPaynQ.js} +3 -3
  110. package/dist/client/assets/index-D6E08wfB.css +1 -0
  111. package/dist/client/assets/{index-BlLYz5FA.js → index-DVmCBhSl.js} +1 -1
  112. package/dist/client/assets/{index-ChgCwqm9.js → index-DYkmX0JZ.js} +1 -1
  113. package/dist/client/assets/{index-CgikKIzX.js → index-xQ2t379n.js} +3 -3
  114. package/dist/client/assets/{infiniteQueryObserver-DsXqsvOO.js → infiniteQueryObserver-bwcxH-lX.js} +1 -1
  115. package/dist/client/assets/{input-BT1GzEWi.js → input-CquIDQAg.js} +1 -1
  116. package/dist/client/assets/{integration-icon-B4kJo2_s.js → integration-icon-CyNzGslP.js} +1 -1
  117. package/dist/client/assets/{label-C45a6iTA.js → label-DgKgIZIr.js} +1 -1
  118. package/dist/client/assets/{layout-8RHk-XUu.js → layout-BaoRfV41.js} +1 -1
  119. package/dist/client/assets/{layout-i-b38NBH.js → layout-Dknw5WOk.js} +1 -1
  120. package/dist/client/assets/{localstorage-keys-DSrv9tDi.js → localstorage-keys-BVjc41qz.js} +1 -1
  121. package/dist/client/assets/{login-CVyMi6pm.js → login-CbUqOEDM.js} +1 -1
  122. package/dist/client/assets/{markdown-D5PO6M9Q.js → markdown-Ba8nOSsK.js} +1 -1
  123. package/dist/client/assets/mcp-app-renderer-DYp1_awD.js +11 -0
  124. package/dist/client/assets/{mcp-oauth-BlOxWyfu.js → mcp-oauth-BKgRq621.js} +1 -1
  125. package/dist/client/assets/{mcp-server-card-VOiv-alx.js → mcp-server-card-CpB9f-pn.js} +1 -1
  126. package/dist/client/assets/mcp-server-detail-CCUSuXBZ.js +2 -0
  127. package/dist/client/assets/members-C3L37RaV.js +3 -0
  128. package/dist/client/assets/{monaco-editor-Dr7dUeu1.js → monaco-editor-Bqq988E3.js} +1 -1
  129. package/dist/client/assets/{monitoring-ByAenRo_.js → monitoring-Cw8c9SQ5.js} +1 -1
  130. package/dist/client/assets/{monitoring-dashboard-edit-Bzo9Gn9E.js → monitoring-dashboard-edit-BMa2OOFc.js} +1 -1
  131. package/dist/client/assets/{monitoring-dashboard-view-gYXt6fDh.js → monitoring-dashboard-view-CmbMs5N1.js} +1 -1
  132. package/dist/client/assets/{oauth-callback-sQ2SwOuh.js → oauth-callback-3thxiCVs.js} +1 -1
  133. package/dist/client/assets/{page-CznSm6bI.js → page-D6s6DLQp.js} +1 -1
  134. package/dist/client/assets/{page-DbCpTdbi.js → page-DojbxRSJ.js} +1 -1
  135. package/dist/client/assets/{plugin-empty-state-C8aP3uOY.js → plugin-empty-state-CgwqeTLL.js} +1 -1
  136. package/dist/client/assets/{plugin-empty-state-COcpG8Q-.js → plugin-empty-state-n7cn669C.js} +1 -1
  137. package/dist/client/assets/{plugin-header-crfuDJWj.js → plugin-header-AGaevBZn.js} +1 -1
  138. package/dist/client/assets/{plugin-header-DWxvwZb6.js → plugin-header-BxEyDthP.js} +1 -1
  139. package/dist/client/assets/plugins-DPuuPP05.js +1 -0
  140. package/dist/client/assets/popover-BGz1EQnh.js +1 -0
  141. package/dist/client/assets/project-app-view-B5525387.js +1 -0
  142. package/dist/client/assets/{project-layout-Ns_WJXXt.js → project-layout-DDwGJ0ig.js} +1 -1
  143. package/dist/client/assets/{project-plugins-CF5_VX1i.js → project-plugins-R_POmKuz.js} +1 -1
  144. package/dist/client/assets/{projects-list-8MTtLmHN.js → projects-list-DvHzim4C.js} +1 -1
  145. package/dist/client/assets/{readme-viewer-BJA2EnoQ.js → readme-viewer-CSo2KaPk.js} +1 -1
  146. package/dist/client/assets/{registry-layout-DOBt_uIJ.js → registry-layout-BRpD6JKO.js} +1 -1
  147. package/dist/client/assets/{registry-utils-BapNTecL.js → registry-utils-Cjdxmsng.js} +1 -1
  148. package/dist/client/assets/{reports-layout-DCjyOG8T.js → reports-layout-WypzA6IP.js} +1 -1
  149. package/dist/client/assets/{reset-password-Bf0C1T_u.js → reset-password-C2yglusd.js} +1 -1
  150. package/dist/client/assets/{resizable-DasgSTKU.js → resizable-BeoLLDMu.js} +1 -1
  151. package/dist/client/assets/{save-actions-vRwzyds-.js → save-actions-OW6B8GGT.js} +1 -1
  152. package/dist/client/assets/{scroll-area-B1PFdc0L.js → scroll-area-BlV5UvCB.js} +1 -1
  153. package/dist/client/assets/{select-B8htoZV8.js → select-CDsJtNMV.js} +1 -1
  154. package/dist/client/assets/{shell-layout-DL42jtyU.js → shell-layout-DfbBuM37.js} +2 -2
  155. package/dist/client/assets/{sidebar-settings-D4yFK0ER.js → sidebar-settings-CYmJoaNT.js} +1 -1
  156. package/dist/client/assets/{skeleton-DO02PARZ.js → skeleton-Ct9swv0n.js} +1 -1
  157. package/dist/client/assets/{spinner-BpG7RgTa.js → spinner-DfUcLZCl.js} +1 -1
  158. package/dist/client/assets/{store-invite-BFsXYhOH.js → store-invite-ZCHtOCWs.js} +1 -1
  159. package/dist/client/assets/{switch-Ci3hf_qU.js → switch-a3WrSRQb.js} +1 -1
  160. package/dist/client/assets/{table-7t3Ngqct.js → table-BCfVNRpI.js} +1 -1
  161. package/dist/client/assets/{tabs-CfY-0viT.js → tabs-DN8uQx_4.js} +1 -1
  162. package/dist/client/assets/tasks-Bgtg3aZ6.js +1 -0
  163. package/dist/client/assets/{tasks-panel-JfkvqYp-.js → tasks-panel-Bcd4i-z8.js} +1 -1
  164. package/dist/client/assets/{textarea-C9UUVIil.js → textarea-BvEkv28R.js} +1 -1
  165. package/dist/client/assets/{time-range-picker-0Iclb7jG.js → time-range-picker-CTYo_Gy_.js} +1 -1
  166. package/dist/client/assets/{toggle-group-BVdBhpTO.js → toggle-group-BuwLTYBs.js} +1 -1
  167. package/dist/client/assets/tools-list-DKmevE2X.js +1 -0
  168. package/dist/client/assets/{tooltip-iSvWdfhX.js → tooltip-B6yKYOIf.js} +1 -1
  169. package/dist/client/assets/{topbar-portal-TVMhcJUX.js → topbar-portal-CUBonFlI.js} +1 -1
  170. package/dist/client/assets/{types-DA9O3-4Z.js → types-CnPYT6I7.js} +1 -1
  171. package/dist/client/assets/{use-binding-BrV6OHbU.js → use-binding-BSjPQ0Be.js} +1 -1
  172. package/dist/client/assets/{use-connection-0uAZ0JSW.js → use-connection-Dtj63U01.js} +1 -1
  173. package/dist/client/assets/{use-copy-B9seMJvp.js → use-copy-oq5GkYwB.js} +1 -1
  174. package/dist/client/assets/{use-create-virtual-mcp-DYC0dnj3.js → use-create-virtual-mcp-COKyzJBE.js} +1 -1
  175. package/dist/client/assets/{use-install-from-registry-CuIrTAAm.js → use-install-from-registry-DD_AL_1f.js} +1 -1
  176. package/dist/client/assets/{use-list-state-BywHZDup.js → use-list-state-DhRtf36X.js} +1 -1
  177. package/dist/client/assets/{use-llm-lqRff0qp.js → use-llm-5n5wwCT_.js} +1 -1
  178. package/dist/client/assets/{use-mcp-resources-CgAaDxBc.js → use-mcp-resources-B792gs6l.js} +1 -1
  179. package/dist/client/assets/{use-mcp-tools-BN8bfZn3.js → use-mcp-tools-DScmBuoc.js} +1 -1
  180. package/dist/client/assets/{use-members-BnEfwka5.js → use-members-Chfn3LoP.js} +1 -1
  181. package/dist/client/assets/{use-mobile-CePuocbs.js → use-mobile-CZlm25dt.js} +1 -1
  182. package/dist/client/assets/{use-project-BCpZSYEH.js → use-project-BUsmU3t_.js} +1 -1
  183. package/dist/client/assets/{use-settings-modal-BhxNgsgy.js → use-settings-modal-D18j_l44.js} +1 -1
  184. package/dist/client/assets/{use-view-mode-C4bMLQky.js → use-view-mode-5Lt8g0uo.js} +1 -1
  185. package/dist/client/assets/{use-virtual-mcp-XCW3W4C9.js → use-virtual-mcp-COkdNvVv.js} +1 -1
  186. package/dist/client/assets/useInfiniteQuery-fRddscS9.js +1 -0
  187. package/dist/client/assets/{useMutation-CspL2qBT.js → useMutation-tQLZk7P3.js} +1 -1
  188. package/dist/client/assets/useQuery-BLe-0FCm.js +1 -0
  189. package/dist/client/assets/useSuspenseInfiniteQuery-D0p_NlPn.js +1 -0
  190. package/dist/client/assets/{user-BHCtEUxl.js → user-CI081yAV.js} +1 -1
  191. package/dist/client/assets/workflow-Bu6-o0iD.js +1 -0
  192. package/dist/client/index.html +2 -2
  193. package/dist/server/cli.js +3 -3
  194. package/dist/server/migrate.js +3 -3
  195. package/dist/server/server.js +3 -3
  196. package/package.json +1 -1
  197. package/dist/client/assets/agent-detail-B0zz3Unf.js +0 -2
  198. package/dist/client/assets/agents-C11f5XN0.js +0 -1
  199. package/dist/client/assets/collection-tab-Bjsr3KyB.js +0 -1
  200. package/dist/client/assets/collection-table-wrapper-1X3tw2a2.js +0 -1
  201. package/dist/client/assets/connection-detail-CyhxKizj.js +0 -1
  202. package/dist/client/assets/connections-RcVdNIqa.js +0 -1
  203. package/dist/client/assets/constants-Cc2ACrvf.js +0 -1
  204. package/dist/client/assets/index-Cr3FYIgR.css +0 -1
  205. package/dist/client/assets/mcp-app-renderer-Bzzuvi2c.js +0 -11
  206. package/dist/client/assets/mcp-server-detail-C1SyJ2Ed.js +0 -2
  207. package/dist/client/assets/members-Lw-_oafM.js +0 -3
  208. package/dist/client/assets/plugins-BhX8dVGK.js +0 -1
  209. package/dist/client/assets/popover-ew-AFjK-.js +0 -1
  210. package/dist/client/assets/project-app-view-XMflyzaA.js +0 -1
  211. package/dist/client/assets/tasks-B7PtG_GW.js +0 -1
  212. package/dist/client/assets/tools-list-DNBJLnHb.js +0 -1
  213. package/dist/client/assets/useInfiniteQuery-Bp_AF-J9.js +0 -1
  214. package/dist/client/assets/useQuery-BEiGk_96.js +0 -1
  215. package/dist/client/assets/useSuspenseInfiniteQuery-Bqpp4FtC.js +0 -1
  216. package/dist/client/assets/workflow-DiR4gKq6.js +0 -1
@@ -1062,7 +1062,7 @@ data:
1062
1062
  `;if(J)G+=`id: ${J}
1063
1063
  `;return G+=`data: ${JSON.stringify(X)}
1064
1064
 
1065
- `,Y.enqueue(Q.encode(G)),!0}catch{return!1}}handleUnsupportedRequest(){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32000,message:"Method not allowed."},id:null}),{status:405,headers:{Allow:"GET, POST, DELETE","Content-Type":"application/json"}})}async handlePostRequest(Y,Q){try{let X=Y.headers.get("accept");if(!X?.includes("application/json")||!X.includes("text/event-stream"))return this.createJsonErrorResponse(406,-32000,"Not Acceptable: Client must accept both application/json and text/event-stream");let J=Y.headers.get("content-type");if(!J||!J.includes("application/json"))return this.createJsonErrorResponse(415,-32000,"Unsupported Media Type: Content-Type must be application/json");let G={headers:Object.fromEntries(Y.headers.entries())},K;if(Q?.parsedBody!==void 0)K=Q.parsedBody;else try{K=await Y.json()}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON")}let W;try{if(Array.isArray(K))W=K.map((L)=>lG.parse(L));else W=[lG.parse(K)]}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON-RPC message")}let Z=W.some(nJ1);if(Z){if(this._initialized&&this.sessionId!==void 0)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Server already initialized");if(W.length>1)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Only one initialization request is allowed");if(this.sessionId=this.sessionIdGenerator?.(),this._initialized=!0,this.sessionId&&this._onsessioninitialized)await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!Z){let L=this.validateSession(Y);if(L)return L;let w=this.validateProtocolVersion(Y);if(w)return w}if(!W.some(pK)){for(let L of W)this.onmessage?.(L,{authInfo:Q?.authInfo,requestInfo:G});return new Response(null,{status:202})}let $=crypto.randomUUID(),F=W.find((L)=>nJ1(L)),V=F?F.params.protocolVersion:Y.headers.get("mcp-protocol-version")??v70;if(this._enableJsonResponse)return new Promise((L)=>{this._streamMapping.set($,{resolveJson:L,cleanup:()=>{this._streamMapping.delete($)}});for(let w of W)if(pK(w))this._requestToStreamMapping.set(w.id,$);for(let w of W)this.onmessage?.(w,{authInfo:Q?.authInfo,requestInfo:G})});let B=new TextEncoder,U,z=new ReadableStream({start:(L)=>{U=L},cancel:()=>{this._streamMapping.delete($)}}),D={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(this.sessionId!==void 0)D["mcp-session-id"]=this.sessionId;for(let L of W)if(pK(L))this._streamMapping.set($,{controller:U,encoder:B,cleanup:()=>{this._streamMapping.delete($);try{U.close()}catch{}}}),this._requestToStreamMapping.set(L.id,$);await this.writePrimingEvent(U,B,$,V);for(let L of W){let w,E;if(pK(L)&&this._eventStore&&V>="2025-11-25")w=()=>{this.closeSSEStream(L.id)},E=()=>{this.closeStandaloneSSEStream()};this.onmessage?.(L,{authInfo:Q?.authInfo,requestInfo:G,closeSSEStream:w,closeStandaloneSSEStream:E})}return new Response(z,{status:200,headers:D})}catch(X){return this.onerror?.(X),this.createJsonErrorResponse(400,-32700,"Parse error",{data:String(X)})}}async handleDeleteRequest(Y){let Q=this.validateSession(Y);if(Q)return Q;let X=this.validateProtocolVersion(Y);if(X)return X;return await Promise.resolve(this._onsessionclosed?.(this.sessionId)),await this.close(),new Response(null,{status:200})}validateSession(Y){if(this.sessionIdGenerator===void 0)return;if(!this._initialized)return this.createJsonErrorResponse(400,-32000,"Bad Request: Server not initialized");let Q=Y.headers.get("mcp-session-id");if(!Q)return this.createJsonErrorResponse(400,-32000,"Bad Request: Mcp-Session-Id header is required");if(Q!==this.sessionId)return this.createJsonErrorResponse(404,-32001,"Session not found");return}validateProtocolVersion(Y){let Q=Y.headers.get("mcp-protocol-version");if(Q!==null&&!$z.includes(Q))return this.createJsonErrorResponse(400,-32000,`Bad Request: Unsupported protocol version: ${Q} (supported versions: ${$z.join(", ")})`);return}async close(){this._streamMapping.forEach(({cleanup:Y})=>{Y()}),this._streamMapping.clear(),this._requestResponseMap.clear(),this.onclose?.()}closeSSEStream(Y){let Q=this._requestToStreamMapping.get(Y);if(!Q)return;let X=this._streamMapping.get(Q);if(X)X.cleanup()}closeStandaloneSSEStream(){let Y=this._streamMapping.get(this._standaloneSseStreamId);if(Y)Y.cleanup()}async send(Y,Q){let X=Q?.relatedRequestId;if(DZ(Y)||cL(Y))X=Y.id;if(X===void 0){if(DZ(Y)||cL(Y))throw Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");let K;if(this._eventStore)K=await this._eventStore.storeEvent(this._standaloneSseStreamId,Y);let W=this._streamMapping.get(this._standaloneSseStreamId);if(W===void 0)return;if(W.controller&&W.encoder)this.writeSSEEvent(W.controller,W.encoder,Y,K);return}let J=this._requestToStreamMapping.get(X);if(!J)throw Error(`No connection established for request ID: ${String(X)}`);let G=this._streamMapping.get(J);if(!this._enableJsonResponse&&G?.controller&&G?.encoder){let K;if(this._eventStore)K=await this._eventStore.storeEvent(J,Y);this.writeSSEEvent(G.controller,G.encoder,Y,K)}if(DZ(Y)||cL(Y)){this._requestResponseMap.set(X,Y);let K=Array.from(this._requestToStreamMapping.entries()).filter(([Z,H])=>H===J).map(([Z])=>Z);if(K.every((Z)=>this._requestResponseMap.has(Z))){if(!G)throw Error(`No connection established for request ID: ${String(X)}`);if(this._enableJsonResponse&&G.resolveJson){let Z={"Content-Type":"application/json"};if(this.sessionId!==void 0)Z["mcp-session-id"]=this.sessionId;let H=K.map(($)=>this._requestResponseMap.get($));if(H.length===1)G.resolveJson(new Response(JSON.stringify(H[0]),{status:200,headers:Z}));else G.resolveJson(new Response(JSON.stringify(H),{status:200,headers:Z}))}else G.cleanup();for(let Z of K)this._requestResponseMap.delete(Z),this._requestToStreamMapping.delete(Z)}}}}var pS=k(()=>{_Q()});var US0="SELF",cn=(Y)=>{return typeof Y==="object"&&Y!==null&&"handler"in Y&&"events"in Y&&typeof Y.handler==="function"&&Array.isArray(Y.events)},zS0=(Y)=>{return typeof Y==="object"&&Y!==null&&"handler"in Y&&"events"in Y&&typeof Y.handler==="function"&&Array.isArray(Y.events)},BS0="::",DS0=(Y)=>{let Q=Y.indexOf(BS0);if(Q===-1)return null;let X=Y.substring(0,Q),J=Y.substring(Q+BS0.length);return[X,J]},mE6=(Y)=>{if(!Y.startsWith("cron/"))return null;let Q=Y.substring(5),X=Q.indexOf("/");if(X===-1)return null;let J=Q.substring(0,X),G=Q.substring(X+1);return[J,G]},OS0=(Y)=>{if(cn(Y))return[];return Object.keys(Y)},lE6=(Y,Q)=>{if(cn(Y))return Y.events;let X=Y[Q];if(!X)return[];if(zS0(X))return X.events;return Object.keys(X)},pn=(Y,Q,X)=>{if(Y===US0){if(!X)return console.warn("[Event] SELF binding used but no connectionId available"),null;return X}let J=Q[Y];if(!lV1(J))return console.warn(`[Event] Binding "${Y}" not found in state`),null;return J.value},dE6=(Y,Q,X)=>{let J=Q;if(cn(Y)){let K=[];for(let W of Y.events){let Z=DS0(W);if(!Z){console.warn(`[Event] Global handler event "${W}" must be prefixed with BINDING:: (e.g., "SELF::${W}" or "DATABASE::${W}")`);continue}let[H,$]=Z,F=pn(H,J,X);if(!F)continue;K.push({eventType:$,publisher:F})}return K}let G=[];for(let K of OS0(Y)){let W=pn(K,J,X);if(!W)continue;let Z=lE6(Y,K);for(let H of Z)G.push({eventType:H,publisher:W})}return G},pE6=(Y)=>{let Q=new Map;for(let X of Y){let J=X.source,G=Q.get(J)||[];G.push(X),Q.set(J,G)}return Q},cE6=(Y)=>{let Q=new Map;for(let X of Y){let J=X.type,G=Q.get(J)||[];G.push(X),Q.set(J,G)}return Q},nE6=(Y)=>{let Q={},X={},J=!1,G=0,K=[];for(let W of Y){if(W.results)Object.assign(X,W.results);if(W.success===!1){if(J=!0,W.error)K.push(W.error)}if(W.processedCount!==void 0)G+=W.processedCount}if(Object.keys(X).length>0)Q.results=X;if(Q.success=!J,K.length>0)Q.error=K.join("; ");if(G>0)Q.processedCount=G;return Q},iE6=async(Y,Q,X,J,G)=>{let K=J;if(cn(Y)){let F=new Set;for(let B of Y.events){let U=DS0(B);if(!U)continue;let[z,D]=U,L=pn(z,K,G);if(!L)continue;F.add(`${L}:${D}`)}let V=Q.filter((B)=>{let U=`${B.source}:${B.type}`;return F.has(U)});if(V.length===0)return{success:!0};try{return await Y.handler({events:V},X)}catch(B){return{success:!1,error:B instanceof Error?B.message:String(B)}}}let W=new Map;for(let F of OS0(Y)){let V=pn(F,K,G);if(V)W.set(V,F)}let Z=pE6(Q),H=[];for(let[F,V]of Z){let B=W.get(F);if(!B)continue;let U=Y[B];if(!U)continue;if(zS0(U)){H.push((async()=>{try{return await U.handler({events:V},X)}catch(L){let w={};for(let E of V)w[E.id]={success:!1,error:L instanceof Error?L.message:String(L)};return{results:w}}})());continue}let z=U,D=cE6(V);for(let[L,w]of D){let E=z[L];if(!E)continue;H.push((async()=>{try{let T=await E({events:w},X),C={};for(let P of w)C[P.id]=T;return{results:C}}catch(T){let C={};for(let P of w)C[P.id]={success:!1,error:T instanceof Error?T.message:String(T)};return{results:C}}})())}}let $=await Promise.all(H);if($.length===0)return{success:!0};return nE6($)},nn;var aV1=k(()=>{un();nn={subscriptions:dE6,execute:iE6,parseCron:mE6}});function l$(Y){return{...Y,execute:(Q)=>{return Y.execute({...Q,runtimeContext:cS(Q.runtimeContext)})}}}function rV1(Y){return Y&&"streamable"in Y&&Y.streamable===!0}var cS=(Y)=>{let Q=ES.getStore();if(!Q){if(Y)return Y;throw Error("Missing context, did you forget to call State.bind?")}return Q},aE6=(Y,Q)=>{let X=Q;return typeof X[Y]<"u"?X[Y]:Q?.MESH_REQUEST_CONTEXT?.state?.[Y]},rE6=({events:Y,configuration:{state:Q,scopes:X,onChange:J}={}}={})=>{let G=Q?q.toJSONSchema(Q):{type:"object",properties:{}},K=String(Y?.bus??"EVENT_BUS");return[...J||Y?[l$({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:q.object({state:Q??q.unknown(),scopes:q.array(q.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')")}),outputSchema:q.object({}),execute:async(W)=>{let Z=W.context.state;await J?.(W.runtimeContext.env,{state:Z,scopes:W.context.scopes});let H=aE6(K,W.runtimeContext.env);if(Y&&Z&&H){let $=W.runtimeContext.env.MESH_REQUEST_CONTEXT?.connectionId,F=nn.subscriptions(Y?.handlers??{},Z,$);if(await H.EVENT_SYNC_SUBSCRIPTIONS({subscriptions:F}),$){let V=F.filter((B)=>B.eventType.startsWith("cron/")&&B.publisher===$);await Promise.all(V.map(async(B)=>{let U=nn.parseCron(B.eventType);if(U){let[,z]=U;await H.EVENT_PUBLISH({type:B.eventType,cron:z})}}))}}return Promise.resolve({})}})]:[],...Y?.handlers?[l$({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:mn,outputSchema:ln,execute:async(W)=>{let Z=W.runtimeContext.env,H=Z.MESH_REQUEST_CONTEXT?.state,$=Z.MESH_REQUEST_CONTEXT?.connectionId;return nn.execute(Y.handlers,W.context.events,Z,H,$)}})]:[],l$({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:q.object({}),outputSchema:q.object({stateSchema:q.unknown(),scopes:q.array(q.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:G,scopes:[...X??[],...Y?[`${K}::EVENT_SYNC_SUBSCRIPTIONS`]:[]]})}})]},NS0=(Y)=>{let Q=async(G)=>{await Y.before?.(G);let K=new wz({name:"@deco/mcp-api",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}}}),Z=await(typeof Y.tools==="function"?Y.tools:async(B)=>{if(typeof Y.tools==="function")return await Y.tools(B);return await Promise.all(Y.tools?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);Z.push(...rE6(Y));for(let B of Z)K.registerTool(B.id,{_meta:{streamable:rV1(B),...B._meta??{}},description:B.description,annotations:B.annotations,inputSchema:B.inputSchema&&"shape"in B.inputSchema?B.inputSchema.shape:q.object({}).shape,outputSchema:rV1(B)?q.object({bytes:q.record(q.string(),q.number())}).shape:B.outputSchema&&typeof B.outputSchema==="object"&&("shape"in B.outputSchema)?B.outputSchema.shape:void 0},async(U)=>{let z=await B.execute({context:U,runtimeContext:cS()});if(rV1(B)&&z instanceof Response)return{structuredContent:{streamable:!0,status:z.status,statusText:z.statusText},content:[{type:"text",text:`Streaming response: ${z.status} ${z.statusText}`}]};return{structuredContent:z,content:[{type:"text",text:JSON.stringify(z)}]}});let $=await(typeof Y.prompts==="function"?Y.prompts:async(B)=>{if(typeof Y.prompts==="function")return await Y.prompts(B);return await Promise.all(Y.prompts?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);for(let B of $)K.registerPrompt(B.name,{title:B.title,description:B.description,argsSchema:B.argsSchema?B.argsSchema:q.object({}).shape},async(U)=>{return await B.execute({args:U,runtimeContext:cS()})});let V=await(typeof Y.resources==="function"?Y.resources:async(B)=>{if(typeof Y.resources==="function")return await Y.resources(B);return await Promise.all(Y.resources?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);for(let B of V)K.resource(B.name,B.uri,{description:B.description,mimeType:B.mimeType},async(U)=>{let z=await B.read({uri:U,runtimeContext:cS()}),D={uri:z.uri};if(z.mimeType)D.mimeType=z.mimeType;if(z.text!==void 0)return{contents:[{uri:z.uri,mimeType:z.mimeType,text:z.text}]};else if(z.blob!==void 0)return{contents:[{uri:z.uri,mimeType:z.mimeType,blob:z.blob}]};return{contents:[{uri:z.uri,mimeType:z.mimeType,text:""}]}});return{server:K,tools:Z,prompts:$,resources:V}};return{fetch:async(G,K)=>{let{server:W}=await Q(K),Z=new m$;await W.connect(Z);try{let H=await Z.handleRequest(G),$=H.headers.get("content-type");if(!($?.includes("text/event-stream")||$?.includes("application/json-rpc"))){console.debug("[MCP Transport] Closing transport for non-streaming response");try{await Z.close?.()}catch{}}else console.debug("[MCP Transport] Keeping transport open for streaming response (Content-Type: %s)",$);return H}catch(H){console.debug("[MCP Transport] Closing transport due to error:",H instanceof Error?H.message:H);try{await Z.close?.()}catch{}throw H}},callTool:async({toolCallId:G,toolCallInput:K})=>{let W=ES.getStore();if(!W)throw Error("Missing state, did you forget to call State.bind?");let Z=W?.env,{tools:H}=await Q(Z),F=H.find((V)=>V.id===G)?.execute;if(!F)throw Error(`Tool ${G} not found or does not have an execute function`);return F({context:K,runtimeContext:cS()})}}};var an=k(()=>{dS();sm();pS();m1();aV1();dV1();aV1()});var oE6=({env:Y,server:Q,url:X})=>{Y.SELF=new Proxy({},{get:(J,G)=>{if(G==="toJSON")return null;return async(K)=>{return await Q.callTool({toolCallId:G,toolCallInput:K})}}}),Y.IS_LOCAL=(X?.startsWith("http://localhost")||X?.startsWith("http://127.0.0.1"))??!1},LS0=(Y)=>()=>{return{...Y??{}}},sE6=({env:Y,server:Q,tokenOrContext:X,url:J,authToken:G})=>{let K=Y,W=G?G.split(" ")[1]:void 0,Z;if(typeof X==="string"){let H=l9(X),$=H.metadata??{};Z={authorization:W,state:H.state??$.state??{},token:X,meshUrl:H.meshUrl??$.meshUrl,connectionId:H.connectionId??$.connectionId,organizationId:H.organizationId??$.organizationId,ensureAuthenticated:LS0(H.user??H.sub)}}else if(typeof X==="object"){Z=X;let H=l9(X.token),$=H.metadata??{},F=H.appName;Z.authorization??=W,Z.callerApp=F,Z.connectionId??=H.connectionId??$.connectionId,Z.ensureAuthenticated=LS0(H.user??H.sub)}else Z={state:{},authorization:W,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return K.MESH_REQUEST_CONTEXT=Z,Z.state=gj0(Z),oE6({env:K,server:Q,url:J}),K},tE6,MS0=(Y)=>{let Q=NS0(Y),X=Y.cors??tE6,J=Y.oauth,G=J?ij0(J):null,K=async(W,Z,H)=>{let $=new URL(W.url);if(G){if($.pathname==="/.well-known/oauth-protected-resource"||$.pathname==="/mcp/.well-known/oauth-protected-resource")return G.handleProtectedResourceMetadata(W);if($.pathname==="/.well-known/oauth-authorization-server")return G.handleAuthorizationServerMetadata(W);if($.pathname==="/authorize")return G.handleAuthorize(W);if($.pathname==="/oauth/callback")return G.handleOAuthCallback(W);if($.pathname==="/token"&&W.method==="POST")return G.handleToken(W);if(($.pathname==="/register"||$.pathname==="/mcp/register")&&W.method==="POST")return G.handleClientRegistration(W)}if($.pathname==="/mcp"){if(W.method==="GET")return new Response("Method not allowed",{status:405});if(G&&!G.hasAuth(W)){let F=W.clone();try{if((await F.json())?.method!=="tools/list")return G.createUnauthorizedResponse(W)}catch{return G.createUnauthorizedResponse(W)}}return Q.fetch(W,Z,H)}if($.pathname.startsWith("/mcp/call-tool")){let F=$.pathname.split("/").pop();if(!F)return new Response("Not found",{status:404});let V=await W.json(),B=await Q.callTool({toolCallId:F,toolCallInput:V});if(B instanceof Response)return B;return new Response(JSON.stringify(B),{headers:{"Content-Type":"application/json"}})}return Y.fetch?.(W,Z,H)||new Response("Not found",{status:404})};return{fetch:async(W,Z,H)=>{if(new URL(W.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(X!==!1&&W.method==="OPTIONS")return mj0(W,X??{});let $=sE6({authToken:W.headers.get("authorization")??null,env:{...process.env,...Z},server:Q,tokenOrContext:W.headers.get("x-mesh-token")??void 0,url:W.url}),F=await ES.run({req:W,env:$,ctx:H},async()=>await K(W,$,H));if(X!==!1)return lj0(F,W,X??{});return F}}};var wS0=k(()=>{UG();un();dj0();dV1();an();an();un();uV1();tE6={origin:(Y)=>{if(Y.includes("localhost")||Y.includes("127.0.0.1"))return Y;return Y},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});function rn(Y){return Buffer.from(String(Y),"utf8").toString("base64")}function on(Y){if(!Y)return null;try{let Q=Buffer.from(Y,"base64").toString("utf8"),X=Number.parseInt(Q,10);return Number.isNaN(X)||X<0?null:X}catch{return null}}function LX(Y){if(!Y?.length)return[];return Array.from(new Set(Y.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.toLowerCase())))}function gD(Y){if(!Y)return[];return LX(Y.split(","))}function sn(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}function tn(Y){return Y?.["mcp.mesh"]??{}}function en(Y){return Y.length?Y.join(","):null}function eE6(Y,Q){if(!Q?.length)return;let X=Y;for(let J of Q){if(X===null||X===void 0)return;if(typeof X!=="object")return;X=X[J]}return X}function Y26(Y,Q,X){if(!Q)return!1;if(Q==="eq")return Y===X;if(Q==="contains"||Q==="like"){let J=String(Y??"").toLowerCase(),G=String(X??"").toLowerCase();return J.includes(G)}if(Q==="in"){if(!Array.isArray(X))return!1;return X.includes(Y)}if(Q==="gt")return Number(Y)>Number(X);if(Q==="gte")return Number(Y)>=Number(X);if(Q==="lt")return Number(Y)<Number(X);if(Q==="lte")return Number(Y)<=Number(X);return!1}function nS(Y,Q){if(!Q)return!0;if(Array.isArray(Q.conditions)&&Q.conditions.length){if(Q.operator==="and")return Q.conditions.every((X)=>nS(Y,X));if(Q.operator==="or")return Q.conditions.some((X)=>nS(Y,X));if(Q.operator==="not")return!Q.conditions.some((X)=>nS(Y,X))}return Y26(eE6(Y,Q.field),Q.operator,Q.value)}class iS{db;constructor(Y){this.db=Y}async create(Y){let Q=new Date().toISOString(),X=Y._meta??{},J=tn(X),G=LX(J.tags),K=LX(J.categories),W={id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:JSON.stringify(X),tags:en(G),categories:en(K),is_public:Y.is_public?1:0,is_unlisted:Y.is_unlisted?1:0,created_at:Q,updated_at:Q,created_by:Y.created_by??null};await this.db.insertInto("private_registry_item").values(W).execute();let Z=await this.findById(Y.organization_id,Y.id);if(!Z)throw Error(`Failed to create registry item "${Y.id}"`);return Z}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async findByIdOrName(Y,Q){let X=await this.findById(Y,Q);if(X)return X;let J=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("title","=",Q).executeTakeFirst();return J?this.deserialize(J):null}async update(Y,Q,X){let J=await this.findById(Y,Q);if(!J)throw Error(`Registry item not found: ${Q}`);let G=X._meta??J._meta??{},K=tn(G),W=LX(K.tags),Z=LX(K.categories),H={updated_at:new Date().toISOString()};if(X.title!==void 0)H.title=X.title;if(X.description!==void 0)H.description=X.description;if(X.server!==void 0)H.server_json=JSON.stringify(X.server);if(X._meta!==void 0)H.meta_json=JSON.stringify(X._meta);if(X._meta!==void 0)H.tags=en(W),H.categories=en(Z);if(X.is_public!==void 0)H.is_public=X.is_public?1:0;if(X.is_unlisted!==void 0)H.is_unlisted=X.is_unlisted?1:0;await this.db.updateTable("private_registry_item").set(H).where("organization_id","=",Y).where("id","=",Q).execute();let $=await this.findById(Y,Q);if(!$)throw Error(`Registry item not found after update: ${Q}`);return $}async delete(Y,Q){let X=await this.findById(Y,Q);if(!X)return null;return await this.db.deleteFrom("private_registry_item").where("organization_id","=",Y).where("id","=",Q).execute(),X}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).orderBy("created_at","desc");if(!Q.includeUnlisted)X=X.where("is_unlisted","=",0);let G=(await X.execute()).map((z)=>this.deserialize(z)),K=LX(Q.tags),W=LX(Q.categories),Z=G.filter((z)=>{let D=tn(z._meta),L=LX(D.tags),w=LX(D.categories),E=K.length===0||K.every((P)=>L.includes(P)),T=W.length===0||W.every((P)=>w.includes(P)),C=nS(z,Q.where);return E&&T&&C}),$=on(Q.cursor)??Q.offset??0,F=Q.limit??24,V=Z.slice($,$+F),B=$+F<Z.length,U=B?rn($+F):void 0;return{items:V,totalCount:Z.length,hasMore:B,nextCursor:U}}async listPublic(Y,Q={}){let J=(await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("is_public","=",1).where("is_unlisted","=",0).orderBy("created_at","desc").execute()).map((U)=>this.deserialize(U)),G=LX(Q.tags),K=LX(Q.categories),W=J.filter((U)=>{let z=tn(U._meta),D=LX(z.tags),L=LX(z.categories),w=G.length===0||G.every((C)=>D.includes(C)),E=K.length===0||K.every((C)=>L.includes(C)),T=nS(U,Q.where);return w&&E&&T}),H=on(Q.cursor)??Q.offset??0,$=Q.limit??24,F=W.slice(H,H+$),V=H+$<W.length,B=V?rn(H+$):void 0;return{items:F,totalCount:W.length,hasMore:V,nextCursor:B}}async getFilters(Y,Q){let X=this.db.selectFrom("private_registry_item").select(["tags","categories"]).where("organization_id","=",Y);if(Q?.publicOnly)X=X.where("is_public","=",1);if(!Q?.includeUnlisted)X=X.where("is_unlisted","=",0);let J=await X.execute(),G=new Map,K=new Map;for(let Z of J){for(let H of gD(Z.tags))G.set(H,(G.get(H)??0)+1);for(let H of gD(Z.categories))K.set(H,(K.get(H)??0)+1)}let W=(Z)=>Array.from(Z.entries()).map(([H,$])=>({value:H,count:$})).sort((H,$)=>H.value.localeCompare($.value));return{tags:W(G),categories:W(K)}}async search(Y,Q={},X){let J=this.db.selectFrom("private_registry_item").select(["id","title","description","meta_json","server_json","tags","categories","is_public","is_unlisted"]).where("organization_id","=",Y).orderBy("created_at","desc");if(X?.publicOnly)J=J.where("is_public","=",1);if(!X?.includeUnlisted)J=J.where("is_unlisted","=",0);let G=await J.execute(),K=Q.query?.trim().toLowerCase(),W=LX(Q.tags),Z=LX(Q.categories),H=G.filter((L)=>{if(K){let w=sn(L.server_json,{}),T=sn(L.meta_json,{})?.["mcp.mesh"]?.short_description??"";if(![L.id,L.title,L.description??"",w.name??"",w.description??"",T].join(" ").toLowerCase().includes(K))return!1}if(W.length>0){let w=LX(gD(L.tags));if(!W.every((E)=>w.includes(E)))return!1}if(Z.length>0){let w=LX(gD(L.categories));if(!Z.every((E)=>w.includes(E)))return!1}return!0}),F=on(Q.cursor)??0,V=Q.limit??20,B=H.slice(F,F+V),U=F+V<H.length,z=U?rn(F+V):void 0;return{items:B.map((L)=>({id:L.id,title:L.title,tags:gD(L.tags),categories:gD(L.categories),is_public:L.is_public===1,is_unlisted:L.is_unlisted===1})),totalCount:H.length,hasMore:U,nextCursor:z}}deserialize(Y){let Q=sn(Y.server_json,{}),X=sn(Y.meta_json,{});return{id:Y.id,name:typeof Q.name==="string"?Q.name:void 0,title:Y.title,description:Y.description,_meta:X,server:Q,is_public:Y.is_public===1,is_unlisted:Y.is_unlisted===1,created_at:Y.created_at,updated_at:Y.updated_at,...Y.created_by?{created_by:Y.created_by}:{}}}}var oV1=()=>{};var Yi,Q26,Qi,lZ,sV1,X26,pq,MA,AG,uD,tV1,AS0,eV1,PS0,Yq1,ES0,Qq1,TS0,wA,J26,aS,G26,Xi,Xq1,CS0,RS0,Jq1,IS0,jS0,SS0,kS0,vS0,_S0,yS0,fS0,W26,Gq1,bS0,hS0,Wq1,xS0;var cY=k(()=>{wG();m1();Yi=q.object({name:q.string(),title:q.string().optional(),description:q.string().optional(),version:q.string().optional(),websiteUrl:q.string().optional(),icons:q.array(q.object({src:q.string()})).optional(),remotes:q.array(q.object({type:q.string().optional(),url:q.string().optional(),name:q.string().optional(),title:q.string().optional(),description:q.string().optional()})).optional(),packages:q.array(q.object({identifier:q.string(),version:q.string().optional()})).optional(),repository:q.object({url:q.string().optional(),source:q.string().optional(),subfolder:q.string().optional()}).optional()}),Q26=q.object({name:q.string(),description:q.string().nullable().optional()}),Qi=q.object({"mcp.mesh":q.object({verified:q.boolean().optional(),tags:q.array(q.string()).optional(),categories:q.array(q.string()).optional(),friendly_name:q.string().nullable().optional(),short_description:q.string().max(160).nullable().optional(),owner:q.string().nullable().optional(),readme:q.string().max(50000).nullable().optional(),readme_url:q.string().url().nullable().optional(),has_remote:q.boolean().optional(),has_oauth:q.boolean().optional(),tools:q.array(Q26).optional()}).optional()}).catchall(q.unknown()),lZ=q.object({id:q.string(),name:q.string().optional(),title:q.string(),description:q.string().nullable().optional(),_meta:Qi.optional(),server:Yi,is_public:q.boolean().optional(),created_at:q.string(),updated_at:q.string(),created_by:q.string().optional()}),sV1=q.object({id:q.string(),title:q.string(),description:q.string().nullable().optional(),_meta:Qi.optional(),server:Yi,is_public:q.boolean().optional()}),X26=q.object({title:q.string().optional(),description:q.string().nullable().optional(),_meta:Qi.optional(),server:Yi.optional(),is_public:q.boolean().optional()}),pq=mZ.extend({tags:q.array(q.string()).optional().describe("Filter by tags (AND semantics)"),categories:q.array(q.string()).optional().describe("Filter by categories (AND semantics)"),cursor:q.string().optional().describe("Pagination cursor")}).describe("List registry items with optional filtering and pagination."),MA=q.object({items:q.array(lZ),totalCount:q.number(),hasMore:q.boolean().optional(),nextCursor:q.string().optional()}),AG=q.object({id:q.string().optional().describe("Registry item ID"),name:q.string().optional().describe("Registry item name (alias for id)")}).refine((Y)=>Y.id||Y.name,{message:"At least one of 'id' or 'name' is required"}).describe("Get a registry item by ID or name."),uD=q.object({item:lZ.nullable()}),tV1=q.object({data:sV1}),AS0=q.object({item:lZ}),eV1=q.object({items:q.array(sV1).min(1)}),PS0=q.object({created:q.number(),errors:q.array(q.object({id:q.string(),error:q.string()}))}),Yq1=q.object({id:q.string(),data:X26}),ES0=q.object({item:lZ}),Qq1=q.object({id:q.string()}),TS0=q.object({item:lZ}),wA=q.object({tags:q.array(q.object({value:q.string(),count:q.number()})),categories:q.array(q.object({value:q.string(),count:q.number()}))}),J26=q.enum(["description","short_description","tags","categories","readme"]),aS=q.object({query:q.string().optional().describe("Free-text search across id, title, description, server name"),tags:q.array(q.string()).optional().describe("Filter by tags (AND)"),categories:q.array(q.string()).optional().describe("Filter by categories (AND)"),limit:q.number().int().min(1).max(100).optional().describe("Max results (default 20)"),cursor:q.string().optional().describe("Pagination cursor")}).describe("Lightweight search returning minimal fields (id, title, tags, categories, is_public)."),G26=q.object({id:q.string(),title:q.string(),tags:q.array(q.string()),categories:q.array(q.string()),is_public:q.boolean()}),Xi=q.object({items:q.array(G26),totalCount:q.number(),hasMore:q.boolean().optional(),nextCursor:q.string().optional()}),Xq1=q.object({type:J26.describe("Which content to generate"),llmConnectionId:q.string().describe("Connection ID of a language model"),modelId:q.string().describe("Model ID to use"),context:q.object({name:q.string().optional(),provider:q.string().optional(),url:q.string().optional(),owner:q.string().optional(),repositoryUrl:q.string().optional(),description:q.string().optional(),shortDescription:q.string().optional(),tags:q.array(q.string()).optional(),categories:q.array(q.string()).optional(),availableTags:q.array(q.string()).optional(),availableCategories:q.array(q.string()).optional(),tools:q.array(q.object({name:q.string(),description:q.string().nullable().optional()})).optional()})}),CS0=q.object({result:q.string().optional(),items:q.array(q.string()).optional()}),RS0=q.enum(["pending","approved","rejected"]),Jq1=q.object({id:q.string(),organization_id:q.string(),requested_id:q.string().nullable().optional(),status:RS0,title:q.string(),description:q.string().nullable().optional(),_meta:Qi.optional(),server:Yi,requester_name:q.string().nullable().optional(),requester_email:q.string().nullable().optional(),reviewer_notes:q.string().nullable().optional(),created_at:q.string(),updated_at:q.string()}),IS0=q.object({status:RS0.optional(),limit:q.number().int().min(1).max(200).optional(),offset:q.number().int().min(0).optional(),sortBy:q.enum(["created_at","title"]).optional(),sortDirection:q.enum(["asc","desc"]).optional()}),jS0=q.object({items:q.array(Jq1),totalCount:q.number()}),SS0=q.object({id:q.string(),status:q.enum(["approved","rejected"]),reviewerNotes:q.string().nullable().optional()}),kS0=q.object({item:Jq1}),vS0=q.object({pending:q.number()}),_S0=q.object({id:q.string()}),yS0=q.object({item:Jq1.nullable()}),fS0=q.object({data:sV1,requester:q.object({name:q.string().optional(),email:q.string().email().optional()}).optional()}),W26=q.object({id:q.string(),name:q.string(),prefix:q.string(),createdAt:q.string()}),Gq1=q.object({name:q.string().min(1).max(64).describe("A descriptive name for this key")}),bS0=q.object({id:q.string(),name:q.string(),prefix:q.string(),key:q.string().describe("The full API key \u2014 shown only once!"),createdAt:q.string()}),hS0=q.object({items:q.array(W26)}),Wq1=q.object({keyId:q.string()}),xS0=q.object({success:q.boolean(),keyId:q.string()})});function Z26(Y,Q){let X=l$({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",inputSchema:pq,outputSchema:MA,execute:async({context:Z})=>{return await Y.listPublic(Q,{limit:Z.limit,offset:Z.offset,cursor:Z.cursor,tags:Z.tags,categories:Z.categories,where:Z.where})}}),J=l$({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",inputSchema:AG,outputSchema:uD,execute:async({context:Z})=>{let H=Z.id??Z.name;if(!H)return{item:null};let $=await Y.findByIdOrName(Q,H);if($&&$.is_public)return{item:$};return{item:null}}}),G=l$({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",inputSchema:AG,outputSchema:q.object({versions:q.array(uD.shape.item)}),execute:async({context:Z})=>{let H=Z.id??Z.name;if(!H)return{versions:[]};let $=await Y.findByIdOrName(Q,H);if($&&$.is_public)return{versions:[$]};return{versions:[]}}}),K=l$({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",inputSchema:aS,outputSchema:Xi,execute:async({context:Z})=>{return await Y.search(Q,Z,{publicOnly:!0})}}),W=l$({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",inputSchema:q.object({}),outputSchema:wA,execute:async()=>{return await Y.getFilters(Q,{publicOnly:!0})}});return[X,K,J,G,W]}function Zq1(Y,Q){let X=Q.db,J=new iS(X);Y.all("/org/:orgSlug/registry/*",async(G)=>{let K=G.req.param("orgSlug");console.log(`[Public Registry MCP] Request for org slug: ${K}, path: ${G.req.path}`);let W=await X.selectFrom("organization").select(["id","slug","name"]).where("slug","=",K).executeTakeFirst();if(console.log("[Public Registry MCP] Found org:",W),!W)return console.log(`[Public Registry MCP] Organization not found: ${K}`),G.json({error:"Organization not found"},404);let Z=Z26(J,W.id),H=MS0({tools:()=>Z}),$=new URL(G.req.url),F=G.req.path.replace(`/org/${K}/registry`,""),V=new URL(F||"/",$.origin);$.searchParams.forEach((z,D)=>{V.searchParams.set(D,z)}),console.log(`[Public Registry MCP] Rewriting ${$.pathname} to ${V.pathname}`);let B=new Request(V.toString(),{method:G.req.method,headers:G.req.raw.headers,body:G.req.method!=="GET"&&G.req.method!=="HEAD"?G.req.raw.body:void 0}),U={organizationId:W.id,db:X,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await H.fetch(B,U,G)})}var gS0=k(()=>{wS0();an();m1();oV1();cY()});import{randomUUID as K26}from"crypto";function uS0(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}class rS{db;constructor(Y){this.db=Y}async createOrUpdate(Y){let Q=new Date().toISOString(),X=await this.findPendingByRequestedId(Y.organization_id,Y.requested_id);if(X){let W={title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:Y._meta?JSON.stringify(Y._meta):null,requester_name:Y.requester_name??null,requester_email:Y.requester_email??null,updated_at:Q};await this.db.updateTable("private_registry_publish_request").set(W).where("organization_id","=",Y.organization_id).where("id","=",X.id).execute();let Z=await this.findById(Y.organization_id,X.id);if(!Z)throw Error("Failed to update publish request");return Z}let J=K26(),G={id:J,organization_id:Y.organization_id,requested_id:Y.requested_id,status:"pending",title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:Y._meta?JSON.stringify(Y._meta):null,requester_name:Y.requester_name??null,requester_email:Y.requester_email??null,reviewer_notes:null,created_at:Q,updated_at:Q};await this.db.insertInto("private_registry_publish_request").values(G).execute();let K=await this.findById(Y.organization_id,J);if(!K)throw Error("Failed to create publish request");return K}async findPendingByRequestedId(Y,Q){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y).where("requested_id","=",Q).where("status","=","pending").executeTakeFirst();return X?this.deserialize(X):null}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y),J=this.db.selectFrom("private_registry_publish_request").select(($)=>$.fn.countAll().as("count")).where("organization_id","=",Y);if(Q.status)X=X.where("status","=",Q.status),J=J.where("status","=",Q.status);let G=await J.executeTakeFirst(),K=Number(G?.count??0),W=Q.sortBy??"created_at",Z=Q.sortDirection??"desc";if(W==="title")X=X.orderBy("title",Z);else X=X.orderBy("created_at",Z);return{items:(await X.limit(Q.limit??24).offset(Q.offset??0).execute()).map(($)=>this.deserialize($)),totalCount:K}}async updateStatus(Y,Q,X,J){let G={status:X,updated_at:new Date().toISOString(),reviewer_notes:J??null};await this.db.updateTable("private_registry_publish_request").set(G).where("organization_id","=",Y).where("id","=",Q).execute();let K=await this.findById(Y,Q);if(!K)throw Error(`Publish request not found: ${Q}`);return K}async countPending(Y){let Q=await this.db.selectFrom("private_registry_publish_request").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",Y).where("status","=","pending").executeTakeFirst();return Number(Q?.count??0)}async delete(Y,Q){let X=await this.findById(Y,Q);if(!X)return null;return await this.db.deleteFrom("private_registry_publish_request").where("organization_id","=",Y).where("id","=",Q).execute(),X}deserialize(Y){return{id:Y.id,organization_id:Y.organization_id,requested_id:Y.requested_id??null,status:Y.status,title:Y.title,description:Y.description,_meta:uS0(Y.meta_json,{}),server:uS0(Y.server_json,{name:""}),requester_name:Y.requester_name,requester_email:Y.requester_email,reviewer_notes:Y.reviewer_notes,created_at:Y.created_at,updated_at:Y.updated_at}}}var Kq1=()=>{};import{randomUUID as H26}from"crypto";async function mS0(Y){let X=new TextEncoder().encode(Y),J=await crypto.subtle.digest("SHA-256",X);return Array.from(new Uint8Array(J)).map((K)=>K.toString(16).padStart(2,"0")).join("")}function $26(){let Y=new Uint8Array(32);return crypto.getRandomValues(Y),`prk_${Array.from(Y).map((X)=>X.toString(16).padStart(2,"0")).join("")}`}class oS{db;constructor(Y){this.db=Y}async generate(Y,Q){let X=H26(),J=$26(),G=await mS0(J),K=J.slice(0,12),W=new Date().toISOString();return await this.db.insertInto("private_registry_publish_api_key").values({id:X,organization_id:Y,name:Q,key_hash:G,prefix:K,created_at:W}).execute(),{entity:{id:X,organization_id:Y,name:Q,prefix:K,created_at:W},key:J}}async list(Y){return await this.db.selectFrom("private_registry_publish_api_key").select(["id","organization_id","name","prefix","created_at"]).where("organization_id","=",Y).orderBy("created_at","desc").execute()}async revoke(Y,Q){return(await this.db.deleteFrom("private_registry_publish_api_key").where("organization_id","=",Y).where("id","=",Q).execute()).length>0}async validate(Y,Q){let X=await mS0(Q),J=await this.db.selectFrom("private_registry_publish_api_key").select(["id"]).where("organization_id","=",Y).where("key_hash","=",X).executeTakeFirst();return Boolean(J)}async hasKeys(Y){let Q=await this.db.selectFrom("private_registry_publish_api_key").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",Y).executeTakeFirst();return Number(Q?.count??0)>0}}var Hq1=()=>{};import{sql as F26}from"kysely";import{randomUUID as lS0}from"crypto";async function q26(Y){let Q=new Date().toISOString(),X=lS0(),J=IY.SELF(Y.organizationId),G="registry.publish_request.created",K={requestId:Y.request.id,requestedId:Y.request.requested_id,title:Y.request.title,status:Y.request.status,createdAt:Y.request.created_at,requester:{name:Y.request.requester_name,email:Y.request.requester_email}};await Y.db.insertInto("events").values({id:X,organization_id:Y.organizationId,type:"registry.publish_request.created",source:J,specversion:"1.0",subject:Y.request.id,time:Q,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(K),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Q,updated_at:Q}).execute();let W=await Y.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",Y.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((Z)=>Z.or([Z("publisher","is",null),Z("publisher","=",J)])).execute();if(W.length>0)await Y.db.insertInto("event_deliveries").values(W.map((Z)=>({id:lS0(),event_id:X,subscription_id:Z.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Q}))).execute();try{await F26`SELECT pg_notify('mesh_events', ${X})`.execute(Y.db)}catch{}}async function B26(Y,Q){let J=(await Y.selectFrom("organization").select(["id"]).where("id","=",Q).execute())[0];if(J?.id)return J.id;return(await Y.selectFrom("organization").select(["id"]).where("slug","=",Q).execute())[0]?.id??null}async function U26(Y,Q){let X=await Y.selectFrom("project_plugin_configs").innerJoin("projects","projects.id","project_plugin_configs.project_id").select(["project_plugin_configs.settings as settings"]).where("projects.organization_id","=",Q).where("project_plugin_configs.plugin_id","=",fH).execute();for(let J of X){let G=J.settings,K=typeof G==="string"?(()=>{try{return JSON.parse(G)}catch{return{}}})():G??{};if(K.acceptPublishRequests===!0){let W=K.rateLimitWindow==="minute"?"minute":"hour",Z=K.rateLimitMax,H=typeof Z==="number"&&Number.isFinite(Z)&&Z>=1?Math.floor(Z):pS0;return{acceptPublishRequests:!0,requireApiToken:K.requireApiToken===!0,rateLimitEnabled:K.rateLimitEnabled===void 0?dS0:K.rateLimitEnabled===!0,rateLimitWindow:W,rateLimitMax:H}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:dS0,rateLimitWindow:V26,rateLimitMax:pS0}}async function z26(Y,Q,X){let J=X==="minute"?60000:3600000,G=new Date(Date.now()-J).toISOString(),K=await Y.selectFrom("private_registry_publish_request").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",Q).where("created_at",">=",G).executeTakeFirst();return Number(K?.count??0)}async function D26(Y,Q,X,J){let G=await Y.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",Q).where((K)=>K.or([K("id","=",X),K("title","=",J)])).executeTakeFirst();return G?{id:String(G.id),title:String(G.title)}:null}function $q1(Y,Q){let{db:X,db:J}=Q,G=new rS(J),K=new oS(J);Y.post("/org/:orgRef/registry/publish-request",async(W)=>{let Z=W.req.param("orgRef"),H=await B26(X,Z);if(!H)return W.json({error:"Organization not found"},404);let $=await U26(X,H);if(!$.acceptPublishRequests)return W.json({error:"Publish requests are not enabled for this registry."},403);if($.requireApiToken){let z=W.req.header("Authorization"),D=z?.startsWith("Bearer ")?z.slice(7).trim():null;if(!D)return W.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await K.validate(H,D))return W.json({error:"Invalid API key"},401)}if($.rateLimitEnabled){if(await z26(J,H,$.rateLimitWindow)>=$.rateLimitMax)return W.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:$.rateLimitWindow==="minute"?60:3600},429)}let F;try{F=await W.req.json()}catch{return W.json({error:"Invalid JSON body"},400)}let V=fS0.safeParse(F);if(!V.success)return W.json({error:"Invalid publish request payload",details:q.treeifyError(V.error)},400);let B=await D26(J,H,V.data.data.id,V.data.data.title);if(B)return W.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:B},409);let U=await G.createOrUpdate({organization_id:H,requested_id:V.data.data.id,title:V.data.data.title,description:V.data.data.description??null,_meta:V.data.data._meta,server:V.data.data.server,requester_name:V.data.requester?.name??null,requester_email:V.data.requester?.email??null});try{await q26({db:X,organizationId:H,request:U})}catch(z){console.warn("[private-registry] failed to emit publish-request event:",z)}return W.json({id:U.id,requested_id:U.requested_id,status:U.status},201)})}var dS0=!0,V26="hour",pS0=100;var cS0=k(()=>{KY();m1();fD();Kq1();Hq1();cY()});var nS0=k(()=>{gS0();cS0()});function iS0(Y){Fq1=Y}function k4(){if(!Fq1)throw Error(`Plugin storage not initialized. Make sure the "${fH}" plugin is enabled.`);return Fq1}async function O26(Y){if(!Y.organization)throw Error("Organization context required");return await Y.access.check(),Y}function W6(Y,Q){return async(X,J)=>{let G=await O26(J);return Q(X,G)}}function N26(Y){if(!Y)return{};if(typeof Y==="string")try{return JSON.parse(Y)}catch{return{}}if(typeof Y==="object")return Y;return{}}async function sS(Y,Q){let J=(await Y.db.selectFrom("project_plugin_configs").innerJoin("projects","projects.id","project_plugin_configs.project_id").select(["project_plugin_configs.settings as settings"]).where("projects.organization_id","=",Q).where("project_plugin_configs.plugin_id","=",fH).execute()).map((K)=>N26(K.settings)),G={acceptPublishRequests:J.some((K)=>K.acceptPublishRequests===!0),requireApiToken:J.some((K)=>K.requireApiToken===!0),storePrivateOnly:J.some((K)=>K.storePrivateOnly===!0)};if(G.acceptPublishRequests||G.requireApiToken||G.storePrivateOnly)return G;for(let K of J)if(Object.keys(K).length>0)return K;return{}}var Fq1=null;var W9=k(()=>{fD()});import{randomUUID as aS0}from"crypto";function rS0(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}class Vq1{db;constructor(Y){this.db=Y}async create(Y){let Q=aS0(),X=new Date().toISOString(),J={id:Q,organization_id:Y.organization_id,status:Y.status??"pending",config_snapshot:Y.config_snapshot?JSON.stringify(Y.config_snapshot):null,total_items:Y.total_items??0,tested_items:0,passed_items:0,failed_items:0,skipped_items:0,current_item_id:null,started_at:Y.started_at??null,finished_at:null,created_at:X};await this.db.insertInto("private_registry_monitor_run").values(J).execute();let G=await this.findById(Y.organization_id,Q);if(!G)throw Error(`Failed to create monitor run ${Q}`);return G}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserializeRun(X):null}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",Y),J=this.db.selectFrom("private_registry_monitor_run").select((Z)=>Z.fn.countAll().as("count")).where("organization_id","=",Y);if(Q.status)X=X.where("status","=",Q.status),J=J.where("status","=",Q.status);let G=await J.executeTakeFirst(),K=Number(G?.count??0);return{items:(await X.orderBy("created_at","desc").limit(Q.limit??24).offset(Q.offset??0).execute()).map((Z)=>this.deserializeRun(Z)),totalCount:K}}async update(Y,Q,X){let J={};if(X.total_items!==void 0)J.total_items=X.total_items;if(X.status!==void 0)J.status=X.status;if(X.tested_items!==void 0)J.tested_items=X.tested_items;if(X.passed_items!==void 0)J.passed_items=X.passed_items;if(X.failed_items!==void 0)J.failed_items=X.failed_items;if(X.skipped_items!==void 0)J.skipped_items=X.skipped_items;if(X.current_item_id!==void 0)J.current_item_id=X.current_item_id;if(X.started_at!==void 0)J.started_at=X.started_at;if(X.finished_at!==void 0)J.finished_at=X.finished_at;await this.db.updateTable("private_registry_monitor_run").set(J).where("organization_id","=",Y).where("id","=",Q).execute();let G=await this.findById(Y,Q);if(!G)throw Error(`Monitor run not found: ${Q}`);return G}deserializeRun(Y){return{id:Y.id,organization_id:Y.organization_id,status:Y.status,config_snapshot:rS0(Y.config_snapshot,null),total_items:Number(Y.total_items??0),tested_items:Number(Y.tested_items??0),passed_items:Number(Y.passed_items??0),failed_items:Number(Y.failed_items??0),skipped_items:Number(Y.skipped_items??0),current_item_id:Y.current_item_id,started_at:Y.started_at,finished_at:Y.finished_at,created_at:Y.created_at}}}class qq1{db;constructor(Y){this.db=Y}async create(Y){let Q=aS0(),X=new Date().toISOString(),J={id:Q,run_id:Y.run_id,organization_id:Y.organization_id,item_id:Y.item_id,item_title:Y.item_title,status:Y.status,error_message:Y.error_message??null,connection_ok:Y.connection_ok?1:0,tools_listed:Y.tools_listed?1:0,tool_results:Y.tool_results?JSON.stringify(Y.tool_results):null,agent_summary:Y.agent_summary??null,duration_ms:Y.duration_ms??0,action_taken:Y.action_taken??"none",tested_at:X};await this.db.insertInto("private_registry_monitor_result").values(J).execute();let G=await this.findById(Y.organization_id,Q);if(!G)throw Error("Failed to create test result");return G}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async listByRun(Y,Q,X={}){let J=this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",Y).where("run_id","=",Q),G=this.db.selectFrom("private_registry_monitor_result").select((H)=>H.fn.countAll().as("count")).where("organization_id","=",Y).where("run_id","=",Q);if(X.status)J=J.where("status","=",X.status),G=G.where("status","=",X.status);let K=await G.executeTakeFirst(),W=Number(K?.count??0);return{items:(await J.orderBy("tested_at","desc").limit(X.limit??50).offset(X.offset??0).execute()).map((H)=>this.deserialize(H)),totalCount:W}}async update(Y,Q,X){let J={};if(X.status!==void 0)J.status=X.status;if(X.error_message!==void 0)J.error_message=X.error_message;if(X.connection_ok!==void 0)J.connection_ok=X.connection_ok?1:0;if(X.tools_listed!==void 0)J.tools_listed=X.tools_listed?1:0;if(X.tool_results!==void 0)J.tool_results=JSON.stringify(X.tool_results);if(X.agent_summary!==void 0)J.agent_summary=X.agent_summary;if(X.duration_ms!==void 0)J.duration_ms=X.duration_ms;if(X.action_taken!==void 0)J.action_taken=X.action_taken;await this.db.updateTable("private_registry_monitor_result").set(J).where("organization_id","=",Y).where("id","=",Q).execute();let G=await this.findById(Y,Q);if(!G)throw Error(`Monitor result not found: ${Q}`);return G}deserialize(Y){return{id:Y.id,run_id:Y.run_id,organization_id:Y.organization_id,item_id:Y.item_id,item_title:Y.item_title,status:Y.status,error_message:Y.error_message,connection_ok:Y.connection_ok===1,tools_listed:Y.tools_listed===1,tool_results:rS0(Y.tool_results,[]),agent_summary:Y.agent_summary,duration_ms:Number(Y.duration_ms??0),action_taken:Y.action_taken,tested_at:Y.tested_at}}}var oS0=()=>{};import{randomUUID as L26}from"crypto";class Bq1{db;constructor(Y){this.db=Y}async findByItemId(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).where("item_id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async list(Y){return(await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).orderBy("updated_at","desc").execute()).map((X)=>this.deserialize(X))}async findByConnectionId(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).where("connection_id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async upsert(Y){let Q=await this.findByItemId(Y.organization_id,Y.item_id),X=new Date().toISOString();if(!Q){let G={id:L26(),organization_id:Y.organization_id,item_id:Y.item_id,connection_id:Y.connection_id,auth_status:Y.auth_status??"none",created_at:X,updated_at:X};await this.db.insertInto("private_registry_monitor_connection").values(G).execute()}else{let G={connection_id:Y.connection_id,auth_status:Y.auth_status??Q.auth_status,updated_at:X};await this.db.updateTable("private_registry_monitor_connection").set(G).where("organization_id","=",Y.organization_id).where("item_id","=",Y.item_id).execute()}let J=await this.findByItemId(Y.organization_id,Y.item_id);if(!J)throw Error("Failed to save monitor connection");return J}async updateAuthStatus(Y,Q,X){return await this.db.updateTable("private_registry_monitor_connection").set({auth_status:X,updated_at:new Date().toISOString()}).where("organization_id","=",Y).where("item_id","=",Q).execute(),this.findByItemId(Y,Q)}deserialize(Y){return{id:Y.id,organization_id:Y.organization_id,item_id:Y.item_id,connection_id:Y.connection_id,auth_status:Y.auth_status,created_at:Y.created_at,updated_at:Y.updated_at}}}var sS0=()=>{};function tS0(Y){let Q=Y.db,X={items:new iS(Q),publishRequests:new rS(Q),publishApiKeys:new oS(Q),monitorRuns:new Vq1(Q),monitorResults:new qq1(Q),monitorConnections:new Bq1(Q)};return iS0(X),X}var eS0=k(()=>{W9();oV1();Kq1();Hq1();oS0();sS0()});var Yk0;var Qk0=k(()=>{cY();W9();Yk0={name:"REGISTRY_ITEM_BULK_CREATE",description:"Create many private registry items at once",inputSchema:eV1,outputSchema:PS0,handler:W6(eV1,async(Y,Q)=>{let X=k4(),J=[],G=0;for(let K of Y.items)try{await X.items.create({...K,organization_id:Q.organization.id,created_by:Q.auth.user?.id??null}),G+=1}catch(W){J.push({id:K.id,error:W instanceof Error?W.message:"Unknown error"})}return{created:G,errors:J}})}});function M26(Y){return Array.from(new Set(Y.map((Q)=>Q.trim().toLowerCase()).filter((Q)=>Q.length>0)))}function w26(Y){let X=Y.structuredContent?.content?.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text??"").join(`
1065
+ `,Y.enqueue(Q.encode(G)),!0}catch{return!1}}handleUnsupportedRequest(){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32000,message:"Method not allowed."},id:null}),{status:405,headers:{Allow:"GET, POST, DELETE","Content-Type":"application/json"}})}async handlePostRequest(Y,Q){try{let X=Y.headers.get("accept");if(!X?.includes("application/json")||!X.includes("text/event-stream"))return this.createJsonErrorResponse(406,-32000,"Not Acceptable: Client must accept both application/json and text/event-stream");let J=Y.headers.get("content-type");if(!J||!J.includes("application/json"))return this.createJsonErrorResponse(415,-32000,"Unsupported Media Type: Content-Type must be application/json");let G={headers:Object.fromEntries(Y.headers.entries())},K;if(Q?.parsedBody!==void 0)K=Q.parsedBody;else try{K=await Y.json()}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON")}let W;try{if(Array.isArray(K))W=K.map((L)=>lG.parse(L));else W=[lG.parse(K)]}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON-RPC message")}let Z=W.some(nJ1);if(Z){if(this._initialized&&this.sessionId!==void 0)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Server already initialized");if(W.length>1)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Only one initialization request is allowed");if(this.sessionId=this.sessionIdGenerator?.(),this._initialized=!0,this.sessionId&&this._onsessioninitialized)await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!Z){let L=this.validateSession(Y);if(L)return L;let w=this.validateProtocolVersion(Y);if(w)return w}if(!W.some(pK)){for(let L of W)this.onmessage?.(L,{authInfo:Q?.authInfo,requestInfo:G});return new Response(null,{status:202})}let $=crypto.randomUUID(),F=W.find((L)=>nJ1(L)),V=F?F.params.protocolVersion:Y.headers.get("mcp-protocol-version")??v70;if(this._enableJsonResponse)return new Promise((L)=>{this._streamMapping.set($,{resolveJson:L,cleanup:()=>{this._streamMapping.delete($)}});for(let w of W)if(pK(w))this._requestToStreamMapping.set(w.id,$);for(let w of W)this.onmessage?.(w,{authInfo:Q?.authInfo,requestInfo:G})});let B=new TextEncoder,U,z=new ReadableStream({start:(L)=>{U=L},cancel:()=>{this._streamMapping.delete($)}}),D={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(this.sessionId!==void 0)D["mcp-session-id"]=this.sessionId;for(let L of W)if(pK(L))this._streamMapping.set($,{controller:U,encoder:B,cleanup:()=>{this._streamMapping.delete($);try{U.close()}catch{}}}),this._requestToStreamMapping.set(L.id,$);await this.writePrimingEvent(U,B,$,V);for(let L of W){let w,E;if(pK(L)&&this._eventStore&&V>="2025-11-25")w=()=>{this.closeSSEStream(L.id)},E=()=>{this.closeStandaloneSSEStream()};this.onmessage?.(L,{authInfo:Q?.authInfo,requestInfo:G,closeSSEStream:w,closeStandaloneSSEStream:E})}return new Response(z,{status:200,headers:D})}catch(X){return this.onerror?.(X),this.createJsonErrorResponse(400,-32700,"Parse error",{data:String(X)})}}async handleDeleteRequest(Y){let Q=this.validateSession(Y);if(Q)return Q;let X=this.validateProtocolVersion(Y);if(X)return X;return await Promise.resolve(this._onsessionclosed?.(this.sessionId)),await this.close(),new Response(null,{status:200})}validateSession(Y){if(this.sessionIdGenerator===void 0)return;if(!this._initialized)return this.createJsonErrorResponse(400,-32000,"Bad Request: Server not initialized");let Q=Y.headers.get("mcp-session-id");if(!Q)return this.createJsonErrorResponse(400,-32000,"Bad Request: Mcp-Session-Id header is required");if(Q!==this.sessionId)return this.createJsonErrorResponse(404,-32001,"Session not found");return}validateProtocolVersion(Y){let Q=Y.headers.get("mcp-protocol-version");if(Q!==null&&!$z.includes(Q))return this.createJsonErrorResponse(400,-32000,`Bad Request: Unsupported protocol version: ${Q} (supported versions: ${$z.join(", ")})`);return}async close(){this._streamMapping.forEach(({cleanup:Y})=>{Y()}),this._streamMapping.clear(),this._requestResponseMap.clear(),this.onclose?.()}closeSSEStream(Y){let Q=this._requestToStreamMapping.get(Y);if(!Q)return;let X=this._streamMapping.get(Q);if(X)X.cleanup()}closeStandaloneSSEStream(){let Y=this._streamMapping.get(this._standaloneSseStreamId);if(Y)Y.cleanup()}async send(Y,Q){let X=Q?.relatedRequestId;if(DZ(Y)||cL(Y))X=Y.id;if(X===void 0){if(DZ(Y)||cL(Y))throw Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");let K;if(this._eventStore)K=await this._eventStore.storeEvent(this._standaloneSseStreamId,Y);let W=this._streamMapping.get(this._standaloneSseStreamId);if(W===void 0)return;if(W.controller&&W.encoder)this.writeSSEEvent(W.controller,W.encoder,Y,K);return}let J=this._requestToStreamMapping.get(X);if(!J)throw Error(`No connection established for request ID: ${String(X)}`);let G=this._streamMapping.get(J);if(!this._enableJsonResponse&&G?.controller&&G?.encoder){let K;if(this._eventStore)K=await this._eventStore.storeEvent(J,Y);this.writeSSEEvent(G.controller,G.encoder,Y,K)}if(DZ(Y)||cL(Y)){this._requestResponseMap.set(X,Y);let K=Array.from(this._requestToStreamMapping.entries()).filter(([Z,H])=>H===J).map(([Z])=>Z);if(K.every((Z)=>this._requestResponseMap.has(Z))){if(!G)throw Error(`No connection established for request ID: ${String(X)}`);if(this._enableJsonResponse&&G.resolveJson){let Z={"Content-Type":"application/json"};if(this.sessionId!==void 0)Z["mcp-session-id"]=this.sessionId;let H=K.map(($)=>this._requestResponseMap.get($));if(H.length===1)G.resolveJson(new Response(JSON.stringify(H[0]),{status:200,headers:Z}));else G.resolveJson(new Response(JSON.stringify(H),{status:200,headers:Z}))}else G.cleanup();for(let Z of K)this._requestResponseMap.delete(Z),this._requestToStreamMapping.delete(Z)}}}}var pS=k(()=>{_Q()});var US0="SELF",cn=(Y)=>{return typeof Y==="object"&&Y!==null&&"handler"in Y&&"events"in Y&&typeof Y.handler==="function"&&Array.isArray(Y.events)},zS0=(Y)=>{return typeof Y==="object"&&Y!==null&&"handler"in Y&&"events"in Y&&typeof Y.handler==="function"&&Array.isArray(Y.events)},BS0="::",DS0=(Y)=>{let Q=Y.indexOf(BS0);if(Q===-1)return null;let X=Y.substring(0,Q),J=Y.substring(Q+BS0.length);return[X,J]},mE6=(Y)=>{if(!Y.startsWith("cron/"))return null;let Q=Y.substring(5),X=Q.indexOf("/");if(X===-1)return null;let J=Q.substring(0,X),G=Q.substring(X+1);return[J,G]},OS0=(Y)=>{if(cn(Y))return[];return Object.keys(Y)},lE6=(Y,Q)=>{if(cn(Y))return Y.events;let X=Y[Q];if(!X)return[];if(zS0(X))return X.events;return Object.keys(X)},pn=(Y,Q,X)=>{if(Y===US0){if(!X)return console.warn("[Event] SELF binding used but no connectionId available"),null;return X}let J=Q[Y];if(!lV1(J))return console.warn(`[Event] Binding "${Y}" not found in state`),null;return J.value},dE6=(Y,Q,X)=>{let J=Q;if(cn(Y)){let K=[];for(let W of Y.events){let Z=DS0(W);if(!Z){console.warn(`[Event] Global handler event "${W}" must be prefixed with BINDING:: (e.g., "SELF::${W}" or "DATABASE::${W}")`);continue}let[H,$]=Z,F=pn(H,J,X);if(!F)continue;K.push({eventType:$,publisher:F})}return K}let G=[];for(let K of OS0(Y)){let W=pn(K,J,X);if(!W)continue;let Z=lE6(Y,K);for(let H of Z)G.push({eventType:H,publisher:W})}return G},pE6=(Y)=>{let Q=new Map;for(let X of Y){let J=X.source,G=Q.get(J)||[];G.push(X),Q.set(J,G)}return Q},cE6=(Y)=>{let Q=new Map;for(let X of Y){let J=X.type,G=Q.get(J)||[];G.push(X),Q.set(J,G)}return Q},nE6=(Y)=>{let Q={},X={},J=!1,G=0,K=[];for(let W of Y){if(W.results)Object.assign(X,W.results);if(W.success===!1){if(J=!0,W.error)K.push(W.error)}if(W.processedCount!==void 0)G+=W.processedCount}if(Object.keys(X).length>0)Q.results=X;if(Q.success=!J,K.length>0)Q.error=K.join("; ");if(G>0)Q.processedCount=G;return Q},iE6=async(Y,Q,X,J,G)=>{let K=J;if(cn(Y)){let F=new Set;for(let B of Y.events){let U=DS0(B);if(!U)continue;let[z,D]=U,L=pn(z,K,G);if(!L)continue;F.add(`${L}:${D}`)}let V=Q.filter((B)=>{let U=`${B.source}:${B.type}`;return F.has(U)});if(V.length===0)return{success:!0};try{return await Y.handler({events:V},X)}catch(B){return{success:!1,error:B instanceof Error?B.message:String(B)}}}let W=new Map;for(let F of OS0(Y)){let V=pn(F,K,G);if(V)W.set(V,F)}let Z=pE6(Q),H=[];for(let[F,V]of Z){let B=W.get(F);if(!B)continue;let U=Y[B];if(!U)continue;if(zS0(U)){H.push((async()=>{try{return await U.handler({events:V},X)}catch(L){let w={};for(let E of V)w[E.id]={success:!1,error:L instanceof Error?L.message:String(L)};return{results:w}}})());continue}let z=U,D=cE6(V);for(let[L,w]of D){let E=z[L];if(!E)continue;H.push((async()=>{try{let T=await E({events:w},X),C={};for(let P of w)C[P.id]=T;return{results:C}}catch(T){let C={};for(let P of w)C[P.id]={success:!1,error:T instanceof Error?T.message:String(T)};return{results:C}}})())}}let $=await Promise.all(H);if($.length===0)return{success:!0};return nE6($)},nn;var aV1=k(()=>{un();nn={subscriptions:dE6,execute:iE6,parseCron:mE6}});function l$(Y){return{...Y,execute:(Q)=>{return Y.execute({...Q,runtimeContext:cS(Q.runtimeContext)})}}}function rV1(Y){return Y&&"streamable"in Y&&Y.streamable===!0}var cS=(Y)=>{let Q=ES.getStore();if(!Q){if(Y)return Y;throw Error("Missing context, did you forget to call State.bind?")}return Q},aE6=(Y,Q)=>{let X=Q;return typeof X[Y]<"u"?X[Y]:Q?.MESH_REQUEST_CONTEXT?.state?.[Y]},rE6=({events:Y,configuration:{state:Q,scopes:X,onChange:J}={}}={})=>{let G=Q?q.toJSONSchema(Q):{type:"object",properties:{}},K=String(Y?.bus??"EVENT_BUS");return[...J||Y?[l$({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:q.object({state:Q??q.unknown(),scopes:q.array(q.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')")}),outputSchema:q.object({}),execute:async(W)=>{let Z=W.context.state;await J?.(W.runtimeContext.env,{state:Z,scopes:W.context.scopes});let H=aE6(K,W.runtimeContext.env);if(Y&&Z&&H){let $=W.runtimeContext.env.MESH_REQUEST_CONTEXT?.connectionId,F=nn.subscriptions(Y?.handlers??{},Z,$);if(await H.EVENT_SYNC_SUBSCRIPTIONS({subscriptions:F}),$){let V=F.filter((B)=>B.eventType.startsWith("cron/")&&B.publisher===$);await Promise.all(V.map(async(B)=>{let U=nn.parseCron(B.eventType);if(U){let[,z]=U;await H.EVENT_PUBLISH({type:B.eventType,cron:z})}}))}}return Promise.resolve({})}})]:[],...Y?.handlers?[l$({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:mn,outputSchema:ln,execute:async(W)=>{let Z=W.runtimeContext.env,H=Z.MESH_REQUEST_CONTEXT?.state,$=Z.MESH_REQUEST_CONTEXT?.connectionId;return nn.execute(Y.handlers,W.context.events,Z,H,$)}})]:[],l$({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:q.object({}),outputSchema:q.object({stateSchema:q.unknown(),scopes:q.array(q.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:G,scopes:[...X??[],...Y?[`${K}::EVENT_SYNC_SUBSCRIPTIONS`]:[]]})}})]},NS0=(Y)=>{let Q=async(G)=>{await Y.before?.(G);let K=new wz({name:"@deco/mcp-api",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}}}),Z=await(typeof Y.tools==="function"?Y.tools:async(B)=>{if(typeof Y.tools==="function")return await Y.tools(B);return await Promise.all(Y.tools?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);Z.push(...rE6(Y));for(let B of Z)K.registerTool(B.id,{_meta:{streamable:rV1(B),...B._meta??{}},description:B.description,annotations:B.annotations,inputSchema:B.inputSchema&&"shape"in B.inputSchema?B.inputSchema.shape:q.object({}).shape,outputSchema:rV1(B)?q.object({bytes:q.record(q.string(),q.number())}).shape:B.outputSchema&&typeof B.outputSchema==="object"&&("shape"in B.outputSchema)?B.outputSchema.shape:void 0},async(U)=>{let z=await B.execute({context:U,runtimeContext:cS()});if(rV1(B)&&z instanceof Response)return{structuredContent:{streamable:!0,status:z.status,statusText:z.statusText},content:[{type:"text",text:`Streaming response: ${z.status} ${z.statusText}`}]};return{structuredContent:z,content:[{type:"text",text:JSON.stringify(z)}]}});let $=await(typeof Y.prompts==="function"?Y.prompts:async(B)=>{if(typeof Y.prompts==="function")return await Y.prompts(B);return await Promise.all(Y.prompts?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);for(let B of $)K.registerPrompt(B.name,{title:B.title,description:B.description,argsSchema:B.argsSchema?B.argsSchema:q.object({}).shape},async(U)=>{return await B.execute({args:U,runtimeContext:cS()})});let V=await(typeof Y.resources==="function"?Y.resources:async(B)=>{if(typeof Y.resources==="function")return await Y.resources(B);return await Promise.all(Y.resources?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);for(let B of V)K.resource(B.name,B.uri,{description:B.description,mimeType:B.mimeType},async(U)=>{let z=await B.read({uri:U,runtimeContext:cS()}),D={uri:z.uri};if(z.mimeType)D.mimeType=z.mimeType;if(z.text!==void 0)return{contents:[{uri:z.uri,mimeType:z.mimeType,text:z.text}]};else if(z.blob!==void 0)return{contents:[{uri:z.uri,mimeType:z.mimeType,blob:z.blob}]};return{contents:[{uri:z.uri,mimeType:z.mimeType,text:""}]}});return{server:K,tools:Z,prompts:$,resources:V}};return{fetch:async(G,K)=>{let{server:W}=await Q(K),Z=new m$;await W.connect(Z);try{let H=await Z.handleRequest(G),$=H.headers.get("content-type");if(!($?.includes("text/event-stream")||$?.includes("application/json-rpc"))){console.debug("[MCP Transport] Closing transport for non-streaming response");try{await Z.close?.()}catch{}}else console.debug("[MCP Transport] Keeping transport open for streaming response (Content-Type: %s)",$);return H}catch(H){console.debug("[MCP Transport] Closing transport due to error:",H instanceof Error?H.message:H);try{await Z.close?.()}catch{}throw H}},callTool:async({toolCallId:G,toolCallInput:K})=>{let W=ES.getStore();if(!W)throw Error("Missing state, did you forget to call State.bind?");let Z=W?.env,{tools:H}=await Q(Z),F=H.find((V)=>V.id===G)?.execute;if(!F)throw Error(`Tool ${G} not found or does not have an execute function`);return F({context:K,runtimeContext:cS()})}}};var an=k(()=>{dS();sm();pS();m1();aV1();dV1();aV1()});var oE6=({env:Y,server:Q,url:X})=>{Y.SELF=new Proxy({},{get:(J,G)=>{if(G==="toJSON")return null;return async(K)=>{return await Q.callTool({toolCallId:G,toolCallInput:K})}}}),Y.IS_LOCAL=(X?.startsWith("http://localhost")||X?.startsWith("http://127.0.0.1"))??!1},LS0=(Y)=>()=>{return{...Y??{}}},sE6=({env:Y,server:Q,tokenOrContext:X,url:J,authToken:G})=>{let K=Y,W=G?G.split(" ")[1]:void 0,Z;if(typeof X==="string"){let H=l9(X),$=H.metadata??{};Z={authorization:W,state:H.state??$.state??{},token:X,meshUrl:H.meshUrl??$.meshUrl,connectionId:H.connectionId??$.connectionId,organizationId:H.organizationId??$.organizationId,organizationName:H.organizationName??$.organizationName,organizationSlug:H.organizationSlug??$.organizationSlug,ensureAuthenticated:LS0(H.user??H.sub)}}else if(typeof X==="object"){Z=X;let H=l9(X.token),$=H.metadata??{},F=H.appName;Z.authorization??=W,Z.callerApp=F,Z.connectionId??=H.connectionId??$.connectionId,Z.ensureAuthenticated=LS0(H.user??H.sub)}else Z={state:{},authorization:W,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return K.MESH_REQUEST_CONTEXT=Z,Z.state=gj0(Z),oE6({env:K,server:Q,url:J}),K},tE6,MS0=(Y)=>{let Q=NS0(Y),X=Y.cors??tE6,J=Y.oauth,G=J?ij0(J):null,K=async(W,Z,H)=>{let $=new URL(W.url);if(G){if($.pathname==="/.well-known/oauth-protected-resource"||$.pathname==="/mcp/.well-known/oauth-protected-resource")return G.handleProtectedResourceMetadata(W);if($.pathname==="/.well-known/oauth-authorization-server")return G.handleAuthorizationServerMetadata(W);if($.pathname==="/authorize")return G.handleAuthorize(W);if($.pathname==="/oauth/callback")return G.handleOAuthCallback(W);if($.pathname==="/token"&&W.method==="POST")return G.handleToken(W);if(($.pathname==="/register"||$.pathname==="/mcp/register")&&W.method==="POST")return G.handleClientRegistration(W)}if($.pathname==="/mcp"){if(W.method==="GET")return new Response("Method not allowed",{status:405});if(G&&!G.hasAuth(W)){let F=W.clone();try{if((await F.json())?.method!=="tools/list")return G.createUnauthorizedResponse(W)}catch{return G.createUnauthorizedResponse(W)}}return Q.fetch(W,Z,H)}if($.pathname.startsWith("/mcp/call-tool")){let F=$.pathname.split("/").pop();if(!F)return new Response("Not found",{status:404});let V=await W.json(),B=await Q.callTool({toolCallId:F,toolCallInput:V});if(B instanceof Response)return B;return new Response(JSON.stringify(B),{headers:{"Content-Type":"application/json"}})}return Y.fetch?.(W,Z,H)||new Response("Not found",{status:404})};return{fetch:async(W,Z,H)=>{if(new URL(W.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(X!==!1&&W.method==="OPTIONS")return mj0(W,X??{});let $=sE6({authToken:W.headers.get("authorization")??null,env:{...process.env,...Z},server:Q,tokenOrContext:W.headers.get("x-mesh-token")??void 0,url:W.url}),F=await ES.run({req:W,env:$,ctx:H},async()=>await K(W,$,H));if(X!==!1)return lj0(F,W,X??{});return F}}};var wS0=k(()=>{UG();un();dj0();dV1();an();an();un();uV1();tE6={origin:(Y)=>{if(Y.includes("localhost")||Y.includes("127.0.0.1"))return Y;return Y},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});function rn(Y){return Buffer.from(String(Y),"utf8").toString("base64")}function on(Y){if(!Y)return null;try{let Q=Buffer.from(Y,"base64").toString("utf8"),X=Number.parseInt(Q,10);return Number.isNaN(X)||X<0?null:X}catch{return null}}function LX(Y){if(!Y?.length)return[];return Array.from(new Set(Y.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.toLowerCase())))}function gD(Y){if(!Y)return[];return LX(Y.split(","))}function sn(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}function tn(Y){return Y?.["mcp.mesh"]??{}}function en(Y){return Y.length?Y.join(","):null}function eE6(Y,Q){if(!Q?.length)return;let X=Y;for(let J of Q){if(X===null||X===void 0)return;if(typeof X!=="object")return;X=X[J]}return X}function Y26(Y,Q,X){if(!Q)return!1;if(Q==="eq")return Y===X;if(Q==="contains"||Q==="like"){let J=String(Y??"").toLowerCase(),G=String(X??"").toLowerCase();return J.includes(G)}if(Q==="in"){if(!Array.isArray(X))return!1;return X.includes(Y)}if(Q==="gt")return Number(Y)>Number(X);if(Q==="gte")return Number(Y)>=Number(X);if(Q==="lt")return Number(Y)<Number(X);if(Q==="lte")return Number(Y)<=Number(X);return!1}function nS(Y,Q){if(!Q)return!0;if(Array.isArray(Q.conditions)&&Q.conditions.length){if(Q.operator==="and")return Q.conditions.every((X)=>nS(Y,X));if(Q.operator==="or")return Q.conditions.some((X)=>nS(Y,X));if(Q.operator==="not")return!Q.conditions.some((X)=>nS(Y,X))}return Y26(eE6(Y,Q.field),Q.operator,Q.value)}class iS{db;constructor(Y){this.db=Y}async create(Y){let Q=new Date().toISOString(),X=Y._meta??{},J=tn(X),G=LX(J.tags),K=LX(J.categories),W={id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:JSON.stringify(X),tags:en(G),categories:en(K),is_public:Y.is_public?1:0,is_unlisted:Y.is_unlisted?1:0,created_at:Q,updated_at:Q,created_by:Y.created_by??null};await this.db.insertInto("private_registry_item").values(W).execute();let Z=await this.findById(Y.organization_id,Y.id);if(!Z)throw Error(`Failed to create registry item "${Y.id}"`);return Z}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async findByIdOrName(Y,Q){let X=await this.findById(Y,Q);if(X)return X;let J=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("title","=",Q).executeTakeFirst();return J?this.deserialize(J):null}async update(Y,Q,X){let J=await this.findById(Y,Q);if(!J)throw Error(`Registry item not found: ${Q}`);let G=X._meta??J._meta??{},K=tn(G),W=LX(K.tags),Z=LX(K.categories),H={updated_at:new Date().toISOString()};if(X.title!==void 0)H.title=X.title;if(X.description!==void 0)H.description=X.description;if(X.server!==void 0)H.server_json=JSON.stringify(X.server);if(X._meta!==void 0)H.meta_json=JSON.stringify(X._meta);if(X._meta!==void 0)H.tags=en(W),H.categories=en(Z);if(X.is_public!==void 0)H.is_public=X.is_public?1:0;if(X.is_unlisted!==void 0)H.is_unlisted=X.is_unlisted?1:0;await this.db.updateTable("private_registry_item").set(H).where("organization_id","=",Y).where("id","=",Q).execute();let $=await this.findById(Y,Q);if(!$)throw Error(`Registry item not found after update: ${Q}`);return $}async delete(Y,Q){let X=await this.findById(Y,Q);if(!X)return null;return await this.db.deleteFrom("private_registry_item").where("organization_id","=",Y).where("id","=",Q).execute(),X}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).orderBy("created_at","desc");if(!Q.includeUnlisted)X=X.where("is_unlisted","=",0);let G=(await X.execute()).map((z)=>this.deserialize(z)),K=LX(Q.tags),W=LX(Q.categories),Z=G.filter((z)=>{let D=tn(z._meta),L=LX(D.tags),w=LX(D.categories),E=K.length===0||K.every((P)=>L.includes(P)),T=W.length===0||W.every((P)=>w.includes(P)),C=nS(z,Q.where);return E&&T&&C}),$=on(Q.cursor)??Q.offset??0,F=Q.limit??24,V=Z.slice($,$+F),B=$+F<Z.length,U=B?rn($+F):void 0;return{items:V,totalCount:Z.length,hasMore:B,nextCursor:U}}async listPublic(Y,Q={}){let J=(await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("is_public","=",1).where("is_unlisted","=",0).orderBy("created_at","desc").execute()).map((U)=>this.deserialize(U)),G=LX(Q.tags),K=LX(Q.categories),W=J.filter((U)=>{let z=tn(U._meta),D=LX(z.tags),L=LX(z.categories),w=G.length===0||G.every((C)=>D.includes(C)),E=K.length===0||K.every((C)=>L.includes(C)),T=nS(U,Q.where);return w&&E&&T}),H=on(Q.cursor)??Q.offset??0,$=Q.limit??24,F=W.slice(H,H+$),V=H+$<W.length,B=V?rn(H+$):void 0;return{items:F,totalCount:W.length,hasMore:V,nextCursor:B}}async getFilters(Y,Q){let X=this.db.selectFrom("private_registry_item").select(["tags","categories"]).where("organization_id","=",Y);if(Q?.publicOnly)X=X.where("is_public","=",1);if(!Q?.includeUnlisted)X=X.where("is_unlisted","=",0);let J=await X.execute(),G=new Map,K=new Map;for(let Z of J){for(let H of gD(Z.tags))G.set(H,(G.get(H)??0)+1);for(let H of gD(Z.categories))K.set(H,(K.get(H)??0)+1)}let W=(Z)=>Array.from(Z.entries()).map(([H,$])=>({value:H,count:$})).sort((H,$)=>H.value.localeCompare($.value));return{tags:W(G),categories:W(K)}}async search(Y,Q={},X){let J=this.db.selectFrom("private_registry_item").select(["id","title","description","meta_json","server_json","tags","categories","is_public","is_unlisted"]).where("organization_id","=",Y).orderBy("created_at","desc");if(X?.publicOnly)J=J.where("is_public","=",1);if(!X?.includeUnlisted)J=J.where("is_unlisted","=",0);let G=await J.execute(),K=Q.query?.trim().toLowerCase(),W=LX(Q.tags),Z=LX(Q.categories),H=G.filter((L)=>{if(K){let w=sn(L.server_json,{}),T=sn(L.meta_json,{})?.["mcp.mesh"]?.short_description??"";if(![L.id,L.title,L.description??"",w.name??"",w.description??"",T].join(" ").toLowerCase().includes(K))return!1}if(W.length>0){let w=LX(gD(L.tags));if(!W.every((E)=>w.includes(E)))return!1}if(Z.length>0){let w=LX(gD(L.categories));if(!Z.every((E)=>w.includes(E)))return!1}return!0}),F=on(Q.cursor)??0,V=Q.limit??20,B=H.slice(F,F+V),U=F+V<H.length,z=U?rn(F+V):void 0;return{items:B.map((L)=>({id:L.id,title:L.title,tags:gD(L.tags),categories:gD(L.categories),is_public:L.is_public===1,is_unlisted:L.is_unlisted===1})),totalCount:H.length,hasMore:U,nextCursor:z}}deserialize(Y){let Q=sn(Y.server_json,{}),X=sn(Y.meta_json,{});return{id:Y.id,name:typeof Q.name==="string"?Q.name:void 0,title:Y.title,description:Y.description,_meta:X,server:Q,is_public:Y.is_public===1,is_unlisted:Y.is_unlisted===1,created_at:Y.created_at,updated_at:Y.updated_at,...Y.created_by?{created_by:Y.created_by}:{}}}}var oV1=()=>{};var Yi,Q26,Qi,lZ,sV1,X26,pq,MA,AG,uD,tV1,AS0,eV1,PS0,Yq1,ES0,Qq1,TS0,wA,J26,aS,G26,Xi,Xq1,CS0,RS0,Jq1,IS0,jS0,SS0,kS0,vS0,_S0,yS0,fS0,W26,Gq1,bS0,hS0,Wq1,xS0;var cY=k(()=>{wG();m1();Yi=q.object({name:q.string(),title:q.string().optional(),description:q.string().optional(),version:q.string().optional(),websiteUrl:q.string().optional(),icons:q.array(q.object({src:q.string()})).optional(),remotes:q.array(q.object({type:q.string().optional(),url:q.string().optional(),name:q.string().optional(),title:q.string().optional(),description:q.string().optional()})).optional(),packages:q.array(q.object({identifier:q.string(),version:q.string().optional()})).optional(),repository:q.object({url:q.string().optional(),source:q.string().optional(),subfolder:q.string().optional()}).optional()}),Q26=q.object({name:q.string(),description:q.string().nullable().optional()}),Qi=q.object({"mcp.mesh":q.object({verified:q.boolean().optional(),tags:q.array(q.string()).optional(),categories:q.array(q.string()).optional(),friendly_name:q.string().nullable().optional(),short_description:q.string().max(160).nullable().optional(),owner:q.string().nullable().optional(),readme:q.string().max(50000).nullable().optional(),readme_url:q.string().url().nullable().optional(),has_remote:q.boolean().optional(),has_oauth:q.boolean().optional(),tools:q.array(Q26).optional()}).optional()}).catchall(q.unknown()),lZ=q.object({id:q.string(),name:q.string().optional(),title:q.string(),description:q.string().nullable().optional(),_meta:Qi.optional(),server:Yi,is_public:q.boolean().optional(),created_at:q.string(),updated_at:q.string(),created_by:q.string().optional()}),sV1=q.object({id:q.string(),title:q.string(),description:q.string().nullable().optional(),_meta:Qi.optional(),server:Yi,is_public:q.boolean().optional()}),X26=q.object({title:q.string().optional(),description:q.string().nullable().optional(),_meta:Qi.optional(),server:Yi.optional(),is_public:q.boolean().optional()}),pq=mZ.extend({tags:q.array(q.string()).optional().describe("Filter by tags (AND semantics)"),categories:q.array(q.string()).optional().describe("Filter by categories (AND semantics)"),cursor:q.string().optional().describe("Pagination cursor")}).describe("List registry items with optional filtering and pagination."),MA=q.object({items:q.array(lZ),totalCount:q.number(),hasMore:q.boolean().optional(),nextCursor:q.string().optional()}),AG=q.object({id:q.string().optional().describe("Registry item ID"),name:q.string().optional().describe("Registry item name (alias for id)")}).refine((Y)=>Y.id||Y.name,{message:"At least one of 'id' or 'name' is required"}).describe("Get a registry item by ID or name."),uD=q.object({item:lZ.nullable()}),tV1=q.object({data:sV1}),AS0=q.object({item:lZ}),eV1=q.object({items:q.array(sV1).min(1)}),PS0=q.object({created:q.number(),errors:q.array(q.object({id:q.string(),error:q.string()}))}),Yq1=q.object({id:q.string(),data:X26}),ES0=q.object({item:lZ}),Qq1=q.object({id:q.string()}),TS0=q.object({item:lZ}),wA=q.object({tags:q.array(q.object({value:q.string(),count:q.number()})),categories:q.array(q.object({value:q.string(),count:q.number()}))}),J26=q.enum(["description","short_description","tags","categories","readme"]),aS=q.object({query:q.string().optional().describe("Free-text search across id, title, description, server name"),tags:q.array(q.string()).optional().describe("Filter by tags (AND)"),categories:q.array(q.string()).optional().describe("Filter by categories (AND)"),limit:q.number().int().min(1).max(100).optional().describe("Max results (default 20)"),cursor:q.string().optional().describe("Pagination cursor")}).describe("Lightweight search returning minimal fields (id, title, tags, categories, is_public)."),G26=q.object({id:q.string(),title:q.string(),tags:q.array(q.string()),categories:q.array(q.string()),is_public:q.boolean()}),Xi=q.object({items:q.array(G26),totalCount:q.number(),hasMore:q.boolean().optional(),nextCursor:q.string().optional()}),Xq1=q.object({type:J26.describe("Which content to generate"),llmConnectionId:q.string().describe("Connection ID of a language model"),modelId:q.string().describe("Model ID to use"),context:q.object({name:q.string().optional(),provider:q.string().optional(),url:q.string().optional(),owner:q.string().optional(),repositoryUrl:q.string().optional(),description:q.string().optional(),shortDescription:q.string().optional(),tags:q.array(q.string()).optional(),categories:q.array(q.string()).optional(),availableTags:q.array(q.string()).optional(),availableCategories:q.array(q.string()).optional(),tools:q.array(q.object({name:q.string(),description:q.string().nullable().optional()})).optional()})}),CS0=q.object({result:q.string().optional(),items:q.array(q.string()).optional()}),RS0=q.enum(["pending","approved","rejected"]),Jq1=q.object({id:q.string(),organization_id:q.string(),requested_id:q.string().nullable().optional(),status:RS0,title:q.string(),description:q.string().nullable().optional(),_meta:Qi.optional(),server:Yi,requester_name:q.string().nullable().optional(),requester_email:q.string().nullable().optional(),reviewer_notes:q.string().nullable().optional(),created_at:q.string(),updated_at:q.string()}),IS0=q.object({status:RS0.optional(),limit:q.number().int().min(1).max(200).optional(),offset:q.number().int().min(0).optional(),sortBy:q.enum(["created_at","title"]).optional(),sortDirection:q.enum(["asc","desc"]).optional()}),jS0=q.object({items:q.array(Jq1),totalCount:q.number()}),SS0=q.object({id:q.string(),status:q.enum(["approved","rejected"]),reviewerNotes:q.string().nullable().optional()}),kS0=q.object({item:Jq1}),vS0=q.object({pending:q.number()}),_S0=q.object({id:q.string()}),yS0=q.object({item:Jq1.nullable()}),fS0=q.object({data:sV1,requester:q.object({name:q.string().optional(),email:q.string().email().optional()}).optional()}),W26=q.object({id:q.string(),name:q.string(),prefix:q.string(),createdAt:q.string()}),Gq1=q.object({name:q.string().min(1).max(64).describe("A descriptive name for this key")}),bS0=q.object({id:q.string(),name:q.string(),prefix:q.string(),key:q.string().describe("The full API key \u2014 shown only once!"),createdAt:q.string()}),hS0=q.object({items:q.array(W26)}),Wq1=q.object({keyId:q.string()}),xS0=q.object({success:q.boolean(),keyId:q.string()})});function Z26(Y,Q){let X=l$({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",inputSchema:pq,outputSchema:MA,execute:async({context:Z})=>{return await Y.listPublic(Q,{limit:Z.limit,offset:Z.offset,cursor:Z.cursor,tags:Z.tags,categories:Z.categories,where:Z.where})}}),J=l$({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",inputSchema:AG,outputSchema:uD,execute:async({context:Z})=>{let H=Z.id??Z.name;if(!H)return{item:null};let $=await Y.findByIdOrName(Q,H);if($&&$.is_public)return{item:$};return{item:null}}}),G=l$({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",inputSchema:AG,outputSchema:q.object({versions:q.array(uD.shape.item)}),execute:async({context:Z})=>{let H=Z.id??Z.name;if(!H)return{versions:[]};let $=await Y.findByIdOrName(Q,H);if($&&$.is_public)return{versions:[$]};return{versions:[]}}}),K=l$({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",inputSchema:aS,outputSchema:Xi,execute:async({context:Z})=>{return await Y.search(Q,Z,{publicOnly:!0})}}),W=l$({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",inputSchema:q.object({}),outputSchema:wA,execute:async()=>{return await Y.getFilters(Q,{publicOnly:!0})}});return[X,K,J,G,W]}function Zq1(Y,Q){let X=Q.db,J=new iS(X);Y.all("/org/:orgSlug/registry/*",async(G)=>{let K=G.req.param("orgSlug");console.log(`[Public Registry MCP] Request for org slug: ${K}, path: ${G.req.path}`);let W=await X.selectFrom("organization").select(["id","slug","name"]).where("slug","=",K).executeTakeFirst();if(console.log("[Public Registry MCP] Found org:",W),!W)return console.log(`[Public Registry MCP] Organization not found: ${K}`),G.json({error:"Organization not found"},404);let Z=Z26(J,W.id),H=MS0({tools:()=>Z}),$=new URL(G.req.url),F=G.req.path.replace(`/org/${K}/registry`,""),V=new URL(F||"/",$.origin);$.searchParams.forEach((z,D)=>{V.searchParams.set(D,z)}),console.log(`[Public Registry MCP] Rewriting ${$.pathname} to ${V.pathname}`);let B=new Request(V.toString(),{method:G.req.method,headers:G.req.raw.headers,body:G.req.method!=="GET"&&G.req.method!=="HEAD"?G.req.raw.body:void 0}),U={organizationId:W.id,db:X,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await H.fetch(B,U,G)})}var gS0=k(()=>{wS0();an();m1();oV1();cY()});import{randomUUID as K26}from"crypto";function uS0(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}class rS{db;constructor(Y){this.db=Y}async createOrUpdate(Y){let Q=new Date().toISOString(),X=await this.findPendingByRequestedId(Y.organization_id,Y.requested_id);if(X){let W={title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:Y._meta?JSON.stringify(Y._meta):null,requester_name:Y.requester_name??null,requester_email:Y.requester_email??null,updated_at:Q};await this.db.updateTable("private_registry_publish_request").set(W).where("organization_id","=",Y.organization_id).where("id","=",X.id).execute();let Z=await this.findById(Y.organization_id,X.id);if(!Z)throw Error("Failed to update publish request");return Z}let J=K26(),G={id:J,organization_id:Y.organization_id,requested_id:Y.requested_id,status:"pending",title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:Y._meta?JSON.stringify(Y._meta):null,requester_name:Y.requester_name??null,requester_email:Y.requester_email??null,reviewer_notes:null,created_at:Q,updated_at:Q};await this.db.insertInto("private_registry_publish_request").values(G).execute();let K=await this.findById(Y.organization_id,J);if(!K)throw Error("Failed to create publish request");return K}async findPendingByRequestedId(Y,Q){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y).where("requested_id","=",Q).where("status","=","pending").executeTakeFirst();return X?this.deserialize(X):null}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y),J=this.db.selectFrom("private_registry_publish_request").select(($)=>$.fn.countAll().as("count")).where("organization_id","=",Y);if(Q.status)X=X.where("status","=",Q.status),J=J.where("status","=",Q.status);let G=await J.executeTakeFirst(),K=Number(G?.count??0),W=Q.sortBy??"created_at",Z=Q.sortDirection??"desc";if(W==="title")X=X.orderBy("title",Z);else X=X.orderBy("created_at",Z);return{items:(await X.limit(Q.limit??24).offset(Q.offset??0).execute()).map(($)=>this.deserialize($)),totalCount:K}}async updateStatus(Y,Q,X,J){let G={status:X,updated_at:new Date().toISOString(),reviewer_notes:J??null};await this.db.updateTable("private_registry_publish_request").set(G).where("organization_id","=",Y).where("id","=",Q).execute();let K=await this.findById(Y,Q);if(!K)throw Error(`Publish request not found: ${Q}`);return K}async countPending(Y){let Q=await this.db.selectFrom("private_registry_publish_request").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",Y).where("status","=","pending").executeTakeFirst();return Number(Q?.count??0)}async delete(Y,Q){let X=await this.findById(Y,Q);if(!X)return null;return await this.db.deleteFrom("private_registry_publish_request").where("organization_id","=",Y).where("id","=",Q).execute(),X}deserialize(Y){return{id:Y.id,organization_id:Y.organization_id,requested_id:Y.requested_id??null,status:Y.status,title:Y.title,description:Y.description,_meta:uS0(Y.meta_json,{}),server:uS0(Y.server_json,{name:""}),requester_name:Y.requester_name,requester_email:Y.requester_email,reviewer_notes:Y.reviewer_notes,created_at:Y.created_at,updated_at:Y.updated_at}}}var Kq1=()=>{};import{randomUUID as H26}from"crypto";async function mS0(Y){let X=new TextEncoder().encode(Y),J=await crypto.subtle.digest("SHA-256",X);return Array.from(new Uint8Array(J)).map((K)=>K.toString(16).padStart(2,"0")).join("")}function $26(){let Y=new Uint8Array(32);return crypto.getRandomValues(Y),`prk_${Array.from(Y).map((X)=>X.toString(16).padStart(2,"0")).join("")}`}class oS{db;constructor(Y){this.db=Y}async generate(Y,Q){let X=H26(),J=$26(),G=await mS0(J),K=J.slice(0,12),W=new Date().toISOString();return await this.db.insertInto("private_registry_publish_api_key").values({id:X,organization_id:Y,name:Q,key_hash:G,prefix:K,created_at:W}).execute(),{entity:{id:X,organization_id:Y,name:Q,prefix:K,created_at:W},key:J}}async list(Y){return await this.db.selectFrom("private_registry_publish_api_key").select(["id","organization_id","name","prefix","created_at"]).where("organization_id","=",Y).orderBy("created_at","desc").execute()}async revoke(Y,Q){return(await this.db.deleteFrom("private_registry_publish_api_key").where("organization_id","=",Y).where("id","=",Q).execute()).length>0}async validate(Y,Q){let X=await mS0(Q),J=await this.db.selectFrom("private_registry_publish_api_key").select(["id"]).where("organization_id","=",Y).where("key_hash","=",X).executeTakeFirst();return Boolean(J)}async hasKeys(Y){let Q=await this.db.selectFrom("private_registry_publish_api_key").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",Y).executeTakeFirst();return Number(Q?.count??0)>0}}var Hq1=()=>{};import{sql as F26}from"kysely";import{randomUUID as lS0}from"crypto";async function q26(Y){let Q=new Date().toISOString(),X=lS0(),J=IY.SELF(Y.organizationId),G="registry.publish_request.created",K={requestId:Y.request.id,requestedId:Y.request.requested_id,title:Y.request.title,status:Y.request.status,createdAt:Y.request.created_at,requester:{name:Y.request.requester_name,email:Y.request.requester_email}};await Y.db.insertInto("events").values({id:X,organization_id:Y.organizationId,type:"registry.publish_request.created",source:J,specversion:"1.0",subject:Y.request.id,time:Q,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(K),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Q,updated_at:Q}).execute();let W=await Y.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",Y.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((Z)=>Z.or([Z("publisher","is",null),Z("publisher","=",J)])).execute();if(W.length>0)await Y.db.insertInto("event_deliveries").values(W.map((Z)=>({id:lS0(),event_id:X,subscription_id:Z.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Q}))).execute();try{await F26`SELECT pg_notify('mesh_events', ${X})`.execute(Y.db)}catch{}}async function B26(Y,Q){let J=(await Y.selectFrom("organization").select(["id"]).where("id","=",Q).execute())[0];if(J?.id)return J.id;return(await Y.selectFrom("organization").select(["id"]).where("slug","=",Q).execute())[0]?.id??null}async function U26(Y,Q){let X=await Y.selectFrom("project_plugin_configs").innerJoin("projects","projects.id","project_plugin_configs.project_id").select(["project_plugin_configs.settings as settings"]).where("projects.organization_id","=",Q).where("project_plugin_configs.plugin_id","=",fH).execute();for(let J of X){let G=J.settings,K=typeof G==="string"?(()=>{try{return JSON.parse(G)}catch{return{}}})():G??{};if(K.acceptPublishRequests===!0){let W=K.rateLimitWindow==="minute"?"minute":"hour",Z=K.rateLimitMax,H=typeof Z==="number"&&Number.isFinite(Z)&&Z>=1?Math.floor(Z):pS0;return{acceptPublishRequests:!0,requireApiToken:K.requireApiToken===!0,rateLimitEnabled:K.rateLimitEnabled===void 0?dS0:K.rateLimitEnabled===!0,rateLimitWindow:W,rateLimitMax:H}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:dS0,rateLimitWindow:V26,rateLimitMax:pS0}}async function z26(Y,Q,X){let J=X==="minute"?60000:3600000,G=new Date(Date.now()-J).toISOString(),K=await Y.selectFrom("private_registry_publish_request").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",Q).where("created_at",">=",G).executeTakeFirst();return Number(K?.count??0)}async function D26(Y,Q,X,J){let G=await Y.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",Q).where((K)=>K.or([K("id","=",X),K("title","=",J)])).executeTakeFirst();return G?{id:String(G.id),title:String(G.title)}:null}function $q1(Y,Q){let{db:X,db:J}=Q,G=new rS(J),K=new oS(J);Y.post("/org/:orgRef/registry/publish-request",async(W)=>{let Z=W.req.param("orgRef"),H=await B26(X,Z);if(!H)return W.json({error:"Organization not found"},404);let $=await U26(X,H);if(!$.acceptPublishRequests)return W.json({error:"Publish requests are not enabled for this registry."},403);if($.requireApiToken){let z=W.req.header("Authorization"),D=z?.startsWith("Bearer ")?z.slice(7).trim():null;if(!D)return W.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await K.validate(H,D))return W.json({error:"Invalid API key"},401)}if($.rateLimitEnabled){if(await z26(J,H,$.rateLimitWindow)>=$.rateLimitMax)return W.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:$.rateLimitWindow==="minute"?60:3600},429)}let F;try{F=await W.req.json()}catch{return W.json({error:"Invalid JSON body"},400)}let V=fS0.safeParse(F);if(!V.success)return W.json({error:"Invalid publish request payload",details:q.treeifyError(V.error)},400);let B=await D26(J,H,V.data.data.id,V.data.data.title);if(B)return W.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:B},409);let U=await G.createOrUpdate({organization_id:H,requested_id:V.data.data.id,title:V.data.data.title,description:V.data.data.description??null,_meta:V.data.data._meta,server:V.data.data.server,requester_name:V.data.requester?.name??null,requester_email:V.data.requester?.email??null});try{await q26({db:X,organizationId:H,request:U})}catch(z){console.warn("[private-registry] failed to emit publish-request event:",z)}return W.json({id:U.id,requested_id:U.requested_id,status:U.status},201)})}var dS0=!0,V26="hour",pS0=100;var cS0=k(()=>{KY();m1();fD();Kq1();Hq1();cY()});var nS0=k(()=>{gS0();cS0()});function iS0(Y){Fq1=Y}function k4(){if(!Fq1)throw Error(`Plugin storage not initialized. Make sure the "${fH}" plugin is enabled.`);return Fq1}async function O26(Y){if(!Y.organization)throw Error("Organization context required");return await Y.access.check(),Y}function W6(Y,Q){return async(X,J)=>{let G=await O26(J);return Q(X,G)}}function N26(Y){if(!Y)return{};if(typeof Y==="string")try{return JSON.parse(Y)}catch{return{}}if(typeof Y==="object")return Y;return{}}async function sS(Y,Q){let J=(await Y.db.selectFrom("project_plugin_configs").innerJoin("projects","projects.id","project_plugin_configs.project_id").select(["project_plugin_configs.settings as settings"]).where("projects.organization_id","=",Q).where("project_plugin_configs.plugin_id","=",fH).execute()).map((K)=>N26(K.settings)),G={acceptPublishRequests:J.some((K)=>K.acceptPublishRequests===!0),requireApiToken:J.some((K)=>K.requireApiToken===!0),storePrivateOnly:J.some((K)=>K.storePrivateOnly===!0)};if(G.acceptPublishRequests||G.requireApiToken||G.storePrivateOnly)return G;for(let K of J)if(Object.keys(K).length>0)return K;return{}}var Fq1=null;var W9=k(()=>{fD()});import{randomUUID as aS0}from"crypto";function rS0(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}class Vq1{db;constructor(Y){this.db=Y}async create(Y){let Q=aS0(),X=new Date().toISOString(),J={id:Q,organization_id:Y.organization_id,status:Y.status??"pending",config_snapshot:Y.config_snapshot?JSON.stringify(Y.config_snapshot):null,total_items:Y.total_items??0,tested_items:0,passed_items:0,failed_items:0,skipped_items:0,current_item_id:null,started_at:Y.started_at??null,finished_at:null,created_at:X};await this.db.insertInto("private_registry_monitor_run").values(J).execute();let G=await this.findById(Y.organization_id,Q);if(!G)throw Error(`Failed to create monitor run ${Q}`);return G}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserializeRun(X):null}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",Y),J=this.db.selectFrom("private_registry_monitor_run").select((Z)=>Z.fn.countAll().as("count")).where("organization_id","=",Y);if(Q.status)X=X.where("status","=",Q.status),J=J.where("status","=",Q.status);let G=await J.executeTakeFirst(),K=Number(G?.count??0);return{items:(await X.orderBy("created_at","desc").limit(Q.limit??24).offset(Q.offset??0).execute()).map((Z)=>this.deserializeRun(Z)),totalCount:K}}async update(Y,Q,X){let J={};if(X.total_items!==void 0)J.total_items=X.total_items;if(X.status!==void 0)J.status=X.status;if(X.tested_items!==void 0)J.tested_items=X.tested_items;if(X.passed_items!==void 0)J.passed_items=X.passed_items;if(X.failed_items!==void 0)J.failed_items=X.failed_items;if(X.skipped_items!==void 0)J.skipped_items=X.skipped_items;if(X.current_item_id!==void 0)J.current_item_id=X.current_item_id;if(X.started_at!==void 0)J.started_at=X.started_at;if(X.finished_at!==void 0)J.finished_at=X.finished_at;await this.db.updateTable("private_registry_monitor_run").set(J).where("organization_id","=",Y).where("id","=",Q).execute();let G=await this.findById(Y,Q);if(!G)throw Error(`Monitor run not found: ${Q}`);return G}deserializeRun(Y){return{id:Y.id,organization_id:Y.organization_id,status:Y.status,config_snapshot:rS0(Y.config_snapshot,null),total_items:Number(Y.total_items??0),tested_items:Number(Y.tested_items??0),passed_items:Number(Y.passed_items??0),failed_items:Number(Y.failed_items??0),skipped_items:Number(Y.skipped_items??0),current_item_id:Y.current_item_id,started_at:Y.started_at,finished_at:Y.finished_at,created_at:Y.created_at}}}class qq1{db;constructor(Y){this.db=Y}async create(Y){let Q=aS0(),X=new Date().toISOString(),J={id:Q,run_id:Y.run_id,organization_id:Y.organization_id,item_id:Y.item_id,item_title:Y.item_title,status:Y.status,error_message:Y.error_message??null,connection_ok:Y.connection_ok?1:0,tools_listed:Y.tools_listed?1:0,tool_results:Y.tool_results?JSON.stringify(Y.tool_results):null,agent_summary:Y.agent_summary??null,duration_ms:Y.duration_ms??0,action_taken:Y.action_taken??"none",tested_at:X};await this.db.insertInto("private_registry_monitor_result").values(J).execute();let G=await this.findById(Y.organization_id,Q);if(!G)throw Error("Failed to create test result");return G}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async listByRun(Y,Q,X={}){let J=this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",Y).where("run_id","=",Q),G=this.db.selectFrom("private_registry_monitor_result").select((H)=>H.fn.countAll().as("count")).where("organization_id","=",Y).where("run_id","=",Q);if(X.status)J=J.where("status","=",X.status),G=G.where("status","=",X.status);let K=await G.executeTakeFirst(),W=Number(K?.count??0);return{items:(await J.orderBy("tested_at","desc").limit(X.limit??50).offset(X.offset??0).execute()).map((H)=>this.deserialize(H)),totalCount:W}}async update(Y,Q,X){let J={};if(X.status!==void 0)J.status=X.status;if(X.error_message!==void 0)J.error_message=X.error_message;if(X.connection_ok!==void 0)J.connection_ok=X.connection_ok?1:0;if(X.tools_listed!==void 0)J.tools_listed=X.tools_listed?1:0;if(X.tool_results!==void 0)J.tool_results=JSON.stringify(X.tool_results);if(X.agent_summary!==void 0)J.agent_summary=X.agent_summary;if(X.duration_ms!==void 0)J.duration_ms=X.duration_ms;if(X.action_taken!==void 0)J.action_taken=X.action_taken;await this.db.updateTable("private_registry_monitor_result").set(J).where("organization_id","=",Y).where("id","=",Q).execute();let G=await this.findById(Y,Q);if(!G)throw Error(`Monitor result not found: ${Q}`);return G}deserialize(Y){return{id:Y.id,run_id:Y.run_id,organization_id:Y.organization_id,item_id:Y.item_id,item_title:Y.item_title,status:Y.status,error_message:Y.error_message,connection_ok:Y.connection_ok===1,tools_listed:Y.tools_listed===1,tool_results:rS0(Y.tool_results,[]),agent_summary:Y.agent_summary,duration_ms:Number(Y.duration_ms??0),action_taken:Y.action_taken,tested_at:Y.tested_at}}}var oS0=()=>{};import{randomUUID as L26}from"crypto";class Bq1{db;constructor(Y){this.db=Y}async findByItemId(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).where("item_id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async list(Y){return(await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).orderBy("updated_at","desc").execute()).map((X)=>this.deserialize(X))}async findByConnectionId(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).where("connection_id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async upsert(Y){let Q=await this.findByItemId(Y.organization_id,Y.item_id),X=new Date().toISOString();if(!Q){let G={id:L26(),organization_id:Y.organization_id,item_id:Y.item_id,connection_id:Y.connection_id,auth_status:Y.auth_status??"none",created_at:X,updated_at:X};await this.db.insertInto("private_registry_monitor_connection").values(G).execute()}else{let G={connection_id:Y.connection_id,auth_status:Y.auth_status??Q.auth_status,updated_at:X};await this.db.updateTable("private_registry_monitor_connection").set(G).where("organization_id","=",Y.organization_id).where("item_id","=",Y.item_id).execute()}let J=await this.findByItemId(Y.organization_id,Y.item_id);if(!J)throw Error("Failed to save monitor connection");return J}async updateAuthStatus(Y,Q,X){return await this.db.updateTable("private_registry_monitor_connection").set({auth_status:X,updated_at:new Date().toISOString()}).where("organization_id","=",Y).where("item_id","=",Q).execute(),this.findByItemId(Y,Q)}deserialize(Y){return{id:Y.id,organization_id:Y.organization_id,item_id:Y.item_id,connection_id:Y.connection_id,auth_status:Y.auth_status,created_at:Y.created_at,updated_at:Y.updated_at}}}var sS0=()=>{};function tS0(Y){let Q=Y.db,X={items:new iS(Q),publishRequests:new rS(Q),publishApiKeys:new oS(Q),monitorRuns:new Vq1(Q),monitorResults:new qq1(Q),monitorConnections:new Bq1(Q)};return iS0(X),X}var eS0=k(()=>{W9();oV1();Kq1();Hq1();oS0();sS0()});var Yk0;var Qk0=k(()=>{cY();W9();Yk0={name:"REGISTRY_ITEM_BULK_CREATE",description:"Create many private registry items at once",inputSchema:eV1,outputSchema:PS0,handler:W6(eV1,async(Y,Q)=>{let X=k4(),J=[],G=0;for(let K of Y.items)try{await X.items.create({...K,organization_id:Q.organization.id,created_by:Q.auth.user?.id??null}),G+=1}catch(W){J.push({id:K.id,error:W instanceof Error?W.message:"Unknown error"})}return{created:G,errors:J}})}});function M26(Y){return Array.from(new Set(Y.map((Q)=>Q.trim().toLowerCase()).filter((Q)=>Q.length>0)))}function w26(Y){let X=Y.structuredContent?.content?.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text??"").join(`
1066
1066
  `).trim();if(X)return X;return Y.content?.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text??"").join(`
1067
1067
  `).trim()??""}function A26(Y){let Q=Y.context,X=JSON.stringify({name:Q.name??"",provider:Q.provider??"",url:Q.url??"",owner:Q.owner??"",repositoryUrl:Q.repositoryUrl??"",description:Q.description??"",shortDescription:Q.shortDescription??"",tags:Q.tags??[],categories:Q.categories??[],availableTags:Q.availableTags??[],availableCategories:Q.availableCategories??[],tools:Q.tools??[]},null,2);if(Y.type==="description")return{system:"You are an assistant that writes concise MCP registry descriptions.",user:`Use the context below to write a clear English description for this MCP server.
1068
1068
  Rules:
@@ -1148,7 +1148,7 @@ Hint: Configure a valid Google account email in Monitor Configuration > Contexto
1148
1148
 
1149
1149
  `).trim(),B=F.length>0?`Not executed tools (${F.length}/${Y.tools.length}): ${F.join(", ")}`:"",U=[V,B].filter((z)=>z.length>0).join(`
1150
1150
 
1151
- `);return{toolResults:H,agentSummary:U.length>0?U:null,unexecutedTools:F}}finally{await Q.close?.().catch(()=>{})}}async function eB1(Y,Q){let X=k4(),J=Y.organization.id,G=await X.monitorConnections.findByItemId(J,Q.id);if(G){if(await Y.storage.connections.findById(G.connection_id,J))return G.connection_id}let K=Lv6(Q);if(!K)throw Error(`Registry item ${Q.id} has no remote URL`);let W=Ov6(Y),Z=Nv6(Q),H=await Y.storage.connections.create({organization_id:J,created_by:W,title:`[Monitor] ${Q.title}`,description:`Auto-created monitor connection for ${Q.id}`,app_name:"private-registry-monitor",app_id:`${fH}:monitor`,connection_type:Z,connection_url:K,metadata:{monitorConnection:!0,registryItemId:Q.id,pluginId:fH}});return await X.monitorConnections.upsert({organization_id:J,item_id:Q.id,connection_id:H.id,auth_status:"none"}),H.id}async function jv6(Y){let Q=k4();switch(Y.action){case"unlisted":return await Q.items.update(Y.organizationId,Y.item.id,{is_unlisted:!0}),"unlisted";case"remove_public":return await Q.items.update(Y.organizationId,Y.item.id,{is_public:!1}),"removed_public";case"remove_private":case"remove_all":return await Q.items.delete(Y.organizationId,Y.item.id),Y.action==="remove_all"?"removed_all":"removed_private";default:return"none"}}async function Sv6(Y){let Q=Date.now();if(Y.signal.aborted)throw Error("Run cancelled");let X="passed",J=!1,G=!1,K=null,W="none",Z=null,H=[],$=null,F=async()=>{await Y.onProgress?.({status:X,connectionOk:J,toolsListed:G,toolResults:[...H],agentSummary:Z,errorMessage:K,actionTaken:W,durationMs:Date.now()-Q})};try{let V=await eB1(Y.ctx,Y.item);$=await Y.ctx.createMCPProxy(V),J=!0;let U=(await Lk($.listTools?$.listTools():Promise.resolve({tools:[]}),Y.monitorConfig.perMcpTimeoutMs,`listTools ${Y.item.id}`)).tools??[];if(G=!0,Y.monitorConfig.monitorMode!=="health_check")H.push(...U.map((z)=>tB1(z.name))),await F();if(Y.monitorConfig.monitorMode==="full_agent"){let z=await Iv6({ctx:Y.ctx,monitorConfig:Y.monitorConfig,item:Y.item,proxy:$,tools:U,signal:Y.signal,onProgress:async(D)=>{H.length=0,H.push(...jh0({discoveredTools:U,executedResults:D})),X=D.some((L)=>!L.success)?"failed":"passed",await F()}});if(H.length=0,H.push(...jh0({discoveredTools:U,executedResults:z.toolResults})),Z=z.agentSummary,z.toolResults.some((D)=>!D.success))X="failed";if(z.unexecutedTools.length>0){if(X="failed",!K)K=`Agent skipped ${z.unexecutedTools.length} tool(s): ${z.unexecutedTools.join(", ")}`}}else if(Y.monitorConfig.monitorMode!=="health_check"){for(let z=0;z<U.length;z++){let D=U[z];if(!D||Y.signal.aborted)throw Error("Run cancelled");let L=Date.now();try{let w={},E=await Lk($.callTool({name:D.name,arguments:w}),Y.monitorConfig.perToolTimeoutMs,`tool ${D.name}`),T=!E.isError,C=Date.now()-L;Sh0(H,{toolName:D.name,success:T,input:w,durationMs:C,outputPreview:bh0(E.structuredContent??E.content),error:T?null:ti(E.content?.find((P)=>P.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await F()}catch(w){let E=Date.now()-L,T=w instanceof Error?w.message:String(w);Sh0(H,{toolName:D.name,success:!1,durationMs:E,error:ti(T)}),await F()}}if(H.some((z)=>!z.success))X="failed"}else for(let z of U)H.push(tB1(z.name));if(Y.canApplyFailureAction&&X==="failed"&&Y.monitorConfig.onFailure!=="none")W=await jv6({organizationId:Y.organizationId,item:Y.item,action:Y.monitorConfig.onFailure})}catch(V){if(K=V instanceof Error?V.message:String(V),Mv6(V))X="needs_auth",await k4().monitorConnections.updateAuthStatus(Y.organizationId,Y.item.id,"needs_auth");else X="error"}finally{await $?.close?.().catch(()=>{})}return{status:X,connectionOk:J,toolsListed:G,toolResults:H,agentSummary:Z,errorMessage:K,actionTaken:W,durationMs:Date.now()-Q}}async function kv6(Y){let Q=Date.now(),X=k4(),G=(await X.items.list(Y.organizationId,{includeUnlisted:!0})).items.filter((B)=>{if(Y.monitorConfig.testPublicOnly&&!B.is_public)return!1;if(Y.monitorConfig.testPrivateOnly&&B.is_public)return!1;return!0}),K=Y.monitorConfig.includePendingRequests?(await X.publishRequests.list(Y.organizationId,{status:"pending",limit:500})).items.map((B)=>vv6(B)):[],W=[...G.map((B)=>({item:B,source:"registry_item"})),...K.map((B)=>({item:B,source:"publish_request"}))];if(W.length===0){await X.monitorRuns.update(Y.organizationId,Y.runId,{total_items:0,status:"completed",started_at:new Date().toISOString(),finished_at:new Date().toISOString()}),await oi({ctx:Y.ctx,type:"registry.monitor.completed",subject:Y.runId,data:{runId:Y.runId,total:0}});return}await X.monitorRuns.update(Y.organizationId,Y.runId,{total_items:W.length,status:"running",started_at:new Date().toISOString()});let Z=0,H=0,$=0,F=0;for(let B=0;B<W.length;B++){let U=W[B],z=U?.item;if(!z||Y.signal.aborted){await X.monitorRuns.update(Y.organizationId,Y.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()});return}await X.monitorRuns.update(Y.organizationId,Y.runId,{current_item_id:z.id});let D=null,L=async(E)=>{if(!D){D=(await X.monitorResults.create({run_id:Y.runId,organization_id:Y.organizationId,item_id:z.id,item_title:z.title,status:E.status,error_message:E.errorMessage,connection_ok:E.connectionOk,tools_listed:E.toolsListed,tool_results:E.toolResults,agent_summary:E.agentSummary,duration_ms:E.durationMs,action_taken:E.actionTaken})).id;return}await X.monitorResults.update(Y.organizationId,D,{status:E.status,error_message:E.errorMessage,connection_ok:E.connectionOk,tools_listed:E.toolsListed,tool_results:E.toolResults,agent_summary:E.agentSummary,duration_ms:E.durationMs,action_taken:E.actionTaken})},w=await Sv6({ctx:Y.ctx,organizationId:Y.organizationId,item:z,monitorConfig:Y.monitorConfig,signal:Y.signal,canApplyFailureAction:U.source==="registry_item",onProgress:L});if(await L({status:w.status,connectionOk:w.connectionOk,toolsListed:w.toolsListed,toolResults:w.toolResults,agentSummary:w.agentSummary,errorMessage:w.errorMessage,actionTaken:w.actionTaken,durationMs:w.durationMs}),Z+=1,w.status==="passed")H+=1;else if(w.status==="failed"||w.status==="error")$+=1;else F+=1;if(await X.monitorRuns.update(Y.organizationId,Y.runId,{tested_items:Z,passed_items:H,failed_items:$,skipped_items:F}),w.status==="failed"||w.status==="error")await oi({ctx:Y.ctx,type:"registry.monitor.item_failed",subject:z.id,data:{runId:Y.runId,itemId:z.id,itemTitle:z.title,status:w.status,errorMessage:w.errorMessage,actionTaken:w.actionTaken}})}let V=Date.now()-Q;await X.monitorRuns.update(Y.organizationId,Y.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()}),await oi({ctx:Y.ctx,type:"registry.monitor.completed",subject:Y.runId,data:{runId:Y.runId,total:Z,passed:H,failed:$,skipped:F,durationMs:V}})}function vv6(Y){return{id:`${dq}${Y.id}`,title:Y.title,description:Y.description,_meta:Y._meta,server:Y.server,is_public:!1,is_unlisted:!0,created_at:Y.created_at,updated_at:Y.updated_at}}async function _v6(Y,Q){let X=fh0(Y);await X.access.check();let J=k4(),G=await J.monitorRuns.create({organization_id:X.organization.id,status:"pending",config_snapshot:Q,started_at:null}),K=new AbortController;return si.set(G.id,K),kv6({ctx:X,runId:G.id,organizationId:X.organization.id,monitorConfig:Q,signal:K.signal}).catch(async(W)=>{await J.monitorRuns.update(X.organization.id,G.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),await oi({ctx:X,type:"registry.monitor.failed",subject:G.id,data:{runId:G.id,error:W instanceof Error?W.message:String(W)}}),Dv6(`Run ${G.id} failed with uncaught error:`,W)}).finally(()=>{si.delete(G.id)}),{run:{id:G.id}}}var si,_h0="[MONITOR-AGENT]",Bv6,Uv6="health_check: not called",gh0;var ei=k(()=>{KY();oZ();fD();kW();W9();si=new Map,Bv6=Vj0;gh0={name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:Nh0,outputSchema:Lh0,handler:async(Y,Q)=>{let J=ai(Y.config??{}),{run:G}=await _v6(Q,J),W=await k4().monitorRuns.findById(fh0(Q).organization.id,G.id);if(!W)throw Error(`Failed to load monitor run ${G.id}`);return{run:W}}}});var uh0;var mh0=k(()=>{kW();W9();uh0={name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:pB1,outputSchema:wh0,handler:W6(pB1,async(Y,Q)=>{return k4().monitorRuns.list(Q.organization.id,Y)})}});var lh0;var dh0=k(()=>{kW();W9();lh0={name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:cB1,outputSchema:Ah0,handler:W6(cB1,async(Y,Q)=>{return{run:await k4().monitorRuns.findById(Q.organization.id,Y.runId)}})}});var ph0;var ch0=k(()=>{kW();ei();W9();ph0={name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:dB1,outputSchema:Mh0,handler:W6(dB1,async(Y,Q)=>{return yh0(Y.runId),{run:await k4().monitorRuns.update(Q.organization.id,Y.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}})}});var nh0;var ih0=k(()=>{kW();W9();nh0={name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:nB1,outputSchema:Ph0,handler:W6(nB1,async(Y,Q)=>{return k4().monitorResults.listByRun(Q.organization.id,Y.runId,{status:Y.status,limit:Y.limit,offset:Y.offset})})}});var ah0;var rh0=k(()=>{kW();W9();fD();ah0={name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:iB1,outputSchema:Eh0,handler:W6(iB1,async(Y,Q)=>{let X=k4(),J=await X.monitorConnections.list(Q.organization.id);return{items:await Promise.all(J.map(async(K)=>{let W=await X.items.findById(Q.organization.id,K.item_id);if(!W&&K.item_id.startsWith(dq)){let $=K.item_id.slice(dq.length),F=await X.publishRequests.findById(Q.organization.id,$);if(F)W={id:K.item_id,title:F.title,description:F.description,_meta:F._meta,server:F.server,is_public:!1,is_unlisted:!0,created_at:F.created_at,updated_at:F.updated_at}}let Z=W?.server.remotes?.find(($)=>$.url)?.url??null,H=K.item_id.startsWith(dq)?"request":"store";return{mapping:K,item:W,remoteUrl:Z,source:H}}))}})}});function yv6(Y){return{id:`${dq}${Y.id}`,title:Y.title,description:Y.description,_meta:Y._meta,server:Y.server,is_public:!1,is_unlisted:!0,created_at:Y.created_at,updated_at:Y.updated_at}}var oh0;var sh0=k(()=>{kW();ei();W9();fD();oh0={name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:aB1,outputSchema:Th0,handler:W6(aB1,async(Y,Q)=>{let X=k4(),J=(await X.items.list(Q.organization.id,{includeUnlisted:!0})).items,K=(await X.publishRequests.list(Q.organization.id,{status:"pending",limit:500})).items.map(yv6),W=[...J,...K],Z=await X.monitorConnections.list(Q.organization.id),H=new Set(Z.map((F)=>F.item_id)),$=0;for(let F of W){if(!F.server.remotes?.some((V)=>V.url))continue;if(await eB1(Q,F),!H.has(F.id))$+=1}return{created:$,updated:Math.max(W.length-$,0)}})}});var th0;var eh0=k(()=>{kW();W9();th0={name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:rB1,outputSchema:Ch0,handler:W6(rB1,async({connectionId:Y,authStatus:Q},X)=>{let J=k4(),G=X.organization.id,K=await J.monitorConnections.findByConnectionId(G,Y);if(!K)throw Error(`No monitor connection mapping found for connection ${Y}`);return await J.monitorConnections.updateAuthStatus(G,K.item_id,Q),{success:!0}})}});function Mk(Y){if(!Y||typeof Y!=="object")return null;let Q=Y,X=Q.id;if(typeof X==="string"&&X.length>0)return X;for(let J of["event","result","structuredContent","content"]){let G=Q[J],K=Mk(G);if(K)return K}if(Array.isArray(Y))for(let J of Y){let G=Mk(J);if(G)return G}return null}var Yx0;var Qx0=k(()=>{KY();kW();W9();Yx0={name:"REGISTRY_MONITOR_SCHEDULE_SET",description:"Schedule recurring MCP monitor runs via EVENT_PUBLISH cron",inputSchema:oB1,outputSchema:Rh0,handler:W6(oB1,async(Y,Q)=>{let X=IY.SELF(Q.organization.id),J=await Q.createMCPProxy(X);try{let G=await J.callTool({name:"EVENT_PUBLISH",arguments:{type:"registry.monitor.scheduled",subject:"private-registry",cron:Y.cronExpression,data:{config:Y.config??{}}}});if(G.isError)throw Error("Failed to create monitor schedule via EVENT_PUBLISH");let K=Mk(G.structuredContent)??Mk(G.content)??Mk(G);if(!K)throw Error("Could not resolve schedule event id from EVENT_PUBLISH");return{scheduleEventId:K}}finally{await J.close?.().catch(()=>{})}})}});var Xx0;var Jx0=k(()=>{KY();kW();W9();Xx0={name:"REGISTRY_MONITOR_SCHEDULE_CANCEL",description:"Cancel a recurring MCP monitor schedule via EVENT_CANCEL",inputSchema:sB1,outputSchema:Ih0,handler:W6(sB1,async(Y,Q)=>{let X=IY.SELF(Q.organization.id),J=await Q.createMCPProxy(X);try{if((await J.callTool({name:"EVENT_CANCEL",arguments:{eventId:Y.scheduleEventId}})).isError)throw Error("Failed to cancel monitor schedule via EVENT_CANCEL");return{success:!0}}finally{await J.close?.().catch(()=>{})}})}});function fv6(Y,Q){if(!Q)return Y;let X={field:["is_public"],operator:"eq",value:!1};if(!Y)return X;return{operator:"and",conditions:[Y,X]}}function bv6(Y){let Q=new Map,X=new Map;for(let G of Y){let K=G._meta?.["mcp.mesh"];for(let W of K?.tags??[])Q.set(W,(Q.get(W)??0)+1);for(let W of K?.categories??[])X.set(W,(X.get(W)??0)+1)}let J=(G)=>Array.from(G.entries()).map(([K,W])=>({value:K,count:W})).sort((K,W)=>K.value.localeCompare(W.value));return{tags:J(Q),categories:J(X)}}var Gx0,Wx0,Zx0,Kx0;var Hx0=k(()=>{m1();cY();W9();Gx0={name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:pq,outputSchema:MA,handler:W6(pq,async(Y,Q)=>{let X=k4(),J=await sS(Q,Q.organization.id);return X.items.list(Q.organization.id,{...Y,where:fv6(Y.where,J.storePrivateOnly===!0)})})},Wx0={name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:AG,outputSchema:uD,handler:W6(AG,async(Y,Q)=>{let X=k4(),J=await sS(Q,Q.organization.id),G=Y.id??Y.name;if(!G)return{item:null};let K=await X.items.findByIdOrName(Q.organization.id,G);if(!K)return{item:null};if(J.storePrivateOnly&&K.is_public)return{item:null};return{item:K}})},Zx0={name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:AG,outputSchema:q.object({versions:q.array(lZ)}),handler:W6(AG,async(Y,Q)=>{let X=k4(),J=await sS(Q,Q.organization.id),G=Y.id??Y.name;if(!G)return{versions:[]};let K=await X.items.findByIdOrName(Q.organization.id,G);if(!K)return{versions:[]};if(J.storePrivateOnly&&K.is_public)return{versions:[]};return{versions:[K]}})},Kx0={name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:q.object({}),outputSchema:wA,handler:W6(q.object({}),async(Y,Q)=>{let X=k4();if(!(await sS(Q,Q.organization.id)).storePrivateOnly)return X.items.getFilters(Q.organization.id);let G=await X.items.list(Q.organization.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return bv6(G.items)})}});var $x0;var Fx0=k(()=>{Qk0();Jk0();Wk0();Kk0();Gv0();Zv0();Hv0();Fv0();qv0();Uv0();Dv0();Nv0();Mv0();Av0();Ev0();Cv0();Iv0();Sv0();ei();mh0();dh0();ch0();ih0();rh0();sh0();eh0();Qx0();Jx0();Hx0();$x0=[Gx0,Wx0,Zx0,Kx0,$v0,Vv0,Kv0,zv0,Gk0,Yk0,Bv0,Zk0,Wv0,Jv0,Xk0,Ov0,Lv0,wv0,Pv0,Tv0,Rv0,jv0,gh0,uh0,lh0,ph0,nh0,ah0,oh0,th0,Yx0,Xx0]});var Vx0;var qx0=k(()=>{fD();Rj0();nS0();eS0();Fx0();kW();Vx0={id:fH,description:Fj0,tools:$x0,migrations:Cj0,publicRoutes:(Y,Q)=>{$q1(Y,Q),Zq1(Y,Q)},createStorage:tS0,onEvents:{types:["registry.monitor.scheduled"],handler:async(Y,Q)=>{let X=await Q.createMCPProxy(Q.connectionId);try{for(let J of Y){if(J.type!=="registry.monitor.scheduled")continue;let G=J.data&&typeof J.data==="object"?J.data:{},K=G.config&&typeof G.config==="object"?G.config:{},W=ai(K);await X.callTool({name:"REGISTRY_MONITOR_RUN_START",arguments:{config:W}})}}finally{await X.close()}}}}});var Ya="user-sandbox",Bx0="Create embeddable integration flows for platform end-users";import{sql as wk}from"kysely";var Ux0;var zx0=k(()=>{Ux0={name:"001-user-sandbox",async up(Y){await Y.schema.createTable("user_sandbox").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(Q)=>Q.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("required_apps","text",(Q)=>Q.notNull()).addColumn("redirect_url","text").addColumn("webhook_url","text").addColumn("event_type","text",(Q)=>Q.notNull().defaultTo("integration.completed")).addColumn("agent_title_template","text",(Q)=>Q.notNull().defaultTo("Agent for {{externalUserId}}")).addColumn("agent_instructions","text").addColumn("tool_selection_mode","text",(Q)=>Q.notNull().defaultTo("inclusion")).addColumn("status","text",(Q)=>Q.notNull().defaultTo("active")).addColumn("created_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(Q)=>Q.references("user.id").onDelete("set null")).execute(),await Y.schema.createIndex("idx_user_sandbox_org").on("user_sandbox").column("organization_id").execute(),await Y.schema.createTable("user_sandbox_sessions").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("template_id","text",(Q)=>Q.notNull().references("user_sandbox.id").onDelete("cascade")).addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("external_user_id","text",(Q)=>Q.notNull()).addColumn("status","text",(Q)=>Q.notNull().defaultTo("pending")).addColumn("app_statuses","text",(Q)=>Q.notNull().defaultTo("{}")).addColumn("created_agent_id","text",(Q)=>Q.references("connections.id").onDelete("set null")).addColumn("redirect_url","text").addColumn("created_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).addColumn("expires_at","text",(Q)=>Q.notNull()).execute(),await Y.schema.createIndex("idx_user_sandbox_sessions_template").on("user_sandbox_sessions").column("template_id").execute(),await Y.schema.createIndex("idx_user_sandbox_sessions_external_user").on("user_sandbox_sessions").columns(["template_id","external_user_id"]).execute(),await Y.schema.createIndex("idx_user_sandbox_sessions_org").on("user_sandbox_sessions").column("organization_id").execute(),await Y.schema.createTable("user_sandbox_agents").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("user_sandbox_id","text",(Q)=>Q.notNull().references("user_sandbox.id").onDelete("cascade")).addColumn("external_user_id","text",(Q)=>Q.notNull()).addColumn("connection_id","text",(Q)=>Q.notNull().references("connections.id").onDelete("cascade")).addColumn("created_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).execute(),await Y.schema.createIndex("idx_user_sandbox_agents_unique").on("user_sandbox_agents").columns(["user_sandbox_id","external_user_id"]).unique().execute(),await Y.schema.createIndex("idx_user_sandbox_agents_connection").on("user_sandbox_agents").column("connection_id").execute()},async down(Y){await Y.schema.dropIndex("idx_user_sandbox_agents_connection").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_agents_unique").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_sessions_org").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_sessions_external_user").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_sessions_template").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_org").ifExists().execute(),await Y.schema.dropTable("user_sandbox_agents").ifExists().execute(),await Y.schema.dropTable("user_sandbox_sessions").ifExists().execute(),await Y.schema.dropTable("user_sandbox").ifExists().execute()}}});var Dx0;var Ox0=k(()=>{zx0();Dx0=[Ux0]});function Qa(Y){let Q=Date.now().toString(36),X=crypto.randomUUID().replace(/-/g,"").substring(0,8);return`${Y}_${Q}${X}`}class Ak{db;constructor(Y){this.db=Y}async create(Y){let Q=Qa("usb"),X=new Date().toISOString(),J={id:Q,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,icon:Y.icon??null,required_apps:JSON.stringify(Y.required_apps),redirect_url:Y.redirect_url??null,webhook_url:Y.webhook_url??null,event_type:Y.event_type??"integration.completed",agent_title_template:Y.agent_title_template??"{{externalUserId}}'s Agent",agent_instructions:Y.agent_instructions??null,tool_selection_mode:Y.tool_selection_mode??"inclusion",status:"active",created_at:X,updated_at:X,created_by:Y.created_by??null};await this.db.insertInto("user_sandbox").values(J).execute();let G=await this.findById(Q);if(!G)throw Error(`Failed to create user sandbox with id: ${Q}`);return G}async findById(Y){let Q=await this.db.selectFrom("user_sandbox").selectAll().where("id","=",Y).executeTakeFirst();if(!Q)return null;return this.deserialize(Q)}async list(Y){return(await this.db.selectFrom("user_sandbox").selectAll().where("organization_id","=",Y).orderBy("created_at","desc").execute()).map((X)=>this.deserialize(X))}async update(Y,Q){let J={updated_at:new Date().toISOString()};if(Q.title!==void 0)J.title=Q.title;if(Q.description!==void 0)J.description=Q.description;if(Q.icon!==void 0)J.icon=Q.icon;if(Q.required_apps!==void 0)J.required_apps=JSON.stringify(Q.required_apps);if(Q.redirect_url!==void 0)J.redirect_url=Q.redirect_url;if(Q.webhook_url!==void 0)J.webhook_url=Q.webhook_url;if(Q.event_type!==void 0)J.event_type=Q.event_type;if(Q.agent_title_template!==void 0)J.agent_title_template=Q.agent_title_template;if(Q.agent_instructions!==void 0)J.agent_instructions=Q.agent_instructions;if(Q.tool_selection_mode!==void 0)J.tool_selection_mode=Q.tool_selection_mode;if(Q.status!==void 0)J.status=Q.status;await this.db.updateTable("user_sandbox").set(J).where("id","=",Y).execute();let G=await this.findById(Y);if(!G)throw Error(`Template not found after update: ${Y}`);return G}async delete(Y){await this.db.deleteFrom("user_sandbox").where("id","=",Y).execute()}deserialize(Y){let Q=[];try{Q=JSON.parse(Y.required_apps)}catch{Q=[]}return{id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description,icon:Y.icon,required_apps:Q,redirect_url:Y.redirect_url,webhook_url:Y.webhook_url,event_type:Y.event_type,agent_title_template:Y.agent_title_template,agent_instructions:Y.agent_instructions,tool_selection_mode:Y.tool_selection_mode,status:Y.status,created_at:Y.created_at,updated_at:Y.updated_at,created_by:Y.created_by}}}var YU1=()=>{};class Pk{db;constructor(Y){this.db=Y}async create(Y){let Q=Qa("sandbox_session"),X=new Date().toISOString(),J={id:Q,template_id:Y.template_id,organization_id:Y.organization_id,external_user_id:Y.external_user_id,status:"pending",app_statuses:"{}",created_agent_id:Y.created_agent_id??null,redirect_url:Y.redirect_url??null,created_at:X,updated_at:X,expires_at:Y.expires_at};await this.db.insertInto("user_sandbox_sessions").values(J).execute();let G=await this.findById(Q);if(!G)throw Error(`Failed to create session with id: ${Q}`);return G}async findById(Y){let Q=await this.db.selectFrom("user_sandbox_sessions").selectAll().where("id","=",Y).executeTakeFirst();if(!Q)return null;return this.deserialize(Q)}async findExisting(Y,Q){let X=new Date().toISOString(),J=await this.db.selectFrom("user_sandbox_sessions").selectAll().where("template_id","=",Y).where("external_user_id","=",Q).where("expires_at",">",X).where("status","!=","completed").orderBy("created_at","desc").executeTakeFirst();if(!J)return null;return this.deserialize(J)}async listByTemplate(Y){return(await this.db.selectFrom("user_sandbox_sessions").selectAll().where("template_id","=",Y).orderBy("created_at","desc").execute()).map((X)=>this.deserialize(X))}async listByOrganization(Y){return(await this.db.selectFrom("user_sandbox_sessions").selectAll().where("organization_id","=",Y).orderBy("created_at","desc").execute()).map((X)=>this.deserialize(X))}async update(Y,Q){let J={updated_at:new Date().toISOString()};if(Q.status!==void 0)J.status=Q.status;if(Q.app_statuses!==void 0)J.app_statuses=JSON.stringify(Q.app_statuses);if(Q.created_agent_id!==void 0)J.created_agent_id=Q.created_agent_id;await this.db.updateTable("user_sandbox_sessions").set(J).where("id","=",Y).execute();let G=await this.findById(Y);if(!G)throw Error(`Session not found after update: ${Y}`);return G}async delete(Y){await this.db.deleteFrom("user_sandbox_sessions").where("id","=",Y).execute()}async deleteExpired(){let Y=new Date().toISOString(),Q=await this.db.deleteFrom("user_sandbox_sessions").where("expires_at","<",Y).where("status","!=","completed").executeTakeFirst();return Number(Q.numDeletedRows??0)}async deleteByExternalUserId(Y,Q){let X=await this.db.deleteFrom("user_sandbox_sessions").where("organization_id","=",Y).where("external_user_id","=",Q).executeTakeFirst();return Number(X.numDeletedRows??0)}deserialize(Y){let Q={};try{Q=JSON.parse(Y.app_statuses)}catch{Q={}}return{id:Y.id,template_id:Y.template_id,organization_id:Y.organization_id,external_user_id:Y.external_user_id,status:Y.status,app_statuses:Q,created_agent_id:Y.created_agent_id,redirect_url:Y.redirect_url,created_at:Y.created_at,updated_at:Y.updated_at,expires_at:Y.expires_at}}}var QU1=()=>{};function Ek(Y){XU1=Y}function yJ(){if(!XU1)throw Error(`Plugin storage not initialized. Make sure the "${Ya}" plugin is enabled.`);return XU1}function JU1(){return process.env.BASE_URL||"http://localhost:3000"}var XU1=null;var sZ=()=>{};function Nx0(Y){let Q=Y.db,X={templates:new Ak(Q),sessions:new Pk(Q)};return Ek(X),X}var Lx0=k(()=>{YU1();QU1();sZ()});var hv6,xv6,gv6,uv6,mv6,sq,lv6,Mx0,wx0,Ax0,Px0,Ex0,Tx0,Cx0,Rx0,Ix0,jx0,Sx0,dv6,kx0,vx0,_x0;var pH=k(()=>{m1();hv6=q.object({authorizationEndpoint:q.string().describe("OAuth authorization endpoint URL"),tokenEndpoint:q.string().describe("OAuth token endpoint URL"),clientId:q.string().describe("OAuth client ID"),scopes:q.array(q.string()).describe("OAuth scopes to request"),grantType:q.enum(["authorization_code","client_credentials"]).describe("OAuth grant type")}),xv6=q.object({headers:q.record(q.string(),q.string()).optional().describe("HTTP headers")}),gv6=q.object({command:q.string().describe("Command to run"),args:q.array(q.string()).optional().describe("Command arguments"),cwd:q.string().optional().describe("Working directory"),envVars:q.record(q.string(),q.string()).optional().describe("Environment variables")}),uv6=q.object({app_name:q.string().describe("App name from registry (e.g., '@deco/gmail')"),title:q.string().describe("Display title for the app"),description:q.string().nullable().optional().describe("App description"),icon:q.string().nullable().optional().describe("Icon URL"),connection_type:q.enum(["HTTP","SSE","Websocket","STDIO"]).describe("Connection type"),connection_url:q.string().nullable().optional().describe("MCP server URL"),connection_headers:q.union([xv6,gv6]).nullable().optional().describe("Connection parameters"),oauth_config:hv6.nullable().optional().describe("OAuth configuration if required"),selected_tools:q.array(q.string()).nullable().optional().describe("Selected tools to expose (null = all)"),selected_resources:q.array(q.string()).nullable().optional().describe("Selected resources to expose (null = all)"),selected_prompts:q.array(q.string()).nullable().optional().describe("Selected prompts to expose (null = all)")}),mv6=q.object({configured:q.boolean().describe("Whether the app has been configured"),connection_id:q.string().nullable().describe("Connection ID if created"),error:q.string().nullable().describe("Error message if configuration failed")}),sq=q.object({id:q.string(),organization_id:q.string(),title:q.string(),description:q.string().nullable(),icon:q.string().nullable(),required_apps:q.array(uv6),redirect_url:q.string().nullable(),webhook_url:q.string().nullable(),event_type:q.string(),agent_title_template:q.string(),agent_instructions:q.string().nullable(),tool_selection_mode:q.enum(["inclusion","exclusion"]),status:q.enum(["active","inactive"]),created_at:q.string(),updated_at:q.string(),created_by:q.string().nullable()}),lv6=q.object({id:q.string(),template_id:q.string(),organization_id:q.string(),external_user_id:q.string(),status:q.enum(["pending","in_progress","completed"]),app_statuses:q.record(q.string(),mv6),created_agent_id:q.string().nullable(),redirect_url:q.string().nullable(),created_at:q.string(),updated_at:q.string(),expires_at:q.string()}),Mx0=q.object({app_name:q.string().describe("App name from registry (e.g., '@deco/openrouter')"),selected_tools:q.array(q.string()).nullable().optional().describe("Selected tools to expose (null = all)"),selected_resources:q.array(q.string()).nullable().optional().describe("Selected resources to expose (null = all)"),selected_prompts:q.array(q.string()).nullable().optional().describe("Selected prompts to expose (null = all)")}),wx0=q.object({title:q.string().describe("Title for the template"),description:q.string().optional().describe("Optional description"),icon:q.string().optional().describe("Optional icon URL"),registry_id:q.string().describe("Connection ID of the registry to look up apps from"),required_apps:q.array(Mx0).describe("Apps to include - only app_name required, details fetched from registry"),redirect_url:q.string().optional().describe("URL to redirect to after completion"),webhook_url:q.string().optional().describe("Webhook URL to call on completion"),event_type:q.string().optional().describe("Event type to emit (default: integration.completed)"),agent_title_template:q.string().optional().describe("Template for agent title (supports {{externalUserId}})"),agent_instructions:q.string().optional().describe("Instructions for the created agent"),tool_selection_mode:q.enum(["inclusion","exclusion"]).optional().describe("Tool selection mode for the agent")}),Ax0=q.object({id:q.string().describe("Template ID to update"),title:q.string().optional(),description:q.string().nullable().optional(),icon:q.string().nullable().optional(),registry_id:q.string().optional().describe("Connection ID of the registry (required if updating required_apps)"),required_apps:q.array(Mx0).optional().describe("Updated apps (details will be fetched from registry)"),redirect_url:q.string().nullable().optional(),webhook_url:q.string().nullable().optional(),event_type:q.string().optional(),agent_title_template:q.string().optional(),agent_instructions:q.string().nullable().optional(),tool_selection_mode:q.enum(["inclusion","exclusion"]).optional(),status:q.enum(["active","inactive"]).optional()}),Px0=q.object({id:q.string().describe("Template ID")}),Ex0=q.object({}),Tx0=q.object({id:q.string().describe("Template ID to delete")}),Cx0=q.object({templateId:q.string().describe("Template ID"),externalUserId:q.string().describe("External user ID from your platform"),expiresInSeconds:q.number().optional().describe("Session expiration in seconds (default: 7 days)")}),Rx0=q.object({sessionId:q.string().describe("Session ID"),url:q.string().describe("URL for the connect flow"),expiresAt:q.string().describe("Session expiration time"),agentId:q.string().nullable().optional().describe("Virtual MCP ID for this user (unique per template + user)"),created:q.boolean().describe("Whether the agent was newly created (true) or already existed (false)")}),Ix0=q.object({templateId:q.string().optional().describe("Filter by template ID")}),jx0=q.object({sessions:q.array(lv6)}),Sx0=q.object({externalUserId:q.string().describe("External user ID to find agents for")}),dv6=q.object({id:q.string().describe("Agent (Virtual MCP) ID"),title:q.string(),external_user_id:q.string(),template_id:q.string().nullable(),created_at:q.string()}),kx0=q.object({agents:q.array(dv6)}),vx0=q.object({externalUserId:q.string().describe("External user ID whose session data should be cleared")}),_x0=q.object({success:q.boolean(),deletedAgents:q.number().describe("Number of agents (Virtual MCPs) deleted"),deletedConnections:q.number().describe("Number of child connections deleted"),deletedSessions:q.number().describe("Number of sessions deleted")})});function cv6(Y){if(!Y?.url)return null;try{let Q=new URL(Y.url);if(Q.hostname==="github.com"){let X=Q.pathname.split("/").filter(Boolean);if(X.length>=1)return`https://github.com/${X[0]}.png`}}catch{}return null}function nv6(Y){return Y.find((X)=>X.name.endsWith("_LIST"))?.name??null}function iv6(Y){if(!Y)return[];if(Array.isArray(Y))return Y;if(typeof Y==="object"&&Y!==null){let Q=Object.keys(Y).find((X)=>Array.isArray(Y[X]));if(Q)return Y[Q]}return[]}function av6(Y,Q,X,J){let G=Y.server,K=Y._meta?.["mcp.mesh"],W=K?.friendlyName||K?.friendly_name||Y.title||G?.title||G?.name||"Unnamed MCP Server",Z=G?.description||null,H=G?.icons?.[0]?.src||cv6(G?.repository)||null,$=K?.oauth_config,F=$&&typeof $.authorizationEndpoint==="string"&&typeof $.tokenEndpoint==="string"&&typeof $.clientId==="string"&&Array.isArray($.scopes)&&($.grantType==="authorization_code"||$.grantType==="client_credentials")?{authorizationEndpoint:$.authorizationEndpoint,tokenEndpoint:$.tokenEndpoint,clientId:$.clientId,scopes:$.scopes,grantType:$.grantType}:null,V=G?.packages??[],B=G?.remotes??[],U,z,D=null,L=B[0],w=V[0];if(L){if(U=pv6[L.type??""]??L.type?.toUpperCase()??"HTTP",z=L.url??null,L.headers&&L.headers.length>0){let E={};for(let T of L.headers)if(T.name&&T.value)E[T.name]=T.value;if(Object.keys(E).length>0)D={headers:E}}}else if(w){U="STDIO",z=null;let E=w.identifier||w.name,T={};if(w.environmentVariables){for(let C of w.environmentVariables)if(C.name)T[C.name]=""}D={command:"npx",args:E?["-y",E]:[],...Object.keys(T).length>0&&{envVars:T}}}else U="HTTP",z=null;return{title:W,description:Z,icon:H,connection_type:U,connection_url:z,connection_headers:D,oauth_config:F,selected_tools:Q,selected_resources:X,selected_prompts:J}}async function rv6(Y,Q,X,J=null,G=null,K=null){let W=await Y.createMCPProxy(Q);try{let Z=await W.listTools(),H=nv6(Z.tools);if(!H)throw Error(`Registry "${Q}" does not have a LIST tool`);let $=await W.callTool({name:H,arguments:{where:{appName:X}}}),F=$.structuredContent??$,B=iv6(F)[0];if(!B)throw Error(`App "${X}" not found in registry "${Q}"`);let U=av6(B,J,G,K);return{app_name:X,...U}}finally{await W.close().catch(console.error)}}async function Xa(Y,Q,X){let J=[];for(let G of X){let K=await rv6(Y,Q,G.app_name,G.selected_tools??null,G.selected_resources??null,G.selected_prompts??null);J.push(K)}return J}var pv6;var GU1=k(()=>{pv6={"streamable-http":"HTTP",http:"HTTP",sse:"SSE",stdio:"STDIO",websocket:"Websocket"}});var yx0;var fx0=k(()=>{pH();sZ();GU1();yx0={name:"USER_SANDBOX_CREATE",description:"Create a new user sandbox for platform integration flows. Specify apps by name and the system will automatically fetch connection details from the registry.",inputSchema:wx0,outputSchema:sq,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=await Xa(J,X.registry_id,X.required_apps.map((Z)=>({app_name:Z.app_name,selected_tools:Z.selected_tools??null,selected_resources:Z.selected_resources??null,selected_prompts:Z.selected_prompts??null})));return await yJ().templates.create({organization_id:J.organization.id,title:X.title,description:X.description??null,icon:X.icon??null,required_apps:G,redirect_url:X.redirect_url??null,webhook_url:X.webhook_url??null,event_type:X.event_type,agent_title_template:X.agent_title_template,agent_instructions:X.agent_instructions??null,tool_selection_mode:X.tool_selection_mode,created_by:J.auth.user?.id??null})}}});var bx0;var hx0=k(()=>{pH();sZ();GU1();bx0={name:"USER_SANDBOX_UPDATE",description:"Update an existing user sandbox. If updating required_apps, provide registry_id to auto-fetch details.",inputSchema:Ax0,outputSchema:sq,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=yJ(),K=await G.templates.findById(X.id);if(!K)throw Error(`Template not found: ${X.id}`);if(K.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");let W=void 0;if(X.required_apps&&X.required_apps.length>0){if(!X.registry_id)throw Error("registry_id is required when updating required_apps");W=await Xa(J,X.registry_id,X.required_apps.map((H)=>({app_name:H.app_name,selected_tools:H.selected_tools??null,selected_resources:H.selected_resources??null,selected_prompts:H.selected_prompts??null})))}return await G.templates.update(X.id,{title:X.title,description:X.description,icon:X.icon,required_apps:W,redirect_url:X.redirect_url,webhook_url:X.webhook_url,event_type:X.event_type,agent_title_template:X.agent_title_template,agent_instructions:X.agent_instructions,tool_selection_mode:X.tool_selection_mode,status:X.status})}}});var xx0;var gx0=k(()=>{m1();pH();sZ();xx0={name:"USER_SANDBOX_DELETE",description:"Delete a user sandbox",inputSchema:Tx0,outputSchema:q.object({success:q.boolean(),id:q.string()}),handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=yJ(),K=await G.templates.findById(X.id);if(!K)throw Error(`Template not found: ${X.id}`);if(K.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");return await G.templates.delete(X.id),{success:!0,id:X.id}}}});var ux0;var mx0=k(()=>{m1();pH();sZ();ux0={name:"USER_SANDBOX_LIST",description:"List all user sandbox in the organization",inputSchema:Ex0,outputSchema:q.object({templates:q.array(sq)}),handler:async(Y,Q)=>{let X=Q;if(!X.organization)throw Error("Organization context required");return await X.access.check(),{templates:await yJ().templates.list(X.organization.id)}}}});var lx0;var dx0=k(()=>{pH();sZ();lx0={name:"USER_SANDBOX_GET",description:"Get a user sandbox by ID",inputSchema:Px0,outputSchema:sq,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let K=await yJ().templates.findById(X.id);if(K&&K.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");return K}}});async function px0(Y,Q){let X=await Q.sessions.findById(Y);if(!X)throw new s$("Session not found","SESSION_NOT_FOUND");if(new Date(X.expires_at)<new Date)throw new s$("Session has expired","SESSION_EXPIRED");return X}async function ov6(Y,Q){let X=await px0(Y,Q);if(X.status==="completed")throw new s$("Session is already completed. Create a new session to reconfigure.","SESSION_COMPLETED");return X}function sv6(Y,Q){let X=Y.metadata;if(!X)throw new s$("Connection has no metadata","CONNECTION_ACCESS_DENIED");let J=X[tq.SESSION_ID]===Q.id,G=X[tq.EXTERNAL_USER_ID]===Q.external_user_id&&X[tq.TEMPLATE_ID]===Q.template_id;if(!J&&!G)throw new s$("Access denied: connection does not belong to this session","CONNECTION_ACCESS_DENIED")}function WU1(Y,Q,X){return{[tq.SESSION_ID]:Y,[tq.EXTERNAL_USER_ID]:Q,[tq.TEMPLATE_ID]:X,source:"user-sandbox"}}function ZU1(Y,Q){return{[tq.EXTERNAL_USER_ID]:Y,[tq.TEMPLATE_ID]:Q,source:"user-sandbox"}}async function YO(Y,Q,X){let J=X?.allowCompleted?await px0(Y,Q):await ov6(Y,Q);if(X?.connection)sv6(X.connection,J);return J}var tq,s$;var cx0=k(()=>{tq={SESSION_ID:"user_sandbox_session_id",EXTERNAL_USER_ID:"user_sandbox_external_user_id",TEMPLATE_ID:"user_sandbox_id"};s$=class s$ extends Error{code;constructor(Y,Q){super(Y);this.code=Q;this.name="SessionAccessError"}}});var KU1=k(()=>{cx0()});async function ev6(Y,Q,X,J,G,K,W,Z){let H=Y,$=await H.selectFrom("user_sandbox_agents").select("connection_id").where("user_sandbox_id","=",J).where("external_user_id","=",G).executeTakeFirst();if($)return{connectionId:$.connection_id,created:!1};let F=new Date().toISOString(),V=`usa_${Date.now().toString(36)}${crypto.randomUUID().replace(/-/g,"").substring(0,8)}`,B=`vir_${Date.now().toString(36)}${crypto.randomUUID().replace(/-/g,"").substring(0,8)}`;try{return await H.transaction().execute(async(U)=>{await U.insertInto("connections").values({id:B,organization_id:Q,created_by:X,title:K,description:W,icon:null,app_name:null,app_id:null,connection_type:"VIRTUAL",connection_url:`virtual://${B}`,connection_token:null,connection_headers:JSON.stringify({tool_selection_mode:Z}),oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:JSON.stringify(ZU1(G,J)),tools:null,bindings:null,status:"active",created_at:F,updated_at:F}).execute(),await U.insertInto("user_sandbox_agents").values({id:V,user_sandbox_id:J,external_user_id:G,connection_id:B,created_at:F}).execute()}),{connectionId:B,created:!0}}catch(U){let z=String(U);if(z.includes("UNIQUE constraint")||z.includes("duplicate key")){let D=await H.selectFrom("user_sandbox_agents").select("connection_id").where("user_sandbox_id","=",J).where("external_user_id","=",G).executeTakeFirst();if(D)return{connectionId:D.connection_id,created:!1}}throw U}}var tv6=604800,nx0;var ix0=k(()=>{pH();sZ();KU1();nx0={name:"USER_SANDBOX_CREATE_SESSION",description:"Create a connect session URL for an external user. Returns a URL that the user can visit to configure their integrations. Also creates a unique Virtual MCP (agent) for this user if one doesn't exist.",inputSchema:Cx0,outputSchema:Rx0,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=yJ(),K=await G.templates.findById(X.templateId);if(!K)throw Error(`Template not found: ${X.templateId}`);if(K.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");if(K.status!=="active")throw Error("Template is not active");let W=K.agent_title_template.replace("{{externalUserId}}",X.externalUserId),Z=K.created_by??J.auth.user?.id??"system",{connectionId:H,created:$}=await ev6(J.db,J.organization.id,Z,K.id,X.externalUserId,W,K.agent_instructions,K.tool_selection_mode),F=await G.sessions.findExisting(X.templateId,X.externalUserId);if(F){if(!F.created_agent_id)await G.sessions.update(F.id,{created_agent_id:H});let D=JU1();return{sessionId:F.id,url:`${D}/connect/${F.id}`,expiresAt:F.expires_at,agentId:F.created_agent_id??H,created:$}}let V=X.expiresInSeconds??tv6,B=new Date(Date.now()+V*1000).toISOString(),U=await G.sessions.create({template_id:X.templateId,organization_id:J.organization.id,external_user_id:X.externalUserId,redirect_url:K.redirect_url,expires_at:B,created_agent_id:H}),z=JU1();return{sessionId:U.id,url:`${z}/connect/${U.id}`,expiresAt:U.expires_at,agentId:H,created:$}}}});var ax0;var rx0=k(()=>{pH();sZ();ax0={name:"USER_SANDBOX_LIST_SESSIONS",description:"List connect sessions for monitoring and management",inputSchema:Ix0,outputSchema:jx0,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=yJ(),K;if(X.templateId){let W=await G.templates.findById(X.templateId);if(!W)throw Error(`Template not found: ${X.templateId}`);if(W.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");K=await G.sessions.listByTemplate(X.templateId)}else K=await G.sessions.listByOrganization(J.organization.id);return{sessions:K}}}});var Y_6="user_sandbox_external_user_id",Q_6="user_sandbox_id",ox0;var sx0=k(()=>{pH();ox0={name:"USER_SANDBOX_LIST_USER_AGENTS",description:"List all agents (Virtual MCPs) created for an external user. Use this to find agents created via user sandbox for a specific user in your platform.",inputSchema:Sx0,outputSchema:kx0,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");return await J.access.check(),{agents:(await J.storage.connections.list(J.organization.id)).filter((W)=>{if(W.connection_type!=="VIRTUAL")return!1;let Z=W.metadata;if(!Z)return!1;return Z[Y_6]===X.externalUserId}).map((W)=>{let Z=W.metadata;return{id:W.id,title:W.title,external_user_id:X.externalUserId,template_id:Z[Q_6]??null,created_at:W.created_at}})}}}});var X_6="user_sandbox_external_user_id",tx0;var ex0=k(()=>{pH();sZ();tx0={name:"USER_SANDBOX_CLEAR_USER_SESSION",description:"Clear all session data for an external user, revoking all access they've granted. This deletes their agents (Virtual MCPs), child connections, OAuth tokens, and sessions. Use this when a user wants to disconnect all their integrations.",inputSchema:vx0,outputSchema:_x0,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=J.db,K=yJ(),Z=(await G.selectFrom("connections").select(["id","metadata"]).where("organization_id","=",J.organization.id).where("connection_type","=","VIRTUAL").execute()).filter((F)=>{if(!F.metadata)return!1;try{return JSON.parse(F.metadata)[X_6]===X.externalUserId}catch{return!1}}).map((F)=>F.id),H=0;if(Z.length>0){let V=(await G.selectFrom("connection_aggregations").select("child_connection_id").where("parent_connection_id","in",Z).execute()).map((B)=>B.child_connection_id);if(await G.deleteFrom("connection_aggregations").where("parent_connection_id","in",Z).execute(),V.length>0)await G.deleteFrom("downstream_tokens").where("connectionId","in",V).execute(),await G.deleteFrom("connections").where("id","in",V).execute(),H=V.length;await G.deleteFrom("connections").where("id","in",Z).execute(),await G.deleteFrom("user_sandbox_agents").where("external_user_id","=",X.externalUserId).execute()}let $=await K.sessions.deleteByExternalUserId(J.organization.id,X.externalUserId);return{success:!0,deletedAgents:Z.length,deletedConnections:H,deletedSessions:$}}}});var Yg0;var Qg0=k(()=>{fx0();hx0();gx0();mx0();dx0();ix0();rx0();sx0();ex0();sZ();Yg0=[yx0,bx0,xx0,ux0,lx0,nx0,ax0,ox0,tx0]});function J_6(Y){let Q=Date.now().toString(36),X=crypto.randomUUID().replace(/-/g,"").substring(0,8);return`${Y}_${Q}${X}`}async function HU1(Y,Q,X,J){let G={success:!1,agentId:Y.created_agent_id,connectionIds:[],redirectUrl:null,eventEmitted:!1,webhookCalled:!1};try{let K=J.db,W=new Date().toISOString(),Z=Y.created_agent_id;if(!Z)throw Error("Session has no agent - this should not happen");let H=[],$=[];for(let[B,U]of Object.entries(Y.app_statuses))if(U.configured&&U.connection_id){H.push(U.connection_id);let z=Q.required_apps.find((D)=>D.app_name===B);$.push({appName:B,connectionId:U.connection_id,selectedTools:z?.selected_tools??null,selectedResources:z?.selected_resources??null,selectedPrompts:z?.selected_prompts??null})}if(G.connectionIds=H,await K.deleteFrom("connection_aggregations").where("parent_connection_id","=",Z).execute(),$.length>0)await K.insertInto("connection_aggregations").values($.map((B)=>({id:J_6("agg"),parent_connection_id:Z,child_connection_id:B.connectionId,selected_tools:B.selectedTools?JSON.stringify(B.selectedTools):null,selected_resources:B.selectedResources?JSON.stringify(B.selectedResources):null,selected_prompts:B.selectedPrompts?JSON.stringify(B.selectedPrompts):null,created_at:W}))).execute();await X.sessions.update(Y.id,{status:"completed"});let F={type:Q.event_type,data:{externalUserId:Y.external_user_id,agentId:Z,templateId:Q.id,sessionId:Y.id,connections:H.map((B)=>{let U=Object.entries(Y.app_statuses).find(([z,D])=>D.connection_id===B)?.[0];return{id:B,appName:U??"unknown"}})}};if(J.eventBus)try{await J.eventBus.publish(J.organizationId,"user-sandbox",F),G.eventEmitted=!0}catch(B){console.error("[UserSandbox] Failed to emit completion event:",B)}if(Q.webhook_url)try{let B=await fetch(Q.webhook_url,{method:"POST",headers:{"Content-Type":"application/json","X-User-Sandbox-Event":Q.event_type},body:JSON.stringify(F.data)});if(!B.ok)console.error("[UserSandbox] Webhook returned error:",B.status);else G.webhookCalled=!0}catch(B){console.error("[UserSandbox] Failed to call webhook:",B)}let V=Y.redirect_url??Q.redirect_url;if(V){let B=new URL(V);B.searchParams.set("sessionId",Y.id),B.searchParams.set("externalUserId",Y.external_user_id),B.searchParams.set("agentId",Z),G.redirectUrl=B.toString()}return G.success=!0,G}catch(K){throw console.error("[UserSandbox] Completion failed:",K),K}}var Xg0=()=>{};function G_6(){let Y=Date.now().toString(36),Q=crypto.randomUUID().replace(/-/g,"").substring(0,8);return`conn_${Y}${Q}`}async function W_6(Y,Q,X,J,G,K,W){let Z=G_6(),H=new Date().toISOString();if(!W.title)throw Error(`App "${W.app_name}" is missing required field: title`);if(!W.connection_type)throw Error(`App "${W.app_name}" is missing required field: connection_type`);if(!W.connection_url&&W.connection_type!=="STDIO")throw Error(`App "${W.app_name}" is missing required field: connection_url`);let $={id:Z,organization_id:Q,created_by:X,title:W.title,description:W.description??null,icon:W.icon??null,app_name:W.app_name,app_id:null,connection_type:W.connection_type,connection_url:W.connection_url??"",connection_token:null,connection_headers:W.connection_headers?JSON.stringify(W.connection_headers):null,oauth_config:W.oauth_config?JSON.stringify(W.oauth_config):null,configuration_state:null,configuration_scopes:null,metadata:JSON.stringify(WU1(J,G,K)),tools:null,bindings:null,status:"active",created_at:H,updated_at:H};return await Y.insertInto("connections").values($).execute(),Z}function Tk(Y,Q){if(Q instanceof s$){let X={SESSION_NOT_FOUND:404,SESSION_EXPIRED:410,SESSION_COMPLETED:409,ACCESS_DENIED:403,CONNECTION_ACCESS_DENIED:403};return Y.json({error:Q.message,code:Q.code},X[Q.code]??400)}return console.error("[UserSandbox] Connect API error:",Q),Y.json({error:Q instanceof Error?Q.message:"Internal error"},500)}function $U1(Y,Q){let X=Q.db,J=new Ak(X),G=new Pk(X),K={templates:J,sessions:G};Y.get("/api/user-sandbox/sessions/:sessionId",async(W)=>{try{let Z=W.req.param("sessionId"),H=await YO(Z,K,{allowCompleted:!0}),$=await J.findById(H.template_id);if(!$)return W.json({error:"Template not found"},404);return W.json({session:{id:H.id,status:H.status,external_user_id:H.external_user_id,expires_at:H.expires_at,redirect_url:H.redirect_url,created_agent_id:H.created_agent_id},template:{id:$.id,title:$.title,description:$.description,icon:$.icon},apps:$.required_apps.map((F)=>({app_name:F.app_name,title:F.title,description:F.description,icon:F.icon,connection_type:F.connection_type,requires_oauth:!!F.oauth_config,selected_tools:F.selected_tools,selected_resources:F.selected_resources,selected_prompts:F.selected_prompts,status:H.app_statuses[F.app_name]??{configured:!1,connection_id:null,error:null}}))})}catch(Z){return Tk(W,Z)}}),Y.post("/api/user-sandbox/sessions/:sessionId/provision",async(W)=>{try{let Z=W.req.param("sessionId"),H=await W.req.json();if(!H.app_name)return W.json({error:"app_name is required"},400);let $=await YO(Z,K,{allowCompleted:!0}),F=await J.findById($.template_id);if(!F)return W.json({error:"Template not found"},404);let V=F.required_apps.find((D)=>D.app_name===H.app_name);if(!V)return W.json({error:`App "${H.app_name}" is not required by this template`},400);let B=$.app_statuses[H.app_name];if(B?.connection_id)return W.json({success:!0,connection_id:B.connection_id,already_provisioned:!0,requires_oauth:!!V.oauth_config});if(!F.created_by)return W.json({error:"Template is missing created_by - cannot create connections"},500);let U=await W_6(X,$.organization_id,F.created_by,Z,$.external_user_id,$.template_id,V),z={...$.app_statuses,[H.app_name]:{configured:!1,connection_id:U,error:null}};return await G.update(Z,{status:"in_progress",app_statuses:z}),W.json({success:!0,connection_id:U,already_provisioned:!1,requires_oauth:!!V.oauth_config})}catch(Z){return Tk(W,Z)}}),Y.post("/api/user-sandbox/sessions/:sessionId/configure",async(W)=>{try{let Z=W.req.param("sessionId"),H=await W.req.json();if(!H.app_name)return W.json({error:"app_name is required"},400);let $=await YO(Z,K,{allowCompleted:!0}),F=await J.findById($.template_id);if(!F)return W.json({error:"Template not found"},404);if(!F.required_apps.find((L)=>L.app_name===H.app_name))return W.json({error:`App "${H.app_name}" is not required by this template`},400);let B=$.app_statuses[H.app_name],z={configured:!0,connection_id:H.connection_id??B?.connection_id??null,error:null},D={...$.app_statuses,[H.app_name]:z};return await G.update(Z,{status:"in_progress",app_statuses:D}),W.json({success:!0,app_name:H.app_name,status:z})}catch(Z){return Tk(W,Z)}}),Y.post("/api/user-sandbox/sessions/:sessionId/oauth-token",async(W)=>{try{let Z=W.req.param("sessionId"),H=await W.req.json();if(!H.connection_id)return W.json({error:"connection_id is required"},400);if(!H.access_token)return W.json({error:"access_token is required"},400);let $=await YO(Z,K,{allowCompleted:!0});if(!Object.values($.app_statuses).some((E)=>E.connection_id===H.connection_id))return W.json({error:"Connection does not belong to this session"},403);let V=H.expires_in?new Date(Date.now()+H.expires_in*1000):null,B=new Date().toISOString(),U=await Q.vault.encrypt(H.access_token),z=H.refresh_token?await Q.vault.encrypt(H.refresh_token):null,D=H.client_secret?await Q.vault.encrypt(H.client_secret):null,L=X,w=await L.selectFrom("downstream_tokens").select(["id"]).where("connectionId","=",H.connection_id).executeTakeFirst();if(w)await L.updateTable("downstream_tokens").set({accessToken:U,refreshToken:z,scope:H.scope??null,expiresAt:V?.toISOString()??null,clientId:H.client_id??null,clientSecret:D,tokenEndpoint:H.token_endpoint??null,updatedAt:B}).where("id","=",w.id).execute();else{let E=`dtok_${Date.now().toString(36)}${crypto.randomUUID().replace(/-/g,"").substring(0,8)}`;await L.insertInto("downstream_tokens").values({id:E,connectionId:H.connection_id,accessToken:U,refreshToken:z,scope:H.scope??null,expiresAt:V?.toISOString()??null,clientId:H.client_id??null,clientSecret:D,tokenEndpoint:H.token_endpoint??null,createdAt:B,updatedAt:B}).execute()}return W.json({success:!0,expiresAt:V})}catch(Z){return Tk(W,Z)}}),Y.post("/api/user-sandbox/sessions/:sessionId/complete",async(W)=>{try{let Z=W.req.param("sessionId"),H=await YO(Z,K,{allowCompleted:!0}),$=await J.findById(H.template_id);if(!$)return W.json({error:"Template not found"},404);if($.required_apps.filter((B)=>{return H.app_statuses[B.app_name]?.configured}).length===0)return W.json({error:"At least one app must be configured"},400);let V=await HU1(H,$,K,{organizationId:H.organization_id,db:X});return W.json({success:V.success,completed:!0,agentId:V.agentId,redirectUrl:V.redirectUrl,eventEmitted:V.eventEmitted,webhookCalled:V.webhookCalled})}catch(Z){return Tk(W,Z)}})}var Jg0=k(()=>{YU1();QU1();KU1();Xg0()});var Gg0=k(()=>{Jg0()});var Wg0;var Zg0=k(()=>{Ox0();Lx0();Qg0();Gg0();Wg0={id:Ya,description:Bx0,tools:Yg0,publicRoutes:(Y,Q)=>{$U1(Y,Q)},migrations:Dx0,createStorage:(Y)=>{let Q=Nx0(Y);return Ek(Q),Q}}});var Kg0="workflows",Hg0="Create workflows for platform end-users";import{sql as $g0}from"kysely";var Fg0;var Vg0=k(()=>{Fg0={name:"001-workflows",async up(Y){await Y.schema.createTable("workflow_collection").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(Q)=>Q.notNull()).addColumn("description","text").addColumn("virtual_mcp_id","text",(Q)=>Q.notNull()).addColumn("steps","text",(Q)=>Q.notNull().defaultTo("[]")).addColumn("created_at","text",(Q)=>Q.notNull().defaultTo($g0`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(Q)=>Q.notNull().defaultTo($g0`CURRENT_TIMESTAMP`)).addColumn("created_by","text").addColumn("updated_by","text").execute(),await Y.schema.createIndex("idx_wf_collection_org").on("workflow_collection").column("organization_id").execute(),await Y.schema.createIndex("idx_wf_collection_created_at").on("workflow_collection").column("created_at").execute(),await Y.schema.createTable("workflow").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("workflow_collection_id","text").addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("steps","text",(Q)=>Q.notNull().defaultTo("[]")).addColumn("input","text").addColumn("virtual_mcp_id","text",(Q)=>Q.notNull()).addColumn("created_at_epoch_ms","bigint",(Q)=>Q.notNull()).addColumn("created_by","text").execute(),await Y.schema.createIndex("idx_workflow_created_at").on("workflow").column("created_at_epoch_ms").execute(),await Y.schema.createIndex("idx_workflow_collection_id").on("workflow").column("workflow_collection_id").execute(),await Y.schema.createTable("workflow_execution").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("workflow_id","text",(Q)=>Q.notNull().references("workflow.id").onDelete("cascade")).addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("status","text",(Q)=>Q.notNull().defaultTo("enqueued")).addColumn("input","text").addColumn("output","text").addColumn("error","text").addColumn("created_at","bigint",(Q)=>Q.notNull()).addColumn("updated_at","bigint",(Q)=>Q.notNull()).addColumn("start_at_epoch_ms","bigint").addColumn("started_at_epoch_ms","bigint").addColumn("completed_at_epoch_ms","bigint").addColumn("timeout_ms","bigint").addColumn("deadline_at_epoch_ms","bigint").addColumn("created_by","text").execute(),await Y.schema.createIndex("idx_wf_execution_status").on("workflow_execution").column("status").execute(),await Y.schema.createIndex("idx_wf_execution_workflow_id").on("workflow_execution").column("workflow_id").execute(),await Y.schema.createIndex("idx_wf_execution_org").on("workflow_execution").column("organization_id").execute(),await Y.schema.createIndex("idx_wf_execution_created_at").on("workflow_execution").column("created_at").execute(),await Y.schema.createTable("workflow_execution_step_result").addColumn("execution_id","text",(Q)=>Q.notNull().references("workflow_execution.id").onDelete("cascade")).addColumn("step_id","text",(Q)=>Q.notNull()).addColumn("started_at_epoch_ms","bigint").addColumn("completed_at_epoch_ms","bigint").addColumn("output","text").addColumn("error","text").addColumn("raw_tool_output","text").execute(),await Y.schema.createIndex("idx_wf_step_result_pk").on("workflow_execution_step_result").columns(["execution_id","step_id"]).unique().execute(),await Y.schema.createIndex("idx_wf_step_result_execution").on("workflow_execution_step_result").column("execution_id").execute()},async down(Y){await Y.schema.dropIndex("idx_wf_step_result_execution").ifExists().execute(),await Y.schema.dropIndex("idx_wf_step_result_pk").ifExists().execute(),await Y.schema.dropIndex("idx_wf_execution_created_at").ifExists().execute(),await Y.schema.dropIndex("idx_wf_execution_org").ifExists().execute(),await Y.schema.dropIndex("idx_wf_execution_workflow_id").ifExists().execute(),await Y.schema.dropIndex("idx_wf_execution_status").ifExists().execute(),await Y.schema.dropIndex("idx_workflow_collection_id").ifExists().execute(),await Y.schema.dropIndex("idx_workflow_created_at").ifExists().execute(),await Y.schema.dropIndex("idx_wf_collection_created_at").ifExists().execute(),await Y.schema.dropIndex("idx_wf_collection_org").ifExists().execute(),await Y.schema.dropTable("workflow_execution_step_result").ifExists().execute(),await Y.schema.dropTable("workflow_execution").ifExists().execute(),await Y.schema.dropTable("workflow").ifExists().execute(),await Y.schema.dropTable("workflow_collection").ifExists().execute()}}});var qg0;var Bg0=k(()=>{Vg0();qg0=[Fg0]});function CG(Y){let Q=Y;if(!Q.organization)throw Error("Organization context required for workflow tools");return Q}function S5(Y){if(Y===null||Y===void 0)return null;if(typeof Y==="object")return Y;if(typeof Y!=="string")return Y;try{return JSON.parse(Y)}catch{return Y}}function Ug0(Y){FU1=Y}function QJ(){if(!FU1)throw Error('Plugin storage not initialized. Make sure the "workflows" plugin is enabled.');return FU1}var FU1=null;function zg0(Y){return{...Y,steps:S5(Y.steps)??[]}}class VU1{db;constructor(Y){this.db=Y}async list(Y,Q={}){let{limit:X=50,offset:J=0}=Q,G=await this.db.selectFrom("workflow_collection").selectAll().where("organization_id","=",Y).orderBy("created_at","desc").limit(X).offset(J).execute(),K=await this.db.selectFrom("workflow_collection").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",Y).executeTakeFirstOrThrow();return{items:G,totalCount:Number(K.count)}}async getById(Y,Q){let X=await this.db.selectFrom("workflow_collection").selectAll().where("id","=",Y).where("organization_id","=",Q).executeTakeFirst();return X?zg0(X):null}async create(Y){let Q=await this.db.insertInto("workflow_collection").values(Y).returningAll().executeTakeFirstOrThrow();return zg0(Q)}async update(Y,Q,X){return await this.db.updateTable("workflow_collection").set({...X,updated_at:new Date().toISOString()}).where("id","=",Y).where("organization_id","=",Q).returningAll().executeTakeFirstOrThrow()}async delete(Y,Q){return await this.db.deleteFrom("workflow_collection").where("id","=",Y).where("organization_id","=",Q).returningAll().executeTakeFirstOrThrow()}}var Dg0=()=>{};function Z_6(Y){return{...Y,steps:S5(Y.steps)??[],input:S5(Y.input)??null}}function eq(Y){return{...Y,output:S5(Y.output),error:S5(Y.error),raw_tool_output:S5(Y.raw_tool_output)}}class qU1{db;constructor(Y){this.db=Y}async _createWorkflow(Y,Q){let X=crypto.randomUUID(),J=Date.now();return await Y.insertInto("workflow").values({id:X,workflow_collection_id:Q.workflowCollectionId??null,organization_id:Q.organizationId,steps:JSON.stringify(Q.steps),input:Q.input?JSON.stringify(Q.input):null,virtual_mcp_id:Q.virtualMcpId,created_at_epoch_ms:J,created_by:Q.createdBy??null}).execute(),{id:X}}async createWorkflow(Y){return this._createWorkflow(this.db,Y)}async getWorkflow(Y){let Q=await this.db.selectFrom("workflow").selectAll().where("id","=",Y).executeTakeFirst();return Q?Z_6(Q):null}async createExecution(Y){return this.db.transaction().execute(async(Q)=>{let X=Date.now(),{id:J}=await this._createWorkflow(Q,{organizationId:Y.organizationId,workflowCollectionId:Y.workflowCollectionId,virtualMcpId:Y.virtualMcpId,input:Y.input,steps:Y.steps,createdBy:Y.createdBy}),G=crypto.randomUUID(),K=Y.startAtEpochMs??X,W=Y.timeoutMs?K+Y.timeoutMs:null;return await Q.insertInto("workflow_execution").values({id:G,workflow_id:J,organization_id:Y.organizationId,status:"enqueued",input:Y.input?JSON.stringify(Y.input):null,created_at:X,updated_at:X,start_at_epoch_ms:K,timeout_ms:Y.timeoutMs??null,deadline_at_epoch_ms:W,created_by:Y.createdBy??null}).execute(),{id:G}})}async getExecution(Y,Q){return await this.db.selectFrom("workflow_execution").selectAll().where("id","=",Y).where("organization_id","=",Q).executeTakeFirst()??null}async getExecutionFull(Y,Q){let X=await this.db.selectFrom("workflow_execution").selectAll().where("id","=",Y).where("organization_id","=",Q).executeTakeFirst();if(!X)return null;let J=await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).execute();return{execution:X,stepResults:J.map(eq)}}async getExecutionContext(Y){let Q=await this.db.selectFrom("workflow_execution").select(["id","status","workflow_id","deadline_at_epoch_ms"]).where("id","=",Y).executeTakeFirst();if(!Q)return null;let X=await this.db.selectFrom("workflow").select(["steps","input","virtual_mcp_id"]).where("id","=",Q.workflow_id).executeTakeFirst();if(!X)return null;let J=await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).execute();return{execution:{id:Q.id,status:Q.status,workflow_id:Q.workflow_id,deadline_at_epoch_ms:Q.deadline_at_epoch_ms},workflow:{steps:S5(X.steps)??[],input:S5(X.input)??null,virtual_mcp_id:X.virtual_mcp_id},stepResults:J.map(eq)}}async claimExecution(Y){let Q=Date.now(),X=await this.db.updateTable("workflow_execution").set({status:"running",updated_at:Q}).where("id","=",Y).where("status","=","enqueued").returningAll().executeTakeFirst();if(!X)return null;let J=await this.getWorkflow(X.workflow_id);if(!J)throw Error(`Workflow ${X.workflow_id} not found for execution ${Y}`);return{execution:X,workflow:J}}async updateExecution(Y,Q,X){let G={updated_at:Date.now()};if(Q.status!==void 0)G.status=Q.status;if(Q.output!==void 0)G.output=JSON.stringify(Q.output);if(Q.error!==void 0)G.error=JSON.stringify(Q.error);if(Q.completed_at_epoch_ms!==void 0)G.completed_at_epoch_ms=Q.completed_at_epoch_ms;let K=this.db.updateTable("workflow_execution").set(G).where("id","=",Y);if(X?.onlyIfStatus)K=K.where("status","=",X.onlyIfStatus);return await K.returningAll().executeTakeFirst()??null}async cancelExecution(Y,Q){let X=Date.now();return!!await this.db.updateTable("workflow_execution").set({status:"cancelled",updated_at:X}).where("id","=",Y).where("organization_id","=",Q).where("status","in",["enqueued","running"]).returningAll().executeTakeFirst()}async resumeExecution(Y,Q){return this.db.transaction().execute(async(X)=>{let J=Date.now();return await X.deleteFrom("workflow_execution_step_result").where("execution_id","=",Y).where("completed_at_epoch_ms","is",null).execute(),!!await X.updateTable("workflow_execution").set({status:"enqueued",updated_at:J,completed_at_epoch_ms:null}).where("id","=",Y).where("organization_id","=",Q).where("status","=","cancelled").returningAll().executeTakeFirst()})}async listExecutions(Y,Q={}){let{limit:X=50,offset:J=0,status:G}=Q,K=this.db.selectFrom("workflow_execution as we").innerJoin("workflow as w","we.workflow_id","w.id").leftJoin("workflow_collection as wc","w.workflow_collection_id","wc.id").select(["we.id","we.workflow_id","we.organization_id","we.status","we.input","we.output","we.error","we.created_at","we.updated_at","we.start_at_epoch_ms","we.started_at_epoch_ms","we.completed_at_epoch_ms","we.timeout_ms","we.deadline_at_epoch_ms","we.created_by","w.virtual_mcp_id"]).select((F)=>F.fn.coalesce("wc.title",F.val("Workflow Execution")).as("title")).where("we.organization_id","=",Y);if(G)K=K.where("we.status","=",G);let W=await K.orderBy("we.created_at","desc").limit(X).offset(J).execute(),Z=this.db.selectFrom("workflow_execution").select((F)=>F.fn.countAll().as("count")).where("organization_id","=",Y);if(G)Z=Z.where("status","=",G);let H=await Z.executeTakeFirstOrThrow(),$=Number(H.count);return{items:W,totalCount:$,hasMore:J+W.length<$}}async createStepResult(Y){let Q=await this.db.insertInto("workflow_execution_step_result").values({execution_id:Y.execution_id,step_id:Y.step_id,started_at_epoch_ms:Y.completed_at_epoch_ms?Date.now():null,completed_at_epoch_ms:Y.completed_at_epoch_ms??null,output:Y.output!==void 0?JSON.stringify(Y.output):null,error:Y.error!==void 0?JSON.stringify(Y.error):null}).onConflict((X)=>X.columns(["execution_id","step_id"]).doNothing()).returningAll().executeTakeFirst();return Q?eq(Q):null}async updateStepResult(Y,Q,X){let J={};if(X.output!==void 0)J.output=JSON.stringify(X.output);if(X.error!==void 0)J.error=JSON.stringify(X.error);if(X.started_at_epoch_ms!==void 0)J.started_at_epoch_ms=X.started_at_epoch_ms;if(X.completed_at_epoch_ms!==void 0)J.completed_at_epoch_ms=X.completed_at_epoch_ms;if(Object.keys(J).length===0)return null;let G=await this.db.updateTable("workflow_execution_step_result").set(J).where("execution_id","=",Y).where("step_id","=",Q).returningAll().executeTakeFirst();return G?eq(G):null}async checkpointAndTransform(Y,Q,X,J){await this.db.updateTable("workflow_execution_step_result").set({raw_tool_output:JSON.stringify(X)}).where("execution_id","=",Y).where("step_id","=",Q).execute();let G,K;try{let H=await J(X);G=H.output,K=H.error}catch(H){K=H instanceof Error?`Transform failed: ${H.message}`:`Transform failed: ${String(H)}`}let W={completed_at_epoch_ms:Date.now()};if(G!==void 0)W.output=JSON.stringify(G);if(K!==void 0)W.error=JSON.stringify(K);let Z=await this.db.updateTable("workflow_execution_step_result").set(W).where("execution_id","=",Y).where("step_id","=",Q).returningAll().executeTakeFirst();return Z?eq(Z):null}async getStepResult(Y,Q){let X=await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).where("step_id","=",Q).executeTakeFirst();return X?eq(X):null}async getStepResults(Y){return(await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).execute()).map(eq)}async deleteStepResult(Y,Q){await this.db.deleteFrom("workflow_execution_step_result").where("execution_id","=",Y).where("step_id","=",Q).execute()}async getStepResultsByPrefix(Y,Q){return(await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).where("step_id","like",`${Q}%`).orderBy("step_id").execute()).map(eq)}async recoverStuckExecutions(){return this.db.transaction().execute(async(Y)=>{let Q=await Y.selectFrom("workflow_execution").select(["id","organization_id"]).where("status","=","running").execute();if(Q.length===0)return[];let X=Q.map((J)=>J.id);return await Y.updateTable("workflow_execution").set({status:"enqueued",updated_at:Date.now()}).where("id","in",X).where("status","=","running").execute(),Q})}}var Og0=()=>{};function Ng0(Y){let Q=Y.db;return{collections:new VU1(Q),executions:new qU1(Q)}}var Lg0=k(()=>{Dg0();Og0()});var Mg0,wg0,Ag0,Pg0,Eg0;var Tg0=k(()=>{m1();LA();KY();Mg0={name:"COLLECTION_WORKFLOW_LIST",description:"List workflows with pagination. Does not include steps -- use GET for full details.",inputSchema:q.object({limit:q.number().optional().default(50),offset:q.number().optional().default(0)}),outputSchema:q.object({items:q.array(q.object({id:q.string(),title:q.string(),description:q.string().nullable(),virtual_mcp_id:q.string(),created_at:q.string(),updated_at:q.string()})),totalCount:q.number(),hasMore:q.boolean()}),handler:async(Y,Q)=>{let X=CG(Q);await X.access.check();let J=Y,G=QJ(),{items:K,totalCount:W}=await G.collections.list(X.organization.id,{limit:J.limit,offset:J.offset});return{items:K.map((Z)=>({id:Z.id,title:Z.title,description:Z.description,virtual_mcp_id:Z.virtual_mcp_id,created_at:Z.created_at,updated_at:Z.updated_at})),totalCount:W,hasMore:(J.offset??0)+K.length<W}}},wg0={name:"COLLECTION_WORKFLOW_GET",description:"Get a single workflow by ID, including its steps.",inputSchema:q.object({id:q.string()}),outputSchema:q.object({item:q.object({id:q.string(),title:q.string(),description:q.string().nullable(),virtual_mcp_id:q.string(),steps:q.array(xD),created_at:q.string(),updated_at:q.string()}).nullable()}),handler:async(Y,Q)=>{let X=CG(Q);await X.access.check();let{id:J}=Y,K=await QJ().collections.getById(J,X.organization.id);if(!K)return{item:null};return{item:{id:K.id,title:K.title,description:K.description,virtual_mcp_id:K.virtual_mcp_id,steps:K.steps,created_at:K.created_at,updated_at:K.updated_at}}}},Ag0={name:"COLLECTION_WORKFLOW_CREATE",description:`Create a workflow template. This is a reusable definition, not an execution.
1151
+ `);return{toolResults:H,agentSummary:U.length>0?U:null,unexecutedTools:F}}finally{await Q.close?.().catch(()=>{})}}async function eB1(Y,Q){let X=k4(),J=Y.organization.id,G=await X.monitorConnections.findByItemId(J,Q.id);if(G){if(await Y.storage.connections.findById(G.connection_id,J))return G.connection_id}let K=Lv6(Q);if(!K)throw Error(`Registry item ${Q.id} has no remote URL`);let W=Ov6(Y),Z=Nv6(Q),H=await Y.storage.connections.create({organization_id:J,created_by:W,title:`[MCP Tester] ${Q.title}`,description:`Auto-created monitor connection for ${Q.id}`,app_name:"private-registry-monitor",app_id:`${fH}:monitor`,connection_type:Z,connection_url:K,metadata:{monitorConnection:!0,registryItemId:Q.id,pluginId:fH}});return await X.monitorConnections.upsert({organization_id:J,item_id:Q.id,connection_id:H.id,auth_status:"none"}),H.id}async function jv6(Y){let Q=k4();switch(Y.action){case"unlisted":return await Q.items.update(Y.organizationId,Y.item.id,{is_unlisted:!0}),"unlisted";case"remove_public":return await Q.items.update(Y.organizationId,Y.item.id,{is_public:!1}),"removed_public";case"remove_private":case"remove_all":return await Q.items.delete(Y.organizationId,Y.item.id),Y.action==="remove_all"?"removed_all":"removed_private";default:return"none"}}async function Sv6(Y){let Q=Date.now();if(Y.signal.aborted)throw Error("Run cancelled");let X="passed",J=!1,G=!1,K=null,W="none",Z=null,H=[],$=null,F=async()=>{await Y.onProgress?.({status:X,connectionOk:J,toolsListed:G,toolResults:[...H],agentSummary:Z,errorMessage:K,actionTaken:W,durationMs:Date.now()-Q})};try{let V=await eB1(Y.ctx,Y.item);$=await Y.ctx.createMCPProxy(V),J=!0;let U=(await Lk($.listTools?$.listTools():Promise.resolve({tools:[]}),Y.monitorConfig.perMcpTimeoutMs,`listTools ${Y.item.id}`)).tools??[];if(G=!0,Y.monitorConfig.monitorMode!=="health_check")H.push(...U.map((z)=>tB1(z.name))),await F();if(Y.monitorConfig.monitorMode==="full_agent"){let z=await Iv6({ctx:Y.ctx,monitorConfig:Y.monitorConfig,item:Y.item,proxy:$,tools:U,signal:Y.signal,onProgress:async(D)=>{H.length=0,H.push(...jh0({discoveredTools:U,executedResults:D})),X=D.some((L)=>!L.success)?"failed":"passed",await F()}});if(H.length=0,H.push(...jh0({discoveredTools:U,executedResults:z.toolResults})),Z=z.agentSummary,z.toolResults.some((D)=>!D.success))X="failed";if(z.unexecutedTools.length>0){if(X="failed",!K)K=`Agent skipped ${z.unexecutedTools.length} tool(s): ${z.unexecutedTools.join(", ")}`}}else if(Y.monitorConfig.monitorMode!=="health_check"){for(let z=0;z<U.length;z++){let D=U[z];if(!D||Y.signal.aborted)throw Error("Run cancelled");let L=Date.now();try{let w={},E=await Lk($.callTool({name:D.name,arguments:w}),Y.monitorConfig.perToolTimeoutMs,`tool ${D.name}`),T=!E.isError,C=Date.now()-L;Sh0(H,{toolName:D.name,success:T,input:w,durationMs:C,outputPreview:bh0(E.structuredContent??E.content),error:T?null:ti(E.content?.find((P)=>P.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await F()}catch(w){let E=Date.now()-L,T=w instanceof Error?w.message:String(w);Sh0(H,{toolName:D.name,success:!1,durationMs:E,error:ti(T)}),await F()}}if(H.some((z)=>!z.success))X="failed"}else for(let z of U)H.push(tB1(z.name));if(Y.canApplyFailureAction&&X==="failed"&&Y.monitorConfig.onFailure!=="none")W=await jv6({organizationId:Y.organizationId,item:Y.item,action:Y.monitorConfig.onFailure})}catch(V){if(K=V instanceof Error?V.message:String(V),Mv6(V))X="needs_auth",await k4().monitorConnections.updateAuthStatus(Y.organizationId,Y.item.id,"needs_auth");else X="error"}finally{await $?.close?.().catch(()=>{})}return{status:X,connectionOk:J,toolsListed:G,toolResults:H,agentSummary:Z,errorMessage:K,actionTaken:W,durationMs:Date.now()-Q}}async function kv6(Y){let Q=Date.now(),X=k4(),G=(await X.items.list(Y.organizationId,{includeUnlisted:!0})).items.filter((B)=>{if(Y.monitorConfig.testPublicOnly&&!B.is_public)return!1;if(Y.monitorConfig.testPrivateOnly&&B.is_public)return!1;return!0}),K=Y.monitorConfig.includePendingRequests?(await X.publishRequests.list(Y.organizationId,{status:"pending",limit:500})).items.map((B)=>vv6(B)):[],W=[...G.map((B)=>({item:B,source:"registry_item"})),...K.map((B)=>({item:B,source:"publish_request"}))];if(W.length===0){await X.monitorRuns.update(Y.organizationId,Y.runId,{total_items:0,status:"completed",started_at:new Date().toISOString(),finished_at:new Date().toISOString()}),await oi({ctx:Y.ctx,type:"registry.monitor.completed",subject:Y.runId,data:{runId:Y.runId,total:0}});return}await X.monitorRuns.update(Y.organizationId,Y.runId,{total_items:W.length,status:"running",started_at:new Date().toISOString()});let Z=0,H=0,$=0,F=0;for(let B=0;B<W.length;B++){let U=W[B],z=U?.item;if(!z||Y.signal.aborted){await X.monitorRuns.update(Y.organizationId,Y.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()});return}await X.monitorRuns.update(Y.organizationId,Y.runId,{current_item_id:z.id});let D=null,L=async(E)=>{if(!D){D=(await X.monitorResults.create({run_id:Y.runId,organization_id:Y.organizationId,item_id:z.id,item_title:z.title,status:E.status,error_message:E.errorMessage,connection_ok:E.connectionOk,tools_listed:E.toolsListed,tool_results:E.toolResults,agent_summary:E.agentSummary,duration_ms:E.durationMs,action_taken:E.actionTaken})).id;return}await X.monitorResults.update(Y.organizationId,D,{status:E.status,error_message:E.errorMessage,connection_ok:E.connectionOk,tools_listed:E.toolsListed,tool_results:E.toolResults,agent_summary:E.agentSummary,duration_ms:E.durationMs,action_taken:E.actionTaken})},w=await Sv6({ctx:Y.ctx,organizationId:Y.organizationId,item:z,monitorConfig:Y.monitorConfig,signal:Y.signal,canApplyFailureAction:U.source==="registry_item",onProgress:L});if(await L({status:w.status,connectionOk:w.connectionOk,toolsListed:w.toolsListed,toolResults:w.toolResults,agentSummary:w.agentSummary,errorMessage:w.errorMessage,actionTaken:w.actionTaken,durationMs:w.durationMs}),Z+=1,w.status==="passed")H+=1;else if(w.status==="failed"||w.status==="error")$+=1;else F+=1;if(await X.monitorRuns.update(Y.organizationId,Y.runId,{tested_items:Z,passed_items:H,failed_items:$,skipped_items:F}),w.status==="failed"||w.status==="error")await oi({ctx:Y.ctx,type:"registry.monitor.item_failed",subject:z.id,data:{runId:Y.runId,itemId:z.id,itemTitle:z.title,status:w.status,errorMessage:w.errorMessage,actionTaken:w.actionTaken}})}let V=Date.now()-Q;await X.monitorRuns.update(Y.organizationId,Y.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()}),await oi({ctx:Y.ctx,type:"registry.monitor.completed",subject:Y.runId,data:{runId:Y.runId,total:Z,passed:H,failed:$,skipped:F,durationMs:V}})}function vv6(Y){return{id:`${dq}${Y.id}`,title:Y.title,description:Y.description,_meta:Y._meta,server:Y.server,is_public:!1,is_unlisted:!0,created_at:Y.created_at,updated_at:Y.updated_at}}async function _v6(Y,Q){let X=fh0(Y);await X.access.check();let J=k4(),G=await J.monitorRuns.create({organization_id:X.organization.id,status:"pending",config_snapshot:Q,started_at:null}),K=new AbortController;return si.set(G.id,K),kv6({ctx:X,runId:G.id,organizationId:X.organization.id,monitorConfig:Q,signal:K.signal}).catch(async(W)=>{await J.monitorRuns.update(X.organization.id,G.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),await oi({ctx:X,type:"registry.monitor.failed",subject:G.id,data:{runId:G.id,error:W instanceof Error?W.message:String(W)}}),Dv6(`Run ${G.id} failed with uncaught error:`,W)}).finally(()=>{si.delete(G.id)}),{run:{id:G.id}}}var si,_h0="[MONITOR-AGENT]",Bv6,Uv6="health_check: not called",gh0;var ei=k(()=>{KY();oZ();fD();kW();W9();si=new Map,Bv6=Vj0;gh0={name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:Nh0,outputSchema:Lh0,handler:async(Y,Q)=>{let J=ai(Y.config??{}),{run:G}=await _v6(Q,J),W=await k4().monitorRuns.findById(fh0(Q).organization.id,G.id);if(!W)throw Error(`Failed to load monitor run ${G.id}`);return{run:W}}}});var uh0;var mh0=k(()=>{kW();W9();uh0={name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:pB1,outputSchema:wh0,handler:W6(pB1,async(Y,Q)=>{return k4().monitorRuns.list(Q.organization.id,Y)})}});var lh0;var dh0=k(()=>{kW();W9();lh0={name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:cB1,outputSchema:Ah0,handler:W6(cB1,async(Y,Q)=>{return{run:await k4().monitorRuns.findById(Q.organization.id,Y.runId)}})}});var ph0;var ch0=k(()=>{kW();ei();W9();ph0={name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:dB1,outputSchema:Mh0,handler:W6(dB1,async(Y,Q)=>{return yh0(Y.runId),{run:await k4().monitorRuns.update(Q.organization.id,Y.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}})}});var nh0;var ih0=k(()=>{kW();W9();nh0={name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:nB1,outputSchema:Ph0,handler:W6(nB1,async(Y,Q)=>{return k4().monitorResults.listByRun(Q.organization.id,Y.runId,{status:Y.status,limit:Y.limit,offset:Y.offset})})}});var ah0;var rh0=k(()=>{kW();W9();fD();ah0={name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:iB1,outputSchema:Eh0,handler:W6(iB1,async(Y,Q)=>{let X=k4(),J=await X.monitorConnections.list(Q.organization.id);return{items:await Promise.all(J.map(async(K)=>{let W=await X.items.findById(Q.organization.id,K.item_id);if(!W&&K.item_id.startsWith(dq)){let $=K.item_id.slice(dq.length),F=await X.publishRequests.findById(Q.organization.id,$);if(F)W={id:K.item_id,title:F.title,description:F.description,_meta:F._meta,server:F.server,is_public:!1,is_unlisted:!0,created_at:F.created_at,updated_at:F.updated_at}}let Z=W?.server.remotes?.find(($)=>$.url)?.url??null,H=K.item_id.startsWith(dq)?"request":"store";return{mapping:K,item:W,remoteUrl:Z,source:H}}))}})}});function yv6(Y){return{id:`${dq}${Y.id}`,title:Y.title,description:Y.description,_meta:Y._meta,server:Y.server,is_public:!1,is_unlisted:!0,created_at:Y.created_at,updated_at:Y.updated_at}}var oh0;var sh0=k(()=>{kW();ei();W9();fD();oh0={name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:aB1,outputSchema:Th0,handler:W6(aB1,async(Y,Q)=>{let X=k4(),J=(await X.items.list(Q.organization.id,{includeUnlisted:!0})).items,K=(await X.publishRequests.list(Q.organization.id,{status:"pending",limit:500})).items.map(yv6),W=[...J,...K],Z=await X.monitorConnections.list(Q.organization.id),H=new Set(Z.map((F)=>F.item_id)),$=0;for(let F of W){if(!F.server.remotes?.some((V)=>V.url))continue;if(await eB1(Q,F),!H.has(F.id))$+=1}return{created:$,updated:Math.max(W.length-$,0)}})}});var th0;var eh0=k(()=>{kW();W9();th0={name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:rB1,outputSchema:Ch0,handler:W6(rB1,async({connectionId:Y,authStatus:Q},X)=>{let J=k4(),G=X.organization.id,K=await J.monitorConnections.findByConnectionId(G,Y);if(!K)throw Error(`No monitor connection mapping found for connection ${Y}`);return await J.monitorConnections.updateAuthStatus(G,K.item_id,Q),{success:!0}})}});function Mk(Y){if(!Y||typeof Y!=="object")return null;let Q=Y,X=Q.id;if(typeof X==="string"&&X.length>0)return X;for(let J of["event","result","structuredContent","content"]){let G=Q[J],K=Mk(G);if(K)return K}if(Array.isArray(Y))for(let J of Y){let G=Mk(J);if(G)return G}return null}var Yx0;var Qx0=k(()=>{KY();kW();W9();Yx0={name:"REGISTRY_MONITOR_SCHEDULE_SET",description:"Schedule recurring MCP monitor runs via EVENT_PUBLISH cron",inputSchema:oB1,outputSchema:Rh0,handler:W6(oB1,async(Y,Q)=>{let X=IY.SELF(Q.organization.id),J=await Q.createMCPProxy(X);try{let G=await J.callTool({name:"EVENT_PUBLISH",arguments:{type:"registry.monitor.scheduled",subject:"private-registry",cron:Y.cronExpression,data:{config:Y.config??{}}}});if(G.isError)throw Error("Failed to create monitor schedule via EVENT_PUBLISH");let K=Mk(G.structuredContent)??Mk(G.content)??Mk(G);if(!K)throw Error("Could not resolve schedule event id from EVENT_PUBLISH");return{scheduleEventId:K}}finally{await J.close?.().catch(()=>{})}})}});var Xx0;var Jx0=k(()=>{KY();kW();W9();Xx0={name:"REGISTRY_MONITOR_SCHEDULE_CANCEL",description:"Cancel a recurring MCP monitor schedule via EVENT_CANCEL",inputSchema:sB1,outputSchema:Ih0,handler:W6(sB1,async(Y,Q)=>{let X=IY.SELF(Q.organization.id),J=await Q.createMCPProxy(X);try{if((await J.callTool({name:"EVENT_CANCEL",arguments:{eventId:Y.scheduleEventId}})).isError)throw Error("Failed to cancel monitor schedule via EVENT_CANCEL");return{success:!0}}finally{await J.close?.().catch(()=>{})}})}});function fv6(Y,Q){if(!Q)return Y;let X={field:["is_public"],operator:"eq",value:!1};if(!Y)return X;return{operator:"and",conditions:[Y,X]}}function bv6(Y){let Q=new Map,X=new Map;for(let G of Y){let K=G._meta?.["mcp.mesh"];for(let W of K?.tags??[])Q.set(W,(Q.get(W)??0)+1);for(let W of K?.categories??[])X.set(W,(X.get(W)??0)+1)}let J=(G)=>Array.from(G.entries()).map(([K,W])=>({value:K,count:W})).sort((K,W)=>K.value.localeCompare(W.value));return{tags:J(Q),categories:J(X)}}var Gx0,Wx0,Zx0,Kx0;var Hx0=k(()=>{m1();cY();W9();Gx0={name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:pq,outputSchema:MA,handler:W6(pq,async(Y,Q)=>{let X=k4(),J=await sS(Q,Q.organization.id);return X.items.list(Q.organization.id,{...Y,where:fv6(Y.where,J.storePrivateOnly===!0)})})},Wx0={name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:AG,outputSchema:uD,handler:W6(AG,async(Y,Q)=>{let X=k4(),J=await sS(Q,Q.organization.id),G=Y.id??Y.name;if(!G)return{item:null};let K=await X.items.findByIdOrName(Q.organization.id,G);if(!K)return{item:null};if(J.storePrivateOnly&&K.is_public)return{item:null};return{item:K}})},Zx0={name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:AG,outputSchema:q.object({versions:q.array(lZ)}),handler:W6(AG,async(Y,Q)=>{let X=k4(),J=await sS(Q,Q.organization.id),G=Y.id??Y.name;if(!G)return{versions:[]};let K=await X.items.findByIdOrName(Q.organization.id,G);if(!K)return{versions:[]};if(J.storePrivateOnly&&K.is_public)return{versions:[]};return{versions:[K]}})},Kx0={name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:q.object({}),outputSchema:wA,handler:W6(q.object({}),async(Y,Q)=>{let X=k4();if(!(await sS(Q,Q.organization.id)).storePrivateOnly)return X.items.getFilters(Q.organization.id);let G=await X.items.list(Q.organization.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return bv6(G.items)})}});var $x0;var Fx0=k(()=>{Qk0();Jk0();Wk0();Kk0();Gv0();Zv0();Hv0();Fv0();qv0();Uv0();Dv0();Nv0();Mv0();Av0();Ev0();Cv0();Iv0();Sv0();ei();mh0();dh0();ch0();ih0();rh0();sh0();eh0();Qx0();Jx0();Hx0();$x0=[Gx0,Wx0,Zx0,Kx0,$v0,Vv0,Kv0,zv0,Gk0,Yk0,Bv0,Zk0,Wv0,Jv0,Xk0,Ov0,Lv0,wv0,Pv0,Tv0,Rv0,jv0,gh0,uh0,lh0,ph0,nh0,ah0,oh0,th0,Yx0,Xx0]});var Vx0;var qx0=k(()=>{fD();Rj0();nS0();eS0();Fx0();kW();Vx0={id:fH,description:Fj0,tools:$x0,migrations:Cj0,publicRoutes:(Y,Q)=>{$q1(Y,Q),Zq1(Y,Q)},createStorage:tS0,onEvents:{types:["registry.monitor.scheduled"],handler:async(Y,Q)=>{let X=await Q.createMCPProxy(Q.connectionId);try{for(let J of Y){if(J.type!=="registry.monitor.scheduled")continue;let G=J.data&&typeof J.data==="object"?J.data:{},K=G.config&&typeof G.config==="object"?G.config:{},W=ai(K);await X.callTool({name:"REGISTRY_MONITOR_RUN_START",arguments:{config:W}})}}finally{await X.close()}}}}});var Ya="user-sandbox",Bx0="Create embeddable integration flows for platform end-users";import{sql as wk}from"kysely";var Ux0;var zx0=k(()=>{Ux0={name:"001-user-sandbox",async up(Y){await Y.schema.createTable("user_sandbox").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(Q)=>Q.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("required_apps","text",(Q)=>Q.notNull()).addColumn("redirect_url","text").addColumn("webhook_url","text").addColumn("event_type","text",(Q)=>Q.notNull().defaultTo("integration.completed")).addColumn("agent_title_template","text",(Q)=>Q.notNull().defaultTo("Agent for {{externalUserId}}")).addColumn("agent_instructions","text").addColumn("tool_selection_mode","text",(Q)=>Q.notNull().defaultTo("inclusion")).addColumn("status","text",(Q)=>Q.notNull().defaultTo("active")).addColumn("created_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(Q)=>Q.references("user.id").onDelete("set null")).execute(),await Y.schema.createIndex("idx_user_sandbox_org").on("user_sandbox").column("organization_id").execute(),await Y.schema.createTable("user_sandbox_sessions").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("template_id","text",(Q)=>Q.notNull().references("user_sandbox.id").onDelete("cascade")).addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("external_user_id","text",(Q)=>Q.notNull()).addColumn("status","text",(Q)=>Q.notNull().defaultTo("pending")).addColumn("app_statuses","text",(Q)=>Q.notNull().defaultTo("{}")).addColumn("created_agent_id","text",(Q)=>Q.references("connections.id").onDelete("set null")).addColumn("redirect_url","text").addColumn("created_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).addColumn("expires_at","text",(Q)=>Q.notNull()).execute(),await Y.schema.createIndex("idx_user_sandbox_sessions_template").on("user_sandbox_sessions").column("template_id").execute(),await Y.schema.createIndex("idx_user_sandbox_sessions_external_user").on("user_sandbox_sessions").columns(["template_id","external_user_id"]).execute(),await Y.schema.createIndex("idx_user_sandbox_sessions_org").on("user_sandbox_sessions").column("organization_id").execute(),await Y.schema.createTable("user_sandbox_agents").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("user_sandbox_id","text",(Q)=>Q.notNull().references("user_sandbox.id").onDelete("cascade")).addColumn("external_user_id","text",(Q)=>Q.notNull()).addColumn("connection_id","text",(Q)=>Q.notNull().references("connections.id").onDelete("cascade")).addColumn("created_at","text",(Q)=>Q.notNull().defaultTo(wk`CURRENT_TIMESTAMP`)).execute(),await Y.schema.createIndex("idx_user_sandbox_agents_unique").on("user_sandbox_agents").columns(["user_sandbox_id","external_user_id"]).unique().execute(),await Y.schema.createIndex("idx_user_sandbox_agents_connection").on("user_sandbox_agents").column("connection_id").execute()},async down(Y){await Y.schema.dropIndex("idx_user_sandbox_agents_connection").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_agents_unique").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_sessions_org").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_sessions_external_user").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_sessions_template").ifExists().execute(),await Y.schema.dropIndex("idx_user_sandbox_org").ifExists().execute(),await Y.schema.dropTable("user_sandbox_agents").ifExists().execute(),await Y.schema.dropTable("user_sandbox_sessions").ifExists().execute(),await Y.schema.dropTable("user_sandbox").ifExists().execute()}}});var Dx0;var Ox0=k(()=>{zx0();Dx0=[Ux0]});function Qa(Y){let Q=Date.now().toString(36),X=crypto.randomUUID().replace(/-/g,"").substring(0,8);return`${Y}_${Q}${X}`}class Ak{db;constructor(Y){this.db=Y}async create(Y){let Q=Qa("usb"),X=new Date().toISOString(),J={id:Q,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,icon:Y.icon??null,required_apps:JSON.stringify(Y.required_apps),redirect_url:Y.redirect_url??null,webhook_url:Y.webhook_url??null,event_type:Y.event_type??"integration.completed",agent_title_template:Y.agent_title_template??"{{externalUserId}}'s Agent",agent_instructions:Y.agent_instructions??null,tool_selection_mode:Y.tool_selection_mode??"inclusion",status:"active",created_at:X,updated_at:X,created_by:Y.created_by??null};await this.db.insertInto("user_sandbox").values(J).execute();let G=await this.findById(Q);if(!G)throw Error(`Failed to create user sandbox with id: ${Q}`);return G}async findById(Y){let Q=await this.db.selectFrom("user_sandbox").selectAll().where("id","=",Y).executeTakeFirst();if(!Q)return null;return this.deserialize(Q)}async list(Y){return(await this.db.selectFrom("user_sandbox").selectAll().where("organization_id","=",Y).orderBy("created_at","desc").execute()).map((X)=>this.deserialize(X))}async update(Y,Q){let J={updated_at:new Date().toISOString()};if(Q.title!==void 0)J.title=Q.title;if(Q.description!==void 0)J.description=Q.description;if(Q.icon!==void 0)J.icon=Q.icon;if(Q.required_apps!==void 0)J.required_apps=JSON.stringify(Q.required_apps);if(Q.redirect_url!==void 0)J.redirect_url=Q.redirect_url;if(Q.webhook_url!==void 0)J.webhook_url=Q.webhook_url;if(Q.event_type!==void 0)J.event_type=Q.event_type;if(Q.agent_title_template!==void 0)J.agent_title_template=Q.agent_title_template;if(Q.agent_instructions!==void 0)J.agent_instructions=Q.agent_instructions;if(Q.tool_selection_mode!==void 0)J.tool_selection_mode=Q.tool_selection_mode;if(Q.status!==void 0)J.status=Q.status;await this.db.updateTable("user_sandbox").set(J).where("id","=",Y).execute();let G=await this.findById(Y);if(!G)throw Error(`Template not found after update: ${Y}`);return G}async delete(Y){await this.db.deleteFrom("user_sandbox").where("id","=",Y).execute()}deserialize(Y){let Q=[];try{Q=JSON.parse(Y.required_apps)}catch{Q=[]}return{id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description,icon:Y.icon,required_apps:Q,redirect_url:Y.redirect_url,webhook_url:Y.webhook_url,event_type:Y.event_type,agent_title_template:Y.agent_title_template,agent_instructions:Y.agent_instructions,tool_selection_mode:Y.tool_selection_mode,status:Y.status,created_at:Y.created_at,updated_at:Y.updated_at,created_by:Y.created_by}}}var YU1=()=>{};class Pk{db;constructor(Y){this.db=Y}async create(Y){let Q=Qa("sandbox_session"),X=new Date().toISOString(),J={id:Q,template_id:Y.template_id,organization_id:Y.organization_id,external_user_id:Y.external_user_id,status:"pending",app_statuses:"{}",created_agent_id:Y.created_agent_id??null,redirect_url:Y.redirect_url??null,created_at:X,updated_at:X,expires_at:Y.expires_at};await this.db.insertInto("user_sandbox_sessions").values(J).execute();let G=await this.findById(Q);if(!G)throw Error(`Failed to create session with id: ${Q}`);return G}async findById(Y){let Q=await this.db.selectFrom("user_sandbox_sessions").selectAll().where("id","=",Y).executeTakeFirst();if(!Q)return null;return this.deserialize(Q)}async findExisting(Y,Q){let X=new Date().toISOString(),J=await this.db.selectFrom("user_sandbox_sessions").selectAll().where("template_id","=",Y).where("external_user_id","=",Q).where("expires_at",">",X).where("status","!=","completed").orderBy("created_at","desc").executeTakeFirst();if(!J)return null;return this.deserialize(J)}async listByTemplate(Y){return(await this.db.selectFrom("user_sandbox_sessions").selectAll().where("template_id","=",Y).orderBy("created_at","desc").execute()).map((X)=>this.deserialize(X))}async listByOrganization(Y){return(await this.db.selectFrom("user_sandbox_sessions").selectAll().where("organization_id","=",Y).orderBy("created_at","desc").execute()).map((X)=>this.deserialize(X))}async update(Y,Q){let J={updated_at:new Date().toISOString()};if(Q.status!==void 0)J.status=Q.status;if(Q.app_statuses!==void 0)J.app_statuses=JSON.stringify(Q.app_statuses);if(Q.created_agent_id!==void 0)J.created_agent_id=Q.created_agent_id;await this.db.updateTable("user_sandbox_sessions").set(J).where("id","=",Y).execute();let G=await this.findById(Y);if(!G)throw Error(`Session not found after update: ${Y}`);return G}async delete(Y){await this.db.deleteFrom("user_sandbox_sessions").where("id","=",Y).execute()}async deleteExpired(){let Y=new Date().toISOString(),Q=await this.db.deleteFrom("user_sandbox_sessions").where("expires_at","<",Y).where("status","!=","completed").executeTakeFirst();return Number(Q.numDeletedRows??0)}async deleteByExternalUserId(Y,Q){let X=await this.db.deleteFrom("user_sandbox_sessions").where("organization_id","=",Y).where("external_user_id","=",Q).executeTakeFirst();return Number(X.numDeletedRows??0)}deserialize(Y){let Q={};try{Q=JSON.parse(Y.app_statuses)}catch{Q={}}return{id:Y.id,template_id:Y.template_id,organization_id:Y.organization_id,external_user_id:Y.external_user_id,status:Y.status,app_statuses:Q,created_agent_id:Y.created_agent_id,redirect_url:Y.redirect_url,created_at:Y.created_at,updated_at:Y.updated_at,expires_at:Y.expires_at}}}var QU1=()=>{};function Ek(Y){XU1=Y}function yJ(){if(!XU1)throw Error(`Plugin storage not initialized. Make sure the "${Ya}" plugin is enabled.`);return XU1}function JU1(){return process.env.BASE_URL||"http://localhost:3000"}var XU1=null;var sZ=()=>{};function Nx0(Y){let Q=Y.db,X={templates:new Ak(Q),sessions:new Pk(Q)};return Ek(X),X}var Lx0=k(()=>{YU1();QU1();sZ()});var hv6,xv6,gv6,uv6,mv6,sq,lv6,Mx0,wx0,Ax0,Px0,Ex0,Tx0,Cx0,Rx0,Ix0,jx0,Sx0,dv6,kx0,vx0,_x0;var pH=k(()=>{m1();hv6=q.object({authorizationEndpoint:q.string().describe("OAuth authorization endpoint URL"),tokenEndpoint:q.string().describe("OAuth token endpoint URL"),clientId:q.string().describe("OAuth client ID"),scopes:q.array(q.string()).describe("OAuth scopes to request"),grantType:q.enum(["authorization_code","client_credentials"]).describe("OAuth grant type")}),xv6=q.object({headers:q.record(q.string(),q.string()).optional().describe("HTTP headers")}),gv6=q.object({command:q.string().describe("Command to run"),args:q.array(q.string()).optional().describe("Command arguments"),cwd:q.string().optional().describe("Working directory"),envVars:q.record(q.string(),q.string()).optional().describe("Environment variables")}),uv6=q.object({app_name:q.string().describe("App name from registry (e.g., '@deco/gmail')"),title:q.string().describe("Display title for the app"),description:q.string().nullable().optional().describe("App description"),icon:q.string().nullable().optional().describe("Icon URL"),connection_type:q.enum(["HTTP","SSE","Websocket","STDIO"]).describe("Connection type"),connection_url:q.string().nullable().optional().describe("MCP server URL"),connection_headers:q.union([xv6,gv6]).nullable().optional().describe("Connection parameters"),oauth_config:hv6.nullable().optional().describe("OAuth configuration if required"),selected_tools:q.array(q.string()).nullable().optional().describe("Selected tools to expose (null = all)"),selected_resources:q.array(q.string()).nullable().optional().describe("Selected resources to expose (null = all)"),selected_prompts:q.array(q.string()).nullable().optional().describe("Selected prompts to expose (null = all)")}),mv6=q.object({configured:q.boolean().describe("Whether the app has been configured"),connection_id:q.string().nullable().describe("Connection ID if created"),error:q.string().nullable().describe("Error message if configuration failed")}),sq=q.object({id:q.string(),organization_id:q.string(),title:q.string(),description:q.string().nullable(),icon:q.string().nullable(),required_apps:q.array(uv6),redirect_url:q.string().nullable(),webhook_url:q.string().nullable(),event_type:q.string(),agent_title_template:q.string(),agent_instructions:q.string().nullable(),tool_selection_mode:q.enum(["inclusion","exclusion"]),status:q.enum(["active","inactive"]),created_at:q.string(),updated_at:q.string(),created_by:q.string().nullable()}),lv6=q.object({id:q.string(),template_id:q.string(),organization_id:q.string(),external_user_id:q.string(),status:q.enum(["pending","in_progress","completed"]),app_statuses:q.record(q.string(),mv6),created_agent_id:q.string().nullable(),redirect_url:q.string().nullable(),created_at:q.string(),updated_at:q.string(),expires_at:q.string()}),Mx0=q.object({app_name:q.string().describe("App name from registry (e.g., '@deco/openrouter')"),selected_tools:q.array(q.string()).nullable().optional().describe("Selected tools to expose (null = all)"),selected_resources:q.array(q.string()).nullable().optional().describe("Selected resources to expose (null = all)"),selected_prompts:q.array(q.string()).nullable().optional().describe("Selected prompts to expose (null = all)")}),wx0=q.object({title:q.string().describe("Title for the template"),description:q.string().optional().describe("Optional description"),icon:q.string().optional().describe("Optional icon URL"),registry_id:q.string().describe("Connection ID of the registry to look up apps from"),required_apps:q.array(Mx0).describe("Apps to include - only app_name required, details fetched from registry"),redirect_url:q.string().optional().describe("URL to redirect to after completion"),webhook_url:q.string().optional().describe("Webhook URL to call on completion"),event_type:q.string().optional().describe("Event type to emit (default: integration.completed)"),agent_title_template:q.string().optional().describe("Template for agent title (supports {{externalUserId}})"),agent_instructions:q.string().optional().describe("Instructions for the created agent"),tool_selection_mode:q.enum(["inclusion","exclusion"]).optional().describe("Tool selection mode for the agent")}),Ax0=q.object({id:q.string().describe("Template ID to update"),title:q.string().optional(),description:q.string().nullable().optional(),icon:q.string().nullable().optional(),registry_id:q.string().optional().describe("Connection ID of the registry (required if updating required_apps)"),required_apps:q.array(Mx0).optional().describe("Updated apps (details will be fetched from registry)"),redirect_url:q.string().nullable().optional(),webhook_url:q.string().nullable().optional(),event_type:q.string().optional(),agent_title_template:q.string().optional(),agent_instructions:q.string().nullable().optional(),tool_selection_mode:q.enum(["inclusion","exclusion"]).optional(),status:q.enum(["active","inactive"]).optional()}),Px0=q.object({id:q.string().describe("Template ID")}),Ex0=q.object({}),Tx0=q.object({id:q.string().describe("Template ID to delete")}),Cx0=q.object({templateId:q.string().describe("Template ID"),externalUserId:q.string().describe("External user ID from your platform"),expiresInSeconds:q.number().optional().describe("Session expiration in seconds (default: 7 days)")}),Rx0=q.object({sessionId:q.string().describe("Session ID"),url:q.string().describe("URL for the connect flow"),expiresAt:q.string().describe("Session expiration time"),agentId:q.string().nullable().optional().describe("Virtual MCP ID for this user (unique per template + user)"),created:q.boolean().describe("Whether the agent was newly created (true) or already existed (false)")}),Ix0=q.object({templateId:q.string().optional().describe("Filter by template ID")}),jx0=q.object({sessions:q.array(lv6)}),Sx0=q.object({externalUserId:q.string().describe("External user ID to find agents for")}),dv6=q.object({id:q.string().describe("Agent (Virtual MCP) ID"),title:q.string(),external_user_id:q.string(),template_id:q.string().nullable(),created_at:q.string()}),kx0=q.object({agents:q.array(dv6)}),vx0=q.object({externalUserId:q.string().describe("External user ID whose session data should be cleared")}),_x0=q.object({success:q.boolean(),deletedAgents:q.number().describe("Number of agents (Virtual MCPs) deleted"),deletedConnections:q.number().describe("Number of child connections deleted"),deletedSessions:q.number().describe("Number of sessions deleted")})});function cv6(Y){if(!Y?.url)return null;try{let Q=new URL(Y.url);if(Q.hostname==="github.com"){let X=Q.pathname.split("/").filter(Boolean);if(X.length>=1)return`https://github.com/${X[0]}.png`}}catch{}return null}function nv6(Y){return Y.find((X)=>X.name.endsWith("_LIST"))?.name??null}function iv6(Y){if(!Y)return[];if(Array.isArray(Y))return Y;if(typeof Y==="object"&&Y!==null){let Q=Object.keys(Y).find((X)=>Array.isArray(Y[X]));if(Q)return Y[Q]}return[]}function av6(Y,Q,X,J){let G=Y.server,K=Y._meta?.["mcp.mesh"],W=K?.friendlyName||K?.friendly_name||Y.title||G?.title||G?.name||"Unnamed MCP Server",Z=G?.description||null,H=G?.icons?.[0]?.src||cv6(G?.repository)||null,$=K?.oauth_config,F=$&&typeof $.authorizationEndpoint==="string"&&typeof $.tokenEndpoint==="string"&&typeof $.clientId==="string"&&Array.isArray($.scopes)&&($.grantType==="authorization_code"||$.grantType==="client_credentials")?{authorizationEndpoint:$.authorizationEndpoint,tokenEndpoint:$.tokenEndpoint,clientId:$.clientId,scopes:$.scopes,grantType:$.grantType}:null,V=G?.packages??[],B=G?.remotes??[],U,z,D=null,L=B[0],w=V[0];if(L){if(U=pv6[L.type??""]??L.type?.toUpperCase()??"HTTP",z=L.url??null,L.headers&&L.headers.length>0){let E={};for(let T of L.headers)if(T.name&&T.value)E[T.name]=T.value;if(Object.keys(E).length>0)D={headers:E}}}else if(w){U="STDIO",z=null;let E=w.identifier||w.name,T={};if(w.environmentVariables){for(let C of w.environmentVariables)if(C.name)T[C.name]=""}D={command:"npx",args:E?["-y",E]:[],...Object.keys(T).length>0&&{envVars:T}}}else U="HTTP",z=null;return{title:W,description:Z,icon:H,connection_type:U,connection_url:z,connection_headers:D,oauth_config:F,selected_tools:Q,selected_resources:X,selected_prompts:J}}async function rv6(Y,Q,X,J=null,G=null,K=null){let W=await Y.createMCPProxy(Q);try{let Z=await W.listTools(),H=nv6(Z.tools);if(!H)throw Error(`Registry "${Q}" does not have a LIST tool`);let $=await W.callTool({name:H,arguments:{where:{appName:X}}}),F=$.structuredContent??$,B=iv6(F)[0];if(!B)throw Error(`App "${X}" not found in registry "${Q}"`);let U=av6(B,J,G,K);return{app_name:X,...U}}finally{await W.close().catch(console.error)}}async function Xa(Y,Q,X){let J=[];for(let G of X){let K=await rv6(Y,Q,G.app_name,G.selected_tools??null,G.selected_resources??null,G.selected_prompts??null);J.push(K)}return J}var pv6;var GU1=k(()=>{pv6={"streamable-http":"HTTP",http:"HTTP",sse:"SSE",stdio:"STDIO",websocket:"Websocket"}});var yx0;var fx0=k(()=>{pH();sZ();GU1();yx0={name:"USER_SANDBOX_CREATE",description:"Create a new user sandbox for platform integration flows. Specify apps by name and the system will automatically fetch connection details from the registry.",inputSchema:wx0,outputSchema:sq,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=await Xa(J,X.registry_id,X.required_apps.map((Z)=>({app_name:Z.app_name,selected_tools:Z.selected_tools??null,selected_resources:Z.selected_resources??null,selected_prompts:Z.selected_prompts??null})));return await yJ().templates.create({organization_id:J.organization.id,title:X.title,description:X.description??null,icon:X.icon??null,required_apps:G,redirect_url:X.redirect_url??null,webhook_url:X.webhook_url??null,event_type:X.event_type,agent_title_template:X.agent_title_template,agent_instructions:X.agent_instructions??null,tool_selection_mode:X.tool_selection_mode,created_by:J.auth.user?.id??null})}}});var bx0;var hx0=k(()=>{pH();sZ();GU1();bx0={name:"USER_SANDBOX_UPDATE",description:"Update an existing user sandbox. If updating required_apps, provide registry_id to auto-fetch details.",inputSchema:Ax0,outputSchema:sq,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=yJ(),K=await G.templates.findById(X.id);if(!K)throw Error(`Template not found: ${X.id}`);if(K.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");let W=void 0;if(X.required_apps&&X.required_apps.length>0){if(!X.registry_id)throw Error("registry_id is required when updating required_apps");W=await Xa(J,X.registry_id,X.required_apps.map((H)=>({app_name:H.app_name,selected_tools:H.selected_tools??null,selected_resources:H.selected_resources??null,selected_prompts:H.selected_prompts??null})))}return await G.templates.update(X.id,{title:X.title,description:X.description,icon:X.icon,required_apps:W,redirect_url:X.redirect_url,webhook_url:X.webhook_url,event_type:X.event_type,agent_title_template:X.agent_title_template,agent_instructions:X.agent_instructions,tool_selection_mode:X.tool_selection_mode,status:X.status})}}});var xx0;var gx0=k(()=>{m1();pH();sZ();xx0={name:"USER_SANDBOX_DELETE",description:"Delete a user sandbox",inputSchema:Tx0,outputSchema:q.object({success:q.boolean(),id:q.string()}),handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=yJ(),K=await G.templates.findById(X.id);if(!K)throw Error(`Template not found: ${X.id}`);if(K.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");return await G.templates.delete(X.id),{success:!0,id:X.id}}}});var ux0;var mx0=k(()=>{m1();pH();sZ();ux0={name:"USER_SANDBOX_LIST",description:"List all user sandbox in the organization",inputSchema:Ex0,outputSchema:q.object({templates:q.array(sq)}),handler:async(Y,Q)=>{let X=Q;if(!X.organization)throw Error("Organization context required");return await X.access.check(),{templates:await yJ().templates.list(X.organization.id)}}}});var lx0;var dx0=k(()=>{pH();sZ();lx0={name:"USER_SANDBOX_GET",description:"Get a user sandbox by ID",inputSchema:Px0,outputSchema:sq,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let K=await yJ().templates.findById(X.id);if(K&&K.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");return K}}});async function px0(Y,Q){let X=await Q.sessions.findById(Y);if(!X)throw new s$("Session not found","SESSION_NOT_FOUND");if(new Date(X.expires_at)<new Date)throw new s$("Session has expired","SESSION_EXPIRED");return X}async function ov6(Y,Q){let X=await px0(Y,Q);if(X.status==="completed")throw new s$("Session is already completed. Create a new session to reconfigure.","SESSION_COMPLETED");return X}function sv6(Y,Q){let X=Y.metadata;if(!X)throw new s$("Connection has no metadata","CONNECTION_ACCESS_DENIED");let J=X[tq.SESSION_ID]===Q.id,G=X[tq.EXTERNAL_USER_ID]===Q.external_user_id&&X[tq.TEMPLATE_ID]===Q.template_id;if(!J&&!G)throw new s$("Access denied: connection does not belong to this session","CONNECTION_ACCESS_DENIED")}function WU1(Y,Q,X){return{[tq.SESSION_ID]:Y,[tq.EXTERNAL_USER_ID]:Q,[tq.TEMPLATE_ID]:X,source:"user-sandbox"}}function ZU1(Y,Q){return{[tq.EXTERNAL_USER_ID]:Y,[tq.TEMPLATE_ID]:Q,source:"user-sandbox"}}async function YO(Y,Q,X){let J=X?.allowCompleted?await px0(Y,Q):await ov6(Y,Q);if(X?.connection)sv6(X.connection,J);return J}var tq,s$;var cx0=k(()=>{tq={SESSION_ID:"user_sandbox_session_id",EXTERNAL_USER_ID:"user_sandbox_external_user_id",TEMPLATE_ID:"user_sandbox_id"};s$=class s$ extends Error{code;constructor(Y,Q){super(Y);this.code=Q;this.name="SessionAccessError"}}});var KU1=k(()=>{cx0()});async function ev6(Y,Q,X,J,G,K,W,Z){let H=Y,$=await H.selectFrom("user_sandbox_agents").select("connection_id").where("user_sandbox_id","=",J).where("external_user_id","=",G).executeTakeFirst();if($)return{connectionId:$.connection_id,created:!1};let F=new Date().toISOString(),V=`usa_${Date.now().toString(36)}${crypto.randomUUID().replace(/-/g,"").substring(0,8)}`,B=`vir_${Date.now().toString(36)}${crypto.randomUUID().replace(/-/g,"").substring(0,8)}`;try{return await H.transaction().execute(async(U)=>{await U.insertInto("connections").values({id:B,organization_id:Q,created_by:X,title:K,description:W,icon:null,app_name:null,app_id:null,connection_type:"VIRTUAL",connection_url:`virtual://${B}`,connection_token:null,connection_headers:JSON.stringify({tool_selection_mode:Z}),oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:JSON.stringify(ZU1(G,J)),tools:null,bindings:null,status:"active",created_at:F,updated_at:F}).execute(),await U.insertInto("user_sandbox_agents").values({id:V,user_sandbox_id:J,external_user_id:G,connection_id:B,created_at:F}).execute()}),{connectionId:B,created:!0}}catch(U){let z=String(U);if(z.includes("UNIQUE constraint")||z.includes("duplicate key")){let D=await H.selectFrom("user_sandbox_agents").select("connection_id").where("user_sandbox_id","=",J).where("external_user_id","=",G).executeTakeFirst();if(D)return{connectionId:D.connection_id,created:!1}}throw U}}var tv6=604800,nx0;var ix0=k(()=>{pH();sZ();KU1();nx0={name:"USER_SANDBOX_CREATE_SESSION",description:"Create a connect session URL for an external user. Returns a URL that the user can visit to configure their integrations. Also creates a unique Virtual MCP (agent) for this user if one doesn't exist.",inputSchema:Cx0,outputSchema:Rx0,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=yJ(),K=await G.templates.findById(X.templateId);if(!K)throw Error(`Template not found: ${X.templateId}`);if(K.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");if(K.status!=="active")throw Error("Template is not active");let W=K.agent_title_template.replace("{{externalUserId}}",X.externalUserId),Z=K.created_by??J.auth.user?.id??"system",{connectionId:H,created:$}=await ev6(J.db,J.organization.id,Z,K.id,X.externalUserId,W,K.agent_instructions,K.tool_selection_mode),F=await G.sessions.findExisting(X.templateId,X.externalUserId);if(F){if(!F.created_agent_id)await G.sessions.update(F.id,{created_agent_id:H});let D=JU1();return{sessionId:F.id,url:`${D}/connect/${F.id}`,expiresAt:F.expires_at,agentId:F.created_agent_id??H,created:$}}let V=X.expiresInSeconds??tv6,B=new Date(Date.now()+V*1000).toISOString(),U=await G.sessions.create({template_id:X.templateId,organization_id:J.organization.id,external_user_id:X.externalUserId,redirect_url:K.redirect_url,expires_at:B,created_agent_id:H}),z=JU1();return{sessionId:U.id,url:`${z}/connect/${U.id}`,expiresAt:U.expires_at,agentId:H,created:$}}}});var ax0;var rx0=k(()=>{pH();sZ();ax0={name:"USER_SANDBOX_LIST_SESSIONS",description:"List connect sessions for monitoring and management",inputSchema:Ix0,outputSchema:jx0,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=yJ(),K;if(X.templateId){let W=await G.templates.findById(X.templateId);if(!W)throw Error(`Template not found: ${X.templateId}`);if(W.organization_id!==J.organization.id)throw Error("Access denied: template belongs to another organization");K=await G.sessions.listByTemplate(X.templateId)}else K=await G.sessions.listByOrganization(J.organization.id);return{sessions:K}}}});var Y_6="user_sandbox_external_user_id",Q_6="user_sandbox_id",ox0;var sx0=k(()=>{pH();ox0={name:"USER_SANDBOX_LIST_USER_AGENTS",description:"List all agents (Virtual MCPs) created for an external user. Use this to find agents created via user sandbox for a specific user in your platform.",inputSchema:Sx0,outputSchema:kx0,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");return await J.access.check(),{agents:(await J.storage.connections.list(J.organization.id)).filter((W)=>{if(W.connection_type!=="VIRTUAL")return!1;let Z=W.metadata;if(!Z)return!1;return Z[Y_6]===X.externalUserId}).map((W)=>{let Z=W.metadata;return{id:W.id,title:W.title,external_user_id:X.externalUserId,template_id:Z[Q_6]??null,created_at:W.created_at}})}}}});var X_6="user_sandbox_external_user_id",tx0;var ex0=k(()=>{pH();sZ();tx0={name:"USER_SANDBOX_CLEAR_USER_SESSION",description:"Clear all session data for an external user, revoking all access they've granted. This deletes their agents (Virtual MCPs), child connections, OAuth tokens, and sessions. Use this when a user wants to disconnect all their integrations.",inputSchema:vx0,outputSchema:_x0,handler:async(Y,Q)=>{let X=Y,J=Q;if(!J.organization)throw Error("Organization context required");await J.access.check();let G=J.db,K=yJ(),Z=(await G.selectFrom("connections").select(["id","metadata"]).where("organization_id","=",J.organization.id).where("connection_type","=","VIRTUAL").execute()).filter((F)=>{if(!F.metadata)return!1;try{return JSON.parse(F.metadata)[X_6]===X.externalUserId}catch{return!1}}).map((F)=>F.id),H=0;if(Z.length>0){let V=(await G.selectFrom("connection_aggregations").select("child_connection_id").where("parent_connection_id","in",Z).execute()).map((B)=>B.child_connection_id);if(await G.deleteFrom("connection_aggregations").where("parent_connection_id","in",Z).execute(),V.length>0)await G.deleteFrom("downstream_tokens").where("connectionId","in",V).execute(),await G.deleteFrom("connections").where("id","in",V).execute(),H=V.length;await G.deleteFrom("connections").where("id","in",Z).execute(),await G.deleteFrom("user_sandbox_agents").where("external_user_id","=",X.externalUserId).execute()}let $=await K.sessions.deleteByExternalUserId(J.organization.id,X.externalUserId);return{success:!0,deletedAgents:Z.length,deletedConnections:H,deletedSessions:$}}}});var Yg0;var Qg0=k(()=>{fx0();hx0();gx0();mx0();dx0();ix0();rx0();sx0();ex0();sZ();Yg0=[yx0,bx0,xx0,ux0,lx0,nx0,ax0,ox0,tx0]});function J_6(Y){let Q=Date.now().toString(36),X=crypto.randomUUID().replace(/-/g,"").substring(0,8);return`${Y}_${Q}${X}`}async function HU1(Y,Q,X,J){let G={success:!1,agentId:Y.created_agent_id,connectionIds:[],redirectUrl:null,eventEmitted:!1,webhookCalled:!1};try{let K=J.db,W=new Date().toISOString(),Z=Y.created_agent_id;if(!Z)throw Error("Session has no agent - this should not happen");let H=[],$=[];for(let[B,U]of Object.entries(Y.app_statuses))if(U.configured&&U.connection_id){H.push(U.connection_id);let z=Q.required_apps.find((D)=>D.app_name===B);$.push({appName:B,connectionId:U.connection_id,selectedTools:z?.selected_tools??null,selectedResources:z?.selected_resources??null,selectedPrompts:z?.selected_prompts??null})}if(G.connectionIds=H,await K.deleteFrom("connection_aggregations").where("parent_connection_id","=",Z).execute(),$.length>0)await K.insertInto("connection_aggregations").values($.map((B)=>({id:J_6("agg"),parent_connection_id:Z,child_connection_id:B.connectionId,selected_tools:B.selectedTools?JSON.stringify(B.selectedTools):null,selected_resources:B.selectedResources?JSON.stringify(B.selectedResources):null,selected_prompts:B.selectedPrompts?JSON.stringify(B.selectedPrompts):null,created_at:W}))).execute();await X.sessions.update(Y.id,{status:"completed"});let F={type:Q.event_type,data:{externalUserId:Y.external_user_id,agentId:Z,templateId:Q.id,sessionId:Y.id,connections:H.map((B)=>{let U=Object.entries(Y.app_statuses).find(([z,D])=>D.connection_id===B)?.[0];return{id:B,appName:U??"unknown"}})}};if(J.eventBus)try{await J.eventBus.publish(J.organizationId,"user-sandbox",F),G.eventEmitted=!0}catch(B){console.error("[UserSandbox] Failed to emit completion event:",B)}if(Q.webhook_url)try{let B=await fetch(Q.webhook_url,{method:"POST",headers:{"Content-Type":"application/json","X-User-Sandbox-Event":Q.event_type},body:JSON.stringify(F.data)});if(!B.ok)console.error("[UserSandbox] Webhook returned error:",B.status);else G.webhookCalled=!0}catch(B){console.error("[UserSandbox] Failed to call webhook:",B)}let V=Y.redirect_url??Q.redirect_url;if(V){let B=new URL(V);B.searchParams.set("sessionId",Y.id),B.searchParams.set("externalUserId",Y.external_user_id),B.searchParams.set("agentId",Z),G.redirectUrl=B.toString()}return G.success=!0,G}catch(K){throw console.error("[UserSandbox] Completion failed:",K),K}}var Xg0=()=>{};function G_6(){let Y=Date.now().toString(36),Q=crypto.randomUUID().replace(/-/g,"").substring(0,8);return`conn_${Y}${Q}`}async function W_6(Y,Q,X,J,G,K,W){let Z=G_6(),H=new Date().toISOString();if(!W.title)throw Error(`App "${W.app_name}" is missing required field: title`);if(!W.connection_type)throw Error(`App "${W.app_name}" is missing required field: connection_type`);if(!W.connection_url&&W.connection_type!=="STDIO")throw Error(`App "${W.app_name}" is missing required field: connection_url`);let $={id:Z,organization_id:Q,created_by:X,title:W.title,description:W.description??null,icon:W.icon??null,app_name:W.app_name,app_id:null,connection_type:W.connection_type,connection_url:W.connection_url??"",connection_token:null,connection_headers:W.connection_headers?JSON.stringify(W.connection_headers):null,oauth_config:W.oauth_config?JSON.stringify(W.oauth_config):null,configuration_state:null,configuration_scopes:null,metadata:JSON.stringify(WU1(J,G,K)),tools:null,bindings:null,status:"active",created_at:H,updated_at:H};return await Y.insertInto("connections").values($).execute(),Z}function Tk(Y,Q){if(Q instanceof s$){let X={SESSION_NOT_FOUND:404,SESSION_EXPIRED:410,SESSION_COMPLETED:409,ACCESS_DENIED:403,CONNECTION_ACCESS_DENIED:403};return Y.json({error:Q.message,code:Q.code},X[Q.code]??400)}return console.error("[UserSandbox] Connect API error:",Q),Y.json({error:Q instanceof Error?Q.message:"Internal error"},500)}function $U1(Y,Q){let X=Q.db,J=new Ak(X),G=new Pk(X),K={templates:J,sessions:G};Y.get("/api/user-sandbox/sessions/:sessionId",async(W)=>{try{let Z=W.req.param("sessionId"),H=await YO(Z,K,{allowCompleted:!0}),$=await J.findById(H.template_id);if(!$)return W.json({error:"Template not found"},404);return W.json({session:{id:H.id,status:H.status,external_user_id:H.external_user_id,expires_at:H.expires_at,redirect_url:H.redirect_url,created_agent_id:H.created_agent_id},template:{id:$.id,title:$.title,description:$.description,icon:$.icon},apps:$.required_apps.map((F)=>({app_name:F.app_name,title:F.title,description:F.description,icon:F.icon,connection_type:F.connection_type,requires_oauth:!!F.oauth_config,selected_tools:F.selected_tools,selected_resources:F.selected_resources,selected_prompts:F.selected_prompts,status:H.app_statuses[F.app_name]??{configured:!1,connection_id:null,error:null}}))})}catch(Z){return Tk(W,Z)}}),Y.post("/api/user-sandbox/sessions/:sessionId/provision",async(W)=>{try{let Z=W.req.param("sessionId"),H=await W.req.json();if(!H.app_name)return W.json({error:"app_name is required"},400);let $=await YO(Z,K,{allowCompleted:!0}),F=await J.findById($.template_id);if(!F)return W.json({error:"Template not found"},404);let V=F.required_apps.find((D)=>D.app_name===H.app_name);if(!V)return W.json({error:`App "${H.app_name}" is not required by this template`},400);let B=$.app_statuses[H.app_name];if(B?.connection_id)return W.json({success:!0,connection_id:B.connection_id,already_provisioned:!0,requires_oauth:!!V.oauth_config});if(!F.created_by)return W.json({error:"Template is missing created_by - cannot create connections"},500);let U=await W_6(X,$.organization_id,F.created_by,Z,$.external_user_id,$.template_id,V),z={...$.app_statuses,[H.app_name]:{configured:!1,connection_id:U,error:null}};return await G.update(Z,{status:"in_progress",app_statuses:z}),W.json({success:!0,connection_id:U,already_provisioned:!1,requires_oauth:!!V.oauth_config})}catch(Z){return Tk(W,Z)}}),Y.post("/api/user-sandbox/sessions/:sessionId/configure",async(W)=>{try{let Z=W.req.param("sessionId"),H=await W.req.json();if(!H.app_name)return W.json({error:"app_name is required"},400);let $=await YO(Z,K,{allowCompleted:!0}),F=await J.findById($.template_id);if(!F)return W.json({error:"Template not found"},404);if(!F.required_apps.find((L)=>L.app_name===H.app_name))return W.json({error:`App "${H.app_name}" is not required by this template`},400);let B=$.app_statuses[H.app_name],z={configured:!0,connection_id:H.connection_id??B?.connection_id??null,error:null},D={...$.app_statuses,[H.app_name]:z};return await G.update(Z,{status:"in_progress",app_statuses:D}),W.json({success:!0,app_name:H.app_name,status:z})}catch(Z){return Tk(W,Z)}}),Y.post("/api/user-sandbox/sessions/:sessionId/oauth-token",async(W)=>{try{let Z=W.req.param("sessionId"),H=await W.req.json();if(!H.connection_id)return W.json({error:"connection_id is required"},400);if(!H.access_token)return W.json({error:"access_token is required"},400);let $=await YO(Z,K,{allowCompleted:!0});if(!Object.values($.app_statuses).some((E)=>E.connection_id===H.connection_id))return W.json({error:"Connection does not belong to this session"},403);let V=H.expires_in?new Date(Date.now()+H.expires_in*1000):null,B=new Date().toISOString(),U=await Q.vault.encrypt(H.access_token),z=H.refresh_token?await Q.vault.encrypt(H.refresh_token):null,D=H.client_secret?await Q.vault.encrypt(H.client_secret):null,L=X,w=await L.selectFrom("downstream_tokens").select(["id"]).where("connectionId","=",H.connection_id).executeTakeFirst();if(w)await L.updateTable("downstream_tokens").set({accessToken:U,refreshToken:z,scope:H.scope??null,expiresAt:V?.toISOString()??null,clientId:H.client_id??null,clientSecret:D,tokenEndpoint:H.token_endpoint??null,updatedAt:B}).where("id","=",w.id).execute();else{let E=`dtok_${Date.now().toString(36)}${crypto.randomUUID().replace(/-/g,"").substring(0,8)}`;await L.insertInto("downstream_tokens").values({id:E,connectionId:H.connection_id,accessToken:U,refreshToken:z,scope:H.scope??null,expiresAt:V?.toISOString()??null,clientId:H.client_id??null,clientSecret:D,tokenEndpoint:H.token_endpoint??null,createdAt:B,updatedAt:B}).execute()}return W.json({success:!0,expiresAt:V})}catch(Z){return Tk(W,Z)}}),Y.post("/api/user-sandbox/sessions/:sessionId/complete",async(W)=>{try{let Z=W.req.param("sessionId"),H=await YO(Z,K,{allowCompleted:!0}),$=await J.findById(H.template_id);if(!$)return W.json({error:"Template not found"},404);if($.required_apps.filter((B)=>{return H.app_statuses[B.app_name]?.configured}).length===0)return W.json({error:"At least one app must be configured"},400);let V=await HU1(H,$,K,{organizationId:H.organization_id,db:X});return W.json({success:V.success,completed:!0,agentId:V.agentId,redirectUrl:V.redirectUrl,eventEmitted:V.eventEmitted,webhookCalled:V.webhookCalled})}catch(Z){return Tk(W,Z)}})}var Jg0=k(()=>{YU1();QU1();KU1();Xg0()});var Gg0=k(()=>{Jg0()});var Wg0;var Zg0=k(()=>{Ox0();Lx0();Qg0();Gg0();Wg0={id:Ya,description:Bx0,tools:Yg0,publicRoutes:(Y,Q)=>{$U1(Y,Q)},migrations:Dx0,createStorage:(Y)=>{let Q=Nx0(Y);return Ek(Q),Q}}});var Kg0="workflows",Hg0="Create workflows for platform end-users";import{sql as $g0}from"kysely";var Fg0;var Vg0=k(()=>{Fg0={name:"001-workflows",async up(Y){await Y.schema.createTable("workflow_collection").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(Q)=>Q.notNull()).addColumn("description","text").addColumn("virtual_mcp_id","text",(Q)=>Q.notNull()).addColumn("steps","text",(Q)=>Q.notNull().defaultTo("[]")).addColumn("created_at","text",(Q)=>Q.notNull().defaultTo($g0`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(Q)=>Q.notNull().defaultTo($g0`CURRENT_TIMESTAMP`)).addColumn("created_by","text").addColumn("updated_by","text").execute(),await Y.schema.createIndex("idx_wf_collection_org").on("workflow_collection").column("organization_id").execute(),await Y.schema.createIndex("idx_wf_collection_created_at").on("workflow_collection").column("created_at").execute(),await Y.schema.createTable("workflow").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("workflow_collection_id","text").addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("steps","text",(Q)=>Q.notNull().defaultTo("[]")).addColumn("input","text").addColumn("virtual_mcp_id","text",(Q)=>Q.notNull()).addColumn("created_at_epoch_ms","bigint",(Q)=>Q.notNull()).addColumn("created_by","text").execute(),await Y.schema.createIndex("idx_workflow_created_at").on("workflow").column("created_at_epoch_ms").execute(),await Y.schema.createIndex("idx_workflow_collection_id").on("workflow").column("workflow_collection_id").execute(),await Y.schema.createTable("workflow_execution").addColumn("id","text",(Q)=>Q.primaryKey()).addColumn("workflow_id","text",(Q)=>Q.notNull().references("workflow.id").onDelete("cascade")).addColumn("organization_id","text",(Q)=>Q.notNull().references("organization.id").onDelete("cascade")).addColumn("status","text",(Q)=>Q.notNull().defaultTo("enqueued")).addColumn("input","text").addColumn("output","text").addColumn("error","text").addColumn("created_at","bigint",(Q)=>Q.notNull()).addColumn("updated_at","bigint",(Q)=>Q.notNull()).addColumn("start_at_epoch_ms","bigint").addColumn("started_at_epoch_ms","bigint").addColumn("completed_at_epoch_ms","bigint").addColumn("timeout_ms","bigint").addColumn("deadline_at_epoch_ms","bigint").addColumn("created_by","text").execute(),await Y.schema.createIndex("idx_wf_execution_status").on("workflow_execution").column("status").execute(),await Y.schema.createIndex("idx_wf_execution_workflow_id").on("workflow_execution").column("workflow_id").execute(),await Y.schema.createIndex("idx_wf_execution_org").on("workflow_execution").column("organization_id").execute(),await Y.schema.createIndex("idx_wf_execution_created_at").on("workflow_execution").column("created_at").execute(),await Y.schema.createTable("workflow_execution_step_result").addColumn("execution_id","text",(Q)=>Q.notNull().references("workflow_execution.id").onDelete("cascade")).addColumn("step_id","text",(Q)=>Q.notNull()).addColumn("started_at_epoch_ms","bigint").addColumn("completed_at_epoch_ms","bigint").addColumn("output","text").addColumn("error","text").addColumn("raw_tool_output","text").execute(),await Y.schema.createIndex("idx_wf_step_result_pk").on("workflow_execution_step_result").columns(["execution_id","step_id"]).unique().execute(),await Y.schema.createIndex("idx_wf_step_result_execution").on("workflow_execution_step_result").column("execution_id").execute()},async down(Y){await Y.schema.dropIndex("idx_wf_step_result_execution").ifExists().execute(),await Y.schema.dropIndex("idx_wf_step_result_pk").ifExists().execute(),await Y.schema.dropIndex("idx_wf_execution_created_at").ifExists().execute(),await Y.schema.dropIndex("idx_wf_execution_org").ifExists().execute(),await Y.schema.dropIndex("idx_wf_execution_workflow_id").ifExists().execute(),await Y.schema.dropIndex("idx_wf_execution_status").ifExists().execute(),await Y.schema.dropIndex("idx_workflow_collection_id").ifExists().execute(),await Y.schema.dropIndex("idx_workflow_created_at").ifExists().execute(),await Y.schema.dropIndex("idx_wf_collection_created_at").ifExists().execute(),await Y.schema.dropIndex("idx_wf_collection_org").ifExists().execute(),await Y.schema.dropTable("workflow_execution_step_result").ifExists().execute(),await Y.schema.dropTable("workflow_execution").ifExists().execute(),await Y.schema.dropTable("workflow").ifExists().execute(),await Y.schema.dropTable("workflow_collection").ifExists().execute()}}});var qg0;var Bg0=k(()=>{Vg0();qg0=[Fg0]});function CG(Y){let Q=Y;if(!Q.organization)throw Error("Organization context required for workflow tools");return Q}function S5(Y){if(Y===null||Y===void 0)return null;if(typeof Y==="object")return Y;if(typeof Y!=="string")return Y;try{return JSON.parse(Y)}catch{return Y}}function Ug0(Y){FU1=Y}function QJ(){if(!FU1)throw Error('Plugin storage not initialized. Make sure the "workflows" plugin is enabled.');return FU1}var FU1=null;function zg0(Y){return{...Y,steps:S5(Y.steps)??[]}}class VU1{db;constructor(Y){this.db=Y}async list(Y,Q={}){let{limit:X=50,offset:J=0}=Q,G=await this.db.selectFrom("workflow_collection").selectAll().where("organization_id","=",Y).orderBy("created_at","desc").limit(X).offset(J).execute(),K=await this.db.selectFrom("workflow_collection").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",Y).executeTakeFirstOrThrow();return{items:G,totalCount:Number(K.count)}}async getById(Y,Q){let X=await this.db.selectFrom("workflow_collection").selectAll().where("id","=",Y).where("organization_id","=",Q).executeTakeFirst();return X?zg0(X):null}async create(Y){let Q=await this.db.insertInto("workflow_collection").values(Y).returningAll().executeTakeFirstOrThrow();return zg0(Q)}async update(Y,Q,X){return await this.db.updateTable("workflow_collection").set({...X,updated_at:new Date().toISOString()}).where("id","=",Y).where("organization_id","=",Q).returningAll().executeTakeFirstOrThrow()}async delete(Y,Q){return await this.db.deleteFrom("workflow_collection").where("id","=",Y).where("organization_id","=",Q).returningAll().executeTakeFirstOrThrow()}}var Dg0=()=>{};function Z_6(Y){return{...Y,steps:S5(Y.steps)??[],input:S5(Y.input)??null}}function eq(Y){return{...Y,output:S5(Y.output),error:S5(Y.error),raw_tool_output:S5(Y.raw_tool_output)}}class qU1{db;constructor(Y){this.db=Y}async _createWorkflow(Y,Q){let X=crypto.randomUUID(),J=Date.now();return await Y.insertInto("workflow").values({id:X,workflow_collection_id:Q.workflowCollectionId??null,organization_id:Q.organizationId,steps:JSON.stringify(Q.steps),input:Q.input?JSON.stringify(Q.input):null,virtual_mcp_id:Q.virtualMcpId,created_at_epoch_ms:J,created_by:Q.createdBy??null}).execute(),{id:X}}async createWorkflow(Y){return this._createWorkflow(this.db,Y)}async getWorkflow(Y){let Q=await this.db.selectFrom("workflow").selectAll().where("id","=",Y).executeTakeFirst();return Q?Z_6(Q):null}async createExecution(Y){return this.db.transaction().execute(async(Q)=>{let X=Date.now(),{id:J}=await this._createWorkflow(Q,{organizationId:Y.organizationId,workflowCollectionId:Y.workflowCollectionId,virtualMcpId:Y.virtualMcpId,input:Y.input,steps:Y.steps,createdBy:Y.createdBy}),G=crypto.randomUUID(),K=Y.startAtEpochMs??X,W=Y.timeoutMs?K+Y.timeoutMs:null;return await Q.insertInto("workflow_execution").values({id:G,workflow_id:J,organization_id:Y.organizationId,status:"enqueued",input:Y.input?JSON.stringify(Y.input):null,created_at:X,updated_at:X,start_at_epoch_ms:K,timeout_ms:Y.timeoutMs??null,deadline_at_epoch_ms:W,created_by:Y.createdBy??null}).execute(),{id:G}})}async getExecution(Y,Q){return await this.db.selectFrom("workflow_execution").selectAll().where("id","=",Y).where("organization_id","=",Q).executeTakeFirst()??null}async getExecutionFull(Y,Q){let X=await this.db.selectFrom("workflow_execution").selectAll().where("id","=",Y).where("organization_id","=",Q).executeTakeFirst();if(!X)return null;let J=await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).execute();return{execution:X,stepResults:J.map(eq)}}async getExecutionContext(Y){let Q=await this.db.selectFrom("workflow_execution").select(["id","status","workflow_id","deadline_at_epoch_ms"]).where("id","=",Y).executeTakeFirst();if(!Q)return null;let X=await this.db.selectFrom("workflow").select(["steps","input","virtual_mcp_id"]).where("id","=",Q.workflow_id).executeTakeFirst();if(!X)return null;let J=await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).execute();return{execution:{id:Q.id,status:Q.status,workflow_id:Q.workflow_id,deadline_at_epoch_ms:Q.deadline_at_epoch_ms},workflow:{steps:S5(X.steps)??[],input:S5(X.input)??null,virtual_mcp_id:X.virtual_mcp_id},stepResults:J.map(eq)}}async claimExecution(Y){let Q=Date.now(),X=await this.db.updateTable("workflow_execution").set({status:"running",updated_at:Q}).where("id","=",Y).where("status","=","enqueued").returningAll().executeTakeFirst();if(!X)return null;let J=await this.getWorkflow(X.workflow_id);if(!J)throw Error(`Workflow ${X.workflow_id} not found for execution ${Y}`);return{execution:X,workflow:J}}async updateExecution(Y,Q,X){let G={updated_at:Date.now()};if(Q.status!==void 0)G.status=Q.status;if(Q.output!==void 0)G.output=JSON.stringify(Q.output);if(Q.error!==void 0)G.error=JSON.stringify(Q.error);if(Q.completed_at_epoch_ms!==void 0)G.completed_at_epoch_ms=Q.completed_at_epoch_ms;let K=this.db.updateTable("workflow_execution").set(G).where("id","=",Y);if(X?.onlyIfStatus)K=K.where("status","=",X.onlyIfStatus);return await K.returningAll().executeTakeFirst()??null}async cancelExecution(Y,Q){let X=Date.now();return!!await this.db.updateTable("workflow_execution").set({status:"cancelled",updated_at:X}).where("id","=",Y).where("organization_id","=",Q).where("status","in",["enqueued","running"]).returningAll().executeTakeFirst()}async resumeExecution(Y,Q){return this.db.transaction().execute(async(X)=>{let J=Date.now();return await X.deleteFrom("workflow_execution_step_result").where("execution_id","=",Y).where("completed_at_epoch_ms","is",null).execute(),!!await X.updateTable("workflow_execution").set({status:"enqueued",updated_at:J,completed_at_epoch_ms:null}).where("id","=",Y).where("organization_id","=",Q).where("status","=","cancelled").returningAll().executeTakeFirst()})}async listExecutions(Y,Q={}){let{limit:X=50,offset:J=0,status:G}=Q,K=this.db.selectFrom("workflow_execution as we").innerJoin("workflow as w","we.workflow_id","w.id").leftJoin("workflow_collection as wc","w.workflow_collection_id","wc.id").select(["we.id","we.workflow_id","we.organization_id","we.status","we.input","we.output","we.error","we.created_at","we.updated_at","we.start_at_epoch_ms","we.started_at_epoch_ms","we.completed_at_epoch_ms","we.timeout_ms","we.deadline_at_epoch_ms","we.created_by","w.virtual_mcp_id"]).select((F)=>F.fn.coalesce("wc.title",F.val("Workflow Execution")).as("title")).where("we.organization_id","=",Y);if(G)K=K.where("we.status","=",G);let W=await K.orderBy("we.created_at","desc").limit(X).offset(J).execute(),Z=this.db.selectFrom("workflow_execution").select((F)=>F.fn.countAll().as("count")).where("organization_id","=",Y);if(G)Z=Z.where("status","=",G);let H=await Z.executeTakeFirstOrThrow(),$=Number(H.count);return{items:W,totalCount:$,hasMore:J+W.length<$}}async createStepResult(Y){let Q=await this.db.insertInto("workflow_execution_step_result").values({execution_id:Y.execution_id,step_id:Y.step_id,started_at_epoch_ms:Y.completed_at_epoch_ms?Date.now():null,completed_at_epoch_ms:Y.completed_at_epoch_ms??null,output:Y.output!==void 0?JSON.stringify(Y.output):null,error:Y.error!==void 0?JSON.stringify(Y.error):null}).onConflict((X)=>X.columns(["execution_id","step_id"]).doNothing()).returningAll().executeTakeFirst();return Q?eq(Q):null}async updateStepResult(Y,Q,X){let J={};if(X.output!==void 0)J.output=JSON.stringify(X.output);if(X.error!==void 0)J.error=JSON.stringify(X.error);if(X.started_at_epoch_ms!==void 0)J.started_at_epoch_ms=X.started_at_epoch_ms;if(X.completed_at_epoch_ms!==void 0)J.completed_at_epoch_ms=X.completed_at_epoch_ms;if(Object.keys(J).length===0)return null;let G=await this.db.updateTable("workflow_execution_step_result").set(J).where("execution_id","=",Y).where("step_id","=",Q).returningAll().executeTakeFirst();return G?eq(G):null}async checkpointAndTransform(Y,Q,X,J){await this.db.updateTable("workflow_execution_step_result").set({raw_tool_output:JSON.stringify(X)}).where("execution_id","=",Y).where("step_id","=",Q).execute();let G,K;try{let H=await J(X);G=H.output,K=H.error}catch(H){K=H instanceof Error?`Transform failed: ${H.message}`:`Transform failed: ${String(H)}`}let W={completed_at_epoch_ms:Date.now()};if(G!==void 0)W.output=JSON.stringify(G);if(K!==void 0)W.error=JSON.stringify(K);let Z=await this.db.updateTable("workflow_execution_step_result").set(W).where("execution_id","=",Y).where("step_id","=",Q).returningAll().executeTakeFirst();return Z?eq(Z):null}async getStepResult(Y,Q){let X=await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).where("step_id","=",Q).executeTakeFirst();return X?eq(X):null}async getStepResults(Y){return(await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).execute()).map(eq)}async deleteStepResult(Y,Q){await this.db.deleteFrom("workflow_execution_step_result").where("execution_id","=",Y).where("step_id","=",Q).execute()}async getStepResultsByPrefix(Y,Q){return(await this.db.selectFrom("workflow_execution_step_result").selectAll().where("execution_id","=",Y).where("step_id","like",`${Q}%`).orderBy("step_id").execute()).map(eq)}async recoverStuckExecutions(){return this.db.transaction().execute(async(Y)=>{let Q=await Y.selectFrom("workflow_execution").select(["id","organization_id"]).where("status","=","running").execute();if(Q.length===0)return[];let X=Q.map((J)=>J.id);return await Y.updateTable("workflow_execution").set({status:"enqueued",updated_at:Date.now()}).where("id","in",X).where("status","=","running").execute(),Q})}}var Og0=()=>{};function Ng0(Y){let Q=Y.db;return{collections:new VU1(Q),executions:new qU1(Q)}}var Lg0=k(()=>{Dg0();Og0()});var Mg0,wg0,Ag0,Pg0,Eg0;var Tg0=k(()=>{m1();LA();KY();Mg0={name:"COLLECTION_WORKFLOW_LIST",description:"List workflows with pagination. Does not include steps -- use GET for full details.",inputSchema:q.object({limit:q.number().optional().default(50),offset:q.number().optional().default(0)}),outputSchema:q.object({items:q.array(q.object({id:q.string(),title:q.string(),description:q.string().nullable(),virtual_mcp_id:q.string(),created_at:q.string(),updated_at:q.string()})),totalCount:q.number(),hasMore:q.boolean()}),handler:async(Y,Q)=>{let X=CG(Q);await X.access.check();let J=Y,G=QJ(),{items:K,totalCount:W}=await G.collections.list(X.organization.id,{limit:J.limit,offset:J.offset});return{items:K.map((Z)=>({id:Z.id,title:Z.title,description:Z.description,virtual_mcp_id:Z.virtual_mcp_id,created_at:Z.created_at,updated_at:Z.updated_at})),totalCount:W,hasMore:(J.offset??0)+K.length<W}}},wg0={name:"COLLECTION_WORKFLOW_GET",description:"Get a single workflow by ID, including its steps.",inputSchema:q.object({id:q.string()}),outputSchema:q.object({item:q.object({id:q.string(),title:q.string(),description:q.string().nullable(),virtual_mcp_id:q.string(),steps:q.array(xD),created_at:q.string(),updated_at:q.string()}).nullable()}),handler:async(Y,Q)=>{let X=CG(Q);await X.access.check();let{id:J}=Y,K=await QJ().collections.getById(J,X.organization.id);if(!K)return{item:null};return{item:{id:K.id,title:K.title,description:K.description,virtual_mcp_id:K.virtual_mcp_id,steps:K.steps,created_at:K.created_at,updated_at:K.updated_at}}}},Ag0={name:"COLLECTION_WORKFLOW_CREATE",description:`Create a workflow template. This is a reusable definition, not an execution.
1152
1152
 
1153
1153
  Key concepts:
1154
1154
  - Steps without references run immediately (in parallel).
@@ -1319,7 +1319,7 @@ ${Y.stack}`;return Q}if(typeof Y==="object"&&Y!==null){let Q=Y,X="";if(typeof Q.
1319
1319
  ${Q.stack}`;return X}try{let G=JSON.stringify(Q,null,2);if(G!=="{}"&&G.length<1000){if(typeof Q.stack==="string"&&Q.stack&&Q.stack.length<2000)return`${G}
1320
1320
 
1321
1321
  Stack trace:
1322
- ${Q.stack}`;return G}}catch{}if(typeof Q.toString==="function")try{let G=Q.toString();if(G!=="[object Object]")return G}catch{}let J=Object.keys(Q);if(J.length>0)return`Object with keys: ${J.join(", ")}`;return"[object Object]"}if(typeof Y==="string")return Y;if(typeof Y==="number"||typeof Y==="boolean")return String(Y);if(typeof Y==="function")return`[Function: ${Y.name||"anon"}]`;if(typeof Y==="symbol")return Y.toString();if(typeof Y==="bigint")return Y.toString();try{return String(Y)}catch{return"Unknown value (could not convert to string)"}}function BO(Y,Q){switch(typeof Q){case"string":return Y.newString(Q);case"number":return Y.newNumber(Q);case"boolean":return Q?Y.true:Y.false;case"undefined":return Y.undefined;case"object":{if(Q===null)return Y.null;if(Array.isArray(Q)){let J=Y.newArray();return Q.forEach((G,K)=>{let W=BO(Y,G);try{Y.setProp(J,String(K),W)}finally{W.dispose?.()}}),J}let X=Y.newObject();for(let[J,G]of Object.entries(Q)){let K=BO(Y,G);try{Y.setProp(X,J,K)}finally{K.dispose?.()}}return X}case"function":{let X=`__hostFn_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return Y.newFunction(X,(...G)=>{try{let K=G.map((Z)=>Y.dump(Z)),W=Q(...K);if(W&&typeof W.then==="function"){let Z=Y.newPromise();return W.then((H)=>{try{let $=BO(Y,H);Z.resolve($),$.dispose()}catch($){let F=qO($),V=Y.newString(`Promise resolution error: ${F}`);Z.reject(V),V.dispose()}finally{Y.runtime.executePendingJobs()}}).catch((H)=>{let $=qO(H),F=Y.newString(`Promise rejection: ${$}`);Z.reject(F),F.dispose(),Y.runtime.executePendingJobs()}),Z.handle}return BO(Y,W)}catch(K){let W=qO(K);return Y.newString(`HostFunctionError: ${W}`)}finally{G.forEach((K)=>K.dispose())}})}case"bigint":return Y.newString(Q.toString());case"symbol":return Y.newString(Q.toString());default:try{return Y.newString(String(Q))}catch{return Y.undefined}}}var Lp0=()=>{};function qD1(Y){let Q=Y.runtime.executePendingJobs(100);try{if("unwrap"in Q&&typeof Q.unwrap==="function")Q.unwrap()}finally{if("dispose"in Q&&typeof Q.dispose==="function")Q.dispose()}}async function Xr(Y,Q,X){let J=Date.now(),G=Y.resolvePromise(Q);while(!0){qD1(Y);let K=await Promise.race([G,lh6(0).then(()=>null)]);if(K!==null)return K;if(Date.now()-J>X)throw Error(`Timed out after ${X}ms while awaiting a QuickJS promise`)}}async function Jv({tools:Y,code:Q,timeoutMs:X}){let W=[];try{const J=RB(W,await VD1({memoryLimitBytes:33554432,stackSizeBytes:524288}),0);const G=RB(W,J.newContext({interruptAfterMs:X}),0);const K=RB(W,FD1(G),0);try{let F=G.evalCode(Q,"index.mjs",{strip:!0,strict:!0,type:"module"}),V=G.unwrapResult(F),B=BO(G,Y);G.setProp(G.global,"tools",B);let U=G.runtime.hasPendingJob()?G.unwrapResult(await Xr(G,V,X)):V;if(U!==V)V.dispose();let z=G.getProp(U,"default"),D=G.typeof(z);if(D!=="function")return z.dispose(),U.dispose(),B.dispose(),{error:`Code must export default a function (tools). Got ${D}. Example: export default async (tools) => { /* ... */ }`,consoleLogs:K.logs};let L=G.callFunction(z,G.undefined,B);B.dispose(),z.dispose(),U.dispose();let w=G.unwrapResult(L),E=await Xr(G,w,X);w.dispose();let T=G.unwrapResult(E);if(G.runtime.hasPendingJob())qD1(G);let C=G.dump(T);return T.dispose(),{returnValue:C,consoleLogs:K.logs}}catch(F){return console.log(F),{error:qO(F),consoleLogs:K.logs}}}catch(Z){var H=Z,$=1}finally{uo(W,H,$)}}async function BD1({input:Y,code:Q,timeoutMs:X}){let W=[];try{const J=RB(W,await VD1({memoryLimitBytes:33554432,stackSizeBytes:524288}),0);const G=RB(W,J.newContext({interruptAfterMs:X}),0);const K=RB(W,FD1(G),0);try{let F=G.evalCode(Q,"index.mjs",{strip:!0,strict:!0,type:"module"}),V=G.unwrapResult(F),B=BO(G,Y);G.setProp(G.global,"input",B);let U=G.runtime.hasPendingJob()?G.unwrapResult(await Xr(G,V,X)):V;if(U!==V)V.dispose();let z=G.getProp(U,"default"),D=G.typeof(z);if(D!=="function")return z.dispose(),U.dispose(),B.dispose(),{error:`Code must export default a function (input). Got ${D}. Example: export default (input) => { return input.items.map(i => i.name); }`,consoleLogs:K.logs};let L=G.callFunction(z,G.undefined,B);B.dispose(),z.dispose(),U.dispose();let w=G.unwrapResult(L),E=await Xr(G,w,X);w.dispose();let T=G.unwrapResult(E);if(G.runtime.hasPendingJob())qD1(G);let C=G.dump(T);return T.dispose(),{returnValue:C,consoleLogs:K.logs}}catch(F){return console.log(F),{error:qO(F),consoleLogs:K.logs}}}catch(Z){var H=Z,$=1}finally{uo(W,H,$)}}var lh6=(Y)=>new Promise((Q)=>setTimeout(Q,Y));var Mp0=k(()=>{Np0();Lp0()});var Jr=k(()=>{Mp0()});async function dh6(Y,Q){let X=Y.connections.map((K)=>K.connection_id),J=[];for(let K of X){let W=await Q.storage.connections.findById(K);if(W&&W.status==="active")J.push(W)}return J.map((K)=>{let W=Y.connections.find((Z)=>Z.connection_id===K.id);return{connection:K,selectedTools:W?.selected_tools??null,selectedResources:W?.selected_resources??null,selectedPrompts:W?.selected_prompts??null}})}async function wp0(Y,Q){return(await Q.storage.connections.list(Y)).filter((J)=>J.status==="active").map((J)=>({connection:J,selectedTools:null,selectedResources:null,selectedPrompts:null}))}async function ph6(Y,Q){let X=new Map;for(let B of Y)X.set(B.connection.id,B);let J=Y.map((B)=>B.connection),G=new Map,K=await Promise.allSettled(J.map(async(B)=>{try{let U=await Q.createMCPProxy(B);return{connection:B,proxy:U}}catch(U){return console.warn(`[code-execution] Failed to create proxy for connection ${B.id}:`,U),null}}));for(let B of K)if(B.status==="fulfilled"&&B.value)G.set(B.value.connection.id,B.value);let W=await Promise.allSettled(Array.from(G.entries()).map(async([B,U])=>{try{let D=(await U.proxy.listTools()).tools,L=X.get(B);if(L?.selectedTools&&L.selectedTools.length>0){let w=new Set(L.selectedTools);D=D.filter((E)=>w.has(E.name))}return{connectionId:B,connectionTitle:U.connection.title,tools:D}}catch(z){return console.error(`[code-execution] Failed to list tools for connection ${B}:`,z),null}})),Z=new Set,H=[],$=new Map;for(let B of W){if(B.status!=="fulfilled"||!B.value)continue;let{connectionId:U,connectionTitle:z,tools:D}=B.value;for(let L of D){if(Z.has(L.name))continue;Z.add(L.name),H.push({...L,_meta:{...L._meta,connectionId:U,connectionTitle:z}}),$.set(L.name,U)}}let F=async(B,U)=>{let z=$.get(B);if(!z)return{content:[{type:"text",text:`Tool not found: ${B}`}],isError:!0};let D=G.get(z);if(!D)return{content:[{type:"text",text:`Connection not found for tool: ${B}`}],isError:!0};return await D.proxy.callTool({name:B,arguments:U})},V=[];for(let[,B]of G)V.push(B.proxy.close().catch(()=>{}));return await Promise.all(V),{tools:H,callTool:F}}async function FP(Y){let Q=P0(Y),X;if(Y.connectionId){let J=await Y.storage.virtualMcps.findById(Y.connectionId,Y.organization?.id);if(J)X=await dh6(J,Y);else X=await wp0(Q.id,Y)}else X=await wp0(Q.id,Y);return ph6(X,Y)}function ch6(Y){return Y.toLowerCase().split(/[\s_\-./]+/).filter((Q)=>Q.length>=2)}function nh6(Y,Q){let X=0,J=Q.name.toLowerCase(),G=(Q.description??"").toLowerCase(),K=(Q._meta?.connectionTitle??"").toLowerCase();for(let W of Y){if(J===W)X+=10;else if(J.includes(W))X+=3;if(G.includes(W))X+=2;if(K.includes(W))X+=1}return X}function Gr(Y,Q,X){let J=ch6(Y);if(J.length===0)return Q.slice(0,X);return Q.map((G)=>({tool:G,score:nh6(J,G)})).filter((G)=>G.score>0).sort((G,K)=>K.score-G.score).slice(0,X).map((G)=>G.tool)}function Wr(Y,Q){let X=new Map(Q.map((G)=>[G.name,G]));return{tools:Y.map((G)=>X.get(G)).filter((G)=>G!==void 0).map((G)=>({name:G.name,description:G.description,connection:G._meta?.connectionTitle??"",inputSchema:G.inputSchema,outputSchema:G.outputSchema})),notFound:Y.filter((G)=>!X.has(G))}}async function Zr(Y,Q,X){let J=Object.fromEntries(Q.tools.map((G)=>[G.name,async(K)=>{let W=await Q.callTool(G.name,K??{});if(W.structuredContent&&typeof W.structuredContent==="object")return W.structuredContent;let Z=W.content;if(Z?.[0]?.type==="text"&&Z[0].text)try{return JSON.parse(Z[0].text)}catch{return Z[0].text}return W}]));return Jv({code:Y,tools:J,timeoutMs:X})}function Gv(Y){return{content:[{type:"text",text:JSON.stringify(Y,null,2)}]}}function KB(Y){return{content:[{type:"text",text:JSON.stringify(Y,null,2)}],isError:!0}}function $F(Y){let Q=new Set(ih6);return Y.filter((X)=>!Q.has(X.name))}var ih6;var UO=k(()=>{Jr();ih6=["CODE_EXECUTION_SEARCH_TOOLS","CODE_EXECUTION_DESCRIBE_TOOLS","CODE_EXECUTION_RUN_CODE"]});var UD1;var Ap0=k(()=>{G4();Xv();UO();UD1=p1({name:"CODE_EXECUTION_SEARCH_TOOLS",description:"Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling CODE_EXECUTION_DESCRIBE_TOOLS for detailed schemas.",annotations:{title:"Search Tools",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:$p0,outputSchema:Fp0,handler:async(Y,Q)=>{q0(Q),P0(Q),await Q.access.check();let X=await FP(Q),J=Gr(Y.query,X.tools,Y.limit);return{query:Y.query,results:J.map((G)=>({name:G.name,description:G.description,connection:G._meta?.connectionTitle??""})),totalAvailable:X.tools.length}}})});var zD1;var Pp0=k(()=>{G4();Xv();UO();zD1=p1({name:"CODE_EXECUTION_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after CODE_EXECUTION_SEARCH_TOOLS to get full input/output schemas before executing code.",annotations:{title:"Describe Tools",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Vp0,outputSchema:qp0,handler:async(Y,Q)=>{q0(Q),P0(Q),await Q.access.check();let X=await FP(Q);return Wr(Y.tools,X.tools)}})});var DD1;var Ep0=k(()=>{G4();Xv();UO();DD1=p1({name:"CODE_EXECUTION_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use CODE_EXECUTION_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',annotations:{title:"Run Code",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Bp0,outputSchema:Up0,handler:async(Y,Q)=>{q0(Q),P0(Q),await Q.access.check();let X=await FP(Q);return await Zr(Y.code,X,Y.timeoutMs)}})});var Tp0=k(()=>{Ap0();Pp0();Ep0();Xv()});var rh6,oh6,OD1;var Cp0=k(()=>{KY();m1();G4();AS();x$();rh6=q.object({data:PR.describe("Data for the new connection (id is auto-generated if not provided)")}),oh6=q.object({item:W5.describe("The created connection entity")}),OD1=p1({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection in the organization",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:rh6,outputSchema:oh6,handler:async(Y,Q)=>{q0(Q);let X=P0(Q);await Q.access.check();let J=EY(Q);if(!J)throw Error("User ID required to create connection");let G={...Y.data,organization_id:X.id,created_by:J};if(G.connection_type==="VIRTUAL"){let $=Lz(G.connection_url);if(!$)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let F=await Q.storage.virtualMcps.findById($);if(!F)throw Error(`Virtual MCP not found: ${$}`);if(F.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");G.connection_url=Mz($)}let K=await lq({id:`pending-${Date.now()}`,title:G.title,connection_type:G.connection_type,connection_url:G.connection_url,connection_token:G.connection_token,connection_headers:G.connection_headers}).catch(()=>null),W=K?.tools?.length?K.tools:null,Z=K?.scopes?.length?K.scopes:null,H=await Q.storage.connections.create({...G,tools:W,configuration_scopes:Z});return await Q.eventBus.publish(X.id,IY.SELF(X.id),{type:"connection.created",data:H}),{item:H}}})});var sh6,th6,Rp0;var Ip0=k(()=>{m1();wG();sh6=xH.extend({avatar:q.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:q.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:q.string().describe("Virtual MCP ID to use for this assistant"),model:q.object({id:q.string().describe("Model ID"),connectionId:q.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),th6=gH("assistant",sh6),Rp0=[...th6]});var Wv,FF,Sp0,eh6,Yx6,kp0,Qx6,Xx6,Jx6,Gx6,Wx6,Zx6,vp0,Kx6,Hx6,$x6,Fx6,Vx6,qx6,Bx6,Ux6,zx6,Dx6,GH9,Ox6,WH9,jp0,Nx6,Lx6,ND1,Zv;var Kr=k(()=>{m1();hD();wG();Wv=q.lazy(()=>q.union([q.null(),q.string(),q.number(),q.boolean(),q.record(q.string(),Wv),q.array(Wv)])),FF=q.record(q.string(),q.record(q.string(),Wv)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Sp0=q.object({type:q.literal("text"),text:q.string().describe("The text content"),providerOptions:FF}),eh6=q.object({type:q.literal("text"),text:q.string().describe("The text content"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Yx6=q.string().describe("File data as URL string"),kp0=q.object({type:q.literal("file"),filename:q.string().optional().describe("Optional filename of the file"),data:Yx6,mediaType:q.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:FF}),Qx6=q.object({type:q.literal("file"),mediaType:q.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:q.string().describe("Generated file data as base64 encoded string")}),Xx6=q.object({type:q.literal("reasoning"),text:q.string().describe("The reasoning text"),providerOptions:FF}),Jx6=q.object({type:q.literal("reasoning"),text:q.string().describe("The reasoning text"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Gx6=q.object({type:q.literal("tool-call"),toolCallId:q.string().describe("ID of the tool call, used to match with tool result"),toolName:q.string().describe("Name of the tool being called"),input:q.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:q.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:FF}),Wx6=q.object({type:q.literal("tool-call"),toolCallId:q.string().describe("ID of the tool call"),toolName:q.string().describe("Name of the tool being called"),input:q.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:q.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Zx6=q.union([q.object({type:q.literal("text"),value:q.string()}),q.object({type:q.literal("json"),value:Wv}),q.object({type:q.literal("error-text"),value:q.string()}),q.object({type:q.literal("error-json"),value:Wv}),q.object({type:q.literal("content"),value:q.array(q.union([q.object({type:q.literal("text"),text:q.string().describe("Text content")}),q.object({type:q.literal("media"),data:q.string().describe("Base-64 encoded media data"),mediaType:q.string().describe("IANA media type")})]))}),q.object({type:q.literal("execution-denied"),reason:q.string().optional()}),q.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),vp0=q.object({type:q.literal("tool-result"),toolCallId:q.string().describe("ID of the tool call that this result is associated with"),toolName:q.string().describe("Name of the tool that generated this result"),output:Zx6.describe("Result of the tool call"),result:q.unknown().describe("Unknown result of the tool call"),providerOptions:FF}),Kx6=q.object({type:q.literal("tool-result"),toolCallId:q.string().describe("ID of the tool call that this result is associated with"),toolName:q.string().describe("Name of the tool that generated this result"),result:q.any().describe("Result of the tool call (JSON-serializable)"),isError:q.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:q.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Hx6=q.union([q.object({type:q.literal("source"),sourceType:q.literal("url"),id:q.string().describe("The ID of the source"),url:q.string().describe("The URL of the source"),title:q.string().optional().describe("The title of the source"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),q.object({type:q.literal("source"),sourceType:q.literal("document"),id:q.string().describe("The ID of the source"),mediaType:q.string().describe("IANA media type of the document (e.g., application/pdf)"),title:q.string().describe("The title of the document"),filename:q.string().optional().describe("Optional filename of the document"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")})]),$x6=q.object({role:q.literal("system"),content:q.string().describe("System message content"),providerOptions:FF}),Fx6=q.object({role:q.literal("user"),content:q.array(q.union([Sp0,kp0])).describe("User message content parts (text or file)"),providerOptions:FF}),Vx6=q.object({role:q.literal("assistant"),content:q.array(q.union([Sp0,kp0,Xx6,Gx6,vp0])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:FF}),qx6=q.object({role:q.literal("tool"),content:q.array(vp0).describe("Tool message content (tool results)"),providerOptions:FF}),Bx6=q.union([$x6,Fx6,Vx6,qx6]),Ux6=q.array(Bx6).describe("A list of messages forming the prompt"),zx6=q.object({prompt:Ux6.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:q.number().optional().describe("Maximum number of tokens to generate"),temperature:q.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:q.number().optional().describe("Nucleus sampling parameter"),topK:q.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:q.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:q.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:q.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:q.array(q.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:q.union([q.object({type:q.literal("text")}),q.object({type:q.literal("json"),schema:q.any().optional().describe("JSON schema that the generated output should conform to"),name:q.string().optional().describe("Name of output that should be generated"),description:q.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:q.array(q.any()).optional().describe("The tools that are available for the model"),toolChoice:q.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:q.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:q.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:q.any().optional().describe("Additional provider-specific options")}),Dx6=q.object({content:q.array(q.union([eh6,Qx6,Jx6,Wx6,Kx6,Hx6])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:q.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:q.looseObject({inputTokens:q.number().optional(),outputTokens:q.number().optional(),totalTokens:q.number().optional(),reasoningTokens:q.number().optional()}).describe("Usage information for the language model call"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata"),request:q.object({body:q.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:q.object({id:q.string().optional().describe("ID for the generated response"),timestamp:q.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:q.string().optional().describe("The ID of the response model that was used"),headers:q.record(q.string(),q.string()).optional().describe("Response headers"),body:q.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:q.array(q.any()).describe("Warnings for the call, e.g. unsupported settings")}),GH9=q.object({stream:q.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:q.object({body:q.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:q.object({headers:q.record(q.string(),q.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),Ox6=q.object({supportedUrls:q.record(q.string(),q.array(q.string())).describe("Supported URL patterns by media type for the provider")}),WH9=q.object({modelId:q.string().describe("The ID of the model"),logo:q.string().nullable(),description:q.string().nullable(),capabilities:q.array(q.string()),limits:q.object({contextWindow:q.number(),maxOutputTokens:q.number()}).nullable(),costs:q.object({input:q.number(),output:q.number()}).nullable(),provider:q.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),jp0=q.object({modelId:q.string().describe("The ID of the model"),callOptions:zx6}),Nx6=xH.extend({logo:q.string().nullable(),description:q.string().nullable(),capabilities:q.array(q.string()),limits:q.object({contextWindow:q.number(),maxOutputTokens:q.number()}).nullable(),costs:q.object({input:q.number(),output:q.number()}).nullable(),provider:q.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),Lx6=gH("llm",Nx6,{readOnly:!0}),ND1=[{name:"LLM_METADATA",inputSchema:q.object({modelId:q.string().describe("The ID of the model")}),outputSchema:Ox6},{name:"LLM_DO_STREAM",inputSchema:jp0,streamable:!0},{name:"LLM_DO_GENERATE",inputSchema:jp0,outputSchema:Dx6},...Lx6],Zv=bH(ND1)});function VP(){return!1}function Hr(Y,Q){return Y===IY.DEV_ASSETS(Q)}function qP(Y,Q){let X=U71(Q,Y),J=new Date().toISOString();return{id:X.id??IY.DEV_ASSETS(Y),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:Y,created_by:"system",created_at:J,updated_at:J,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:Mx6,bindings:["OBJECT_STORAGE"],status:"active"}}var Mx6;var $r=k(()=>{dn();KY();m1();Mx6=mS.map((Y)=>({name:Y.name,description:`${Y.name} operation for local file storage`,inputSchema:q.toJSONSchema(Y.inputSchema),outputSchema:q.toJSONSchema(Y.outputSchema)}))});function Ax6(Y){let Q=[],X=0;while(X<Y.length){let J=Y[X];if(J==="%")Q.push(".*");else if(J==="_")Q.push(".");else if(/[.*+?^${}()|[\]\\]/.test(J))Q.push("\\"+J);else Q.push(J);X++}return Q.join("")}function HB(Y){return typeof Y==="string"||typeof Y==="number"}function Fr(Y,Q){if("conditions"in Q){let{operator:Z,conditions:H}=Q;switch(Z){case"and":return H.every(($)=>Fr(Y,$));case"or":return H.some(($)=>Fr(Y,$));case"not":return!H.every(($)=>Fr(Y,$));default:return!0}}let{field:X,operator:J,value:G}=Q,K=X.join("."),W=LD1(Y,K);switch(J){case"eq":return W===G;case"gt":return HB(W)&&HB(G)&&W>G;case"gte":return HB(W)&&HB(G)&&W>=G;case"lt":return HB(W)&&HB(G)&&W<G;case"lte":return HB(W)&&HB(G)&&W<=G;case"in":return Array.isArray(G)&&G.includes(W);case"like":if(typeof W!=="string"||typeof G!=="string")return!1;if(G.length>100)return!1;let Z=Ax6(G);return new RegExp(`^${Z}$`,"i").test(W);case"contains":if(typeof W!=="string"||typeof G!=="string")return!1;return W.toLowerCase().includes(G.toLowerCase());default:return!0}}function LD1(Y,Q){let X=Q.split("."),J=Y;for(let G of X){if(J==null||typeof J!=="object")return;J=J[G]}return J}function Px6(Y,Q){return[...Y].sort((X,J)=>{for(let G of Q){let K=G.field.join("."),W=LD1(X,K),Z=LD1(J,K),H=0;if(W==null&&Z==null)continue;if(W==null)H=G.nulls==="first"?-1:1;else if(Z==null)H=G.nulls==="first"?1:-1;else if(typeof W==="string"&&typeof Z==="string")H=W.localeCompare(Z);else if(typeof W==="number"&&typeof Z==="number")H=W-Z;else H=String(W).localeCompare(String(Z));if(H!==0)return G.direction==="desc"?-H:H}return 0})}var wx6,Ex6,Tx6,MD1;var _p0=k(()=>{dS();Ip0();wG();Kr();dn();KY();m1();G4();$r();x$();wx6={LLM:ND1,ASSISTANTS:Rp0,OBJECT_STORAGE:mS};Ex6=mZ.extend({binding:q.union([q.object({}).passthrough(),q.string()]).optional(),include_virtual:q.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false.")}),Tx6=u$(W5),MD1=p1({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:Ex6,outputSchema:Tx6,handler:async(Y,Q)=>{await Q.access.check();let X=P0(Q),J=Y.binding?typeof Y.binding==="string"?(()=>{let B=wx6[Y.binding.toUpperCase()];if(!B)throw Error(`Unknown binding: ${Y.binding}`);return B})():Y.binding:void 0,G=J?gn(J):void 0,K=await Q.storage.connections.list(X.id,{includeVirtual:Y.include_virtual??!1});if(VP()){let B=H7(),U=IY.DEV_ASSETS(X.id);if(!K.some((z)=>z.id===U)){let z=qP(X.id,B);K.unshift(z)}}let W=G?await Promise.all(K.map(async(B)=>{if(!B.tools||B.tools.length===0)return null;return G.isImplementedBy(B.tools.map((z)=>({name:z.name,inputSchema:z.inputSchema,outputSchema:z.outputSchema})))?B:null})).then((B)=>B.filter((U)=>U!==null)):K;if(Y.where)W=W.filter((B)=>Fr(B,Y.where));if(Y.orderBy&&Y.orderBy.length>0)W=Px6(W,Y.orderBy);let Z=W.length,H=Y.offset??0,$=Y.limit??100,F=W.slice(H,H+$),V=H+$<Z;return{items:F,totalCount:Z,hasMore:V}}})});class QK{db;vault;constructor(Y,Q){this.db=Y;this.vault=Q}async get(Y){let Q=await this.db.selectFrom("downstream_tokens").selectAll().where("connectionId","=",Y).executeTakeFirst();if(!Q)return null;return this.decryptToken(Q)}async upsert(Y){let Q=new Date().toISOString(),X=await this.vault.encrypt(Y.accessToken),J=Y.refreshToken?await this.vault.encrypt(Y.refreshToken):null,G=Y.clientSecret?await this.vault.encrypt(Y.clientSecret):null;return await this.db.transaction().execute(async(K)=>{let W=await K.selectFrom("downstream_tokens").select(["id","createdAt"]).where("connectionId","=",Y.connectionId).executeTakeFirst();if(W)return await K.updateTable("downstream_tokens").set({accessToken:X,refreshToken:J,scope:Y.scope,expiresAt:Y.expiresAt?.toISOString()??null,clientId:Y.clientId,clientSecret:G,tokenEndpoint:Y.tokenEndpoint,updatedAt:Q}).where("id","=",W.id).execute(),{id:W.id,connectionId:Y.connectionId,accessToken:Y.accessToken,refreshToken:Y.refreshToken,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:W.createdAt,updatedAt:Q,clientId:Y.clientId,clientSecret:Y.clientSecret,tokenEndpoint:Y.tokenEndpoint};let Z=d8("dtok");return await K.insertInto("downstream_tokens").values({id:Z,connectionId:Y.connectionId,accessToken:X,refreshToken:J,scope:Y.scope,expiresAt:Y.expiresAt?.toISOString()??null,clientId:Y.clientId,clientSecret:G,tokenEndpoint:Y.tokenEndpoint,createdAt:Q,updatedAt:Q}).execute(),{id:Z,connectionId:Y.connectionId,accessToken:Y.accessToken,refreshToken:Y.refreshToken,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:Q,updatedAt:Q,clientId:Y.clientId,clientSecret:Y.clientSecret,tokenEndpoint:Y.tokenEndpoint}})}async delete(Y){await this.db.deleteFrom("downstream_tokens").where("connectionId","=",Y).execute()}isExpired(Y,Q=0){if(!Y.expiresAt)return!1;let J=(Y.expiresAt instanceof Date?Y.expiresAt:new Date(Y.expiresAt)).getTime();if(Number.isNaN(J))return!0;return J-Q<Date.now()}async decryptToken(Y){let Q=await this.vault.decrypt(Y.accessToken),X=Y.refreshToken?await this.vault.decrypt(Y.refreshToken):null,J=Y.clientSecret?await this.vault.decrypt(Y.clientSecret):null;return{id:Y.id,connectionId:Y.connectionId,accessToken:Q,refreshToken:X,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:Y.createdAt,updatedAt:Y.updatedAt,clientId:Y.clientId,clientSecret:J,tokenEndpoint:Y.tokenEndpoint}}}var Kv=k(()=>{LG()});var Cx6,wD1;var yp0=k(()=>{wG();G4();Kv();$r();AS();x$();Cx6=CS(W5),wD1=p1({name:"COLLECTION_CONNECTIONS_GET",description:"Get connection details by ID",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:TS,outputSchema:Cx6,handler:async(Y,Q)=>{let X=P0(Q);if(await Q.access.check(),VP()&&Hr(Y.id,X.id))return{item:qP(X.id,H7())};let J=await Q.storage.connections.findById(Y.id);if(!J||J.organization_id!==X.id)return{item:null};if(!J.tools&&J.connection_type!=="VIRTUAL")try{let G=J.connection_token??null;if(!G)try{let H=await new QK(Q.db,Q.vault).get(J.id);if(H?.accessToken)G=H.accessToken}catch{}let K=new Promise((Z,H)=>setTimeout(()=>H(Error("Tool fetch timeout")),2000)),W=await Promise.race([lq({id:J.id,title:J.title,connection_type:J.connection_type,connection_url:J.connection_url,connection_token:G,connection_headers:J.connection_headers}),K]).catch(()=>null);if(W?.tools?.length)return{item:await Q.storage.connections.update(J.id,{tools:W.tools})??J}}catch{}return{item:J}}})});var Vr=(Y,Q)=>{if(Q===null||Q===void 0)return;let X=Y.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),J=Q;for(let G of X){if(J===null||J===void 0||typeof J!=="object")return;J=J[G]}return J};function fp0(Y){let Q=Y.split("::");if(Q.length!==2||!Q[0]||!Q[1])throw Error(`Invalid scope format: ${Y}. Expected format: "KEY::SCOPE"`);return Q}function Rx6(Y){let Q=Y.split("::");if(Q.length!==2||!Q[0]||!Q[1])return null;return Q}function Ix6(Y){if(typeof Y==="object"&&Y!==null&&"value"in Y){let Q=Y.value;if(typeof Q==="string")return Q}return null}function AD1(Y,Q){let X={};if(!Y||!Q)return X;for(let J of Q){if(J==="*"){X["*"]=["*"];continue}let G=Rx6(J);if(!G)continue;let[K,W]=G,Z=Vr(K,Y),H=Ix6(Z);if(H){if(!X[H])X[H]=[];X[H].push(W)}}return X}function bp0(Y,Q){let X=AD1(Y,Q);return new Set(Object.keys(X).filter((J)=>J!=="*"))}var PD1=()=>{};import{randomBytes as jx6}from"crypto";function hp0(){if(Hv)return Hv;let Y=process.env.MESH_JWT_SECRET??c9.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(Y)Hv=new TextEncoder().encode(Y);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),Hv=new Uint8Array(jx6(32));return Hv}async function xp0(Y,Q="5m"){let X=hp0();return await new BG(Y).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Q).sign(X)}async function gp0(Y){try{let Q=hp0(),{payload:X}=await JY(Y,Q);return X}catch{return}}var Hv=null;var ED1=k(()=>{UG();$v()});async function up0(Y){if(!Y.refreshToken)return{success:!1,error:"No refresh token available"};if(!Y.tokenEndpoint)return{success:!1,error:"No token endpoint available"};if(!Y.clientId)return{success:!1,error:"No client ID available"};try{let Q=new URLSearchParams({grant_type:"refresh_token",refresh_token:Y.refreshToken,client_id:Y.clientId});if(Y.clientSecret)Q.set("client_secret",Y.clientSecret);if(Y.scope)Q.set("scope",Y.scope);let X=await fetch(Y.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Q.toString()});if(!X.ok){let G=await X.text();console.error(`[TokenRefresh] Failed to refresh token: ${X.status}`,G);try{let K=JSON.parse(G);return{success:!1,error:K.error_description||K.error||`Token refresh failed: ${X.status}`}}catch{return{success:!1,error:`Token refresh failed: ${X.status}`}}}let J=await X.json();return{success:!0,accessToken:J.access_token,refreshToken:J.refresh_token||Y.refreshToken,expiresIn:J.expires_in,scope:J.scope}}catch(Q){return console.error("[TokenRefresh] Error refreshing token:",Q),{success:!1,error:Q instanceof Error?Q.message:"Token refresh failed"}}}async function Fv(Y,Q,X){let J=Y.id,G=AD1(Y.configuration_state,Y.configuration_scopes),K=Q.auth.user?.id??Q.auth.apiKey?.userId??(X?Y.created_by:void 0),[W,Z]=K?await xp0({sub:K,user:{id:K},metadata:{state:Y.configuration_state??void 0,meshUrl:Q.baseUrl,connectionId:J,organizationId:Q.organization?.id},permissions:G}).then((U)=>[U,null]).catch((U)=>[null,U]):[null,Error("User ID required to issue configuration token")];if(Z)console.error("Failed to issue configuration token:",W);let H=Q.auth.user?.connectionId,$={...H?{"x-caller-id":H}:{},...Q.metadata.wellKnownForwardableHeaders??{},"x-request-id":Q.metadata.requestId},F=null,V=new QK(Q.db,Q.vault),B=await V.get(J);if(B){let U=!!B.refreshToken&&!!B.tokenEndpoint;if(V.isExpired(B,U?300000:0))if(U){console.log(`[Proxy] Token expired for ${J}, attempting refresh`);let D=await up0(B);if(D.success&&D.accessToken)await V.upsert({connectionId:J,accessToken:D.accessToken,refreshToken:D.refreshToken??B.refreshToken,scope:D.scope??B.scope,expiresAt:D.expiresIn?new Date(Date.now()+D.expiresIn*1000):null,clientId:B.clientId,clientSecret:B.clientSecret,tokenEndpoint:B.tokenEndpoint}),F=D.accessToken,console.log(`[Proxy] Token refreshed for ${J}`);else await V.delete(J),console.error(`[Proxy] Token refresh failed for ${J}: ${D.error}`)}else await V.delete(J),console.log(`[Proxy] Token expired without refresh capability for ${J}`);else F=B.accessToken}if(!F&&Y.connection_token)F=Y.connection_token;if(F)$.Authorization=`Bearer ${F}`;if(W)$["x-mesh-token"]=W;return $}var TD1=k(()=>{PD1();ED1();Kv()});function qr(){let Y=new Map;function Q(J,G){let K=Y.get(G);if(K)return console.log(`[ClientPool] Reusing cached client for ${G}`),K;console.log(`[ClientPool] Creating new client for ${G}`);let W=new G5({name:`outbound-client-${G}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}}});W.onclose=()=>{Y.delete(G)};let Z=W.connect(J,{timeout:30000}).then(()=>W).catch((H)=>{throw Y.delete(G),H});return Y.set(G,Z),Z}return Object.assign(Q,{[Symbol.asyncDispose]:async()=>{let J=[];for(let[G,K]of Y)J.push(K.then((W)=>W.close()).catch((W)=>console.error(`[ClientPool] Error closing client ${G}:`,W)));await Promise.all(J),Y.clear()}})}var CD1=k(()=>{Dz()});function mp0(Y){let Q=new wS({command:Y.command,args:Y.args,env:Y.env,cwd:Y.cwd,stderr:"pipe"}),X=Y.name||Y.id,J="\x1B[2m",G="\x1B[0m";return Q.stderr?.on("data",(K)=>{let W=K.toString().trimEnd();if(W)console.error(`${W} \x1B[2m[${X}]\x1B[0m`)}),Q}var lp0=k(()=>{fV1()});class Vv{innerTransport;constructor(Y){this.innerTransport=Y}async start(){return this.innerTransport.onmessage=(Y)=>{this.handleIncomingMessage(Y)},this.innerTransport.onerror=(Y)=>{this.onerror?.(Y)},this.innerTransport.onclose=()=>{this.onclose?.()},this.innerTransport.start()}async send(Y){return this.handleOutgoingMessage(Y)}async close(){return this.innerTransport.close()}async handleOutgoingMessage(Y){return this.innerTransport.send(Y)}handleIncomingMessage(Y){this.onmessage?.(Y)}isRequest(Y){return"method"in Y&&Y.method!==void 0}isResponse(Y){return"result"in Y||"error"in Y&&!("method"in Y)}onmessage;onerror;onclose}function qv(Y,...Q){return Q.reduce((X,J)=>J(X),Y)}var dp0="mcp.mesh";var pp0,RD1,VF;var Bv=k(()=>{pp0=class pp0 extends Error{constructor(Y){super(Y);this.name="UnauthorizedError"}};RD1=class RD1 extends Error{constructor(Y){super(Y);this.name="ForbiddenError"}};VF=class VF{userId;toolName;boundAuth;role;connectionId;getToolMeta;_granted=!1;constructor(Y,Q,X,J,G,K="self",W){this.userId=Q;this.toolName=X;this.boundAuth=J;this.role=G;this.connectionId=K;this.getToolMeta=W}[Symbol.dispose](){this._granted=!1}setToolName(Y){this.toolName=Y}grant(){return this._granted=!0,{[Symbol.dispose]:()=>{this._granted=!1}}}async check(...Y){if(this._granted)return;if(this.toolName?.startsWith("MESH_PUBLIC_")){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new pp0("Authentication required. Please provide a valid OAuth token or API key.")}let Q=Y.length>0?Y:this.toolName?[this.toolName]:[];if(Q.length===0)throw new RD1("No resources specified for access check");for(let X of Q)if(await this.checkResource(X)){this.grant();return}throw new RD1(`Access denied to: ${Q.join(", ")}`)}async checkResource(Y){if(!this.userId&&!this.boundAuth)return!1;if(this.role==="admin"||this.role==="owner")return!0;if(!this.boundAuth)return!1;let Q={};if(this.connectionId)Q[this.connectionId]=[Y];return this.boundAuth.hasPermission(Q)}async isToolPublic(){if(this.toolName?.startsWith("MESH_PUBLIC_"))return!0;if(!this.getToolMeta)return!1;try{let Y=await this.getToolMeta();if(!Y)return!1;let X=Y[dp0]?.public_tool;return X===!0||X==="true"}catch{return!1}}granted(){return this._granted}}});var Sx6="mcp.mesh",BP;var cp0=k(()=>{Bv();BP=class BP extends Vv{options;cachedToolsMap=null;constructor(Y,Q){super(Y);this.options=Q;if(Q.connection.tools)this.cachedToolsMap=new Map(Q.connection.tools.map((X)=>[X.name,X]))}async handleOutgoingMessage(Y){if(!this.isRequest(Y))return this.innerTransport.send(Y);let Q=Y;if(Q.method==="tools/call")await this.authorizeToolCall(Q),this.stripMetaFromArguments(Q);return this.innerTransport.send(Y)}async authorizeToolCall(Y){if(this.options.superUser)return;let X=Y.params.name,{ctx:J,connection:G}=this.options;if(this.isPublicTool(X))return;if(!J.auth.user?.id&&!J.auth.apiKey?.id)throw Error("Authentication required. Please provide a valid OAuth token or API key.");let K=async()=>{return this.cachedToolsMap?.get(X)?._meta};await new VF(J.authInstance,J.auth.user?.id??J.auth.apiKey?.userId,X,J.boundAuth,J.auth.user?.role,G.id,K).check(X)}isPublicTool(Y){if(Y.startsWith("MESH_PUBLIC_"))return!0;if(!this.cachedToolsMap)return!1;let Q=this.cachedToolsMap.get(Y);if(!Q?._meta)return!1;return Q._meta[Sx6]?.public_tool===!0}stripMetaFromArguments(Y){let Q=Y.params;if(Q.arguments&&"_meta"in Q.arguments){let{_meta:X,...J}=Q.arguments;Q.arguments=J}}}});function ip0(Y){if(!Y.isError)return;let Q=Y.content;if(!Array.isArray(Q))return;for(let X of Q)if(X&&typeof X==="object"&&"type"in X&&X.type==="text"&&"text"in X&&typeof X.text==="string")return X.text;return}function jD1(Y){if(!Y)return;let Q=Y._meta;if(!Q||typeof Q!=="object"||Array.isArray(Q))return;let X=Q.properties;if(!X||typeof X!=="object"||Array.isArray(X))return;let J={};for(let[G,K]of Object.entries(X))if(typeof K==="string")J[G]=K;return Object.keys(J).length>0?J:void 0}function SD1(Y,Q){if(!Y&&!Q)return;if(!Y)return Q;if(!Q)return Y;return{...Q,...Y}}function kD1(Y){if(Y&&typeof Y==="object"&&!Array.isArray(Y)){let Q=Y,X=Q.structuredContent;if(X&&typeof X==="object"&&!Array.isArray(X))return X;return Q}return{value:Y}}async function kx6(Y,Q){let X=Y.body;if(!X)return{text:"",truncated:!1};let J=X.getReader(),G=new TextDecoder,K=!1,W=0,Z=[];try{while(!0){let{value:H,done:$}=await J.read();if($)break;if(H){if(W+=H.byteLength,W>Q){K=!0;let F=Q-(W-H.byteLength);if(F>0)Z.push(G.decode(H.slice(0,F),{stream:!0}));break}Z.push(G.decode(H,{stream:!0}))}}}finally{J.releaseLock()}return Z.push(G.decode()),{text:Z.join(""),truncated:K}}function vx6(Y){if(!Y)return;let Q=Y.trimEnd().split(`
1322
+ ${Q.stack}`;return G}}catch{}if(typeof Q.toString==="function")try{let G=Q.toString();if(G!=="[object Object]")return G}catch{}let J=Object.keys(Q);if(J.length>0)return`Object with keys: ${J.join(", ")}`;return"[object Object]"}if(typeof Y==="string")return Y;if(typeof Y==="number"||typeof Y==="boolean")return String(Y);if(typeof Y==="function")return`[Function: ${Y.name||"anon"}]`;if(typeof Y==="symbol")return Y.toString();if(typeof Y==="bigint")return Y.toString();try{return String(Y)}catch{return"Unknown value (could not convert to string)"}}function BO(Y,Q){switch(typeof Q){case"string":return Y.newString(Q);case"number":return Y.newNumber(Q);case"boolean":return Q?Y.true:Y.false;case"undefined":return Y.undefined;case"object":{if(Q===null)return Y.null;if(Array.isArray(Q)){let J=Y.newArray();return Q.forEach((G,K)=>{let W=BO(Y,G);try{Y.setProp(J,String(K),W)}finally{W.dispose?.()}}),J}let X=Y.newObject();for(let[J,G]of Object.entries(Q)){let K=BO(Y,G);try{Y.setProp(X,J,K)}finally{K.dispose?.()}}return X}case"function":{let X=`__hostFn_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return Y.newFunction(X,(...G)=>{try{let K=G.map((Z)=>Y.dump(Z)),W=Q(...K);if(W&&typeof W.then==="function"){let Z=Y.newPromise();return W.then((H)=>{try{let $=BO(Y,H);Z.resolve($),$.dispose()}catch($){let F=qO($),V=Y.newString(`Promise resolution error: ${F}`);Z.reject(V),V.dispose()}finally{Y.runtime.executePendingJobs()}}).catch((H)=>{let $=qO(H),F=Y.newString(`Promise rejection: ${$}`);Z.reject(F),F.dispose(),Y.runtime.executePendingJobs()}),Z.handle}return BO(Y,W)}catch(K){let W=qO(K);return Y.newString(`HostFunctionError: ${W}`)}finally{G.forEach((K)=>K.dispose())}})}case"bigint":return Y.newString(Q.toString());case"symbol":return Y.newString(Q.toString());default:try{return Y.newString(String(Q))}catch{return Y.undefined}}}var Lp0=()=>{};function qD1(Y){let Q=Y.runtime.executePendingJobs(100);try{if("unwrap"in Q&&typeof Q.unwrap==="function")Q.unwrap()}finally{if("dispose"in Q&&typeof Q.dispose==="function")Q.dispose()}}async function Xr(Y,Q,X){let J=Date.now(),G=Y.resolvePromise(Q);while(!0){qD1(Y);let K=await Promise.race([G,lh6(0).then(()=>null)]);if(K!==null)return K;if(Date.now()-J>X)throw Error(`Timed out after ${X}ms while awaiting a QuickJS promise`)}}async function Jv({tools:Y,code:Q,timeoutMs:X}){let W=[];try{const J=RB(W,await VD1({memoryLimitBytes:33554432,stackSizeBytes:524288}),0);const G=RB(W,J.newContext({interruptAfterMs:X}),0);const K=RB(W,FD1(G),0);try{let F=G.evalCode(Q,"index.mjs",{strip:!0,strict:!0,type:"module"}),V=G.unwrapResult(F),B=BO(G,Y);G.setProp(G.global,"tools",B);let U=G.runtime.hasPendingJob()?G.unwrapResult(await Xr(G,V,X)):V;if(U!==V)V.dispose();let z=G.getProp(U,"default"),D=G.typeof(z);if(D!=="function")return z.dispose(),U.dispose(),B.dispose(),{error:`Code must export default a function (tools). Got ${D}. Example: export default async (tools) => { /* ... */ }`,consoleLogs:K.logs};let L=G.callFunction(z,G.undefined,B);B.dispose(),z.dispose(),U.dispose();let w=G.unwrapResult(L),E=await Xr(G,w,X);w.dispose();let T=G.unwrapResult(E);if(G.runtime.hasPendingJob())qD1(G);let C=G.dump(T);return T.dispose(),{returnValue:C,consoleLogs:K.logs}}catch(F){return console.log(F),{error:qO(F),consoleLogs:K.logs}}}catch(Z){var H=Z,$=1}finally{uo(W,H,$)}}async function BD1({input:Y,code:Q,timeoutMs:X}){let W=[];try{const J=RB(W,await VD1({memoryLimitBytes:33554432,stackSizeBytes:524288}),0);const G=RB(W,J.newContext({interruptAfterMs:X}),0);const K=RB(W,FD1(G),0);try{let F=G.evalCode(Q,"index.mjs",{strip:!0,strict:!0,type:"module"}),V=G.unwrapResult(F),B=BO(G,Y);G.setProp(G.global,"input",B);let U=G.runtime.hasPendingJob()?G.unwrapResult(await Xr(G,V,X)):V;if(U!==V)V.dispose();let z=G.getProp(U,"default"),D=G.typeof(z);if(D!=="function")return z.dispose(),U.dispose(),B.dispose(),{error:`Code must export default a function (input). Got ${D}. Example: export default (input) => { return input.items.map(i => i.name); }`,consoleLogs:K.logs};let L=G.callFunction(z,G.undefined,B);B.dispose(),z.dispose(),U.dispose();let w=G.unwrapResult(L),E=await Xr(G,w,X);w.dispose();let T=G.unwrapResult(E);if(G.runtime.hasPendingJob())qD1(G);let C=G.dump(T);return T.dispose(),{returnValue:C,consoleLogs:K.logs}}catch(F){return console.log(F),{error:qO(F),consoleLogs:K.logs}}}catch(Z){var H=Z,$=1}finally{uo(W,H,$)}}var lh6=(Y)=>new Promise((Q)=>setTimeout(Q,Y));var Mp0=k(()=>{Np0();Lp0()});var Jr=k(()=>{Mp0()});async function dh6(Y,Q){let X=Y.connections.map((K)=>K.connection_id),J=[];for(let K of X){let W=await Q.storage.connections.findById(K);if(W&&W.status==="active")J.push(W)}return J.map((K)=>{let W=Y.connections.find((Z)=>Z.connection_id===K.id);return{connection:K,selectedTools:W?.selected_tools??null,selectedResources:W?.selected_resources??null,selectedPrompts:W?.selected_prompts??null}})}async function wp0(Y,Q){return(await Q.storage.connections.list(Y)).filter((J)=>J.status==="active").map((J)=>({connection:J,selectedTools:null,selectedResources:null,selectedPrompts:null}))}async function ph6(Y,Q){let X=new Map;for(let B of Y)X.set(B.connection.id,B);let J=Y.map((B)=>B.connection),G=new Map,K=await Promise.allSettled(J.map(async(B)=>{try{let U=await Q.createMCPProxy(B);return{connection:B,proxy:U}}catch(U){return console.warn(`[code-execution] Failed to create proxy for connection ${B.id}:`,U),null}}));for(let B of K)if(B.status==="fulfilled"&&B.value)G.set(B.value.connection.id,B.value);let W=await Promise.allSettled(Array.from(G.entries()).map(async([B,U])=>{try{let D=(await U.proxy.listTools()).tools,L=X.get(B);if(L?.selectedTools&&L.selectedTools.length>0){let w=new Set(L.selectedTools);D=D.filter((E)=>w.has(E.name))}return{connectionId:B,connectionTitle:U.connection.title,tools:D}}catch(z){return console.error(`[code-execution] Failed to list tools for connection ${B}:`,z),null}})),Z=new Set,H=[],$=new Map;for(let B of W){if(B.status!=="fulfilled"||!B.value)continue;let{connectionId:U,connectionTitle:z,tools:D}=B.value;for(let L of D){if(Z.has(L.name))continue;Z.add(L.name),H.push({...L,_meta:{...L._meta,connectionId:U,connectionTitle:z}}),$.set(L.name,U)}}let F=async(B,U)=>{let z=$.get(B);if(!z)return{content:[{type:"text",text:`Tool not found: ${B}`}],isError:!0};let D=G.get(z);if(!D)return{content:[{type:"text",text:`Connection not found for tool: ${B}`}],isError:!0};return await D.proxy.callTool({name:B,arguments:U})},V=[];for(let[,B]of G)V.push(B.proxy.close().catch(()=>{}));return await Promise.all(V),{tools:H,callTool:F}}async function FP(Y){let Q=P0(Y),X;if(Y.connectionId){let J=await Y.storage.virtualMcps.findById(Y.connectionId,Y.organization?.id);if(J)X=await dh6(J,Y);else X=await wp0(Q.id,Y)}else X=await wp0(Q.id,Y);return ph6(X,Y)}function ch6(Y){return Y.toLowerCase().split(/[\s_\-./]+/).filter((Q)=>Q.length>=2)}function nh6(Y,Q){let X=0,J=Q.name.toLowerCase(),G=(Q.description??"").toLowerCase(),K=(Q._meta?.connectionTitle??"").toLowerCase();for(let W of Y){if(J===W)X+=10;else if(J.includes(W))X+=3;if(G.includes(W))X+=2;if(K.includes(W))X+=1}return X}function Gr(Y,Q,X){let J=ch6(Y);if(J.length===0)return Q.slice(0,X);return Q.map((G)=>({tool:G,score:nh6(J,G)})).filter((G)=>G.score>0).sort((G,K)=>K.score-G.score).slice(0,X).map((G)=>G.tool)}function Wr(Y,Q){let X=new Map(Q.map((G)=>[G.name,G]));return{tools:Y.map((G)=>X.get(G)).filter((G)=>G!==void 0).map((G)=>({name:G.name,description:G.description,connection:G._meta?.connectionTitle??"",inputSchema:G.inputSchema,outputSchema:G.outputSchema})),notFound:Y.filter((G)=>!X.has(G))}}async function Zr(Y,Q,X){let J=Object.fromEntries(Q.tools.map((G)=>[G.name,async(K)=>{let W=await Q.callTool(G.name,K??{});if(W.structuredContent&&typeof W.structuredContent==="object")return W.structuredContent;let Z=W.content;if(Z?.[0]?.type==="text"&&Z[0].text)try{return JSON.parse(Z[0].text)}catch{return Z[0].text}return W}]));return Jv({code:Y,tools:J,timeoutMs:X})}function Gv(Y){return{content:[{type:"text",text:JSON.stringify(Y,null,2)}]}}function KB(Y){return{content:[{type:"text",text:JSON.stringify(Y,null,2)}],isError:!0}}function $F(Y){let Q=new Set(ih6);return Y.filter((X)=>!Q.has(X.name))}var ih6;var UO=k(()=>{Jr();ih6=["CODE_EXECUTION_SEARCH_TOOLS","CODE_EXECUTION_DESCRIBE_TOOLS","CODE_EXECUTION_RUN_CODE"]});var UD1;var Ap0=k(()=>{G4();Xv();UO();UD1=p1({name:"CODE_EXECUTION_SEARCH_TOOLS",description:"Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling CODE_EXECUTION_DESCRIBE_TOOLS for detailed schemas.",annotations:{title:"Search Tools",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:$p0,outputSchema:Fp0,handler:async(Y,Q)=>{q0(Q),P0(Q),await Q.access.check();let X=await FP(Q),J=Gr(Y.query,X.tools,Y.limit);return{query:Y.query,results:J.map((G)=>({name:G.name,description:G.description,connection:G._meta?.connectionTitle??""})),totalAvailable:X.tools.length}}})});var zD1;var Pp0=k(()=>{G4();Xv();UO();zD1=p1({name:"CODE_EXECUTION_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after CODE_EXECUTION_SEARCH_TOOLS to get full input/output schemas before executing code.",annotations:{title:"Describe Tools",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Vp0,outputSchema:qp0,handler:async(Y,Q)=>{q0(Q),P0(Q),await Q.access.check();let X=await FP(Q);return Wr(Y.tools,X.tools)}})});var DD1;var Ep0=k(()=>{G4();Xv();UO();DD1=p1({name:"CODE_EXECUTION_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use CODE_EXECUTION_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',annotations:{title:"Run Code",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Bp0,outputSchema:Up0,handler:async(Y,Q)=>{q0(Q),P0(Q),await Q.access.check();let X=await FP(Q);return await Zr(Y.code,X,Y.timeoutMs)}})});var Tp0=k(()=>{Ap0();Pp0();Ep0();Xv()});var rh6,oh6,OD1;var Cp0=k(()=>{KY();m1();G4();AS();x$();rh6=q.object({data:PR.describe("Data for the new connection (id is auto-generated if not provided)")}),oh6=q.object({item:W5.describe("The created connection entity")}),OD1=p1({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection in the organization",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:rh6,outputSchema:oh6,handler:async(Y,Q)=>{q0(Q);let X=P0(Q);await Q.access.check();let J=EY(Q);if(!J)throw Error("User ID required to create connection");let G={...Y.data,organization_id:X.id,created_by:J};if(G.connection_type==="VIRTUAL"){let $=Lz(G.connection_url);if(!$)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let F=await Q.storage.virtualMcps.findById($);if(!F)throw Error(`Virtual MCP not found: ${$}`);if(F.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");G.connection_url=Mz($)}let K=await lq({id:`pending-${Date.now()}`,title:G.title,connection_type:G.connection_type,connection_url:G.connection_url,connection_token:G.connection_token,connection_headers:G.connection_headers}).catch(()=>null),W=K?.tools?.length?K.tools:null,Z=K?.scopes?.length?K.scopes:null,H=await Q.storage.connections.create({...G,tools:W,configuration_scopes:Z});return await Q.eventBus.publish(X.id,IY.SELF(X.id),{type:"connection.created",data:H}),{item:H}}})});var sh6,th6,Rp0;var Ip0=k(()=>{m1();wG();sh6=xH.extend({avatar:q.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:q.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:q.string().describe("Virtual MCP ID to use for this assistant"),model:q.object({id:q.string().describe("Model ID"),connectionId:q.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),th6=gH("assistant",sh6),Rp0=[...th6]});var Wv,FF,Sp0,eh6,Yx6,kp0,Qx6,Xx6,Jx6,Gx6,Wx6,Zx6,vp0,Kx6,Hx6,$x6,Fx6,Vx6,qx6,Bx6,Ux6,zx6,Dx6,GH9,Ox6,WH9,jp0,Nx6,Lx6,ND1,Zv;var Kr=k(()=>{m1();hD();wG();Wv=q.lazy(()=>q.union([q.null(),q.string(),q.number(),q.boolean(),q.record(q.string(),Wv),q.array(Wv)])),FF=q.record(q.string(),q.record(q.string(),Wv)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Sp0=q.object({type:q.literal("text"),text:q.string().describe("The text content"),providerOptions:FF}),eh6=q.object({type:q.literal("text"),text:q.string().describe("The text content"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Yx6=q.string().describe("File data as URL string"),kp0=q.object({type:q.literal("file"),filename:q.string().optional().describe("Optional filename of the file"),data:Yx6,mediaType:q.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:FF}),Qx6=q.object({type:q.literal("file"),mediaType:q.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:q.string().describe("Generated file data as base64 encoded string")}),Xx6=q.object({type:q.literal("reasoning"),text:q.string().describe("The reasoning text"),providerOptions:FF}),Jx6=q.object({type:q.literal("reasoning"),text:q.string().describe("The reasoning text"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Gx6=q.object({type:q.literal("tool-call"),toolCallId:q.string().describe("ID of the tool call, used to match with tool result"),toolName:q.string().describe("Name of the tool being called"),input:q.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:q.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:FF}),Wx6=q.object({type:q.literal("tool-call"),toolCallId:q.string().describe("ID of the tool call"),toolName:q.string().describe("Name of the tool being called"),input:q.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:q.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Zx6=q.union([q.object({type:q.literal("text"),value:q.string()}),q.object({type:q.literal("json"),value:Wv}),q.object({type:q.literal("error-text"),value:q.string()}),q.object({type:q.literal("error-json"),value:Wv}),q.object({type:q.literal("content"),value:q.array(q.union([q.object({type:q.literal("text"),text:q.string().describe("Text content")}),q.object({type:q.literal("media"),data:q.string().describe("Base-64 encoded media data"),mediaType:q.string().describe("IANA media type")})]))}),q.object({type:q.literal("execution-denied"),reason:q.string().optional()}),q.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),vp0=q.object({type:q.literal("tool-result"),toolCallId:q.string().describe("ID of the tool call that this result is associated with"),toolName:q.string().describe("Name of the tool that generated this result"),output:Zx6.describe("Result of the tool call"),result:q.unknown().describe("Unknown result of the tool call"),providerOptions:FF}),Kx6=q.object({type:q.literal("tool-result"),toolCallId:q.string().describe("ID of the tool call that this result is associated with"),toolName:q.string().describe("Name of the tool that generated this result"),result:q.any().describe("Result of the tool call (JSON-serializable)"),isError:q.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:q.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Hx6=q.union([q.object({type:q.literal("source"),sourceType:q.literal("url"),id:q.string().describe("The ID of the source"),url:q.string().describe("The URL of the source"),title:q.string().optional().describe("The title of the source"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),q.object({type:q.literal("source"),sourceType:q.literal("document"),id:q.string().describe("The ID of the source"),mediaType:q.string().describe("IANA media type of the document (e.g., application/pdf)"),title:q.string().describe("The title of the document"),filename:q.string().optional().describe("Optional filename of the document"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")})]),$x6=q.object({role:q.literal("system"),content:q.string().describe("System message content"),providerOptions:FF}),Fx6=q.object({role:q.literal("user"),content:q.array(q.union([Sp0,kp0])).describe("User message content parts (text or file)"),providerOptions:FF}),Vx6=q.object({role:q.literal("assistant"),content:q.array(q.union([Sp0,kp0,Xx6,Gx6,vp0])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:FF}),qx6=q.object({role:q.literal("tool"),content:q.array(vp0).describe("Tool message content (tool results)"),providerOptions:FF}),Bx6=q.union([$x6,Fx6,Vx6,qx6]),Ux6=q.array(Bx6).describe("A list of messages forming the prompt"),zx6=q.object({prompt:Ux6.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:q.number().optional().describe("Maximum number of tokens to generate"),temperature:q.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:q.number().optional().describe("Nucleus sampling parameter"),topK:q.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:q.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:q.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:q.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:q.array(q.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:q.union([q.object({type:q.literal("text")}),q.object({type:q.literal("json"),schema:q.any().optional().describe("JSON schema that the generated output should conform to"),name:q.string().optional().describe("Name of output that should be generated"),description:q.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:q.array(q.any()).optional().describe("The tools that are available for the model"),toolChoice:q.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:q.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:q.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:q.any().optional().describe("Additional provider-specific options")}),Dx6=q.object({content:q.array(q.union([eh6,Qx6,Jx6,Wx6,Kx6,Hx6])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:q.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:q.looseObject({inputTokens:q.number().optional(),outputTokens:q.number().optional(),totalTokens:q.number().optional(),reasoningTokens:q.number().optional()}).describe("Usage information for the language model call"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata"),request:q.object({body:q.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:q.object({id:q.string().optional().describe("ID for the generated response"),timestamp:q.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:q.string().optional().describe("The ID of the response model that was used"),headers:q.record(q.string(),q.string()).optional().describe("Response headers"),body:q.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:q.array(q.any()).describe("Warnings for the call, e.g. unsupported settings")}),GH9=q.object({stream:q.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:q.object({body:q.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:q.object({headers:q.record(q.string(),q.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),Ox6=q.object({supportedUrls:q.record(q.string(),q.array(q.string())).describe("Supported URL patterns by media type for the provider")}),WH9=q.object({modelId:q.string().describe("The ID of the model"),logo:q.string().nullable(),description:q.string().nullable(),capabilities:q.array(q.string()),limits:q.object({contextWindow:q.number(),maxOutputTokens:q.number()}).nullable(),costs:q.object({input:q.number(),output:q.number()}).nullable(),provider:q.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),jp0=q.object({modelId:q.string().describe("The ID of the model"),callOptions:zx6}),Nx6=xH.extend({logo:q.string().nullable(),description:q.string().nullable(),capabilities:q.array(q.string()),limits:q.object({contextWindow:q.number(),maxOutputTokens:q.number()}).nullable(),costs:q.object({input:q.number(),output:q.number()}).nullable(),provider:q.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),Lx6=gH("llm",Nx6,{readOnly:!0}),ND1=[{name:"LLM_METADATA",inputSchema:q.object({modelId:q.string().describe("The ID of the model")}),outputSchema:Ox6},{name:"LLM_DO_STREAM",inputSchema:jp0,streamable:!0},{name:"LLM_DO_GENERATE",inputSchema:jp0,outputSchema:Dx6},...Lx6],Zv=bH(ND1)});function VP(){return!1}function Hr(Y,Q){return Y===IY.DEV_ASSETS(Q)}function qP(Y,Q){let X=U71(Q,Y),J=new Date().toISOString();return{id:X.id??IY.DEV_ASSETS(Y),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:Y,created_by:"system",created_at:J,updated_at:J,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:Mx6,bindings:["OBJECT_STORAGE"],status:"active"}}var Mx6;var $r=k(()=>{dn();KY();m1();Mx6=mS.map((Y)=>({name:Y.name,description:`${Y.name} operation for local file storage`,inputSchema:q.toJSONSchema(Y.inputSchema),outputSchema:q.toJSONSchema(Y.outputSchema)}))});function Ax6(Y){let Q=[],X=0;while(X<Y.length){let J=Y[X];if(J==="%")Q.push(".*");else if(J==="_")Q.push(".");else if(/[.*+?^${}()|[\]\\]/.test(J))Q.push("\\"+J);else Q.push(J);X++}return Q.join("")}function HB(Y){return typeof Y==="string"||typeof Y==="number"}function Fr(Y,Q){if("conditions"in Q){let{operator:Z,conditions:H}=Q;switch(Z){case"and":return H.every(($)=>Fr(Y,$));case"or":return H.some(($)=>Fr(Y,$));case"not":return!H.every(($)=>Fr(Y,$));default:return!0}}let{field:X,operator:J,value:G}=Q,K=X.join("."),W=LD1(Y,K);switch(J){case"eq":return W===G;case"gt":return HB(W)&&HB(G)&&W>G;case"gte":return HB(W)&&HB(G)&&W>=G;case"lt":return HB(W)&&HB(G)&&W<G;case"lte":return HB(W)&&HB(G)&&W<=G;case"in":return Array.isArray(G)&&G.includes(W);case"like":if(typeof W!=="string"||typeof G!=="string")return!1;if(G.length>100)return!1;let Z=Ax6(G);return new RegExp(`^${Z}$`,"i").test(W);case"contains":if(typeof W!=="string"||typeof G!=="string")return!1;return W.toLowerCase().includes(G.toLowerCase());default:return!0}}function LD1(Y,Q){let X=Q.split("."),J=Y;for(let G of X){if(J==null||typeof J!=="object")return;J=J[G]}return J}function Px6(Y,Q){return[...Y].sort((X,J)=>{for(let G of Q){let K=G.field.join("."),W=LD1(X,K),Z=LD1(J,K),H=0;if(W==null&&Z==null)continue;if(W==null)H=G.nulls==="first"?-1:1;else if(Z==null)H=G.nulls==="first"?1:-1;else if(typeof W==="string"&&typeof Z==="string")H=W.localeCompare(Z);else if(typeof W==="number"&&typeof Z==="number")H=W-Z;else H=String(W).localeCompare(String(Z));if(H!==0)return G.direction==="desc"?-H:H}return 0})}var wx6,Ex6,Tx6,MD1;var _p0=k(()=>{dS();Ip0();wG();Kr();dn();KY();m1();G4();$r();x$();wx6={LLM:ND1,ASSISTANTS:Rp0,OBJECT_STORAGE:mS};Ex6=mZ.extend({binding:q.union([q.object({}).passthrough(),q.string()]).optional(),include_virtual:q.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false.")}),Tx6=u$(W5),MD1=p1({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:Ex6,outputSchema:Tx6,handler:async(Y,Q)=>{await Q.access.check();let X=P0(Q),J=Y.binding?typeof Y.binding==="string"?(()=>{let B=wx6[Y.binding.toUpperCase()];if(!B)throw Error(`Unknown binding: ${Y.binding}`);return B})():Y.binding:void 0,G=J?gn(J):void 0,K=await Q.storage.connections.list(X.id,{includeVirtual:Y.include_virtual??!1});if(VP()){let B=H7(),U=IY.DEV_ASSETS(X.id);if(!K.some((z)=>z.id===U)){let z=qP(X.id,B);K.unshift(z)}}let W=G?await Promise.all(K.map(async(B)=>{if(!B.tools||B.tools.length===0)return null;return G.isImplementedBy(B.tools.map((z)=>({name:z.name,inputSchema:z.inputSchema,outputSchema:z.outputSchema})))?B:null})).then((B)=>B.filter((U)=>U!==null)):K;if(Y.where)W=W.filter((B)=>Fr(B,Y.where));if(Y.orderBy&&Y.orderBy.length>0)W=Px6(W,Y.orderBy);let Z=W.length,H=Y.offset??0,$=Y.limit??100,F=W.slice(H,H+$),V=H+$<Z;return{items:F,totalCount:Z,hasMore:V}}})});class QK{db;vault;constructor(Y,Q){this.db=Y;this.vault=Q}async get(Y){let Q=await this.db.selectFrom("downstream_tokens").selectAll().where("connectionId","=",Y).executeTakeFirst();if(!Q)return null;return this.decryptToken(Q)}async upsert(Y){let Q=new Date().toISOString(),X=await this.vault.encrypt(Y.accessToken),J=Y.refreshToken?await this.vault.encrypt(Y.refreshToken):null,G=Y.clientSecret?await this.vault.encrypt(Y.clientSecret):null;return await this.db.transaction().execute(async(K)=>{let W=await K.selectFrom("downstream_tokens").select(["id","createdAt"]).where("connectionId","=",Y.connectionId).executeTakeFirst();if(W)return await K.updateTable("downstream_tokens").set({accessToken:X,refreshToken:J,scope:Y.scope,expiresAt:Y.expiresAt?.toISOString()??null,clientId:Y.clientId,clientSecret:G,tokenEndpoint:Y.tokenEndpoint,updatedAt:Q}).where("id","=",W.id).execute(),{id:W.id,connectionId:Y.connectionId,accessToken:Y.accessToken,refreshToken:Y.refreshToken,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:W.createdAt,updatedAt:Q,clientId:Y.clientId,clientSecret:Y.clientSecret,tokenEndpoint:Y.tokenEndpoint};let Z=d8("dtok");return await K.insertInto("downstream_tokens").values({id:Z,connectionId:Y.connectionId,accessToken:X,refreshToken:J,scope:Y.scope,expiresAt:Y.expiresAt?.toISOString()??null,clientId:Y.clientId,clientSecret:G,tokenEndpoint:Y.tokenEndpoint,createdAt:Q,updatedAt:Q}).execute(),{id:Z,connectionId:Y.connectionId,accessToken:Y.accessToken,refreshToken:Y.refreshToken,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:Q,updatedAt:Q,clientId:Y.clientId,clientSecret:Y.clientSecret,tokenEndpoint:Y.tokenEndpoint}})}async delete(Y){await this.db.deleteFrom("downstream_tokens").where("connectionId","=",Y).execute()}isExpired(Y,Q=0){if(!Y.expiresAt)return!1;let J=(Y.expiresAt instanceof Date?Y.expiresAt:new Date(Y.expiresAt)).getTime();if(Number.isNaN(J))return!0;return J-Q<Date.now()}async decryptToken(Y){let Q=await this.vault.decrypt(Y.accessToken),X=Y.refreshToken?await this.vault.decrypt(Y.refreshToken):null,J=Y.clientSecret?await this.vault.decrypt(Y.clientSecret):null;return{id:Y.id,connectionId:Y.connectionId,accessToken:Q,refreshToken:X,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:Y.createdAt,updatedAt:Y.updatedAt,clientId:Y.clientId,clientSecret:J,tokenEndpoint:Y.tokenEndpoint}}}var Kv=k(()=>{LG()});var Cx6,wD1;var yp0=k(()=>{wG();G4();Kv();$r();AS();x$();Cx6=CS(W5),wD1=p1({name:"COLLECTION_CONNECTIONS_GET",description:"Get connection details by ID",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:TS,outputSchema:Cx6,handler:async(Y,Q)=>{let X=P0(Q);if(await Q.access.check(),VP()&&Hr(Y.id,X.id))return{item:qP(X.id,H7())};let J=await Q.storage.connections.findById(Y.id);if(!J||J.organization_id!==X.id)return{item:null};if(!J.tools&&J.connection_type!=="VIRTUAL")try{let G=J.connection_token??null;if(!G)try{let H=await new QK(Q.db,Q.vault).get(J.id);if(H?.accessToken)G=H.accessToken}catch{}let K=new Promise((Z,H)=>setTimeout(()=>H(Error("Tool fetch timeout")),2000)),W=await Promise.race([lq({id:J.id,title:J.title,connection_type:J.connection_type,connection_url:J.connection_url,connection_token:G,connection_headers:J.connection_headers}),K]).catch(()=>null);if(W?.tools?.length)return{item:await Q.storage.connections.update(J.id,{tools:W.tools})??J}}catch{}return{item:J}}})});var Vr=(Y,Q)=>{if(Q===null||Q===void 0)return;let X=Y.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),J=Q;for(let G of X){if(J===null||J===void 0||typeof J!=="object")return;J=J[G]}return J};function fp0(Y){let Q=Y.split("::");if(Q.length!==2||!Q[0]||!Q[1])throw Error(`Invalid scope format: ${Y}. Expected format: "KEY::SCOPE"`);return Q}function Rx6(Y){let Q=Y.split("::");if(Q.length!==2||!Q[0]||!Q[1])return null;return Q}function Ix6(Y){if(typeof Y==="object"&&Y!==null&&"value"in Y){let Q=Y.value;if(typeof Q==="string")return Q}return null}function AD1(Y,Q){let X={};if(!Y||!Q)return X;for(let J of Q){if(J==="*"){X["*"]=["*"];continue}let G=Rx6(J);if(!G)continue;let[K,W]=G,Z=Vr(K,Y),H=Ix6(Z);if(H){if(!X[H])X[H]=[];X[H].push(W)}}return X}function bp0(Y,Q){let X=AD1(Y,Q);return new Set(Object.keys(X).filter((J)=>J!=="*"))}var PD1=()=>{};import{randomBytes as jx6}from"crypto";function hp0(){if(Hv)return Hv;let Y=process.env.MESH_JWT_SECRET??c9.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(Y)Hv=new TextEncoder().encode(Y);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),Hv=new Uint8Array(jx6(32));return Hv}async function xp0(Y,Q="5m"){let X=hp0();return await new BG(Y).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Q).sign(X)}async function gp0(Y){try{let Q=hp0(),{payload:X}=await JY(Y,Q);return X}catch{return}}var Hv=null;var ED1=k(()=>{UG();$v()});async function up0(Y){if(!Y.refreshToken)return{success:!1,error:"No refresh token available"};if(!Y.tokenEndpoint)return{success:!1,error:"No token endpoint available"};if(!Y.clientId)return{success:!1,error:"No client ID available"};try{let Q=new URLSearchParams({grant_type:"refresh_token",refresh_token:Y.refreshToken,client_id:Y.clientId});if(Y.clientSecret)Q.set("client_secret",Y.clientSecret);if(Y.scope)Q.set("scope",Y.scope);let X=await fetch(Y.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Q.toString()});if(!X.ok){let G=await X.text();console.error(`[TokenRefresh] Failed to refresh token: ${X.status}`,G);try{let K=JSON.parse(G);return{success:!1,error:K.error_description||K.error||`Token refresh failed: ${X.status}`}}catch{return{success:!1,error:`Token refresh failed: ${X.status}`}}}let J=await X.json();return{success:!0,accessToken:J.access_token,refreshToken:J.refresh_token||Y.refreshToken,expiresIn:J.expires_in,scope:J.scope}}catch(Q){return console.error("[TokenRefresh] Error refreshing token:",Q),{success:!1,error:Q instanceof Error?Q.message:"Token refresh failed"}}}async function Fv(Y,Q,X){let J=Y.id,G=AD1(Y.configuration_state,Y.configuration_scopes),K=Q.auth.user?.id??Q.auth.apiKey?.userId??(X?Y.created_by:void 0),[W,Z]=K?await xp0({sub:K,user:{id:K},metadata:{state:Y.configuration_state??void 0,meshUrl:Q.baseUrl,connectionId:J,organizationId:Q.organization?.id,organizationName:Q.organization?.name,organizationSlug:Q.organization?.slug},permissions:G}).then((U)=>[U,null]).catch((U)=>[null,U]):[null,Error("User ID required to issue configuration token")];if(Z)console.error("Failed to issue configuration token:",W);let H=Q.auth.user?.connectionId,$={...H?{"x-caller-id":H}:{},...Q.metadata.wellKnownForwardableHeaders??{},"x-request-id":Q.metadata.requestId},F=null,V=new QK(Q.db,Q.vault),B=await V.get(J);if(B){let U=!!B.refreshToken&&!!B.tokenEndpoint;if(V.isExpired(B,U?300000:0))if(U){console.log(`[Proxy] Token expired for ${J}, attempting refresh`);let D=await up0(B);if(D.success&&D.accessToken)await V.upsert({connectionId:J,accessToken:D.accessToken,refreshToken:D.refreshToken??B.refreshToken,scope:D.scope??B.scope,expiresAt:D.expiresIn?new Date(Date.now()+D.expiresIn*1000):null,clientId:B.clientId,clientSecret:B.clientSecret,tokenEndpoint:B.tokenEndpoint}),F=D.accessToken,console.log(`[Proxy] Token refreshed for ${J}`);else await V.delete(J),console.error(`[Proxy] Token refresh failed for ${J}: ${D.error}`)}else await V.delete(J),console.log(`[Proxy] Token expired without refresh capability for ${J}`);else F=B.accessToken}if(!F&&Y.connection_token)F=Y.connection_token;if(F)$.Authorization=`Bearer ${F}`;if(W)$["x-mesh-token"]=W;return $}var TD1=k(()=>{PD1();ED1();Kv()});function qr(){let Y=new Map;function Q(J,G){let K=Y.get(G);if(K)return console.log(`[ClientPool] Reusing cached client for ${G}`),K;console.log(`[ClientPool] Creating new client for ${G}`);let W=new G5({name:`outbound-client-${G}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}}});W.onclose=()=>{Y.delete(G)};let Z=W.connect(J,{timeout:30000}).then(()=>W).catch((H)=>{throw Y.delete(G),H});return Y.set(G,Z),Z}return Object.assign(Q,{[Symbol.asyncDispose]:async()=>{let J=[];for(let[G,K]of Y)J.push(K.then((W)=>W.close()).catch((W)=>console.error(`[ClientPool] Error closing client ${G}:`,W)));await Promise.all(J),Y.clear()}})}var CD1=k(()=>{Dz()});function mp0(Y){let Q=new wS({command:Y.command,args:Y.args,env:Y.env,cwd:Y.cwd,stderr:"pipe"}),X=Y.name||Y.id,J="\x1B[2m",G="\x1B[0m";return Q.stderr?.on("data",(K)=>{let W=K.toString().trimEnd();if(W)console.error(`${W} \x1B[2m[${X}]\x1B[0m`)}),Q}var lp0=k(()=>{fV1()});class Vv{innerTransport;constructor(Y){this.innerTransport=Y}async start(){return this.innerTransport.onmessage=(Y)=>{this.handleIncomingMessage(Y)},this.innerTransport.onerror=(Y)=>{this.onerror?.(Y)},this.innerTransport.onclose=()=>{this.onclose?.()},this.innerTransport.start()}async send(Y){return this.handleOutgoingMessage(Y)}async close(){return this.innerTransport.close()}async handleOutgoingMessage(Y){return this.innerTransport.send(Y)}handleIncomingMessage(Y){this.onmessage?.(Y)}isRequest(Y){return"method"in Y&&Y.method!==void 0}isResponse(Y){return"result"in Y||"error"in Y&&!("method"in Y)}onmessage;onerror;onclose}function qv(Y,...Q){return Q.reduce((X,J)=>J(X),Y)}var dp0="mcp.mesh";var pp0,RD1,VF;var Bv=k(()=>{pp0=class pp0 extends Error{constructor(Y){super(Y);this.name="UnauthorizedError"}};RD1=class RD1 extends Error{constructor(Y){super(Y);this.name="ForbiddenError"}};VF=class VF{userId;toolName;boundAuth;role;connectionId;getToolMeta;_granted=!1;constructor(Y,Q,X,J,G,K="self",W){this.userId=Q;this.toolName=X;this.boundAuth=J;this.role=G;this.connectionId=K;this.getToolMeta=W}[Symbol.dispose](){this._granted=!1}setToolName(Y){this.toolName=Y}grant(){return this._granted=!0,{[Symbol.dispose]:()=>{this._granted=!1}}}async check(...Y){if(this._granted)return;if(this.toolName?.startsWith("MESH_PUBLIC_")){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new pp0("Authentication required. Please provide a valid OAuth token or API key.")}let Q=Y.length>0?Y:this.toolName?[this.toolName]:[];if(Q.length===0)throw new RD1("No resources specified for access check");for(let X of Q)if(await this.checkResource(X)){this.grant();return}throw new RD1(`Access denied to: ${Q.join(", ")}`)}async checkResource(Y){if(!this.userId&&!this.boundAuth)return!1;if(this.role==="admin"||this.role==="owner")return!0;if(!this.boundAuth)return!1;let Q={};if(this.connectionId)Q[this.connectionId]=[Y];return this.boundAuth.hasPermission(Q)}async isToolPublic(){if(this.toolName?.startsWith("MESH_PUBLIC_"))return!0;if(!this.getToolMeta)return!1;try{let Y=await this.getToolMeta();if(!Y)return!1;let X=Y[dp0]?.public_tool;return X===!0||X==="true"}catch{return!1}}granted(){return this._granted}}});var Sx6="mcp.mesh",BP;var cp0=k(()=>{Bv();BP=class BP extends Vv{options;cachedToolsMap=null;constructor(Y,Q){super(Y);this.options=Q;if(Q.connection.tools)this.cachedToolsMap=new Map(Q.connection.tools.map((X)=>[X.name,X]))}async handleOutgoingMessage(Y){if(!this.isRequest(Y))return this.innerTransport.send(Y);let Q=Y;if(Q.method==="tools/call")await this.authorizeToolCall(Q),this.stripMetaFromArguments(Q);return this.innerTransport.send(Y)}async authorizeToolCall(Y){if(this.options.superUser)return;let X=Y.params.name,{ctx:J,connection:G}=this.options;if(this.isPublicTool(X))return;if(!J.auth.user?.id&&!J.auth.apiKey?.id)throw Error("Authentication required. Please provide a valid OAuth token or API key.");let K=async()=>{return this.cachedToolsMap?.get(X)?._meta};await new VF(J.authInstance,J.auth.user?.id??J.auth.apiKey?.userId,X,J.boundAuth,J.auth.user?.role,G.id,K).check(X)}isPublicTool(Y){if(Y.startsWith("MESH_PUBLIC_"))return!0;if(!this.cachedToolsMap)return!1;let Q=this.cachedToolsMap.get(Y);if(!Q?._meta)return!1;return Q._meta[Sx6]?.public_tool===!0}stripMetaFromArguments(Y){let Q=Y.params;if(Q.arguments&&"_meta"in Q.arguments){let{_meta:X,...J}=Q.arguments;Q.arguments=J}}}});function ip0(Y){if(!Y.isError)return;let Q=Y.content;if(!Array.isArray(Q))return;for(let X of Q)if(X&&typeof X==="object"&&"type"in X&&X.type==="text"&&"text"in X&&typeof X.text==="string")return X.text;return}function jD1(Y){if(!Y)return;let Q=Y._meta;if(!Q||typeof Q!=="object"||Array.isArray(Q))return;let X=Q.properties;if(!X||typeof X!=="object"||Array.isArray(X))return;let J={};for(let[G,K]of Object.entries(X))if(typeof K==="string")J[G]=K;return Object.keys(J).length>0?J:void 0}function SD1(Y,Q){if(!Y&&!Q)return;if(!Y)return Q;if(!Q)return Y;return{...Q,...Y}}function kD1(Y){if(Y&&typeof Y==="object"&&!Array.isArray(Y)){let Q=Y,X=Q.structuredContent;if(X&&typeof X==="object"&&!Array.isArray(X))return X;return Q}return{value:Y}}async function kx6(Y,Q){let X=Y.body;if(!X)return{text:"",truncated:!1};let J=X.getReader(),G=new TextDecoder,K=!1,W=0,Z=[];try{while(!0){let{value:H,done:$}=await J.read();if($)break;if(H){if(W+=H.byteLength,W>Q){K=!0;let F=Q-(W-H.byteLength);if(F>0)Z.push(G.decode(H.slice(0,F),{stream:!0}));break}Z.push(G.decode(H,{stream:!0}))}}}finally{J.releaseLock()}return Z.push(G.decode()),{text:Z.join(""),truncated:K}}function vx6(Y){if(!Y)return;let Q=Y.trimEnd().split(`
1323
1323
  `);for(let X=Q.length-1;X>=0&&X>=Q.length-5;X--){let J=Q[X]?.trim();if(!J)continue;try{let G=JSON.parse(J);if(G&&typeof G==="object"&&G.type==="finish"){let K={};if(G.usage)K.usage=G.usage;if(G.providerMetadata)K.providerMetadata=G.providerMetadata;if(G.finishReason)K.finishReason=G.finishReason;return Object.keys(K).length>0?K:void 0}}catch{}}return}async function ID1(Y){let{ctx:Q,enabled:X}=Y,J=Y.organizationId??Q.organization?.id;if(!X||!J)return;if(t3(Y.connectionId))return;let G=jD1(Y.request.params.arguments),K=SD1(Q.metadata.properties,G),W=Q.auth.user?.id||Q.auth.apiKey?.userId;if(W)try{let Z=await Q.storage.tags.getUserTagsInOrg(W,J);if(Z.length>0){let H=Z.map(($)=>$.name).join(",");K={...K,user_tags:H}}}catch{}await Q.storage.monitoring.log({organizationId:J,connectionId:Y.connectionId,connectionTitle:Y.connectionTitle,toolName:Y.request.params.name,input:Y.request.params.arguments??{},output:Y.output,isError:Y.isError,errorMessage:Y.errorMessage,durationMs:Y.durationMs,timestamp:new Date,userId:Q.auth.user?.id||Q.auth.apiKey?.userId||null,requestId:Q.metadata.requestId,userAgent:Q.metadata.userAgent,virtualMcpId:Y.virtualMcpId,properties:K})}function ap0(Y){let{ctx:Q,enabled:X,connectionId:J,connectionTitle:G,virtualMcpId:K}=Y;return async(W,Z)=>{let H=Date.now();try{let $=await Z(),F=Q.organization?.id;if(X&&F){let V=$.clone();(async()=>{try{let{text:B,truncated:U}=await kx6(V,np0),z=Date.now()-H,D=V.headers.get("content-type")??"",L=B;if(D.includes("application/json"))try{L=B.length?JSON.parse(B):null}catch{L=B}let w=$.status>=400,E=w&&L&&typeof L==="object"&&"error"in L?L.error:void 0,T=typeof E==="string"&&E?E:w&&typeof L==="string"&&L.trim()?L.slice(0,500):w?`HTTP ${$.status} ${$.statusText}`.trim():U?`Response body truncated to ${np0} bytes`:void 0,C=kD1(L),P=vx6(B);if(P)Object.assign(C,P);await ID1({ctx:Q,enabled:X,organizationId:F,connectionId:J,connectionTitle:G,virtualMcpId:K,request:W,output:C,isError:w,errorMessage:T,durationMs:z})}catch(B){let U=Date.now()-H;await ID1({ctx:Q,enabled:X,organizationId:F,connectionId:J,connectionTitle:G,virtualMcpId:K,request:W,output:{},isError:!0,errorMessage:`Failed to read streamable response body: ${B.message}`,durationMs:U})}})()}return $}catch($){let F=$,V=Date.now()-H;throw await ID1({ctx:Q,enabled:X,connectionId:J,connectionTitle:G,virtualMcpId:K,request:W,output:{},isError:!0,errorMessage:F.message,durationMs:V}),$}}}var np0=262144;var vD1=k(()=>{KY()});var UP;var rp0=k(()=>{QS();vD1();UP=class UP extends Vv{options;inflightRequests=new Map;constructor(Y,Q){super(Y);this.options=Q}async handleOutgoingMessage(Y){if(this.isRequest(Y)){let Q=Y;this.onRequestStart(Q)}return this.innerTransport.send(Y)}handleIncomingMessage(Y){if(this.isResponse(Y)){let Q=Y;this.onResponseEnd(Q)}this.onmessage?.(Y)}onRequestStart(Y){let{ctx:Q,connectionId:X}=this.options,J,G;if(Y.method==="tools/call"&&Y.params){let W=Y.params;J=W.name,G=W.arguments}let K;if(Y.method==="tools/call"&&J)K=Q.tracer.startSpan("mcp.proxy.callTool",{attributes:{"connection.id":X,"tool.name":J,"request.id":Q.metadata.requestId,"jsonrpc.id":Y.id,"jsonrpc.method":Y.method}});if(Y.id!==null&&Y.id!==void 0)this.inflightRequests.set(Y.id,{startTime:Date.now(),method:Y.method,toolName:J,toolArguments:G,span:K})}onResponseEnd(Y){if(Y.id===null||Y.id===void 0)return;let Q=this.inflightRequests.get(Y.id);if(!Q)return;let{ctx:X,connectionId:J}=this.options,{startTime:G,method:K,toolName:W,toolArguments:Z,span:H}=Q,$=Date.now()-G;if(this.inflightRequests.delete(Y.id),K!=="tools/call"||!W)return;let F="error"in Y,V=F?Y.error:Y.result,B=F?{content:[{type:"text",text:Y.error?.message||"Unknown error"}],isError:!0}:V;if(X.meter.createHistogram("connection.proxy.duration").record($,{"connection.id":J,"tool.name":W,status:F?"error":"success"}),F)X.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":J,"tool.name":W,error:Y.error?.message});else X.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":J,"tool.name":W,status:"success"});if(H){if(F&&Y.error)H.recordException(Error(Y.error.message)),H.setAttributes({error:!0,"error.code":Y.error.code,"error.message":Y.error.message});H.end()}this.logToDatabase({toolName:W,toolArguments:Z,result:B,duration:$,isError:Boolean(F)})}async logToDatabase(Y){let{ctx:Q,connectionId:X,connectionTitle:J,virtualMcpId:G}=this.options,{toolName:K,toolArguments:W,result:Z,duration:H,isError:$}=Y;if(!qn().enabled)return;let V=Q.organization?.id;if(!V)return;let B=ip0(Z),U=kD1(Z),z=jD1(W),D=SD1(Q.metadata.properties,z);try{await Q.storage.monitoring.log({organizationId:V,connectionId:X,connectionTitle:J,toolName:K,input:W??{},output:U,isError:$,errorMessage:B,durationMs:H,timestamp:new Date,userId:Q.auth.user?.id||Q.auth.apiKey?.userId||null,requestId:Q.metadata.requestId,userAgent:Q.metadata.userAgent,virtualMcpId:G,properties:D})}catch(L){console.error("[MonitoringTransport] Failed to log to database:",L)}}async close(){for(let Y of this.inflightRequests.values())if(Y.span)Y.span.setAttributes({"transport.closed":!0}),Y.span.end();return this.inflightRequests.clear(),super.close()}}});var op0=k(()=>{cp0();rp0()});async function sp0(Y,Q,X=!1){let J=Y.id,G=Q.connectionId&&Q.connectionId!==J?Q.connectionId:void 0;switch(Y.connection_type){case"STDIO":{if(process.env.UNSAFE_ALLOW_STDIO_TRANSPORT!=="true")throw Error("STDIO connections are disabled in production. Set UNSAFE_ALLOW_STDIO_TRANSPORT=true to enable.");let K=Y.connection_headers;if(!oK(K))throw Error("STDIO connection missing parameters");let W=mp0({id:J,name:Y.title,command:K.command,args:K.args,env:K.envVars,cwd:K.cwd});return W=qv(W,(Z)=>new BP(Z,{ctx:Q,connection:Y,superUser:X}),(Z)=>new UP(Z,{ctx:Q,connectionId:J,connectionTitle:Y.title,virtualMcpId:G})),_x6(W,J)}case"HTTP":case"Websocket":{if(!Y.connection_url)throw Error(`${Y.connection_type} connection missing URL`);let K=await Fv(Y,Q,X),W=Y.connection_headers;if(W&&"headers"in W)Object.assign(K,W.headers);let Z=new xV(new URL(Y.connection_url),{requestInit:{headers:K}});return Z=qv(Z,(H)=>new BP(H,{ctx:Q,connection:Y,superUser:X}),(H)=>new UP(H,{ctx:Q,connectionId:J,connectionTitle:Y.title,virtualMcpId:G})),Q.getOrCreateClient(Z,J)}case"SSE":{if(!Y.connection_url)throw Error("SSE connection missing URL");let K=await Fv(Y,Q,X),W=Y.connection_headers;if(W&&"headers"in W)Object.assign(K,W.headers);let Z=new yD(new URL(Y.connection_url),{requestInit:{headers:K}});return Z=qv(Z,(H)=>new BP(H,{ctx:Q,connection:Y,superUser:X}),(H)=>new UP(H,{ctx:Q,connectionId:J,connectionTitle:Y.title,virtualMcpId:G})),Q.getOrCreateClient(Z,J)}default:throw Error(`Unknown connection type: ${Y.connection_type}`)}}var _x6;var tp0=k(()=>{x$();Sn();AR();TD1();CD1();lp0();op0();_x6=qr()});function $B(Y){if(!Y?._meta)return!1;return typeof Y._meta["mcp.mesh"]?.["tool.fn"]==="string"}function Qc0(Y){return Y._meta["mcp.mesh"]["tool.fn"]}function Uv(Y,Q,X,J){return{id:Y,name:Q.name,description:Q.description,inputSchema:Q.inputSchema,outputSchema:Q.outputSchema,annotations:Q.annotations,code:Q._meta["mcp.mesh"]["tool.fn"],connection_dependencies:Q._meta.connectionDependencies??[],created_at:X,updated_at:J}}var _D1,E39,rH,ep0,Yc0;var qF=k(()=>{m1();_D1=q.object({title:q.string().optional(),readOnlyHint:q.boolean().optional(),destructiveHint:q.boolean().optional(),idempotentHint:q.boolean().optional(),openWorldHint:q.boolean().optional()}),E39=q.object({"tool.fn":q.string().describe("JavaScript ES module code that exports a default async function")}),rH=q.object({id:q.string().describe("Unique identifier for the virtual tool (auto-generated)"),name:q.string().min(1).max(255).describe("Tool name (must be unique within the Virtual MCP)"),description:q.string().optional().describe("Human-readable description of what the tool does"),inputSchema:q.record(q.string(),q.unknown()).describe("JSON Schema defining the tool's input parameters"),outputSchema:q.record(q.string(),q.unknown()).optional().describe("JSON Schema defining the tool's output (optional)"),annotations:_D1.optional().describe("MCP tool annotations"),code:q.string().describe("JavaScript ES module code. Must export default an async function: export default async (tools, args) => { ... }"),connection_dependencies:q.array(q.string()).describe("Connection IDs that this tool depends on (specified by the creator)"),created_at:q.string().describe("When the virtual tool was created"),updated_at:q.string().describe("When the virtual tool was last updated")}),ep0=q.object({name:q.string().min(1).max(255).describe("Tool name (must be unique within the Virtual MCP)"),description:q.string().optional().describe("Human-readable description"),inputSchema:q.record(q.string(),q.unknown()).describe("JSON Schema defining the tool's input parameters"),outputSchema:q.record(q.string(),q.unknown()).optional().describe("JSON Schema for output"),annotations:_D1.optional().describe("MCP tool annotations"),code:q.string().describe("JavaScript ES module code. Must export default an async function: export default async (tools, args) => { ... }"),connection_dependencies:q.array(q.string()).optional().describe("Connection IDs that this tool depends on. Creates indirect aggregations to prevent deletion of referenced connections.")}),Yc0=q.object({name:q.string().min(1).max(255).optional().describe("New tool name"),description:q.string().nullable().optional().describe("New description (null to clear)"),inputSchema:q.record(q.string(),q.unknown()).optional().describe("New input schema"),outputSchema:q.record(q.string(),q.unknown()).nullable().optional().describe("New output schema (null to clear)"),annotations:_D1.nullable().optional().describe("New annotations (null to clear)"),code:q.string().optional().describe("New JavaScript code"),connection_dependencies:q.array(q.string()).optional().describe("Connection IDs that this tool depends on. Replaces existing dependencies if provided.")})});function zO(Y){return(Q)=>{if(Q instanceof d0&&Q.code===s0.MethodNotFound)return Y;throw Q}}var yD1=k(()=>{_Q()});class Xc0{factory;promise=null;constructor(Y){this.factory=Y}getOrCreatePromise(){if(!this.promise)this.promise=this.factory();return this.promise}then(Y,Q){return this.getOrCreatePromise().then(Y,Q)}catch(Y){return this.getOrCreatePromise().catch(Y)}finally(Y){return this.getOrCreatePromise().finally(Y)}}function zP(Y){return new Xc0(Y)}function yx6(Y,Q,X){let J=new G5({name:`lazy-${Y.id}`,version:"1.0.0"},{capabilities:{}}),G=null;function K(){if(!G)G=_5(Y,Q,X).then((H)=>{if(Y.connection_type==="HTTP"||Y.connection_type==="SSE"||Y.connection_type==="Websocket")return DO(H,Y.id,Y,Q,{superUser:X});return H});return G}if(Y.connection_type!=="VIRTUAL"&&Array.isArray(Y.tools)&&Y.tools.length>0)J.listTools=async()=>({tools:Y.tools.map((H)=>({name:H.name,description:H.description,inputSchema:H.inputSchema,outputSchema:H.outputSchema,annotations:H.annotations,_meta:H._meta}))});else J.listTools=async()=>{return(await K()).listTools()};J.callTool=async(H,$,F)=>{return(await K()).callTool(H,$,F)},J.listResources=async()=>{return(await K()).listResources()},J.listPrompts=async()=>{return(await K()).listPrompts()},J.getPrompt=async(H,$)=>{return(await K()).getPrompt(H,$)},J.readResource=async(H,$)=>{return(await K()).readResource(H,$)},J.callStreamableTool=async(H,$)=>{let F=await K();if("callStreamableTool"in F&&typeof F.callStreamableTool==="function")return F.callStreamableTool(H,$);let V=await F.callTool({name:H,arguments:$});return new Response(JSON.stringify(V),{headers:{"Content-Type":"application/json"}})};let Z=J.close.bind(J);return J.close=async()=>{if(G){let H=await G.catch(()=>null);if(H)await H.close().catch(()=>{})}await Z()},J}function fx6(Y,Q,X=!1){let J=new Map;for(let G of Y)J.set(G.id,yx6(G,Q,X));return J}async function Jc0(Y){let Q=[];for(let[,X]of Y)Q.push(X.close().catch(()=>{}));await Promise.all(Q)}var DP;var fD1=k(()=>{OP();yD1();Dz();Jr();qF();DP=class DP extends G5{options;ctx;_cachedTools;_cachedResources;_cachedPrompts;_clients;_connections;_selectionMap;constructor(Y,Q){super({name:"virtual-mcp-passthrough",version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}}});this.options=Y;this.ctx=Q;this._selectionMap=new Map;for(let X of Y.virtualMcp.connections)this._selectionMap.set(X.connection_id,X);this._connections=new Map;for(let X of Y.connections)this._connections.set(X.id,X);this._clients=fx6(this.options.connections,this.ctx,this.options.superUser),this._cachedTools=zP(()=>this.loadToolsCache()),this._cachedResources=zP(()=>this.loadCache("resources")),this._cachedPrompts=zP(()=>this.loadCache("prompts"))}async loadToolsCache(){let Y=this._clients,Q=await Promise.all(Array.from(Y.entries()).map(async([W,Z])=>{try{let H=await Z.listTools().then((F)=>F.tools),$=this._selectionMap.get(W);if($?.selected_tools?.length){let F=new Set($.selected_tools);H=H.filter((V)=>F.has(V.name))}return{connectionId:W,data:H}}catch(H){return console.error(`[PassthroughClient] Failed to load tools for connection ${W}:`,H),null}})),X=[],J=new Map,G=new Map,K=this.options.virtualTools??[];for(let W of K){if(J.has(W.name))continue;let Z={name:W.name,description:W.description,inputSchema:W.inputSchema,outputSchema:W.outputSchema,annotations:W.annotations,_meta:{connectionId:this.options.virtualMcp.id??"__VIRTUAL__",connectionTitle:this.options.virtualMcp.title}};X.push(Z),J.set(W.name,"__VIRTUAL__"),G.set(W.name,W)}for(let W of Q){if(!W)continue;let{connectionId:Z,data:H}=W,F=this._connections.get(Z)?.title??"";for(let V of H){let B=V.name;if(J.has(B))continue;let U={...V,_meta:{connectionId:Z,connectionTitle:F,...V?._meta}};X.push(U),J.set(B,Z)}}return{data:X,mappings:J,virtualTools:G}}async loadCache(Y){let Q=this._clients,X=await Promise.all(Array.from(Q.entries()).map(async([K,W])=>{try{let Z=Y==="resources"?await W.listResources().catch(zO({resources:[]})).then((F)=>F.resources):await W.listPrompts().catch(zO({prompts:[]})).then((F)=>F.prompts),H=this._selectionMap.get(K),$=Y==="resources"?"selected_resources":"selected_prompts";if(H?.[$]?.length){let F=new Set(H[$]);return{connectionId:K,data:Z.filter((V)=>F.has(V.name))}}return{connectionId:K,data:Z}}catch(Z){return console.error(`[PassthroughClient] Failed to load cache for connection ${K}:`,Z),null}})),J=[],G=new Map;for(let K of X){if(!K)continue;let{connectionId:W,data:Z}=K,$=this._connections.get(W)?.title??"";for(let F of Z){let V=F.name??F.uri;if(G.has(V))continue;let B={...F,_meta:{connectionId:W,connectionTitle:$,...F?._meta}};J.push(B),G.set(V,W)}}return{data:J,mappings:G}}async listTools(){return{tools:(await this._cachedTools).data}}async callTool(Y){let Q=await this._cachedTools,X=this._clients,J=Q.mappings.get(Y.name);if(!J)return{content:[{type:"text",text:`Tool not found: ${Y.name}`}],isError:!0};if(J==="__VIRTUAL__")return this.executeVirtualTool(Y.name,Y.arguments??{},Q,X);let G=X.get(J);if(!G)return{content:[{type:"text",text:`Connection not found for tool: ${Y.name}`}],isError:!0};return await G.callTool({name:Y.name,arguments:Y.arguments??{}})}async executeVirtualTool(Y,Q,X,J){let G=X.virtualTools.get(Y);if(!G)return{content:[{type:"text",text:`Virtual tool not found: ${Y}`}],isError:!0};let K=Qc0(G),W={};for(let[Z,H]of X.mappings){if(H==="__VIRTUAL__")continue;let $=J.get(H);if(!$)continue;W[Z]=async(F)=>{let V=await $.callTool({name:Z,arguments:F});if(V.structuredContent&&typeof V.structuredContent==="object")return V.structuredContent;let B=V.content;if(B?.[0]?.type==="text"&&B[0].text)try{return JSON.parse(B[0].text)}catch{return B[0].text}return V}}try{let H=`
1324
1324
  const __virtualToolFn = ${K.replace(/^\s*export\s+default\s+/,"").trim()};
1325
1325
  export default async (tools) => {