@decocms/mesh 2.135.0 → 2.135.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.
- package/dist/client/assets/{AlertCircle-BqSf9XUV.js → AlertCircle-C0eftc-S.js} +1 -1
- package/dist/client/assets/{AlignLeft-fmMf4Dhk.js → AlignLeft-y_Ps49tB.js} +1 -1
- package/dist/client/assets/{ArrowDown-C1XwJGei.js → ArrowDown-BVK-2NZv.js} +1 -1
- package/dist/client/assets/{ArrowLeft-v0wYt8Zz.js → ArrowLeft-BNX_fMaj.js} +1 -1
- package/dist/client/assets/{ArrowUp-D96x2aXm.js → ArrowUp-N8lcMBug.js} +1 -1
- package/dist/client/assets/{Check-CBQI4sX_.js → Check-Cjs4C9GE.js} +1 -1
- package/dist/client/assets/{CheckCircle-c8wiOGE1.js → CheckCircle-KfoOm4QY.js} +1 -1
- package/dist/client/assets/{CheckDone01-BTaEYg_h.js → CheckDone01-BesDn4jt.js} +1 -1
- package/dist/client/assets/{CheckVerified02-CPJrheMw.js → CheckVerified02-dNCcvCnV.js} +1 -1
- package/dist/client/assets/{ChevronDown-sLr8XVsl.js → ChevronDown-jKZz68gN.js} +1 -1
- package/dist/client/assets/{ChevronLeft-Bb-Z1INZ.js → ChevronLeft-DrJ63fdN.js} +1 -1
- package/dist/client/assets/{ChevronRight-DvHc-b9M.js → ChevronRight-O5hZNhHU.js} +1 -1
- package/dist/client/assets/{Clock-CHIf9oFX.js → Clock-CZrEpwOM.js} +1 -1
- package/dist/client/assets/{Code01-dJCW2bE8.js → Code01-DVgdcTZ1.js} +1 -1
- package/dist/client/assets/{Container-B6Xs6_xK.js → Container-BADgIox6.js} +1 -1
- package/dist/client/assets/{Copy01-DZUQRIVw.js → Copy01-CwZDv92A.js} +1 -1
- package/dist/client/assets/{Dataflow03-C15CIhqP.js → Dataflow03-BD9MOeSH.js} +1 -1
- package/dist/client/assets/{DotsHorizontal-BTto-v_2.js → DotsHorizontal-M2BFmBhE.js} +1 -1
- package/dist/client/assets/{DotsVertical-CJ3pBFjL.js → DotsVertical-B7FmF1Xu.js} +1 -1
- package/dist/client/assets/{Download01-BOSik_M0.js → Download01-9ocXQLzr.js} +1 -1
- package/dist/client/assets/{Edit01-Dm0PZjiv.js → Edit01-kvm_TgXf.js} +1 -1
- package/dist/client/assets/{Edit05-DhF5NlD_.js → Edit05-D4Vt7tOt.js} +1 -1
- package/dist/client/assets/{Eye-BR_9-9sx.js → Eye-BCmEvczH.js} +1 -1
- package/dist/client/assets/{File02-DAE7GGwr.js → File02-CK_RNTh6.js} +1 -1
- package/dist/client/assets/{File06-DNepDitQ.js → File06-B3E-bjor.js} +1 -1
- package/dist/client/assets/{FilterLines-CQm34GP3.js → FilterLines-DAyCv-Xk.js} +1 -1
- package/dist/client/assets/{Globe01-BfbxrBLS.js → Globe01-jKd57I4x.js} +1 -1
- package/dist/client/assets/{Globe02-DSMumXCe.js → Globe02-D-yCMf5N.js} +1 -1
- package/dist/client/assets/{Grid01-DxL3VpUb.js → Grid01-DRBx9FRw.js} +1 -1
- package/dist/client/assets/{Hash02-CFuGdZAM.js → Hash02-CyfLltcT.js} +1 -1
- package/dist/client/assets/{Home02-BVRQCIR4.js → Home02-BcZSV_S0.js} +1 -1
- package/dist/client/assets/{Image01-CHnBumwc.js → Image01-Dg_KnZBd.js} +1 -1
- package/dist/client/assets/{Inbox01-ImXIGZnT.js → Inbox01-nkL2-2Zq.js} +1 -1
- package/dist/client/assets/{InfoCircle-C3KOURux.js → InfoCircle-Ipgqrfv0.js} +1 -1
- package/dist/client/assets/{Key01-gRJDeefs.js → Key01-CyP1-GBg.js} +1 -1
- package/dist/client/assets/{LayersTwo01-D_3HSgdj.js → LayersTwo01-rKs-Uww3.js} +1 -1
- package/dist/client/assets/{LayoutLeft-D7CckYm4.js → LayoutLeft-BH3urRkN.js} +1 -1
- package/dist/client/assets/{Link01-dup1fxbM.js → Link01-D-1AbdDy.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DSo4qVUo.js → LinkExternal01-DIMSPk19.js} +1 -1
- package/dist/client/assets/{List-C6WR2hvg.js → List-BzhQuBp2.js} +1 -1
- package/dist/client/assets/{Loading01-9Lg_Mx7W.js → Loading01-BSgMOGt8.js} +1 -1
- package/dist/client/assets/{Lock01-D6q_Pfp1.js → Lock01-T7BR0zuk.js} +1 -1
- package/dist/client/assets/{Play-BGC0DAwr.js → Play-CBKoaI1n.js} +1 -1
- package/dist/client/assets/{Plus-BnMd-Nlg.js → Plus-kcfCg7FH.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-CzWuABhj.js → RefreshCcw01-DiAOUquJ.js} +1 -1
- package/dist/client/assets/{Save01-CPtH6rzJ.js → Save01-CgyWcG00.js} +1 -1
- package/dist/client/assets/{SearchMd-Br2lRaPk.js → SearchMd-DyDznS8C.js} +1 -1
- package/dist/client/assets/{Settings01-CjytruXR.js → Settings01-B90Jx8ZC.js} +1 -1
- package/dist/client/assets/{Shield01-XEBn-es0.js → Shield01-B2Y9HIu6.js} +1 -1
- package/dist/client/assets/{Terminal-CWZ1oaiF.js → Terminal-BxQK5nsd.js} +1 -1
- package/dist/client/assets/{Trash01-DTIwE-5T.js → Trash01-Dhrt1Goe.js} +1 -1
- package/dist/client/assets/{Upload01-BiL8UuQ_.js → Upload01-Dja0ZgIT.js} +1 -1
- package/dist/client/assets/{Users03-D9nwvJXd.js → Users03-DHATZiFL.js} +1 -1
- package/dist/client/assets/{X-B_qRWJ2C.js → X-BpJJDPzv.js} +1 -1
- package/dist/client/assets/{XCircle-B4yxlakR.js → XCircle-D52fnGO6.js} +1 -1
- package/dist/client/assets/{XClose-ChV_2xLJ.js → XClose-DcdK3w1e.js} +1 -1
- package/dist/client/assets/{Zap-DywL0ofa.js → Zap-CP5UH1Dw.js} +1 -1
- package/dist/client/assets/{agent-connections-preview-CR5wYkAd.js → agent-connections-preview-v4ndb6aJ.js} +1 -1
- package/dist/client/assets/{agent-detail-B0zz3Unf.js → agent-detail-DyOlL9jH.js} +1 -1
- package/dist/client/assets/{agents-C11f5XN0.js → agents-CB6IRof4.js} +1 -1
- package/dist/client/assets/{alert-dialog-D90wrdGx.js → alert-dialog-PSmHhGOE.js} +1 -1
- package/dist/client/assets/{auth-catchall-D2-i9TBI.js → auth-catchall-CplMsxXE.js} +1 -1
- package/dist/client/assets/{avatar-D4ALUDCI.js → avatar-VPsqzp0K.js} +1 -1
- package/dist/client/assets/{badge-DuS2OMla.js → badge-DSAomO1_.js} +1 -1
- package/dist/client/assets/{binder-BCMoHYJm.js → binder-8_Oel13A.js} +1 -1
- package/dist/client/assets/{breadcrumb-g5L8PoZQ.js → breadcrumb-Dxn3nF83.js} +1 -1
- package/dist/client/assets/{card-Cj-GkUHD.js → card-CRGkE-QK.js} +1 -1
- package/dist/client/assets/{chart-Bmp1PhEI.js → chart-B-ayLZ8-.js} +1 -1
- package/dist/client/assets/{checkbox-CKtularS.js → checkbox-Dj6Qb3KC.js} +1 -1
- package/dist/client/assets/{circle-alert-CrasxNEk.js → circle-alert-DcuI5GGM.js} +1 -1
- package/dist/client/assets/{collapsible-Dz2sA23f.js → collapsible-D2Mpu85K.js} +1 -1
- package/dist/client/assets/{collection-detail-B0kCQWSA.js → collection-detail-FNWcZVfu.js} +1 -1
- package/dist/client/assets/{collection-search-Dslk4ok0.js → collection-search-FSS_Lkwz.js} +1 -1
- package/dist/client/assets/{collection-tab-Bjsr3KyB.js → collection-tab-FKeWJS1r.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-1X3tw2a2.js → collection-table-wrapper-C3jcR2VW.js} +1 -1
- package/dist/client/assets/{collection-tabs-eMWLSkiq.js → collection-tabs-CK4hfCPZ.js} +1 -1
- package/dist/client/assets/{command-RQQRkz7x.js → command-BK3ZFocj.js} +1 -1
- package/dist/client/assets/{connect-DEIJWaRW.js → connect-D2cFEIR8.js} +1 -1
- package/dist/client/assets/{connection-card-M2mu32Xr.js → connection-card-GLkE1rwd.js} +1 -1
- package/dist/client/assets/{connection-detail-CyhxKizj.js → connection-detail-PegJ7rZR.js} +1 -1
- package/dist/client/assets/{connections-RcVdNIqa.js → connections-C18lG_Ow.js} +1 -1
- package/dist/client/assets/{constants-CvFlNMMf.js → constants-3MhIA0pZ.js} +1 -1
- package/dist/client/assets/constants-Csevqii0.js +1 -0
- package/dist/client/assets/{create-organization-dialog-Cy9g6fXy.js → create-organization-dialog-CR8t2T4R.js} +1 -1
- package/dist/client/assets/{create-project-dialog-BokLXtCa.js → create-project-dialog-DFaC5_HT.js} +1 -1
- package/dist/client/assets/{danger-BRBu-XbG.js → danger-BEh_Y1ce.js} +1 -1
- package/dist/client/assets/{danger-zone-CW-YKRlc.js → danger-zone-CpwKIZ0p.js} +1 -1
- package/dist/client/assets/{decopilot-events-Bt8Q6ljY.js → decopilot-events-CA9aFPSQ.js} +1 -1
- package/dist/client/assets/{dependencies-EgZz5h4q.js → dependencies-mwSdsJgD.js} +1 -1
- package/dist/client/assets/{dialog-DXvsnaeO.js → dialog-CPWJMuHX.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CgkGkmVE.js → dropdown-menu-DW1GDWfN.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-Bh-Sy3yI.js → dynamic-plugin-layout-CY4G5d8i.js} +1 -1
- package/dist/client/assets/{editable-task-title-B-3SGsGo.js → editable-task-title-D4gyoQ4x.js} +1 -1
- package/dist/client/assets/{empty-state-K_49Yi3c.js → empty-state-boxcABsi.js} +1 -1
- package/dist/client/assets/{env-vars-editor-DtCYaIFM.js → env-vars-editor-x5YLFI-P.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DuIP9X1x.js → extract-connection-data-D40JrSD8.js} +1 -1
- package/dist/client/assets/{file-browser-D6y0-s-B.js → file-browser-CrcClgQC.js} +2 -2
- package/dist/client/assets/{form-BMyUyHR8.js → form-7Q-FsNtX.js} +1 -1
- package/dist/client/assets/{general-DPne5Rst.js → general-C0buekt8.js} +1 -1
- package/dist/client/assets/{grid-view-DWY5vx7E.js → grid-view-J96VhXfb.js} +1 -1
- package/dist/client/assets/{home-BLbBKv2q.js → home-H46nCwT5.js} +1 -1
- package/dist/client/assets/{icon-picker-XNuq6Ojb.js → icon-picker-DPVWLIZ3.js} +1 -1
- package/dist/client/assets/{index-CgikKIzX.js → index-3zbyfLqi.js} +3 -3
- package/dist/client/assets/{index-YSA_3gRo.js → index-CW624IAb.js} +3 -3
- package/dist/client/assets/{index-BlLYz5FA.js → index-CsXxowFD.js} +1 -1
- package/dist/client/assets/{index-ChgCwqm9.js → index-D7M37zt-.js} +1 -1
- package/dist/client/assets/{index-Bzupbb1x.js → index-DFlYm7QG.js} +1 -1
- package/dist/client/assets/{index-CpowEWO4.js → index-DZgOYNf-.js} +1 -1
- package/dist/client/assets/{index-BVkROdsW.js → index-DqzqEzLf.js} +1 -1
- package/dist/client/assets/{index-Bk2D_7VR.js → index-DziKeC8s.js} +1 -1
- package/dist/client/assets/{index-BVNGR9tO.js → index-ZgdunwGI.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-DsXqsvOO.js → infiniteQueryObserver-DkOiuhUg.js} +1 -1
- package/dist/client/assets/{input-BT1GzEWi.js → input-DVv1wKLp.js} +1 -1
- package/dist/client/assets/{integration-icon-B4kJo2_s.js → integration-icon-_0Y5dukY.js} +1 -1
- package/dist/client/assets/{label-C45a6iTA.js → label-CfzCa7Vm.js} +1 -1
- package/dist/client/assets/{layout-i-b38NBH.js → layout-CFi42XXk.js} +1 -1
- package/dist/client/assets/{layout-8RHk-XUu.js → layout-DemCWqB_.js} +1 -1
- package/dist/client/assets/{localstorage-keys-DSrv9tDi.js → localstorage-keys-D2dx16dH.js} +1 -1
- package/dist/client/assets/{login-CVyMi6pm.js → login-BXUbt1kV.js} +1 -1
- package/dist/client/assets/{markdown-D5PO6M9Q.js → markdown-89WWPNXO.js} +1 -1
- package/dist/client/assets/mcp-app-renderer-MJ3LmhBP.js +11 -0
- package/dist/client/assets/{mcp-oauth-BlOxWyfu.js → mcp-oauth-CPAKRpWT.js} +1 -1
- package/dist/client/assets/{mcp-server-card-VOiv-alx.js → mcp-server-card-gl2xF4cu.js} +1 -1
- package/dist/client/assets/{mcp-server-detail-C1SyJ2Ed.js → mcp-server-detail-CzmUyYsJ.js} +2 -2
- package/dist/client/assets/{members-Lw-_oafM.js → members-BjMeazP1.js} +1 -1
- package/dist/client/assets/{monaco-editor-Dr7dUeu1.js → monaco-editor-Qwuf1rYM.js} +1 -1
- package/dist/client/assets/{monitoring-ByAenRo_.js → monitoring-C-vcUHdF.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-edit-Bzo9Gn9E.js → monitoring-dashboard-edit-DdMgOlQK.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-view-gYXt6fDh.js → monitoring-dashboard-view-D7MwbzDH.js} +1 -1
- package/dist/client/assets/{oauth-callback-sQ2SwOuh.js → oauth-callback-BnBZDVD6.js} +1 -1
- package/dist/client/assets/{page-DbCpTdbi.js → page-BNQcXJwH.js} +1 -1
- package/dist/client/assets/{page-CznSm6bI.js → page-DvC0ZQe5.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-COcpG8Q-.js → plugin-empty-state-BuLjcm9B.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-C8aP3uOY.js → plugin-empty-state-DfdPh9Ts.js} +1 -1
- package/dist/client/assets/{plugin-header-DWxvwZb6.js → plugin-header-Bi-8qclQ.js} +1 -1
- package/dist/client/assets/{plugin-header-crfuDJWj.js → plugin-header-CKLaOHoT.js} +1 -1
- package/dist/client/assets/plugins-cGh_gky2.js +1 -0
- package/dist/client/assets/{popover-ew-AFjK-.js → popover-7xIJyxqf.js} +1 -1
- package/dist/client/assets/project-app-view-C_PL72tZ.js +1 -0
- package/dist/client/assets/{project-layout-Ns_WJXXt.js → project-layout-DIwsntjO.js} +1 -1
- package/dist/client/assets/{project-plugins-CF5_VX1i.js → project-plugins-B1sb2cJf.js} +1 -1
- package/dist/client/assets/{projects-list-8MTtLmHN.js → projects-list-D0DH8k1c.js} +1 -1
- package/dist/client/assets/{readme-viewer-BJA2EnoQ.js → readme-viewer-BvJA0DXw.js} +1 -1
- package/dist/client/assets/{registry-layout-DOBt_uIJ.js → registry-layout-BJCo3ZwE.js} +1 -1
- package/dist/client/assets/{registry-utils-BapNTecL.js → registry-utils-Cx5oa6Ne.js} +1 -1
- package/dist/client/assets/{reports-layout-DCjyOG8T.js → reports-layout-DYTNa8h-.js} +1 -1
- package/dist/client/assets/{reset-password-Bf0C1T_u.js → reset-password-DFzqJN6I.js} +1 -1
- package/dist/client/assets/{resizable-DasgSTKU.js → resizable-PA9Y3YAt.js} +1 -1
- package/dist/client/assets/{save-actions-vRwzyds-.js → save-actions-CXaB5WYr.js} +1 -1
- package/dist/client/assets/{scroll-area-B1PFdc0L.js → scroll-area-DoXCMB9j.js} +1 -1
- package/dist/client/assets/{select-B8htoZV8.js → select-DaTaxi5W.js} +1 -1
- package/dist/client/assets/{shell-layout-DL42jtyU.js → shell-layout-BqF7J7La.js} +2 -2
- package/dist/client/assets/{sidebar-settings-D4yFK0ER.js → sidebar-settings-BZwWXZuX.js} +1 -1
- package/dist/client/assets/{skeleton-DO02PARZ.js → skeleton-C9OYLAME.js} +1 -1
- package/dist/client/assets/{spinner-BpG7RgTa.js → spinner-RGw-eBKN.js} +1 -1
- package/dist/client/assets/{store-invite-BFsXYhOH.js → store-invite-Fvga4enp.js} +1 -1
- package/dist/client/assets/{switch-Ci3hf_qU.js → switch-CKTW0M5S.js} +1 -1
- package/dist/client/assets/{table-7t3Ngqct.js → table-Dr33PlEJ.js} +1 -1
- package/dist/client/assets/{tabs-CfY-0viT.js → tabs-t9dEapgX.js} +1 -1
- package/dist/client/assets/tasks-OJAbxkK1.js +1 -0
- package/dist/client/assets/{tasks-panel-JfkvqYp-.js → tasks-panel-DLy55FSi.js} +1 -1
- package/dist/client/assets/{textarea-C9UUVIil.js → textarea-CNTbi5Nk.js} +1 -1
- package/dist/client/assets/{time-range-picker-0Iclb7jG.js → time-range-picker-Do8ix4-A.js} +1 -1
- package/dist/client/assets/{toggle-group-BVdBhpTO.js → toggle-group-Ck1YCESf.js} +1 -1
- package/dist/client/assets/{tools-list-DNBJLnHb.js → tools-list-DLfR0anP.js} +1 -1
- package/dist/client/assets/{tooltip-iSvWdfhX.js → tooltip-CzsT_Xmu.js} +1 -1
- package/dist/client/assets/{topbar-portal-TVMhcJUX.js → topbar-portal-pZDSuDEC.js} +1 -1
- package/dist/client/assets/{types-DA9O3-4Z.js → types-BFBQ7LBo.js} +1 -1
- package/dist/client/assets/{use-binding-BrV6OHbU.js → use-binding-Cz4OU82g.js} +1 -1
- package/dist/client/assets/{use-connection-0uAZ0JSW.js → use-connection-Dlr-wAwU.js} +1 -1
- package/dist/client/assets/{use-copy-B9seMJvp.js → use-copy-C0vtJ5Ye.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DYC0dnj3.js → use-create-virtual-mcp-CsNENE7l.js} +1 -1
- package/dist/client/assets/{use-install-from-registry-CuIrTAAm.js → use-install-from-registry-C_roXw8y.js} +1 -1
- package/dist/client/assets/{use-list-state-BywHZDup.js → use-list-state-DUq5hUJc.js} +1 -1
- package/dist/client/assets/{use-llm-lqRff0qp.js → use-llm-B6AzV9Iw.js} +1 -1
- package/dist/client/assets/{use-mcp-resources-CgAaDxBc.js → use-mcp-resources-DjDOJ-nS.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BN8bfZn3.js → use-mcp-tools-WZlm0cnW.js} +1 -1
- package/dist/client/assets/{use-members-BnEfwka5.js → use-members-BLjJfltI.js} +1 -1
- package/dist/client/assets/{use-mobile-CePuocbs.js → use-mobile-CzcHKmhL.js} +1 -1
- package/dist/client/assets/{use-project-BCpZSYEH.js → use-project-CIyZUlkd.js} +1 -1
- package/dist/client/assets/{use-settings-modal-BhxNgsgy.js → use-settings-modal-BU5fs4m_.js} +1 -1
- package/dist/client/assets/{use-view-mode-C4bMLQky.js → use-view-mode-BadETRuZ.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-XCW3W4C9.js → use-virtual-mcp-BjGr5L6n.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-CGGEgi5q.js +1 -0
- package/dist/client/assets/{useMutation-CspL2qBT.js → useMutation-CqJLXgOK.js} +1 -1
- package/dist/client/assets/useQuery-DWLTdDjg.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-YGfVGowO.js +1 -0
- package/dist/client/assets/{user-BHCtEUxl.js → user-vKqDbtP6.js} +1 -1
- package/dist/client/assets/{workflow-DiR4gKq6.js → workflow--wyybZpA.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/migrate.js +2 -2
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/constants-Cc2ACrvf.js +0 -1
- package/dist/client/assets/mcp-app-renderer-Bzzuvi2c.js +0 -11
- package/dist/client/assets/plugins-BhX8dVGK.js +0 -1
- package/dist/client/assets/project-app-view-XMflyzaA.js +0 -1
- package/dist/client/assets/tasks-B7PtG_GW.js +0 -1
- package/dist/client/assets/useInfiniteQuery-Bp_AF-J9.js +0 -1
- package/dist/client/assets/useQuery-BEiGk_96.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Bqpp4FtC.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -1212,7 +1212,7 @@ data:
|
|
|
1212
1212
|
`;if(J)G+=`id: ${J}
|
|
1213
1213
|
`;return G+=`data: ${JSON.stringify(X)}
|
|
1214
1214
|
|
|
1215
|
-
`,Y.enqueue(Q.encode(G)),!0}catch{return!1}}handleUnsupportedRequest(){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32000,message:"Method not allowed."},id:null}),{status:405,headers:{Allow:"GET, POST, DELETE","Content-Type":"application/json"}})}async handlePostRequest(Y,Q){try{let X=Y.headers.get("accept");if(!X?.includes("application/json")||!X.includes("text/event-stream"))return this.createJsonErrorResponse(406,-32000,"Not Acceptable: Client must accept both application/json and text/event-stream");let J=Y.headers.get("content-type");if(!J||!J.includes("application/json"))return this.createJsonErrorResponse(415,-32000,"Unsupported Media Type: Content-Type must be application/json");let G={headers:Object.fromEntries(Y.headers.entries())},K;if(Q?.parsedBody!==void 0)K=Q.parsedBody;else try{K=await Y.json()}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON")}let W;try{if(Array.isArray(K))W=K.map((L)=>bG.parse(L));else W=[bG.parse(K)]}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON-RPC message")}let Z=W.some(b41);if(Z){if(this._initialized&&this.sessionId!==void 0)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Server already initialized");if(W.length>1)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Only one initialization request is allowed");if(this.sessionId=this.sessionIdGenerator?.(),this._initialized=!0,this.sessionId&&this._onsessioninitialized)await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!Z){let L=this.validateSession(Y);if(L)return L;let w=this.validateProtocolVersion(Y);if(w)return w}if(!W.some(TK)){for(let L of W)this.onmessage?.(L,{authInfo:Q?.authInfo,requestInfo:G});return new Response(null,{status:202})}let $=crypto.randomUUID(),F=W.find((L)=>b41(L)),V=F?F.params.protocolVersion:Y.headers.get("mcp-protocol-version")??P21;if(this._enableJsonResponse)return new Promise((L)=>{this._streamMapping.set($,{resolveJson:L,cleanup:()=>{this._streamMapping.delete($)}});for(let w of W)if(TK(w))this._requestToStreamMapping.set(w.id,$);for(let w of W)this.onmessage?.(w,{authInfo:Q?.authInfo,requestInfo:G})});let B=new TextEncoder,U,z=new ReadableStream({start:(L)=>{U=L},cancel:()=>{this._streamMapping.delete($)}}),D={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(this.sessionId!==void 0)D["mcp-session-id"]=this.sessionId;for(let L of W)if(TK(L))this._streamMapping.set($,{controller:U,encoder:B,cleanup:()=>{this._streamMapping.delete($);try{U.close()}catch{}}}),this._requestToStreamMapping.set(L.id,$);await this.writePrimingEvent(U,B,$,V);for(let L of W){let w,E;if(TK(L)&&this._eventStore&&V>="2025-11-25")w=()=>{this.closeSSEStream(L.id)},E=()=>{this.closeStandaloneSSEStream()};this.onmessage?.(L,{authInfo:Q?.authInfo,requestInfo:G,closeSSEStream:w,closeStandaloneSSEStream:E})}return new Response(z,{status:200,headers:D})}catch(X){return this.onerror?.(X),this.createJsonErrorResponse(400,-32700,"Parse error",{data:String(X)})}}async handleDeleteRequest(Y){let Q=this.validateSession(Y);if(Q)return Q;let X=this.validateProtocolVersion(Y);if(X)return X;return await Promise.resolve(this._onsessionclosed?.(this.sessionId)),await this.close(),new Response(null,{status:200})}validateSession(Y){if(this.sessionIdGenerator===void 0)return;if(!this._initialized)return this.createJsonErrorResponse(400,-32000,"Bad Request: Server not initialized");let Q=Y.headers.get("mcp-session-id");if(!Q)return this.createJsonErrorResponse(400,-32000,"Bad Request: Mcp-Session-Id header is required");if(Q!==this.sessionId)return this.createJsonErrorResponse(404,-32001,"Session not found");return}validateProtocolVersion(Y){let Q=Y.headers.get("mcp-protocol-version");if(Q!==null&&!DU.includes(Q))return this.createJsonErrorResponse(400,-32000,`Bad Request: Unsupported protocol version: ${Q} (supported versions: ${DU.join(", ")})`);return}async close(){this._streamMapping.forEach(({cleanup:Y})=>{Y()}),this._streamMapping.clear(),this._requestResponseMap.clear(),this.onclose?.()}closeSSEStream(Y){let Q=this._requestToStreamMapping.get(Y);if(!Q)return;let X=this._streamMapping.get(Q);if(X)X.cleanup()}closeStandaloneSSEStream(){let Y=this._streamMapping.get(this._standaloneSseStreamId);if(Y)Y.cleanup()}async send(Y,Q){let X=Q?.relatedRequestId;if(YZ(Y)||xN(Y))X=Y.id;if(X===void 0){if(YZ(Y)||xN(Y))throw Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");let K;if(this._eventStore)K=await this._eventStore.storeEvent(this._standaloneSseStreamId,Y);let W=this._streamMapping.get(this._standaloneSseStreamId);if(W===void 0)return;if(W.controller&&W.encoder)this.writeSSEEvent(W.controller,W.encoder,Y,K);return}let J=this._requestToStreamMapping.get(X);if(!J)throw Error(`No connection established for request ID: ${String(X)}`);let G=this._streamMapping.get(J);if(!this._enableJsonResponse&&G?.controller&&G?.encoder){let K;if(this._eventStore)K=await this._eventStore.storeEvent(J,Y);this.writeSSEEvent(G.controller,G.encoder,Y,K)}if(YZ(Y)||xN(Y)){this._requestResponseMap.set(X,Y);let K=Array.from(this._requestToStreamMapping.entries()).filter(([Z,H])=>H===J).map(([Z])=>Z);if(K.every((Z)=>this._requestResponseMap.has(Z))){if(!G)throw Error(`No connection established for request ID: ${String(X)}`);if(this._enableJsonResponse&&G.resolveJson){let Z={"Content-Type":"application/json"};if(this.sessionId!==void 0)Z["mcp-session-id"]=this.sessionId;let H=K.map(($)=>this._requestResponseMap.get($));if(H.length===1)G.resolveJson(new Response(JSON.stringify(H[0]),{status:200,headers:Z}));else G.resolveJson(new Response(JSON.stringify(H),{status:200,headers:Z}))}else G.cleanup();for(let Z of K)this._requestResponseMap.delete(Z),this._requestToStreamMapping.delete(Z)}}}}var Xk=S(()=>{vQ()});var mk0="SELF",Hi=(Y)=>{return typeof Y==="object"&&Y!==null&&"handler"in Y&&"events"in Y&&typeof Y.handler==="function"&&Array.isArray(Y.events)},lk0=(Y)=>{return typeof Y==="object"&&Y!==null&&"handler"in Y&&"events"in Y&&typeof Y.handler==="function"&&Array.isArray(Y.events)},uk0="::",dk0=(Y)=>{let Q=Y.indexOf(uk0);if(Q===-1)return null;let X=Y.substring(0,Q),J=Y.substring(Q+uk0.length);return[X,J]},sR6=(Y)=>{if(!Y.startsWith("cron/"))return null;let Q=Y.substring(5),X=Q.indexOf("/");if(X===-1)return null;let J=Q.substring(0,X),G=Q.substring(X+1);return[J,G]},pk0=(Y)=>{if(Hi(Y))return[];return Object.keys(Y)},tR6=(Y,Q)=>{if(Hi(Y))return Y.events;let X=Y[Q];if(!X)return[];if(lk0(X))return X.events;return Object.keys(X)},Ki=(Y,Q,X)=>{if(Y===mk0){if(!X)return console.warn("[Event] SELF binding used but no connectionId available"),null;return X}let J=Q[Y];if(!tq1(J))return console.warn(`[Event] Binding "${Y}" not found in state`),null;return J.value},eR6=(Y,Q,X)=>{let J=Q;if(Hi(Y)){let K=[];for(let W of Y.events){let Z=dk0(W);if(!Z){console.warn(`[Event] Global handler event "${W}" must be prefixed with BINDING:: (e.g., "SELF::${W}" or "DATABASE::${W}")`);continue}let[H,$]=Z,F=Ki(H,J,X);if(!F)continue;K.push({eventType:$,publisher:F})}return K}let G=[];for(let K of pk0(Y)){let W=Ki(K,J,X);if(!W)continue;let Z=tR6(Y,K);for(let H of Z)G.push({eventType:H,publisher:W})}return G},YI6=(Y)=>{let Q=new Map;for(let X of Y){let J=X.source,G=Q.get(J)||[];G.push(X),Q.set(J,G)}return Q},QI6=(Y)=>{let Q=new Map;for(let X of Y){let J=X.type,G=Q.get(J)||[];G.push(X),Q.set(J,G)}return Q},XI6=(Y)=>{let Q={},X={},J=!1,G=0,K=[];for(let W of Y){if(W.results)Object.assign(X,W.results);if(W.success===!1){if(J=!0,W.error)K.push(W.error)}if(W.processedCount!==void 0)G+=W.processedCount}if(Object.keys(X).length>0)Q.results=X;if(Q.success=!J,K.length>0)Q.error=K.join("; ");if(G>0)Q.processedCount=G;return Q},JI6=async(Y,Q,X,J,G)=>{let K=J;if(Hi(Y)){let F=new Set;for(let B of Y.events){let U=dk0(B);if(!U)continue;let[z,D]=U,L=Ki(z,K,G);if(!L)continue;F.add(`${L}:${D}`)}let V=Q.filter((B)=>{let U=`${B.source}:${B.type}`;return F.has(U)});if(V.length===0)return{success:!0};try{return await Y.handler({events:V},X)}catch(B){return{success:!1,error:B instanceof Error?B.message:String(B)}}}let W=new Map;for(let F of pk0(Y)){let V=Ki(F,K,G);if(V)W.set(V,F)}let Z=YI6(Q),H=[];for(let[F,V]of Z){let B=W.get(F);if(!B)continue;let U=Y[B];if(!U)continue;if(lk0(U)){H.push((async()=>{try{return await U.handler({events:V},X)}catch(L){let w={};for(let E of V)w[E.id]={success:!1,error:L instanceof Error?L.message:String(L)};return{results:w}}})());continue}let z=U,D=QI6(V);for(let[L,w]of D){let E=z[L];if(!E)continue;H.push((async()=>{try{let T=await E({events:w},X),C={};for(let P of w)C[P.id]=T;return{results:C}}catch(T){let C={};for(let P of w)C[P.id]={success:!1,error:T instanceof Error?T.message:String(T)};return{results:C}}})())}}let $=await Promise.all(H);if($.length===0)return{success:!0};return XI6($)},$i;var GB1=S(()=>{Ji();$i={subscriptions:eR6,execute:JI6,parseCron:sR6}});function o$(Y){return{...Y,execute:(Q)=>{return Y.execute({...Q,runtimeContext:Jk(Q.runtimeContext)})}}}function WB1(Y){return Y&&"streamable"in Y&&Y.streamable===!0}var Jk=(Y)=>{let Q=bS.getStore();if(!Q){if(Y)return Y;throw Error("Missing context, did you forget to call State.bind?")}return Q},GI6=(Y,Q)=>{let X=Q;return typeof X[Y]<"u"?X[Y]:Q?.MESH_REQUEST_CONTEXT?.state?.[Y]},WI6=({events:Y,configuration:{state:Q,scopes:X,onChange:J}={}}={})=>{let G=Q?q.toJSONSchema(Q):{type:"object",properties:{}},K=String(Y?.bus??"EVENT_BUS");return[...J||Y?[o$({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:q.object({state:Q??q.unknown(),scopes:q.array(q.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')")}),outputSchema:q.object({}),execute:async(W)=>{let Z=W.context.state;await J?.(W.runtimeContext.env,{state:Z,scopes:W.context.scopes});let H=GI6(K,W.runtimeContext.env);if(Y&&Z&&H){let $=W.runtimeContext.env.MESH_REQUEST_CONTEXT?.connectionId,F=$i.subscriptions(Y?.handlers??{},Z,$);if(await H.EVENT_SYNC_SUBSCRIPTIONS({subscriptions:F}),$){let V=F.filter((B)=>B.eventType.startsWith("cron/")&&B.publisher===$);await Promise.all(V.map(async(B)=>{let U=$i.parseCron(B.eventType);if(U){let[,z]=U;await H.EVENT_PUBLISH({type:B.eventType,cron:z})}}))}}return Promise.resolve({})}})]:[],...Y?.handlers?[o$({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:Gi,outputSchema:Wi,execute:async(W)=>{let Z=W.runtimeContext.env,H=Z.MESH_REQUEST_CONTEXT?.state,$=Z.MESH_REQUEST_CONTEXT?.connectionId;return $i.execute(Y.handlers,W.context.events,Z,H,$)}})]:[],o$({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:q.object({}),outputSchema:q.object({stateSchema:q.unknown(),scopes:q.array(q.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:G,scopes:[...X??[],...Y?[`${K}::EVENT_SYNC_SUBSCRIPTIONS`]:[]]})}})]},ck0=(Y)=>{let Q=async(G)=>{await Y.before?.(G);let K=new IU({name:"@deco/mcp-api",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}}}),Z=await(typeof Y.tools==="function"?Y.tools:async(B)=>{if(typeof Y.tools==="function")return await Y.tools(B);return await Promise.all(Y.tools?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);Z.push(...WI6(Y));for(let B of Z)K.registerTool(B.id,{_meta:{streamable:WB1(B),...B._meta??{}},description:B.description,annotations:B.annotations,inputSchema:B.inputSchema&&"shape"in B.inputSchema?B.inputSchema.shape:q.object({}).shape,outputSchema:WB1(B)?q.object({bytes:q.record(q.string(),q.number())}).shape:B.outputSchema&&typeof B.outputSchema==="object"&&("shape"in B.outputSchema)?B.outputSchema.shape:void 0},async(U)=>{let z=await B.execute({context:U,runtimeContext:Jk()});if(WB1(B)&&z instanceof Response)return{structuredContent:{streamable:!0,status:z.status,statusText:z.statusText},content:[{type:"text",text:`Streaming response: ${z.status} ${z.statusText}`}]};return{structuredContent:z,content:[{type:"text",text:JSON.stringify(z)}]}});let $=await(typeof Y.prompts==="function"?Y.prompts:async(B)=>{if(typeof Y.prompts==="function")return await Y.prompts(B);return await Promise.all(Y.prompts?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);for(let B of $)K.registerPrompt(B.name,{title:B.title,description:B.description,argsSchema:B.argsSchema?B.argsSchema:q.object({}).shape},async(U)=>{return await B.execute({args:U,runtimeContext:Jk()})});let V=await(typeof Y.resources==="function"?Y.resources:async(B)=>{if(typeof Y.resources==="function")return await Y.resources(B);return await Promise.all(Y.resources?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);for(let B of V)K.resource(B.name,B.uri,{description:B.description,mimeType:B.mimeType},async(U)=>{let z=await B.read({uri:U,runtimeContext:Jk()}),D={uri:z.uri};if(z.mimeType)D.mimeType=z.mimeType;if(z.text!==void 0)return{contents:[{uri:z.uri,mimeType:z.mimeType,text:z.text}]};else if(z.blob!==void 0)return{contents:[{uri:z.uri,mimeType:z.mimeType,blob:z.blob}]};return{contents:[{uri:z.uri,mimeType:z.mimeType,text:""}]}});return{server:K,tools:Z,prompts:$,resources:V}};return{fetch:async(G,K)=>{let{server:W}=await Q(K),Z=new r$;await W.connect(Z);try{let H=await Z.handleRequest(G),$=H.headers.get("content-type");if(!($?.includes("text/event-stream")||$?.includes("application/json-rpc"))){console.debug("[MCP Transport] Closing transport for non-streaming response");try{await Z.close?.()}catch{}}else console.debug("[MCP Transport] Keeping transport open for streaming response (Content-Type: %s)",$);return H}catch(H){console.debug("[MCP Transport] Closing transport due to error:",H instanceof Error?H.message:H);try{await Z.close?.()}catch{}throw H}},callTool:async({toolCallId:G,toolCallInput:K})=>{let W=bS.getStore();if(!W)throw Error("Missing state, did you forget to call State.bind?");let Z=W?.env,{tools:H}=await Q(Z),F=H.find((V)=>V.id===G)?.execute;if(!F)throw Error(`Tool ${G} not found or does not have an execute function`);return F({context:K,runtimeContext:Jk()})}}};var Fi=S(()=>{Qk();_x();Xk();l1();GB1();eq1();GB1()});var ZI6=({env:Y,server:Q,url:X})=>{Y.SELF=new Proxy({},{get:(J,G)=>{if(G==="toJSON")return null;return async(K)=>{return await Q.callTool({toolCallId:G,toolCallInput:K})}}}),Y.IS_LOCAL=(X?.startsWith("http://localhost")||X?.startsWith("http://127.0.0.1"))??!1},nk0=(Y)=>()=>{return{...Y??{}}},KI6=({env:Y,server:Q,tokenOrContext:X,url:J,authToken:G})=>{let K=Y,W=G?G.split(" ")[1]:void 0,Z;if(typeof X==="string"){let H=g9(X),$=H.metadata??{};Z={authorization:W,state:H.state??$.state??{},token:X,meshUrl:H.meshUrl??$.meshUrl,connectionId:H.connectionId??$.connectionId,organizationId:H.organizationId??$.organizationId,ensureAuthenticated:nk0(H.user??H.sub)}}else if(typeof X==="object"){Z=X;let H=g9(X.token),$=H.metadata??{},F=H.appName;Z.authorization??=W,Z.callerApp=F,Z.connectionId??=H.connectionId??$.connectionId,Z.ensureAuthenticated=nk0(H.user??H.sub)}else Z={state:{},authorization:W,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return K.MESH_REQUEST_CONTEXT=Z,Z.state=qk0(Z),ZI6({env:K,server:Q,url:J}),K},HI6,ik0=(Y)=>{let Q=ck0(Y),X=Y.cors??HI6,J=Y.oauth,G=J?Mk0(J):null,K=async(W,Z,H)=>{let $=new URL(W.url);if(G){if($.pathname==="/.well-known/oauth-protected-resource"||$.pathname==="/mcp/.well-known/oauth-protected-resource")return G.handleProtectedResourceMetadata(W);if($.pathname==="/.well-known/oauth-authorization-server")return G.handleAuthorizationServerMetadata(W);if($.pathname==="/authorize")return G.handleAuthorize(W);if($.pathname==="/oauth/callback")return G.handleOAuthCallback(W);if($.pathname==="/token"&&W.method==="POST")return G.handleToken(W);if(($.pathname==="/register"||$.pathname==="/mcp/register")&&W.method==="POST")return G.handleClientRegistration(W)}if($.pathname==="/mcp"){if(W.method==="GET")return new Response("Method not allowed",{status:405});if(G&&!G.hasAuth(W)){let F=W.clone();try{if((await F.json())?.method!=="tools/list")return G.createUnauthorizedResponse(W)}catch{return G.createUnauthorizedResponse(W)}}return Q.fetch(W,Z,H)}if($.pathname.startsWith("/mcp/call-tool")){let F=$.pathname.split("/").pop();if(!F)return new Response("Not found",{status:404});let V=await W.json(),B=await Q.callTool({toolCallId:F,toolCallInput:V});if(B instanceof Response)return B;return new Response(JSON.stringify(B),{headers:{"Content-Type":"application/json"}})}return Y.fetch?.(W,Z,H)||new Response("Not found",{status:404})};return{fetch:async(W,Z,H)=>{if(new URL(W.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(X!==!1&&W.method==="OPTIONS")return Uk0(W,X??{});let $=KI6({authToken:W.headers.get("authorization")??null,env:{...process.env,...Z},server:Q,tokenOrContext:W.headers.get("x-mesh-token")??void 0,url:W.url}),F=await bS.run({req:W,env:$,ctx:H},async()=>await K(W,$,H));if(X!==!1)return zk0(F,W,X??{});return F}}};var ak0=S(()=>{t5();Ji();Dk0();eq1();Fi();Fi();Ji();oq1();HI6={origin:(Y)=>{if(Y.includes("localhost")||Y.includes("127.0.0.1"))return Y;return Y},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});function Vi(Y){return Buffer.from(String(Y),"utf8").toString("base64")}function qi(Y){if(!Y)return null;try{let Q=Buffer.from(Y,"base64").toString("utf8"),X=Number.parseInt(Q,10);return Number.isNaN(X)||X<0?null:X}catch{return null}}function LX(Y){if(!Y?.length)return[];return Array.from(new Set(Y.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.toLowerCase())))}function pD(Y){if(!Y)return[];return LX(Y.split(","))}function Bi(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}function Ui(Y){return Y?.["mcp.mesh"]??{}}function zi(Y){return Y.length?Y.join(","):null}function $I6(Y,Q){if(!Q?.length)return;let X=Y;for(let J of Q){if(X===null||X===void 0)return;if(typeof X!=="object")return;X=X[J]}return X}function FI6(Y,Q,X){if(!Q)return!1;if(Q==="eq")return Y===X;if(Q==="contains"||Q==="like"){let J=String(Y??"").toLowerCase(),G=String(X??"").toLowerCase();return J.includes(G)}if(Q==="in"){if(!Array.isArray(X))return!1;return X.includes(Y)}if(Q==="gt")return Number(Y)>Number(X);if(Q==="gte")return Number(Y)>=Number(X);if(Q==="lt")return Number(Y)<Number(X);if(Q==="lte")return Number(Y)<=Number(X);return!1}function Gk(Y,Q){if(!Q)return!0;if(Array.isArray(Q.conditions)&&Q.conditions.length){if(Q.operator==="and")return Q.conditions.every((X)=>Gk(Y,X));if(Q.operator==="or")return Q.conditions.some((X)=>Gk(Y,X));if(Q.operator==="not")return!Q.conditions.some((X)=>Gk(Y,X))}return FI6($I6(Y,Q.field),Q.operator,Q.value)}class Wk{db;constructor(Y){this.db=Y}async create(Y){let Q=new Date().toISOString(),X=Y._meta??{},J=Ui(X),G=LX(J.tags),K=LX(J.categories),W={id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:JSON.stringify(X),tags:zi(G),categories:zi(K),is_public:Y.is_public?1:0,is_unlisted:Y.is_unlisted?1:0,created_at:Q,updated_at:Q,created_by:Y.created_by??null};await this.db.insertInto("private_registry_item").values(W).execute();let Z=await this.findById(Y.organization_id,Y.id);if(!Z)throw Error(`Failed to create registry item "${Y.id}"`);return Z}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async findByIdOrName(Y,Q){let X=await this.findById(Y,Q);if(X)return X;let J=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("title","=",Q).executeTakeFirst();return J?this.deserialize(J):null}async update(Y,Q,X){let J=await this.findById(Y,Q);if(!J)throw Error(`Registry item not found: ${Q}`);let G=X._meta??J._meta??{},K=Ui(G),W=LX(K.tags),Z=LX(K.categories),H={updated_at:new Date().toISOString()};if(X.title!==void 0)H.title=X.title;if(X.description!==void 0)H.description=X.description;if(X.server!==void 0)H.server_json=JSON.stringify(X.server);if(X._meta!==void 0)H.meta_json=JSON.stringify(X._meta);if(X._meta!==void 0)H.tags=zi(W),H.categories=zi(Z);if(X.is_public!==void 0)H.is_public=X.is_public?1:0;if(X.is_unlisted!==void 0)H.is_unlisted=X.is_unlisted?1:0;await this.db.updateTable("private_registry_item").set(H).where("organization_id","=",Y).where("id","=",Q).execute();let $=await this.findById(Y,Q);if(!$)throw Error(`Registry item not found after update: ${Q}`);return $}async delete(Y,Q){let X=await this.findById(Y,Q);if(!X)return null;return await this.db.deleteFrom("private_registry_item").where("organization_id","=",Y).where("id","=",Q).execute(),X}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).orderBy("created_at","desc");if(!Q.includeUnlisted)X=X.where("is_unlisted","=",0);let G=(await X.execute()).map((z)=>this.deserialize(z)),K=LX(Q.tags),W=LX(Q.categories),Z=G.filter((z)=>{let D=Ui(z._meta),L=LX(D.tags),w=LX(D.categories),E=K.length===0||K.every((P)=>L.includes(P)),T=W.length===0||W.every((P)=>w.includes(P)),C=Gk(z,Q.where);return E&&T&&C}),$=qi(Q.cursor)??Q.offset??0,F=Q.limit??24,V=Z.slice($,$+F),B=$+F<Z.length,U=B?Vi($+F):void 0;return{items:V,totalCount:Z.length,hasMore:B,nextCursor:U}}async listPublic(Y,Q={}){let J=(await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("is_public","=",1).where("is_unlisted","=",0).orderBy("created_at","desc").execute()).map((U)=>this.deserialize(U)),G=LX(Q.tags),K=LX(Q.categories),W=J.filter((U)=>{let z=Ui(U._meta),D=LX(z.tags),L=LX(z.categories),w=G.length===0||G.every((C)=>D.includes(C)),E=K.length===0||K.every((C)=>L.includes(C)),T=Gk(U,Q.where);return w&&E&&T}),H=qi(Q.cursor)??Q.offset??0,$=Q.limit??24,F=W.slice(H,H+$),V=H+$<W.length,B=V?Vi(H+$):void 0;return{items:F,totalCount:W.length,hasMore:V,nextCursor:B}}async getFilters(Y,Q){let X=this.db.selectFrom("private_registry_item").select(["tags","categories"]).where("organization_id","=",Y);if(Q?.publicOnly)X=X.where("is_public","=",1);if(!Q?.includeUnlisted)X=X.where("is_unlisted","=",0);let J=await X.execute(),G=new Map,K=new Map;for(let Z of J){for(let H of pD(Z.tags))G.set(H,(G.get(H)??0)+1);for(let H of pD(Z.categories))K.set(H,(K.get(H)??0)+1)}let W=(Z)=>Array.from(Z.entries()).map(([H,$])=>({value:H,count:$})).sort((H,$)=>H.value.localeCompare($.value));return{tags:W(G),categories:W(K)}}async search(Y,Q={},X){let J=this.db.selectFrom("private_registry_item").select(["id","title","description","meta_json","server_json","tags","categories","is_public","is_unlisted"]).where("organization_id","=",Y).orderBy("created_at","desc");if(X?.publicOnly)J=J.where("is_public","=",1);if(!X?.includeUnlisted)J=J.where("is_unlisted","=",0);let G=await J.execute(),K=Q.query?.trim().toLowerCase(),W=LX(Q.tags),Z=LX(Q.categories),H=G.filter((L)=>{if(K){let w=Bi(L.server_json,{}),T=Bi(L.meta_json,{})?.["mcp.mesh"]?.short_description??"";if(![L.id,L.title,L.description??"",w.name??"",w.description??"",T].join(" ").toLowerCase().includes(K))return!1}if(W.length>0){let w=LX(pD(L.tags));if(!W.every((E)=>w.includes(E)))return!1}if(Z.length>0){let w=LX(pD(L.categories));if(!Z.every((E)=>w.includes(E)))return!1}return!0}),F=qi(Q.cursor)??0,V=Q.limit??20,B=H.slice(F,F+V),U=F+V<H.length,z=U?Vi(F+V):void 0;return{items:B.map((L)=>({id:L.id,title:L.title,tags:pD(L.tags),categories:pD(L.categories),is_public:L.is_public===1,is_unlisted:L.is_unlisted===1})),totalCount:H.length,hasMore:U,nextCursor:z}}deserialize(Y){let Q=Bi(Y.server_json,{}),X=Bi(Y.meta_json,{});return{id:Y.id,name:typeof Q.name==="string"?Q.name:void 0,title:Y.title,description:Y.description,_meta:X,server:Q,is_public:Y.is_public===1,is_unlisted:Y.is_unlisted===1,created_at:Y.created_at,updated_at:Y.updated_at,...Y.created_by?{created_by:Y.created_by}:{}}}}var ZB1=()=>{};var Di,VI6,Oi,pZ,KB1,qI6,eq,jA,AG,cD,HB1,rk0,$B1,ok0,FB1,sk0,VB1,tk0,SA,BI6,Zk,UI6,Ni,qB1,ek0,Yv0,BB1,Qv0,Xv0,Jv0,Gv0,Wv0,Zv0,Kv0,Hv0,zI6,UB1,$v0,Fv0,zB1,Vv0;var cY=S(()=>{wG();l1();Di=q.object({name:q.string(),title:q.string().optional(),description:q.string().optional(),version:q.string().optional(),websiteUrl:q.string().optional(),icons:q.array(q.object({src:q.string()})).optional(),remotes:q.array(q.object({type:q.string().optional(),url:q.string().optional(),name:q.string().optional(),title:q.string().optional(),description:q.string().optional()})).optional(),packages:q.array(q.object({identifier:q.string(),version:q.string().optional()})).optional(),repository:q.object({url:q.string().optional(),source:q.string().optional(),subfolder:q.string().optional()}).optional()}),VI6=q.object({name:q.string(),description:q.string().nullable().optional()}),Oi=q.object({"mcp.mesh":q.object({verified:q.boolean().optional(),tags:q.array(q.string()).optional(),categories:q.array(q.string()).optional(),friendly_name:q.string().nullable().optional(),short_description:q.string().max(160).nullable().optional(),owner:q.string().nullable().optional(),readme:q.string().max(50000).nullable().optional(),readme_url:q.string().url().nullable().optional(),has_remote:q.boolean().optional(),has_oauth:q.boolean().optional(),tools:q.array(VI6).optional()}).optional()}).catchall(q.unknown()),pZ=q.object({id:q.string(),name:q.string().optional(),title:q.string(),description:q.string().nullable().optional(),_meta:Oi.optional(),server:Di,is_public:q.boolean().optional(),created_at:q.string(),updated_at:q.string(),created_by:q.string().optional()}),KB1=q.object({id:q.string(),title:q.string(),description:q.string().nullable().optional(),_meta:Oi.optional(),server:Di,is_public:q.boolean().optional()}),qI6=q.object({title:q.string().optional(),description:q.string().nullable().optional(),_meta:Oi.optional(),server:Di.optional(),is_public:q.boolean().optional()}),eq=dZ.extend({tags:q.array(q.string()).optional().describe("Filter by tags (AND semantics)"),categories:q.array(q.string()).optional().describe("Filter by categories (AND semantics)"),cursor:q.string().optional().describe("Pagination cursor")}).describe("List registry items with optional filtering and pagination."),jA=q.object({items:q.array(pZ),totalCount:q.number(),hasMore:q.boolean().optional(),nextCursor:q.string().optional()}),AG=q.object({id:q.string().optional().describe("Registry item ID"),name:q.string().optional().describe("Registry item name (alias for id)")}).refine((Y)=>Y.id||Y.name,{message:"At least one of 'id' or 'name' is required"}).describe("Get a registry item by ID or name."),cD=q.object({item:pZ.nullable()}),HB1=q.object({data:KB1}),rk0=q.object({item:pZ}),$B1=q.object({items:q.array(KB1).min(1)}),ok0=q.object({created:q.number(),errors:q.array(q.object({id:q.string(),error:q.string()}))}),FB1=q.object({id:q.string(),data:qI6}),sk0=q.object({item:pZ}),VB1=q.object({id:q.string()}),tk0=q.object({item:pZ}),SA=q.object({tags:q.array(q.object({value:q.string(),count:q.number()})),categories:q.array(q.object({value:q.string(),count:q.number()}))}),BI6=q.enum(["description","short_description","tags","categories","readme"]),Zk=q.object({query:q.string().optional().describe("Free-text search across id, title, description, server name"),tags:q.array(q.string()).optional().describe("Filter by tags (AND)"),categories:q.array(q.string()).optional().describe("Filter by categories (AND)"),limit:q.number().int().min(1).max(100).optional().describe("Max results (default 20)"),cursor:q.string().optional().describe("Pagination cursor")}).describe("Lightweight search returning minimal fields (id, title, tags, categories, is_public)."),UI6=q.object({id:q.string(),title:q.string(),tags:q.array(q.string()),categories:q.array(q.string()),is_public:q.boolean()}),Ni=q.object({items:q.array(UI6),totalCount:q.number(),hasMore:q.boolean().optional(),nextCursor:q.string().optional()}),qB1=q.object({type:BI6.describe("Which content to generate"),llmConnectionId:q.string().describe("Connection ID of a language model"),modelId:q.string().describe("Model ID to use"),context:q.object({name:q.string().optional(),provider:q.string().optional(),url:q.string().optional(),owner:q.string().optional(),repositoryUrl:q.string().optional(),description:q.string().optional(),shortDescription:q.string().optional(),tags:q.array(q.string()).optional(),categories:q.array(q.string()).optional(),availableTags:q.array(q.string()).optional(),availableCategories:q.array(q.string()).optional(),tools:q.array(q.object({name:q.string(),description:q.string().nullable().optional()})).optional()})}),ek0=q.object({result:q.string().optional(),items:q.array(q.string()).optional()}),Yv0=q.enum(["pending","approved","rejected"]),BB1=q.object({id:q.string(),organization_id:q.string(),requested_id:q.string().nullable().optional(),status:Yv0,title:q.string(),description:q.string().nullable().optional(),_meta:Oi.optional(),server:Di,requester_name:q.string().nullable().optional(),requester_email:q.string().nullable().optional(),reviewer_notes:q.string().nullable().optional(),created_at:q.string(),updated_at:q.string()}),Qv0=q.object({status:Yv0.optional(),limit:q.number().int().min(1).max(200).optional(),offset:q.number().int().min(0).optional(),sortBy:q.enum(["created_at","title"]).optional(),sortDirection:q.enum(["asc","desc"]).optional()}),Xv0=q.object({items:q.array(BB1),totalCount:q.number()}),Jv0=q.object({id:q.string(),status:q.enum(["approved","rejected"]),reviewerNotes:q.string().nullable().optional()}),Gv0=q.object({item:BB1}),Wv0=q.object({pending:q.number()}),Zv0=q.object({id:q.string()}),Kv0=q.object({item:BB1.nullable()}),Hv0=q.object({data:KB1,requester:q.object({name:q.string().optional(),email:q.string().email().optional()}).optional()}),zI6=q.object({id:q.string(),name:q.string(),prefix:q.string(),createdAt:q.string()}),UB1=q.object({name:q.string().min(1).max(64).describe("A descriptive name for this key")}),$v0=q.object({id:q.string(),name:q.string(),prefix:q.string(),key:q.string().describe("The full API key \u2014 shown only once!"),createdAt:q.string()}),Fv0=q.object({items:q.array(zI6)}),zB1=q.object({keyId:q.string()}),Vv0=q.object({success:q.boolean(),keyId:q.string()})});function DI6(Y,Q){let X=o$({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",inputSchema:eq,outputSchema:jA,execute:async({context:Z})=>{return await Y.listPublic(Q,{limit:Z.limit,offset:Z.offset,cursor:Z.cursor,tags:Z.tags,categories:Z.categories,where:Z.where})}}),J=o$({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",inputSchema:AG,outputSchema:cD,execute:async({context:Z})=>{let H=Z.id??Z.name;if(!H)return{item:null};let $=await Y.findByIdOrName(Q,H);if($&&$.is_public)return{item:$};return{item:null}}}),G=o$({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",inputSchema:AG,outputSchema:q.object({versions:q.array(cD.shape.item)}),execute:async({context:Z})=>{let H=Z.id??Z.name;if(!H)return{versions:[]};let $=await Y.findByIdOrName(Q,H);if($&&$.is_public)return{versions:[$]};return{versions:[]}}}),K=o$({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",inputSchema:Zk,outputSchema:Ni,execute:async({context:Z})=>{return await Y.search(Q,Z,{publicOnly:!0})}}),W=o$({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",inputSchema:q.object({}),outputSchema:SA,execute:async()=>{return await Y.getFilters(Q,{publicOnly:!0})}});return[X,K,J,G,W]}function DB1(Y,Q){let X=Q.db,J=new Wk(X);Y.all("/org/:orgSlug/registry/*",async(G)=>{let K=G.req.param("orgSlug");console.log(`[Public Registry MCP] Request for org slug: ${K}, path: ${G.req.path}`);let W=await X.selectFrom("organization").select(["id","slug","name"]).where("slug","=",K).executeTakeFirst();if(console.log("[Public Registry MCP] Found org:",W),!W)return console.log(`[Public Registry MCP] Organization not found: ${K}`),G.json({error:"Organization not found"},404);let Z=DI6(J,W.id),H=ik0({tools:()=>Z}),$=new URL(G.req.url),F=G.req.path.replace(`/org/${K}/registry`,""),V=new URL(F||"/",$.origin);$.searchParams.forEach((z,D)=>{V.searchParams.set(D,z)}),console.log(`[Public Registry MCP] Rewriting ${$.pathname} to ${V.pathname}`);let B=new Request(V.toString(),{method:G.req.method,headers:G.req.raw.headers,body:G.req.method!=="GET"&&G.req.method!=="HEAD"?G.req.raw.body:void 0}),U={organizationId:W.id,db:X,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await H.fetch(B,U,G)})}var qv0=S(()=>{ak0();Fi();l1();ZB1();cY()});import{randomUUID as OI6}from"crypto";function Bv0(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}class Kk{db;constructor(Y){this.db=Y}async createOrUpdate(Y){let Q=new Date().toISOString(),X=await this.findPendingByRequestedId(Y.organization_id,Y.requested_id);if(X){let W={title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:Y._meta?JSON.stringify(Y._meta):null,requester_name:Y.requester_name??null,requester_email:Y.requester_email??null,updated_at:Q};await this.db.updateTable("private_registry_publish_request").set(W).where("organization_id","=",Y.organization_id).where("id","=",X.id).execute();let Z=await this.findById(Y.organization_id,X.id);if(!Z)throw Error("Failed to update publish request");return Z}let J=OI6(),G={id:J,organization_id:Y.organization_id,requested_id:Y.requested_id,status:"pending",title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:Y._meta?JSON.stringify(Y._meta):null,requester_name:Y.requester_name??null,requester_email:Y.requester_email??null,reviewer_notes:null,created_at:Q,updated_at:Q};await this.db.insertInto("private_registry_publish_request").values(G).execute();let K=await this.findById(Y.organization_id,J);if(!K)throw Error("Failed to create publish request");return K}async findPendingByRequestedId(Y,Q){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y).where("requested_id","=",Q).where("status","=","pending").executeTakeFirst();return X?this.deserialize(X):null}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y),J=this.db.selectFrom("private_registry_publish_request").select(($)=>$.fn.countAll().as("count")).where("organization_id","=",Y);if(Q.status)X=X.where("status","=",Q.status),J=J.where("status","=",Q.status);let G=await J.executeTakeFirst(),K=Number(G?.count??0),W=Q.sortBy??"created_at",Z=Q.sortDirection??"desc";if(W==="title")X=X.orderBy("title",Z);else X=X.orderBy("created_at",Z);return{items:(await X.limit(Q.limit??24).offset(Q.offset??0).execute()).map(($)=>this.deserialize($)),totalCount:K}}async updateStatus(Y,Q,X,J){let G={status:X,updated_at:new Date().toISOString(),reviewer_notes:J??null};await this.db.updateTable("private_registry_publish_request").set(G).where("organization_id","=",Y).where("id","=",Q).execute();let K=await this.findById(Y,Q);if(!K)throw Error(`Publish request not found: ${Q}`);return K}async countPending(Y){let Q=await this.db.selectFrom("private_registry_publish_request").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",Y).where("status","=","pending").executeTakeFirst();return Number(Q?.count??0)}async delete(Y,Q){let X=await this.findById(Y,Q);if(!X)return null;return await this.db.deleteFrom("private_registry_publish_request").where("organization_id","=",Y).where("id","=",Q).execute(),X}deserialize(Y){return{id:Y.id,organization_id:Y.organization_id,requested_id:Y.requested_id??null,status:Y.status,title:Y.title,description:Y.description,_meta:Bv0(Y.meta_json,{}),server:Bv0(Y.server_json,{name:""}),requester_name:Y.requester_name,requester_email:Y.requester_email,reviewer_notes:Y.reviewer_notes,created_at:Y.created_at,updated_at:Y.updated_at}}}var OB1=()=>{};import{randomUUID as NI6}from"crypto";async function Uv0(Y){let X=new TextEncoder().encode(Y),J=await crypto.subtle.digest("SHA-256",X);return Array.from(new Uint8Array(J)).map((K)=>K.toString(16).padStart(2,"0")).join("")}function LI6(){let Y=new Uint8Array(32);return crypto.getRandomValues(Y),`prk_${Array.from(Y).map((X)=>X.toString(16).padStart(2,"0")).join("")}`}class Hk{db;constructor(Y){this.db=Y}async generate(Y,Q){let X=NI6(),J=LI6(),G=await Uv0(J),K=J.slice(0,12),W=new Date().toISOString();return await this.db.insertInto("private_registry_publish_api_key").values({id:X,organization_id:Y,name:Q,key_hash:G,prefix:K,created_at:W}).execute(),{entity:{id:X,organization_id:Y,name:Q,prefix:K,created_at:W},key:J}}async list(Y){return await this.db.selectFrom("private_registry_publish_api_key").select(["id","organization_id","name","prefix","created_at"]).where("organization_id","=",Y).orderBy("created_at","desc").execute()}async revoke(Y,Q){return(await this.db.deleteFrom("private_registry_publish_api_key").where("organization_id","=",Y).where("id","=",Q).execute()).length>0}async validate(Y,Q){let X=await Uv0(Q),J=await this.db.selectFrom("private_registry_publish_api_key").select(["id"]).where("organization_id","=",Y).where("key_hash","=",X).executeTakeFirst();return Boolean(J)}async hasKeys(Y){let Q=await this.db.selectFrom("private_registry_publish_api_key").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",Y).executeTakeFirst();return Number(Q?.count??0)>0}}var NB1=()=>{};import{sql as MI6}from"kysely";import{randomUUID as zv0}from"crypto";async function AI6(Y){let Q=new Date().toISOString(),X=zv0(),J=IY.SELF(Y.organizationId),G="registry.publish_request.created",K={requestId:Y.request.id,requestedId:Y.request.requested_id,title:Y.request.title,status:Y.request.status,createdAt:Y.request.created_at,requester:{name:Y.request.requester_name,email:Y.request.requester_email}};await Y.db.insertInto("events").values({id:X,organization_id:Y.organizationId,type:"registry.publish_request.created",source:J,specversion:"1.0",subject:Y.request.id,time:Q,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(K),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Q,updated_at:Q}).execute();let W=await Y.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",Y.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((Z)=>Z.or([Z("publisher","is",null),Z("publisher","=",J)])).execute();if(W.length>0)await Y.db.insertInto("event_deliveries").values(W.map((Z)=>({id:zv0(),event_id:X,subscription_id:Z.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Q}))).execute();try{await MI6`SELECT pg_notify('mesh_events', ${X})`.execute(Y.db)}catch{}}async function PI6(Y,Q){let J=(await Y.selectFrom("organization").select(["id"]).where("id","=",Q).execute())[0];if(J?.id)return J.id;return(await Y.selectFrom("organization").select(["id"]).where("slug","=",Q).execute())[0]?.id??null}async function EI6(Y,Q){let X=await Y.selectFrom("project_plugin_configs").innerJoin("projects","projects.id","project_plugin_configs.project_id").select(["project_plugin_configs.settings as settings"]).where("projects.organization_id","=",Q).where("project_plugin_configs.plugin_id","=",dH).execute();for(let J of X){let G=J.settings,K=typeof G==="string"?(()=>{try{return JSON.parse(G)}catch{return{}}})():G??{};if(K.acceptPublishRequests===!0){let W=K.rateLimitWindow==="minute"?"minute":"hour",Z=K.rateLimitMax,H=typeof Z==="number"&&Number.isFinite(Z)&&Z>=1?Math.floor(Z):Ov0;return{acceptPublishRequests:!0,requireApiToken:K.requireApiToken===!0,rateLimitEnabled:K.rateLimitEnabled===void 0?Dv0:K.rateLimitEnabled===!0,rateLimitWindow:W,rateLimitMax:H}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:Dv0,rateLimitWindow:wI6,rateLimitMax:Ov0}}async function TI6(Y,Q,X){let J=X==="minute"?60000:3600000,G=new Date(Date.now()-J).toISOString(),K=await Y.selectFrom("private_registry_publish_request").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",Q).where("created_at",">=",G).executeTakeFirst();return Number(K?.count??0)}async function CI6(Y,Q,X,J){let G=await Y.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",Q).where((K)=>K.or([K("id","=",X),K("title","=",J)])).executeTakeFirst();return G?{id:String(G.id),title:String(G.title)}:null}function LB1(Y,Q){let{db:X,db:J}=Q,G=new Kk(J),K=new Hk(J);Y.post("/org/:orgRef/registry/publish-request",async(W)=>{let Z=W.req.param("orgRef"),H=await PI6(X,Z);if(!H)return W.json({error:"Organization not found"},404);let $=await EI6(X,H);if(!$.acceptPublishRequests)return W.json({error:"Publish requests are not enabled for this registry."},403);if($.requireApiToken){let z=W.req.header("Authorization"),D=z?.startsWith("Bearer ")?z.slice(7).trim():null;if(!D)return W.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await K.validate(H,D))return W.json({error:"Invalid API key"},401)}if($.rateLimitEnabled){if(await TI6(J,H,$.rateLimitWindow)>=$.rateLimitMax)return W.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:$.rateLimitWindow==="minute"?60:3600},429)}let F;try{F=await W.req.json()}catch{return W.json({error:"Invalid JSON body"},400)}let V=Hv0.safeParse(F);if(!V.success)return W.json({error:"Invalid publish request payload",details:q.treeifyError(V.error)},400);let B=await CI6(J,H,V.data.data.id,V.data.data.title);if(B)return W.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:B},409);let U=await G.createOrUpdate({organization_id:H,requested_id:V.data.data.id,title:V.data.data.title,description:V.data.data.description??null,_meta:V.data.data._meta,server:V.data.data.server,requester_name:V.data.requester?.name??null,requester_email:V.data.requester?.email??null});try{await AI6({db:X,organizationId:H,request:U})}catch(z){console.warn("[private-registry] failed to emit publish-request event:",z)}return W.json({id:U.id,requested_id:U.requested_id,status:U.status},201)})}var Dv0=!0,wI6="hour",Ov0=100;var Nv0=S(()=>{QY();l1();uD();OB1();NB1();cY()});var Lv0=S(()=>{qv0();Nv0()});function Mv0(Y){MB1=Y}function v4(){if(!MB1)throw Error(`Plugin storage not initialized. Make sure the "${dH}" plugin is enabled.`);return MB1}async function RI6(Y){if(!Y.organization)throw Error("Organization context required");return await Y.access.check(),Y}function Z6(Y,Q){return async(X,J)=>{let G=await RI6(J);return Q(X,G)}}function II6(Y){if(!Y)return{};if(typeof Y==="string")try{return JSON.parse(Y)}catch{return{}}if(typeof Y==="object")return Y;return{}}async function $k(Y,Q){let J=(await Y.db.selectFrom("project_plugin_configs").innerJoin("projects","projects.id","project_plugin_configs.project_id").select(["project_plugin_configs.settings as settings"]).where("projects.organization_id","=",Q).where("project_plugin_configs.plugin_id","=",dH).execute()).map((K)=>II6(K.settings)),G={acceptPublishRequests:J.some((K)=>K.acceptPublishRequests===!0),requireApiToken:J.some((K)=>K.requireApiToken===!0),storePrivateOnly:J.some((K)=>K.storePrivateOnly===!0)};if(G.acceptPublishRequests||G.requireApiToken||G.storePrivateOnly)return G;for(let K of J)if(Object.keys(K).length>0)return K;return{}}var MB1=null;var Z9=S(()=>{uD()});import{randomUUID as wv0}from"crypto";function Av0(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}class wB1{db;constructor(Y){this.db=Y}async create(Y){let Q=wv0(),X=new Date().toISOString(),J={id:Q,organization_id:Y.organization_id,status:Y.status??"pending",config_snapshot:Y.config_snapshot?JSON.stringify(Y.config_snapshot):null,total_items:Y.total_items??0,tested_items:0,passed_items:0,failed_items:0,skipped_items:0,current_item_id:null,started_at:Y.started_at??null,finished_at:null,created_at:X};await this.db.insertInto("private_registry_monitor_run").values(J).execute();let G=await this.findById(Y.organization_id,Q);if(!G)throw Error(`Failed to create monitor run ${Q}`);return G}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserializeRun(X):null}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",Y),J=this.db.selectFrom("private_registry_monitor_run").select((Z)=>Z.fn.countAll().as("count")).where("organization_id","=",Y);if(Q.status)X=X.where("status","=",Q.status),J=J.where("status","=",Q.status);let G=await J.executeTakeFirst(),K=Number(G?.count??0);return{items:(await X.orderBy("created_at","desc").limit(Q.limit??24).offset(Q.offset??0).execute()).map((Z)=>this.deserializeRun(Z)),totalCount:K}}async update(Y,Q,X){let J={};if(X.total_items!==void 0)J.total_items=X.total_items;if(X.status!==void 0)J.status=X.status;if(X.tested_items!==void 0)J.tested_items=X.tested_items;if(X.passed_items!==void 0)J.passed_items=X.passed_items;if(X.failed_items!==void 0)J.failed_items=X.failed_items;if(X.skipped_items!==void 0)J.skipped_items=X.skipped_items;if(X.current_item_id!==void 0)J.current_item_id=X.current_item_id;if(X.started_at!==void 0)J.started_at=X.started_at;if(X.finished_at!==void 0)J.finished_at=X.finished_at;await this.db.updateTable("private_registry_monitor_run").set(J).where("organization_id","=",Y).where("id","=",Q).execute();let G=await this.findById(Y,Q);if(!G)throw Error(`Monitor run not found: ${Q}`);return G}deserializeRun(Y){return{id:Y.id,organization_id:Y.organization_id,status:Y.status,config_snapshot:Av0(Y.config_snapshot,null),total_items:Number(Y.total_items??0),tested_items:Number(Y.tested_items??0),passed_items:Number(Y.passed_items??0),failed_items:Number(Y.failed_items??0),skipped_items:Number(Y.skipped_items??0),current_item_id:Y.current_item_id,started_at:Y.started_at,finished_at:Y.finished_at,created_at:Y.created_at}}}class AB1{db;constructor(Y){this.db=Y}async create(Y){let Q=wv0(),X=new Date().toISOString(),J={id:Q,run_id:Y.run_id,organization_id:Y.organization_id,item_id:Y.item_id,item_title:Y.item_title,status:Y.status,error_message:Y.error_message??null,connection_ok:Y.connection_ok?1:0,tools_listed:Y.tools_listed?1:0,tool_results:Y.tool_results?JSON.stringify(Y.tool_results):null,agent_summary:Y.agent_summary??null,duration_ms:Y.duration_ms??0,action_taken:Y.action_taken??"none",tested_at:X};await this.db.insertInto("private_registry_monitor_result").values(J).execute();let G=await this.findById(Y.organization_id,Q);if(!G)throw Error("Failed to create test result");return G}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async listByRun(Y,Q,X={}){let J=this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",Y).where("run_id","=",Q),G=this.db.selectFrom("private_registry_monitor_result").select((H)=>H.fn.countAll().as("count")).where("organization_id","=",Y).where("run_id","=",Q);if(X.status)J=J.where("status","=",X.status),G=G.where("status","=",X.status);let K=await G.executeTakeFirst(),W=Number(K?.count??0);return{items:(await J.orderBy("tested_at","desc").limit(X.limit??50).offset(X.offset??0).execute()).map((H)=>this.deserialize(H)),totalCount:W}}async update(Y,Q,X){let J={};if(X.status!==void 0)J.status=X.status;if(X.error_message!==void 0)J.error_message=X.error_message;if(X.connection_ok!==void 0)J.connection_ok=X.connection_ok?1:0;if(X.tools_listed!==void 0)J.tools_listed=X.tools_listed?1:0;if(X.tool_results!==void 0)J.tool_results=JSON.stringify(X.tool_results);if(X.agent_summary!==void 0)J.agent_summary=X.agent_summary;if(X.duration_ms!==void 0)J.duration_ms=X.duration_ms;if(X.action_taken!==void 0)J.action_taken=X.action_taken;await this.db.updateTable("private_registry_monitor_result").set(J).where("organization_id","=",Y).where("id","=",Q).execute();let G=await this.findById(Y,Q);if(!G)throw Error(`Monitor result not found: ${Q}`);return G}deserialize(Y){return{id:Y.id,run_id:Y.run_id,organization_id:Y.organization_id,item_id:Y.item_id,item_title:Y.item_title,status:Y.status,error_message:Y.error_message,connection_ok:Y.connection_ok===1,tools_listed:Y.tools_listed===1,tool_results:Av0(Y.tool_results,[]),agent_summary:Y.agent_summary,duration_ms:Number(Y.duration_ms??0),action_taken:Y.action_taken,tested_at:Y.tested_at}}}var Pv0=()=>{};import{randomUUID as jI6}from"crypto";class PB1{db;constructor(Y){this.db=Y}async findByItemId(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).where("item_id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async list(Y){return(await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).orderBy("updated_at","desc").execute()).map((X)=>this.deserialize(X))}async findByConnectionId(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).where("connection_id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async upsert(Y){let Q=await this.findByItemId(Y.organization_id,Y.item_id),X=new Date().toISOString();if(!Q){let G={id:jI6(),organization_id:Y.organization_id,item_id:Y.item_id,connection_id:Y.connection_id,auth_status:Y.auth_status??"none",created_at:X,updated_at:X};await this.db.insertInto("private_registry_monitor_connection").values(G).execute()}else{let G={connection_id:Y.connection_id,auth_status:Y.auth_status??Q.auth_status,updated_at:X};await this.db.updateTable("private_registry_monitor_connection").set(G).where("organization_id","=",Y.organization_id).where("item_id","=",Y.item_id).execute()}let J=await this.findByItemId(Y.organization_id,Y.item_id);if(!J)throw Error("Failed to save monitor connection");return J}async updateAuthStatus(Y,Q,X){return await this.db.updateTable("private_registry_monitor_connection").set({auth_status:X,updated_at:new Date().toISOString()}).where("organization_id","=",Y).where("item_id","=",Q).execute(),this.findByItemId(Y,Q)}deserialize(Y){return{id:Y.id,organization_id:Y.organization_id,item_id:Y.item_id,connection_id:Y.connection_id,auth_status:Y.auth_status,created_at:Y.created_at,updated_at:Y.updated_at}}}var Ev0=()=>{};function Tv0(Y){let Q=Y.db,X={items:new Wk(Q),publishRequests:new Kk(Q),publishApiKeys:new Hk(Q),monitorRuns:new wB1(Q),monitorResults:new AB1(Q),monitorConnections:new PB1(Q)};return Mv0(X),X}var Cv0=S(()=>{Z9();ZB1();OB1();NB1();Pv0();Ev0()});var Rv0;var Iv0=S(()=>{cY();Z9();Rv0={name:"REGISTRY_ITEM_BULK_CREATE",description:"Create many private registry items at once",inputSchema:$B1,outputSchema:ok0,handler:Z6($B1,async(Y,Q)=>{let X=v4(),J=[],G=0;for(let K of Y.items)try{await X.items.create({...K,organization_id:Q.organization.id,created_by:Q.auth.user?.id??null}),G+=1}catch(W){J.push({id:K.id,error:W instanceof Error?W.message:"Unknown error"})}return{created:G,errors:J}})}});function SI6(Y){return Array.from(new Set(Y.map((Q)=>Q.trim().toLowerCase()).filter((Q)=>Q.length>0)))}function kI6(Y){let X=Y.structuredContent?.content?.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text??"").join(`
|
|
1215
|
+
`,Y.enqueue(Q.encode(G)),!0}catch{return!1}}handleUnsupportedRequest(){return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32000,message:"Method not allowed."},id:null}),{status:405,headers:{Allow:"GET, POST, DELETE","Content-Type":"application/json"}})}async handlePostRequest(Y,Q){try{let X=Y.headers.get("accept");if(!X?.includes("application/json")||!X.includes("text/event-stream"))return this.createJsonErrorResponse(406,-32000,"Not Acceptable: Client must accept both application/json and text/event-stream");let J=Y.headers.get("content-type");if(!J||!J.includes("application/json"))return this.createJsonErrorResponse(415,-32000,"Unsupported Media Type: Content-Type must be application/json");let G={headers:Object.fromEntries(Y.headers.entries())},K;if(Q?.parsedBody!==void 0)K=Q.parsedBody;else try{K=await Y.json()}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON")}let W;try{if(Array.isArray(K))W=K.map((L)=>bG.parse(L));else W=[bG.parse(K)]}catch{return this.createJsonErrorResponse(400,-32700,"Parse error: Invalid JSON-RPC message")}let Z=W.some(b41);if(Z){if(this._initialized&&this.sessionId!==void 0)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Server already initialized");if(W.length>1)return this.createJsonErrorResponse(400,-32600,"Invalid Request: Only one initialization request is allowed");if(this.sessionId=this.sessionIdGenerator?.(),this._initialized=!0,this.sessionId&&this._onsessioninitialized)await Promise.resolve(this._onsessioninitialized(this.sessionId))}if(!Z){let L=this.validateSession(Y);if(L)return L;let w=this.validateProtocolVersion(Y);if(w)return w}if(!W.some(TK)){for(let L of W)this.onmessage?.(L,{authInfo:Q?.authInfo,requestInfo:G});return new Response(null,{status:202})}let $=crypto.randomUUID(),F=W.find((L)=>b41(L)),V=F?F.params.protocolVersion:Y.headers.get("mcp-protocol-version")??P21;if(this._enableJsonResponse)return new Promise((L)=>{this._streamMapping.set($,{resolveJson:L,cleanup:()=>{this._streamMapping.delete($)}});for(let w of W)if(TK(w))this._requestToStreamMapping.set(w.id,$);for(let w of W)this.onmessage?.(w,{authInfo:Q?.authInfo,requestInfo:G})});let B=new TextEncoder,U,z=new ReadableStream({start:(L)=>{U=L},cancel:()=>{this._streamMapping.delete($)}}),D={"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"};if(this.sessionId!==void 0)D["mcp-session-id"]=this.sessionId;for(let L of W)if(TK(L))this._streamMapping.set($,{controller:U,encoder:B,cleanup:()=>{this._streamMapping.delete($);try{U.close()}catch{}}}),this._requestToStreamMapping.set(L.id,$);await this.writePrimingEvent(U,B,$,V);for(let L of W){let w,E;if(TK(L)&&this._eventStore&&V>="2025-11-25")w=()=>{this.closeSSEStream(L.id)},E=()=>{this.closeStandaloneSSEStream()};this.onmessage?.(L,{authInfo:Q?.authInfo,requestInfo:G,closeSSEStream:w,closeStandaloneSSEStream:E})}return new Response(z,{status:200,headers:D})}catch(X){return this.onerror?.(X),this.createJsonErrorResponse(400,-32700,"Parse error",{data:String(X)})}}async handleDeleteRequest(Y){let Q=this.validateSession(Y);if(Q)return Q;let X=this.validateProtocolVersion(Y);if(X)return X;return await Promise.resolve(this._onsessionclosed?.(this.sessionId)),await this.close(),new Response(null,{status:200})}validateSession(Y){if(this.sessionIdGenerator===void 0)return;if(!this._initialized)return this.createJsonErrorResponse(400,-32000,"Bad Request: Server not initialized");let Q=Y.headers.get("mcp-session-id");if(!Q)return this.createJsonErrorResponse(400,-32000,"Bad Request: Mcp-Session-Id header is required");if(Q!==this.sessionId)return this.createJsonErrorResponse(404,-32001,"Session not found");return}validateProtocolVersion(Y){let Q=Y.headers.get("mcp-protocol-version");if(Q!==null&&!DU.includes(Q))return this.createJsonErrorResponse(400,-32000,`Bad Request: Unsupported protocol version: ${Q} (supported versions: ${DU.join(", ")})`);return}async close(){this._streamMapping.forEach(({cleanup:Y})=>{Y()}),this._streamMapping.clear(),this._requestResponseMap.clear(),this.onclose?.()}closeSSEStream(Y){let Q=this._requestToStreamMapping.get(Y);if(!Q)return;let X=this._streamMapping.get(Q);if(X)X.cleanup()}closeStandaloneSSEStream(){let Y=this._streamMapping.get(this._standaloneSseStreamId);if(Y)Y.cleanup()}async send(Y,Q){let X=Q?.relatedRequestId;if(YZ(Y)||xN(Y))X=Y.id;if(X===void 0){if(YZ(Y)||xN(Y))throw Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");let K;if(this._eventStore)K=await this._eventStore.storeEvent(this._standaloneSseStreamId,Y);let W=this._streamMapping.get(this._standaloneSseStreamId);if(W===void 0)return;if(W.controller&&W.encoder)this.writeSSEEvent(W.controller,W.encoder,Y,K);return}let J=this._requestToStreamMapping.get(X);if(!J)throw Error(`No connection established for request ID: ${String(X)}`);let G=this._streamMapping.get(J);if(!this._enableJsonResponse&&G?.controller&&G?.encoder){let K;if(this._eventStore)K=await this._eventStore.storeEvent(J,Y);this.writeSSEEvent(G.controller,G.encoder,Y,K)}if(YZ(Y)||xN(Y)){this._requestResponseMap.set(X,Y);let K=Array.from(this._requestToStreamMapping.entries()).filter(([Z,H])=>H===J).map(([Z])=>Z);if(K.every((Z)=>this._requestResponseMap.has(Z))){if(!G)throw Error(`No connection established for request ID: ${String(X)}`);if(this._enableJsonResponse&&G.resolveJson){let Z={"Content-Type":"application/json"};if(this.sessionId!==void 0)Z["mcp-session-id"]=this.sessionId;let H=K.map(($)=>this._requestResponseMap.get($));if(H.length===1)G.resolveJson(new Response(JSON.stringify(H[0]),{status:200,headers:Z}));else G.resolveJson(new Response(JSON.stringify(H),{status:200,headers:Z}))}else G.cleanup();for(let Z of K)this._requestResponseMap.delete(Z),this._requestToStreamMapping.delete(Z)}}}}var Xk=S(()=>{vQ()});var mk0="SELF",Hi=(Y)=>{return typeof Y==="object"&&Y!==null&&"handler"in Y&&"events"in Y&&typeof Y.handler==="function"&&Array.isArray(Y.events)},lk0=(Y)=>{return typeof Y==="object"&&Y!==null&&"handler"in Y&&"events"in Y&&typeof Y.handler==="function"&&Array.isArray(Y.events)},uk0="::",dk0=(Y)=>{let Q=Y.indexOf(uk0);if(Q===-1)return null;let X=Y.substring(0,Q),J=Y.substring(Q+uk0.length);return[X,J]},sR6=(Y)=>{if(!Y.startsWith("cron/"))return null;let Q=Y.substring(5),X=Q.indexOf("/");if(X===-1)return null;let J=Q.substring(0,X),G=Q.substring(X+1);return[J,G]},pk0=(Y)=>{if(Hi(Y))return[];return Object.keys(Y)},tR6=(Y,Q)=>{if(Hi(Y))return Y.events;let X=Y[Q];if(!X)return[];if(lk0(X))return X.events;return Object.keys(X)},Ki=(Y,Q,X)=>{if(Y===mk0){if(!X)return console.warn("[Event] SELF binding used but no connectionId available"),null;return X}let J=Q[Y];if(!tq1(J))return console.warn(`[Event] Binding "${Y}" not found in state`),null;return J.value},eR6=(Y,Q,X)=>{let J=Q;if(Hi(Y)){let K=[];for(let W of Y.events){let Z=dk0(W);if(!Z){console.warn(`[Event] Global handler event "${W}" must be prefixed with BINDING:: (e.g., "SELF::${W}" or "DATABASE::${W}")`);continue}let[H,$]=Z,F=Ki(H,J,X);if(!F)continue;K.push({eventType:$,publisher:F})}return K}let G=[];for(let K of pk0(Y)){let W=Ki(K,J,X);if(!W)continue;let Z=tR6(Y,K);for(let H of Z)G.push({eventType:H,publisher:W})}return G},YI6=(Y)=>{let Q=new Map;for(let X of Y){let J=X.source,G=Q.get(J)||[];G.push(X),Q.set(J,G)}return Q},QI6=(Y)=>{let Q=new Map;for(let X of Y){let J=X.type,G=Q.get(J)||[];G.push(X),Q.set(J,G)}return Q},XI6=(Y)=>{let Q={},X={},J=!1,G=0,K=[];for(let W of Y){if(W.results)Object.assign(X,W.results);if(W.success===!1){if(J=!0,W.error)K.push(W.error)}if(W.processedCount!==void 0)G+=W.processedCount}if(Object.keys(X).length>0)Q.results=X;if(Q.success=!J,K.length>0)Q.error=K.join("; ");if(G>0)Q.processedCount=G;return Q},JI6=async(Y,Q,X,J,G)=>{let K=J;if(Hi(Y)){let F=new Set;for(let B of Y.events){let U=dk0(B);if(!U)continue;let[z,D]=U,L=Ki(z,K,G);if(!L)continue;F.add(`${L}:${D}`)}let V=Q.filter((B)=>{let U=`${B.source}:${B.type}`;return F.has(U)});if(V.length===0)return{success:!0};try{return await Y.handler({events:V},X)}catch(B){return{success:!1,error:B instanceof Error?B.message:String(B)}}}let W=new Map;for(let F of pk0(Y)){let V=Ki(F,K,G);if(V)W.set(V,F)}let Z=YI6(Q),H=[];for(let[F,V]of Z){let B=W.get(F);if(!B)continue;let U=Y[B];if(!U)continue;if(lk0(U)){H.push((async()=>{try{return await U.handler({events:V},X)}catch(L){let w={};for(let E of V)w[E.id]={success:!1,error:L instanceof Error?L.message:String(L)};return{results:w}}})());continue}let z=U,D=QI6(V);for(let[L,w]of D){let E=z[L];if(!E)continue;H.push((async()=>{try{let T=await E({events:w},X),C={};for(let P of w)C[P.id]=T;return{results:C}}catch(T){let C={};for(let P of w)C[P.id]={success:!1,error:T instanceof Error?T.message:String(T)};return{results:C}}})())}}let $=await Promise.all(H);if($.length===0)return{success:!0};return XI6($)},$i;var GB1=S(()=>{Ji();$i={subscriptions:eR6,execute:JI6,parseCron:sR6}});function o$(Y){return{...Y,execute:(Q)=>{return Y.execute({...Q,runtimeContext:Jk(Q.runtimeContext)})}}}function WB1(Y){return Y&&"streamable"in Y&&Y.streamable===!0}var Jk=(Y)=>{let Q=bS.getStore();if(!Q){if(Y)return Y;throw Error("Missing context, did you forget to call State.bind?")}return Q},GI6=(Y,Q)=>{let X=Q;return typeof X[Y]<"u"?X[Y]:Q?.MESH_REQUEST_CONTEXT?.state?.[Y]},WI6=({events:Y,configuration:{state:Q,scopes:X,onChange:J}={}}={})=>{let G=Q?q.toJSONSchema(Q):{type:"object",properties:{}},K=String(Y?.bus??"EVENT_BUS");return[...J||Y?[o$({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:q.object({state:Q??q.unknown(),scopes:q.array(q.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')")}),outputSchema:q.object({}),execute:async(W)=>{let Z=W.context.state;await J?.(W.runtimeContext.env,{state:Z,scopes:W.context.scopes});let H=GI6(K,W.runtimeContext.env);if(Y&&Z&&H){let $=W.runtimeContext.env.MESH_REQUEST_CONTEXT?.connectionId,F=$i.subscriptions(Y?.handlers??{},Z,$);if(await H.EVENT_SYNC_SUBSCRIPTIONS({subscriptions:F}),$){let V=F.filter((B)=>B.eventType.startsWith("cron/")&&B.publisher===$);await Promise.all(V.map(async(B)=>{let U=$i.parseCron(B.eventType);if(U){let[,z]=U;await H.EVENT_PUBLISH({type:B.eventType,cron:z})}}))}}return Promise.resolve({})}})]:[],...Y?.handlers?[o$({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:Gi,outputSchema:Wi,execute:async(W)=>{let Z=W.runtimeContext.env,H=Z.MESH_REQUEST_CONTEXT?.state,$=Z.MESH_REQUEST_CONTEXT?.connectionId;return $i.execute(Y.handlers,W.context.events,Z,H,$)}})]:[],o$({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:q.object({}),outputSchema:q.object({stateSchema:q.unknown(),scopes:q.array(q.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:G,scopes:[...X??[],...Y?[`${K}::EVENT_SYNC_SUBSCRIPTIONS`]:[]]})}})]},ck0=(Y)=>{let Q=async(G)=>{await Y.before?.(G);let K=new IU({name:"@deco/mcp-api",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}}}),Z=await(typeof Y.tools==="function"?Y.tools:async(B)=>{if(typeof Y.tools==="function")return await Y.tools(B);return await Promise.all(Y.tools?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);Z.push(...WI6(Y));for(let B of Z)K.registerTool(B.id,{_meta:{streamable:WB1(B),...B._meta??{}},description:B.description,annotations:B.annotations,inputSchema:B.inputSchema&&"shape"in B.inputSchema?B.inputSchema.shape:q.object({}).shape,outputSchema:WB1(B)?q.object({bytes:q.record(q.string(),q.number())}).shape:B.outputSchema&&typeof B.outputSchema==="object"&&("shape"in B.outputSchema)?B.outputSchema.shape:void 0},async(U)=>{let z=await B.execute({context:U,runtimeContext:Jk()});if(WB1(B)&&z instanceof Response)return{structuredContent:{streamable:!0,status:z.status,statusText:z.statusText},content:[{type:"text",text:`Streaming response: ${z.status} ${z.statusText}`}]};return{structuredContent:z,content:[{type:"text",text:JSON.stringify(z)}]}});let $=await(typeof Y.prompts==="function"?Y.prompts:async(B)=>{if(typeof Y.prompts==="function")return await Y.prompts(B);return await Promise.all(Y.prompts?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);for(let B of $)K.registerPrompt(B.name,{title:B.title,description:B.description,argsSchema:B.argsSchema?B.argsSchema:q.object({}).shape},async(U)=>{return await B.execute({args:U,runtimeContext:Jk()})});let V=await(typeof Y.resources==="function"?Y.resources:async(B)=>{if(typeof Y.resources==="function")return await Y.resources(B);return await Promise.all(Y.resources?.flatMap(async(U)=>{let D=await U(B);if(Array.isArray(D))return D;return[D]})??[]).then((U)=>U.flat())})(G);for(let B of V)K.resource(B.name,B.uri,{description:B.description,mimeType:B.mimeType},async(U)=>{let z=await B.read({uri:U,runtimeContext:Jk()}),D={uri:z.uri};if(z.mimeType)D.mimeType=z.mimeType;if(z.text!==void 0)return{contents:[{uri:z.uri,mimeType:z.mimeType,text:z.text}]};else if(z.blob!==void 0)return{contents:[{uri:z.uri,mimeType:z.mimeType,blob:z.blob}]};return{contents:[{uri:z.uri,mimeType:z.mimeType,text:""}]}});return{server:K,tools:Z,prompts:$,resources:V}};return{fetch:async(G,K)=>{let{server:W}=await Q(K),Z=new r$;await W.connect(Z);try{let H=await Z.handleRequest(G),$=H.headers.get("content-type");if(!($?.includes("text/event-stream")||$?.includes("application/json-rpc"))){console.debug("[MCP Transport] Closing transport for non-streaming response");try{await Z.close?.()}catch{}}else console.debug("[MCP Transport] Keeping transport open for streaming response (Content-Type: %s)",$);return H}catch(H){console.debug("[MCP Transport] Closing transport due to error:",H instanceof Error?H.message:H);try{await Z.close?.()}catch{}throw H}},callTool:async({toolCallId:G,toolCallInput:K})=>{let W=bS.getStore();if(!W)throw Error("Missing state, did you forget to call State.bind?");let Z=W?.env,{tools:H}=await Q(Z),F=H.find((V)=>V.id===G)?.execute;if(!F)throw Error(`Tool ${G} not found or does not have an execute function`);return F({context:K,runtimeContext:Jk()})}}};var Fi=S(()=>{Qk();_x();Xk();l1();GB1();eq1();GB1()});var ZI6=({env:Y,server:Q,url:X})=>{Y.SELF=new Proxy({},{get:(J,G)=>{if(G==="toJSON")return null;return async(K)=>{return await Q.callTool({toolCallId:G,toolCallInput:K})}}}),Y.IS_LOCAL=(X?.startsWith("http://localhost")||X?.startsWith("http://127.0.0.1"))??!1},nk0=(Y)=>()=>{return{...Y??{}}},KI6=({env:Y,server:Q,tokenOrContext:X,url:J,authToken:G})=>{let K=Y,W=G?G.split(" ")[1]:void 0,Z;if(typeof X==="string"){let H=g9(X),$=H.metadata??{};Z={authorization:W,state:H.state??$.state??{},token:X,meshUrl:H.meshUrl??$.meshUrl,connectionId:H.connectionId??$.connectionId,organizationId:H.organizationId??$.organizationId,organizationName:H.organizationName??$.organizationName,organizationSlug:H.organizationSlug??$.organizationSlug,ensureAuthenticated:nk0(H.user??H.sub)}}else if(typeof X==="object"){Z=X;let H=g9(X.token),$=H.metadata??{},F=H.appName;Z.authorization??=W,Z.callerApp=F,Z.connectionId??=H.connectionId??$.connectionId,Z.ensureAuthenticated=nk0(H.user??H.sub)}else Z={state:{},authorization:W,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return K.MESH_REQUEST_CONTEXT=Z,Z.state=qk0(Z),ZI6({env:K,server:Q,url:J}),K},HI6,ik0=(Y)=>{let Q=ck0(Y),X=Y.cors??HI6,J=Y.oauth,G=J?Mk0(J):null,K=async(W,Z,H)=>{let $=new URL(W.url);if(G){if($.pathname==="/.well-known/oauth-protected-resource"||$.pathname==="/mcp/.well-known/oauth-protected-resource")return G.handleProtectedResourceMetadata(W);if($.pathname==="/.well-known/oauth-authorization-server")return G.handleAuthorizationServerMetadata(W);if($.pathname==="/authorize")return G.handleAuthorize(W);if($.pathname==="/oauth/callback")return G.handleOAuthCallback(W);if($.pathname==="/token"&&W.method==="POST")return G.handleToken(W);if(($.pathname==="/register"||$.pathname==="/mcp/register")&&W.method==="POST")return G.handleClientRegistration(W)}if($.pathname==="/mcp"){if(W.method==="GET")return new Response("Method not allowed",{status:405});if(G&&!G.hasAuth(W)){let F=W.clone();try{if((await F.json())?.method!=="tools/list")return G.createUnauthorizedResponse(W)}catch{return G.createUnauthorizedResponse(W)}}return Q.fetch(W,Z,H)}if($.pathname.startsWith("/mcp/call-tool")){let F=$.pathname.split("/").pop();if(!F)return new Response("Not found",{status:404});let V=await W.json(),B=await Q.callTool({toolCallId:F,toolCallInput:V});if(B instanceof Response)return B;return new Response(JSON.stringify(B),{headers:{"Content-Type":"application/json"}})}return Y.fetch?.(W,Z,H)||new Response("Not found",{status:404})};return{fetch:async(W,Z,H)=>{if(new URL(W.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(X!==!1&&W.method==="OPTIONS")return Uk0(W,X??{});let $=KI6({authToken:W.headers.get("authorization")??null,env:{...process.env,...Z},server:Q,tokenOrContext:W.headers.get("x-mesh-token")??void 0,url:W.url}),F=await bS.run({req:W,env:$,ctx:H},async()=>await K(W,$,H));if(X!==!1)return zk0(F,W,X??{});return F}}};var ak0=S(()=>{t5();Ji();Dk0();eq1();Fi();Fi();Ji();oq1();HI6={origin:(Y)=>{if(Y.includes("localhost")||Y.includes("127.0.0.1"))return Y;return Y},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});function Vi(Y){return Buffer.from(String(Y),"utf8").toString("base64")}function qi(Y){if(!Y)return null;try{let Q=Buffer.from(Y,"base64").toString("utf8"),X=Number.parseInt(Q,10);return Number.isNaN(X)||X<0?null:X}catch{return null}}function LX(Y){if(!Y?.length)return[];return Array.from(new Set(Y.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.toLowerCase())))}function pD(Y){if(!Y)return[];return LX(Y.split(","))}function Bi(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}function Ui(Y){return Y?.["mcp.mesh"]??{}}function zi(Y){return Y.length?Y.join(","):null}function $I6(Y,Q){if(!Q?.length)return;let X=Y;for(let J of Q){if(X===null||X===void 0)return;if(typeof X!=="object")return;X=X[J]}return X}function FI6(Y,Q,X){if(!Q)return!1;if(Q==="eq")return Y===X;if(Q==="contains"||Q==="like"){let J=String(Y??"").toLowerCase(),G=String(X??"").toLowerCase();return J.includes(G)}if(Q==="in"){if(!Array.isArray(X))return!1;return X.includes(Y)}if(Q==="gt")return Number(Y)>Number(X);if(Q==="gte")return Number(Y)>=Number(X);if(Q==="lt")return Number(Y)<Number(X);if(Q==="lte")return Number(Y)<=Number(X);return!1}function Gk(Y,Q){if(!Q)return!0;if(Array.isArray(Q.conditions)&&Q.conditions.length){if(Q.operator==="and")return Q.conditions.every((X)=>Gk(Y,X));if(Q.operator==="or")return Q.conditions.some((X)=>Gk(Y,X));if(Q.operator==="not")return!Q.conditions.some((X)=>Gk(Y,X))}return FI6($I6(Y,Q.field),Q.operator,Q.value)}class Wk{db;constructor(Y){this.db=Y}async create(Y){let Q=new Date().toISOString(),X=Y._meta??{},J=Ui(X),G=LX(J.tags),K=LX(J.categories),W={id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:JSON.stringify(X),tags:zi(G),categories:zi(K),is_public:Y.is_public?1:0,is_unlisted:Y.is_unlisted?1:0,created_at:Q,updated_at:Q,created_by:Y.created_by??null};await this.db.insertInto("private_registry_item").values(W).execute();let Z=await this.findById(Y.organization_id,Y.id);if(!Z)throw Error(`Failed to create registry item "${Y.id}"`);return Z}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async findByIdOrName(Y,Q){let X=await this.findById(Y,Q);if(X)return X;let J=await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("title","=",Q).executeTakeFirst();return J?this.deserialize(J):null}async update(Y,Q,X){let J=await this.findById(Y,Q);if(!J)throw Error(`Registry item not found: ${Q}`);let G=X._meta??J._meta??{},K=Ui(G),W=LX(K.tags),Z=LX(K.categories),H={updated_at:new Date().toISOString()};if(X.title!==void 0)H.title=X.title;if(X.description!==void 0)H.description=X.description;if(X.server!==void 0)H.server_json=JSON.stringify(X.server);if(X._meta!==void 0)H.meta_json=JSON.stringify(X._meta);if(X._meta!==void 0)H.tags=zi(W),H.categories=zi(Z);if(X.is_public!==void 0)H.is_public=X.is_public?1:0;if(X.is_unlisted!==void 0)H.is_unlisted=X.is_unlisted?1:0;await this.db.updateTable("private_registry_item").set(H).where("organization_id","=",Y).where("id","=",Q).execute();let $=await this.findById(Y,Q);if(!$)throw Error(`Registry item not found after update: ${Q}`);return $}async delete(Y,Q){let X=await this.findById(Y,Q);if(!X)return null;return await this.db.deleteFrom("private_registry_item").where("organization_id","=",Y).where("id","=",Q).execute(),X}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).orderBy("created_at","desc");if(!Q.includeUnlisted)X=X.where("is_unlisted","=",0);let G=(await X.execute()).map((z)=>this.deserialize(z)),K=LX(Q.tags),W=LX(Q.categories),Z=G.filter((z)=>{let D=Ui(z._meta),L=LX(D.tags),w=LX(D.categories),E=K.length===0||K.every((P)=>L.includes(P)),T=W.length===0||W.every((P)=>w.includes(P)),C=Gk(z,Q.where);return E&&T&&C}),$=qi(Q.cursor)??Q.offset??0,F=Q.limit??24,V=Z.slice($,$+F),B=$+F<Z.length,U=B?Vi($+F):void 0;return{items:V,totalCount:Z.length,hasMore:B,nextCursor:U}}async listPublic(Y,Q={}){let J=(await this.db.selectFrom("private_registry_item").selectAll().where("organization_id","=",Y).where("is_public","=",1).where("is_unlisted","=",0).orderBy("created_at","desc").execute()).map((U)=>this.deserialize(U)),G=LX(Q.tags),K=LX(Q.categories),W=J.filter((U)=>{let z=Ui(U._meta),D=LX(z.tags),L=LX(z.categories),w=G.length===0||G.every((C)=>D.includes(C)),E=K.length===0||K.every((C)=>L.includes(C)),T=Gk(U,Q.where);return w&&E&&T}),H=qi(Q.cursor)??Q.offset??0,$=Q.limit??24,F=W.slice(H,H+$),V=H+$<W.length,B=V?Vi(H+$):void 0;return{items:F,totalCount:W.length,hasMore:V,nextCursor:B}}async getFilters(Y,Q){let X=this.db.selectFrom("private_registry_item").select(["tags","categories"]).where("organization_id","=",Y);if(Q?.publicOnly)X=X.where("is_public","=",1);if(!Q?.includeUnlisted)X=X.where("is_unlisted","=",0);let J=await X.execute(),G=new Map,K=new Map;for(let Z of J){for(let H of pD(Z.tags))G.set(H,(G.get(H)??0)+1);for(let H of pD(Z.categories))K.set(H,(K.get(H)??0)+1)}let W=(Z)=>Array.from(Z.entries()).map(([H,$])=>({value:H,count:$})).sort((H,$)=>H.value.localeCompare($.value));return{tags:W(G),categories:W(K)}}async search(Y,Q={},X){let J=this.db.selectFrom("private_registry_item").select(["id","title","description","meta_json","server_json","tags","categories","is_public","is_unlisted"]).where("organization_id","=",Y).orderBy("created_at","desc");if(X?.publicOnly)J=J.where("is_public","=",1);if(!X?.includeUnlisted)J=J.where("is_unlisted","=",0);let G=await J.execute(),K=Q.query?.trim().toLowerCase(),W=LX(Q.tags),Z=LX(Q.categories),H=G.filter((L)=>{if(K){let w=Bi(L.server_json,{}),T=Bi(L.meta_json,{})?.["mcp.mesh"]?.short_description??"";if(![L.id,L.title,L.description??"",w.name??"",w.description??"",T].join(" ").toLowerCase().includes(K))return!1}if(W.length>0){let w=LX(pD(L.tags));if(!W.every((E)=>w.includes(E)))return!1}if(Z.length>0){let w=LX(pD(L.categories));if(!Z.every((E)=>w.includes(E)))return!1}return!0}),F=qi(Q.cursor)??0,V=Q.limit??20,B=H.slice(F,F+V),U=F+V<H.length,z=U?Vi(F+V):void 0;return{items:B.map((L)=>({id:L.id,title:L.title,tags:pD(L.tags),categories:pD(L.categories),is_public:L.is_public===1,is_unlisted:L.is_unlisted===1})),totalCount:H.length,hasMore:U,nextCursor:z}}deserialize(Y){let Q=Bi(Y.server_json,{}),X=Bi(Y.meta_json,{});return{id:Y.id,name:typeof Q.name==="string"?Q.name:void 0,title:Y.title,description:Y.description,_meta:X,server:Q,is_public:Y.is_public===1,is_unlisted:Y.is_unlisted===1,created_at:Y.created_at,updated_at:Y.updated_at,...Y.created_by?{created_by:Y.created_by}:{}}}}var ZB1=()=>{};var Di,VI6,Oi,pZ,KB1,qI6,eq,jA,AG,cD,HB1,rk0,$B1,ok0,FB1,sk0,VB1,tk0,SA,BI6,Zk,UI6,Ni,qB1,ek0,Yv0,BB1,Qv0,Xv0,Jv0,Gv0,Wv0,Zv0,Kv0,Hv0,zI6,UB1,$v0,Fv0,zB1,Vv0;var cY=S(()=>{wG();l1();Di=q.object({name:q.string(),title:q.string().optional(),description:q.string().optional(),version:q.string().optional(),websiteUrl:q.string().optional(),icons:q.array(q.object({src:q.string()})).optional(),remotes:q.array(q.object({type:q.string().optional(),url:q.string().optional(),name:q.string().optional(),title:q.string().optional(),description:q.string().optional()})).optional(),packages:q.array(q.object({identifier:q.string(),version:q.string().optional()})).optional(),repository:q.object({url:q.string().optional(),source:q.string().optional(),subfolder:q.string().optional()}).optional()}),VI6=q.object({name:q.string(),description:q.string().nullable().optional()}),Oi=q.object({"mcp.mesh":q.object({verified:q.boolean().optional(),tags:q.array(q.string()).optional(),categories:q.array(q.string()).optional(),friendly_name:q.string().nullable().optional(),short_description:q.string().max(160).nullable().optional(),owner:q.string().nullable().optional(),readme:q.string().max(50000).nullable().optional(),readme_url:q.string().url().nullable().optional(),has_remote:q.boolean().optional(),has_oauth:q.boolean().optional(),tools:q.array(VI6).optional()}).optional()}).catchall(q.unknown()),pZ=q.object({id:q.string(),name:q.string().optional(),title:q.string(),description:q.string().nullable().optional(),_meta:Oi.optional(),server:Di,is_public:q.boolean().optional(),created_at:q.string(),updated_at:q.string(),created_by:q.string().optional()}),KB1=q.object({id:q.string(),title:q.string(),description:q.string().nullable().optional(),_meta:Oi.optional(),server:Di,is_public:q.boolean().optional()}),qI6=q.object({title:q.string().optional(),description:q.string().nullable().optional(),_meta:Oi.optional(),server:Di.optional(),is_public:q.boolean().optional()}),eq=dZ.extend({tags:q.array(q.string()).optional().describe("Filter by tags (AND semantics)"),categories:q.array(q.string()).optional().describe("Filter by categories (AND semantics)"),cursor:q.string().optional().describe("Pagination cursor")}).describe("List registry items with optional filtering and pagination."),jA=q.object({items:q.array(pZ),totalCount:q.number(),hasMore:q.boolean().optional(),nextCursor:q.string().optional()}),AG=q.object({id:q.string().optional().describe("Registry item ID"),name:q.string().optional().describe("Registry item name (alias for id)")}).refine((Y)=>Y.id||Y.name,{message:"At least one of 'id' or 'name' is required"}).describe("Get a registry item by ID or name."),cD=q.object({item:pZ.nullable()}),HB1=q.object({data:KB1}),rk0=q.object({item:pZ}),$B1=q.object({items:q.array(KB1).min(1)}),ok0=q.object({created:q.number(),errors:q.array(q.object({id:q.string(),error:q.string()}))}),FB1=q.object({id:q.string(),data:qI6}),sk0=q.object({item:pZ}),VB1=q.object({id:q.string()}),tk0=q.object({item:pZ}),SA=q.object({tags:q.array(q.object({value:q.string(),count:q.number()})),categories:q.array(q.object({value:q.string(),count:q.number()}))}),BI6=q.enum(["description","short_description","tags","categories","readme"]),Zk=q.object({query:q.string().optional().describe("Free-text search across id, title, description, server name"),tags:q.array(q.string()).optional().describe("Filter by tags (AND)"),categories:q.array(q.string()).optional().describe("Filter by categories (AND)"),limit:q.number().int().min(1).max(100).optional().describe("Max results (default 20)"),cursor:q.string().optional().describe("Pagination cursor")}).describe("Lightweight search returning minimal fields (id, title, tags, categories, is_public)."),UI6=q.object({id:q.string(),title:q.string(),tags:q.array(q.string()),categories:q.array(q.string()),is_public:q.boolean()}),Ni=q.object({items:q.array(UI6),totalCount:q.number(),hasMore:q.boolean().optional(),nextCursor:q.string().optional()}),qB1=q.object({type:BI6.describe("Which content to generate"),llmConnectionId:q.string().describe("Connection ID of a language model"),modelId:q.string().describe("Model ID to use"),context:q.object({name:q.string().optional(),provider:q.string().optional(),url:q.string().optional(),owner:q.string().optional(),repositoryUrl:q.string().optional(),description:q.string().optional(),shortDescription:q.string().optional(),tags:q.array(q.string()).optional(),categories:q.array(q.string()).optional(),availableTags:q.array(q.string()).optional(),availableCategories:q.array(q.string()).optional(),tools:q.array(q.object({name:q.string(),description:q.string().nullable().optional()})).optional()})}),ek0=q.object({result:q.string().optional(),items:q.array(q.string()).optional()}),Yv0=q.enum(["pending","approved","rejected"]),BB1=q.object({id:q.string(),organization_id:q.string(),requested_id:q.string().nullable().optional(),status:Yv0,title:q.string(),description:q.string().nullable().optional(),_meta:Oi.optional(),server:Di,requester_name:q.string().nullable().optional(),requester_email:q.string().nullable().optional(),reviewer_notes:q.string().nullable().optional(),created_at:q.string(),updated_at:q.string()}),Qv0=q.object({status:Yv0.optional(),limit:q.number().int().min(1).max(200).optional(),offset:q.number().int().min(0).optional(),sortBy:q.enum(["created_at","title"]).optional(),sortDirection:q.enum(["asc","desc"]).optional()}),Xv0=q.object({items:q.array(BB1),totalCount:q.number()}),Jv0=q.object({id:q.string(),status:q.enum(["approved","rejected"]),reviewerNotes:q.string().nullable().optional()}),Gv0=q.object({item:BB1}),Wv0=q.object({pending:q.number()}),Zv0=q.object({id:q.string()}),Kv0=q.object({item:BB1.nullable()}),Hv0=q.object({data:KB1,requester:q.object({name:q.string().optional(),email:q.string().email().optional()}).optional()}),zI6=q.object({id:q.string(),name:q.string(),prefix:q.string(),createdAt:q.string()}),UB1=q.object({name:q.string().min(1).max(64).describe("A descriptive name for this key")}),$v0=q.object({id:q.string(),name:q.string(),prefix:q.string(),key:q.string().describe("The full API key \u2014 shown only once!"),createdAt:q.string()}),Fv0=q.object({items:q.array(zI6)}),zB1=q.object({keyId:q.string()}),Vv0=q.object({success:q.boolean(),keyId:q.string()})});function DI6(Y,Q){let X=o$({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",inputSchema:eq,outputSchema:jA,execute:async({context:Z})=>{return await Y.listPublic(Q,{limit:Z.limit,offset:Z.offset,cursor:Z.cursor,tags:Z.tags,categories:Z.categories,where:Z.where})}}),J=o$({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",inputSchema:AG,outputSchema:cD,execute:async({context:Z})=>{let H=Z.id??Z.name;if(!H)return{item:null};let $=await Y.findByIdOrName(Q,H);if($&&$.is_public)return{item:$};return{item:null}}}),G=o$({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",inputSchema:AG,outputSchema:q.object({versions:q.array(cD.shape.item)}),execute:async({context:Z})=>{let H=Z.id??Z.name;if(!H)return{versions:[]};let $=await Y.findByIdOrName(Q,H);if($&&$.is_public)return{versions:[$]};return{versions:[]}}}),K=o$({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",inputSchema:Zk,outputSchema:Ni,execute:async({context:Z})=>{return await Y.search(Q,Z,{publicOnly:!0})}}),W=o$({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",inputSchema:q.object({}),outputSchema:SA,execute:async()=>{return await Y.getFilters(Q,{publicOnly:!0})}});return[X,K,J,G,W]}function DB1(Y,Q){let X=Q.db,J=new Wk(X);Y.all("/org/:orgSlug/registry/*",async(G)=>{let K=G.req.param("orgSlug");console.log(`[Public Registry MCP] Request for org slug: ${K}, path: ${G.req.path}`);let W=await X.selectFrom("organization").select(["id","slug","name"]).where("slug","=",K).executeTakeFirst();if(console.log("[Public Registry MCP] Found org:",W),!W)return console.log(`[Public Registry MCP] Organization not found: ${K}`),G.json({error:"Organization not found"},404);let Z=DI6(J,W.id),H=ik0({tools:()=>Z}),$=new URL(G.req.url),F=G.req.path.replace(`/org/${K}/registry`,""),V=new URL(F||"/",$.origin);$.searchParams.forEach((z,D)=>{V.searchParams.set(D,z)}),console.log(`[Public Registry MCP] Rewriting ${$.pathname} to ${V.pathname}`);let B=new Request(V.toString(),{method:G.req.method,headers:G.req.raw.headers,body:G.req.method!=="GET"&&G.req.method!=="HEAD"?G.req.raw.body:void 0}),U={organizationId:W.id,db:X,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await H.fetch(B,U,G)})}var qv0=S(()=>{ak0();Fi();l1();ZB1();cY()});import{randomUUID as OI6}from"crypto";function Bv0(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}class Kk{db;constructor(Y){this.db=Y}async createOrUpdate(Y){let Q=new Date().toISOString(),X=await this.findPendingByRequestedId(Y.organization_id,Y.requested_id);if(X){let W={title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:Y._meta?JSON.stringify(Y._meta):null,requester_name:Y.requester_name??null,requester_email:Y.requester_email??null,updated_at:Q};await this.db.updateTable("private_registry_publish_request").set(W).where("organization_id","=",Y.organization_id).where("id","=",X.id).execute();let Z=await this.findById(Y.organization_id,X.id);if(!Z)throw Error("Failed to update publish request");return Z}let J=OI6(),G={id:J,organization_id:Y.organization_id,requested_id:Y.requested_id,status:"pending",title:Y.title,description:Y.description??null,server_json:JSON.stringify(Y.server),meta_json:Y._meta?JSON.stringify(Y._meta):null,requester_name:Y.requester_name??null,requester_email:Y.requester_email??null,reviewer_notes:null,created_at:Q,updated_at:Q};await this.db.insertInto("private_registry_publish_request").values(G).execute();let K=await this.findById(Y.organization_id,J);if(!K)throw Error("Failed to create publish request");return K}async findPendingByRequestedId(Y,Q){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y).where("requested_id","=",Q).where("status","=","pending").executeTakeFirst();return X?this.deserialize(X):null}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_publish_request").selectAll().where("organization_id","=",Y),J=this.db.selectFrom("private_registry_publish_request").select(($)=>$.fn.countAll().as("count")).where("organization_id","=",Y);if(Q.status)X=X.where("status","=",Q.status),J=J.where("status","=",Q.status);let G=await J.executeTakeFirst(),K=Number(G?.count??0),W=Q.sortBy??"created_at",Z=Q.sortDirection??"desc";if(W==="title")X=X.orderBy("title",Z);else X=X.orderBy("created_at",Z);return{items:(await X.limit(Q.limit??24).offset(Q.offset??0).execute()).map(($)=>this.deserialize($)),totalCount:K}}async updateStatus(Y,Q,X,J){let G={status:X,updated_at:new Date().toISOString(),reviewer_notes:J??null};await this.db.updateTable("private_registry_publish_request").set(G).where("organization_id","=",Y).where("id","=",Q).execute();let K=await this.findById(Y,Q);if(!K)throw Error(`Publish request not found: ${Q}`);return K}async countPending(Y){let Q=await this.db.selectFrom("private_registry_publish_request").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",Y).where("status","=","pending").executeTakeFirst();return Number(Q?.count??0)}async delete(Y,Q){let X=await this.findById(Y,Q);if(!X)return null;return await this.db.deleteFrom("private_registry_publish_request").where("organization_id","=",Y).where("id","=",Q).execute(),X}deserialize(Y){return{id:Y.id,organization_id:Y.organization_id,requested_id:Y.requested_id??null,status:Y.status,title:Y.title,description:Y.description,_meta:Bv0(Y.meta_json,{}),server:Bv0(Y.server_json,{name:""}),requester_name:Y.requester_name,requester_email:Y.requester_email,reviewer_notes:Y.reviewer_notes,created_at:Y.created_at,updated_at:Y.updated_at}}}var OB1=()=>{};import{randomUUID as NI6}from"crypto";async function Uv0(Y){let X=new TextEncoder().encode(Y),J=await crypto.subtle.digest("SHA-256",X);return Array.from(new Uint8Array(J)).map((K)=>K.toString(16).padStart(2,"0")).join("")}function LI6(){let Y=new Uint8Array(32);return crypto.getRandomValues(Y),`prk_${Array.from(Y).map((X)=>X.toString(16).padStart(2,"0")).join("")}`}class Hk{db;constructor(Y){this.db=Y}async generate(Y,Q){let X=NI6(),J=LI6(),G=await Uv0(J),K=J.slice(0,12),W=new Date().toISOString();return await this.db.insertInto("private_registry_publish_api_key").values({id:X,organization_id:Y,name:Q,key_hash:G,prefix:K,created_at:W}).execute(),{entity:{id:X,organization_id:Y,name:Q,prefix:K,created_at:W},key:J}}async list(Y){return await this.db.selectFrom("private_registry_publish_api_key").select(["id","organization_id","name","prefix","created_at"]).where("organization_id","=",Y).orderBy("created_at","desc").execute()}async revoke(Y,Q){return(await this.db.deleteFrom("private_registry_publish_api_key").where("organization_id","=",Y).where("id","=",Q).execute()).length>0}async validate(Y,Q){let X=await Uv0(Q),J=await this.db.selectFrom("private_registry_publish_api_key").select(["id"]).where("organization_id","=",Y).where("key_hash","=",X).executeTakeFirst();return Boolean(J)}async hasKeys(Y){let Q=await this.db.selectFrom("private_registry_publish_api_key").select((X)=>X.fn.countAll().as("count")).where("organization_id","=",Y).executeTakeFirst();return Number(Q?.count??0)>0}}var NB1=()=>{};import{sql as MI6}from"kysely";import{randomUUID as zv0}from"crypto";async function AI6(Y){let Q=new Date().toISOString(),X=zv0(),J=IY.SELF(Y.organizationId),G="registry.publish_request.created",K={requestId:Y.request.id,requestedId:Y.request.requested_id,title:Y.request.title,status:Y.request.status,createdAt:Y.request.created_at,requester:{name:Y.request.requester_name,email:Y.request.requester_email}};await Y.db.insertInto("events").values({id:X,organization_id:Y.organizationId,type:"registry.publish_request.created",source:J,specversion:"1.0",subject:Y.request.id,time:Q,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(K),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Q,updated_at:Q}).execute();let W=await Y.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",Y.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((Z)=>Z.or([Z("publisher","is",null),Z("publisher","=",J)])).execute();if(W.length>0)await Y.db.insertInto("event_deliveries").values(W.map((Z)=>({id:zv0(),event_id:X,subscription_id:Z.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Q}))).execute();try{await MI6`SELECT pg_notify('mesh_events', ${X})`.execute(Y.db)}catch{}}async function PI6(Y,Q){let J=(await Y.selectFrom("organization").select(["id"]).where("id","=",Q).execute())[0];if(J?.id)return J.id;return(await Y.selectFrom("organization").select(["id"]).where("slug","=",Q).execute())[0]?.id??null}async function EI6(Y,Q){let X=await Y.selectFrom("project_plugin_configs").innerJoin("projects","projects.id","project_plugin_configs.project_id").select(["project_plugin_configs.settings as settings"]).where("projects.organization_id","=",Q).where("project_plugin_configs.plugin_id","=",dH).execute();for(let J of X){let G=J.settings,K=typeof G==="string"?(()=>{try{return JSON.parse(G)}catch{return{}}})():G??{};if(K.acceptPublishRequests===!0){let W=K.rateLimitWindow==="minute"?"minute":"hour",Z=K.rateLimitMax,H=typeof Z==="number"&&Number.isFinite(Z)&&Z>=1?Math.floor(Z):Ov0;return{acceptPublishRequests:!0,requireApiToken:K.requireApiToken===!0,rateLimitEnabled:K.rateLimitEnabled===void 0?Dv0:K.rateLimitEnabled===!0,rateLimitWindow:W,rateLimitMax:H}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:Dv0,rateLimitWindow:wI6,rateLimitMax:Ov0}}async function TI6(Y,Q,X){let J=X==="minute"?60000:3600000,G=new Date(Date.now()-J).toISOString(),K=await Y.selectFrom("private_registry_publish_request").select((W)=>W.fn.countAll().as("count")).where("organization_id","=",Q).where("created_at",">=",G).executeTakeFirst();return Number(K?.count??0)}async function CI6(Y,Q,X,J){let G=await Y.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",Q).where((K)=>K.or([K("id","=",X),K("title","=",J)])).executeTakeFirst();return G?{id:String(G.id),title:String(G.title)}:null}function LB1(Y,Q){let{db:X,db:J}=Q,G=new Kk(J),K=new Hk(J);Y.post("/org/:orgRef/registry/publish-request",async(W)=>{let Z=W.req.param("orgRef"),H=await PI6(X,Z);if(!H)return W.json({error:"Organization not found"},404);let $=await EI6(X,H);if(!$.acceptPublishRequests)return W.json({error:"Publish requests are not enabled for this registry."},403);if($.requireApiToken){let z=W.req.header("Authorization"),D=z?.startsWith("Bearer ")?z.slice(7).trim():null;if(!D)return W.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await K.validate(H,D))return W.json({error:"Invalid API key"},401)}if($.rateLimitEnabled){if(await TI6(J,H,$.rateLimitWindow)>=$.rateLimitMax)return W.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:$.rateLimitWindow==="minute"?60:3600},429)}let F;try{F=await W.req.json()}catch{return W.json({error:"Invalid JSON body"},400)}let V=Hv0.safeParse(F);if(!V.success)return W.json({error:"Invalid publish request payload",details:q.treeifyError(V.error)},400);let B=await CI6(J,H,V.data.data.id,V.data.data.title);if(B)return W.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:B},409);let U=await G.createOrUpdate({organization_id:H,requested_id:V.data.data.id,title:V.data.data.title,description:V.data.data.description??null,_meta:V.data.data._meta,server:V.data.data.server,requester_name:V.data.requester?.name??null,requester_email:V.data.requester?.email??null});try{await AI6({db:X,organizationId:H,request:U})}catch(z){console.warn("[private-registry] failed to emit publish-request event:",z)}return W.json({id:U.id,requested_id:U.requested_id,status:U.status},201)})}var Dv0=!0,wI6="hour",Ov0=100;var Nv0=S(()=>{QY();l1();uD();OB1();NB1();cY()});var Lv0=S(()=>{qv0();Nv0()});function Mv0(Y){MB1=Y}function v4(){if(!MB1)throw Error(`Plugin storage not initialized. Make sure the "${dH}" plugin is enabled.`);return MB1}async function RI6(Y){if(!Y.organization)throw Error("Organization context required");return await Y.access.check(),Y}function Z6(Y,Q){return async(X,J)=>{let G=await RI6(J);return Q(X,G)}}function II6(Y){if(!Y)return{};if(typeof Y==="string")try{return JSON.parse(Y)}catch{return{}}if(typeof Y==="object")return Y;return{}}async function $k(Y,Q){let J=(await Y.db.selectFrom("project_plugin_configs").innerJoin("projects","projects.id","project_plugin_configs.project_id").select(["project_plugin_configs.settings as settings"]).where("projects.organization_id","=",Q).where("project_plugin_configs.plugin_id","=",dH).execute()).map((K)=>II6(K.settings)),G={acceptPublishRequests:J.some((K)=>K.acceptPublishRequests===!0),requireApiToken:J.some((K)=>K.requireApiToken===!0),storePrivateOnly:J.some((K)=>K.storePrivateOnly===!0)};if(G.acceptPublishRequests||G.requireApiToken||G.storePrivateOnly)return G;for(let K of J)if(Object.keys(K).length>0)return K;return{}}var MB1=null;var Z9=S(()=>{uD()});import{randomUUID as wv0}from"crypto";function Av0(Y,Q){if(!Y)return Q;try{return JSON.parse(Y)}catch{return Q}}class wB1{db;constructor(Y){this.db=Y}async create(Y){let Q=wv0(),X=new Date().toISOString(),J={id:Q,organization_id:Y.organization_id,status:Y.status??"pending",config_snapshot:Y.config_snapshot?JSON.stringify(Y.config_snapshot):null,total_items:Y.total_items??0,tested_items:0,passed_items:0,failed_items:0,skipped_items:0,current_item_id:null,started_at:Y.started_at??null,finished_at:null,created_at:X};await this.db.insertInto("private_registry_monitor_run").values(J).execute();let G=await this.findById(Y.organization_id,Q);if(!G)throw Error(`Failed to create monitor run ${Q}`);return G}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserializeRun(X):null}async list(Y,Q={}){let X=this.db.selectFrom("private_registry_monitor_run").selectAll().where("organization_id","=",Y),J=this.db.selectFrom("private_registry_monitor_run").select((Z)=>Z.fn.countAll().as("count")).where("organization_id","=",Y);if(Q.status)X=X.where("status","=",Q.status),J=J.where("status","=",Q.status);let G=await J.executeTakeFirst(),K=Number(G?.count??0);return{items:(await X.orderBy("created_at","desc").limit(Q.limit??24).offset(Q.offset??0).execute()).map((Z)=>this.deserializeRun(Z)),totalCount:K}}async update(Y,Q,X){let J={};if(X.total_items!==void 0)J.total_items=X.total_items;if(X.status!==void 0)J.status=X.status;if(X.tested_items!==void 0)J.tested_items=X.tested_items;if(X.passed_items!==void 0)J.passed_items=X.passed_items;if(X.failed_items!==void 0)J.failed_items=X.failed_items;if(X.skipped_items!==void 0)J.skipped_items=X.skipped_items;if(X.current_item_id!==void 0)J.current_item_id=X.current_item_id;if(X.started_at!==void 0)J.started_at=X.started_at;if(X.finished_at!==void 0)J.finished_at=X.finished_at;await this.db.updateTable("private_registry_monitor_run").set(J).where("organization_id","=",Y).where("id","=",Q).execute();let G=await this.findById(Y,Q);if(!G)throw Error(`Monitor run not found: ${Q}`);return G}deserializeRun(Y){return{id:Y.id,organization_id:Y.organization_id,status:Y.status,config_snapshot:Av0(Y.config_snapshot,null),total_items:Number(Y.total_items??0),tested_items:Number(Y.tested_items??0),passed_items:Number(Y.passed_items??0),failed_items:Number(Y.failed_items??0),skipped_items:Number(Y.skipped_items??0),current_item_id:Y.current_item_id,started_at:Y.started_at,finished_at:Y.finished_at,created_at:Y.created_at}}}class AB1{db;constructor(Y){this.db=Y}async create(Y){let Q=wv0(),X=new Date().toISOString(),J={id:Q,run_id:Y.run_id,organization_id:Y.organization_id,item_id:Y.item_id,item_title:Y.item_title,status:Y.status,error_message:Y.error_message??null,connection_ok:Y.connection_ok?1:0,tools_listed:Y.tools_listed?1:0,tool_results:Y.tool_results?JSON.stringify(Y.tool_results):null,agent_summary:Y.agent_summary??null,duration_ms:Y.duration_ms??0,action_taken:Y.action_taken??"none",tested_at:X};await this.db.insertInto("private_registry_monitor_result").values(J).execute();let G=await this.findById(Y.organization_id,Q);if(!G)throw Error("Failed to create test result");return G}async findById(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",Y).where("id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async listByRun(Y,Q,X={}){let J=this.db.selectFrom("private_registry_monitor_result").selectAll().where("organization_id","=",Y).where("run_id","=",Q),G=this.db.selectFrom("private_registry_monitor_result").select((H)=>H.fn.countAll().as("count")).where("organization_id","=",Y).where("run_id","=",Q);if(X.status)J=J.where("status","=",X.status),G=G.where("status","=",X.status);let K=await G.executeTakeFirst(),W=Number(K?.count??0);return{items:(await J.orderBy("tested_at","desc").limit(X.limit??50).offset(X.offset??0).execute()).map((H)=>this.deserialize(H)),totalCount:W}}async update(Y,Q,X){let J={};if(X.status!==void 0)J.status=X.status;if(X.error_message!==void 0)J.error_message=X.error_message;if(X.connection_ok!==void 0)J.connection_ok=X.connection_ok?1:0;if(X.tools_listed!==void 0)J.tools_listed=X.tools_listed?1:0;if(X.tool_results!==void 0)J.tool_results=JSON.stringify(X.tool_results);if(X.agent_summary!==void 0)J.agent_summary=X.agent_summary;if(X.duration_ms!==void 0)J.duration_ms=X.duration_ms;if(X.action_taken!==void 0)J.action_taken=X.action_taken;await this.db.updateTable("private_registry_monitor_result").set(J).where("organization_id","=",Y).where("id","=",Q).execute();let G=await this.findById(Y,Q);if(!G)throw Error(`Monitor result not found: ${Q}`);return G}deserialize(Y){return{id:Y.id,run_id:Y.run_id,organization_id:Y.organization_id,item_id:Y.item_id,item_title:Y.item_title,status:Y.status,error_message:Y.error_message,connection_ok:Y.connection_ok===1,tools_listed:Y.tools_listed===1,tool_results:Av0(Y.tool_results,[]),agent_summary:Y.agent_summary,duration_ms:Number(Y.duration_ms??0),action_taken:Y.action_taken,tested_at:Y.tested_at}}}var Pv0=()=>{};import{randomUUID as jI6}from"crypto";class PB1{db;constructor(Y){this.db=Y}async findByItemId(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).where("item_id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async list(Y){return(await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).orderBy("updated_at","desc").execute()).map((X)=>this.deserialize(X))}async findByConnectionId(Y,Q){let X=await this.db.selectFrom("private_registry_monitor_connection").selectAll().where("organization_id","=",Y).where("connection_id","=",Q).executeTakeFirst();return X?this.deserialize(X):null}async upsert(Y){let Q=await this.findByItemId(Y.organization_id,Y.item_id),X=new Date().toISOString();if(!Q){let G={id:jI6(),organization_id:Y.organization_id,item_id:Y.item_id,connection_id:Y.connection_id,auth_status:Y.auth_status??"none",created_at:X,updated_at:X};await this.db.insertInto("private_registry_monitor_connection").values(G).execute()}else{let G={connection_id:Y.connection_id,auth_status:Y.auth_status??Q.auth_status,updated_at:X};await this.db.updateTable("private_registry_monitor_connection").set(G).where("organization_id","=",Y.organization_id).where("item_id","=",Y.item_id).execute()}let J=await this.findByItemId(Y.organization_id,Y.item_id);if(!J)throw Error("Failed to save monitor connection");return J}async updateAuthStatus(Y,Q,X){return await this.db.updateTable("private_registry_monitor_connection").set({auth_status:X,updated_at:new Date().toISOString()}).where("organization_id","=",Y).where("item_id","=",Q).execute(),this.findByItemId(Y,Q)}deserialize(Y){return{id:Y.id,organization_id:Y.organization_id,item_id:Y.item_id,connection_id:Y.connection_id,auth_status:Y.auth_status,created_at:Y.created_at,updated_at:Y.updated_at}}}var Ev0=()=>{};function Tv0(Y){let Q=Y.db,X={items:new Wk(Q),publishRequests:new Kk(Q),publishApiKeys:new Hk(Q),monitorRuns:new wB1(Q),monitorResults:new AB1(Q),monitorConnections:new PB1(Q)};return Mv0(X),X}var Cv0=S(()=>{Z9();ZB1();OB1();NB1();Pv0();Ev0()});var Rv0;var Iv0=S(()=>{cY();Z9();Rv0={name:"REGISTRY_ITEM_BULK_CREATE",description:"Create many private registry items at once",inputSchema:$B1,outputSchema:ok0,handler:Z6($B1,async(Y,Q)=>{let X=v4(),J=[],G=0;for(let K of Y.items)try{await X.items.create({...K,organization_id:Q.organization.id,created_by:Q.auth.user?.id??null}),G+=1}catch(W){J.push({id:K.id,error:W instanceof Error?W.message:"Unknown error"})}return{created:G,errors:J}})}});function SI6(Y){return Array.from(new Set(Y.map((Q)=>Q.trim().toLowerCase()).filter((Q)=>Q.length>0)))}function kI6(Y){let X=Y.structuredContent?.content?.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text??"").join(`
|
|
1216
1216
|
`).trim();if(X)return X;return Y.content?.filter((J)=>J.type==="text"&&typeof J.text==="string").map((J)=>J.text??"").join(`
|
|
1217
1217
|
`).trim()??""}function vI6(Y){let Q=Y.context,X=JSON.stringify({name:Q.name??"",provider:Q.provider??"",url:Q.url??"",owner:Q.owner??"",repositoryUrl:Q.repositoryUrl??"",description:Q.description??"",shortDescription:Q.shortDescription??"",tags:Q.tags??[],categories:Q.categories??[],availableTags:Q.availableTags??[],availableCategories:Q.availableCategories??[],tools:Q.tools??[]},null,2);if(Y.type==="description")return{system:"You are an assistant that writes concise MCP registry descriptions.",user:`Use the context below to write a clear English description for this MCP server.
|
|
1218
1218
|
Rules:
|
|
@@ -1469,7 +1469,7 @@ ${Y.stack}`;return Q}if(typeof Y==="object"&&Y!==null){let Q=Y,X="";if(typeof Q.
|
|
|
1469
1469
|
${Q.stack}`;return X}try{let G=JSON.stringify(Q,null,2);if(G!=="{}"&&G.length<1000){if(typeof Q.stack==="string"&&Q.stack&&Q.stack.length<2000)return`${G}
|
|
1470
1470
|
|
|
1471
1471
|
Stack trace:
|
|
1472
|
-
${Q.stack}`;return G}}catch{}if(typeof Q.toString==="function")try{let G=Q.toString();if(G!=="[object Object]")return G}catch{}let J=Object.keys(Q);if(J.length>0)return`Object with keys: ${J.join(", ")}`;return"[object Object]"}if(typeof Y==="string")return Y;if(typeof Y==="number"||typeof Y==="boolean")return String(Y);if(typeof Y==="function")return`[Function: ${Y.name||"anon"}]`;if(typeof Y==="symbol")return Y.toString();if(typeof Y==="bigint")return Y.toString();try{return String(Y)}catch{return"Unknown value (could not convert to string)"}}function NO(Y,Q){switch(typeof Q){case"string":return Y.newString(Q);case"number":return Y.newNumber(Q);case"boolean":return Q?Y.true:Y.false;case"undefined":return Y.undefined;case"object":{if(Q===null)return Y.null;if(Array.isArray(Q)){let J=Y.newArray();return Q.forEach((G,K)=>{let W=NO(Y,G);try{Y.setProp(J,String(K),W)}finally{W.dispose?.()}}),J}let X=Y.newObject();for(let[J,G]of Object.entries(Q)){let K=NO(Y,G);try{Y.setProp(X,J,K)}finally{K.dispose?.()}}return X}case"function":{let X=`__hostFn_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return Y.newFunction(X,(...G)=>{try{let K=G.map((Z)=>Y.dump(Z)),W=Q(...K);if(W&&typeof W.then==="function"){let Z=Y.newPromise();return W.then((H)=>{try{let $=NO(Y,H);Z.resolve($),$.dispose()}catch($){let F=OO($),V=Y.newString(`Promise resolution error: ${F}`);Z.reject(V),V.dispose()}finally{Y.runtime.executePendingJobs()}}).catch((H)=>{let $=OO(H),F=Y.newString(`Promise rejection: ${$}`);Z.reject(F),F.dispose(),Y.runtime.executePendingJobs()}),Z.handle}return NO(Y,W)}catch(K){let W=OO(K);return Y.newString(`HostFunctionError: ${W}`)}finally{G.forEach((K)=>K.dispose())}})}case"bigint":return Y.newString(Q.toString());case"symbol":return Y.newString(Q.toString());default:try{return Y.newString(String(Q))}catch{return Y.undefined}}}var ic0=()=>{};function AO1(Y){let Q=Y.runtime.executePendingJobs(100);try{if("unwrap"in Q&&typeof Q.unwrap==="function")Q.unwrap()}finally{if("dispose"in Q&&typeof Q.dispose==="function")Q.dispose()}}async function Or(Y,Q,X){let J=Date.now(),G=Y.resolvePromise(Q);while(!0){AO1(Y);let K=await Promise.race([G,tm6(0).then(()=>null)]);if(K!==null)return K;if(Date.now()-J>X)throw Error(`Timed out after ${X}ms while awaiting a QuickJS promise`)}}async function Dv({tools:Y,code:Q,timeoutMs:X}){let W=[];try{const J=fB(W,await wO1({memoryLimitBytes:33554432,stackSizeBytes:524288}),0);const G=fB(W,J.newContext({interruptAfterMs:X}),0);const K=fB(W,MO1(G),0);try{let F=G.evalCode(Q,"index.mjs",{strip:!0,strict:!0,type:"module"}),V=G.unwrapResult(F),B=NO(G,Y);G.setProp(G.global,"tools",B);let U=G.runtime.hasPendingJob()?G.unwrapResult(await Or(G,V,X)):V;if(U!==V)V.dispose();let z=G.getProp(U,"default"),D=G.typeof(z);if(D!=="function")return z.dispose(),U.dispose(),B.dispose(),{error:`Code must export default a function (tools). Got ${D}. Example: export default async (tools) => { /* ... */ }`,consoleLogs:K.logs};let L=G.callFunction(z,G.undefined,B);B.dispose(),z.dispose(),U.dispose();let w=G.unwrapResult(L),E=await Or(G,w,X);w.dispose();let T=G.unwrapResult(E);if(G.runtime.hasPendingJob())AO1(G);let C=G.dump(T);return T.dispose(),{returnValue:C,consoleLogs:K.logs}}catch(F){return console.log(F),{error:OO(F),consoleLogs:K.logs}}}catch(Z){var H=Z,$=1}finally{Ns(W,H,$)}}async function PO1({input:Y,code:Q,timeoutMs:X}){let W=[];try{const J=fB(W,await wO1({memoryLimitBytes:33554432,stackSizeBytes:524288}),0);const G=fB(W,J.newContext({interruptAfterMs:X}),0);const K=fB(W,MO1(G),0);try{let F=G.evalCode(Q,"index.mjs",{strip:!0,strict:!0,type:"module"}),V=G.unwrapResult(F),B=NO(G,Y);G.setProp(G.global,"input",B);let U=G.runtime.hasPendingJob()?G.unwrapResult(await Or(G,V,X)):V;if(U!==V)V.dispose();let z=G.getProp(U,"default"),D=G.typeof(z);if(D!=="function")return z.dispose(),U.dispose(),B.dispose(),{error:`Code must export default a function (input). Got ${D}. Example: export default (input) => { return input.items.map(i => i.name); }`,consoleLogs:K.logs};let L=G.callFunction(z,G.undefined,B);B.dispose(),z.dispose(),U.dispose();let w=G.unwrapResult(L),E=await Or(G,w,X);w.dispose();let T=G.unwrapResult(E);if(G.runtime.hasPendingJob())AO1(G);let C=G.dump(T);return T.dispose(),{returnValue:C,consoleLogs:K.logs}}catch(F){return console.log(F),{error:OO(F),consoleLogs:K.logs}}}catch(Z){var H=Z,$=1}finally{Ns(W,H,$)}}var tm6=(Y)=>new Promise((Q)=>setTimeout(Q,Y));var ac0=S(()=>{nc0();ic0()});var Nr=S(()=>{ac0()});async function em6(Y,Q){let X=Y.connections.map((K)=>K.connection_id),J=[];for(let K of X){let W=await Q.storage.connections.findById(K);if(W&&W.status==="active")J.push(W)}return J.map((K)=>{let W=Y.connections.find((Z)=>Z.connection_id===K.id);return{connection:K,selectedTools:W?.selected_tools??null,selectedResources:W?.selected_resources??null,selectedPrompts:W?.selected_prompts??null}})}async function rc0(Y,Q){return(await Q.storage.connections.list(Y)).filter((J)=>J.status==="active").map((J)=>({connection:J,selectedTools:null,selectedResources:null,selectedPrompts:null}))}async function Yl6(Y,Q){let X=new Map;for(let B of Y)X.set(B.connection.id,B);let J=Y.map((B)=>B.connection),G=new Map,K=await Promise.allSettled(J.map(async(B)=>{try{let U=await Q.createMCPProxy(B);return{connection:B,proxy:U}}catch(U){return console.warn(`[code-execution] Failed to create proxy for connection ${B.id}:`,U),null}}));for(let B of K)if(B.status==="fulfilled"&&B.value)G.set(B.value.connection.id,B.value);let W=await Promise.allSettled(Array.from(G.entries()).map(async([B,U])=>{try{let D=(await U.proxy.listTools()).tools,L=X.get(B);if(L?.selectedTools&&L.selectedTools.length>0){let w=new Set(L.selectedTools);D=D.filter((E)=>w.has(E.name))}return{connectionId:B,connectionTitle:U.connection.title,tools:D}}catch(z){return console.error(`[code-execution] Failed to list tools for connection ${B}:`,z),null}})),Z=new Set,H=[],$=new Map;for(let B of W){if(B.status!=="fulfilled"||!B.value)continue;let{connectionId:U,connectionTitle:z,tools:D}=B.value;for(let L of D){if(Z.has(L.name))continue;Z.add(L.name),H.push({...L,_meta:{...L._meta,connectionId:U,connectionTitle:z}}),$.set(L.name,U)}}let F=async(B,U)=>{let z=$.get(B);if(!z)return{content:[{type:"text",text:`Tool not found: ${B}`}],isError:!0};let D=G.get(z);if(!D)return{content:[{type:"text",text:`Connection not found for tool: ${B}`}],isError:!0};return await D.proxy.callTool({name:B,arguments:U})},V=[];for(let[,B]of G)V.push(B.proxy.close().catch(()=>{}));return await Promise.all(V),{tools:H,callTool:F}}async function LP(Y){let Q=P0(Y),X;if(Y.connectionId){let J=await Y.storage.virtualMcps.findById(Y.connectionId,Y.organization?.id);if(J)X=await em6(J,Y);else X=await rc0(Q.id,Y)}else X=await rc0(Q.id,Y);return Yl6(X,Y)}function Ql6(Y){return Y.toLowerCase().split(/[\s_\-./]+/).filter((Q)=>Q.length>=2)}function Xl6(Y,Q){let X=0,J=Q.name.toLowerCase(),G=(Q.description??"").toLowerCase(),K=(Q._meta?.connectionTitle??"").toLowerCase();for(let W of Y){if(J===W)X+=10;else if(J.includes(W))X+=3;if(G.includes(W))X+=2;if(K.includes(W))X+=1}return X}function Lr(Y,Q,X){let J=Ql6(Y);if(J.length===0)return Q.slice(0,X);return Q.map((G)=>({tool:G,score:Xl6(J,G)})).filter((G)=>G.score>0).sort((G,K)=>K.score-G.score).slice(0,X).map((G)=>G.tool)}function Mr(Y,Q){let X=new Map(Q.map((G)=>[G.name,G]));return{tools:Y.map((G)=>X.get(G)).filter((G)=>G!==void 0).map((G)=>({name:G.name,description:G.description,connection:G._meta?.connectionTitle??"",inputSchema:G.inputSchema,outputSchema:G.outputSchema})),notFound:Y.filter((G)=>!X.has(G))}}async function wr(Y,Q,X){let J=Object.fromEntries(Q.tools.map((G)=>[G.name,async(K)=>{let W=await Q.callTool(G.name,K??{});if(W.structuredContent&&typeof W.structuredContent==="object")return W.structuredContent;let Z=W.content;if(Z?.[0]?.type==="text"&&Z[0].text)try{return JSON.parse(Z[0].text)}catch{return Z[0].text}return W}]));return Dv({code:Y,tools:J,timeoutMs:X})}function Ov(Y){return{content:[{type:"text",text:JSON.stringify(Y,null,2)}]}}function zB(Y){return{content:[{type:"text",text:JSON.stringify(Y,null,2)}],isError:!0}}function NF(Y){let Q=new Set(Jl6);return Y.filter((X)=>!Q.has(X.name))}var Jl6;var LO=S(()=>{Nr();Jl6=["CODE_EXECUTION_SEARCH_TOOLS","CODE_EXECUTION_DESCRIBE_TOOLS","CODE_EXECUTION_RUN_CODE"]});var EO1;var oc0=S(()=>{G4();zv();LO();EO1=c1({name:"CODE_EXECUTION_SEARCH_TOOLS",description:"Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling CODE_EXECUTION_DESCRIBE_TOOLS for detailed schemas.",annotations:{title:"Search Tools",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hc0,outputSchema:xc0,handler:async(Y,Q)=>{B0(Q),P0(Q),await Q.access.check();let X=await LP(Q),J=Lr(Y.query,X.tools,Y.limit);return{query:Y.query,results:J.map((G)=>({name:G.name,description:G.description,connection:G._meta?.connectionTitle??""})),totalAvailable:X.tools.length}}})});var TO1;var sc0=S(()=>{G4();zv();LO();TO1=c1({name:"CODE_EXECUTION_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after CODE_EXECUTION_SEARCH_TOOLS to get full input/output schemas before executing code.",annotations:{title:"Describe Tools",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gc0,outputSchema:uc0,handler:async(Y,Q)=>{B0(Q),P0(Q),await Q.access.check();let X=await LP(Q);return Mr(Y.tools,X.tools)}})});var CO1;var tc0=S(()=>{G4();zv();LO();CO1=c1({name:"CODE_EXECUTION_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use CODE_EXECUTION_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',annotations:{title:"Run Code",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:mc0,outputSchema:lc0,handler:async(Y,Q)=>{B0(Q),P0(Q),await Q.access.check();let X=await LP(Q);return await wr(Y.code,X,Y.timeoutMs)}})});var ec0=S(()=>{oc0();sc0();tc0();zv()});var Wl6,Zl6,RO1;var Yn0=S(()=>{QY();l1();G4();yS();n$();Wl6=q.object({data:_T.describe("Data for the new connection (id is auto-generated if not provided)")}),Zl6=q.object({item:Y5.describe("The created connection entity")}),RO1=c1({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection in the organization",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Wl6,outputSchema:Zl6,handler:async(Y,Q)=>{B0(Q);let X=P0(Q);await Q.access.check();let J=TY(Q);if(!J)throw Error("User ID required to create connection");let G={...Y.data,organization_id:X.id,created_by:J};if(G.connection_type==="VIRTUAL"){let $=CU(G.connection_url);if(!$)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let F=await Q.storage.virtualMcps.findById($);if(!F)throw Error(`Virtual MCP not found: ${$}`);if(F.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");G.connection_url=RU($)}let K=await sq({id:`pending-${Date.now()}`,title:G.title,connection_type:G.connection_type,connection_url:G.connection_url,connection_token:G.connection_token,connection_headers:G.connection_headers}).catch(()=>null),W=K?.tools?.length?K.tools:null,Z=K?.scopes?.length?K.scopes:null,H=await Q.storage.connections.create({...G,tools:W,configuration_scopes:Z});return await Q.eventBus.publish(X.id,IY.SELF(X.id),{type:"connection.created",data:H}),{item:H}}})});var Kl6,Hl6,Qn0;var Xn0=S(()=>{l1();wG();Kl6=nH.extend({avatar:q.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:q.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:q.string().describe("Virtual MCP ID to use for this assistant"),model:q.object({id:q.string().describe("Model ID"),connectionId:q.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),Hl6=iH("assistant",Kl6),Qn0=[...Hl6]});var Nv,LF,Gn0,$l6,Fl6,Wn0,Vl6,ql6,Bl6,Ul6,zl6,Dl6,Zn0,Ol6,Nl6,Ll6,Ml6,wl6,Al6,Pl6,El6,Tl6,Cl6,UV9,Rl6,zV9,Jn0,Il6,jl6,IO1,Lv;var Ar=S(()=>{l1();lD();wG();Nv=q.lazy(()=>q.union([q.null(),q.string(),q.number(),q.boolean(),q.record(q.string(),Nv),q.array(Nv)])),LF=q.record(q.string(),q.record(q.string(),Nv)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Gn0=q.object({type:q.literal("text"),text:q.string().describe("The text content"),providerOptions:LF}),$l6=q.object({type:q.literal("text"),text:q.string().describe("The text content"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Fl6=q.string().describe("File data as URL string"),Wn0=q.object({type:q.literal("file"),filename:q.string().optional().describe("Optional filename of the file"),data:Fl6,mediaType:q.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:LF}),Vl6=q.object({type:q.literal("file"),mediaType:q.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:q.string().describe("Generated file data as base64 encoded string")}),ql6=q.object({type:q.literal("reasoning"),text:q.string().describe("The reasoning text"),providerOptions:LF}),Bl6=q.object({type:q.literal("reasoning"),text:q.string().describe("The reasoning text"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Ul6=q.object({type:q.literal("tool-call"),toolCallId:q.string().describe("ID of the tool call, used to match with tool result"),toolName:q.string().describe("Name of the tool being called"),input:q.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:q.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:LF}),zl6=q.object({type:q.literal("tool-call"),toolCallId:q.string().describe("ID of the tool call"),toolName:q.string().describe("Name of the tool being called"),input:q.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:q.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Dl6=q.union([q.object({type:q.literal("text"),value:q.string()}),q.object({type:q.literal("json"),value:Nv}),q.object({type:q.literal("error-text"),value:q.string()}),q.object({type:q.literal("error-json"),value:Nv}),q.object({type:q.literal("content"),value:q.array(q.union([q.object({type:q.literal("text"),text:q.string().describe("Text content")}),q.object({type:q.literal("media"),data:q.string().describe("Base-64 encoded media data"),mediaType:q.string().describe("IANA media type")})]))}),q.object({type:q.literal("execution-denied"),reason:q.string().optional()}),q.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),Zn0=q.object({type:q.literal("tool-result"),toolCallId:q.string().describe("ID of the tool call that this result is associated with"),toolName:q.string().describe("Name of the tool that generated this result"),output:Dl6.describe("Result of the tool call"),result:q.unknown().describe("Unknown result of the tool call"),providerOptions:LF}),Ol6=q.object({type:q.literal("tool-result"),toolCallId:q.string().describe("ID of the tool call that this result is associated with"),toolName:q.string().describe("Name of the tool that generated this result"),result:q.any().describe("Result of the tool call (JSON-serializable)"),isError:q.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:q.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Nl6=q.union([q.object({type:q.literal("source"),sourceType:q.literal("url"),id:q.string().describe("The ID of the source"),url:q.string().describe("The URL of the source"),title:q.string().optional().describe("The title of the source"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),q.object({type:q.literal("source"),sourceType:q.literal("document"),id:q.string().describe("The ID of the source"),mediaType:q.string().describe("IANA media type of the document (e.g., application/pdf)"),title:q.string().describe("The title of the document"),filename:q.string().optional().describe("Optional filename of the document"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")})]),Ll6=q.object({role:q.literal("system"),content:q.string().describe("System message content"),providerOptions:LF}),Ml6=q.object({role:q.literal("user"),content:q.array(q.union([Gn0,Wn0])).describe("User message content parts (text or file)"),providerOptions:LF}),wl6=q.object({role:q.literal("assistant"),content:q.array(q.union([Gn0,Wn0,ql6,Ul6,Zn0])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:LF}),Al6=q.object({role:q.literal("tool"),content:q.array(Zn0).describe("Tool message content (tool results)"),providerOptions:LF}),Pl6=q.union([Ll6,Ml6,wl6,Al6]),El6=q.array(Pl6).describe("A list of messages forming the prompt"),Tl6=q.object({prompt:El6.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:q.number().optional().describe("Maximum number of tokens to generate"),temperature:q.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:q.number().optional().describe("Nucleus sampling parameter"),topK:q.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:q.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:q.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:q.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:q.array(q.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:q.union([q.object({type:q.literal("text")}),q.object({type:q.literal("json"),schema:q.any().optional().describe("JSON schema that the generated output should conform to"),name:q.string().optional().describe("Name of output that should be generated"),description:q.string().optional().describe("Description of the output that should be generated")})]).optional().describe("Response format. The output can either be text or JSON. Default is text"),tools:q.array(q.any()).optional().describe("The tools that are available for the model"),toolChoice:q.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:q.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:q.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:q.any().optional().describe("Additional provider-specific options")}),Cl6=q.object({content:q.array(q.union([$l6,Vl6,Bl6,zl6,Ol6,Nl6])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:q.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:q.looseObject({inputTokens:q.number().optional(),outputTokens:q.number().optional(),totalTokens:q.number().optional(),reasoningTokens:q.number().optional()}).describe("Usage information for the language model call"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata"),request:q.object({body:q.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:q.object({id:q.string().optional().describe("ID for the generated response"),timestamp:q.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:q.string().optional().describe("The ID of the response model that was used"),headers:q.record(q.string(),q.string()).optional().describe("Response headers"),body:q.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:q.array(q.any()).describe("Warnings for the call, e.g. unsupported settings")}),UV9=q.object({stream:q.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:q.object({body:q.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:q.object({headers:q.record(q.string(),q.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),Rl6=q.object({supportedUrls:q.record(q.string(),q.array(q.string())).describe("Supported URL patterns by media type for the provider")}),zV9=q.object({modelId:q.string().describe("The ID of the model"),logo:q.string().nullable(),description:q.string().nullable(),capabilities:q.array(q.string()),limits:q.object({contextWindow:q.number(),maxOutputTokens:q.number()}).nullable(),costs:q.object({input:q.number(),output:q.number()}).nullable(),provider:q.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),Jn0=q.object({modelId:q.string().describe("The ID of the model"),callOptions:Tl6}),Il6=nH.extend({logo:q.string().nullable(),description:q.string().nullable(),capabilities:q.array(q.string()),limits:q.object({contextWindow:q.number(),maxOutputTokens:q.number()}).nullable(),costs:q.object({input:q.number(),output:q.number()}).nullable(),provider:q.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),jl6=iH("llm",Il6,{readOnly:!0}),IO1=[{name:"LLM_METADATA",inputSchema:q.object({modelId:q.string().describe("The ID of the model")}),outputSchema:Rl6},{name:"LLM_DO_STREAM",inputSchema:Jn0,streamable:!0},{name:"LLM_DO_GENERATE",inputSchema:Jn0,outputSchema:Cl6},...jl6],Lv=pH(IO1)});function MP(){return!1}function Pr(Y,Q){return Y===IY.DEV_ASSETS(Q)}function wP(Y,Q){let X=G91(Q,Y),J=new Date().toISOString();return{id:X.id??IY.DEV_ASSETS(Y),title:X.title,description:X.description??null,icon:X.icon??null,app_name:X.app_name??null,app_id:X.app_id??null,organization_id:Y,created_by:"system",created_at:J,updated_at:J,connection_type:X.connection_type,connection_url:X.connection_url??null,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:X.metadata??null,tools:Sl6,bindings:["OBJECT_STORAGE"],status:"active"}}var Sl6;var Er=S(()=>{Zi();QY();l1();Sl6=eS.map((Y)=>({name:Y.name,description:`${Y.name} operation for local file storage`,inputSchema:q.toJSONSchema(Y.inputSchema),outputSchema:q.toJSONSchema(Y.outputSchema)}))});function vl6(Y){let Q=[],X=0;while(X<Y.length){let J=Y[X];if(J==="%")Q.push(".*");else if(J==="_")Q.push(".");else if(/[.*+?^${}()|[\]\\]/.test(J))Q.push("\\"+J);else Q.push(J);X++}return Q.join("")}function DB(Y){return typeof Y==="string"||typeof Y==="number"}function Tr(Y,Q){if("conditions"in Q){let{operator:Z,conditions:H}=Q;switch(Z){case"and":return H.every(($)=>Tr(Y,$));case"or":return H.some(($)=>Tr(Y,$));case"not":return!H.every(($)=>Tr(Y,$));default:return!0}}let{field:X,operator:J,value:G}=Q,K=X.join("."),W=jO1(Y,K);switch(J){case"eq":return W===G;case"gt":return DB(W)&&DB(G)&&W>G;case"gte":return DB(W)&&DB(G)&&W>=G;case"lt":return DB(W)&&DB(G)&&W<G;case"lte":return DB(W)&&DB(G)&&W<=G;case"in":return Array.isArray(G)&&G.includes(W);case"like":if(typeof W!=="string"||typeof G!=="string")return!1;if(G.length>100)return!1;let Z=vl6(G);return new RegExp(`^${Z}$`,"i").test(W);case"contains":if(typeof W!=="string"||typeof G!=="string")return!1;return W.toLowerCase().includes(G.toLowerCase());default:return!0}}function jO1(Y,Q){let X=Q.split("."),J=Y;for(let G of X){if(J==null||typeof J!=="object")return;J=J[G]}return J}function _l6(Y,Q){return[...Y].sort((X,J)=>{for(let G of Q){let K=G.field.join("."),W=jO1(X,K),Z=jO1(J,K),H=0;if(W==null&&Z==null)continue;if(W==null)H=G.nulls==="first"?-1:1;else if(Z==null)H=G.nulls==="first"?1:-1;else if(typeof W==="string"&&typeof Z==="string")H=W.localeCompare(Z);else if(typeof W==="number"&&typeof Z==="number")H=W-Z;else H=String(W).localeCompare(String(Z));if(H!==0)return G.direction==="desc"?-H:H}return 0})}var kl6,yl6,fl6,SO1;var Kn0=S(()=>{Qk();Xn0();wG();Ar();Zi();QY();l1();G4();Er();n$();kl6={LLM:IO1,ASSISTANTS:Qn0,OBJECT_STORAGE:eS};yl6=dZ.extend({binding:q.union([q.object({}).passthrough(),q.string()]).optional(),include_virtual:q.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false.")}),fl6=a$(Y5),SO1=c1({name:"COLLECTION_CONNECTIONS_LIST",description:"List all connections in the organization with filtering, sorting, and pagination",annotations:{title:"List Connections",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:yl6,outputSchema:fl6,handler:async(Y,Q)=>{await Q.access.check();let X=P0(Q),J=Y.binding?typeof Y.binding==="string"?(()=>{let B=kl6[Y.binding.toUpperCase()];if(!B)throw Error(`Unknown binding: ${Y.binding}`);return B})():Y.binding:void 0,G=J?Xi(J):void 0,K=await Q.storage.connections.list(X.id,{includeVirtual:Y.include_virtual??!1});if(MP()){let B=J7(),U=IY.DEV_ASSETS(X.id);if(!K.some((z)=>z.id===U)){let z=wP(X.id,B);K.unshift(z)}}let W=G?await Promise.all(K.map(async(B)=>{if(!B.tools||B.tools.length===0)return null;return G.isImplementedBy(B.tools.map((z)=>({name:z.name,inputSchema:z.inputSchema,outputSchema:z.outputSchema})))?B:null})).then((B)=>B.filter((U)=>U!==null)):K;if(Y.where)W=W.filter((B)=>Tr(B,Y.where));if(Y.orderBy&&Y.orderBy.length>0)W=_l6(W,Y.orderBy);let Z=W.length,H=Y.offset??0,$=Y.limit??100,F=W.slice(H,H+$),V=H+$<Z;return{items:F,totalCount:Z,hasMore:V}}})});class JK{db;vault;constructor(Y,Q){this.db=Y;this.vault=Q}async get(Y){let Q=await this.db.selectFrom("downstream_tokens").selectAll().where("connectionId","=",Y).executeTakeFirst();if(!Q)return null;return this.decryptToken(Q)}async upsert(Y){let Q=new Date().toISOString(),X=await this.vault.encrypt(Y.accessToken),J=Y.refreshToken?await this.vault.encrypt(Y.refreshToken):null,G=Y.clientSecret?await this.vault.encrypt(Y.clientSecret):null;return await this.db.transaction().execute(async(K)=>{let W=await K.selectFrom("downstream_tokens").select(["id","createdAt"]).where("connectionId","=",Y.connectionId).executeTakeFirst();if(W)return await K.updateTable("downstream_tokens").set({accessToken:X,refreshToken:J,scope:Y.scope,expiresAt:Y.expiresAt?.toISOString()??null,clientId:Y.clientId,clientSecret:G,tokenEndpoint:Y.tokenEndpoint,updatedAt:Q}).where("id","=",W.id).execute(),{id:W.id,connectionId:Y.connectionId,accessToken:Y.accessToken,refreshToken:Y.refreshToken,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:W.createdAt,updatedAt:Q,clientId:Y.clientId,clientSecret:Y.clientSecret,tokenEndpoint:Y.tokenEndpoint};let Z=p8("dtok");return await K.insertInto("downstream_tokens").values({id:Z,connectionId:Y.connectionId,accessToken:X,refreshToken:J,scope:Y.scope,expiresAt:Y.expiresAt?.toISOString()??null,clientId:Y.clientId,clientSecret:G,tokenEndpoint:Y.tokenEndpoint,createdAt:Q,updatedAt:Q}).execute(),{id:Z,connectionId:Y.connectionId,accessToken:Y.accessToken,refreshToken:Y.refreshToken,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:Q,updatedAt:Q,clientId:Y.clientId,clientSecret:Y.clientSecret,tokenEndpoint:Y.tokenEndpoint}})}async delete(Y){await this.db.deleteFrom("downstream_tokens").where("connectionId","=",Y).execute()}isExpired(Y,Q=0){if(!Y.expiresAt)return!1;let J=(Y.expiresAt instanceof Date?Y.expiresAt:new Date(Y.expiresAt)).getTime();if(Number.isNaN(J))return!0;return J-Q<Date.now()}async decryptToken(Y){let Q=await this.vault.decrypt(Y.accessToken),X=Y.refreshToken?await this.vault.decrypt(Y.refreshToken):null,J=Y.clientSecret?await this.vault.decrypt(Y.clientSecret):null;return{id:Y.id,connectionId:Y.connectionId,accessToken:Q,refreshToken:X,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:Y.createdAt,updatedAt:Y.updatedAt,clientId:Y.clientId,clientSecret:J,tokenEndpoint:Y.tokenEndpoint}}}var Mv=S(()=>{LG()});var bl6,kO1;var Hn0=S(()=>{wG();G4();Mv();Er();yS();n$();bl6=xS(Y5),kO1=c1({name:"COLLECTION_CONNECTIONS_GET",description:"Get connection details by ID",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hS,outputSchema:bl6,handler:async(Y,Q)=>{let X=P0(Q);if(await Q.access.check(),MP()&&Pr(Y.id,X.id))return{item:wP(X.id,J7())};let J=await Q.storage.connections.findById(Y.id);if(!J||J.organization_id!==X.id)return{item:null};if(!J.tools&&J.connection_type!=="VIRTUAL")try{let G=J.connection_token??null;if(!G)try{let H=await new JK(Q.db,Q.vault).get(J.id);if(H?.accessToken)G=H.accessToken}catch{}let K=new Promise((Z,H)=>setTimeout(()=>H(Error("Tool fetch timeout")),2000)),W=await Promise.race([sq({id:J.id,title:J.title,connection_type:J.connection_type,connection_url:J.connection_url,connection_token:G,connection_headers:J.connection_headers}),K]).catch(()=>null);if(W?.tools?.length)return{item:await Q.storage.connections.update(J.id,{tools:W.tools})??J}}catch{}return{item:J}}})});var Cr=(Y,Q)=>{if(Q===null||Q===void 0)return;let X=Y.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),J=Q;for(let G of X){if(J===null||J===void 0||typeof J!=="object")return;J=J[G]}return J};function $n0(Y){let Q=Y.split("::");if(Q.length!==2||!Q[0]||!Q[1])throw Error(`Invalid scope format: ${Y}. Expected format: "KEY::SCOPE"`);return Q}function hl6(Y){let Q=Y.split("::");if(Q.length!==2||!Q[0]||!Q[1])return null;return Q}function xl6(Y){if(typeof Y==="object"&&Y!==null&&"value"in Y){let Q=Y.value;if(typeof Q==="string")return Q}return null}function vO1(Y,Q){let X={};if(!Y||!Q)return X;for(let J of Q){if(J==="*"){X["*"]=["*"];continue}let G=hl6(J);if(!G)continue;let[K,W]=G,Z=Cr(K,Y),H=xl6(Z);if(H){if(!X[H])X[H]=[];X[H].push(W)}}return X}function Fn0(Y,Q){let X=vO1(Y,Q);return new Set(Object.keys(X).filter((J)=>J!=="*"))}var _O1=()=>{};import{randomBytes as gl6}from"crypto";function Vn0(){if(wv)return wv;let Y=process.env.MESH_JWT_SECRET??c9.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(Y)wv=new TextEncoder().encode(Y);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),wv=new Uint8Array(gl6(32));return wv}async function qn0(Y,Q="5m"){let X=Vn0();return await new s5(Y).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Q).sign(X)}async function Bn0(Y){try{let Q=Vn0(),{payload:X}=await JY(Y,Q);return X}catch{return}}var wv=null;var yO1=S(()=>{t5();AP()});async function Un0(Y){if(!Y.refreshToken)return{success:!1,error:"No refresh token available"};if(!Y.tokenEndpoint)return{success:!1,error:"No token endpoint available"};if(!Y.clientId)return{success:!1,error:"No client ID available"};try{let Q=new URLSearchParams({grant_type:"refresh_token",refresh_token:Y.refreshToken,client_id:Y.clientId});if(Y.clientSecret)Q.set("client_secret",Y.clientSecret);if(Y.scope)Q.set("scope",Y.scope);let X=await fetch(Y.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Q.toString()});if(!X.ok){let G=await X.text();console.error(`[TokenRefresh] Failed to refresh token: ${X.status}`,G);try{let K=JSON.parse(G);return{success:!1,error:K.error_description||K.error||`Token refresh failed: ${X.status}`}}catch{return{success:!1,error:`Token refresh failed: ${X.status}`}}}let J=await X.json();return{success:!0,accessToken:J.access_token,refreshToken:J.refresh_token||Y.refreshToken,expiresIn:J.expires_in,scope:J.scope}}catch(Q){return console.error("[TokenRefresh] Error refreshing token:",Q),{success:!1,error:Q instanceof Error?Q.message:"Token refresh failed"}}}async function Av(Y,Q,X){let J=Y.id,G=vO1(Y.configuration_state,Y.configuration_scopes),K=Q.auth.user?.id??Q.auth.apiKey?.userId??(X?Y.created_by:void 0),[W,Z]=K?await qn0({sub:K,user:{id:K},metadata:{state:Y.configuration_state??void 0,meshUrl:Q.baseUrl,connectionId:J,organizationId:Q.organization?.id},permissions:G}).then((U)=>[U,null]).catch((U)=>[null,U]):[null,Error("User ID required to issue configuration token")];if(Z)console.error("Failed to issue configuration token:",W);let H=Q.auth.user?.connectionId,$={...H?{"x-caller-id":H}:{},...Q.metadata.wellKnownForwardableHeaders??{},"x-request-id":Q.metadata.requestId},F=null,V=new JK(Q.db,Q.vault),B=await V.get(J);if(B){let U=!!B.refreshToken&&!!B.tokenEndpoint;if(V.isExpired(B,U?300000:0))if(U){console.log(`[Proxy] Token expired for ${J}, attempting refresh`);let D=await Un0(B);if(D.success&&D.accessToken)await V.upsert({connectionId:J,accessToken:D.accessToken,refreshToken:D.refreshToken??B.refreshToken,scope:D.scope??B.scope,expiresAt:D.expiresIn?new Date(Date.now()+D.expiresIn*1000):null,clientId:B.clientId,clientSecret:B.clientSecret,tokenEndpoint:B.tokenEndpoint}),F=D.accessToken,console.log(`[Proxy] Token refreshed for ${J}`);else await V.delete(J),console.error(`[Proxy] Token refresh failed for ${J}: ${D.error}`)}else await V.delete(J),console.log(`[Proxy] Token expired without refresh capability for ${J}`);else F=B.accessToken}if(!F&&Y.connection_token)F=Y.connection_token;if(F)$.Authorization=`Bearer ${F}`;if(W)$["x-mesh-token"]=W;return $}var fO1=S(()=>{_O1();yO1();Mv()});function Rr(){let Y=new Map;function Q(J,G){let K=Y.get(G);if(K)return console.log(`[ClientPool] Reusing cached client for ${G}`),K;console.log(`[ClientPool] Creating new client for ${G}`);let W=new eJ({name:`outbound-client-${G}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}}});W.onclose=()=>{Y.delete(G)};let Z=W.connect(J,{timeout:30000}).then(()=>W).catch((H)=>{throw Y.delete(G),H});return Y.set(G,Z),Z}return Object.assign(Q,{[Symbol.asyncDispose]:async()=>{let J=[];for(let[G,K]of Y)J.push(K.then((W)=>W.close()).catch((W)=>console.error(`[ClientPool] Error closing client ${G}:`,W)));await Promise.all(J),Y.clear()}})}var bO1=S(()=>{PU()});function zn0(Y){let Q=new _S({command:Y.command,args:Y.args,env:Y.env,cwd:Y.cwd,stderr:"pipe"}),X=Y.name||Y.id,J="\x1B[2m",G="\x1B[0m";return Q.stderr?.on("data",(K)=>{let W=K.toString().trimEnd();if(W)console.error(`${W} \x1B[2m[${X}]\x1B[0m`)}),Q}var Dn0=S(()=>{cq1()});class Pv{innerTransport;constructor(Y){this.innerTransport=Y}async start(){return this.innerTransport.onmessage=(Y)=>{this.handleIncomingMessage(Y)},this.innerTransport.onerror=(Y)=>{this.onerror?.(Y)},this.innerTransport.onclose=()=>{this.onclose?.()},this.innerTransport.start()}async send(Y){return this.handleOutgoingMessage(Y)}async close(){return this.innerTransport.close()}async handleOutgoingMessage(Y){return this.innerTransport.send(Y)}handleIncomingMessage(Y){this.onmessage?.(Y)}isRequest(Y){return"method"in Y&&Y.method!==void 0}isResponse(Y){return"result"in Y||"error"in Y&&!("method"in Y)}onmessage;onerror;onclose}function Ev(Y,...Q){return Q.reduce((X,J)=>J(X),Y)}var On0="mcp.mesh";var Nn0,hO1,MF;var Tv=S(()=>{Nn0=class Nn0 extends Error{constructor(Y){super(Y);this.name="UnauthorizedError"}};hO1=class hO1 extends Error{constructor(Y){super(Y);this.name="ForbiddenError"}};MF=class MF{userId;toolName;boundAuth;role;connectionId;getToolMeta;_granted=!1;constructor(Y,Q,X,J,G,K="self",W){this.userId=Q;this.toolName=X;this.boundAuth=J;this.role=G;this.connectionId=K;this.getToolMeta=W}[Symbol.dispose](){this._granted=!1}setToolName(Y){this.toolName=Y}grant(){return this._granted=!0,{[Symbol.dispose]:()=>{this._granted=!1}}}async check(...Y){if(this._granted)return;if(this.toolName?.startsWith("MESH_PUBLIC_")){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new Nn0("Authentication required. Please provide a valid OAuth token or API key.")}let Q=Y.length>0?Y:this.toolName?[this.toolName]:[];if(Q.length===0)throw new hO1("No resources specified for access check");for(let X of Q)if(await this.checkResource(X)){this.grant();return}throw new hO1(`Access denied to: ${Q.join(", ")}`)}async checkResource(Y){if(!this.userId&&!this.boundAuth)return!1;if(this.role==="admin"||this.role==="owner")return!0;if(!this.boundAuth)return!1;let Q={};if(this.connectionId)Q[this.connectionId]=[Y];return this.boundAuth.hasPermission(Q)}async isToolPublic(){if(this.toolName?.startsWith("MESH_PUBLIC_"))return!0;if(!this.getToolMeta)return!1;try{let Y=await this.getToolMeta();if(!Y)return!1;let X=Y[On0]?.public_tool;return X===!0||X==="true"}catch{return!1}}granted(){return this._granted}}});var ul6="mcp.mesh",PP;var Ln0=S(()=>{Tv();PP=class PP extends Pv{options;cachedToolsMap=null;constructor(Y,Q){super(Y);this.options=Q;if(Q.connection.tools)this.cachedToolsMap=new Map(Q.connection.tools.map((X)=>[X.name,X]))}async handleOutgoingMessage(Y){if(!this.isRequest(Y))return this.innerTransport.send(Y);let Q=Y;if(Q.method==="tools/call")await this.authorizeToolCall(Q),this.stripMetaFromArguments(Q);return this.innerTransport.send(Y)}async authorizeToolCall(Y){if(this.options.superUser)return;let X=Y.params.name,{ctx:J,connection:G}=this.options;if(this.isPublicTool(X))return;if(!J.auth.user?.id&&!J.auth.apiKey?.id)throw Error("Authentication required. Please provide a valid OAuth token or API key.");let K=async()=>{return this.cachedToolsMap?.get(X)?._meta};await new MF(J.authInstance,J.auth.user?.id??J.auth.apiKey?.userId,X,J.boundAuth,J.auth.user?.role,G.id,K).check(X)}isPublicTool(Y){if(Y.startsWith("MESH_PUBLIC_"))return!0;if(!this.cachedToolsMap)return!1;let Q=this.cachedToolsMap.get(Y);if(!Q?._meta)return!1;return Q._meta[ul6]?.public_tool===!0}stripMetaFromArguments(Y){let Q=Y.params;if(Q.arguments&&"_meta"in Q.arguments){let{_meta:X,...J}=Q.arguments;Q.arguments=J}}}});function wn0(Y){if(!Y.isError)return;let Q=Y.content;if(!Array.isArray(Q))return;for(let X of Q)if(X&&typeof X==="object"&&"type"in X&&X.type==="text"&&"text"in X&&typeof X.text==="string")return X.text;return}function gO1(Y){if(!Y)return;let Q=Y._meta;if(!Q||typeof Q!=="object"||Array.isArray(Q))return;let X=Q.properties;if(!X||typeof X!=="object"||Array.isArray(X))return;let J={};for(let[G,K]of Object.entries(X))if(typeof K==="string")J[G]=K;return Object.keys(J).length>0?J:void 0}function uO1(Y,Q){if(!Y&&!Q)return;if(!Y)return Q;if(!Q)return Y;return{...Q,...Y}}function mO1(Y){if(Y&&typeof Y==="object"&&!Array.isArray(Y)){let Q=Y,X=Q.structuredContent;if(X&&typeof X==="object"&&!Array.isArray(X))return X;return Q}return{value:Y}}async function ml6(Y,Q){let X=Y.body;if(!X)return{text:"",truncated:!1};let J=X.getReader(),G=new TextDecoder,K=!1,W=0,Z=[];try{while(!0){let{value:H,done:$}=await J.read();if($)break;if(H){if(W+=H.byteLength,W>Q){K=!0;let F=Q-(W-H.byteLength);if(F>0)Z.push(G.decode(H.slice(0,F),{stream:!0}));break}Z.push(G.decode(H,{stream:!0}))}}}finally{J.releaseLock()}return Z.push(G.decode()),{text:Z.join(""),truncated:K}}function ll6(Y){if(!Y)return;let Q=Y.trimEnd().split(`
|
|
1472
|
+
${Q.stack}`;return G}}catch{}if(typeof Q.toString==="function")try{let G=Q.toString();if(G!=="[object Object]")return G}catch{}let J=Object.keys(Q);if(J.length>0)return`Object with keys: ${J.join(", ")}`;return"[object Object]"}if(typeof Y==="string")return Y;if(typeof Y==="number"||typeof Y==="boolean")return String(Y);if(typeof Y==="function")return`[Function: ${Y.name||"anon"}]`;if(typeof Y==="symbol")return Y.toString();if(typeof Y==="bigint")return Y.toString();try{return String(Y)}catch{return"Unknown value (could not convert to string)"}}function NO(Y,Q){switch(typeof Q){case"string":return Y.newString(Q);case"number":return Y.newNumber(Q);case"boolean":return Q?Y.true:Y.false;case"undefined":return Y.undefined;case"object":{if(Q===null)return Y.null;if(Array.isArray(Q)){let J=Y.newArray();return Q.forEach((G,K)=>{let W=NO(Y,G);try{Y.setProp(J,String(K),W)}finally{W.dispose?.()}}),J}let X=Y.newObject();for(let[J,G]of Object.entries(Q)){let K=NO(Y,G);try{Y.setProp(X,J,K)}finally{K.dispose?.()}}return X}case"function":{let X=`__hostFn_${Date.now()}_${Math.random().toString(36).substr(2,9)}`;return Y.newFunction(X,(...G)=>{try{let K=G.map((Z)=>Y.dump(Z)),W=Q(...K);if(W&&typeof W.then==="function"){let Z=Y.newPromise();return W.then((H)=>{try{let $=NO(Y,H);Z.resolve($),$.dispose()}catch($){let F=OO($),V=Y.newString(`Promise resolution error: ${F}`);Z.reject(V),V.dispose()}finally{Y.runtime.executePendingJobs()}}).catch((H)=>{let $=OO(H),F=Y.newString(`Promise rejection: ${$}`);Z.reject(F),F.dispose(),Y.runtime.executePendingJobs()}),Z.handle}return NO(Y,W)}catch(K){let W=OO(K);return Y.newString(`HostFunctionError: ${W}`)}finally{G.forEach((K)=>K.dispose())}})}case"bigint":return Y.newString(Q.toString());case"symbol":return Y.newString(Q.toString());default:try{return Y.newString(String(Q))}catch{return Y.undefined}}}var ic0=()=>{};function AO1(Y){let Q=Y.runtime.executePendingJobs(100);try{if("unwrap"in Q&&typeof Q.unwrap==="function")Q.unwrap()}finally{if("dispose"in Q&&typeof Q.dispose==="function")Q.dispose()}}async function Or(Y,Q,X){let J=Date.now(),G=Y.resolvePromise(Q);while(!0){AO1(Y);let K=await Promise.race([G,tm6(0).then(()=>null)]);if(K!==null)return K;if(Date.now()-J>X)throw Error(`Timed out after ${X}ms while awaiting a QuickJS promise`)}}async function Dv({tools:Y,code:Q,timeoutMs:X}){let W=[];try{const J=fB(W,await wO1({memoryLimitBytes:33554432,stackSizeBytes:524288}),0);const G=fB(W,J.newContext({interruptAfterMs:X}),0);const K=fB(W,MO1(G),0);try{let F=G.evalCode(Q,"index.mjs",{strip:!0,strict:!0,type:"module"}),V=G.unwrapResult(F),B=NO(G,Y);G.setProp(G.global,"tools",B);let U=G.runtime.hasPendingJob()?G.unwrapResult(await Or(G,V,X)):V;if(U!==V)V.dispose();let z=G.getProp(U,"default"),D=G.typeof(z);if(D!=="function")return z.dispose(),U.dispose(),B.dispose(),{error:`Code must export default a function (tools). Got ${D}. Example: export default async (tools) => { /* ... */ }`,consoleLogs:K.logs};let L=G.callFunction(z,G.undefined,B);B.dispose(),z.dispose(),U.dispose();let w=G.unwrapResult(L),E=await Or(G,w,X);w.dispose();let T=G.unwrapResult(E);if(G.runtime.hasPendingJob())AO1(G);let C=G.dump(T);return T.dispose(),{returnValue:C,consoleLogs:K.logs}}catch(F){return console.log(F),{error:OO(F),consoleLogs:K.logs}}}catch(Z){var H=Z,$=1}finally{Ns(W,H,$)}}async function PO1({input:Y,code:Q,timeoutMs:X}){let W=[];try{const J=fB(W,await wO1({memoryLimitBytes:33554432,stackSizeBytes:524288}),0);const G=fB(W,J.newContext({interruptAfterMs:X}),0);const K=fB(W,MO1(G),0);try{let F=G.evalCode(Q,"index.mjs",{strip:!0,strict:!0,type:"module"}),V=G.unwrapResult(F),B=NO(G,Y);G.setProp(G.global,"input",B);let U=G.runtime.hasPendingJob()?G.unwrapResult(await Or(G,V,X)):V;if(U!==V)V.dispose();let z=G.getProp(U,"default"),D=G.typeof(z);if(D!=="function")return z.dispose(),U.dispose(),B.dispose(),{error:`Code must export default a function (input). Got ${D}. Example: export default (input) => { return input.items.map(i => i.name); }`,consoleLogs:K.logs};let L=G.callFunction(z,G.undefined,B);B.dispose(),z.dispose(),U.dispose();let w=G.unwrapResult(L),E=await Or(G,w,X);w.dispose();let T=G.unwrapResult(E);if(G.runtime.hasPendingJob())AO1(G);let C=G.dump(T);return T.dispose(),{returnValue:C,consoleLogs:K.logs}}catch(F){return console.log(F),{error:OO(F),consoleLogs:K.logs}}}catch(Z){var H=Z,$=1}finally{Ns(W,H,$)}}var tm6=(Y)=>new Promise((Q)=>setTimeout(Q,Y));var ac0=S(()=>{nc0();ic0()});var Nr=S(()=>{ac0()});async function em6(Y,Q){let X=Y.connections.map((K)=>K.connection_id),J=[];for(let K of X){let W=await Q.storage.connections.findById(K);if(W&&W.status==="active")J.push(W)}return J.map((K)=>{let W=Y.connections.find((Z)=>Z.connection_id===K.id);return{connection:K,selectedTools:W?.selected_tools??null,selectedResources:W?.selected_resources??null,selectedPrompts:W?.selected_prompts??null}})}async function rc0(Y,Q){return(await Q.storage.connections.list(Y)).filter((J)=>J.status==="active").map((J)=>({connection:J,selectedTools:null,selectedResources:null,selectedPrompts:null}))}async function Yl6(Y,Q){let X=new Map;for(let B of Y)X.set(B.connection.id,B);let J=Y.map((B)=>B.connection),G=new Map,K=await Promise.allSettled(J.map(async(B)=>{try{let U=await Q.createMCPProxy(B);return{connection:B,proxy:U}}catch(U){return console.warn(`[code-execution] Failed to create proxy for connection ${B.id}:`,U),null}}));for(let B of K)if(B.status==="fulfilled"&&B.value)G.set(B.value.connection.id,B.value);let W=await Promise.allSettled(Array.from(G.entries()).map(async([B,U])=>{try{let D=(await U.proxy.listTools()).tools,L=X.get(B);if(L?.selectedTools&&L.selectedTools.length>0){let w=new Set(L.selectedTools);D=D.filter((E)=>w.has(E.name))}return{connectionId:B,connectionTitle:U.connection.title,tools:D}}catch(z){return console.error(`[code-execution] Failed to list tools for connection ${B}:`,z),null}})),Z=new Set,H=[],$=new Map;for(let B of W){if(B.status!=="fulfilled"||!B.value)continue;let{connectionId:U,connectionTitle:z,tools:D}=B.value;for(let L of D){if(Z.has(L.name))continue;Z.add(L.name),H.push({...L,_meta:{...L._meta,connectionId:U,connectionTitle:z}}),$.set(L.name,U)}}let F=async(B,U)=>{let z=$.get(B);if(!z)return{content:[{type:"text",text:`Tool not found: ${B}`}],isError:!0};let D=G.get(z);if(!D)return{content:[{type:"text",text:`Connection not found for tool: ${B}`}],isError:!0};return await D.proxy.callTool({name:B,arguments:U})},V=[];for(let[,B]of G)V.push(B.proxy.close().catch(()=>{}));return await Promise.all(V),{tools:H,callTool:F}}async function LP(Y){let Q=P0(Y),X;if(Y.connectionId){let J=await Y.storage.virtualMcps.findById(Y.connectionId,Y.organization?.id);if(J)X=await em6(J,Y);else X=await rc0(Q.id,Y)}else X=await rc0(Q.id,Y);return Yl6(X,Y)}function Ql6(Y){return Y.toLowerCase().split(/[\s_\-./]+/).filter((Q)=>Q.length>=2)}function Xl6(Y,Q){let X=0,J=Q.name.toLowerCase(),G=(Q.description??"").toLowerCase(),K=(Q._meta?.connectionTitle??"").toLowerCase();for(let W of Y){if(J===W)X+=10;else if(J.includes(W))X+=3;if(G.includes(W))X+=2;if(K.includes(W))X+=1}return X}function Lr(Y,Q,X){let J=Ql6(Y);if(J.length===0)return Q.slice(0,X);return Q.map((G)=>({tool:G,score:Xl6(J,G)})).filter((G)=>G.score>0).sort((G,K)=>K.score-G.score).slice(0,X).map((G)=>G.tool)}function Mr(Y,Q){let X=new Map(Q.map((G)=>[G.name,G]));return{tools:Y.map((G)=>X.get(G)).filter((G)=>G!==void 0).map((G)=>({name:G.name,description:G.description,connection:G._meta?.connectionTitle??"",inputSchema:G.inputSchema,outputSchema:G.outputSchema})),notFound:Y.filter((G)=>!X.has(G))}}async function wr(Y,Q,X){let J=Object.fromEntries(Q.tools.map((G)=>[G.name,async(K)=>{let W=await Q.callTool(G.name,K??{});if(W.structuredContent&&typeof W.structuredContent==="object")return W.structuredContent;let Z=W.content;if(Z?.[0]?.type==="text"&&Z[0].text)try{return JSON.parse(Z[0].text)}catch{return Z[0].text}return W}]));return Dv({code:Y,tools:J,timeoutMs:X})}function Ov(Y){return{content:[{type:"text",text:JSON.stringify(Y,null,2)}]}}function zB(Y){return{content:[{type:"text",text:JSON.stringify(Y,null,2)}],isError:!0}}function NF(Y){let Q=new Set(Jl6);return Y.filter((X)=>!Q.has(X.name))}var Jl6;var LO=S(()=>{Nr();Jl6=["CODE_EXECUTION_SEARCH_TOOLS","CODE_EXECUTION_DESCRIBE_TOOLS","CODE_EXECUTION_RUN_CODE"]});var EO1;var oc0=S(()=>{G4();zv();LO();EO1=c1({name:"CODE_EXECUTION_SEARCH_TOOLS",description:"Search for available tools by name or description. Returns tool names and brief descriptions without full schemas. Use this to discover tools before calling CODE_EXECUTION_DESCRIBE_TOOLS for detailed schemas.",annotations:{title:"Search Tools",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hc0,outputSchema:xc0,handler:async(Y,Q)=>{B0(Q),P0(Q),await Q.access.check();let X=await LP(Q),J=Lr(Y.query,X.tools,Y.limit);return{query:Y.query,results:J.map((G)=>({name:G.name,description:G.description,connection:G._meta?.connectionTitle??""})),totalAvailable:X.tools.length}}})});var TO1;var sc0=S(()=>{G4();zv();LO();TO1=c1({name:"CODE_EXECUTION_DESCRIBE_TOOLS",description:"Get detailed schemas for specific tools. Call after CODE_EXECUTION_SEARCH_TOOLS to get full input/output schemas before executing code.",annotations:{title:"Describe Tools",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:gc0,outputSchema:uc0,handler:async(Y,Q)=>{B0(Q),P0(Q),await Q.access.check();let X=await LP(Q);return Mr(Y.tools,X.tools)}})});var CO1;var tc0=S(()=>{G4();zv();LO();CO1=c1({name:"CODE_EXECUTION_RUN_CODE",description:'Run JavaScript code in a sandbox. Code must be an ES module that `export default`s an async function that receives (tools) as its first parameter. Use CODE_EXECUTION_DESCRIBE_TOOLS to understand the input/output schemas for a tool before calling it. Use `await tools.toolName(args)` or `await tools["tool-name"](args)` to call tools.',annotations:{title:"Run Code",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:mc0,outputSchema:lc0,handler:async(Y,Q)=>{B0(Q),P0(Q),await Q.access.check();let X=await LP(Q);return await wr(Y.code,X,Y.timeoutMs)}})});var ec0=S(()=>{oc0();sc0();tc0();zv()});var Wl6,Zl6,RO1;var Yn0=S(()=>{QY();l1();G4();yS();n$();Wl6=q.object({data:_T.describe("Data for the new connection (id is auto-generated if not provided)")}),Zl6=q.object({item:Y5.describe("The created connection entity")}),RO1=c1({name:"COLLECTION_CONNECTIONS_CREATE",description:"Create a new MCP connection in the organization",annotations:{title:"Create Connection",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Wl6,outputSchema:Zl6,handler:async(Y,Q)=>{B0(Q);let X=P0(Q);await Q.access.check();let J=TY(Q);if(!J)throw Error("User ID required to create connection");let G={...Y.data,organization_id:X.id,created_by:J};if(G.connection_type==="VIRTUAL"){let $=CU(G.connection_url);if(!$)throw Error("VIRTUAL connection requires connection_url in format: virtual://$virtual_mcp_id");let F=await Q.storage.virtualMcps.findById($);if(!F)throw Error(`Virtual MCP not found: ${$}`);if(F.organization_id!==X.id)throw Error("Virtual MCP does not belong to the current organization");G.connection_url=RU($)}let K=await sq({id:`pending-${Date.now()}`,title:G.title,connection_type:G.connection_type,connection_url:G.connection_url,connection_token:G.connection_token,connection_headers:G.connection_headers}).catch(()=>null),W=K?.tools?.length?K.tools:null,Z=K?.scopes?.length?K.scopes:null,H=await Q.storage.connections.create({...G,tools:W,configuration_scopes:Z});return await Q.eventBus.publish(X.id,IY.SELF(X.id),{type:"connection.created",data:H}),{item:H}}})});var Kl6,Hl6,Qn0;var Xn0=S(()=>{l1();wG();Kl6=nH.extend({avatar:q.string().describe("URL or data URI to the assistant's avatar image"),system_prompt:q.string().describe("System prompt that defines the assistant's behavior"),virtual_mcp_id:q.string().describe("Virtual MCP ID to use for this assistant"),model:q.object({id:q.string().describe("Model ID"),connectionId:q.string().describe("Connection ID that provides the model")}).describe("Selected model reference for this assistant")}),Hl6=iH("assistant",Kl6),Qn0=[...Hl6]});var Nv,LF,Gn0,$l6,Fl6,Wn0,Vl6,ql6,Bl6,Ul6,zl6,Dl6,Zn0,Ol6,Nl6,Ll6,Ml6,wl6,Al6,Pl6,El6,Tl6,Cl6,UV9,Rl6,zV9,Jn0,Il6,jl6,IO1,Lv;var Ar=S(()=>{l1();lD();wG();Nv=q.lazy(()=>q.union([q.null(),q.string(),q.number(),q.boolean(),q.record(q.string(),Nv),q.array(Nv)])),LF=q.record(q.string(),q.record(q.string(),Nv)).optional().describe("Additional provider-specific options. Outer record keyed by provider name, inner by option key"),Gn0=q.object({type:q.literal("text"),text:q.string().describe("The text content"),providerOptions:LF}),$l6=q.object({type:q.literal("text"),text:q.string().describe("The text content"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Fl6=q.string().describe("File data as URL string"),Wn0=q.object({type:q.literal("file"),filename:q.string().optional().describe("Optional filename of the file"),data:Fl6,mediaType:q.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),providerOptions:LF}),Vl6=q.object({type:q.literal("file"),mediaType:q.string().describe("IANA media type of the file (e.g., image/png, audio/mp3)"),data:q.string().describe("Generated file data as base64 encoded string")}),ql6=q.object({type:q.literal("reasoning"),text:q.string().describe("The reasoning text"),providerOptions:LF}),Bl6=q.object({type:q.literal("reasoning"),text:q.string().describe("The reasoning text"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Ul6=q.object({type:q.literal("tool-call"),toolCallId:q.string().describe("ID of the tool call, used to match with tool result"),toolName:q.string().describe("Name of the tool being called"),input:q.string().describe("Arguments of the tool call (JSON-serializable object matching tool input schema)"),providerExecuted:q.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerOptions:LF}),zl6=q.object({type:q.literal("tool-call"),toolCallId:q.string().describe("ID of the tool call"),toolName:q.string().describe("Name of the tool being called"),input:q.string().describe("Stringified JSON object with the tool call arguments"),providerExecuted:q.boolean().optional().describe("Whether the tool call will be executed by the provider"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Dl6=q.union([q.object({type:q.literal("text"),value:q.string()}),q.object({type:q.literal("json"),value:Nv}),q.object({type:q.literal("error-text"),value:q.string()}),q.object({type:q.literal("error-json"),value:Nv}),q.object({type:q.literal("content"),value:q.array(q.union([q.object({type:q.literal("text"),text:q.string().describe("Text content")}),q.object({type:q.literal("media"),data:q.string().describe("Base-64 encoded media data"),mediaType:q.string().describe("IANA media type")})]))}),q.object({type:q.literal("execution-denied"),reason:q.string().optional()}),q.string().describe("Raw or JSON-serialized output (e.g. from AI SDK mapToolResultOutput)")]),Zn0=q.object({type:q.literal("tool-result"),toolCallId:q.string().describe("ID of the tool call that this result is associated with"),toolName:q.string().describe("Name of the tool that generated this result"),output:Dl6.describe("Result of the tool call"),result:q.unknown().describe("Unknown result of the tool call"),providerOptions:LF}),Ol6=q.object({type:q.literal("tool-result"),toolCallId:q.string().describe("ID of the tool call that this result is associated with"),toolName:q.string().describe("Name of the tool that generated this result"),result:q.any().describe("Result of the tool call (JSON-serializable)"),isError:q.boolean().optional().describe("Whether the result is an error or error message"),providerExecuted:q.boolean().optional().describe("Whether the tool result was generated by the provider"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),Nl6=q.union([q.object({type:q.literal("source"),sourceType:q.literal("url"),id:q.string().describe("The ID of the source"),url:q.string().describe("The URL of the source"),title:q.string().optional().describe("The title of the source"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")}),q.object({type:q.literal("source"),sourceType:q.literal("document"),id:q.string().describe("The ID of the source"),mediaType:q.string().describe("IANA media type of the document (e.g., application/pdf)"),title:q.string().describe("The title of the document"),filename:q.string().optional().describe("Optional filename of the document"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata")})]),Ll6=q.object({role:q.literal("system"),content:q.string().describe("System message content"),providerOptions:LF}),Ml6=q.object({role:q.literal("user"),content:q.array(q.union([Gn0,Wn0])).describe("User message content parts (text or file)"),providerOptions:LF}),wl6=q.object({role:q.literal("assistant"),content:q.array(q.union([Gn0,Wn0,ql6,Ul6,Zn0])).describe("Assistant message content parts (text, file, reasoning, tool-call, or tool-result)"),providerOptions:LF}),Al6=q.object({role:q.literal("tool"),content:q.array(Zn0).describe("Tool message content (tool results)"),providerOptions:LF}),Pl6=q.union([Ll6,Ml6,wl6,Al6]),El6=q.array(Pl6).describe("A list of messages forming the prompt"),Tl6=q.object({prompt:El6.describe("A language model prompt is a standardized prompt type (array of messages with roles: system, user, assistant, tool)"),maxOutputTokens:q.number().optional().describe("Maximum number of tokens to generate"),temperature:q.number().optional().describe("Temperature setting. The range depends on the provider and model"),topP:q.number().optional().describe("Nucleus sampling parameter"),topK:q.number().optional().describe("Only sample from the top K options for each subsequent token. Used to remove long tail low probability responses"),presencePenalty:q.number().optional().describe("Presence penalty setting. It affects the likelihood of the model to repeat information that is already in the prompt"),frequencyPenalty:q.number().optional().describe("Frequency penalty setting. It affects the likelihood of the model to repeatedly use the same words or phrases"),seed:q.number().optional().describe("The seed (integer) to use for random sampling. If set and supported by the model, calls will generate deterministic results"),stopSequences:q.array(q.string()).optional().describe("Stop sequences. If set, the model will stop generating text when one of the stop sequences is generated"),responseFormat:q.union([q.object({type:q.literal("text")}),q.object({type:q.literal("json"),schema:q.any().optional().describe("JSON schema that the generated output should conform to"),name:q.string().optional().describe("Name of output that should be generated"),description:q.string().optional().describe("Description of the output that should be generated")})]).optional().describe("Response format. The output can either be text or JSON. Default is text"),tools:q.array(q.any()).optional().describe("The tools that are available for the model"),toolChoice:q.any().optional().describe("Specifies how the tool should be selected. Defaults to 'auto'"),includeRawChunks:q.boolean().optional().describe("Include raw chunks in the stream. Only applicable for streaming calls"),abortSignal:q.any().optional().describe("Abort signal for cancelling the operation"),providerOptions:q.any().optional().describe("Additional provider-specific options")}),Cl6=q.object({content:q.array(q.union([$l6,Vl6,Bl6,zl6,Ol6,Nl6])).describe("Ordered content that the model has generated (text, tool-calls, reasoning, files, sources)"),finishReason:q.enum(["stop","length","content-filter","tool-calls","error","other","unknown"]).describe("Reason why generation stopped"),usage:q.looseObject({inputTokens:q.number().optional(),outputTokens:q.number().optional(),totalTokens:q.number().optional(),reasoningTokens:q.number().optional()}).describe("Usage information for the language model call"),providerMetadata:q.any().optional().describe("Additional provider-specific metadata"),request:q.object({body:q.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:q.object({id:q.string().optional().describe("ID for the generated response"),timestamp:q.iso.datetime().optional().describe("Timestamp for the start of the generated response"),modelId:q.string().optional().describe("The ID of the response model that was used"),headers:q.record(q.string(),q.string()).optional().describe("Response headers"),body:q.any().optional().describe("Response HTTP body")}).optional().describe("Optional response information for telemetry and debugging"),warnings:q.array(q.any()).describe("Warnings for the call, e.g. unsupported settings")}),UV9=q.object({stream:q.any().describe("ReadableStream of LanguageModelV2StreamPart"),request:q.object({body:q.any().optional().describe("Request HTTP body sent to the provider API")}).optional().describe("Optional request information for telemetry and debugging"),response:q.object({headers:q.record(q.string(),q.string()).optional().describe("Response headers")}).optional().describe("Optional response data")}),Rl6=q.object({supportedUrls:q.record(q.string(),q.array(q.string())).describe("Supported URL patterns by media type for the provider")}),zV9=q.object({modelId:q.string().describe("The ID of the model"),logo:q.string().nullable(),description:q.string().nullable(),capabilities:q.array(q.string()),limits:q.object({contextWindow:q.number(),maxOutputTokens:q.number()}).nullable(),costs:q.object({input:q.number(),output:q.number()}).nullable(),provider:q.enum(["openai","anthropic","google","x-ai","deepseek","openai-compatible","openrouter"]).nullable()}),Jn0=q.object({modelId:q.string().describe("The ID of the model"),callOptions:Tl6}),Il6=nH.extend({logo:q.string().nullable(),description:q.string().nullable(),capabilities:q.array(q.string()),limits:q.object({contextWindow:q.number(),maxOutputTokens:q.number()}).nullable(),costs:q.object({input:q.number(),output:q.number()}).nullable(),provider:q.enum(["openai","anthropic","google","xai","deepseek","openai-compatible","openrouter"]).nullable()}),jl6=iH("llm",Il6,{readOnly:!0}),IO1=[{name:"LLM_METADATA",inputSchema:q.object({modelId:q.string().describe("The ID of the model")}),outputSchema:Rl6},{name:"LLM_DO_STREAM",inputSchema:Jn0,streamable:!0},{name:"LLM_DO_GENERATE",inputSchema:Jn0,outputSchema:Cl6},...jl6],Lv=pH(IO1)});function MP(){return!1}function Pr(Y,Q){return Y===IY.DEV_ASSETS(Q)}function wP(Y,Q){let X=G91(Q,Y),J=new Date().toISOString();return{id:X.id??IY.DEV_ASSETS(Y),title:X.title,description:X.description??null,icon:X.icon??null,app_name:X.app_name??null,app_id:X.app_id??null,organization_id:Y,created_by:"system",created_at:J,updated_at:J,connection_type:X.connection_type,connection_url:X.connection_url??null,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:X.metadata??null,tools:Sl6,bindings:["OBJECT_STORAGE"],status:"active"}}var Sl6;var Er=S(()=>{Zi();QY();l1();Sl6=eS.map((Y)=>({name:Y.name,description:`${Y.name} operation for local file storage`,inputSchema:q.toJSONSchema(Y.inputSchema),outputSchema:q.toJSONSchema(Y.outputSchema)}))});function vl6(Y){let Q=[],X=0;while(X<Y.length){let J=Y[X];if(J==="%")Q.push(".*");else if(J==="_")Q.push(".");else if(/[.*+?^${}()|[\]\\]/.test(J))Q.push("\\"+J);else Q.push(J);X++}return Q.join("")}function DB(Y){return typeof Y==="string"||typeof Y==="number"}function Tr(Y,Q){if("conditions"in Q){let{operator:Z,conditions:H}=Q;switch(Z){case"and":return H.every(($)=>Tr(Y,$));case"or":return H.some(($)=>Tr(Y,$));case"not":return!H.every(($)=>Tr(Y,$));default:return!0}}let{field:X,operator:J,value:G}=Q,K=X.join("."),W=jO1(Y,K);switch(J){case"eq":return W===G;case"gt":return DB(W)&&DB(G)&&W>G;case"gte":return DB(W)&&DB(G)&&W>=G;case"lt":return DB(W)&&DB(G)&&W<G;case"lte":return DB(W)&&DB(G)&&W<=G;case"in":return Array.isArray(G)&&G.includes(W);case"like":if(typeof W!=="string"||typeof G!=="string")return!1;if(G.length>100)return!1;let Z=vl6(G);return new RegExp(`^${Z}$`,"i").test(W);case"contains":if(typeof W!=="string"||typeof G!=="string")return!1;return W.toLowerCase().includes(G.toLowerCase());default:return!0}}function jO1(Y,Q){let X=Q.split("."),J=Y;for(let G of X){if(J==null||typeof J!=="object")return;J=J[G]}return J}function _l6(Y,Q){return[...Y].sort((X,J)=>{for(let G of Q){let K=G.field.join("."),W=jO1(X,K),Z=jO1(J,K),H=0;if(W==null&&Z==null)continue;if(W==null)H=G.nulls==="first"?-1:1;else if(Z==null)H=G.nulls==="first"?1:-1;else if(typeof W==="string"&&typeof Z==="string")H=W.localeCompare(Z);else if(typeof W==="number"&&typeof Z==="number")H=W-Z;else H=String(W).localeCompare(String(Z));if(H!==0)return G.direction==="desc"?-H:H}return 0})}var kl6,yl6,fl6,SO1;var Kn0=S(()=>{Qk();Xn0();wG();Ar();Zi();QY();l1();G4();Er();n$();kl6={LLM:IO1,ASSISTANTS:Qn0,OBJECT_STORAGE:eS};yl6=dZ.extend({binding:q.union([q.object({}).passthrough(),q.string()]).optional(),include_virtual:q.boolean().optional().describe("Whether to include VIRTUAL connections in the results. Defaults to false.")}),fl6=a$(Y5),SO1=c1({name:"COLLECTION_CONNECTIONS_LIST",description:"List all connections in the organization with filtering, sorting, and pagination",annotations:{title:"List Connections",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:yl6,outputSchema:fl6,handler:async(Y,Q)=>{await Q.access.check();let X=P0(Q),J=Y.binding?typeof Y.binding==="string"?(()=>{let B=kl6[Y.binding.toUpperCase()];if(!B)throw Error(`Unknown binding: ${Y.binding}`);return B})():Y.binding:void 0,G=J?Xi(J):void 0,K=await Q.storage.connections.list(X.id,{includeVirtual:Y.include_virtual??!1});if(MP()){let B=J7(),U=IY.DEV_ASSETS(X.id);if(!K.some((z)=>z.id===U)){let z=wP(X.id,B);K.unshift(z)}}let W=G?await Promise.all(K.map(async(B)=>{if(!B.tools||B.tools.length===0)return null;return G.isImplementedBy(B.tools.map((z)=>({name:z.name,inputSchema:z.inputSchema,outputSchema:z.outputSchema})))?B:null})).then((B)=>B.filter((U)=>U!==null)):K;if(Y.where)W=W.filter((B)=>Tr(B,Y.where));if(Y.orderBy&&Y.orderBy.length>0)W=_l6(W,Y.orderBy);let Z=W.length,H=Y.offset??0,$=Y.limit??100,F=W.slice(H,H+$),V=H+$<Z;return{items:F,totalCount:Z,hasMore:V}}})});class JK{db;vault;constructor(Y,Q){this.db=Y;this.vault=Q}async get(Y){let Q=await this.db.selectFrom("downstream_tokens").selectAll().where("connectionId","=",Y).executeTakeFirst();if(!Q)return null;return this.decryptToken(Q)}async upsert(Y){let Q=new Date().toISOString(),X=await this.vault.encrypt(Y.accessToken),J=Y.refreshToken?await this.vault.encrypt(Y.refreshToken):null,G=Y.clientSecret?await this.vault.encrypt(Y.clientSecret):null;return await this.db.transaction().execute(async(K)=>{let W=await K.selectFrom("downstream_tokens").select(["id","createdAt"]).where("connectionId","=",Y.connectionId).executeTakeFirst();if(W)return await K.updateTable("downstream_tokens").set({accessToken:X,refreshToken:J,scope:Y.scope,expiresAt:Y.expiresAt?.toISOString()??null,clientId:Y.clientId,clientSecret:G,tokenEndpoint:Y.tokenEndpoint,updatedAt:Q}).where("id","=",W.id).execute(),{id:W.id,connectionId:Y.connectionId,accessToken:Y.accessToken,refreshToken:Y.refreshToken,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:W.createdAt,updatedAt:Q,clientId:Y.clientId,clientSecret:Y.clientSecret,tokenEndpoint:Y.tokenEndpoint};let Z=p8("dtok");return await K.insertInto("downstream_tokens").values({id:Z,connectionId:Y.connectionId,accessToken:X,refreshToken:J,scope:Y.scope,expiresAt:Y.expiresAt?.toISOString()??null,clientId:Y.clientId,clientSecret:G,tokenEndpoint:Y.tokenEndpoint,createdAt:Q,updatedAt:Q}).execute(),{id:Z,connectionId:Y.connectionId,accessToken:Y.accessToken,refreshToken:Y.refreshToken,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:Q,updatedAt:Q,clientId:Y.clientId,clientSecret:Y.clientSecret,tokenEndpoint:Y.tokenEndpoint}})}async delete(Y){await this.db.deleteFrom("downstream_tokens").where("connectionId","=",Y).execute()}isExpired(Y,Q=0){if(!Y.expiresAt)return!1;let J=(Y.expiresAt instanceof Date?Y.expiresAt:new Date(Y.expiresAt)).getTime();if(Number.isNaN(J))return!0;return J-Q<Date.now()}async decryptToken(Y){let Q=await this.vault.decrypt(Y.accessToken),X=Y.refreshToken?await this.vault.decrypt(Y.refreshToken):null,J=Y.clientSecret?await this.vault.decrypt(Y.clientSecret):null;return{id:Y.id,connectionId:Y.connectionId,accessToken:Q,refreshToken:X,scope:Y.scope,expiresAt:Y.expiresAt,createdAt:Y.createdAt,updatedAt:Y.updatedAt,clientId:Y.clientId,clientSecret:J,tokenEndpoint:Y.tokenEndpoint}}}var Mv=S(()=>{LG()});var bl6,kO1;var Hn0=S(()=>{wG();G4();Mv();Er();yS();n$();bl6=xS(Y5),kO1=c1({name:"COLLECTION_CONNECTIONS_GET",description:"Get connection details by ID",annotations:{title:"Get Connection",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:hS,outputSchema:bl6,handler:async(Y,Q)=>{let X=P0(Q);if(await Q.access.check(),MP()&&Pr(Y.id,X.id))return{item:wP(X.id,J7())};let J=await Q.storage.connections.findById(Y.id);if(!J||J.organization_id!==X.id)return{item:null};if(!J.tools&&J.connection_type!=="VIRTUAL")try{let G=J.connection_token??null;if(!G)try{let H=await new JK(Q.db,Q.vault).get(J.id);if(H?.accessToken)G=H.accessToken}catch{}let K=new Promise((Z,H)=>setTimeout(()=>H(Error("Tool fetch timeout")),2000)),W=await Promise.race([sq({id:J.id,title:J.title,connection_type:J.connection_type,connection_url:J.connection_url,connection_token:G,connection_headers:J.connection_headers}),K]).catch(()=>null);if(W?.tools?.length)return{item:await Q.storage.connections.update(J.id,{tools:W.tools})??J}}catch{}return{item:J}}})});var Cr=(Y,Q)=>{if(Q===null||Q===void 0)return;let X=Y.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),J=Q;for(let G of X){if(J===null||J===void 0||typeof J!=="object")return;J=J[G]}return J};function $n0(Y){let Q=Y.split("::");if(Q.length!==2||!Q[0]||!Q[1])throw Error(`Invalid scope format: ${Y}. Expected format: "KEY::SCOPE"`);return Q}function hl6(Y){let Q=Y.split("::");if(Q.length!==2||!Q[0]||!Q[1])return null;return Q}function xl6(Y){if(typeof Y==="object"&&Y!==null&&"value"in Y){let Q=Y.value;if(typeof Q==="string")return Q}return null}function vO1(Y,Q){let X={};if(!Y||!Q)return X;for(let J of Q){if(J==="*"){X["*"]=["*"];continue}let G=hl6(J);if(!G)continue;let[K,W]=G,Z=Cr(K,Y),H=xl6(Z);if(H){if(!X[H])X[H]=[];X[H].push(W)}}return X}function Fn0(Y,Q){let X=vO1(Y,Q);return new Set(Object.keys(X).filter((J)=>J!=="*"))}var _O1=()=>{};import{randomBytes as gl6}from"crypto";function Vn0(){if(wv)return wv;let Y=process.env.MESH_JWT_SECRET??c9.jwt?.secret??process.env.BETTER_AUTH_SECRET;if(Y)wv=new TextEncoder().encode(Y);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),wv=new Uint8Array(gl6(32));return wv}async function qn0(Y,Q="5m"){let X=Vn0();return await new s5(Y).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Q).sign(X)}async function Bn0(Y){try{let Q=Vn0(),{payload:X}=await JY(Y,Q);return X}catch{return}}var wv=null;var yO1=S(()=>{t5();AP()});async function Un0(Y){if(!Y.refreshToken)return{success:!1,error:"No refresh token available"};if(!Y.tokenEndpoint)return{success:!1,error:"No token endpoint available"};if(!Y.clientId)return{success:!1,error:"No client ID available"};try{let Q=new URLSearchParams({grant_type:"refresh_token",refresh_token:Y.refreshToken,client_id:Y.clientId});if(Y.clientSecret)Q.set("client_secret",Y.clientSecret);if(Y.scope)Q.set("scope",Y.scope);let X=await fetch(Y.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:Q.toString()});if(!X.ok){let G=await X.text();console.error(`[TokenRefresh] Failed to refresh token: ${X.status}`,G);try{let K=JSON.parse(G);return{success:!1,error:K.error_description||K.error||`Token refresh failed: ${X.status}`}}catch{return{success:!1,error:`Token refresh failed: ${X.status}`}}}let J=await X.json();return{success:!0,accessToken:J.access_token,refreshToken:J.refresh_token||Y.refreshToken,expiresIn:J.expires_in,scope:J.scope}}catch(Q){return console.error("[TokenRefresh] Error refreshing token:",Q),{success:!1,error:Q instanceof Error?Q.message:"Token refresh failed"}}}async function Av(Y,Q,X){let J=Y.id,G=vO1(Y.configuration_state,Y.configuration_scopes),K=Q.auth.user?.id??Q.auth.apiKey?.userId??(X?Y.created_by:void 0),[W,Z]=K?await qn0({sub:K,user:{id:K},metadata:{state:Y.configuration_state??void 0,meshUrl:Q.baseUrl,connectionId:J,organizationId:Q.organization?.id,organizationName:Q.organization?.name,organizationSlug:Q.organization?.slug},permissions:G}).then((U)=>[U,null]).catch((U)=>[null,U]):[null,Error("User ID required to issue configuration token")];if(Z)console.error("Failed to issue configuration token:",W);let H=Q.auth.user?.connectionId,$={...H?{"x-caller-id":H}:{},...Q.metadata.wellKnownForwardableHeaders??{},"x-request-id":Q.metadata.requestId},F=null,V=new JK(Q.db,Q.vault),B=await V.get(J);if(B){let U=!!B.refreshToken&&!!B.tokenEndpoint;if(V.isExpired(B,U?300000:0))if(U){console.log(`[Proxy] Token expired for ${J}, attempting refresh`);let D=await Un0(B);if(D.success&&D.accessToken)await V.upsert({connectionId:J,accessToken:D.accessToken,refreshToken:D.refreshToken??B.refreshToken,scope:D.scope??B.scope,expiresAt:D.expiresIn?new Date(Date.now()+D.expiresIn*1000):null,clientId:B.clientId,clientSecret:B.clientSecret,tokenEndpoint:B.tokenEndpoint}),F=D.accessToken,console.log(`[Proxy] Token refreshed for ${J}`);else await V.delete(J),console.error(`[Proxy] Token refresh failed for ${J}: ${D.error}`)}else await V.delete(J),console.log(`[Proxy] Token expired without refresh capability for ${J}`);else F=B.accessToken}if(!F&&Y.connection_token)F=Y.connection_token;if(F)$.Authorization=`Bearer ${F}`;if(W)$["x-mesh-token"]=W;return $}var fO1=S(()=>{_O1();yO1();Mv()});function Rr(){let Y=new Map;function Q(J,G){let K=Y.get(G);if(K)return console.log(`[ClientPool] Reusing cached client for ${G}`),K;console.log(`[ClientPool] Creating new client for ${G}`);let W=new eJ({name:`outbound-client-${G}`,version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}}});W.onclose=()=>{Y.delete(G)};let Z=W.connect(J,{timeout:30000}).then(()=>W).catch((H)=>{throw Y.delete(G),H});return Y.set(G,Z),Z}return Object.assign(Q,{[Symbol.asyncDispose]:async()=>{let J=[];for(let[G,K]of Y)J.push(K.then((W)=>W.close()).catch((W)=>console.error(`[ClientPool] Error closing client ${G}:`,W)));await Promise.all(J),Y.clear()}})}var bO1=S(()=>{PU()});function zn0(Y){let Q=new _S({command:Y.command,args:Y.args,env:Y.env,cwd:Y.cwd,stderr:"pipe"}),X=Y.name||Y.id,J="\x1B[2m",G="\x1B[0m";return Q.stderr?.on("data",(K)=>{let W=K.toString().trimEnd();if(W)console.error(`${W} \x1B[2m[${X}]\x1B[0m`)}),Q}var Dn0=S(()=>{cq1()});class Pv{innerTransport;constructor(Y){this.innerTransport=Y}async start(){return this.innerTransport.onmessage=(Y)=>{this.handleIncomingMessage(Y)},this.innerTransport.onerror=(Y)=>{this.onerror?.(Y)},this.innerTransport.onclose=()=>{this.onclose?.()},this.innerTransport.start()}async send(Y){return this.handleOutgoingMessage(Y)}async close(){return this.innerTransport.close()}async handleOutgoingMessage(Y){return this.innerTransport.send(Y)}handleIncomingMessage(Y){this.onmessage?.(Y)}isRequest(Y){return"method"in Y&&Y.method!==void 0}isResponse(Y){return"result"in Y||"error"in Y&&!("method"in Y)}onmessage;onerror;onclose}function Ev(Y,...Q){return Q.reduce((X,J)=>J(X),Y)}var On0="mcp.mesh";var Nn0,hO1,MF;var Tv=S(()=>{Nn0=class Nn0 extends Error{constructor(Y){super(Y);this.name="UnauthorizedError"}};hO1=class hO1 extends Error{constructor(Y){super(Y);this.name="ForbiddenError"}};MF=class MF{userId;toolName;boundAuth;role;connectionId;getToolMeta;_granted=!1;constructor(Y,Q,X,J,G,K="self",W){this.userId=Q;this.toolName=X;this.boundAuth=J;this.role=G;this.connectionId=K;this.getToolMeta=W}[Symbol.dispose](){this._granted=!1}setToolName(Y){this.toolName=Y}grant(){return this._granted=!0,{[Symbol.dispose]:()=>{this._granted=!1}}}async check(...Y){if(this._granted)return;if(this.toolName?.startsWith("MESH_PUBLIC_")){this.grant();return}if(!this.userId&&!this.boundAuth){if(this.getToolMeta&&await this.isToolPublic()){this.grant();return}throw new Nn0("Authentication required. Please provide a valid OAuth token or API key.")}let Q=Y.length>0?Y:this.toolName?[this.toolName]:[];if(Q.length===0)throw new hO1("No resources specified for access check");for(let X of Q)if(await this.checkResource(X)){this.grant();return}throw new hO1(`Access denied to: ${Q.join(", ")}`)}async checkResource(Y){if(!this.userId&&!this.boundAuth)return!1;if(this.role==="admin"||this.role==="owner")return!0;if(!this.boundAuth)return!1;let Q={};if(this.connectionId)Q[this.connectionId]=[Y];return this.boundAuth.hasPermission(Q)}async isToolPublic(){if(this.toolName?.startsWith("MESH_PUBLIC_"))return!0;if(!this.getToolMeta)return!1;try{let Y=await this.getToolMeta();if(!Y)return!1;let X=Y[On0]?.public_tool;return X===!0||X==="true"}catch{return!1}}granted(){return this._granted}}});var ul6="mcp.mesh",PP;var Ln0=S(()=>{Tv();PP=class PP extends Pv{options;cachedToolsMap=null;constructor(Y,Q){super(Y);this.options=Q;if(Q.connection.tools)this.cachedToolsMap=new Map(Q.connection.tools.map((X)=>[X.name,X]))}async handleOutgoingMessage(Y){if(!this.isRequest(Y))return this.innerTransport.send(Y);let Q=Y;if(Q.method==="tools/call")await this.authorizeToolCall(Q),this.stripMetaFromArguments(Q);return this.innerTransport.send(Y)}async authorizeToolCall(Y){if(this.options.superUser)return;let X=Y.params.name,{ctx:J,connection:G}=this.options;if(this.isPublicTool(X))return;if(!J.auth.user?.id&&!J.auth.apiKey?.id)throw Error("Authentication required. Please provide a valid OAuth token or API key.");let K=async()=>{return this.cachedToolsMap?.get(X)?._meta};await new MF(J.authInstance,J.auth.user?.id??J.auth.apiKey?.userId,X,J.boundAuth,J.auth.user?.role,G.id,K).check(X)}isPublicTool(Y){if(Y.startsWith("MESH_PUBLIC_"))return!0;if(!this.cachedToolsMap)return!1;let Q=this.cachedToolsMap.get(Y);if(!Q?._meta)return!1;return Q._meta[ul6]?.public_tool===!0}stripMetaFromArguments(Y){let Q=Y.params;if(Q.arguments&&"_meta"in Q.arguments){let{_meta:X,...J}=Q.arguments;Q.arguments=J}}}});function wn0(Y){if(!Y.isError)return;let Q=Y.content;if(!Array.isArray(Q))return;for(let X of Q)if(X&&typeof X==="object"&&"type"in X&&X.type==="text"&&"text"in X&&typeof X.text==="string")return X.text;return}function gO1(Y){if(!Y)return;let Q=Y._meta;if(!Q||typeof Q!=="object"||Array.isArray(Q))return;let X=Q.properties;if(!X||typeof X!=="object"||Array.isArray(X))return;let J={};for(let[G,K]of Object.entries(X))if(typeof K==="string")J[G]=K;return Object.keys(J).length>0?J:void 0}function uO1(Y,Q){if(!Y&&!Q)return;if(!Y)return Q;if(!Q)return Y;return{...Q,...Y}}function mO1(Y){if(Y&&typeof Y==="object"&&!Array.isArray(Y)){let Q=Y,X=Q.structuredContent;if(X&&typeof X==="object"&&!Array.isArray(X))return X;return Q}return{value:Y}}async function ml6(Y,Q){let X=Y.body;if(!X)return{text:"",truncated:!1};let J=X.getReader(),G=new TextDecoder,K=!1,W=0,Z=[];try{while(!0){let{value:H,done:$}=await J.read();if($)break;if(H){if(W+=H.byteLength,W>Q){K=!0;let F=Q-(W-H.byteLength);if(F>0)Z.push(G.decode(H.slice(0,F),{stream:!0}));break}Z.push(G.decode(H,{stream:!0}))}}}finally{J.releaseLock()}return Z.push(G.decode()),{text:Z.join(""),truncated:K}}function ll6(Y){if(!Y)return;let Q=Y.trimEnd().split(`
|
|
1473
1473
|
`);for(let X=Q.length-1;X>=0&&X>=Q.length-5;X--){let J=Q[X]?.trim();if(!J)continue;try{let G=JSON.parse(J);if(G&&typeof G==="object"&&G.type==="finish"){let K={};if(G.usage)K.usage=G.usage;if(G.providerMetadata)K.providerMetadata=G.providerMetadata;if(G.finishReason)K.finishReason=G.finishReason;return Object.keys(K).length>0?K:void 0}}catch{}}return}async function xO1(Y){let{ctx:Q,enabled:X}=Y,J=Y.organizationId??Q.organization?.id;if(!X||!J)return;if(h3(Y.connectionId))return;let G=gO1(Y.request.params.arguments),K=uO1(Q.metadata.properties,G),W=Q.auth.user?.id||Q.auth.apiKey?.userId;if(W)try{let Z=await Q.storage.tags.getUserTagsInOrg(W,J);if(Z.length>0){let H=Z.map(($)=>$.name).join(",");K={...K,user_tags:H}}}catch{}await Q.storage.monitoring.log({organizationId:J,connectionId:Y.connectionId,connectionTitle:Y.connectionTitle,toolName:Y.request.params.name,input:Y.request.params.arguments??{},output:Y.output,isError:Y.isError,errorMessage:Y.errorMessage,durationMs:Y.durationMs,timestamp:new Date,userId:Q.auth.user?.id||Q.auth.apiKey?.userId||null,requestId:Q.metadata.requestId,userAgent:Q.metadata.userAgent,virtualMcpId:Y.virtualMcpId,properties:K})}function An0(Y){let{ctx:Q,enabled:X,connectionId:J,connectionTitle:G,virtualMcpId:K}=Y;return async(W,Z)=>{let H=Date.now();try{let $=await Z(),F=Q.organization?.id;if(X&&F){let V=$.clone();(async()=>{try{let{text:B,truncated:U}=await ml6(V,Mn0),z=Date.now()-H,D=V.headers.get("content-type")??"",L=B;if(D.includes("application/json"))try{L=B.length?JSON.parse(B):null}catch{L=B}let w=$.status>=400,E=w&&L&&typeof L==="object"&&"error"in L?L.error:void 0,T=typeof E==="string"&&E?E:w&&typeof L==="string"&&L.trim()?L.slice(0,500):w?`HTTP ${$.status} ${$.statusText}`.trim():U?`Response body truncated to ${Mn0} bytes`:void 0,C=mO1(L),P=ll6(B);if(P)Object.assign(C,P);await xO1({ctx:Q,enabled:X,organizationId:F,connectionId:J,connectionTitle:G,virtualMcpId:K,request:W,output:C,isError:w,errorMessage:T,durationMs:z})}catch(B){let U=Date.now()-H;await xO1({ctx:Q,enabled:X,organizationId:F,connectionId:J,connectionTitle:G,virtualMcpId:K,request:W,output:{},isError:!0,errorMessage:`Failed to read streamable response body: ${B.message}`,durationMs:U})}})()}return $}catch($){let F=$,V=Date.now()-H;throw await xO1({ctx:Q,enabled:X,connectionId:J,connectionTitle:G,virtualMcpId:K,request:W,output:{},isError:!0,errorMessage:F.message,durationMs:V}),$}}}var Mn0=262144;var lO1=S(()=>{QY()});var EP;var Pn0=S(()=>{WI();lO1();EP=class EP extends Pv{options;inflightRequests=new Map;constructor(Y,Q){super(Y);this.options=Q}async handleOutgoingMessage(Y){if(this.isRequest(Y)){let Q=Y;this.onRequestStart(Q)}return this.innerTransport.send(Y)}handleIncomingMessage(Y){if(this.isResponse(Y)){let Q=Y;this.onResponseEnd(Q)}this.onmessage?.(Y)}onRequestStart(Y){let{ctx:Q,connectionId:X}=this.options,J,G;if(Y.method==="tools/call"&&Y.params){let W=Y.params;J=W.name,G=W.arguments}let K;if(Y.method==="tools/call"&&J)K=Q.tracer.startSpan("mcp.proxy.callTool",{attributes:{"connection.id":X,"tool.name":J,"request.id":Q.metadata.requestId,"jsonrpc.id":Y.id,"jsonrpc.method":Y.method}});if(Y.id!==null&&Y.id!==void 0)this.inflightRequests.set(Y.id,{startTime:Date.now(),method:Y.method,toolName:J,toolArguments:G,span:K})}onResponseEnd(Y){if(Y.id===null||Y.id===void 0)return;let Q=this.inflightRequests.get(Y.id);if(!Q)return;let{ctx:X,connectionId:J}=this.options,{startTime:G,method:K,toolName:W,toolArguments:Z,span:H}=Q,$=Date.now()-G;if(this.inflightRequests.delete(Y.id),K!=="tools/call"||!W)return;let F="error"in Y,V=F?Y.error:Y.result,B=F?{content:[{type:"text",text:Y.error?.message||"Unknown error"}],isError:!0}:V;if(X.meter.createHistogram("connection.proxy.duration").record($,{"connection.id":J,"tool.name":W,status:F?"error":"success"}),F)X.meter.createCounter("connection.proxy.errors").add(1,{"connection.id":J,"tool.name":W,error:Y.error?.message});else X.meter.createCounter("connection.proxy.requests").add(1,{"connection.id":J,"tool.name":W,status:"success"});if(H){if(F&&Y.error)H.recordException(Error(Y.error.message)),H.setAttributes({error:!0,"error.code":Y.error.code,"error.message":Y.error.message});H.end()}this.logToDatabase({toolName:W,toolArguments:Z,result:B,duration:$,isError:Boolean(F)})}async logToDatabase(Y){let{ctx:Q,connectionId:X,connectionTitle:J,virtualMcpId:G}=this.options,{toolName:K,toolArguments:W,result:Z,duration:H,isError:$}=Y;if(!dl().enabled)return;let V=Q.organization?.id;if(!V)return;let B=wn0(Z),U=mO1(Z),z=gO1(W),D=uO1(Q.metadata.properties,z);try{await Q.storage.monitoring.log({organizationId:V,connectionId:X,connectionTitle:J,toolName:K,input:W??{},output:U,isError:$,errorMessage:B,durationMs:H,timestamp:new Date,userId:Q.auth.user?.id||Q.auth.apiKey?.userId||null,requestId:Q.metadata.requestId,userAgent:Q.metadata.userAgent,virtualMcpId:G,properties:D})}catch(L){console.error("[MonitoringTransport] Failed to log to database:",L)}}async close(){for(let Y of this.inflightRequests.values())if(Y.span)Y.span.setAttributes({"transport.closed":!0}),Y.span.end();return this.inflightRequests.clear(),super.close()}}});var En0=S(()=>{Ln0();Pn0()});async function Tn0(Y,Q,X=!1){let J=Y.id,G=Q.connectionId&&Q.connectionId!==J?Q.connectionId:void 0;switch(Y.connection_type){case"STDIO":{if(process.env.UNSAFE_ALLOW_STDIO_TRANSPORT!=="true")throw Error("STDIO connections are disabled in production. Set UNSAFE_ALLOW_STDIO_TRANSPORT=true to enable.");let K=Y.connection_headers;if(!kK(K))throw Error("STDIO connection missing parameters");let W=zn0({id:J,name:Y.title,command:K.command,args:K.args,env:K.envVars,cwd:K.cwd});return W=Ev(W,(Z)=>new PP(Z,{ctx:Q,connection:Y,superUser:X}),(Z)=>new EP(Z,{ctx:Q,connectionId:J,connectionTitle:Y.title,virtualMcpId:G})),dl6(W,J)}case"HTTP":case"Websocket":{if(!Y.connection_url)throw Error(`${Y.connection_type} connection missing URL`);let K=await Av(Y,Q,X),W=Y.connection_headers;if(W&&"headers"in W)Object.assign(K,W.headers);let Z=new UV(new URL(Y.connection_url),{requestInit:{headers:K}});return Z=Ev(Z,(H)=>new PP(H,{ctx:Q,connection:Y,superUser:X}),(H)=>new EP(H,{ctx:Q,connectionId:J,connectionTitle:Y.title,virtualMcpId:G})),Q.getOrCreateClient(Z,J)}case"SSE":{if(!Y.connection_url)throw Error("SSE connection missing URL");let K=await Av(Y,Q,X),W=Y.connection_headers;if(W&&"headers"in W)Object.assign(K,W.headers);let Z=new gD(new URL(Y.connection_url),{requestInit:{headers:K}});return Z=Ev(Z,(H)=>new PP(H,{ctx:Q,connection:Y,superUser:X}),(H)=>new EP(H,{ctx:Q,connectionId:J,connectionTitle:Y.title,virtualMcpId:G})),Q.getOrCreateClient(Z,J)}default:throw Error(`Unknown connection type: ${Y.connection_type}`)}}var dl6;var Cn0=S(()=>{n$();an();vT();fO1();bO1();Dn0();En0();dl6=Rr()});function OB(Y){if(!Y?._meta)return!1;return typeof Y._meta["mcp.mesh"]?.["tool.fn"]==="string"}function jn0(Y){return Y._meta["mcp.mesh"]["tool.fn"]}function Cv(Y,Q,X,J){return{id:Y,name:Q.name,description:Q.description,inputSchema:Q.inputSchema,outputSchema:Q.outputSchema,annotations:Q.annotations,code:Q._meta["mcp.mesh"]["tool.fn"],connection_dependencies:Q._meta.connectionDependencies??[],created_at:X,updated_at:J}}var dO1,yq9,J3,Rn0,In0;var wF=S(()=>{l1();dO1=q.object({title:q.string().optional(),readOnlyHint:q.boolean().optional(),destructiveHint:q.boolean().optional(),idempotentHint:q.boolean().optional(),openWorldHint:q.boolean().optional()}),yq9=q.object({"tool.fn":q.string().describe("JavaScript ES module code that exports a default async function")}),J3=q.object({id:q.string().describe("Unique identifier for the virtual tool (auto-generated)"),name:q.string().min(1).max(255).describe("Tool name (must be unique within the Virtual MCP)"),description:q.string().optional().describe("Human-readable description of what the tool does"),inputSchema:q.record(q.string(),q.unknown()).describe("JSON Schema defining the tool's input parameters"),outputSchema:q.record(q.string(),q.unknown()).optional().describe("JSON Schema defining the tool's output (optional)"),annotations:dO1.optional().describe("MCP tool annotations"),code:q.string().describe("JavaScript ES module code. Must export default an async function: export default async (tools, args) => { ... }"),connection_dependencies:q.array(q.string()).describe("Connection IDs that this tool depends on (specified by the creator)"),created_at:q.string().describe("When the virtual tool was created"),updated_at:q.string().describe("When the virtual tool was last updated")}),Rn0=q.object({name:q.string().min(1).max(255).describe("Tool name (must be unique within the Virtual MCP)"),description:q.string().optional().describe("Human-readable description"),inputSchema:q.record(q.string(),q.unknown()).describe("JSON Schema defining the tool's input parameters"),outputSchema:q.record(q.string(),q.unknown()).optional().describe("JSON Schema for output"),annotations:dO1.optional().describe("MCP tool annotations"),code:q.string().describe("JavaScript ES module code. Must export default an async function: export default async (tools, args) => { ... }"),connection_dependencies:q.array(q.string()).optional().describe("Connection IDs that this tool depends on. Creates indirect aggregations to prevent deletion of referenced connections.")}),In0=q.object({name:q.string().min(1).max(255).optional().describe("New tool name"),description:q.string().nullable().optional().describe("New description (null to clear)"),inputSchema:q.record(q.string(),q.unknown()).optional().describe("New input schema"),outputSchema:q.record(q.string(),q.unknown()).nullable().optional().describe("New output schema (null to clear)"),annotations:dO1.nullable().optional().describe("New annotations (null to clear)"),code:q.string().optional().describe("New JavaScript code"),connection_dependencies:q.array(q.string()).optional().describe("Connection IDs that this tool depends on. Replaces existing dependencies if provided.")})});function MO(Y){return(Q)=>{if(Q instanceof d0&&Q.code===s0.MethodNotFound)return Y;throw Q}}var pO1=S(()=>{vQ()});class Sn0{factory;promise=null;constructor(Y){this.factory=Y}getOrCreatePromise(){if(!this.promise)this.promise=this.factory();return this.promise}then(Y,Q){return this.getOrCreatePromise().then(Y,Q)}catch(Y){return this.getOrCreatePromise().catch(Y)}finally(Y){return this.getOrCreatePromise().finally(Y)}}function TP(Y){return new Sn0(Y)}function pl6(Y,Q,X){let J=new eJ({name:`lazy-${Y.id}`,version:"1.0.0"},{capabilities:{}}),G=null;function K(){if(!G)G=y5(Y,Q,X).then((H)=>{if(Y.connection_type==="HTTP"||Y.connection_type==="SSE"||Y.connection_type==="Websocket")return wO(H,Y.id,Y,Q,{superUser:X});return H});return G}if(Y.connection_type!=="VIRTUAL"&&Array.isArray(Y.tools)&&Y.tools.length>0)J.listTools=async()=>({tools:Y.tools.map((H)=>({name:H.name,description:H.description,inputSchema:H.inputSchema,outputSchema:H.outputSchema,annotations:H.annotations,_meta:H._meta}))});else J.listTools=async()=>{return(await K()).listTools()};J.callTool=async(H,$,F)=>{return(await K()).callTool(H,$,F)},J.listResources=async()=>{return(await K()).listResources()},J.listPrompts=async()=>{return(await K()).listPrompts()},J.getPrompt=async(H,$)=>{return(await K()).getPrompt(H,$)},J.readResource=async(H,$)=>{return(await K()).readResource(H,$)},J.callStreamableTool=async(H,$)=>{let F=await K();if("callStreamableTool"in F&&typeof F.callStreamableTool==="function")return F.callStreamableTool(H,$);let V=await F.callTool({name:H,arguments:$});return new Response(JSON.stringify(V),{headers:{"Content-Type":"application/json"}})};let Z=J.close.bind(J);return J.close=async()=>{if(G){let H=await G.catch(()=>null);if(H)await H.close().catch(()=>{})}await Z()},J}function cl6(Y,Q,X=!1){let J=new Map;for(let G of Y)J.set(G.id,pl6(G,Q,X));return J}async function kn0(Y){let Q=[];for(let[,X]of Y)Q.push(X.close().catch(()=>{}));await Promise.all(Q)}var CP;var cO1=S(()=>{RP();pO1();PU();Nr();wF();CP=class CP extends eJ{options;ctx;_cachedTools;_cachedResources;_cachedPrompts;_clients;_connections;_selectionMap;constructor(Y,Q){super({name:"virtual-mcp-passthrough",version:"1.0.0"},{capabilities:{tasks:{list:{},cancel:{},requests:{tool:{call:{}}}}}});this.options=Y;this.ctx=Q;this._selectionMap=new Map;for(let X of Y.virtualMcp.connections)this._selectionMap.set(X.connection_id,X);this._connections=new Map;for(let X of Y.connections)this._connections.set(X.id,X);this._clients=cl6(this.options.connections,this.ctx,this.options.superUser),this._cachedTools=TP(()=>this.loadToolsCache()),this._cachedResources=TP(()=>this.loadCache("resources")),this._cachedPrompts=TP(()=>this.loadCache("prompts"))}async loadToolsCache(){let Y=this._clients,Q=await Promise.all(Array.from(Y.entries()).map(async([W,Z])=>{try{let H=await Z.listTools().then((F)=>F.tools),$=this._selectionMap.get(W);if($?.selected_tools?.length){let F=new Set($.selected_tools);H=H.filter((V)=>F.has(V.name))}return{connectionId:W,data:H}}catch(H){return console.error(`[PassthroughClient] Failed to load tools for connection ${W}:`,H),null}})),X=[],J=new Map,G=new Map,K=this.options.virtualTools??[];for(let W of K){if(J.has(W.name))continue;let Z={name:W.name,description:W.description,inputSchema:W.inputSchema,outputSchema:W.outputSchema,annotations:W.annotations,_meta:{connectionId:this.options.virtualMcp.id??"__VIRTUAL__",connectionTitle:this.options.virtualMcp.title}};X.push(Z),J.set(W.name,"__VIRTUAL__"),G.set(W.name,W)}for(let W of Q){if(!W)continue;let{connectionId:Z,data:H}=W,F=this._connections.get(Z)?.title??"";for(let V of H){let B=V.name;if(J.has(B))continue;let U={...V,_meta:{connectionId:Z,connectionTitle:F,...V?._meta}};X.push(U),J.set(B,Z)}}return{data:X,mappings:J,virtualTools:G}}async loadCache(Y){let Q=this._clients,X=await Promise.all(Array.from(Q.entries()).map(async([K,W])=>{try{let Z=Y==="resources"?await W.listResources().catch(MO({resources:[]})).then((F)=>F.resources):await W.listPrompts().catch(MO({prompts:[]})).then((F)=>F.prompts),H=this._selectionMap.get(K),$=Y==="resources"?"selected_resources":"selected_prompts";if(H?.[$]?.length){let F=new Set(H[$]);return{connectionId:K,data:Z.filter((V)=>F.has(V.name))}}return{connectionId:K,data:Z}}catch(Z){return console.error(`[PassthroughClient] Failed to load cache for connection ${K}:`,Z),null}})),J=[],G=new Map;for(let K of X){if(!K)continue;let{connectionId:W,data:Z}=K,$=this._connections.get(W)?.title??"";for(let F of Z){let V=F.name??F.uri;if(G.has(V))continue;let B={...F,_meta:{connectionId:W,connectionTitle:$,...F?._meta}};J.push(B),G.set(V,W)}}return{data:J,mappings:G}}async listTools(){return{tools:(await this._cachedTools).data}}async callTool(Y){let Q=await this._cachedTools,X=this._clients,J=Q.mappings.get(Y.name);if(!J)return{content:[{type:"text",text:`Tool not found: ${Y.name}`}],isError:!0};if(J==="__VIRTUAL__")return this.executeVirtualTool(Y.name,Y.arguments??{},Q,X);let G=X.get(J);if(!G)return{content:[{type:"text",text:`Connection not found for tool: ${Y.name}`}],isError:!0};return await G.callTool({name:Y.name,arguments:Y.arguments??{}})}async executeVirtualTool(Y,Q,X,J){let G=X.virtualTools.get(Y);if(!G)return{content:[{type:"text",text:`Virtual tool not found: ${Y}`}],isError:!0};let K=jn0(G),W={};for(let[Z,H]of X.mappings){if(H==="__VIRTUAL__")continue;let $=J.get(H);if(!$)continue;W[Z]=async(F)=>{let V=await $.callTool({name:Z,arguments:F});if(V.structuredContent&&typeof V.structuredContent==="object")return V.structuredContent;let B=V.content;if(B?.[0]?.type==="text"&&B[0].text)try{return JSON.parse(B[0].text)}catch{return B[0].text}return V}}try{let H=`
|
|
1474
1474
|
const __virtualToolFn = ${K.replace(/^\s*export\s+default\s+/,"").trim()};
|
|
1475
1475
|
export default async (tools) => {
|