@decocms/mesh 2.135.1 → 2.136.1

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 (228) hide show
  1. package/dist/client/assets/{AlertCircle-C0eftc-S.js → AlertCircle-CXJCnY_R.js} +1 -1
  2. package/dist/client/assets/{AlignLeft-y_Ps49tB.js → AlignLeft-Ckpqqq7X.js} +1 -1
  3. package/dist/client/assets/{ArrowDown-BVK-2NZv.js → ArrowDown-BXCgJapO.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-BNX_fMaj.js → ArrowLeft-ihbjidrQ.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-N8lcMBug.js → ArrowUp-B3tPpNuu.js} +1 -1
  6. package/dist/client/assets/{Check-Cjs4C9GE.js → Check-G22LpKFd.js} +1 -1
  7. package/dist/client/assets/{CheckCircle-KfoOm4QY.js → CheckCircle-Dl3Eh5mw.js} +1 -1
  8. package/dist/client/assets/{CheckDone01-BesDn4jt.js → CheckDone01-DQOA8kaK.js} +1 -1
  9. package/dist/client/assets/{CheckVerified02-dNCcvCnV.js → CheckVerified02-C58oaMz8.js} +1 -1
  10. package/dist/client/assets/{ChevronDown-jKZz68gN.js → ChevronDown-DAk1F2Sn.js} +1 -1
  11. package/dist/client/assets/{ChevronLeft-DrJ63fdN.js → ChevronLeft-CGPjZdmg.js} +1 -1
  12. package/dist/client/assets/{ChevronRight-O5hZNhHU.js → ChevronRight-BT7U8Kip.js} +1 -1
  13. package/dist/client/assets/{Clock-CZrEpwOM.js → Clock-CPO-Cqx6.js} +1 -1
  14. package/dist/client/assets/{Code01-DVgdcTZ1.js → Code01-UXkm6aqY.js} +1 -1
  15. package/dist/client/assets/{Container-BADgIox6.js → Container-CyEPuAYL.js} +1 -1
  16. package/dist/client/assets/{Copy01-CwZDv92A.js → Copy01-tzx60ICS.js} +1 -1
  17. package/dist/client/assets/{Dataflow03-BD9MOeSH.js → Dataflow03-mD5gBD1P.js} +1 -1
  18. package/dist/client/assets/{DotsHorizontal-M2BFmBhE.js → DotsHorizontal-9qiIYu_T.js} +1 -1
  19. package/dist/client/assets/{DotsVertical-B7FmF1Xu.js → DotsVertical-DHxrk-2J.js} +1 -1
  20. package/dist/client/assets/{Download01-9ocXQLzr.js → Download01-DM18IWVp.js} +1 -1
  21. package/dist/client/assets/{Edit01-kvm_TgXf.js → Edit01-D3PaS600.js} +1 -1
  22. package/dist/client/assets/{Edit05-D4Vt7tOt.js → Edit05-B64h7zay.js} +1 -1
  23. package/dist/client/assets/{Eye-BCmEvczH.js → Eye-C_LYW9jG.js} +1 -1
  24. package/dist/client/assets/{File02-CK_RNTh6.js → File02-CY9LI3Y-.js} +1 -1
  25. package/dist/client/assets/{File06-B3E-bjor.js → File06-Dy7xo8XS.js} +1 -1
  26. package/dist/client/assets/{FilterLines-DAyCv-Xk.js → FilterLines-BvkJQ7ij.js} +1 -1
  27. package/dist/client/assets/{Globe01-jKd57I4x.js → Globe01-39jWI59e.js} +1 -1
  28. package/dist/client/assets/{Globe02-D-yCMf5N.js → Globe02-X-Xm1ngz.js} +1 -1
  29. package/dist/client/assets/{Grid01-DRBx9FRw.js → Grid01-DTf5JuyC.js} +1 -1
  30. package/dist/client/assets/{Hash02-CyfLltcT.js → Hash02-AH6eTaow.js} +1 -1
  31. package/dist/client/assets/{Home02-BcZSV_S0.js → Home02-DzIcdgJH.js} +1 -1
  32. package/dist/client/assets/{Image01-Dg_KnZBd.js → Image01-Dvb2vnmH.js} +1 -1
  33. package/dist/client/assets/{Inbox01-nkL2-2Zq.js → Inbox01-CsvPcK33.js} +1 -1
  34. package/dist/client/assets/{InfoCircle-Ipgqrfv0.js → InfoCircle-D2mDfen0.js} +1 -1
  35. package/dist/client/assets/{Key01-CyP1-GBg.js → Key01-C3Fh3hes.js} +1 -1
  36. package/dist/client/assets/{LayersTwo01-rKs-Uww3.js → LayersTwo01-CRgWs3EX.js} +1 -1
  37. package/dist/client/assets/{LayoutLeft-BH3urRkN.js → LayoutLeft-C-0_xlw0.js} +1 -1
  38. package/dist/client/assets/{Link01-D-1AbdDy.js → Link01-C74Jreax.js} +1 -1
  39. package/dist/client/assets/{LinkExternal01-DIMSPk19.js → LinkExternal01-D6xwQf32.js} +1 -1
  40. package/dist/client/assets/{List-BzhQuBp2.js → List-DJEz6yKj.js} +1 -1
  41. package/dist/client/assets/{Loading01-BSgMOGt8.js → Loading01-B3gOoSbd.js} +1 -1
  42. package/dist/client/assets/{Lock01-T7BR0zuk.js → Lock01-CodP_ius.js} +1 -1
  43. package/dist/client/assets/{Play-CBKoaI1n.js → Play-CxAaQi_l.js} +1 -1
  44. package/dist/client/assets/{Plus-kcfCg7FH.js → Plus-Bo0L9uYY.js} +1 -1
  45. package/dist/client/assets/{RefreshCcw01-DiAOUquJ.js → RefreshCcw01-v6pXwg6P.js} +1 -1
  46. package/dist/client/assets/{Save01-CgyWcG00.js → Save01-CU3VjXKO.js} +1 -1
  47. package/dist/client/assets/{SearchMd-DyDznS8C.js → SearchMd-Cpf31N-H.js} +1 -1
  48. package/dist/client/assets/{Settings01-B90Jx8ZC.js → Settings01-BmEB9pVn.js} +1 -1
  49. package/dist/client/assets/{Shield01-B2Y9HIu6.js → Shield01-CqrrEAw-.js} +1 -1
  50. package/dist/client/assets/{Terminal-BxQK5nsd.js → Terminal-BS-6VR5p.js} +1 -1
  51. package/dist/client/assets/{Trash01-Dhrt1Goe.js → Trash01-HuK-pEft.js} +1 -1
  52. package/dist/client/assets/{Upload01-Dja0ZgIT.js → Upload01-DcyyJb_e.js} +1 -1
  53. package/dist/client/assets/{Users03-DHATZiFL.js → Users03-CPWgVi4r.js} +1 -1
  54. package/dist/client/assets/{X-BpJJDPzv.js → X-uHaUni9w.js} +1 -1
  55. package/dist/client/assets/{XCircle-D52fnGO6.js → XCircle-C4iqiznn.js} +1 -1
  56. package/dist/client/assets/{XClose-DcdK3w1e.js → XClose-DGYV-4S5.js} +1 -1
  57. package/dist/client/assets/{Zap-CP5UH1Dw.js → Zap-5c_DBEtK.js} +1 -1
  58. package/dist/client/assets/{agent-connections-preview-v4ndb6aJ.js → agent-connections-preview-BsjSZYGn.js} +1 -1
  59. package/dist/client/assets/agent-detail-BxRuQLTH.js +2 -0
  60. package/dist/client/assets/agents-KBFzt520.js +1 -0
  61. package/dist/client/assets/{alert-dialog-PSmHhGOE.js → alert-dialog-D3oCqQtu.js} +2 -2
  62. package/dist/client/assets/{auth-catchall-CplMsxXE.js → auth-catchall-bz6gJ41s.js} +1 -1
  63. package/dist/client/assets/{avatar-VPsqzp0K.js → avatar-rYlL0ZoJ.js} +1 -1
  64. package/dist/client/assets/{badge-DSAomO1_.js → badge-CxJArm69.js} +1 -1
  65. package/dist/client/assets/{binder-8_Oel13A.js → binder-BXDCztlr.js} +1 -1
  66. package/dist/client/assets/{breadcrumb-Dxn3nF83.js → breadcrumb-CGrLS5HH.js} +1 -1
  67. package/dist/client/assets/{card-CRGkE-QK.js → card-CAORA3L1.js} +1 -1
  68. package/dist/client/assets/{chart-B-ayLZ8-.js → chart-DX1_yJHY.js} +1 -1
  69. package/dist/client/assets/{checkbox-Dj6Qb3KC.js → checkbox-BCSzUsPR.js} +1 -1
  70. package/dist/client/assets/{circle-alert-DcuI5GGM.js → circle-alert-B4C3d1aQ.js} +1 -1
  71. package/dist/client/assets/{collapsible-D2Mpu85K.js → collapsible-sQONDG4w.js} +1 -1
  72. package/dist/client/assets/{collection-detail-FNWcZVfu.js → collection-detail-B42SRwNb.js} +3 -3
  73. package/dist/client/assets/collection-display-button-M7dfC2Rf.js +1 -0
  74. package/dist/client/assets/{collection-search-FSS_Lkwz.js → collection-search-q4T1hb73.js} +1 -1
  75. package/dist/client/assets/collection-tab-e-VwhAzh.js +1 -0
  76. package/dist/client/assets/collection-table-wrapper-DXH0yXJC.js +1 -0
  77. package/dist/client/assets/{collection-tabs-CK4hfCPZ.js → collection-tabs-BbVq4J-5.js} +1 -1
  78. package/dist/client/assets/{command-BK3ZFocj.js → command-CPQN970u.js} +1 -1
  79. package/dist/client/assets/{connect-D2cFEIR8.js → connect-BGH3KdkD.js} +1 -1
  80. package/dist/client/assets/{connection-card-GLkE1rwd.js → connection-card-DTiOZbAC.js} +1 -1
  81. package/dist/client/assets/connection-detail-DznxU3SC.js +1 -0
  82. package/dist/client/assets/connections-AQfSUAp3.js +1 -0
  83. package/dist/client/assets/{constants-3MhIA0pZ.js → constants-D9bRXDQp.js} +1 -1
  84. package/dist/client/assets/constants-DvJZMaim.js +1 -0
  85. package/dist/client/assets/{create-organization-dialog-CR8t2T4R.js → create-organization-dialog-Bs4zbKG7.js} +1 -1
  86. package/dist/client/assets/{create-project-dialog-DFaC5_HT.js → create-project-dialog-BkL7vqeo.js} +1 -1
  87. package/dist/client/assets/{danger-BEh_Y1ce.js → danger-C_vn0auF.js} +1 -1
  88. package/dist/client/assets/{danger-zone-CpwKIZ0p.js → danger-zone-CdUOoCFt.js} +1 -1
  89. package/dist/client/assets/{decopilot-events-CA9aFPSQ.js → decopilot-events-DHSwekTa.js} +1 -1
  90. package/dist/client/assets/dependencies-DTmw6OGT.js +1 -0
  91. package/dist/client/assets/{dialog-CPWJMuHX.js → dialog-Baq_fjtR.js} +1 -1
  92. package/dist/client/assets/{dropdown-menu-DW1GDWfN.js → dropdown-menu-CSqO4Mxn.js} +1 -1
  93. package/dist/client/assets/dynamic-plugin-layout-d0KDA7MF.js +1 -0
  94. package/dist/client/assets/{editable-task-title-D4gyoQ4x.js → editable-task-title-HUenZvZX.js} +1 -1
  95. package/dist/client/assets/{empty-state-boxcABsi.js → empty-state-BPClkF2j.js} +1 -1
  96. package/dist/client/assets/{env-vars-editor-x5YLFI-P.js → env-vars-editor-DDp7f4JN.js} +1 -1
  97. package/dist/client/assets/{extract-connection-data-D40JrSD8.js → extract-connection-data-BkJeK0tX.js} +1 -1
  98. package/dist/client/assets/{file-browser-CrcClgQC.js → file-browser-DVzV35Ko.js} +2 -2
  99. package/dist/client/assets/{form-7Q-FsNtX.js → form-C5R0_qWR.js} +1 -1
  100. package/dist/client/assets/{general-C0buekt8.js → general-mBNwCpsS.js} +1 -1
  101. package/dist/client/assets/{grid-view-J96VhXfb.js → grid-view-7eQhfO8f.js} +1 -1
  102. package/dist/client/assets/{home-H46nCwT5.js → home-okrTp5Gh.js} +1 -1
  103. package/dist/client/assets/{icon-picker-DPVWLIZ3.js → icon-picker-DevrZ9IQ.js} +1 -1
  104. package/dist/client/assets/{index-CsXxowFD.js → index-B-STjJpH.js} +1 -1
  105. package/dist/client/assets/{index-ZgdunwGI.js → index-BK6i23a9.js} +1 -1
  106. package/dist/client/assets/{index-D7M37zt-.js → index-BWSvBz7o.js} +1 -1
  107. package/dist/client/assets/{index-3zbyfLqi.js → index-B_0vsVr1.js} +3 -3
  108. package/dist/client/assets/{index-DqzqEzLf.js → index-ByA6j7_H.js} +1 -1
  109. package/dist/client/assets/{index-DziKeC8s.js → index-CvEIDmnk.js} +1 -1
  110. package/dist/client/assets/index-D6E08wfB.css +1 -0
  111. package/dist/client/assets/index-DYY56DJY.js +1 -0
  112. package/dist/client/assets/{index-DZgOYNf-.js → index-QCmdl8uj.js} +1 -1
  113. package/dist/client/assets/{index-CW624IAb.js → index-UbeVlDrq.js} +1 -1
  114. package/dist/client/assets/{infiniteQueryObserver-DkOiuhUg.js → infiniteQueryObserver-DKiK82rX.js} +1 -1
  115. package/dist/client/assets/{input-DVv1wKLp.js → input-CW7SVowR.js} +1 -1
  116. package/dist/client/assets/{integration-icon-_0Y5dukY.js → integration-icon-DAFtApWT.js} +1 -1
  117. package/dist/client/assets/{label-CfzCa7Vm.js → label-DWU1nKSS.js} +1 -1
  118. package/dist/client/assets/{layout-DemCWqB_.js → layout-CzVwolFw.js} +1 -1
  119. package/dist/client/assets/{layout-CFi42XXk.js → layout-DEcRD72T.js} +1 -1
  120. package/dist/client/assets/{localstorage-keys-D2dx16dH.js → localstorage-keys-BAzeyS9J.js} +1 -1
  121. package/dist/client/assets/{login-BXUbt1kV.js → login-OPfY3bsF.js} +1 -1
  122. package/dist/client/assets/{markdown-89WWPNXO.js → markdown-DCSB9ejV.js} +1 -1
  123. package/dist/client/assets/{mcp-app-renderer-MJ3LmhBP.js → mcp-app-renderer-BtuEhdWL.js} +1 -1
  124. package/dist/client/assets/{mcp-oauth-CPAKRpWT.js → mcp-oauth-D8pA0WRM.js} +1 -1
  125. package/dist/client/assets/{mcp-server-card-gl2xF4cu.js → mcp-server-card-D7xlSyX7.js} +1 -1
  126. package/dist/client/assets/mcp-server-detail-DdKXdUu2.js +2 -0
  127. package/dist/client/assets/members-YKyOsCaT.js +3 -0
  128. package/dist/client/assets/{monaco-editor-Qwuf1rYM.js → monaco-editor-zyWgiZEt.js} +1 -1
  129. package/dist/client/assets/{monitoring-C-vcUHdF.js → monitoring-SM_c8qxT.js} +2 -2
  130. package/dist/client/assets/monitoring-dashboard-edit-cexdjvMw.js +1 -0
  131. package/dist/client/assets/{monitoring-dashboard-view-D7MwbzDH.js → monitoring-dashboard-view-C3qQNwfm.js} +1 -1
  132. package/dist/client/assets/{oauth-callback-BnBZDVD6.js → oauth-callback-1SC3hH5y.js} +1 -1
  133. package/dist/client/assets/page-DfTTOYQt.js +1 -0
  134. package/dist/client/assets/page-hoODnFtN.js +1 -0
  135. package/dist/client/assets/{plugin-empty-state-DfdPh9Ts.js → plugin-empty-state-Cl_h_OgT.js} +1 -1
  136. package/dist/client/assets/{plugin-empty-state-BuLjcm9B.js → plugin-empty-state-Doboc7Tq.js} +1 -1
  137. package/dist/client/assets/{plugin-header-CKLaOHoT.js → plugin-header-C4Dfehzm.js} +1 -1
  138. package/dist/client/assets/{plugin-header-Bi-8qclQ.js → plugin-header-DNeaPoeS.js} +1 -1
  139. package/dist/client/assets/plugins-H9eiCXso.js +1 -0
  140. package/dist/client/assets/popover-BNZ96bFv.js +1 -0
  141. package/dist/client/assets/project-app-view-Bsbq4Qf_.js +1 -0
  142. package/dist/client/assets/project-layout-B4cnkESa.js +1 -0
  143. package/dist/client/assets/{project-plugins-B1sb2cJf.js → project-plugins-CqDaIw1P.js} +1 -1
  144. package/dist/client/assets/{projects-list-D0DH8k1c.js → projects-list-CgsVuZof.js} +1 -1
  145. package/dist/client/assets/{readme-viewer-BvJA0DXw.js → readme-viewer-CKidIXa3.js} +1 -1
  146. package/dist/client/assets/{registry-layout-BJCo3ZwE.js → registry-layout-oUh5Zl7W.js} +2 -2
  147. package/dist/client/assets/{registry-utils-Cx5oa6Ne.js → registry-utils-DXJps8H7.js} +1 -1
  148. package/dist/client/assets/{reports-layout-DYTNa8h-.js → reports-layout-CFJRqv-Q.js} +2 -2
  149. package/dist/client/assets/{reset-password-DFzqJN6I.js → reset-password-ZQI9gTW6.js} +1 -1
  150. package/dist/client/assets/{resizable-PA9Y3YAt.js → resizable-CWRglWOX.js} +1 -1
  151. package/dist/client/assets/{save-actions-CXaB5WYr.js → save-actions-eGQZXGI3.js} +1 -1
  152. package/dist/client/assets/{scroll-area-DoXCMB9j.js → scroll-area-By1z4ZyY.js} +1 -1
  153. package/dist/client/assets/{select-DaTaxi5W.js → select-CYY4CENz.js} +1 -1
  154. package/dist/client/assets/shell-layout-DMKfJTmj.js +3 -0
  155. package/dist/client/assets/{sidebar-settings-BZwWXZuX.js → sidebar-settings-ILgspCqY.js} +1 -1
  156. package/dist/client/assets/{skeleton-C9OYLAME.js → skeleton-C4ZMp7sl.js} +1 -1
  157. package/dist/client/assets/{spinner-RGw-eBKN.js → spinner-oA3jiJW_.js} +1 -1
  158. package/dist/client/assets/{store-invite-Fvga4enp.js → store-invite-Bfy0Alsf.js} +1 -1
  159. package/dist/client/assets/{switch-CKTW0M5S.js → switch-BSc4dVNg.js} +1 -1
  160. package/dist/client/assets/{table-Dr33PlEJ.js → table-RFgqEt_E.js} +1 -1
  161. package/dist/client/assets/{tabs-t9dEapgX.js → tabs-BZ-xfLNG.js} +1 -1
  162. package/dist/client/assets/tasks-Cy-gkHRX.js +1 -0
  163. package/dist/client/assets/{tasks-panel-DLy55FSi.js → tasks-panel-C7RwVTDD.js} +1 -1
  164. package/dist/client/assets/{textarea-CNTbi5Nk.js → textarea-4HpXofT0.js} +1 -1
  165. package/dist/client/assets/{time-range-picker-Do8ix4-A.js → time-range-picker-Cx2A-Fs_.js} +1 -1
  166. package/dist/client/assets/{toggle-group-Ck1YCESf.js → toggle-group-CVFHcp8K.js} +1 -1
  167. package/dist/client/assets/tools-list-BYphEqhu.js +1 -0
  168. package/dist/client/assets/{tooltip-CzsT_Xmu.js → tooltip-Cz-bAWiO.js} +1 -1
  169. package/dist/client/assets/{topbar-portal-pZDSuDEC.js → topbar-portal-DOwsTUY4.js} +1 -1
  170. package/dist/client/assets/{types-BFBQ7LBo.js → types-B46wd5bS.js} +1 -1
  171. package/dist/client/assets/{use-binding-Cz4OU82g.js → use-binding-Dz1SRdBY.js} +1 -1
  172. package/dist/client/assets/use-collections-vccihohV.js +1 -0
  173. package/dist/client/assets/use-connection-DeEn4qfI.js +1 -0
  174. package/dist/client/assets/{use-copy-C0vtJ5Ye.js → use-copy-CykDvxn6.js} +1 -1
  175. package/dist/client/assets/{use-create-virtual-mcp-CsNENE7l.js → use-create-virtual-mcp-DB14T-Ft.js} +1 -1
  176. package/dist/client/assets/use-install-from-registry-BeHRHLDl.js +1 -0
  177. package/dist/client/assets/{use-list-state-DUq5hUJc.js → use-list-state-ykkfYLR3.js} +1 -1
  178. package/dist/client/assets/use-llm-B_iPCa-K.js +1 -0
  179. package/dist/client/assets/{use-mcp-resources-DjDOJ-nS.js → use-mcp-resources-Rqzq7A0J.js} +1 -1
  180. package/dist/client/assets/{use-mcp-tools-WZlm0cnW.js → use-mcp-tools-BXihKxpu.js} +1 -1
  181. package/dist/client/assets/{use-members-BLjJfltI.js → use-members-DAcqcxDX.js} +1 -1
  182. package/dist/client/assets/{use-mobile-CzcHKmhL.js → use-mobile-B2VAoWT2.js} +1 -1
  183. package/dist/client/assets/{use-project-CIyZUlkd.js → use-project-D96OXk4y.js} +1 -1
  184. package/dist/client/assets/{use-settings-modal-BU5fs4m_.js → use-settings-modal-CouKpdi3.js} +1 -1
  185. package/dist/client/assets/{use-view-mode-BadETRuZ.js → use-view-mode-DyK0fMBe.js} +1 -1
  186. package/dist/client/assets/use-virtual-mcp-OwU65kyR.js +1 -0
  187. package/dist/client/assets/useInfiniteQuery-Cl9EtkM0.js +1 -0
  188. package/dist/client/assets/{useMutation-CqJLXgOK.js → useMutation-lBFQDcxE.js} +1 -1
  189. package/dist/client/assets/useQuery-DcRkCB2j.js +1 -0
  190. package/dist/client/assets/useSuspenseInfiniteQuery-DdSDu-rZ.js +1 -0
  191. package/dist/client/assets/{user-vKqDbtP6.js → user-C73vNaiS.js} +1 -1
  192. package/dist/client/assets/workflow-S9BhswBs.js +1 -0
  193. package/dist/client/index.html +2 -2
  194. package/dist/server/cli.js +1 -1
  195. package/dist/server/migrate.js +1 -1
  196. package/dist/server/server.js +1 -1
  197. package/package.json +1 -1
  198. package/dist/client/assets/agent-detail-DyOlL9jH.js +0 -2
  199. package/dist/client/assets/agents-CB6IRof4.js +0 -1
  200. package/dist/client/assets/collection-tab-FKeWJS1r.js +0 -1
  201. package/dist/client/assets/collection-table-wrapper-C3jcR2VW.js +0 -1
  202. package/dist/client/assets/connection-detail-PegJ7rZR.js +0 -1
  203. package/dist/client/assets/connections-C18lG_Ow.js +0 -1
  204. package/dist/client/assets/constants-Csevqii0.js +0 -1
  205. package/dist/client/assets/dependencies-mwSdsJgD.js +0 -1
  206. package/dist/client/assets/dynamic-plugin-layout-CY4G5d8i.js +0 -1
  207. package/dist/client/assets/index-Cr3FYIgR.css +0 -1
  208. package/dist/client/assets/index-DFlYm7QG.js +0 -1
  209. package/dist/client/assets/mcp-server-detail-CzmUyYsJ.js +0 -2
  210. package/dist/client/assets/members-BjMeazP1.js +0 -3
  211. package/dist/client/assets/monitoring-dashboard-edit-DdMgOlQK.js +0 -1
  212. package/dist/client/assets/page-BNQcXJwH.js +0 -1
  213. package/dist/client/assets/page-DvC0ZQe5.js +0 -1
  214. package/dist/client/assets/plugins-cGh_gky2.js +0 -1
  215. package/dist/client/assets/popover-7xIJyxqf.js +0 -1
  216. package/dist/client/assets/project-app-view-C_PL72tZ.js +0 -1
  217. package/dist/client/assets/project-layout-DIwsntjO.js +0 -1
  218. package/dist/client/assets/shell-layout-BqF7J7La.js +0 -3
  219. package/dist/client/assets/tasks-OJAbxkK1.js +0 -1
  220. package/dist/client/assets/tools-list-DLfR0anP.js +0 -1
  221. package/dist/client/assets/use-connection-Dlr-wAwU.js +0 -1
  222. package/dist/client/assets/use-install-from-registry-C_roXw8y.js +0 -1
  223. package/dist/client/assets/use-llm-B6AzV9Iw.js +0 -1
  224. package/dist/client/assets/use-virtual-mcp-BjGr5L6n.js +0 -1
  225. package/dist/client/assets/useInfiniteQuery-CGGEgi5q.js +0 -1
  226. package/dist/client/assets/useQuery-DWLTdDjg.js +0 -1
  227. package/dist/client/assets/useSuspenseInfiniteQuery-YGfVGowO.js +0 -1
  228. package/dist/client/assets/workflow--wyybZpA.js +0 -1
@@ -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).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decocms/mesh",
3
- "version": "2.135.1",
3
+ "version": "2.136.1",
4
4
  "description": "MCP Mesh - Self-hostable MCP Gateway for managing AI connections and tools",
5
5
  "author": "Deco team",
6
6
  "license": "MIT",
@@ -1,2 +0,0 @@
1
- import{r as _,c as k,j as t,E as fe,B as J,v as ae,_ as Ze,u as de,V as Qe,s as Xe,t as ce,b as et,e as tt,O as Ge,l as st,k as lt,aD as ot,q as Me}from"./index-3zbyfLqi.js";import{b as Ae,i as nt,c as it,u as rt,C as at,d as ct}from"./collapsible-D2Mpu85K.js";import{C as dt,E as mt}from"./collection-search-FSS_Lkwz.js";import{I as ut}from"./icon-picker-DPVWLIZ3.js";import{I as Oe}from"./integration-icon-_0Y5dukY.js";import{u as ft}from"./index-DZgOYNf-.js";import{B as $e}from"./badge-DSAomO1_.js";import{I as Ve}from"./input-DVv1wKLp.js";import{S as pt}from"./switch-CKTW0M5S.js";import{T as xt}from"./textarea-CNTbi5Nk.js";import{a as pe,c as ve,T as xe,b as he}from"./tooltip-CzsT_Xmu.js";import{h as ht,f as gt}from"./use-connection-Dlr-wAwU.js";import{u as jt,a as bt}from"./use-virtual-mcp-BjGr5L6n.js";import{i as He}from"./ChevronRight-O5hZNhHU.js";import{n as Nt}from"./select-DaTaxi5W.js";import{i as De}from"./File02-CK_RNTh6.js";import{i as Le}from"./Loading01-BSgMOGt8.js";import{i as vt}from"./Play-CBKoaI1n.js";import{s as Be}from"./Plus-kcfCg7FH.js";import{t as yt}from"./Users03-DHATZiFL.js";import{B as Ct,a as _t,b as Fe,d as St,e as Tt,c as kt}from"./breadcrumb-Dxn3nF83.js";import{a as wt,V as Et}from"./layout-DemCWqB_.js";import{S as It}from"./save-actions-CXaB5WYr.js";import{a as At}from"./tools-list-DLfR0anP.js";import{C as ze}from"./checkbox-Dj6Qb3KC.js";import{e as Ot,a as Ue,D as Ke,b as $t,c as Dt}from"./dialog-CPWJMuHX.js";import{T as ye,a as Lt,b as Ce,c as zt}from"./tabs-t9dEapgX.js";import{u as ge,a as Rt}from"./constants-3MhIA0pZ.js";import{c as Pt}from"./use-mcp-tools-WZlm0cnW.js";import{a as Mt}from"./use-mcp-resources-DjDOJ-nS.js";import{u as Vt}from"./decopilot-events-CA9aFPSQ.js";import{s as We}from"./slugify-CEUa2lfQ.js";import{I as Bt,R as Ft,a as Gt}from"./index-CsXxowFD.js";import{i as je}from"./Check-Cjs4C9GE.js";import{i as Ht}from"./Code01-DVgdcTZ1.js";import{a as Re}from"./Copy01-CwZDv92A.js";import{i as _e}from"./InfoCircle-Ipgqrfv0.js";import{i as Ut}from"./Key01-CyP1-GBg.js";import{A as Kt}from"./agent-connections-preview-v4ndb6aJ.js";import"./use-llm-B6AzV9Iw.js";import"./use-binding-Cz4OU82g.js";import"./binder-8_Oel13A.js";import"./useQuery-DWLTdDjg.js";import"./localstorage-keys-D2dx16dH.js";import"./useMutation-CqJLXgOK.js";import"./skeleton-C9OYLAME.js";import"./AlignLeft-y_Ps49tB.js";import"./ArrowLeft-BNX_fMaj.js";import"./ChevronDown-jKZz68gN.js";import"./Image01-Dg_KnZBd.js";import"./RefreshCcw01-DiAOUquJ.js";import"./SearchMd-DyDznS8C.js";import"./Settings01-B90Jx8ZC.js";import"./useSuspenseInfiniteQuery-YGfVGowO.js";import"./infiniteQueryObserver-DkOiuhUg.js";import"./popover-7xIJyxqf.js";import"./scroll-area-DoXCMB9j.js";import"./Container-BADgIox6.js";import"./Edit05-D4Vt7tOt.js";import"./Link01-D-1AbdDy.js";import"./XClose-DcdK3w1e.js";import"./index-DziKeC8s.js";import"./Save01-CgyWcG00.js";import"./collection-table-wrapper-C3jcR2VW.js";import"./dropdown-menu-DW1GDWfN.js";import"./ArrowDown-BVK-2NZv.js";import"./ArrowUp-N8lcMBug.js";import"./Grid01-DRBx9FRw.js";import"./List-BzhQuBp2.js";import"./table-Dr33PlEJ.js";import"./card-CRGkE-QK.js";import"./types-BFBQ7LBo.js";import"./Eye-BCmEvczH.js";import"./Globe02-D-yCMf5N.js";import"./LayersTwo01-rKs-Uww3.js";import"./X-BpJJDPzv.js";const Ye=({size:o=24,color:e="currentColor",...s})=>_.createElement("svg",{viewBox:"0 0 24 24",width:o,height:o,stroke:e,strokeWidth:"2",fill:"none",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...s},_.createElement("path",{d:"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z"}));Ye.displayName="Circle";const be=({size:o=24,color:e="currentColor",...s})=>_.createElement("svg",{viewBox:"0 0 24 24",width:o,height:o,stroke:e,strokeWidth:"2",fill:"none",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...s},_.createElement("path",{d:"m9.75 20.75 1.473.818c.284.158.425.237.576.268.133.027.27.027.402 0 .15-.031.292-.11.576-.268l1.473-.818m-9-2.5-1.427-.793c-.3-.166-.45-.25-.558-.368a1 1 0 0 1-.215-.364C3 16.573 3 16.401 3 16.06V14.5m0-5V7.942c0-.343 0-.514.05-.667a1 1 0 0 1 .215-.364c.109-.119.258-.202.558-.368L5.25 5.75m4.5-2.5 1.473-.818c.284-.158.425-.237.576-.267a1 1 0 0 1 .402 0c.15.03.292.11.576.267l1.473.818m4.5 2.5 1.427.793c.3.166.45.25.558.368a1 1 0 0 1 .215.364c.05.153.05.324.05.667V9.5m0 5v1.559c0 .342 0 .514-.05.666a.999.999 0 0 1-.215.364c-.109.119-.258.202-.558.368l-1.427.793m-9-7.5L12 12m0 0 2.25-1.25M12 12v2.5M3 7l2.25 1.25m13.5 0L21 7m-9 12.5V22"}));be.displayName="CubeOutline";const qe=({size:o=24,color:e="currentColor",...s})=>_.createElement("svg",{viewBox:"0 0 24 24",width:o,height:o,stroke:e,strokeWidth:"2",fill:"none",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",...s},_.createElement("path",{d:"m12 5.5-4.638 6.747c-.28.406-.42.609-.41.778a.5.5 0 0 0 .195.373c.135.102.38.102.874.102H12v5l4.638-6.747c.28-.406.42-.609.41-.778a.5.5 0 0 0-.195-.373c-.135-.102-.38-.102-.874-.102H12v-5Z"}),_.createElement("path",{d:"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10Z"}));qe.displayName="ZapCircle";function Se(o){return o===null?"all":o?.length??0}function Wt(o,e){const s=o[e];if(!s)return"";const n=[];return s.tools===null?n.push("all tools"):s.tools&&s.tools.length>0&&n.push(`${s.tools.length} tools`),s.resources===null?n.push("all resources"):s.resources&&s.resources.length>0&&n.push(`${s.resources.length} resources`),s.prompts===null?n.push("all prompts"):s.prompts&&s.prompts.length>0&&n.push(`${s.prompts.length} prompts`),n.join(", ")}function Yt(o,e){const s=o[e];return s?!((s.tools===void 0||s.tools!==null&&s.tools.length===0)&&(s.resources===void 0||s.resources!==null&&s.resources.length===0)&&(s.prompts===void 0||s.prompts!==null&&s.prompts.length===0)):!1}const qt={tools:null,resources:null,prompts:null};function Te(){const o=k.c(1);let e;return o[0]===Symbol.for("react.memo_cache_sentinel")?(e=t.jsx("div",{className:"flex items-center justify-center h-32",children:t.jsx(Le,{className:"animate-spin text-muted-foreground",size:24})}),o[0]=e):e=o[0],e}function ke(o){return({error:e})=>e?.message?.includes("Method not found")||e?.code===-32601?t.jsx("div",{className:"flex-1 overflow-auto px-4 py-3 space-y-1",children:t.jsx("div",{className:"flex items-center justify-center h-32 text-sm text-muted-foreground",children:o})}):t.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center h-full p-6 text-center space-y-4",children:[t.jsx("div",{className:"bg-destructive/10 p-3 rounded-full",children:t.jsx(Ze,{className:"h-6 w-6 text-destructive"})}),t.jsxs("div",{className:"space-y-2",children:[t.jsx("h3",{className:"text-lg font-medium",children:"Something went wrong"}),t.jsx("p",{className:"text-sm text-muted-foreground max-w-xs mx-auto",children:e?.message?e.message.length>200?`${e.message.slice(0,200)}...`:e.message:"An unexpected error occurred"})]})]})}function Jt(o){const e=k.c(23),{item:s,isSelected:n,onToggle:l,disabled:i}=o,d=i?"cursor-not-allowed opacity-50":"cursor-pointer",a=n?"bg-accent/25":"hover:bg-muted/50";let r;e[0]!==d||e[1]!==a?(r=ae("flex items-start gap-3 p-4 rounded-lg transition-colors",d,a),e[0]=d,e[1]=a,e[2]=r):r=e[2];let c;e[3]!==s.name?(c=t.jsx("p",{className:"text-sm font-medium leading-none truncate",children:s.name}),e[3]=s.name,e[4]=c):c=e[4];let x;e[5]!==s.tags?(x=s.tags&&t.jsx("span",{className:"shrink-0",children:s.tags}),e[5]=s.tags,e[6]=x):x=e[6];let g;e[7]!==c||e[8]!==x?(g=t.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[c,x]}),e[7]=c,e[8]=x,e[9]=g):g=e[9];let p;e[10]!==s.description?(p=s.description&&t.jsx("p",{className:"text-xs text-muted-foreground line-clamp-2",children:s.description}),e[10]=s.description,e[11]=p):p=e[11];let h;e[12]!==g||e[13]!==p?(h=t.jsxs("div",{className:"flex-1 min-w-0 space-y-2",children:[g,p]}),e[12]=g,e[13]=p,e[14]=h):h=e[14];let u;e[15]!==i||e[16]!==n||e[17]!==l?(u=t.jsx(ze,{checked:n,onCheckedChange:l,disabled:i,className:"mt-0.5"}),e[15]=i,e[16]=n,e[17]=l,e[18]=u):u=e[18];let f;return e[19]!==r||e[20]!==h||e[21]!==u?(f=t.jsxs("label",{className:r,children:[h,u]}),e[19]=r,e[20]=h,e[21]=u,e[22]=f):f=e[22],f}function Pe(o){const e=k.c(32),{items:s,selections:n,onToggle:l,onToggleAll:i,emptyMessage:d,disabled:a}=o;let r,c,x,g,p;if(e[0]!==a||e[1]!==d||e[2]!==s||e[3]!==l||e[4]!==i||e[5]!==n){p=Symbol.for("react.early_return_sentinel");e:{const f=s.map(Zt);if(s.length===0){let y;e[11]!==d?(y=t.jsx("div",{className:"flex-1 overflow-auto px-4 py-3 space-y-1",children:t.jsx("div",{className:"flex items-center justify-center h-32 text-sm text-muted-foreground",children:d})}),e[11]=d,e[12]=y):y=e[12],p=y;break e}x="flex flex-col h-full";const b=a?"cursor-not-allowed opacity-50":"cursor-pointer";let m;e[13]!==b?(m=ae("flex items-start gap-3 p-4",b),e[13]=b,e[14]=m):m=e[14];let j;e[15]!==s.length?(j=t.jsx("div",{className:"flex-1 min-w-0",children:t.jsxs("span",{className:"text-sm font-medium",children:["Select All (",s.length,")"]})}),e[15]=s.length,e[16]=j):j=e[16];const v=n===null;let C;e[17]!==a||e[18]!==i||e[19]!==v?(C=t.jsx(ze,{checked:v,onCheckedChange:i,disabled:a,className:"mt-0.5"}),e[17]=a,e[18]=i,e[19]=v,e[20]=C):C=e[20],e[21]!==C||e[22]!==m||e[23]!==j?(g=t.jsx("div",{className:"px-4 border-b border-border shrink-0",children:t.jsxs("label",{className:m,children:[j,C]})}),e[21]=C,e[22]=m,e[23]=j,e[24]=g):g=e[24],r="flex-1 overflow-auto px-4 py-3 space-y-1",c=s.map(y=>t.jsx(Jt,{item:y,isSelected:n===null||n?.includes(y.id),onToggle:()=>l(y.id,f),disabled:a},y.id))}e[0]=a,e[1]=d,e[2]=s,e[3]=l,e[4]=i,e[5]=n,e[6]=r,e[7]=c,e[8]=x,e[9]=g,e[10]=p}else r=e[6],c=e[7],x=e[8],g=e[9],p=e[10];if(p!==Symbol.for("react.early_return_sentinel"))return p;let h;e[25]!==r||e[26]!==c?(h=t.jsx("div",{className:r,children:c}),e[25]=r,e[26]=c,e[27]=h):h=e[27];let u;return e[28]!==x||e[29]!==g||e[30]!==h?(u=t.jsxs("div",{className:x,children:[g,h]}),e[28]=x,e[29]=g,e[30]=h,e[31]=u):u=e[31],u}function Zt(o){return o.id}function Qt(o){const e=k.c(13),{connectionId:s,selections:n,onToggle:l,onToggleAll:i,disabled:d}=o,{org:a}=de();let r;e[0]!==s||e[1]!==a.id?(r={connectionId:s,orgId:a.id},e[0]=s,e[1]=a.id,e[2]=r):r=e[2];const c=ge(r);let x;e[3]!==c?(x={client:c},e[3]=c,e[4]=x):x=e[4];const{data:g}=Pt(x);let p;e[5]!==g.tools?(p=g.tools.map(Xt),e[5]=g.tools,e[6]=p):p=e[6];const h=p;let u;return e[7]!==d||e[8]!==h||e[9]!==l||e[10]!==i||e[11]!==n?(u=t.jsx(Pe,{items:h,selections:n,onToggle:l,onToggleAll:i,emptyMessage:"No tools available",disabled:d}),e[7]=d,e[8]=h,e[9]=l,e[10]=i,e[11]=n,e[12]=u):u=e[12],u}function Xt(o){return{id:o.name,name:o.name,description:o.description,tags:t.jsx(At,{annotations:o.annotations,_meta:o._meta})}}function es(o){const e=k.c(13),{connectionId:s,selections:n,onToggle:l,onToggleAll:i,disabled:d}=o,{org:a}=de();let r;e[0]!==s||e[1]!==a.id?(r={connectionId:s,orgId:a.id},e[0]=s,e[1]=a.id,e[2]=r):r=e[2];const c=ge(r);let x;e[3]!==c?(x={client:c},e[3]=c,e[4]=x):x=e[4];const{data:g}=Mt(x);let p;e[5]!==g.resources?(p=g.resources.map(ts),e[5]=g.resources,e[6]=p):p=e[6];const h=p;let u;return e[7]!==d||e[8]!==h||e[9]!==l||e[10]!==i||e[11]!==n?(u=t.jsx(Pe,{items:h,selections:n,onToggle:l,onToggleAll:i,emptyMessage:"No resources available",disabled:d}),e[7]=d,e[8]=h,e[9]=l,e[10]=i,e[11]=n,e[12]=u):u=e[12],u}function ts(o){return{id:o.name||o.uri,name:o.name||o.uri,description:o.description}}function ss(o){const e=k.c(13),{connectionId:s,selections:n,onToggle:l,onToggleAll:i,disabled:d}=o,{org:a}=de();let r;e[0]!==s||e[1]!==a.id?(r={connectionId:s,orgId:a.id},e[0]=s,e[1]=a.id,e[2]=r):r=e[2];const c=ge(r);let x;e[3]!==c?(x={client:c},e[3]=c,e[4]=x):x=e[4];const{data:g}=Vt(x);let p;e[5]!==g.prompts?(p=g.prompts.map(ls),e[5]=g.prompts,e[6]=p):p=e[6];const h=p;let u;return e[7]!==d||e[8]!==h||e[9]!==l||e[10]!==i||e[11]!==n?(u=t.jsx(Pe,{items:h,selections:n,onToggle:l,onToggleAll:i,emptyMessage:"No prompts available",disabled:d}),e[7]=d,e[8]=h,e[9]=l,e[10]=i,e[11]=n,e[12]=u):u=e[12],u}function ls(o){return{id:o.name,name:o.name,description:o.description}}function os(o){const e=k.c(24),{connection:s,isSelected:n,hasSelections:l,summary:i,onClick:d,onToggleAll:a,disabled:r}=o,c=r?"cursor-not-allowed opacity-50":"cursor-pointer",x=n?"bg-accent":"hover:bg-muted/50";let g;e[0]!==c||e[1]!==x?(g=ae("flex items-center gap-2 p-2 h-12 rounded-lg transition-colors",c,x),e[0]=c,e[1]=x,e[2]=g):g=e[2];const p=r?void 0:d;let h;e[3]!==s.icon||e[4]!==s.title?(h=t.jsx(Oe,{icon:s.icon,name:s.title,size:"xs",className:"shrink-0"}),e[3]=s.icon,e[4]=s.title,e[5]=h):h=e[5];let u;e[6]!==s.title?(u=t.jsx("p",{className:"text-sm font-medium text-foreground truncate",children:s.title}),e[6]=s.title,e[7]=u):u=e[7];let f;e[8]!==l||e[9]!==i?(f=l&&i&&t.jsx("p",{className:"text-xs text-muted-foreground truncate",children:i}),e[8]=l,e[9]=i,e[10]=f):f=e[10];let b;e[11]!==u||e[12]!==f?(b=t.jsxs("div",{className:"flex-1 min-w-0 flex flex-col justify-center",children:[u,f]}),e[11]=u,e[12]=f,e[13]=b):b=e[13];let m;e[14]!==r||e[15]!==l||e[16]!==a?(m=t.jsx(ze,{checked:l,onCheckedChange:a,onClick:ns,disabled:r,className:"shrink-0"}),e[14]=r,e[15]=l,e[16]=a,e[17]=m):m=e[17];let j;return e[18]!==g||e[19]!==p||e[20]!==h||e[21]!==b||e[22]!==m?(j=t.jsxs("div",{className:g,onClick:p,children:[h,b,m]}),e[18]=g,e[19]=p,e[20]=h,e[21]=b,e[22]=m,e[23]=j):j=e[23],j}function ns(o){return o.stopPropagation()}function is(o){const e=k.c(22),{allConnections:s,searchTerm:n,selectedId:l,hasSelections:i,getSelectionSummary:d,onConnectionClick:a,onToggleAll:r,disabled:c}=o;let x;e[0]!==s||e[1]!==n?(x=n?s.filter(u=>u.title.toLowerCase().includes(n.toLowerCase())||u.description?.toLowerCase().includes(n.toLowerCase())):s,e[0]=s,e[1]=n,e[2]=x):x=e[2];const g=x;if(g.length===0){const u=n?"No connections found":"No connections available";let f;return e[3]!==u?(f=t.jsx("div",{className:"flex items-center justify-center h-full text-sm text-muted-foreground p-4",children:u}),e[3]=u,e[4]=f):f=e[4],f}let p;if(e[5]!==c||e[6]!==g||e[7]!==d||e[8]!==i||e[9]!==a||e[10]!==r||e[11]!==l){let u;e[13]!==c||e[14]!==d||e[15]!==i||e[16]!==a||e[17]!==r||e[18]!==l?(u=f=>t.jsx(os,{connection:f,isSelected:l===f.id,hasSelections:i(f.id),summary:d(f.id),onClick:()=>a(f.id),onToggleAll:()=>r(f.id),disabled:c},f.id),e[13]=c,e[14]=d,e[15]=i,e[16]=a,e[17]=r,e[18]=l,e[19]=u):u=e[19],p=g.map(u),e[5]=c,e[6]=g,e[7]=d,e[8]=i,e[9]=a,e[10]=r,e[11]=l,e[12]=p}else p=e[12];let h;return e[20]!==p?(h=t.jsx("div",{className:"flex flex-col gap-0.5",children:p}),e[20]=p,e[21]=h):h=e[21],h}function rs(o){const e=k.c(75),{currentConnection:s,activeTab:n,selectedId:l,formData:i,toggleTool:d,toggleResource:a,togglePrompt:r,toggleAllTools:c,toggleAllResources:x,toggleAllPrompts:g,onTabChange:p}=o;let h;e[0]!==s.icon||e[1]!==s.title?(h=t.jsx(Oe,{icon:s.icon,name:s.title,size:"md",className:"shrink-0"}),e[0]=s.icon,e[1]=s.title,e[2]=h):h=e[2];let u;e[3]!==s.title?(u=t.jsx("h2",{className:"text-lg font-semibold truncate",children:s.title}),e[3]=s.title,e[4]=u):u=e[4];let f;e[5]!==s.description?(f=s.description&&t.jsx("p",{className:"text-sm text-muted-foreground truncate",children:s.description}),e[5]=s.description,e[6]=f):f=e[6];let b;e[7]!==u||e[8]!==f?(b=t.jsxs("div",{className:"flex-1 min-w-0",children:[u,f]}),e[7]=u,e[8]=f,e[9]=b):b=e[9];let m;e[10]!==h||e[11]!==b?(m=t.jsx("div",{className:"p-6 border-b border-border shrink-0",children:t.jsxs("div",{className:"flex items-center gap-3",children:[h,b]})}),e[10]=h,e[11]=b,e[12]=m):m=e[12];let j;e[13]!==p?(j=M=>p(M),e[13]=p,e[14]=j):j=e[14];let v;e[15]===Symbol.for("react.memo_cache_sentinel")?(v=t.jsxs(ye,{value:"tools",variant:"underline",className:"gap-2",children:[t.jsx(Ae,{size:16}),"Tools"]}),e[15]=v):v=e[15];let C;e[16]===Symbol.for("react.memo_cache_sentinel")?(C=t.jsxs(ye,{value:"resources",variant:"underline",className:"gap-2",children:[t.jsx(be,{size:16}),"Resources"]}),e[16]=C):C=e[16];let y;e[17]===Symbol.for("react.memo_cache_sentinel")?(y=t.jsxs(Lt,{variant:"underline",className:"shrink-0 px-6",children:[v,C,t.jsxs(ye,{value:"prompts",variant:"underline",className:"gap-2",children:[t.jsx(De,{size:16}),"Prompts"]})]}),e[17]=y):y=e[17];let V;e[18]===Symbol.for("react.memo_cache_sentinel")?(V=ke("Tools not supported by this server"),e[18]=V):V=e[18];let R;e[19]===Symbol.for("react.memo_cache_sentinel")?(R=t.jsx(Te,{}),e[19]=R):R=e[19];let T;e[20]!==i||e[21]!==l?(T=i[l]?i[l].tools:[],e[20]=i,e[21]=l,e[22]=T):T=e[22];let O;e[23]!==l||e[24]!==d?(O=(M,q)=>d(l,M,q),e[23]=l,e[24]=d,e[25]=O):O=e[25];let S;e[26]!==l||e[27]!==c?(S=()=>c(l),e[26]=l,e[27]=c,e[28]=S):S=e[28];let w;e[29]!==l||e[30]!==T||e[31]!==O||e[32]!==S?(w=t.jsx(Ce,{value:"tools",className:"flex-1 overflow-hidden mt-0",children:t.jsx(fe,{fallback:V,children:t.jsx(_.Suspense,{fallback:R,children:t.jsx(Qt,{connectionId:l,selections:T,onToggle:O,onToggleAll:S})})})}),e[29]=l,e[30]=T,e[31]=O,e[32]=S,e[33]=w):w=e[33];let z;e[34]===Symbol.for("react.memo_cache_sentinel")?(z=ke("Resources not supported by this server"),e[34]=z):z=e[34];let $;e[35]===Symbol.for("react.memo_cache_sentinel")?($=t.jsx(Te,{}),e[35]=$):$=e[35];let I;e[36]!==i||e[37]!==l?(I=i[l]?i[l].resources:[],e[36]=i,e[37]=l,e[38]=I):I=e[38];let D;e[39]!==l||e[40]!==a?(D=(M,q)=>a(l,M,q),e[39]=l,e[40]=a,e[41]=D):D=e[41];let A;e[42]!==l||e[43]!==x?(A=()=>x(l),e[42]=l,e[43]=x,e[44]=A):A=e[44];let E;e[45]!==l||e[46]!==I||e[47]!==D||e[48]!==A?(E=t.jsx(Ce,{value:"resources",className:"flex-1 overflow-hidden mt-0",children:t.jsx(fe,{fallback:z,children:t.jsx(_.Suspense,{fallback:$,children:t.jsx(es,{connectionId:l,selections:I,onToggle:D,onToggleAll:A})})})}),e[45]=l,e[46]=I,e[47]=D,e[48]=A,e[49]=E):E=e[49];let B;e[50]===Symbol.for("react.memo_cache_sentinel")?(B=ke("Prompts not supported by this server"),e[50]=B):B=e[50];let P;e[51]===Symbol.for("react.memo_cache_sentinel")?(P=t.jsx(Te,{}),e[51]=P):P=e[51];let K;e[52]!==i||e[53]!==l?(K=i[l]?i[l].prompts:[],e[52]=i,e[53]=l,e[54]=K):K=e[54];let H;e[55]!==l||e[56]!==r?(H=(M,q)=>r(l,M,q),e[55]=l,e[56]=r,e[57]=H):H=e[57];let W;e[58]!==l||e[59]!==g?(W=()=>g(l),e[58]=l,e[59]=g,e[60]=W):W=e[60];let U;e[61]!==l||e[62]!==K||e[63]!==H||e[64]!==W?(U=t.jsx(Ce,{value:"prompts",className:"flex-1 overflow-hidden mt-0",children:t.jsx(fe,{fallback:B,children:t.jsx(_.Suspense,{fallback:P,children:t.jsx(ss,{connectionId:l,selections:K,onToggle:H,onToggleAll:W})})})}),e[61]=l,e[62]=K,e[63]=H,e[64]=W,e[65]=U):U=e[65];let Y;e[66]!==n||e[67]!==w||e[68]!==E||e[69]!==U||e[70]!==j?(Y=t.jsx("div",{className:"flex-1 flex flex-col overflow-hidden",children:t.jsxs(zt,{value:n,onValueChange:j,variant:"underline",className:"flex-1 flex flex-col overflow-hidden",children:[y,w,E,U]})}),e[66]=n,e[67]=w,e[68]=E,e[69]=U,e[70]=j,e[71]=Y):Y=e[71];let Z;return e[72]!==Y||e[73]!==m?(Z=t.jsxs(t.Fragment,{children:[m,Y]}),e[72]=Y,e[73]=m,e[74]=Z):Z=e[74],Z}function as(o){const e={};for(const s of o)e[s.connection_id]={tools:s.selected_tools,resources:s.selected_resources??null,prompts:s.selected_prompts??null};return e}function we(o){return Object.entries(o).map(([e,s])=>({connection_id:e,selected_tools:s.tools,selected_resources:s.resources,selected_prompts:s.prompts}))}function cs(o,e){switch(e.type){case"SET_SEARCH_TERM":return{...o,searchTerm:e.payload};case"SET_SELECTED":return{...o,selectedId:e.payload};case"SET_ACTIVE_TAB":return{...o,activeTab:e.payload};case"RESET":return{searchTerm:"",selectedId:e.payload.selectedId??e.payload.firstConnectionId??null,activeTab:"tools"};case"SELECT_CONNECTION":return{...o,selectedId:e.payload,activeTab:"tools"};default:return o}}const ds=(o,e)=>o.find(s=>s.id===e)??o[0];function ms(o){const e=k.c(77),{open:s,onOpenChange:n,selectedId:l,form:i,connections:d}=o;let a;e[0]!==l?(a={activeTab:"tools",searchTerm:"",selectedId:l},e[0]=l,e[1]=a):a=e[1];const[r,c]=_.useReducer(cs,a),x=_.useDeferredValue(r.searchTerm);let g;e[2]!==x?(g={searchTerm:x},e[2]=x,e[3]=g):g=e[3];const p=ht(g);let h;e[4]!==d?(h=d??[],e[4]=d,e[5]=h):h=e[5];let u;e[6]!==h?(u=as(h),e[6]=h,e[7]=u):u=e[7];const f=u;let b;e[8]!==p||e[9]!==r.selectedId?(b=ds(p,r.selectedId),e[8]=p,e[9]=r.selectedId,e[10]=b):b=e[10];const m=b,j=m?.id??null;let v;e[11]!==f?(v=N=>Yt(f,N),e[11]=f,e[12]=v):v=e[12];const C=v;let y;e[13]!==f?(y=N=>Wt(f,N),e[13]=f,e[14]=y):y=e[14];const V=y;let R;e[15]!==i||e[16]!==f?(R=(N,L,F,Q)=>{const ie=f[N]?.[L];let G;ie===null?G=Q.filter(Ne=>Ne!==F):ie?.includes(F)?G=ie.filter(Ne=>Ne!==F):(G=[...ie??[],F],G.length===Q.length&&(G=null));const re={...f};re[N]?re[N]={...re[N]}:re[N]={tools:null,resources:null,prompts:null},re[N][L]=G,i.setValue("connections",we(re),{shouldDirty:!0,shouldTouch:!0})},e[15]=i,e[16]=f,e[17]=R):R=e[17];const T=R;let O;e[18]!==i||e[19]!==f?(O=(N,L)=>{const ie=f[N]?.[L]===null?[]:null,G={...f};G[N]?G[N]={...G[N]}:G[N]={tools:null,resources:null,prompts:null},G[N][L]=ie,i.setValue("connections",we(G),{shouldDirty:!0,shouldTouch:!0})},e[18]=i,e[19]=f,e[20]=O):O=e[20];const S=O;let w;e[21]!==T?(w=(N,L,F)=>T(N,"tools",L,F),e[21]=T,e[22]=w):w=e[22];const z=w;let $;e[23]!==T?($=(N,L,F)=>T(N,"resources",L,F),e[23]=T,e[24]=$):$=e[24];const I=$;let D;e[25]!==T?(D=(N,L,F)=>T(N,"prompts",L,F),e[25]=T,e[26]=D):D=e[26];const A=D;let E;e[27]!==S?(E=N=>S(N,"tools"),e[27]=S,e[28]=E):E=e[28];const B=E;let P;e[29]!==S?(P=N=>S(N,"resources"),e[29]=S,e[30]=P):P=e[30];const K=P;let H;e[31]!==S?(H=N=>S(N,"prompts"),e[31]=S,e[32]=H):H=e[32];const W=H;let U;e[33]!==i||e[34]!==f?(U=N=>{const L=f[N],F=L&&L.tools===null&&L.resources===null&&L.prompts===null,Q={...f};F?delete Q[N]:Q[N]=qt,i.setValue("connections",we(Q),{shouldDirty:!0,shouldTouch:!0})},e[33]=i,e[34]=f,e[35]=U):U=e[35];const Y=U;let Z;e[36]!==p||e[37]!==n||e[38]!==l?(Z=N=>{N&&c({type:"RESET",payload:{selectedId:l,firstConnectionId:p[0]?.id??null}}),n(N)},e[36]=p,e[37]=n,e[38]=l,e[39]=Z):Z=e[39];const M=Z;let q;e[40]===Symbol.for("react.memo_cache_sentinel")?(q=N=>{c({type:"SELECT_CONNECTION",payload:N})},e[40]=q):q=e[40];const Je=q;let me;e[41]===Symbol.for("react.memo_cache_sentinel")?(me=N=>c({type:"SET_SEARCH_TERM",payload:N}),e[41]=me):me=e[41];let X;e[42]!==r.searchTerm?(X=t.jsx(dt,{value:r.searchTerm,onChange:me,placeholder:"Search connections..."}),e[42]=r.searchTerm,e[43]=X):X=e[43];let ee;e[44]!==p||e[45]!==r.searchTerm||e[46]!==j||e[47]!==V||e[48]!==C||e[49]!==Y?(ee=t.jsx("div",{className:"flex-1 overflow-auto p-2",children:t.jsx(is,{allConnections:p,searchTerm:r.searchTerm,selectedId:j,hasSelections:C,getSelectionSummary:V,onConnectionClick:Je,onToggleAll:Y})}),e[44]=p,e[45]=r.searchTerm,e[46]=j,e[47]=V,e[48]=C,e[49]=Y,e[50]=ee):ee=e[50];let te;e[51]!==X||e[52]!==ee?(te=t.jsxs("div",{className:"w-full sm:w-72 sm:border-r border-b sm:border-b-0 border-border flex flex-col bg-background sm:h-full max-h-[40vh] sm:max-h-full",children:[X,ee]}),e[51]=X,e[52]=ee,e[53]=te):te=e[53];let se;e[54]!==m||e[55]!==r.activeTab||e[56]!==j||e[57]!==f||e[58]!==W||e[59]!==K||e[60]!==B||e[61]!==A||e[62]!==I||e[63]!==z?(se=t.jsx("div",{className:"flex-1 flex flex-col overflow-hidden",children:m&&j?t.jsx(rs,{currentConnection:m,activeTab:r.activeTab,selectedId:j,formData:f,toggleTool:z,toggleResource:I,togglePrompt:A,toggleAllTools:B,toggleAllResources:K,toggleAllPrompts:W,onTabChange:N=>c({type:"SET_ACTIVE_TAB",payload:N})},j):t.jsx("div",{className:"flex-1 flex items-center justify-center text-sm text-muted-foreground",children:"Select a connection to view its tools, resources, and prompts"})}),e[54]=m,e[55]=r.activeTab,e[56]=j,e[57]=f,e[58]=W,e[59]=K,e[60]=B,e[61]=A,e[62]=I,e[63]=z,e[64]=se):se=e[64];let le;e[65]!==te||e[66]!==se?(le=t.jsxs("div",{className:"flex-1 flex overflow-hidden min-h-0 flex-col sm:flex-row",children:[te,se]}),e[65]=te,e[66]=se,e[67]=le):le=e[67];let oe;e[68]!==M?(oe=t.jsx(Ot,{className:"px-6 py-4 border-t border-border shrink-0",children:t.jsx(J,{variant:"outline",onClick:()=>M(!1),children:"Done"})}),e[68]=M,e[69]=oe):oe=e[69];let ne;e[70]!==le||e[71]!==oe?(ne=t.jsxs(Ue,{className:"sm:max-w-5xl h-[80vh] max-h-[80vh] flex flex-col p-0 gap-0 overflow-hidden w-[95vw]",children:[le,oe]}),e[70]=le,e[71]=oe,e[72]=ne):ne=e[72];let ue;return e[73]!==M||e[74]!==s||e[75]!==ne?(ue=t.jsx(Ke,{open:s,onOpenChange:M,children:ne}),e[73]=M,e[74]=s,e[75]=ne,e[76]=ue):ue=e[76],ue}const us=Qe.pick({title:!0,description:!0,icon:!0,status:!0,metadata:!0,connections:!0}).extend({title:Xe().min(1,"Name is required").max(255)});function fs(o){const e=k.c(8);let s,n;e[0]!==o?({className:s,...n}=o,e[0]=o,e[1]=s,e[2]=n):(s=e[1],n=e[2]);let l;e[3]!==s?(l=ae("grid gap-3",s),e[3]=s,e[4]=l):l=e[4];let i;return e[5]!==n||e[6]!==l?(i=t.jsx(Ft,{"data-slot":"radio-group",className:l,...n}),e[5]=n,e[6]=l,e[7]=i):i=e[7],i}function Ee(o){const e=k.c(9);let s,n;e[0]!==o?({className:s,...n}=o,e[0]=o,e[1]=s,e[2]=n):(s=e[1],n=e[2]);let l;e[3]!==s?(l=ae("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",s),e[3]=s,e[4]=l):l=e[4];let i;e[5]===Symbol.for("react.memo_cache_sentinel")?(i=t.jsx(Gt,{"data-slot":"radio-group-indicator",className:"relative flex items-center justify-center",children:t.jsx(Ye,{className:"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})}),e[5]=i):i=e[5];let d;return e[6]!==n||e[7]!==l?(d=t.jsx(Bt,{"data-slot":"radio-group-item",className:l,...n,children:i}),e[6]=n,e[7]=l,e[8]=d):d=e[8],d}function ps(o){const s=new TextEncoder().encode(o),n=Array.from(s,l=>String.fromCharCode(l)).join("");return btoa(n)}function xs(o){const e=k.c(10),{url:s}=o,[n,l]=_.useState(!1);let i;e[0]!==s?(i=async()=>{await navigator.clipboard.writeText(s),l(!0),ce.success("Agent URL copied to clipboard"),setTimeout(()=>l(!1),2e3)},e[0]=s,e[1]=i):i=e[1];const d=i;let a;e[2]!==n?(a=n?t.jsx(je,{size:20,className:"text-green-600"}):t.jsx(Re,{size:20}),e[2]=n,e[3]=a):a=e[3];const r=n?"Copied!":"Copy URL";let c;e[4]!==r?(c=t.jsx("span",{className:"text-xs font-medium",children:r}),e[4]=r,e[5]=c):c=e[5];let x;return e[6]!==d||e[7]!==a||e[8]!==c?(x=t.jsxs(J,{type:"button",variant:"outline",onClick:d,className:"h-auto py-3 px-4 flex flex-col items-center gap-2",children:[a,c]}),e[6]=d,e[7]=a,e[8]=c,e[9]=x):x=e[9],x}function hs(o){const e=k.c(7),{url:s,serverName:n}=o;let l;e[0]!==n||e[1]!==s?(l=()=>{const c=We(n),g=ps(JSON.stringify({type:"http",url:s,headers:{"x-mesh-client":"Cursor"}},null,2)),p=`cursor://anysphere.cursor-deeplink/mcp/install?name=${encodeURIComponent(c)}&config=${encodeURIComponent(g)}`;window.open(p,"_blank"),ce.success("Opening Cursor...")},e[0]=n,e[1]=s,e[2]=l):l=e[2];const i=l;let d,a;e[3]===Symbol.for("react.memo_cache_sentinel")?(d=t.jsx("img",{src:"/logos/cursor.svg",alt:"Cursor",className:"h-5 w-5",style:{filter:"brightness(0) saturate(100%) invert(11%) sepia(8%) saturate(785%) hue-rotate(1deg) brightness(95%) contrast(89%)"}}),a=t.jsx("span",{className:"text-xs font-medium",children:"Install on Cursor"}),e[3]=d,e[4]=a):(d=e[3],a=e[4]);let r;return e[5]!==i?(r=t.jsxs(J,{type:"button",variant:"outline",onClick:i,className:"h-auto py-3 px-4 flex flex-col items-center gap-2",children:[d,a]}),e[5]=i,e[6]=r):r=e[6],r}function gs(o){const e=k.c(11),{url:s,serverName:n}=o,[l,i]=_.useState(!1);let d;e[0]!==n||e[1]!==s?(d=async()=>{const p=We(n),u=JSON.stringify({type:"http",url:s,headers:{"x-mesh-client":"Claude Code"}},null,2),f=`claude mcp add-json "${p}" '${u.replace(/'/g,"'\\''")}'`;await navigator.clipboard.writeText(f),i(!0),ce.success("Claude Code command copied to clipboard"),setTimeout(()=>i(!1),2e3)},e[0]=n,e[1]=s,e[2]=d):d=e[2];const a=d;let r;e[3]!==l?(r=l?t.jsx(je,{size:20,className:"text-green-600"}):t.jsx("img",{src:"/logos/Claude Code.svg",alt:"Claude Code",className:"h-5 w-5",style:{filter:"brightness(0) saturate(100%) invert(55%) sepia(31%) saturate(1264%) hue-rotate(331deg) brightness(92%) contrast(86%)"}}),e[3]=l,e[4]=r):r=e[4];const c=l?"Copied!":"Install on Claude";let x;e[5]!==c?(x=t.jsx("span",{className:"text-xs font-medium",children:c}),e[5]=c,e[6]=x):x=e[6];let g;return e[7]!==a||e[8]!==r||e[9]!==x?(g=t.jsxs(J,{type:"button",variant:"outline",onClick:a,className:"h-auto py-3 px-4 flex flex-col items-center gap-2",children:[r,x]}),e[7]=a,e[8]=r,e[9]=x,e[10]=g):g=e[10],g}function js({virtualMcp:o}){const{org:e}=de(),s=ge({connectionId:Rt,orgId:e.id}),[n,l]=_.useState(null),[i,d]=_.useState(!1),[a,r]=_.useState(!1),c=o.id,x=o.title||`agent-${c.slice(0,8)}`,g=n?`bunx @decocms/typegen@latest --mcp ${c} --key ${n} --output client.ts`:`bunx @decocms/typegen@latest --mcp ${c} --key <api-key> --output client.ts`,p=async()=>{d(!0);try{const f=(await s.callTool({name:"API_KEY_CREATE",arguments:{name:`typegen-${x}`,permissions:{[c]:["*"]}}})).structuredContent?.key;if(!f)throw new Error("No key in response");l(f)}catch{ce.error("Failed to generate API key")}finally{d(!1)}},h=async()=>{await navigator.clipboard.writeText(g),r(!0),ce.success("Command copied to clipboard"),setTimeout(()=>r(!1),2e3)};return t.jsxs("div",{className:"flex min-w-0 flex-col gap-3",children:[t.jsxs("div",{className:"flex items-start justify-between gap-3",children:[t.jsxs("div",{className:"flex flex-col gap-0.5",children:[t.jsx("h4",{className:"text-sm font-medium text-foreground",children:"Generate typed client"}),t.jsxs("p",{className:"text-xs text-muted-foreground",children:["Introspects this agent and writes a typed"," ",t.jsx("code",{className:"font-mono",children:"client.ts"})," you can import directly."]})]}),!n&&t.jsxs(J,{type:"button",variant:"outline",size:"sm",className:"shrink-0 gap-1.5",onClick:p,disabled:i,children:[i?t.jsx(Le,{size:14,className:"animate-spin"}):t.jsx(Ut,{size:14}),t.jsx("span",{children:i?"Generating…":"Generate API key"})]})]}),n&&t.jsx("p",{className:"rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-700",children:"Store this key securely — it won't be shown again."}),t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:"Generate client"}),t.jsx("div",{className:"rounded-md border border-input bg-muted/50 px-3 py-2.5",children:t.jsxs("div",{className:"flex items-start gap-2",children:[t.jsx("code",{className:"min-w-0 flex-1 break-all font-mono text-xs text-muted-foreground",children:g}),t.jsx(J,{type:"button",variant:"ghost",size:"icon",className:"size-6 shrink-0",onClick:h,children:a?t.jsx(je,{size:12,className:"text-green-600"}):t.jsx(Re,{size:12})})]})}),t.jsx("p",{className:"text-xs font-medium text-muted-foreground",children:"Runtime variables"}),t.jsx(bs,{apiKey:n})]})}function bs(o){const e=k.c(19),{apiKey:s}=o,[n,l]=_.useState(!1),i=window.location.origin,d=s?`MESH_API_KEY=${s}`:"MESH_API_KEY=<api-key>",a=`MESH_BASE_URL=${i}`,r=`${d}
2
- ${a}`;let c;e[0]!==r?(c=async()=>{await navigator.clipboard.writeText(r),l(!0),setTimeout(()=>l(!1),2e3)},e[0]=r,e[1]=c):c=e[1];const x=c,g=!s;let p;e[2]!==g?(p=ae({"opacity-50":g}),e[2]=g,e[3]=p):p=e[3];let h;e[4]!==d||e[5]!==p?(h=t.jsx("span",{className:p,children:d}),e[4]=d,e[5]=p,e[6]=h):h=e[6];let u,f;e[7]===Symbol.for("react.memo_cache_sentinel")?(u=t.jsx("br",{}),f=t.jsx("span",{children:a}),e[7]=u,e[8]=f):(u=e[7],f=e[8]);let b;e[9]!==h?(b=t.jsxs("code",{className:"min-w-0 flex-1 font-mono text-xs text-muted-foreground",children:[h,u,f]}),e[9]=h,e[10]=b):b=e[10];let m;e[11]!==n?(m=n?t.jsx(je,{size:12,className:"text-green-600"}):t.jsx(Re,{size:12}),e[11]=n,e[12]=m):m=e[12];let j;e[13]!==x||e[14]!==m?(j=t.jsx(J,{type:"button",variant:"ghost",size:"icon",className:"size-6 shrink-0",onClick:x,children:m}),e[13]=x,e[14]=m,e[15]=j):j=e[15];let v;return e[16]!==b||e[17]!==j?(v=t.jsx("div",{className:"rounded-md border border-input bg-muted/50 px-3 py-2.5",children:t.jsxs("div",{className:"flex items-start gap-2",children:[b,j]})}),e[16]=b,e[17]=j,e[18]=v):v=e[18],v}function Ns(o){const e=k.c(3),{virtualMcp:s}=o;let n;e[0]===Symbol.for("react.memo_cache_sentinel")?(n=t.jsx("div",{className:"h-20 animate-pulse rounded-md bg-muted"}),e[0]=n):n=e[0];let l;return e[1]!==s?(l=t.jsx(_.Suspense,{fallback:n,children:t.jsx(js,{virtualMcp:s})}),e[1]=s,e[2]=l):l=e[2],l}function vs(o){const e=k.c(44),{open:s,onOpenChange:n,virtualMcp:l}=o,[i,d]=_.useState("code_execution");let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=P=>{(P==="passthrough"||P==="smart_tool_selection"||P==="code_execution")&&d(P)},e[0]=a):a=e[0];const r=a;let c;e[1]!==i||e[2]!==l.id?(c=new URL(`/mcp/virtual-mcp/${l.id}`,window.location.origin),c.searchParams.set("mode",i),e[1]=i,e[2]=l.id,e[3]=c):c=e[3];let x;e[4]!==l.id||e[5]!==l.title?(x=l.title||`agent-${l.id?.slice(0,8)??"default"}`,e[4]=l.id,e[5]=l.title,e[6]=x):x=e[6];const g=x;let p;e[7]===Symbol.for("react.memo_cache_sentinel")?(p=t.jsx($t,{children:t.jsx(Dt,{children:"Connect"})}),e[7]=p):p=e[7];let h;e[8]===Symbol.for("react.memo_cache_sentinel")?(h=t.jsx("div",{children:t.jsx("h4",{className:"text-sm font-medium text-foreground mt-1",children:"How should this agent work?"})}),e[8]=h):h=e[8];let u;e[9]===Symbol.for("react.memo_cache_sentinel")?(u=t.jsx("div",{className:"p-1.5 shrink-0",children:t.jsx(nt,{className:"size-5 text-muted-foreground"})}),e[9]=u):u=e[9];let f;e[10]===Symbol.for("react.memo_cache_sentinel")?(f=t.jsx("span",{className:"text-sm font-medium text-foreground",children:"Direct access"}),e[10]=f):f=e[10];let b;e[11]===Symbol.for("react.memo_cache_sentinel")?(b=t.jsx(pe,{asChild:!0,children:t.jsx(_e,{className:"size-3.5 text-muted-foreground"})}),e[11]=b):b=e[11];let m;e[12]===Symbol.for("react.memo_cache_sentinel")?(m=t.jsxs("label",{htmlFor:"mode-passthrough",className:"flex items-center gap-3 px-3 py-5 rounded-lg border border-border hover:border-ring/50 cursor-pointer transition-colors has-checked:border-ring has-checked:bg-accent/5",children:[u,t.jsxs("div",{className:"flex-1 flex flex-col gap-1.5",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[f,t.jsx(ve,{children:t.jsxs(xe,{children:[b,t.jsx(he,{className:"max-w-xs",children:t.jsx("p",{className:"text-xs",children:"All tools are exposed directly via tools/list. Best for small tool surfaces with deterministic behavior."})})]})})]}),t.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Best for small teams or when you need predictable behavior"})]}),t.jsx(Ee,{id:"mode-passthrough",value:"passthrough"})]}),e[12]=m):m=e[12];let j;e[13]===Symbol.for("react.memo_cache_sentinel")?(j=t.jsx("div",{className:"p-1.5 shrink-0",children:t.jsx(it,{className:"size-5 text-muted-foreground"})}),e[13]=j):j=e[13];let v;e[14]===Symbol.for("react.memo_cache_sentinel")?(v=t.jsx("span",{className:"text-sm font-medium text-foreground",children:"Smart discovery"}),e[14]=v):v=e[14];let C;e[15]===Symbol.for("react.memo_cache_sentinel")?(C=t.jsx(pe,{asChild:!0,children:t.jsx(_e,{className:"size-3.5 text-muted-foreground"})}),e[15]=C):C=e[15];let y;e[16]===Symbol.for("react.memo_cache_sentinel")?(y=t.jsxs("label",{htmlFor:"mode-smart",className:"flex items-center gap-3 px-3 py-5 rounded-lg border border-border hover:border-ring/50 cursor-pointer transition-colors has-checked:border-ring has-checked:bg-accent/5",children:[j,t.jsxs("div",{className:"flex-1 flex flex-col gap-1.5",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[v,t.jsx(ve,{children:t.jsxs(xe,{children:[C,t.jsx(he,{className:"max-w-xs",children:t.jsx("p",{className:"text-xs",children:"Uses meta-tools (GATEWAY_SEARCH_TOOLS, GATEWAY_DESCRIBE_TOOLS, GATEWAY_CALL_TOOL) to keep the tool list small and request details on demand."})})]})})]}),t.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Ideal for large teams with many tools - AI finds what it needs"})]}),t.jsx(Ee,{id:"mode-smart",value:"smart_tool_selection"})]}),e[16]=y):y=e[16];let V;e[17]===Symbol.for("react.memo_cache_sentinel")?(V=t.jsx("div",{className:"p-1.5 shrink-0",children:t.jsx(Ht,{className:"size-5 text-muted-foreground"})}),e[17]=V):V=e[17];let R;e[18]===Symbol.for("react.memo_cache_sentinel")?(R=t.jsx("span",{className:"text-sm font-medium text-foreground",children:"Smart execution"}),e[18]=R):R=e[18];let T;e[19]===Symbol.for("react.memo_cache_sentinel")?(T=t.jsx(pe,{asChild:!0,children:t.jsx(_e,{className:"size-3.5 text-muted-foreground"})}),e[19]=T):T=e[19];let O;e[20]===Symbol.for("react.memo_cache_sentinel")?(O=t.jsxs("label",{htmlFor:"mode-code",className:"relative flex items-center gap-3 px-3 py-5 rounded-lg border border-border hover:border-ring/50 cursor-pointer transition-colors has-checked:border-ring has-checked:bg-accent/5",children:[V,t.jsxs("div",{className:"flex-1 flex flex-col gap-1.5",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[R,t.jsx(ve,{children:t.jsxs(xe,{children:[T,t.jsx(he,{className:"max-w-xs",children:t.jsx("p",{className:"text-xs",children:"Exposes meta-tools for discovery + sandboxed execution (GATEWAY_RUN_CODE). Reduces overhead on large surfaces by shifting work into a controlled runtime."})})]})})]}),t.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:"Maximum flexibility - AI can write code to orchestrate tools"})]}),t.jsx(Ee,{id:"mode-code",value:"code_execution"}),t.jsx($e,{variant:"outline",className:"absolute -top-2.5 left-1/2 -translate-x-1/2 bg-background z-10",children:"Recommended"})]}),e[20]=O):O=e[20];let S;e[21]!==i?(S=t.jsxs("div",{className:"flex flex-col gap-3",children:[h,t.jsxs(fs,{value:i,onValueChange:r,className:"flex flex-col gap-4.5",children:[m,y,O]})]}),e[21]=i,e[22]=S):S=e[22];let w;e[23]!==c.href?(w=t.jsx(xs,{url:c.href}),e[23]=c.href,e[24]=w):w=e[24];let z,$;e[25]!==g||e[26]!==c.href?(z=t.jsx(hs,{url:c.href,serverName:g}),$=t.jsx(gs,{url:c.href,serverName:g}),e[25]=g,e[26]=c.href,e[27]=z,e[28]=$):(z=e[27],$=e[28]);let I;e[29]!==w||e[30]!==z||e[31]!==$?(I=t.jsx("div",{className:"flex flex-col gap-3 pt-2",children:t.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[w,z,$]})}),e[29]=w,e[30]=z,e[31]=$,e[32]=I):I=e[32];let D;e[33]===Symbol.for("react.memo_cache_sentinel")?(D=t.jsx("div",{className:"border-t border-border"}),e[33]=D):D=e[33];let A;e[34]!==l?(A=t.jsx(Ns,{virtualMcp:l}),e[34]=l,e[35]=A):A=e[35];let E;e[36]!==S||e[37]!==I||e[38]!==A?(E=t.jsxs(Ue,{className:"max-h-[80vh] overflow-y-auto sm:max-w-2xl",children:[p,t.jsxs("div",{className:"flex flex-col gap-6",children:[S,I,D,A]})]}),e[36]=S,e[37]=I,e[38]=A,e[39]=E):E=e[39];let B;return e[40]!==n||e[41]!==s||e[42]!==E?(B=t.jsx(Ke,{open:s,onOpenChange:n,children:E}),e[40]=n,e[41]=s,e[42]=E,e[43]=B):B=e[43],B}function ys(o,e){switch(e.type){case"SET_SHARE_DIALOG_OPEN":return{...o,shareDialogOpen:e.payload};case"SET_CONNECTION_DIALOG_OPEN":return{...o,connectionDialogOpen:e.payload};case"SET_EDITING_CONNECTION_ID":return{...o,editingConnectionId:e.payload};case"SET_SKILLS_OPEN":return{...o,skillsOpen:e.payload};default:return o}}function Ie(o){const e=k.c(27),{connection_id:s,selected_tools:n,selected_resources:l,selected_prompts:i,onClick:d}=o,a=gt(s);if(!a)return null;let r;e[0]!==n?(r=Se(n),e[0]=n,e[1]=r):r=e[1];const c=r;let x;e[2]!==l?(x=Se(l),e[2]=l,e[3]=x):x=e[3];const g=x;let p;e[4]!==i?(p=Se(i),e[4]=i,e[5]=p):p=e[5];const h=p;let u;e[6]!==a.icon||e[7]!==a.title?(u=t.jsx(Oe,{icon:a.icon,name:a.title,size:"xs"}),e[6]=a.icon,e[7]=a.title,e[8]=u):u=e[8];let f;e[9]!==a.title?(f=t.jsx("p",{className:"flex-1 text-sm font-normal text-foreground truncate",children:a.title}),e[9]=a.title,e[10]=f):f=e[10];let b;e[11]!==c?(b=c!==0&&t.jsxs("div",{className:"flex items-center gap-0.5 text-xs text-muted-foreground",children:[t.jsx("span",{children:c==="all"?"all":c}),t.jsx(Ae,{size:12})]}),e[11]=c,e[12]=b):b=e[12];let m;e[13]!==g?(m=g!==0&&t.jsxs("div",{className:"flex items-center gap-0.5 text-xs text-muted-foreground",children:[t.jsx("span",{children:g==="all"?"all":g}),t.jsx(be,{size:12})]}),e[13]=g,e[14]=m):m=e[14];let j;e[15]!==h?(j=h!==0&&t.jsxs("div",{className:"flex items-center gap-0.5 text-xs text-muted-foreground",children:[t.jsx("span",{children:h==="all"?"all":h}),t.jsx(De,{size:12})]}),e[15]=h,e[16]=j):j=e[16];let v;e[17]!==b||e[18]!==m||e[19]!==j?(v=t.jsxs($e,{variant:"secondary",className:"bg-muted h-5 gap-2 px-1.5 py-1 flex items-center",children:[b,m,j]}),e[17]=b,e[18]=m,e[19]=j,e[20]=v):v=e[20];let C;e[21]===Symbol.for("react.memo_cache_sentinel")?(C=t.jsx(He,{size:16,className:"text-muted-foreground shrink-0"}),e[21]=C):C=e[21];let y;return e[22]!==d||e[23]!==u||e[24]!==f||e[25]!==v?(y=t.jsxs("div",{onClick:d,className:"w-full h-12 flex items-center gap-2 px-3 rounded-lg border border-border hover:bg-accent/50 transition-colors cursor-pointer",children:[u,f,v,C]}),e[22]=d,e[23]=u,e[24]=f,e[25]=v,e[26]=y):y=e[26],y}Ie.Fallback=function(){return t.jsxs("div",{className:"w-full h-12 flex items-center gap-2 px-3 rounded-lg border border-border",children:[t.jsx("div",{className:"size-5 rounded bg-muted animate-pulse shrink-0"}),t.jsx("div",{className:"flex-1 h-4 rounded bg-muted animate-pulse"}),t.jsxs($e,{variant:"secondary",className:"bg-muted h-5 gap-2 px-1.5 py-1 flex items-center",children:[t.jsxs("div",{className:"flex items-center gap-0.5 text-xs text-muted-foreground",children:[t.jsx("div",{className:"w-3 h-3 rounded bg-muted-foreground/20 animate-pulse"}),t.jsx(Ae,{size:12})]}),t.jsxs("div",{className:"flex items-center gap-0.5 text-xs text-muted-foreground",children:[t.jsx("div",{className:"w-3 h-3 rounded bg-muted-foreground/20 animate-pulse"}),t.jsx(be,{size:12})]}),t.jsxs("div",{className:"flex items-center gap-0.5 text-xs text-muted-foreground",children:[t.jsx("div",{className:"w-3 h-3 rounded bg-muted-foreground/20 animate-pulse"}),t.jsx(De,{size:12})]})]}),t.jsx(He,{size:16,className:"text-muted-foreground shrink-0"})]})};function Cs({virtualMcp:o}){const{org:e}=de(),s=bt(),n=st({resolver:lt(us),defaultValues:o}),l=n.watch("connections"),[i,d]=_.useReducer(ys,{shareDialogOpen:!1,connectionDialogOpen:!1,editingConnectionId:null,skillsOpen:!1}),[,a]=ft(),{setVirtualMcpId:r}=rt();_.useEffect(()=>{a(!0),r(o.id)},[o.id]);const c=()=>{r(o.id),a(!0)},x=n.formState.isDirty,g=async()=>{const m=n.getValues(),j=await s.update.mutateAsync({id:o.id,data:m});n.reset(j)},p=()=>{n.reset(o)},h=()=>{d({type:"SET_EDITING_CONNECTION_ID",payload:null}),d({type:"SET_CONNECTION_DIALOG_OPEN",payload:!0})},u=m=>{d({type:"SET_EDITING_CONNECTION_ID",payload:m}),d({type:"SET_CONNECTION_DIALOG_OPEN",payload:!0})},f=s.update.isPending,b=t.jsx(Ct,{children:t.jsxs(_t,{children:[t.jsx(Fe,{children:t.jsx(St,{asChild:!0,children:t.jsx(ot,{to:"/$org/$project/agents",params:{org:e.slug,project:Ge},children:"Agents"})})}),t.jsx(Tt,{}),t.jsx(Fe,{children:t.jsx(kt,{children:o.title})})]})});return t.jsxs(wt,{breadcrumb:b,children:[t.jsxs(Et,{children:[t.jsx(It,{onSave:g,onUndo:p,isDirty:x,isSaving:f}),t.jsxs(xe,{delayDuration:0,children:[t.jsx(pe,{asChild:!0,children:t.jsx("span",{className:"inline-block",children:t.jsxs(J,{variant:"outline",size:"sm",className:"h-7 gap-1.5 px-2 border border-input",onClick:c,"aria-label":"Test Agent",children:[t.jsx(vt,{size:14}),"Test Agent"]})})}),t.jsx(he,{side:"bottom",children:"Test this agent in chat"})]}),t.jsxs(J,{variant:"outline",size:"sm",className:"h-7 gap-1.5 px-2 border border-input",onClick:()=>d({type:"SET_SHARE_DIALOG_OPEN",payload:!0}),children:[t.jsx(qe,{size:14}),"Connect"]})]}),t.jsx("div",{className:"flex h-full w-full bg-background overflow-auto",children:t.jsxs("div",{className:"flex flex-col w-full",children:[t.jsxs("div",{className:"flex items-start justify-between gap-4 p-6 shrink-0",children:[t.jsxs("div",{className:"flex items-start gap-4 flex-1 min-w-0",children:[t.jsx(Me,{control:n.control,name:"icon",render:({field:m})=>t.jsx(ut,{value:m.value,onChange:m.onChange,name:n.watch("title")||"Agent",size:"lg",className:"shrink-0 shadow-sm",fallbackIcon:t.jsx(yt,{})})}),t.jsxs("div",{className:"flex flex-col flex-1 min-w-0",children:[t.jsx(Ve,{...n.register("title"),className:"h-auto py-0.5 text-lg! font-medium leading-7 px-1 -mx-1 border-transparent hover:bg-input/25 focus:border-input bg-transparent transition-all",placeholder:"Agent Name"}),t.jsx(Ve,{...n.register("description"),className:"h-auto py-0.5 text-base text-muted-foreground leading-6 px-1 -mx-1 border-transparent hover:bg-input/25 focus:border-input bg-transparent transition-all",placeholder:"Add a description..."})]})]}),t.jsx("div",{className:"flex items-center gap-2 shrink-0",children:t.jsx(pt,{checked:n.watch("status")==="active",onCheckedChange:m=>n.setValue("status",m?"active":"inactive",{shouldDirty:!0})})})]}),t.jsxs(at,{open:i.skillsOpen,onOpenChange:m=>d({type:"SET_SKILLS_OPEN",payload:m}),className:"border-t border-border shrink-0 max-h-[400px] overflow-hidden flex flex-col",children:[l.length===0?t.jsxs("button",{type:"button",onClick:h,className:"w-full flex items-center justify-between px-6 py-4 hover:bg-muted/50 transition-colors cursor-pointer",children:[t.jsx("p",{className:"text-sm font-medium text-muted-foreground",children:"Skills"}),t.jsxs("div",{className:"h-7 px-2 inline-flex items-center justify-center gap-1 rounded-md text-sm text-muted-foreground",children:[t.jsx(Be,{size:14}),"Add"]})]}):t.jsx(ct,{asChild:!0,children:t.jsxs("button",{type:"button",className:"w-full flex items-center justify-between px-6 py-4 hover:bg-muted/50 transition-colors cursor-pointer",children:[t.jsx("p",{className:"text-sm font-medium text-muted-foreground",children:"Skills"}),t.jsxs("div",{className:"flex items-center",children:[t.jsx("div",{className:"ease-(--ease-out-expo)",style:{width:i.skillsOpen?0:"auto",marginRight:i.skillsOpen?0:4,opacity:i.skillsOpen?0:1,pointerEvents:i.skillsOpen?"none":"auto",transitionProperty:"all",transitionDuration:i.skillsOpen?"0ms":"200ms"},children:t.jsx(Kt,{connectionIds:l.map(m=>m.connection_id),maxVisibleIcons:2})}),t.jsxs("div",{role:"button",tabIndex:0,className:"h-7 inline-flex items-center justify-center rounded-md text-sm text-muted-foreground overflow-hidden transition-all duration-200 ease-(--ease-out-expo) hover:bg-accent hover:text-accent-foreground",style:{width:i.skillsOpen?"auto":28,paddingLeft:i.skillsOpen?8:0,paddingRight:i.skillsOpen?8:0,gap:i.skillsOpen?4:0},onPointerDown:m=>{m.stopPropagation()},onClick:m=>{m.stopPropagation(),m.preventDefault(),h()},onKeyDown:m=>{(m.key==="Enter"||m.key===" ")&&(m.stopPropagation(),m.preventDefault(),h())},children:[t.jsx(Be,{size:14,className:"shrink-0"}),t.jsx("span",{className:"overflow-hidden whitespace-nowrap transition-all duration-200 ease-(--ease-out-expo)",style:{width:i.skillsOpen?"auto":0,opacity:i.skillsOpen?1:0},children:"Add"})]}),t.jsx("div",{className:"h-7 inline-flex items-center justify-center overflow-hidden transition-all duration-200 ease-(--ease-out-expo)",style:{width:i.skillsOpen?28:0,opacity:i.skillsOpen?1:0},children:t.jsx(Nt,{size:16,className:"shrink-0"})})]})]})}),t.jsx("div",{className:"grid overflow-hidden transition-[grid-template-rows] duration-200 ease-(--ease-out-expo)",style:{gridTemplateRows:i.skillsOpen?"1fr":"0fr"},children:t.jsx("div",{className:"min-h-0 overflow-hidden",children:t.jsx("div",{className:"overflow-y-auto max-h-[300px] mask-[linear-gradient(to_bottom,black_calc(100%-40px),transparent_100%)]",children:t.jsx("div",{className:"flex flex-col gap-2 px-6 pb-4 pt-2",children:l.map(m=>t.jsx(_.Suspense,{fallback:t.jsx(Ie.Fallback,{}),children:t.jsx(Ie,{connection_id:m.connection_id,selected_tools:m.selected_tools,selected_resources:m.selected_resources,selected_prompts:m.selected_prompts,onClick:()=>u(m.connection_id)})},m.connection_id))})})})})]}),t.jsxs("div",{className:"flex flex-col flex-1 p-6 border-t border-border overflow-auto",children:[t.jsx("p",{className:"text-sm font-medium text-muted-foreground mb-2",children:"Instructions"}),t.jsx(Me,{name:"metadata.instructions",control:n.control,render:({field:m})=>t.jsx(xt,{...m,value:m.value??"",placeholder:"Write instructions here...",className:"min-h-[200px] resize-none text-sm placeholder:text-muted-foreground/50 leading-relaxed border-0 rounded-none shadow-none px-0 focus-visible:ring-0 focus-visible:ring-offset-0 focus:border-0 bg-transparent"})})]})]})}),t.jsx(ms,{open:i.connectionDialogOpen,onOpenChange:m=>d({type:"SET_CONNECTION_DIALOG_OPEN",payload:m}),selectedId:i.editingConnectionId,form:n,connections:l}),t.jsx(vs,{open:i.shareDialogOpen,onOpenChange:m=>d({type:"SET_SHARE_DIALOG_OPEN",payload:m}),virtualMcp:o})]})}function _s(){const o=k.c(6),e=et();let s;o[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org/$project/agents/$agentId"},o[0]=s):s=o[0];const n=tt(s),{org:l,agentId:i}=n,d=jt(i);if(!d){let r;return o[1]!==e||o[2]!==l?(r=t.jsx("div",{className:"flex h-full w-full bg-background",children:t.jsx(mt,{title:"Agent not found",description:"This Agent may have been deleted or you may not have access.",actions:t.jsx(J,{variant:"outline",onClick:()=>e({to:"/$org/$project/agents",params:{org:l,project:Ge}}),children:"Back to agents"})})}),o[1]=e,o[2]=l,o[3]=r):r=o[3],r}let a;return o[4]!==d?(a=t.jsx(Cs,{virtualMcp:d}),o[4]=d,o[5]=a):a=o[5],a}function Wl(){const o=k.c(1);let e;return o[0]===Symbol.for("react.memo_cache_sentinel")?(e=t.jsx(fe,{children:t.jsx(_.Suspense,{fallback:t.jsx("div",{className:"flex h-full items-center justify-center bg-background",children:t.jsx(Le,{size:32,className:"animate-spin text-muted-foreground"})}),children:t.jsx(_s,{})})}),o[0]=e):e=o[0],e}export{Wl as default};
@@ -1 +0,0 @@
1
- import{c as ie,j as t,E as ne,r as X,u as ae,b as le,B as q,O as V}from"./index-3zbyfLqi.js";import{C as ce,a as de}from"./collection-table-wrapper-C3jcR2VW.js";import{C as me,E as Q}from"./collection-search-FSS_Lkwz.js";import{P as j}from"./index-DZgOYNf-.js";import{B as pe,a as ue,b as ge,c as he}from"./breadcrumb-Dxn3nF83.js";import{C as fe}from"./connection-card-GLkE1rwd.js";import{I as xe}from"./integration-icon-_0Y5dukY.js";import{u as je}from"./use-list-state-DUq5hUJc.js";import{u as Ce}from"./use-create-virtual-mcp-CsNENE7l.js";import{i as be}from"./constants-3MhIA0pZ.js";import{b as ye,a as we}from"./use-virtual-mcp-BjGr5L6n.js";import{c as Ne,b as De,d as Se,A as _e,e as ke,h as ve,a as Ae,f as Ie}from"./alert-dialog-PSmHhGOE.js";import{D as Y,a as Z,b as ee,c as R}from"./dropdown-menu-DW1GDWfN.js";import{i as te}from"./DotsVertical-B7FmF1Xu.js";import{s as se}from"./Eye-BCmEvczH.js";import{i as Pe}from"./Loading01-BSgMOGt8.js";import{s as oe}from"./Trash01-Dhrt1Goe.js";import{t as C}from"./Users03-DHATZiFL.js";import{U as $e}from"./user-vKqDbtP6.js";import{A as re}from"./agent-connections-preview-v4ndb6aJ.js";import{f as ze}from"./format-time-CMKyl-GC.js";import"./ArrowDown-BVK-2NZv.js";import"./ArrowUp-N8lcMBug.js";import"./Check-Cjs4C9GE.js";import"./Grid01-DRBx9FRw.js";import"./List-BzhQuBp2.js";import"./tooltip-CzsT_Xmu.js";import"./index-DziKeC8s.js";import"./table-Dr33PlEJ.js";import"./SearchMd-DyDznS8C.js";import"./input-DVv1wKLp.js";import"./localstorage-keys-D2dx16dH.js";import"./useQuery-DWLTdDjg.js";import"./useMutation-CqJLXgOK.js";import"./ChevronRight-O5hZNhHU.js";import"./card-CRGkE-QK.js";import"./Container-BADgIox6.js";import"./use-view-mode-BadETRuZ.js";import"./use-mobile-CzcHKmhL.js";import"./use-connection-Dlr-wAwU.js";import"./avatar-VPsqzp0K.js";import"./differenceInSeconds-NQ4PDo0z.js";function Me(e,r){switch(r.type){case"delete":return{mode:"deleting",virtualMcp:r.virtualMcp};case"close":return{mode:"idle"}}}function Be(){const e=ie.c(65),{org:r}=ae(),n=le();let b;e[0]!==r.slug?(b={namespace:r.slug,resource:"agents"},e[0]=r.slug,e[1]=b):b=e[1];const s=je(b),x=ye(s);let y;e[2]===Symbol.for("react.memo_cache_sentinel")?(y={navigateOnCreate:!0},e[2]=y):y=e[2];const{createVirtualMCP:T,isCreating:w}=Ce(y),U=we();let N;e[3]===Symbol.for("react.memo_cache_sentinel")?(N={mode:"idle"},e[3]=N):N=e[3];const[i,D]=X.useReducer(Me,N);let S;e[4]!==U||e[5]!==i.mode||e[6]!==i.virtualMcp?(S=async()=>{if(i.mode!=="deleting")return;const o=i.virtualMcp.id;if(D({type:"close"}),!(!o||be(o)))try{await U.delete.mutateAsync(o)}catch{}},e[4]=U,e[5]=i.mode,e[6]=i.virtualMcp,e[7]=S):S=e[7];const L=S;let _,k,v,A,I;e[8]===Symbol.for("react.memo_cache_sentinel")?(_={id:"title",header:"Name",render:Fe,cellClassName:"w-48 min-w-0 shrink-0",sortable:!0},k={id:"description",header:"Description",render:He,cellClassName:"flex-1 min-w-0",wrap:!0,sortable:!0},v={id:"connections",header:"Connections",render:Ue,cellClassName:"w-28 shrink-0"},A={id:"updated_by",header:"Updated by",render:Te,cellClassName:"w-32 shrink-0",sortable:!0},I={id:"updated_at",header:"Updated",render:Re,cellClassName:"max-w-24 w-24 shrink-0",sortable:!0},e[8]=_,e[9]=k,e[10]=v,e[11]=A,e[12]=I):(_=e[8],k=e[9],v=e[10],A=e[11],I=e[12]);let P;e[13]!==n||e[14]!==r.slug?(P=[_,k,v,A,I,{id:"actions",header:"",render:o=>t.jsxs(Y,{children:[t.jsx(Z,{asChild:!0,children:t.jsx(q,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",onClick:Ve,children:t.jsx(te,{size:20})})}),t.jsxs(ee,{align:"end",onClick:Ke,children:[t.jsxs(R,{onClick:a=>{a.stopPropagation(),n({to:"/$org/$project/agents/$agentId",params:{org:r.slug,project:V,agentId:o.id}})},children:[t.jsx(se,{size:16}),"Open"]}),t.jsxs(R,{variant:"destructive",onClick:a=>{a.stopPropagation(),D({type:"delete",virtualMcp:o})},children:[t.jsx(oe,{size:16}),"Delete"]})]})]}),cellClassName:"w-12 shrink-0"}],e[13]=n,e[14]=r.slug,e[15]=P):P=e[15];const H=P,F=w?"Creating...":"Create Agent";let $;e[16]!==T||e[17]!==w||e[18]!==F?($=t.jsx(q,{onClick:T,size:"sm",className:"h-7 px-3 rounded-lg text-sm font-medium",disabled:w,children:F}),e[16]=T,e[17]=w,e[18]=F,e[19]=$):$=e[19];const G=$,J=i.mode==="deleting";let z;e[20]===Symbol.for("react.memo_cache_sentinel")?(z=o=>!o&&D({type:"close"}),e[20]=z):z=e[20];let M;e[21]===Symbol.for("react.memo_cache_sentinel")?(M=t.jsx(Ne,{children:"Delete Agent?"}),e[21]=M):M=e[21];const W=i.mode==="deleting"&&i.virtualMcp.title;let l;e[22]!==W?(l=t.jsxs(De,{children:[M,t.jsxs(Se,{children:["This action cannot be undone. This will permanently delete"," ",t.jsx("span",{className:"font-medium text-foreground",children:W}),"."]})]}),e[22]=W,e[23]=l):l=e[23];let B;e[24]===Symbol.for("react.memo_cache_sentinel")?(B=t.jsx(_e,{children:"Cancel"}),e[24]=B):B=e[24];let c;e[25]!==L?(c=t.jsxs(ke,{children:[B,t.jsx(ve,{onClick:L,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete"})]}),e[25]=L,e[26]=c):c=e[26];let d;e[27]!==l||e[28]!==c?(d=t.jsxs(Ae,{children:[l,c]}),e[27]=l,e[28]=c,e[29]=d):d=e[29];let m;e[30]!==J||e[31]!==d?(m=t.jsx(Ie,{open:J,onOpenChange:z,children:d}),e[30]=J,e[31]=d,e[32]=m):m=e[32];let O;e[33]===Symbol.for("react.memo_cache_sentinel")?(O=t.jsx(j.Header.Left,{children:t.jsx(pe,{children:t.jsx(ue,{children:t.jsx(ge,{children:t.jsx(he,{children:"Agents"})})})})}),e[33]=O):O=e[33];let E;e[34]===Symbol.for("react.memo_cache_sentinel")?(E=[{id:"title",label:"Name"},{id:"description",label:"Description"},{id:"updated_by",label:"Updated by"},{id:"updated_at",label:"Updated"}],e[34]=E):E=e[34];let p;e[35]!==s.handleSort||e[36]!==s.setViewMode||e[37]!==s.sortDirection||e[38]!==s.sortKey||e[39]!==s.viewMode?(p=t.jsx(ce,{viewMode:s.viewMode,onViewModeChange:s.setViewMode,sortKey:s.sortKey,sortDirection:s.sortDirection,onSort:s.handleSort,sortOptions:E}),e[35]=s.handleSort,e[36]=s.setViewMode,e[37]=s.sortDirection,e[38]=s.sortKey,e[39]=s.viewMode,e[40]=p):p=e[40];let u;e[41]!==G||e[42]!==p?(u=t.jsxs(j.Header,{children:[O,t.jsxs(j.Header.Right,{children:[p,G]})]}),e[41]=G,e[42]=p,e[43]=u):u=e[43];let g;e[44]!==s?(g=o=>{o.key==="Escape"&&(s.setSearch(""),o.target.blur())},e[44]=s,e[45]=g):g=e[45];let h;e[46]!==s.search||e[47]!==s.setSearch||e[48]!==g?(h=t.jsx(me,{value:s.search,onChange:s.setSearch,placeholder:"Search for an agent...",onKeyDown:g}),e[46]=s.search,e[47]=s.setSearch,e[48]=g,e[49]=h):h=e[49];let f;e[50]!==H||e[51]!==s.handleSort||e[52]!==s.search||e[53]!==s.sortDirection||e[54]!==s.sortKey||e[55]!==s.viewMode||e[56]!==n||e[57]!==r.slug||e[58]!==x?(f=t.jsx(j.Content,{children:s.viewMode==="cards"?t.jsx("div",{className:"flex-1 overflow-auto p-5",children:x.length===0?t.jsx(Q,{image:t.jsx(C,{size:36,className:"text-muted-foreground"}),title:s.search?"No agents found":"No agents yet",description:s.search?`No agents match "${s.search}"`:"Create an agent to aggregate tools from multiple Connections."}):t.jsx("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] gap-4",children:x.map(o=>t.jsx(fe,{connection:{id:o.id??"",title:o.title,description:o.description,icon:o.icon,status:o.status},fallbackIcon:t.jsx(C,{}),onClick:()=>n({to:"/$org/$project/agents/$agentId",params:{org:r.slug,project:V,agentId:o.id}}),footer:t.jsx("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:t.jsxs("span",{children:[o.connections.length," connection",o.connections.length!==1?"s":""]})}),headerActions:t.jsxs(Y,{children:[t.jsx(Z,{asChild:!0,children:t.jsx(q,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",onClick:Ee,children:t.jsx(te,{size:20})})}),t.jsxs(ee,{align:"end",onClick:Oe,children:[t.jsxs(R,{onClick:a=>{a.stopPropagation(),n({to:"/$org/$project/agents/$agentId",params:{org:r.slug,project:V,agentId:o.id}})},children:[t.jsx(se,{size:16}),"Open"]}),t.jsxs(R,{variant:"destructive",onClick:a=>{a.stopPropagation(),D({type:"delete",virtualMcp:o})},children:[t.jsx(oe,{size:16}),"Delete"]})]})]})},o.id??"default"))})}):t.jsx("div",{className:"h-full flex flex-col overflow-hidden",children:t.jsx(de,{columns:H,data:x,isLoading:!1,sortKey:s.sortKey,sortDirection:s.sortDirection,onSort:s.handleSort,onRowClick:o=>n({to:"/$org/$project/agents/$agentId",params:{org:r.slug,project:V,agentId:o.id}}),emptyState:s.search?t.jsx(Q,{image:t.jsx(C,{size:36,className:"text-muted-foreground"}),title:"No agents found",description:`No agents match "${s.search}"`}):t.jsx(Q,{image:t.jsx(C,{size:36,className:"text-muted-foreground"}),title:"No agents yet",description:"Create an agent to aggregate tools from multiple Connections."})})})}),e[50]=H,e[51]=s.handleSort,e[52]=s.search,e[53]=s.sortDirection,e[54]=s.sortKey,e[55]=s.viewMode,e[56]=n,e[57]=r.slug,e[58]=x,e[59]=f):f=e[59];let K;return e[60]!==m||e[61]!==u||e[62]!==h||e[63]!==f?(K=t.jsxs(j,{children:[m,u,h,f]}),e[60]=m,e[61]=u,e[62]=h,e[63]=f,e[64]=K):K=e[64],K}function Oe(e){return e.stopPropagation()}function Ee(e){return e.stopPropagation()}function Ke(e){return e.stopPropagation()}function Ve(e){return e.stopPropagation()}function Re(e){return t.jsx("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:e.updated_at?ze(new Date(e.updated_at)):"—"})}function Te(e){return t.jsx($e,{id:e.updated_by??e.created_by,size:"3xs"})}function Ue(e){return t.jsx(X.Suspense,{fallback:t.jsx(re.Fallback,{}),children:t.jsx(re,{connectionIds:e.connections.map(Le),maxVisibleIcons:2})})}function Le(e){return e.connection_id}function He(e){return t.jsx("span",{className:"text-sm text-foreground line-clamp-2",children:e.description||"—"})}function Fe(e){return t.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[t.jsx(xe,{icon:e.icon,name:e.title,size:"sm",className:"shrink-0 shadow-sm",fallbackIcon:t.jsx(C,{size:16})}),t.jsx("span",{className:"text-sm font-medium text-foreground truncate",children:e.title})]})}function Mt(){const e=ie.c(1);let r;return e[0]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx(ne,{children:t.jsx(X.Suspense,{fallback:t.jsx("div",{className:"flex h-full items-center justify-center",children:t.jsx(Pe,{size:32,className:"animate-spin text-muted-foreground"})}),children:t.jsx(Be,{})})}),e[0]=r):r=e[0],r}export{Mt as default};