decocms 2.176.0 → 2.176.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-PBJUtpjc.js → AlertCircle-BWr4XQe9.js} +1 -1
- package/dist/client/assets/{AlignLeft-CddYwC43.js → AlignLeft-BJyvDaBk.js} +1 -1
- package/dist/client/assets/{ArrowDown-LiBnMzQV.js → ArrowDown-BPMtK04S.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BHzi0YLf.js → ArrowLeft-GOjXvqCa.js} +1 -1
- package/dist/client/assets/{ArrowUp-WIHiBhdv.js → ArrowUp-DqOjcDuh.js} +1 -1
- package/dist/client/assets/{Building02-c7FCt8-6.js → Building02-D_v8ZXC2.js} +1 -1
- package/dist/client/assets/{Check-Bme4aNg5.js → Check-DAFdA2oM.js} +1 -1
- package/dist/client/assets/{CheckCircle-BSVa-h_Y.js → CheckCircle-BL2mIAJn.js} +1 -1
- package/dist/client/assets/{CheckVerified02-e9BOcL0K.js → CheckVerified02-YYsvmiw4.js} +1 -1
- package/dist/client/assets/{ChevronDown-jyPVRLzp.js → ChevronDown-C-3qjfHK.js} +1 -1
- package/dist/client/assets/{ChevronLeft-Bn35AKxx.js → ChevronLeft-Dugo1z8_.js} +1 -1
- package/dist/client/assets/{ChevronRight-Ct9VK1GH.js → ChevronRight-B3gSyJmK.js} +1 -1
- package/dist/client/assets/{ChevronUp-B5BOcmGB.js → ChevronUp-Rk5dLXNx.js} +1 -1
- package/dist/client/assets/{Clock-Bwl2wOhM.js → Clock-Ccv6eV04.js} +1 -1
- package/dist/client/assets/{Code01-DygQPwlG.js → Code01-CoEt5nyY.js} +1 -1
- package/dist/client/assets/{Container-BeAIfNvy.js → Container-CQmXt7Nc.js} +1 -1
- package/dist/client/assets/{Copy01-ekqsSfJN.js → Copy01-D7uh0hW0.js} +1 -1
- package/dist/client/assets/{Dataflow03-BGqN1hrV.js → Dataflow03-ccC0qbkR.js} +1 -1
- package/dist/client/assets/{DotsHorizontal-BYFCLgks.js → DotsHorizontal-C3QGwRko.js} +1 -1
- package/dist/client/assets/{DotsVertical-Dn5mVo7u.js → DotsVertical-D5tMnzaQ.js} +1 -1
- package/dist/client/assets/{Download01-DQJbGhrI.js → Download01-BDm0aKH5.js} +1 -1
- package/dist/client/assets/{Edit01-BxDvpu_b.js → Edit01-DEd4k1xo.js} +1 -1
- package/dist/client/assets/{Edit05-Bta0rpFO.js → Edit05-RRC6ol7j.js} +1 -1
- package/dist/client/assets/{Eye-DN-kY_sb.js → Eye-MRRTHIte.js} +1 -1
- package/dist/client/assets/{EyeOff-E0TupCAH.js → EyeOff-CgRP1cSC.js} +1 -1
- package/dist/client/assets/{File02-Cyzf2kpD.js → File02-DdRvGWJN.js} +1 -1
- package/dist/client/assets/{File06-Ba0KxpWu.js → File06-DbRSeish.js} +1 -1
- package/dist/client/assets/{FilterLines-Ce9H-AFe.js → FilterLines-nV8jE7JI.js} +1 -1
- package/dist/client/assets/{Globe01-Cks65mCV.js → Globe01-Bb7jNfEM.js} +1 -1
- package/dist/client/assets/{Globe02-CB2InS06.js → Globe02-CDBspixd.js} +1 -1
- package/dist/client/assets/{Grid01-BvWQ72pJ.js → Grid01-COkHqk9k.js} +1 -1
- package/dist/client/assets/{Home02-C33y4DXe.js → Home02-Bjdq3zLu.js} +1 -1
- package/dist/client/assets/{Image01-B9BH_f0p.js → Image01-D4-tispo.js} +1 -1
- package/dist/client/assets/{Inbox01-ZPruuuHz.js → Inbox01-DiWhz3sk.js} +1 -1
- package/dist/client/assets/{InfoCircle-ETSHVG2F.js → InfoCircle-tftxVx0C.js} +1 -1
- package/dist/client/assets/{Key01-CdH7i8vY.js → Key01-Cv0XYLbb.js} +1 -1
- package/dist/client/assets/{LayersTwo01-8gQGsURS.js → LayersTwo01-DdRcHsrK.js} +1 -1
- package/dist/client/assets/{LayoutLeft-Bn9kcy6T.js → LayoutLeft-BuqgN7z4.js} +1 -1
- package/dist/client/assets/{Link01-B4s1G5Jr.js → Link01-Bo114MSv.js} +1 -1
- package/dist/client/assets/{LinkExternal01-B5VTVW6k.js → LinkExternal01-Div7VvWd.js} +1 -1
- package/dist/client/assets/{List-BU70NJSh.js → List-_Z2X7aPf.js} +1 -1
- package/dist/client/assets/{Loading01-Dt16NixZ.js → Loading01-BYjTtpy0.js} +1 -1
- package/dist/client/assets/{Lock01-DZeZ3WxC.js → Lock01-j13GCiRT.js} +1 -1
- package/dist/client/assets/{Play-WAyK_VUq.js → Play-BOK5c4Hp.js} +1 -1
- package/dist/client/assets/{Plus-DN4FtVmx.js → Plus-1vH_gFoY.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-B88e0cNw.js → RefreshCcw01-ghOVEWuz.js} +1 -1
- package/dist/client/assets/{Save01-BCInJWrH.js → Save01-43mxrIvD.js} +1 -1
- package/dist/client/assets/{SearchMd-BQseJVRu.js → SearchMd-Dn4cWwEm.js} +1 -1
- package/dist/client/assets/{Settings01-CS4vVmx5.js → Settings01-B3FNPQBg.js} +1 -1
- package/dist/client/assets/{Shield01-BZpNsAZG.js → Shield01-0suO3hAe.js} +1 -1
- package/dist/client/assets/{Terminal-BDeJ6lHB.js → Terminal-CvfSVl9m.js} +1 -1
- package/dist/client/assets/{Tool01-xNX6v26H.js → Tool01-3i6uRXKJ.js} +1 -1
- package/dist/client/assets/{Trash01-PnuUudMl.js → Trash01-Dmi4vR7Q.js} +1 -1
- package/dist/client/assets/{Upload01-CSDtabhZ.js → Upload01-Cqh5tD2o.js} +1 -1
- package/dist/client/assets/{Users03-rAyzQyh3.js → Users03-CUiUl0DH.js} +1 -1
- package/dist/client/assets/{X-CxZVsh3L.js → X-Car5B1de.js} +1 -1
- package/dist/client/assets/{XClose-hdsxwv2G.js → XClose-D08ltwBw.js} +1 -1
- package/dist/client/assets/{Zap-azdz5wfI.js → Zap-CbjhdbUU.js} +1 -1
- package/dist/client/assets/{agent-connections-preview-XZw5-X3u.js → agent-connections-preview-Dv4euUYL.js} +1 -1
- package/dist/client/assets/{agent-detail-BJSxCMs1.js → agent-detail-BignzT6b.js} +1 -1
- package/dist/client/assets/{agents-DQWRQl2B.js → agents-DRDlT25N.js} +1 -1
- package/dist/client/assets/{ai-providers-logos-DPOiBl7V.js → ai-providers-logos-4n_w8l7D.js} +1 -1
- package/dist/client/assets/{alert-dialog-DdwA_v8c.js → alert-dialog-BZtQAioB.js} +1 -1
- package/dist/client/assets/{auth-catchall-WCsr2pQN.js → auth-catchall-BorI3Y5Q.js} +1 -1
- package/dist/client/assets/{automation-detail-BZk6VK2r.js → automation-detail-MAP63xhb.js} +1 -1
- package/dist/client/assets/{automations-B0oZ4Oep.js → automations-CXEh0WQH.js} +1 -1
- package/dist/client/assets/{avatar-CXKBBJaI.js → avatar-DEdDAQ0j.js} +1 -1
- package/dist/client/assets/{badge-BfLRgdaW.js → badge-BTw8dF6C.js} +1 -1
- package/dist/client/assets/{binder-B5Q0NNkg.js → binder-B2xnCBeC.js} +1 -1
- package/dist/client/assets/{breadcrumb-BhQI8Xw3.js → breadcrumb-CcE89MsN.js} +1 -1
- package/dist/client/assets/{card-B8QXMrj8.js → card-B6XTMOTf.js} +1 -1
- package/dist/client/assets/{checkbox-C5Om9oxx.js → checkbox-BA_JFbx4.js} +1 -1
- package/dist/client/assets/{collapsible-MCSgly5t.js → collapsible-CW12HasT.js} +1 -1
- package/dist/client/assets/{collection-detail-CrytnlOI.js → collection-detail-DTZ81ye0.js} +1 -1
- package/dist/client/assets/{collection-display-button-D7NovPlc.js → collection-display-button-BJQ_VSFQ.js} +1 -1
- package/dist/client/assets/{collection-search-DDX1Zkg7.js → collection-search-D6ILFEtf.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-YGokzak8.js → collection-table-wrapper-D0JGm79B.js} +1 -1
- package/dist/client/assets/{collection-tabs-D8NPXaOU.js → collection-tabs-fsXO7rse.js} +1 -1
- package/dist/client/assets/{command-BVlE6-p8.js → command-DwfoahUI.js} +1 -1
- package/dist/client/assets/{connection-card-D0Hulz9h.js → connection-card-CoZ_ixiG.js} +1 -1
- package/dist/client/assets/{connection-detail-C-Ge5CVn.js → connection-detail-BPi4jlBF.js} +1 -1
- package/dist/client/assets/{connection-status-CxcA3Thg.js → connection-status-CulzjjXt.js} +1 -1
- package/dist/client/assets/{connections-DWyHpNQR.js → connections-2fSWPLii.js} +1 -1
- package/dist/client/assets/{constants-CKGlP4oN.js → constants-CLw0F8Mm.js} +1 -1
- package/dist/client/assets/constants-D3bMpbG0.js +1 -0
- package/dist/client/assets/{context-ow-zK3BP.js → context-ClUgEsLK.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-CFn_U9MK.js → create-organization-dialog-CNZiViYc.js} +1 -1
- package/dist/client/assets/{create-project-dialog-Rt5_XeVq.js → create-project-dialog-QYAKiAC_.js} +1 -1
- package/dist/client/assets/{danger-CgzhgW7h.js → danger-1mM9iHWV.js} +1 -1
- package/dist/client/assets/{danger-zone-CvDs5VVH.js → danger-zone-DSO2EIjr.js} +1 -1
- package/dist/client/assets/{dependencies-BbmKfxYe.js → dependencies-DtSMIESZ.js} +1 -1
- package/dist/client/assets/{dialog-COv8XUO0.js → dialog-ZIc7OUaM.js} +1 -1
- package/dist/client/assets/{dropdown-menu-Cr1iKfFo.js → dropdown-menu-EcTFyr4x.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-BIVc19gr.js → dynamic-plugin-layout-D40fWFup.js} +1 -1
- package/dist/client/assets/{editable-task-title-CrGgc8Hx.js → editable-task-title-CeJC7Fwa.js} +1 -1
- package/dist/client/assets/{empty-state-DsQ7yRoE.js → empty-state-gZUVmgL7.js} +1 -1
- package/dist/client/assets/{empty-state-CsEI90cv.js → empty-state-m7QcZ687.js} +1 -1
- package/dist/client/assets/{env-vars-editor-r00KzDtj.js → env-vars-editor-CIM7XauD.js} +1 -1
- package/dist/client/assets/{extract-connection-data-D46U8dB4.js → extract-connection-data-DEaEvOm7.js} +1 -1
- package/dist/client/assets/{file-browser-C8BCEBfL.js → file-browser-ChPNBU91.js} +2 -2
- package/dist/client/assets/{form-CZrleug2.js → form-Cd_AEgzv.js} +1 -1
- package/dist/client/assets/{general-39EgW9sq.js → general-mH6Dkpor.js} +1 -1
- package/dist/client/assets/{grid-view-CYvRmpTY.js → grid-view-C9tD8dqF.js} +1 -1
- package/dist/client/assets/{home-CwDvuqcO.js → home-icifeNIm.js} +1 -1
- package/dist/client/assets/{index-cEL2CgNm.js → index-BPs3Pxaa.js} +1 -1
- package/dist/client/assets/{index-Bc75bxbq.js → index-Bg2XE05Y.js} +1 -1
- package/dist/client/assets/{index-B23wyLB_.js → index-BrqeZa9X.js} +1 -1
- package/dist/client/assets/{index-DRLd-piX.js → index-CRi6734Z.js} +1 -1
- package/dist/client/assets/{index-CVyJGNS2.js → index-CfjT_Fv-.js} +1 -1
- package/dist/client/assets/{index-CT-515LV.js → index-Cg4edYBM.js} +1 -1
- package/dist/client/assets/{index-sEMWxAyS.js → index-Cz_J9f63.js} +1 -1
- package/dist/client/assets/{index-CsqngJxb.js → index-DKWOGpkx.js} +1 -1
- package/dist/client/assets/{index-BlBXXIdz.js → index-Dk4FCobs.js} +1 -1
- package/dist/client/assets/{index-iqPDmcBY.js → index-DxqOk4x4.js} +1 -1
- package/dist/client/assets/{index-B_DxRVw1.js → index-OyLnxARk.js} +3 -3
- package/dist/client/assets/{infiniteQueryObserver-DNhlrWmr.js → infiniteQueryObserver-BkZg7AVk.js} +1 -1
- package/dist/client/assets/{input-DqwWeNgs.js → input-B4YrZuiK.js} +1 -1
- package/dist/client/assets/{integration-icon-Dv0HduyT.js → integration-icon-B3aufi6R.js} +1 -1
- package/dist/client/assets/{label--AQoxbpU.js → label-BoRKSV_h.js} +1 -1
- package/dist/client/assets/{layout-Cji69-Fr.js → layout-C2-eT_B4.js} +1 -1
- package/dist/client/assets/{layout-CDyeWvbl.js → layout-DwPAPIK-.js} +1 -1
- package/dist/client/assets/{login-D1A8YvmQ.js → login-CYxKPB-k.js} +1 -1
- package/dist/client/assets/{logo-upload-BlIbeyor.js → logo-upload-DsXuRpYi.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-D7CJTHIn.js → mcp-app-renderer-KZyUYhBW.js} +1 -1
- package/dist/client/assets/{mcp-server-card-PhaJL10h.js → mcp-server-card-mO0UAT9W.js} +1 -1
- package/dist/client/assets/{mcp-server-detail-BInJ9Okh.js → mcp-server-detail-CyByMkle.js} +2 -2
- package/dist/client/assets/{members-WK1ZXtTy.js → members-3oNbzlXC.js} +1 -1
- package/dist/client/assets/{monaco-editor-Dgc89AWr.js → monaco-editor-DDZgyrgO.js} +1 -1
- package/dist/client/assets/{monitoring-Co1Fc87j.js → monitoring-Xs5hJ6u_.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-edit-BllFPC-c.js → monitoring-dashboard-edit-C_1U7sTf.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-view-CztiwjLo.js → monitoring-dashboard-view-DcMyYV2C.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-C4WAOhN_.js → monitoring-stats-row-CIKRC_fM.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Bcscfh1C.js → oauth-callback-ai-provider-CX0oMmvR.js} +1 -1
- package/dist/client/assets/{oauth-callback-oApNt2lX.js → oauth-callback-kezpwk-4.js} +1 -1
- package/dist/client/assets/{org-ai-providers-BHi1kOOt.js → org-ai-providers-dfJpkNdu.js} +1 -1
- package/dist/client/assets/{page-Dpk4jTO5.js → page-Y307a-9q.js} +1 -1
- package/dist/client/assets/{page-BZV8vSMw.js → page-y0K-3s3k.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-BqFvCCv9.js → plugin-empty-state-BB0mg-1W.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-DGylhF1c.js → plugin-empty-state-DwyPPEO0.js} +1 -1
- package/dist/client/assets/{plugin-header-B9UGjso3.js → plugin-header-BMLNemwj.js} +1 -1
- package/dist/client/assets/{plugin-header-CMHji8Df.js → plugin-header-DNeIXlLi.js} +1 -1
- package/dist/client/assets/plugins-CVEdGukW.js +1 -0
- package/dist/client/assets/{popover-DOnHuwq3.js → popover-BKHsia9C.js} +1 -1
- package/dist/client/assets/{project-app-view-fPmiutKj.js → project-app-view-C7kPLPhi.js} +1 -1
- package/dist/client/assets/{project-layout-CDVw6pd9.js → project-layout-C_1_eCl-.js} +1 -1
- package/dist/client/assets/{project-plugins-DwwhiaLk.js → project-plugins-BgoKgZwd.js} +1 -1
- package/dist/client/assets/{projects-list-BY_yiyPl.js → projects-list-B3H-urrL.js} +1 -1
- package/dist/client/assets/{registry-layout-4qwa3Yrl.js → registry-layout-BHOAsCzG.js} +1 -1
- package/dist/client/assets/{registry-utils--TC_kKCq.js → registry-utils-D0qx2c0_.js} +1 -1
- package/dist/client/assets/{reset-password-ChK1U3PS.js → reset-password-o3nCvS90.js} +1 -1
- package/dist/client/assets/{resizable-DXBCOl3J.js → resizable-1OPd79St.js} +1 -1
- package/dist/client/assets/{save-actions-ChdDeTz6.js → save-actions-DQ0FV8E3.js} +1 -1
- package/dist/client/assets/{scroll-area-ACn8ZLYT.js → scroll-area-BSQHcCri.js} +1 -1
- package/dist/client/assets/{select-BM9jpLT2.js → select-Ctls6rHz.js} +1 -1
- package/dist/client/assets/{select-virtual-mcp-DzKjKtT5.js → select-virtual-mcp-CEX-N6yN.js} +1 -1
- package/dist/client/assets/{sheet-DCDIRpJJ.js → sheet-MAyp9_-H.js} +1 -1
- package/dist/client/assets/{shell-layout-BTXUcCYK.js → shell-layout-8MdYJa94.js} +2 -2
- package/dist/client/assets/{sidebar-settings-Dy0o9qBx.js → sidebar-settings-BtI4Obrm.js} +1 -1
- package/dist/client/assets/{skeleton-BkpiIfDB.js → skeleton-DAvz6Hk5.js} +1 -1
- package/dist/client/assets/{spinner-tJ67zxkj.js → spinner-CItj22uq.js} +1 -1
- package/dist/client/assets/{store-invite-CTVa-Zvm.js → store-invite-Dr9c1QQu.js} +1 -1
- package/dist/client/assets/{switch-BE6ziGyo.js → switch-BunRXVYQ.js} +1 -1
- package/dist/client/assets/{table-BOA7X4H8.js → table-DHN8Pbh9.js} +1 -1
- package/dist/client/assets/{tabs-BQ5doEBy.js → tabs-kzZLmFuM.js} +1 -1
- package/dist/client/assets/{task-status-B3QSknHK.js → task-status-D6cPLJpA.js} +1 -1
- package/dist/client/assets/tasks-CZAS_EEA.js +1 -0
- package/dist/client/assets/{tasks-panel-BXchRGWe.js → tasks-panel-6uv7gp5j.js} +1 -1
- package/dist/client/assets/{textarea-BDS2584p.js → textarea-CpLkXx5p.js} +1 -1
- package/dist/client/assets/{time-range-picker-CWEE6Pax.js → time-range-picker-CYn_bf9F.js} +1 -1
- package/dist/client/assets/{toggle-group-B9XVwguR.js → toggle-group-C-kSfPqI.js} +1 -1
- package/dist/client/assets/{tools-list-DO_G3ceo.js → tools-list-GuN2kaNF.js} +1 -1
- package/dist/client/assets/{tooltip-Bm11lCIm.js → tooltip--UA5heKX.js} +1 -1
- package/dist/client/assets/{topbar-portal-XGVG-nsS.js → topbar-portal-M3PPIThx.js} +1 -1
- package/dist/client/assets/{types-BnNswHwQ.js → types-DoomhLgW.js} +1 -1
- package/dist/client/assets/{use-automations-nu85KLSx.js → use-automations-D5ELbflL.js} +1 -1
- package/dist/client/assets/{use-collections-aokT1D_C.js → use-collections-DXLoMYCx.js} +1 -1
- package/dist/client/assets/{use-connection-DA77pjoV.js → use-connection-B7ll8uNa.js} +1 -1
- package/dist/client/assets/{use-copy-CPgIfOPM.js → use-copy-XD9UDj7l.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Dd303mOp.js → use-create-virtual-mcp-BvSTYw2n.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DXKnZJHX.js → use-infinite-scroll-CSG4wWka.js} +1 -1
- package/dist/client/assets/{use-install-from-registry-C_csgcCs.js → use-install-from-registry-1KLotWZ_.js} +1 -1
- package/dist/client/assets/{use-list-state-CFQBiz4L.js → use-list-state-CVKHwo0P.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-Dw4CvfV3.js → use-mcp-prompts-DyPVjaKa.js} +1 -1
- package/dist/client/assets/{use-mcp-resources-CFkkQw1d.js → use-mcp-resources-CFTlLllB.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-C3Vj1u8m.js → use-mcp-tools-S01H2JtZ.js} +1 -1
- package/dist/client/assets/{use-members-BbXqk449.js → use-members-BXkvGAIM.js} +1 -1
- package/dist/client/assets/{use-mobile-BarAf2zx.js → use-mobile-CgJAXGMs.js} +1 -1
- package/dist/client/assets/{use-project-CPyjDcpX.js → use-project-C2o9r0US.js} +1 -1
- package/dist/client/assets/{use-store-discovery-DupAMgFS.js → use-store-discovery-W6XcrfUT.js} +1 -1
- package/dist/client/assets/{use-view-mode-qVlfLymN.js → use-view-mode-CGzXYNrX.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-FAfRsySa.js → use-virtual-mcp-B8SbBr9v.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-C9KaycVy.js +1 -0
- package/dist/client/assets/{useMutation-d1AXy22c.js → useMutation-B_6d8oLI.js} +1 -1
- package/dist/client/assets/useQuery-Brtj4EoG.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-DD7d1y3B.js +1 -0
- package/dist/client/assets/{user-z34A3977.js → user-BLAfg6Ev.js} +1 -1
- package/dist/client/assets/{workflow-D77B4RT7.js → workflow-DHe_PiQF.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +230 -230
- package/dist/server/node_modules/pg-int8/LICENSE +13 -0
- package/dist/server/node_modules/pg-int8/README.md +16 -0
- package/dist/server/node_modules/pg-int8/index.js +100 -0
- package/dist/server/node_modules/pg-int8/package.json +24 -0
- package/dist/server/node_modules/postgres-bytea/index.js +33 -0
- package/dist/server/node_modules/{xtend/LICENSE → postgres-bytea/license} +2 -1
- package/dist/server/node_modules/postgres-bytea/package.json +34 -0
- package/dist/server/node_modules/postgres-bytea/readme.md +34 -0
- package/dist/server/node_modules/postgres-date/index.js +116 -0
- package/dist/server/node_modules/{pg-connection-string/LICENSE → postgres-date/license} +5 -5
- package/dist/server/node_modules/postgres-date/package.json +33 -0
- package/dist/server/node_modules/postgres-date/readme.md +49 -0
- package/dist/server/node_modules/postgres-interval/index.d.ts +20 -0
- package/dist/server/node_modules/postgres-interval/index.js +125 -0
- package/dist/server/node_modules/{pg-cloudflare/LICENSE → postgres-interval/license} +6 -6
- package/dist/server/node_modules/postgres-interval/package.json +36 -0
- package/dist/server/node_modules/postgres-interval/readme.md +48 -0
- package/dist/server/node_modules/split2/LICENSE +13 -0
- package/dist/server/node_modules/split2/README.md +85 -0
- package/dist/server/node_modules/split2/bench.js +27 -0
- package/dist/server/node_modules/split2/index.js +141 -0
- package/dist/server/node_modules/split2/package.json +39 -0
- package/dist/server/node_modules/split2/test.js +409 -0
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/constants-DqZ0hFNm.js +0 -1
- package/dist/client/assets/plugins-DcIPR0Gj.js +0 -1
- package/dist/client/assets/tasks-BqsZZgtJ.js +0 -1
- package/dist/client/assets/useInfiniteQuery-CCGqKrT7.js +0 -1
- package/dist/client/assets/useQuery-B8Io0Oda.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DsCmMd3U.js +0 -1
- package/dist/server/node_modules/pg-cloudflare/README.md +0 -112
- package/dist/server/node_modules/pg-cloudflare/dist/empty.d.ts +0 -2
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js +0 -6
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js.map +0 -1
- package/dist/server/node_modules/pg-cloudflare/dist/index.d.ts +0 -31
- package/dist/server/node_modules/pg-cloudflare/dist/index.js +0 -152
- package/dist/server/node_modules/pg-cloudflare/dist/index.js.map +0 -1
- package/dist/server/node_modules/pg-cloudflare/esm/index.mjs +0 -3
- package/dist/server/node_modules/pg-cloudflare/package.json +0 -39
- package/dist/server/node_modules/pg-cloudflare/src/empty.ts +0 -3
- package/dist/server/node_modules/pg-cloudflare/src/index.ts +0 -166
- package/dist/server/node_modules/pg-cloudflare/src/types.d.ts +0 -25
- package/dist/server/node_modules/pg-connection-string/README.md +0 -105
- package/dist/server/node_modules/pg-connection-string/esm/index.mjs +0 -8
- package/dist/server/node_modules/pg-connection-string/index.d.ts +0 -36
- package/dist/server/node_modules/pg-connection-string/index.js +0 -231
- package/dist/server/node_modules/pg-connection-string/package.json +0 -52
- package/dist/server/node_modules/pg-pool/LICENSE +0 -21
- package/dist/server/node_modules/pg-pool/README.md +0 -357
- package/dist/server/node_modules/pg-pool/esm/index.mjs +0 -5
- package/dist/server/node_modules/pg-pool/index.js +0 -517
- package/dist/server/node_modules/pg-pool/package.json +0 -51
- package/dist/server/node_modules/pg-protocol/LICENSE +0 -21
- package/dist/server/node_modules/pg-protocol/README.md +0 -3
- package/dist/server/node_modules/pg-protocol/dist/b.d.ts +0 -1
- package/dist/server/node_modules/pg-protocol/dist/b.js +0 -23
- package/dist/server/node_modules/pg-protocol/dist/b.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.d.ts +0 -15
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js +0 -55
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.d.ts +0 -16
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js +0 -81
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +0 -1
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js +0 -530
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/index.d.ts +0 -6
- package/dist/server/node_modules/pg-protocol/dist/index.js +0 -15
- package/dist/server/node_modules/pg-protocol/dist/index.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/messages.d.ts +0 -162
- package/dist/server/node_modules/pg-protocol/dist/messages.js +0 -160
- package/dist/server/node_modules/pg-protocol/dist/messages.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +0 -1
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js +0 -252
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/parser.d.ts +0 -24
- package/dist/server/node_modules/pg-protocol/dist/parser.js +0 -324
- package/dist/server/node_modules/pg-protocol/dist/parser.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/dist/serializer.d.ts +0 -42
- package/dist/server/node_modules/pg-protocol/dist/serializer.js +0 -189
- package/dist/server/node_modules/pg-protocol/dist/serializer.js.map +0 -1
- package/dist/server/node_modules/pg-protocol/esm/index.js +0 -11
- package/dist/server/node_modules/pg-protocol/package.json +0 -45
- package/dist/server/node_modules/pg-protocol/src/b.ts +0 -25
- package/dist/server/node_modules/pg-protocol/src/buffer-reader.ts +0 -58
- package/dist/server/node_modules/pg-protocol/src/buffer-writer.ts +0 -85
- package/dist/server/node_modules/pg-protocol/src/inbound-parser.test.ts +0 -575
- package/dist/server/node_modules/pg-protocol/src/index.ts +0 -11
- package/dist/server/node_modules/pg-protocol/src/messages.ts +0 -262
- package/dist/server/node_modules/pg-protocol/src/outbound-serializer.test.ts +0 -276
- package/dist/server/node_modules/pg-protocol/src/parser.ts +0 -413
- package/dist/server/node_modules/pg-protocol/src/serializer.ts +0 -274
- package/dist/server/node_modules/pg-protocol/src/testing/buffer-list.ts +0 -67
- package/dist/server/node_modules/pg-protocol/src/testing/test-buffers.ts +0 -166
- package/dist/server/node_modules/pg-protocol/src/types/chunky.d.ts +0 -1
- package/dist/server/node_modules/pg-types/.travis.yml +0 -7
- package/dist/server/node_modules/pg-types/Makefile +0 -14
- package/dist/server/node_modules/pg-types/README.md +0 -75
- package/dist/server/node_modules/pg-types/index.d.ts +0 -137
- package/dist/server/node_modules/pg-types/index.js +0 -47
- package/dist/server/node_modules/pg-types/index.test-d.ts +0 -21
- package/dist/server/node_modules/pg-types/lib/arrayParser.js +0 -11
- package/dist/server/node_modules/pg-types/lib/binaryParsers.js +0 -257
- package/dist/server/node_modules/pg-types/lib/builtins.js +0 -73
- package/dist/server/node_modules/pg-types/lib/textParsers.js +0 -215
- package/dist/server/node_modules/pg-types/package.json +0 -42
- package/dist/server/node_modules/pg-types/test/index.js +0 -24
- package/dist/server/node_modules/pg-types/test/types.js +0 -597
- package/dist/server/node_modules/pgpass/README.md +0 -74
- package/dist/server/node_modules/pgpass/lib/helper.js +0 -233
- package/dist/server/node_modules/pgpass/lib/index.js +0 -23
- package/dist/server/node_modules/pgpass/package.json +0 -41
- package/dist/server/node_modules/xtend/.jshintrc +0 -30
- package/dist/server/node_modules/xtend/README.md +0 -32
- package/dist/server/node_modules/xtend/immutable.js +0 -19
- package/dist/server/node_modules/xtend/mutable.js +0 -17
- package/dist/server/node_modules/xtend/package.json +0 -55
- package/dist/server/node_modules/xtend/test.js +0 -103
package/dist/server/server.js
CHANGED
|
@@ -1569,7 +1569,7 @@ Example input: "How do I connect to a database?"
|
|
|
1569
1569
|
Example output: Database Connection Setup
|
|
1570
1570
|
|
|
1571
1571
|
Example input: "What tools are available?"
|
|
1572
|
-
Example output: Available Tools Overview`;function rG1(Y){return typeof Y==="string"?Y:Y.toISOString()}class lc{inner;organizationId;constructor(Y,X){this.inner=Y;this.organizationId=X}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}create(Y){let X=this.requireOrg();return this.inner.create({...Y,organization_id:X})}get(Y){return this.inner.get(Y,this.requireOrg())}update(Y,X){return this.inner.update(Y,this.requireOrg(),X)}forceFailIfInProgress(Y){return this.inner.forceFailIfInProgress(Y,this.requireOrg())}delete(Y){return this.inner.delete(Y,this.requireOrg())}list(Y,X){return this.inner.list(this.requireOrg(),Y,X)}listByTriggerIds(Y,X){return this.inner.listByTriggerIds(this.requireOrg(),Y,X)}saveMessages(Y){return this.inner.saveMessages(Y,this.requireOrg())}listMessages(Y,X){return this.inner.listMessages(Y,this.requireOrg(),X)}}class dc{db;constructor(Y){this.db=Y}async create(Y){let X=Y.id??a8("thrd"),J=new Date().toISOString();if(!Y.organization_id)throw Error("organization_id is required");if(!Y.created_by)throw Error("created_by is required");if(!Y.title)Y.title=aG1;let G={id:X,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,status:Y.status??"completed",trigger_id:Y.trigger_id??null,created_at:J,updated_at:J,created_by:Y.created_by,updated_by:Y.updated_by??null},W=await this.db.insertInto("threads").values(G).returningAll().executeTakeFirstOrThrow();return this.threadFromDbRow(W)}async get(Y,X){let J=await this.db.selectFrom("threads").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();return J?this.threadFromDbRow(J):null}async update(Y,X,J){let W={updated_at:new Date().toISOString()};if(J.title!==void 0)W.title=J.title;if(J.description!==void 0)W.description=J.description;if(J.updated_by!==void 0)W.updated_by=J.updated_by;if(J.hidden!==void 0)W.hidden=J.hidden;if(J.status!==void 0)W.status=J.status;await this.db.updateTable("threads").set(W).where("id","=",Y).where("organization_id","=",X).execute();let K=await this.get(Y,X);if(!K)throw Error("Thread not found after update");return K}async forceFailIfInProgress(Y,X){let J=new Date().toISOString();return((await this.db.updateTable("threads").set({status:"failed",updated_at:J}).where("id","=",Y).where("organization_id","=",X).where("status","=","in_progress").executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete(Y,X){await this.db.deleteFrom("threads").where("id","=",Y).where("organization_id","=",X).execute()}async list(Y,X,J){let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",Y).where("hidden","=",!1).orderBy("updated_at","desc");if(X)G=G.where("created_by","=",X);let W=this.db.selectFrom("threads").select((Q)=>Q.fn.count("id").as("count")).where("organization_id","=",Y).where("hidden","=",!1);if(X)W=W.where("created_by","=",X);if(J?.limit)G=G.limit(J.limit);if(J?.offset)G=G.offset(J.offset);let[K,Z]=await Promise.all([G.execute(),W.executeTakeFirst()]);return{threads:K.map((Q)=>this.threadFromDbRow(Q)),total:Number(Z?.count||0)}}async listByTriggerIds(Y,X,J){if(X.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",Y).where("hidden","=",!1).where("trigger_id","in",X).orderBy("updated_at","desc"),W=this.db.selectFrom("threads").select((Q)=>Q.fn.count("id").as("count")).where("organization_id","=",Y).where("hidden","=",!1).where("trigger_id","in",X);if(J?.limit)G=G.limit(J.limit);if(J?.offset)G=G.offset(J.offset);let[K,Z]=await Promise.all([G.execute(),W.executeTakeFirst()]);return{threads:K.map((Q)=>this.threadFromDbRow(Q)),total:Number(Z?.count||0)}}async saveMessages(Y,X){let J=new Date().toISOString(),G=Y[0]?.thread_id;if(!G)throw Error("thread_id is required when creating multiple messages");if(!await this.get(G,X))throw Error("Thread not found or access denied");let K=new Map;for(let $ of Y){let V=K.get($.id);if(V&&V.thread_id!==$.thread_id)throw Error(`Duplicate message id "${$.id}" with conflicting thread_ids: "${V.thread_id}" vs "${$.thread_id}"`);K.set($.id,$)}let Z=[...K.values()],Q=Z.find(($)=>$.thread_id!==G);if(Q)throw Error(`All messages must target the same thread. Expected thread_id "${G}", but message "${Q.id}" has thread_id "${Q.thread_id}"`);let H=Z.map(($)=>({id:$.id,thread_id:G,metadata:$.metadata?JSON.stringify($.metadata):null,parts:JSON.stringify($.parts),role:$.role,created_at:$.created_at??J,updated_at:J}));await this.db.transaction().execute(async($)=>{await $.insertInto("thread_messages").values(H).onConflict((V)=>V.column("id").doUpdateSet((z)=>({metadata:z.ref("excluded.metadata"),parts:z.ref("excluded.parts"),role:z.ref("excluded.role"),updated_at:z.ref("excluded.updated_at")}))).execute(),await $.updateTable("threads").set({updated_at:J}).where("id","=",G).where("organization_id","=",X).execute()})}async listMessages(Y,X,J){if(!await this.get(Y,X))return{messages:[],total:0};let W=J?.sort??"asc",K=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",Y).orderBy("created_at",W).orderBy("id",W),Z=this.db.selectFrom("thread_messages").select(($)=>$.fn.count("id").as("count")).where("thread_id","=",Y);if(J?.limit)K=K.limit(J.limit);if(J?.offset)K=K.offset(J.offset);let[Q,H]=await Promise.all([K.execute(),Z.executeTakeFirst()]);return{messages:Q.map(($)=>this.messageFromDbRow($)),total:Number(H?.count||0)}}threadFromDbRow(Y){return{id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description,status:Y.status,trigger_id:Y.trigger_id??null,created_at:rG1(Y.created_at),updated_at:rG1(Y.updated_at),created_by:Y.created_by,updated_by:Y.updated_by,hidden:!!Y.hidden}}messageFromDbRow(Y){let X,J;try{X=Y.metadata?JSON.parse(Y.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${Y.id}:`,Y.metadata,G),X=void 0}try{J=typeof Y.parts==="string"?JSON.parse(Y.parts):Y.parts}catch(G){console.error(`Failed to parse parts for message ${Y.id}:`,Y.parts,G),J=[]}return{id:Y.id,thread_id:Y.thread_id,metadata:X,parts:J,role:Y.role,created_at:rG1(Y.created_at),updated_at:rG1(Y.updated_at)}}}y51();MW();import{createHash as NN8}from"crypto";function CN6(Y){return NN8("sha256").update(Y).digest("hex")}class Pm1{db;vault;constructor(Y,X){this.db=Y;this.vault=X}rowToKeyInfo(Y){return{id:Y.id,providerId:Y.provider_id,label:Y.label,organizationId:Y.organization_id,createdBy:Y.created_by,createdAt:Y.created_at instanceof Date?Y.created_at.toISOString():String(Y.created_at)}}async create(Y){let X=a8("aik"),J=await this.vault.encrypt(Y.apiKey),G=CN6(Y.apiKey),W=new Date;return await this.db.insertInto("ai_provider_keys").values({id:X,organization_id:Y.organizationId,provider_id:Y.providerId,label:Y.label,encrypted_api_key:J,key_hash:G,created_by:Y.createdBy,created_at:W}).execute(),this.rowToKeyInfo({id:X,provider_id:Y.providerId,label:Y.label,organization_id:Y.organizationId,created_by:Y.createdBy,created_at:W})}async upsert(Y){let X=a8("aik"),J=await this.vault.encrypt(Y.apiKey),G=CN6(Y.apiKey),W=new Date,K=await this.db.insertInto("ai_provider_keys").values({id:X,organization_id:Y.organizationId,provider_id:Y.providerId,label:Y.label,encrypted_api_key:J,key_hash:G,created_by:Y.createdBy,created_at:W}).onConflict((Z)=>Z.columns(["organization_id","provider_id","key_hash"]).doUpdateSet({label:Y.label})).returning(["id","provider_id","label","organization_id","created_by","created_at"]).executeTakeFirstOrThrow();return this.rowToKeyInfo(K)}async list(Y){let X=this.db.selectFrom("ai_provider_keys").where("organization_id","=",Y.organizationId).select(["id","provider_id","label","organization_id","created_by","created_at"]);if(Y.providerId)X=X.where("provider_id","=",Y.providerId);return(await X.orderBy("created_at","desc").execute()).map((G)=>this.rowToKeyInfo(G))}async resolve(Y,X){let J=await this.db.selectFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).selectAll().executeTakeFirstOrThrow(),G=await this.vault.decrypt(J.encrypted_api_key);return{keyInfo:this.rowToKeyInfo(J),apiKey:G}}async delete(Y,X){if(!(await this.db.deleteFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).executeTakeFirst()).numDeletedRows)throw Error(`AI provider key ${Y} not found`)}async findById(Y,X){let J=await this.db.selectFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).select(["id","provider_id","label","organization_id","created_by","created_at"]).executeTakeFirst();if(!J)throw Error("Provider key not found");return this.rowToKeyInfo(J)}}class Em1{db;constructor(Y){this.db=Y}async create(Y,X,J){let G=crypto.randomUUID(),W=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:X,user_id:J,code_verifier:Y,expires_at:W,created_at:new Date}).execute(),G}async consume(Y,X,J){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",Y).where("organization_id","=",X).where("user_id","=",J).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}GO();var IN6="_global";function ON8(Y){return Y.includes("/")?Y.split("/").slice(1).join("/"):Y}function DN8(Y){let X=Y.supported_parameters.includes("tools"),J=Y.supported_parameters.includes("reasoning");return{providerId:"openrouter",modelId:ON8(Y.id),title:Y.name,description:Y.description||null,logo:null,capabilities:[...new Set([...Y.architecture.input_modalities,...Y.architecture.output_modalities,...X?["tools"]:[],...J?["reasoning"]:[]])],limits:{contextWindow:Y.context_length,maxOutputTokens:Y.top_provider.max_completion_tokens||null},costs:{input:Y.pricing.prompt,output:Y.pricing.completion}}}function jN6(Y){let X=new Map;for(let J of Y){let G={description:J.description,capabilities:J.capabilities,limits:J.limits,costs:J.costs};X.set(J.modelId,G);let W=J.modelId.replace(/\./g,"-");if(W!==J.modelId)X.set(W,G)}return X}async function wN8(Y){if(Y){let X=await Y.get(IN6,"openrouter");if(X)return jN6(X)}try{let X=await fetch("https://openrouter.ai/api/v1/models",{signal:AbortSignal.timeout(1e4)});if(!X.ok)return new Map;let{data:J}=await X.json(),G=J.map(DN8);if(Y)await Y.set(IN6,"openrouter",G);return jN6(G)}catch{return new Map}}function MN8(Y){let X=Y.replace(/\./g,"-"),J=Y.replace(/-\d{8}$/,""),G=J.replace(/\./g,"-");return[...new Set([Y,X,J,G])]}function AN8(Y,X){return Y.map((J)=>{let W=MN8(J.modelId).map((K)=>X.get(K)).find(Boolean);if(!W)return J;return{...J,description:J.description??W.description??null,capabilities:J.capabilities.length?J.capabilities:W.capabilities??[],limits:J.limits??W.limits??null,costs:J.costs??W.costs??null}})}class Tm1{storage;cache;constructor(Y,X){this.storage=Y;this.cache=X}async activate(Y,X){let{keyInfo:J,apiKey:G}=await this.storage.resolve(Y,X),W=SW[J.providerId];if(!W)throw Error(`Unknown provider: ${J.providerId}`);return W.create(G)}async listModels(Y,X){let{keyInfo:J,apiKey:G}=await this.storage.resolve(Y,X),W=J.providerId;if(this.cache){let z=await this.cache.get(X,W);if(z)return z}let K=SW[W];if(!K)throw Error(`Unknown provider: ${W}`);let Q=await K.create(G).listModels(),H=new Set,$=Q.filter((z)=>{if(H.has(z.modelId))return!1;return H.add(z.modelId),!0});if(W!=="openrouter"){let z=await wN8(this.cache);$=AN8($,z)}let V=$.map((z)=>({...z,providerId:W}));if(this.cache)await this.cache.set(X,W,V);return V}}function PN8(Y){if(!Y)return;try{let X=JSON.parse(Y);if(typeof X!=="object"||X===null||Array.isArray(X))return;let J={};for(let[G,W]of Object.entries(X))if(typeof W==="string")J[G]=W;return Object.keys(J).length>0?J:void 0}catch{return}}function EN8(Y,X){for(let[J,G]of Object.entries(X)){let W=Y[J];if(!W||W.length===0){let K=Y["*"];if(!K||K.length===0)return!1;if(K.includes("*"))continue;for(let Z of G)if(!K.includes(Z))return!1;continue}if(W.includes("*"))continue;for(let K of G)if(!W.includes(K))return!1}return!0}function Rm1(Y){let{auth:X,headers:J,role:G,permissions:W,userId:K}=Y,Z=X.api.hasPermission;return{hasPermission:async(Q)=>{if(G&&Rh1.includes(G))return!0;if(W)return EN8(W,Q);if(!Z)return console.error("[Auth] hasPermission API not available"),!1;try{if((await Z({headers:J,body:{permission:Q}}))?.success===!0)return!0;let $={};for(let z of Object.keys(Q))$[z]=["*"];return(await Z({headers:J,body:{permission:$}}))?.success===!0}catch(H){return console.error("[Auth] Permission check failed:",H),!1}},organization:{create:async(Q)=>{return X.api.createOrganization({headers:J,body:Q})},update:async(Q)=>{return X.api.updateOrganization({headers:J,body:Q})},delete:async(Q)=>{await X.api.deleteOrganization({headers:J,body:{organizationId:Q}})},get:async(Q)=>{return X.api.getFullOrganization({headers:J,query:Q?{organizationId:Q}:void 0})},list:async(Q)=>{return X.api.listOrganizations({headers:J,query:Q?{userId:Q}:void 0})},addMember:async(Q)=>{return X.api.addMember({headers:J,body:Q})},removeMember:async(Q)=>{await X.api.removeMember({headers:J,body:Q})},listMembers:async(Q)=>{return X.api.listMembers({headers:J,query:Q?{organizationId:Q.organizationId,limit:Q.limit,offset:Q.offset}:void 0})},updateMemberRole:async(Q)=>{return X.api.updateMemberRole({headers:J,body:Q})}},apiKey:{create:async(Q)=>{return X.api.createApiKey({body:{...Q,userId:K}})},list:async()=>{return X.api.listApiKeys({headers:J})},update:async(Q)=>{return X.api.updateApiKey({body:{...Q,userId:K}})},delete:async(Q)=>{await X.api.deleteApiKey({headers:J,body:{keyId:Q}})}}}}async function TN8(Y,X,J){if(Rh1.includes(J))return;let G=await Y.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",X).where("role","=",J).executeTakeFirst();if(!G?.permission)return;try{return JSON.parse(G.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${J}`);return}}async function RN8(Y,X,J,G=_N6){let W=Y.headers.get("Authorization");try{let K=new Headers(Y.headers);K.set("X-MCP-Session-Auth","true");let Z=await G.measure("auth_get_mcp_session",()=>X.api.getMcpSession({headers:K}));if(Z){let Q=Z.userId,H=await G.measure("auth_query_membership",()=>J.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","member.organizationId","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).executeTakeFirst()),$=H?.role,V=H?{id:H.orgId,slug:H.orgSlug,name:H.orgName}:void 0,z;if(H&&$)z=await G.measure("auth_fetch_role_permissions",()=>TN8(J,H.organizationId,$));return{user:{id:Q,role:$},role:$,permissions:z,organization:V}}}catch(K){console.error("[Auth] OAuth session check failed:",K)}if(W?.startsWith("Bearer ")){let K=W.replace("Bearer ","").trim();try{let Z=await G.measure("auth_verify_mesh_jwt",()=>r76(K));if(Z){let Q,H=Z.metadata?.organizationId;if(Z.sub&&H)Q=(await G.measure("auth_query_membership",()=>J.selectFrom("member").select(["member.role"]).where("member.userId","=",Z.sub).where("member.organizationId","=",H).executeTakeFirst()))?.role;let $,V=Z.metadata?.organizationId;if(V){let z=Z.metadata?.organizationName,U=Z.metadata?.organizationSlug;if(z||U)$={id:V,name:z,slug:U};else{let q=await G.measure("auth_query_org_for_mesh_jwt",()=>J.selectFrom("organization").select(["id","slug","name"]).where("id","=",V).executeTakeFirst());$=q?{id:q.id,slug:q.slug,name:q.name}:{id:V}}}return{user:{id:Z.sub,connectionId:Z.metadata?.connectionId,role:Q},role:Q,permissions:Z.permissions,organization:$}}}catch{}try{let Z=await G.measure("auth_verify_api_key",()=>X.api.verifyApiKey({body:{key:K}}));if(Z?.valid&&Z.key){let Q=Z.key.metadata?.organization,H=Z.key.permissions,$,V=Z.key.userId;if(V&&Q?.id)$=(await G.measure("auth_query_membership",()=>J.selectFrom("member").select(["member.role"]).where("member.userId","=",V).where("member.organizationId","=",Q.id).executeTakeFirst()))?.role;return{apiKeyId:Z.key.id,user:{id:Z.key.userId,role:$},role:$,permissions:H,organization:Q?{id:Q.id,slug:Q.slug,name:Q.name}:void 0}}}catch(Z){console.error("[Auth] API key check failed:",Z)}}try{let K=new Headers(Y.headers);K.delete("Authorization");let Z=await G.measure("auth_get_session",()=>X.api.getSession({headers:K}));if(Z){let Q,H;if(Z.session.activeOrganizationId){let $=await G.measure("auth_get_full_organization",()=>X.api.getFullOrganization({headers:K}).catch(()=>null));if($)Q={id:$.id,slug:$.slug,name:$.name},H=$.members?.find((z)=>z.userId===Z.user.id)?.role;else Q={id:Z.session.activeOrganizationId,slug:"",name:""}}return{user:{id:Z.user.id,email:Z.user.email,role:H},role:H,organization:Q}}}catch(K){let Z=K;console.error("[Auth] Session check failed:",JSON.stringify({message:Z.message,body:Z.body,stack:Z.stack},null,2))}return{user:void 0}}var SN6,pV={set:(Y)=>{SN6=Y},create:async(Y,X)=>{return await SN6(Y,X)}},_N6={measure:async(Y,X)=>{return await X()}},CN8=["x-hub-signature-256"];async function kN6(Y){let X=new XA(Y.encryption.key),J=!!z6.CLICKHOUSE_URL,G=J?"clickhouse":"duckdb",W,K;if(J)W=new Oc(z6.CLICKHOUSE_URL),K=new Oc(z6.CLICKHOUSE_URL);else{let{engine:q}=await Cg1({basePath:$z}),{engine:L}=await Cg1({basePath:Jw});W=q,K=L}let{resolve:Z}=await import("path"),Q=Z($z),H=Z(Jw),$=J?(q)=>"monitoring_logs":(q)=>`read_ndjson('${Q}/${q}/**/*.ndjson', auto_detect=true)`,V=J?(q)=>"monitoring_metrics":(q)=>`read_ndjson('${H}/${q}/**/*.ndjson', auto_detect=true)`,z=new dc(Y.db),U={connections:new Ig(Y.db,X),organizationSettings:new jg1(Y.db),monitoring:new nh1(W,$,K,V,G),monitoringDashboards:new Ig1(Y.db),virtualMcps:new mh1(Y.db),users:new vg1(Y.db),tags:new kg1(Y.db),projects:new jg(Y.db),projectConnections:new Sg1(Y.db),projectPluginConfigs:new _g1(Y.db),aiProviderKeys:new Pm1(Y.db,X),oauthPkceStates:new Em1(Y.db),automations:x71(Y.db)};return async(q,L)=>{let B=L?.timings??_N6,M=nj(),P=q?.headers.get("x-caller-id")??void 0,C=q?await RN8(q,Y.auth,Y.db,B):{user:void 0},I=Rm1({auth:Y.auth,headers:q?.headers??new Headers,role:C.role,permissions:C.permissions,userId:C.user?.id}),R={user:C.user};if(C.apiKeyId)R.apiKey={id:C.apiKeyId,name:"",userId:""};let E=C.organization,S=q?z6.BASE_URL??`${new URL(q.url).origin}`:wQ(),v=new Z$(Y.auth,R.user?.id,void 0,I,C.role,"self"),k={...U,threads:new lc(z,E?.id)},g=new Tm1(k.aiProviderKeys,Y.modelListCache),f={timings:B,auth:R,connectionId:P,organization:E,storage:k,vault:X,authInstance:Y.auth,boundAuth:I,access:v,db:Y.db,tracer:Y.observability.tracer,meter:Y.observability.meter,baseUrl:S,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,wellKnownForwardableHeaders:Object.fromEntries(CN8.map((y)=>[y,q?.headers.get(y)??null]).filter(([y,a])=>a!==null)),userAgent:q?.headers.get("x-mesh-client")||q?.headers.get("User-Agent")||void 0,ipAddress:(q?.headers.get("CF-Connecting-IP")||q?.headers.get("X-Forwarded-For"))??void 0,properties:PN8(q?.headers.get("x-mesh-properties"))},eventBus:Y.eventBus,aiProviders:g,createMCPProxy:async(y)=>{return await DN6(y,f)},getOrCreateClient:M};return f}}ij();iC();class vN6{db;constructor(Y){this.db=Y}mapRowToSubscription(Y){return{id:Y.id,organizationId:Y.organization_id,connectionId:Y.connection_id,publisher:Y.publisher,eventType:Y.event_type,filter:Y.filter,enabled:Boolean(Y.enabled),createdAt:Y.created_at,updatedAt:Y.updated_at}}async publishEvent(Y){let X=new Date().toISOString();return await this.db.insertInto("events").values({id:Y.id,organization_id:Y.organizationId,type:Y.type,source:Y.source,specversion:"1.0",subject:Y.subject??null,time:Y.time,datacontenttype:Y.datacontenttype??"application/json",dataschema:Y.dataschema??null,data:Y.data?JSON.stringify(Y.data):null,cron:Y.cron??null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:X,updated_at:X}).execute(),{id:Y.id,organizationId:Y.organizationId,type:Y.type,source:Y.source,specversion:"1.0",subject:Y.subject??null,time:Y.time,datacontenttype:Y.datacontenttype??"application/json",dataschema:Y.dataschema??null,data:Y.data??null,cron:Y.cron??null,status:"pending",attempts:0,lastError:null,nextRetryAt:null,createdAt:X,updatedAt:X}}async subscribe(Y){let X=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y.organizationId).where("connection_id","=",Y.connectionId).where("event_type","=",Y.eventType);if(Y.publisher)X=X.where("publisher","=",Y.publisher);else X=X.where("publisher","is",null);if(Y.filter)X=X.where("filter","=",Y.filter);else X=X.where("filter","is",null);let J=await X.executeTakeFirst();if(J)return this.mapRowToSubscription(J);let G=new Date().toISOString();return await this.db.insertInto("event_subscriptions").values({id:Y.id,organization_id:Y.organizationId,connection_id:Y.connectionId,publisher:Y.publisher??null,event_type:Y.eventType,filter:Y.filter??null,enabled:1,created_at:G,updated_at:G}).execute(),{id:Y.id,organizationId:Y.organizationId,connectionId:Y.connectionId,publisher:Y.publisher??null,eventType:Y.eventType,filter:Y.filter??null,enabled:1,createdAt:G,updatedAt:G}}async unsubscribe(Y,X){return{success:((await this.db.deleteFrom("event_subscriptions").where("id","=",Y).where("organization_id","=",X).executeTakeFirst()).numDeletedRows??0n)>0n}}async listSubscriptions(Y,X){let J=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y);if(X)J=J.where("connection_id","=",X);return(await J.execute()).map((W)=>this.mapRowToSubscription(W))}async getSubscription(Y,X){let J=await this.db.selectFrom("event_subscriptions").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();if(!J)return null;return this.mapRowToSubscription(J)}async getMatchingSubscriptions(Y){return(await this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y.organizationId).where("enabled","=",1).where("event_type","=",Y.type).where((J)=>J.or([J("publisher","is",null),J("publisher","=",Y.source)])).execute()).map((J)=>this.mapRowToSubscription(J))}async createDeliveries(Y,X,J){if(X.length===0)return;let G=new Date().toISOString(),W=J??null,K=X.map((Z)=>({id:crypto.randomUUID(),event_id:Y,subscription_id:Z,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:W,created_at:G}));await this.db.insertInto("event_deliveries").values(K).execute()}async claimPendingDeliveries(Y){let X=new Date().toISOString(),G=(await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",(K)=>K.selectFrom("event_deliveries as d").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select("d.id").where("d.status","=","pending").where("s.enabled","=",1).where((Z)=>Z.or([Z("d.next_retry_at","is",null),Z("d.next_retry_at","<=",X)])).orderBy("d.created_at","asc").limit(Y)).where("status","=","pending").returning(["id"]).execute()).map((K)=>K.id);if(G.length===0)return[];return(await this.db.selectFrom("event_deliveries as d").innerJoin("events as e","e.id","d.event_id").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id as delivery_id","d.event_id","d.subscription_id","d.status as delivery_status","d.attempts as delivery_attempts","d.last_error as delivery_last_error","d.delivered_at","d.next_retry_at as delivery_next_retry_at","d.created_at as delivery_created_at","e.organization_id","e.type","e.source","e.specversion","e.subject","e.time","e.datacontenttype","e.dataschema","e.data","e.cron","e.status as event_status","e.attempts as event_attempts","e.last_error as event_last_error","e.next_retry_at","e.created_at as event_created_at","e.updated_at as event_updated_at","s.connection_id","s.publisher","s.event_type","s.filter","s.enabled","s.created_at as subscription_created_at","s.updated_at as subscription_updated_at"]).where("d.id","in",G).where("d.status","=","processing").execute()).map((K)=>({delivery:{id:K.delivery_id,eventId:K.event_id,subscriptionId:K.subscription_id,status:K.delivery_status,attempts:K.delivery_attempts,lastError:K.delivery_last_error,deliveredAt:K.delivered_at,nextRetryAt:K.delivery_next_retry_at,createdAt:K.delivery_created_at},event:{id:K.event_id,organizationId:K.organization_id,type:K.type,source:K.source,specversion:K.specversion,subject:K.subject,time:K.time,datacontenttype:K.datacontenttype,dataschema:K.dataschema,data:K.data?JSON.parse(K.data):null,cron:K.cron,status:K.event_status,attempts:K.event_attempts,lastError:K.event_last_error,nextRetryAt:K.next_retry_at,createdAt:K.event_created_at,updatedAt:K.event_updated_at},subscription:{id:K.subscription_id,organizationId:K.organization_id,connectionId:K.connection_id,publisher:K.publisher,eventType:K.event_type,filter:K.filter,enabled:Boolean(K.enabled),createdAt:K.subscription_created_at,updatedAt:K.subscription_updated_at}}))}async markDeliveriesDelivered(Y){if(Y.length===0)return;let X=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:X}).where("id","in",Y).execute()}async markDeliveriesPermanentlyFailed(Y,X){if(Y.length===0)return;await this.db.updateTable("event_deliveries").set({status:"failed",last_error:X,next_retry_at:null}).where("id","in",Y).execute()}async markDeliveriesFailed(Y,X,J=20,G=1000,W=3600000){if(Y.length===0)return;for(let K of Y){let Z=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",K).executeTakeFirst();if(!Z)continue;let Q=Z.attempts+1;if(Q>=J)await this.db.updateTable("event_deliveries").set({attempts:Q,last_error:X,status:"failed",next_retry_at:null}).where("id","=",K).execute();else{let H=Math.min(G*Math.pow(2,Q-1),W),$=new Date(Date.now()+H).toISOString();await this.db.updateTable("event_deliveries").set({attempts:Q,last_error:X,status:"pending",next_retry_at:$}).where("id","=",K).execute()}}}async updateEventStatus(Y){let X=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",Y).execute();if(X.length===0)return;let J=X.every((K)=>K.status==="delivered"),G=X.some((K)=>K.status==="failed"),W=X.some((K)=>K.status==="pending"||K.status==="processing");if(J)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",Y).execute();else if(G&&!W)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",Y).execute()}async resetStuckDeliveries(){let Y=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(Y.numUpdatedRows??0)}async getEvent(Y,X){let J=await this.db.selectFrom("events").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();if(!J)return null;return{id:J.id,organizationId:J.organization_id,type:J.type,source:J.source,specversion:J.specversion,subject:J.subject,time:J.time,datacontenttype:J.datacontenttype,dataschema:J.dataschema,data:J.data?JSON.parse(J.data):null,cron:J.cron,status:J.status,attempts:J.attempts,lastError:J.last_error,nextRetryAt:J.next_retry_at,createdAt:J.created_at,updatedAt:J.updated_at}}async findActiveCronEvent(Y,X,J,G){let W=await this.db.selectFrom("events").selectAll().where("organization_id","=",Y).where("type","=",X).where("source","=",J).where("cron","=",G).where("status","in",["pending","processing","delivered"]).orderBy("created_at","desc").executeTakeFirst();if(!W)return null;return{id:W.id,organizationId:W.organization_id,type:W.type,source:W.source,specversion:W.specversion,subject:W.subject,time:W.time,datacontenttype:W.datacontenttype,dataschema:W.dataschema,data:W.data?JSON.parse(W.data):null,cron:W.cron,status:W.status,attempts:W.attempts,lastError:W.last_error,nextRetryAt:W.next_retry_at,createdAt:W.created_at,updatedAt:W.updated_at}}async findOrphanedCronEvents(){return(await this.db.selectFrom("events").selectAll().where("cron","is not",null).where("status","=","delivered").where((X)=>X.not(X.exists(X.selectFrom("event_deliveries").select("id").whereRef("event_deliveries.event_id","=","events.id").where("event_deliveries.status","in",["pending","processing"])))).execute()).map((X)=>({id:X.id,organizationId:X.organization_id,type:X.type,source:X.source,specversion:X.specversion,subject:X.subject,time:X.time,datacontenttype:X.datacontenttype,dataschema:X.dataschema,data:X.data?JSON.parse(X.data):null,cron:X.cron,status:X.status,attempts:X.attempts,lastError:X.last_error,nextRetryAt:X.next_retry_at,createdAt:X.created_at,updatedAt:X.updated_at}))}async cancelEvent(Y,X,J){let G=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",Y).where("organization_id","=",X).where("source","=",J).where("status","in",["pending","processing"]).executeTakeFirst();if((G.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",Y).where("status","in",["pending","processing"]).execute();return{success:(G.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(Y,X){if(Y.length===0)return;let J=new Date(Date.now()+X).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:J}).where("id","in",Y).execute()}async ackDelivery(Y,X,J){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",Y).where("organization_id","=",X).executeTakeFirst())return{success:!1};let K=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",Y).where("status","in",["pending","processing"]).where((Z)=>Z.exists(Z.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",J).where("event_subscriptions.organization_id","=",X))).executeTakeFirst()).numUpdatedRows??0n)>0n;if(K)await this.updateEventStatus(Y);return{success:K}}async syncSubscriptions(Y){let{organizationId:X,connectionId:J,subscriptions:G}=Y,W=(P,C)=>{return`${P}::${C??""}`},K=await this.listSubscriptions(X,J),Z=new Map;for(let P of K)Z.set(W(P.eventType,P.publisher),P);let Q=new Map;for(let P of G)Q.set(W(P.eventType,P.publisher),P);let H=new Date().toISOString(),$=[],V=[],z=[],U=0;for(let[P,C]of Q){let I=Z.get(P);if(!I)$.push({id:crypto.randomUUID(),organization_id:X,connection_id:J,event_type:C.eventType,publisher:C.publisher??null,filter:C.filter??null,enabled:1,created_at:H,updated_at:H});else{let R=I.filter??null,E=C.filter??null;if(R!==E)V.push({id:I.id,filter:E});else U++}}for(let[P,C]of Z)if(!Q.has(P))z.push(C.id);if($.length>0)await this.db.insertInto("event_subscriptions").values($).execute();if(V.length>0)await Promise.all(V.map((P)=>this.db.updateTable("event_subscriptions").set({filter:P.filter,updated_at:H}).where("id","=",P.id).execute()));if(z.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",z).execute();let q=$.length,L=V.length,B=z.length,M=await this.listSubscriptions(X,J);return{created:q,updated:L,deleted:B,unchanged:U,subscriptions:M}}}function fN6(Y){return new vN6(Y)}Ul();class yN6{listeners=new Map;totalCount=0;strategy=null;started=!1;async start(Y){if(this.started){if(!Y)return;await this.stop()}this.strategy=Y,await this.strategy.start((X,J)=>this.localEmit(X,J)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add(Y){if(this.totalCount>=500)return console.warn("[SSEHub] Total connection limit reached (500)"),null;let X=this.listeners.get(Y.organizationId);if(!X)X=new Map,this.listeners.set(Y.organizationId,X);if(X.size>=50)return console.warn(`[SSEHub] Per-org connection limit reached for ${Y.organizationId} (50)`),null;return X.set(Y.id,Y),this.totalCount++,Y.id}remove(Y,X){let J=this.listeners.get(Y);if(!J)return;if(J.delete(X)){if(this.totalCount--,J.size===0)this.listeners.delete(Y)}}emit(Y,X){if(this.strategy)this.strategy.broadcast(Y,X);else this.localEmit(Y,X)}countForOrg(Y){return this.listeners.get(Y)?.size??0}get count(){return this.totalCount}localEmit(Y,X){let J=this.listeners.get(Y);if(!J||J.size===0)return;for(let G of J.values()){if(G.typePatterns&&!IN8(X.type,G.typePatterns))continue;try{G.push(X)}catch{this.remove(Y,G.id)}}}}function IN8(Y,X){for(let J of X){if(J===Y)return!0;if(J.endsWith(".*")){let G=J.slice(0,-1);if(Y.startsWith(G))return!0}}return!1}var A$=new yN6;function bN6(Y){return{id:Y.id,type:Y.type,source:Y.source,subject:Y.subject,data:Y.data?jN8(Y.data):void 0,time:Y.time}}function jN8(Y){if(typeof Y==="string")try{return JSON.parse(Y)}catch{return Y}return Y}Ul();var SN8=new Set([401]),_N8=["unauthorized","invalid_token","invalid api key","api key required","api-key required"];function hN6(Y){if(typeof Y==="object"&&Y!==null){let G=Y,W=G.status??G.code;if(typeof W==="number"&&SN8.has(W))return!0}let X=Y instanceof Error?Y.message:typeof Y==="string"?Y:"";if(!X)return!1;let J=X.toLowerCase();if(/\b401\b/.test(J))return!0;return _N8.some((G)=>J.includes(G))}class cc extends Error{constructor(Y){super(Y);this.name="PermanentDeliveryError"}}var oG1={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000};A51();y51();hu();function kN8(Y){return Y.endsWith("_self")}function vN8(Y){return Y.slice(0,-5)}function xN6(){return async(Y,X)=>{try{if(kN8(Y)&&iv1()){let Z=vN8(Y),Q=await pV.create();if(await G76(X,{organizationId:Z,connectionId:Y,publish:async(V,z,U,q)=>{await Q.eventBus.publish(Z,Y,{type:V,subject:z,data:U,deliverAt:q?.deliverAt})},createMCPProxy:async(V)=>{let z={...Q,getOrCreateClient:nj()},U=await Mm1(V,z);return{callTool:async(q,L,B)=>{let M=await U.callTool(q,L,B);return{content:M.content,structuredContent:M.structuredContent,isError:M.isError}},close:()=>U.close()}}}))return{success:!0}}let J=await pV.create(),G=await Mm1(Y,J),K=await dj1.forClient(mc(G)).ON_EVENTS({events:X});return{success:K.success,error:K.error,retryAfter:K.retryAfter,results:K.results}}catch(J){let G=J instanceof Error?J.message:String(J);if(console.error(`[EventBus] Failed to notify connection ${Y}:`,G),hN6(J))throw new cc(G);return{success:!1,error:G}}}}function gN6(Y){return{specversion:"1.0",id:Y.id,source:Y.source,type:Y.type,time:Y.time,subject:Y.subject??void 0,datacontenttype:Y.datacontenttype,dataschema:Y.dataschema??void 0,data:Y.data??void 0}}function fN8(Y){let X=new Map;for(let G of Y){let W=G.subscription.connectionId,K=X.get(W);if(K){if(K.deliveryIds.push(G.delivery.id),!K.seenEventIds.has(G.event.id))K.seenEventIds.add(G.event.id),K.events.push(gN6(G.event))}else X.set(W,{connectionId:G.subscription.connectionId,deliveryIds:[G.delivery.id],events:[gN6(G.event)],seenEventIds:new Set([G.event.id])})}let J=new Map;for(let[G,W]of X)J.set(G,{connectionId:W.connectionId,deliveryIds:W.deliveryIds,events:W.events});return J}class Cm1{storage;notifySubscriber;running=!1;processing=!1;pendingNotify=!1;config;eventTriggerEngine;constructor(Y,X,J){this.storage=Y;this.notifySubscriber=J??xN6(),this.config={...oG1,...X}}setEventTriggerEngine(Y){this.eventTriggerEngine=Y}async start(){if(this.running)return;let Y=await this.storage.resetStuckDeliveries();if(Y>0)console.log(`[EventBus] Reset ${Y} stuck deliveries from previous shutdown`);let X=await this.storage.findOrphanedCronEvents();for(let J of X)await this.scheduleNextCronDelivery(J),console.log(`[EventBus] Recovered orphaned cron event ${J.id} (${J.type}, cron: ${J.cron})`);if(X.length>0)console.log(`[EventBus] Recovered ${X.length} orphaned cron event(s)`);this.running=!0}stop(){this.running=!1}isRunning(){return this.running}async processNow(){if(!this.running)return;if(this.processing){this.pendingNotify=!0;return}this.processing=!0;try{do this.pendingNotify=!1,await this.processEvents();while(this.pendingNotify)}catch(Y){console.error("[EventBus] Error processing events:",Y)}finally{this.processing=!1}}async processEvents(){let Y=await this.storage.claimPendingDeliveries(this.config.batchSize);if(Y.length===0)return;let X=fN8(Y),J=await Promise.allSettled(Array.from(X.entries()).map(async([K,Z])=>{let Q=new Set;try{let $=await this.notifySubscriber(Z.connectionId,Z.events);if($.results&&Object.keys($.results).length>0)await this.processPerEventResults(Z,$);else if($.success)await this.storage.markDeliveriesDelivered(Z.deliveryIds);else if($.retryAfter&&$.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(Z.deliveryIds,$.retryAfter);else await this.storage.markDeliveriesFailed(Z.deliveryIds,$.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch($){if($ instanceof cc){await this.storage.markDeliveriesPermanentlyFailed(Z.deliveryIds,$.message);for(let V of Z.events)Q.add(V.id)}else{let V=$ instanceof Error?$.message:String($);console.error(`[EventBus] Failed to notify subscription ${K}:`,V),await this.storage.markDeliveriesFailed(Z.deliveryIds,V,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}let H=new Set;for(let $ of Y)if(Z.deliveryIds.includes($.delivery.id))H.add($.event.id);return{eventIds:H,permanentlyFailed:Q}})),G=new Set,W=new Set;for(let K of J)if(K.status==="fulfilled"){for(let Z of K.value.eventIds)G.add(Z);for(let Z of K.value.permanentlyFailed)W.add(Z)}for(let K of G)try{await this.storage.updateEventStatus(K);let Z=Y.find((Q)=>Q.event.id===K)?.event;if(Z?.cron&&!W.has(K))await this.scheduleNextCronDelivery(Z)}catch(Z){console.error(`[EventBus] Failed to update event status ${K}:`,Z)}if(this.eventTriggerEngine){let K=new Set,Z=[];for(let Q of Y){if(Q.delivery.attempts>0)continue;if(!K.has(Q.event.id))K.add(Q.event.id),Z.push({source:Q.event.source,type:Q.event.type,data:Q.event.data,organizationId:Q.event.organizationId})}if(Z.length>0)this.eventTriggerEngine.notifyEvents(Z)}}async processPerEventResults(Y,X){let J=[],G=new Map,W=[],K=new Map;for(let Z=0;Z<Y.events.length;Z++){let Q=Y.events?.[Z];if(!Q)continue;let H=Y.deliveryIds?.[Z];if(!H)continue;K.set(Q.id,H)}for(let Z of Y.events){let Q=K.get(Z.id);if(!Q)continue;let H=X.results?.[Z.id];if(H)if(H.success)J.push(Q);else if(H.retryAfter&&H.retryAfter>0){let $=G.get(H.retryAfter)||[];$.push(Q),G.set(H.retryAfter,$)}else W.push({deliveryId:Q,error:H.error||"Event processing failed"});else if(X.success)J.push(Q);else if(X.retryAfter&&X.retryAfter>0){let $=G.get(X.retryAfter)||[];$.push(Q),G.set(X.retryAfter,$)}else W.push({deliveryId:Q,error:X.error||"Batch processing failed"})}if(J.length>0)await this.storage.markDeliveriesDelivered(J);for(let[Z,Q]of G)await this.storage.scheduleRetryWithoutAttemptIncrement(Q,Z);if(W.length>0){let Z=new Map;for(let{deliveryId:Q,error:H}of W){let $=Z.get(H)||[];$.push(Q),Z.set(H,$)}for(let[Q,H]of Z)await this.storage.markDeliveriesFailed(H,Q,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(Y){if(!Y.cron)return;try{let J=new iN(Y.cron,{timezone:"UTC"}).nextRun();if(!J){console.log(`[EventBus] Cron expression for event ${Y.id} has no more runs`);return}let G=J.toISOString(),W=await this.storage.getMatchingSubscriptions(Y);if(W.length===0){console.log(`[EventBus] No subscriptions for cron event ${Y.id}, skipping next delivery`);return}await this.storage.createDeliveries(Y.id,W.map((K)=>K.id),G),console.log(`[EventBus] Scheduled next cron delivery for event ${Y.id} at ${G}`)}catch(X){console.error(`[EventBus] Failed to schedule next cron delivery for event ${Y.id}:`,X)}}}class Im1{storage;worker;notifyStrategy;running=!1;constructor(Y){this.storage=Y.storage,this.notifyStrategy=Y.notifyStrategy,this.worker=new Cm1(this.storage,Y.config)}setEventTriggerEngine(Y){this.worker.setEventTriggerEngine(Y)}async publish(Y,X,J){if(J.deliverAt&&J.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let G;if(J.cron){try{let V=new iN(J.cron,{timezone:"UTC"}).nextRun();if(!V)throw Error("Cron expression does not produce a next run time");G=V.toISOString()}catch($){throw Error(`Invalid cron expression: ${$ instanceof Error?$.message:String($)}`)}let H=await this.storage.findActiveCronEvent(Y,J.type,X,J.cron);if(H)return H}let W=crypto.randomUUID(),K=new Date().toISOString(),Z=await this.storage.publishEvent({id:W,organizationId:Y,type:J.type,source:X,subject:J.subject,time:K,data:J.data,cron:J.cron});A$.emit(Y,bN6(Z));let Q=await this.storage.getMatchingSubscriptions(Z);if(Q.length>0){let H=J.deliverAt??G;if(await this.storage.createDeliveries(W,Q.map(($)=>$.id),H),this.notifyStrategy&&!H)await this.notifyStrategy.notify(W).catch(($)=>{console.warn("[EventBus] Notify failed (non-critical):",$)})}return Z}async subscribe(Y,X){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:Y,connectionId:X.connectionId,publisher:X.publisher,eventType:X.eventType,filter:X.filter})}async unsubscribe(Y,X){return this.storage.unsubscribe(X,Y)}async listSubscriptions(Y,X){return this.storage.listSubscriptions(Y,X)}async getSubscription(Y,X){return this.storage.getSubscription(X,Y)}async getEvent(Y,X){return this.storage.getEvent(X,Y)}async cancelEvent(Y,X,J){return this.storage.cancelEvent(X,Y,J)}async ackEvent(Y,X,J){return this.storage.ackDelivery(X,Y,J)}async syncSubscriptions(Y,X){return this.storage.syncSubscriptions({organizationId:Y,...X})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((Y)=>{console.error("[EventBus] Error processing after notify:",Y)})});await this.worker.processNow().catch((Y)=>{console.error("[EventBus] Error processing pending events on startup:",Y)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(Y){console.error("[EventBus] Error stopping notify strategy:",Y)}}isRunning(){return this.running}}class jm1{options;sub=null;onNotify=null;encoder=new TextEncoder;constructor(Y){this.options=Y}async start(Y){if(this.sub)return;this.onNotify=Y,this.sub=this.options.getConnection().subscribe("mesh.events.notify"),(async()=>{for await(let X of this.sub)this.onNotify?.()})().catch((X)=>{console.error("[NatsNotify] Subscription error:",X)})}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onNotify=null}async notify(Y){try{this.options.getConnection().publish("mesh.events.notify",this.encoder.encode(Y))}catch(X){console.warn("[NatsNotify] Publish failed (non-critical):",X)}}}class Sm1{options;sub=null;localEmit=null;originId=crypto.randomUUID();encoder=new TextEncoder;constructor(Y){this.options=Y}async start(Y){if(this.localEmit=Y,this.sub)return;this.sub=this.options.getConnection().subscribe("mesh.sse.broadcast");let X=new TextDecoder;(async()=>{for await(let J of this.sub)try{let G=JSON.parse(X.decode(J.data));if(typeof G?.originId!=="string"||typeof G?.organizationId!=="string"||typeof G?.event?.id!=="string"||typeof G?.event?.type!=="string")continue;if(G.originId===this.originId)continue;this.localEmit?.(G.organizationId,G.event)}catch{}})().catch((J)=>{console.error("[NatsSSEBroadcast] Subscription error:",J)})}broadcast(Y,X){this.localEmit?.(Y,X);let J={originId:this.originId,organizationId:Y,event:X};try{this.options.getConnection().publish("mesh.sse.broadcast",this.encoder.encode(JSON.stringify(J)))}catch(G){console.warn("[NatsSSEBroadcast] Publish failed (non-critical):",G)}}async stop(){this.sub?.unsubscribe(),this.sub=null,this.localEmit=null}}function uN6(...Y){return{async start(X){await Promise.all(Y.map((J)=>J.start(X)))},async stop(){await Promise.all(Y.map((X)=>X.stop().catch((J)=>{console.error("[NotifyStrategy] Error stopping strategy:",J)})))},async notify(X){await Promise.all(Y.map((J)=>J.notify(X).catch((G)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",G)})))}}}class _m1{intervalMs;timer=null;onNotify=null;constructor(Y){this.intervalMs=Y}async start(Y){if(this.timer)return;this.onNotify=Y,this.scheduleNext()}async stop(){if(this.timer)clearTimeout(this.timer),this.timer=null;this.onNotify=null}async notify(Y){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}function mN6(Y,X,J){let G=fN6(Y.db),W=J?.pollIntervalMs??oG1.pollIntervalMs,K=uN6(new _m1(W),new jm1({getConnection:()=>X.getConnection()})),Z=new Sm1({getConnection:()=>X.getConnection()});return A$.start(Z).catch((Q)=>{console.error("[SSEHub] Failed to start broadcast strategy:",Q)}),new Im1({storage:G,config:J,notifyStrategy:K})}sq();rZ();eL();var yN8={br:".br",zstd:".zst",gzip:".gz"},ZpY=Object.keys(yN8);YB();kD1();var km1="x-hono-disable-ssg",EpY=(()=>{try{return new Response("SSG is disabled",{status:404,headers:{[km1]:"true"}})}catch{return null}})();O11();var{write:ZnY}=Bun;var xN8=class{#Y;constructor(Y){this.#Y=Y,this.raw=Y.raw,this.url=Y.url?new URL(Y.url):null,this.protocol=Y.protocol??null}send(Y,X){this.#Y.send(Y,X??{})}raw;binaryType="arraybuffer";get readyState(){return this.#Y.readyState}url;protocol;close(Y,X){this.#Y.close(Y,X)}};var lN6=(Y)=>{return(...X)=>{if(typeof X[0]==="function"){let[J,G]=X;return async function(K,Z){let Q=await J(K),H=await Y(K,Q,G);if(H)return H;await Z()}}else{let[J,G,W]=X;return(async()=>{let K=await Y(J,G,W);if(!K)throw Error("Failed to upgrade WebSocket");return K})()}}};var pc=(Y)=>("server"in Y.env)?Y.env.server:Y.env;var gN8=lN6((Y,X)=>{let J=pc(Y);if(!J)throw TypeError("env has to include the 2nd argument of fetch.");if(J.upgrade(Y.req.raw,{data:{events:X,url:new URL(Y.req.url),protocol:Y.req.url}}))return new Response(null);return});var vm1=(Y)=>{let X=pc(Y);if(!X)throw TypeError("env has to include the 2nd argument of fetch.");if(typeof X.requestIP!=="function")throw TypeError("server.requestIP is not a function.");let J=X.requestIP(Y.req.raw);if(!J)return{remote:{}};return{remote:{address:J.address,addressType:J.family==="IPv6"||J.family==="IPv4"?J.family:void 0,port:J.port}}};nX();HP();var dN6={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/webdraw/5f999dcb-c8a6-4572-948c-9996ef1d502f/github.svg"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}};__();var ym1=new ZX;ym1.get("/config",async(Y)=>{try{let X=Object.keys(U8.socialProviders??{}),J=X.length>0,G=X.map((Z)=>({name:Z,icon:dN6[Z].icon})),W=z6.NODE_ENV!=="production"||z6.UNSAFE_ALLOW_STDIO_TRANSPORT,K={emailAndPassword:{enabled:U8.emailAndPassword?.enabled??!1},magicLink:{enabled:U8.magicLinkConfig?.enabled??!1},emailOtp:{enabled:U8.emailOtpConfig?.enabled??!1},resetPassword:{enabled:xJ1},socialProviders:{enabled:J,providers:G},sso:U8.ssoConfig?{enabled:!0,providerId:U8.ssoConfig.providerId}:{enabled:!1},stdioEnabled:W,localMode:K2()};return Y.json({success:!0,config:K})}catch(X){let J=X instanceof Error?X.message:"Failed to load auth config";return Y.json({success:!1,error:J},500)}});ym1.post("/local-session",async(Y)=>{if(!K2())return Y.json({success:!1,error:"Local mode is not active"},403);let X;try{X=vm1(Y).remote.address}catch{}if(!(X==="127.0.0.1"||X==="::1"||X==="::ffff:127.0.0.1"))return Y.json({success:!1,error:"Forbidden"},403);try{let{waitForSeed:G}=await Promise.resolve().then(() => (__(),eG1));await G();let{auth:W}=await Promise.resolve().then(() => (HP(),GH6)),K=await fm1();if(!K)return Y.json({success:!1,error:"Local admin user not found"},500);let Z=await tG1();return await W.api.signInEmail({body:{email:K.email,password:Z},asResponse:!0})}catch(G){return console.error("Failed to create local session:",G),Y.json({success:!1,error:G instanceof Error?G.message:"Failed to create local session"},500)}});var nN6=ym1;J3();rZ();HT();J3();function iN6(Y){let X=Y.filter((G)=>G.role==="system"),J=Y.find((G)=>G.role!=="system");return{systemMessages:X,requestMessage:J}}function tN8(Y){let X=!1,J=Y.map((G)=>{if(G.role!=="assistant")return G;if(!G.parts.some((K)=>("state"in K)&&K.state==="approval-requested"))return G;return X=!0,{...G,parts:G.parts.map((K)=>{if(!("state"in K)||K.state!=="approval-requested"||!("approval"in K)||!K.approval)return K;return{...K,state:"output-denied",approval:{...K.approval,approved:!1,reason:"User sent a new message without approving this tool call."}}})}});return X?J:Y}function eN8(Y){let[X,J]=Y.reduce((G,W)=>{if(W.role==="system")G[0].push(W);else G[1].push(W);return G},[[],[]]);return{systemMessages:X,messages:J}}async function YO8(Y,X){return await Y.loadHistory(X)}function XO8(Y,X){let J=Y.findIndex((W)=>W.id===X.id);return J>=0?[...Y.slice(0,J),X]:[...Y,X]}async function aN6(Y,X,J,G){let W=await YO8(Y,G),K=XO8(W,X);return[...J,...K]}async function rN6(Y,X){let J=await U86({messages:Y}),G=tN8(J),W=await z86(G,{tools:X.tools,ignoreIncompleteToolCalls:!0}),{systemMessages:K,messages:Z}=eN8(W),Q=X.models.thinking.capabilities?.reasoning!==!1,H=L86({messages:Z,reasoning:Q?"all":"none",emptyMessages:"remove",toolCalls:"none"});return{systemMessages:K,messages:H,originalMessages:J}}l5();J3();HT();J3();o1();T51();function oN6(Y){let{toolOutputMap:X}=Y;return j7({description:"The input is a string. Dont make assumptions about its format; prefer using regexes and string manipulation to extract the desired information. You may call this tool multiple times to extract the desired information.",inputExamples:[{input:{tool_call_id:"tool_call_id_1",code:"export default (input) => { return input.match(/[a-z]/g); }"}},{input:{tool_call_id:"tool_call_id_2",code:"export default (input) => { return input.split(' ').map(word => word.length); }"}}],inputSchema:E0(F.object({tool_call_id:F.string(),code:F.string().min(1).describe("JavaScript code to transform the tool output. The code must be an ES module: `export default (input) => { ... }`")})),execute:async({tool_call_id:J,code:G})=>{if(!X.has(J))throw Error(`Tool output not found for tool call id: ${J}`);let W=X.get(J),K=await Jf1({input:W,code:G,timeoutMs:5000}),Z=bm1({return:K.returnValue});if(Z>4000)throw Error(`Tool call ${J} output is too long to display (${Z} tokens), reduce or truncate the output`);return{result:K.returnValue,error:K.error,consoleLogs:K.consoleLogs}}})}var JO8=4,GO8=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]/g;function WO8(Y){if(!Y)return 0;let X=Y.match(GO8)?.length??0,J=Y.length-X;return Math.ceil(J/JO8)+Math.ceil(X*1.5)}function bm1(Y){let X=typeof Y==="string"?Y:JSON.stringify(Y);return WO8(X)}function YW1(Y,X){if(Y==="yolo")return!1;if(Y==="none")return!0;return X!==!0}function XW1(Y){let X=Y.get("meshContext").organization;if(!X)throw Error("Organization context is required");if((X.slug??X.id)!==Y.req.param("org"))throw Error("Organization mismatch");return X}async function nc(Y,X,J,G="none",W){let K=!W?.disableOutputTruncation,Q=(await Y.listTools()).tools.map((H)=>{let{name:$,title:V,description:z,inputSchema:U,annotations:q,_meta:L}=H;return[$,j7({title:V??$,description:z,inputSchema:X3(U),outputSchema:void 0,needsApproval:YW1(G,q?.readOnlyHint),execute:async(B,M)=>{let P=performance.now();try{return await Y.callTool({name:H.name,arguments:B},ZF,{signal:M.abortSignal,timeout:NN6})}finally{if(J){let C=performance.now()-P;J.write({type:"data-tool-metadata",id:M.toolCallId,data:{_meta:L,annotations:q,latencyMs:C}})}}},toModelOutput:async({output:B,toolCallId:M})=>{if(K){let C=bm1(B.structuredContent??B.content);if(C>4000)return X.set(M,JSON.stringify(B.structuredContent??B.content)),{type:"text",value:`Tool call ${M} output is too long to display (${C} tokens), use the read_tool_output tool`}}if(B.isError)return{type:"error-text",value:B.content.map((I)=>I.type==="text"?I.text:null).filter(Boolean).join(`
|
|
1572
|
+
Example output: Available Tools Overview`;function rG1(Y){return typeof Y==="string"?Y:Y.toISOString()}class lc{inner;organizationId;constructor(Y,X){this.inner=Y;this.organizationId=X}requireOrg(){if(!this.organizationId)throw Error("OrgScopedThreadStorage: thread operations require an authenticated organization");return this.organizationId}create(Y){let X=this.requireOrg();return this.inner.create({...Y,organization_id:X})}get(Y){return this.inner.get(Y,this.requireOrg())}update(Y,X){return this.inner.update(Y,this.requireOrg(),X)}forceFailIfInProgress(Y){return this.inner.forceFailIfInProgress(Y,this.requireOrg())}delete(Y){return this.inner.delete(Y,this.requireOrg())}list(Y,X){return this.inner.list(this.requireOrg(),Y,X)}listByTriggerIds(Y,X){return this.inner.listByTriggerIds(this.requireOrg(),Y,X)}saveMessages(Y){return this.inner.saveMessages(Y,this.requireOrg())}listMessages(Y,X){return this.inner.listMessages(Y,this.requireOrg(),X)}}class dc{db;constructor(Y){this.db=Y}async create(Y){let X=Y.id??a8("thrd"),J=new Date().toISOString();if(!Y.organization_id)throw Error("organization_id is required");if(!Y.created_by)throw Error("created_by is required");if(!Y.title)Y.title=aG1;let G={id:X,organization_id:Y.organization_id,title:Y.title,description:Y.description??null,status:Y.status??"completed",trigger_id:Y.trigger_id??null,created_at:J,updated_at:J,created_by:Y.created_by,updated_by:Y.updated_by??null},W=await this.db.insertInto("threads").values(G).returningAll().executeTakeFirstOrThrow();return this.threadFromDbRow(W)}async get(Y,X){let J=await this.db.selectFrom("threads").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();return J?this.threadFromDbRow(J):null}async update(Y,X,J){let W={updated_at:new Date().toISOString()};if(J.title!==void 0)W.title=J.title;if(J.description!==void 0)W.description=J.description;if(J.updated_by!==void 0)W.updated_by=J.updated_by;if(J.hidden!==void 0)W.hidden=J.hidden;if(J.status!==void 0)W.status=J.status;await this.db.updateTable("threads").set(W).where("id","=",Y).where("organization_id","=",X).execute();let K=await this.get(Y,X);if(!K)throw Error("Thread not found after update");return K}async forceFailIfInProgress(Y,X){let J=new Date().toISOString();return((await this.db.updateTable("threads").set({status:"failed",updated_at:J}).where("id","=",Y).where("organization_id","=",X).where("status","=","in_progress").executeTakeFirst()).numUpdatedRows??BigInt(0))>BigInt(0)}async delete(Y,X){await this.db.deleteFrom("threads").where("id","=",Y).where("organization_id","=",X).execute()}async list(Y,X,J){let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",Y).where("hidden","=",!1).orderBy("updated_at","desc");if(X)G=G.where("created_by","=",X);let W=this.db.selectFrom("threads").select((Q)=>Q.fn.count("id").as("count")).where("organization_id","=",Y).where("hidden","=",!1);if(X)W=W.where("created_by","=",X);if(J?.limit)G=G.limit(J.limit);if(J?.offset)G=G.offset(J.offset);let[K,Z]=await Promise.all([G.execute(),W.executeTakeFirst()]);return{threads:K.map((Q)=>this.threadFromDbRow(Q)),total:Number(Z?.count||0)}}async listByTriggerIds(Y,X,J){if(X.length===0)return{threads:[],total:0};let G=this.db.selectFrom("threads").selectAll().where("organization_id","=",Y).where("hidden","=",!1).where("trigger_id","in",X).orderBy("updated_at","desc"),W=this.db.selectFrom("threads").select((Q)=>Q.fn.count("id").as("count")).where("organization_id","=",Y).where("hidden","=",!1).where("trigger_id","in",X);if(J?.limit)G=G.limit(J.limit);if(J?.offset)G=G.offset(J.offset);let[K,Z]=await Promise.all([G.execute(),W.executeTakeFirst()]);return{threads:K.map((Q)=>this.threadFromDbRow(Q)),total:Number(Z?.count||0)}}async saveMessages(Y,X){let J=new Date().toISOString(),G=Y[0]?.thread_id;if(!G)throw Error("thread_id is required when creating multiple messages");if(!await this.get(G,X))throw Error("Thread not found or access denied");let K=new Map;for(let $ of Y){let V=K.get($.id);if(V&&V.thread_id!==$.thread_id)throw Error(`Duplicate message id "${$.id}" with conflicting thread_ids: "${V.thread_id}" vs "${$.thread_id}"`);K.set($.id,$)}let Z=[...K.values()],Q=Z.find(($)=>$.thread_id!==G);if(Q)throw Error(`All messages must target the same thread. Expected thread_id "${G}", but message "${Q.id}" has thread_id "${Q.thread_id}"`);let H=Z.map(($)=>({id:$.id,thread_id:G,metadata:$.metadata?JSON.stringify($.metadata):null,parts:JSON.stringify($.parts),role:$.role,created_at:$.created_at??J,updated_at:J}));await this.db.transaction().execute(async($)=>{await $.insertInto("thread_messages").values(H).onConflict((V)=>V.column("id").doUpdateSet((z)=>({metadata:z.ref("excluded.metadata"),parts:z.ref("excluded.parts"),role:z.ref("excluded.role"),updated_at:z.ref("excluded.updated_at")}))).execute(),await $.updateTable("threads").set({updated_at:J}).where("id","=",G).where("organization_id","=",X).execute()})}async listMessages(Y,X,J){if(!await this.get(Y,X))return{messages:[],total:0};let W=J?.sort??"asc",K=this.db.selectFrom("thread_messages").selectAll().where("thread_id","=",Y).orderBy("created_at",W).orderBy("id",W),Z=this.db.selectFrom("thread_messages").select(($)=>$.fn.count("id").as("count")).where("thread_id","=",Y);if(J?.limit)K=K.limit(J.limit);if(J?.offset)K=K.offset(J.offset);let[Q,H]=await Promise.all([K.execute(),Z.executeTakeFirst()]);return{messages:Q.map(($)=>this.messageFromDbRow($)),total:Number(H?.count||0)}}threadFromDbRow(Y){return{id:Y.id,organization_id:Y.organization_id,title:Y.title,description:Y.description,status:Y.status,trigger_id:Y.trigger_id??null,created_at:rG1(Y.created_at),updated_at:rG1(Y.updated_at),created_by:Y.created_by,updated_by:Y.updated_by,hidden:!!Y.hidden}}messageFromDbRow(Y){let X,J;try{X=Y.metadata?JSON.parse(Y.metadata):void 0}catch(G){console.error(`Failed to parse metadata for message ${Y.id}:`,Y.metadata,G),X=void 0}try{J=typeof Y.parts==="string"?JSON.parse(Y.parts):Y.parts}catch(G){console.error(`Failed to parse parts for message ${Y.id}:`,Y.parts,G),J=[]}return{id:Y.id,thread_id:Y.thread_id,metadata:X,parts:J,role:Y.role,created_at:rG1(Y.created_at),updated_at:rG1(Y.updated_at)}}}y51();MW();import{createHash as NN8}from"crypto";function CN6(Y){return NN8("sha256").update(Y).digest("hex")}class Pm1{db;vault;constructor(Y,X){this.db=Y;this.vault=X}rowToKeyInfo(Y){return{id:Y.id,providerId:Y.provider_id,label:Y.label,organizationId:Y.organization_id,createdBy:Y.created_by,createdAt:Y.created_at instanceof Date?Y.created_at.toISOString():String(Y.created_at)}}async create(Y){let X=a8("aik"),J=await this.vault.encrypt(Y.apiKey),G=CN6(Y.apiKey),W=new Date;return await this.db.insertInto("ai_provider_keys").values({id:X,organization_id:Y.organizationId,provider_id:Y.providerId,label:Y.label,encrypted_api_key:J,key_hash:G,created_by:Y.createdBy,created_at:W}).execute(),this.rowToKeyInfo({id:X,provider_id:Y.providerId,label:Y.label,organization_id:Y.organizationId,created_by:Y.createdBy,created_at:W})}async upsert(Y){let X=a8("aik"),J=await this.vault.encrypt(Y.apiKey),G=CN6(Y.apiKey),W=new Date,K=await this.db.insertInto("ai_provider_keys").values({id:X,organization_id:Y.organizationId,provider_id:Y.providerId,label:Y.label,encrypted_api_key:J,key_hash:G,created_by:Y.createdBy,created_at:W}).onConflict((Z)=>Z.columns(["organization_id","provider_id","key_hash"]).doUpdateSet({label:Y.label})).returning(["id","provider_id","label","organization_id","created_by","created_at"]).executeTakeFirstOrThrow();return this.rowToKeyInfo(K)}async list(Y){let X=this.db.selectFrom("ai_provider_keys").where("organization_id","=",Y.organizationId).select(["id","provider_id","label","organization_id","created_by","created_at"]);if(Y.providerId)X=X.where("provider_id","=",Y.providerId);return(await X.orderBy("created_at","desc").execute()).map((G)=>this.rowToKeyInfo(G))}async resolve(Y,X){let J=await this.db.selectFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).selectAll().executeTakeFirstOrThrow(),G=await this.vault.decrypt(J.encrypted_api_key);return{keyInfo:this.rowToKeyInfo(J),apiKey:G}}async delete(Y,X){if(!(await this.db.deleteFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).executeTakeFirst()).numDeletedRows)throw Error(`AI provider key ${Y} not found`)}async findById(Y,X){let J=await this.db.selectFrom("ai_provider_keys").where("id","=",Y).where("organization_id","=",X).select(["id","provider_id","label","organization_id","created_by","created_at"]).executeTakeFirst();if(!J)throw Error("Provider key not found");return this.rowToKeyInfo(J)}}class Em1{db;constructor(Y){this.db=Y}async create(Y,X,J){let G=crypto.randomUUID(),W=new Date(Date.now()+600000);return await this.db.insertInto("oauth_pkce_states").values({id:G,organization_id:X,user_id:J,code_verifier:Y,expires_at:W,created_at:new Date}).execute(),G}async consume(Y,X,J){let G=await this.db.deleteFrom("oauth_pkce_states").where("id","=",Y).where("organization_id","=",X).where("user_id","=",J).returningAll().executeTakeFirst();if(!G)throw Error("Invalid or expired OAuth state token");if((G.expires_at instanceof Date?G.expires_at:new Date(G.expires_at))<new Date)throw Error("OAuth state token has expired");return G.code_verifier}}GO();var IN6="_global";function ON8(Y){return Y.includes("/")?Y.split("/").slice(1).join("/"):Y}function DN8(Y){let X=Y.supported_parameters.includes("tools"),J=Y.supported_parameters.includes("reasoning");return{providerId:"openrouter",modelId:ON8(Y.id),title:Y.name,description:Y.description||null,logo:null,capabilities:[...new Set([...Y.architecture.input_modalities,...Y.architecture.output_modalities,...X?["tools"]:[],...J?["reasoning"]:[]])],limits:{contextWindow:Y.context_length,maxOutputTokens:Y.top_provider.max_completion_tokens||null},costs:{input:Y.pricing.prompt,output:Y.pricing.completion}}}function jN6(Y){let X=new Map;for(let J of Y){let G={description:J.description,capabilities:J.capabilities,limits:J.limits,costs:J.costs};X.set(J.modelId,G);let W=J.modelId.replace(/\./g,"-");if(W!==J.modelId)X.set(W,G)}return X}async function wN8(Y){if(Y){let X=await Y.get(IN6,"openrouter");if(X)return jN6(X)}try{let X=await fetch("https://openrouter.ai/api/v1/models",{signal:AbortSignal.timeout(1e4)});if(!X.ok)return new Map;let{data:J}=await X.json(),G=J.map(DN8);if(Y)await Y.set(IN6,"openrouter",G);return jN6(G)}catch{return new Map}}function MN8(Y){let X=Y.replace(/\./g,"-"),J=Y.replace(/-\d{8}$/,""),G=J.replace(/\./g,"-");return[...new Set([Y,X,J,G])]}function AN8(Y,X){return Y.map((J)=>{let W=MN8(J.modelId).map((K)=>X.get(K)).find(Boolean);if(!W)return J;return{...J,description:J.description??W.description??null,capabilities:J.capabilities.length?J.capabilities:W.capabilities??[],limits:J.limits??W.limits??null,costs:J.costs??W.costs??null}})}class Tm1{storage;cache;constructor(Y,X){this.storage=Y;this.cache=X}async activate(Y,X){let{keyInfo:J,apiKey:G}=await this.storage.resolve(Y,X),W=SW[J.providerId];if(!W)throw Error(`Unknown provider: ${J.providerId}`);return W.create(G)}async listModels(Y,X){let{keyInfo:J,apiKey:G}=await this.storage.resolve(Y,X),W=J.providerId;if(this.cache){let z=await this.cache.get(X,W);if(z)return z}let K=SW[W];if(!K)throw Error(`Unknown provider: ${W}`);let Q=await K.create(G).listModels(),H=new Set,$=Q.filter((z)=>{if(H.has(z.modelId))return!1;return H.add(z.modelId),!0});if(W!=="openrouter"){let z=await wN8(this.cache);$=AN8($,z)}let V=$.map((z)=>({...z,providerId:W}));if(this.cache)await this.cache.set(X,W,V);return V}}function PN8(Y){if(!Y)return;try{let X=JSON.parse(Y);if(typeof X!=="object"||X===null||Array.isArray(X))return;let J={};for(let[G,W]of Object.entries(X))if(typeof W==="string")J[G]=W;return Object.keys(J).length>0?J:void 0}catch{return}}function EN8(Y,X){for(let[J,G]of Object.entries(X)){let W=Y[J];if(!W||W.length===0){let K=Y["*"];if(!K||K.length===0)return!1;if(K.includes("*"))continue;for(let Z of G)if(!K.includes(Z))return!1;continue}if(W.includes("*"))continue;for(let K of G)if(!W.includes(K))return!1}return!0}function Rm1(Y){let{auth:X,headers:J,role:G,permissions:W,userId:K}=Y,Z=X.api.hasPermission;return{hasPermission:async(Q)=>{if(G&&Rh1.includes(G))return!0;if(W)return EN8(W,Q);if(!Z)return console.error("[Auth] hasPermission API not available"),!1;try{if((await Z({headers:J,body:{permission:Q}}))?.success===!0)return!0;let $={};for(let z of Object.keys(Q))$[z]=["*"];return(await Z({headers:J,body:{permission:$}}))?.success===!0}catch(H){return console.error("[Auth] Permission check failed:",H),!1}},organization:{create:async(Q)=>{return X.api.createOrganization({headers:J,body:Q})},update:async(Q)=>{return X.api.updateOrganization({headers:J,body:Q})},delete:async(Q)=>{await X.api.deleteOrganization({headers:J,body:{organizationId:Q}})},get:async(Q)=>{return X.api.getFullOrganization({headers:J,query:Q?{organizationId:Q}:void 0})},list:async(Q)=>{return X.api.listOrganizations({headers:J,query:Q?{userId:Q}:void 0})},addMember:async(Q)=>{return X.api.addMember({headers:J,body:Q})},removeMember:async(Q)=>{await X.api.removeMember({headers:J,body:Q})},listMembers:async(Q)=>{return X.api.listMembers({headers:J,query:Q?{organizationId:Q.organizationId,limit:Q.limit,offset:Q.offset}:void 0})},updateMemberRole:async(Q)=>{return X.api.updateMemberRole({headers:J,body:Q})}},apiKey:{create:async(Q)=>{return X.api.createApiKey({body:{...Q,userId:K}})},list:async()=>{return X.api.listApiKeys({headers:J})},update:async(Q)=>{return X.api.updateApiKey({body:{...Q,userId:K}})},delete:async(Q)=>{await X.api.deleteApiKey({headers:J,body:{keyId:Q}})}}}}async function TN8(Y,X,J){if(Rh1.includes(J))return;let G=await Y.selectFrom("organizationRole").select(["permission"]).where("organizationId","=",X).where("role","=",J).executeTakeFirst();if(!G?.permission)return;try{return JSON.parse(G.permission)}catch{console.error(`[Auth] Failed to parse permissions for role: ${J}`);return}}async function RN8(Y,X,J,G=_N6){let W=Y.headers.get("Authorization");try{let K=new Headers(Y.headers);K.set("X-MCP-Session-Auth","true");let Z=await G.measure("auth_get_mcp_session",()=>X.api.getMcpSession({headers:K}));if(Z){let Q=Z.userId,H=await G.measure("auth_query_membership",()=>J.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","member.organizationId","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).executeTakeFirst()),$=H?.role,V=H?{id:H.orgId,slug:H.orgSlug,name:H.orgName}:void 0,z;if(H&&$)z=await G.measure("auth_fetch_role_permissions",()=>TN8(J,H.organizationId,$));return{user:{id:Q,role:$},role:$,permissions:z,organization:V}}}catch(K){console.error("[Auth] OAuth session check failed:",K)}if(W?.startsWith("Bearer ")){let K=W.replace("Bearer ","").trim();try{let Z=await G.measure("auth_verify_mesh_jwt",()=>r76(K));if(Z){let Q,H=Z.metadata?.organizationId;if(Z.sub&&H)Q=(await G.measure("auth_query_membership",()=>J.selectFrom("member").select(["member.role"]).where("member.userId","=",Z.sub).where("member.organizationId","=",H).executeTakeFirst()))?.role;let $,V=Z.metadata?.organizationId;if(V){let z=Z.metadata?.organizationName,U=Z.metadata?.organizationSlug;if(z||U)$={id:V,name:z,slug:U};else{let q=await G.measure("auth_query_org_for_mesh_jwt",()=>J.selectFrom("organization").select(["id","slug","name"]).where("id","=",V).executeTakeFirst());$=q?{id:q.id,slug:q.slug,name:q.name}:{id:V}}}return{user:{id:Z.sub,connectionId:Z.metadata?.connectionId,role:Q},role:Q,permissions:Z.permissions,organization:$}}}catch{}try{let Z=await G.measure("auth_verify_api_key",()=>X.api.verifyApiKey({body:{key:K}}));if(Z?.valid&&Z.key){let Q=Z.key.metadata?.organization,H=Z.key.permissions,$,V=Z.key.userId;if(V&&Q?.id)$=(await G.measure("auth_query_membership",()=>J.selectFrom("member").select(["member.role"]).where("member.userId","=",V).where("member.organizationId","=",Q.id).executeTakeFirst()))?.role;return{apiKeyId:Z.key.id,user:{id:Z.key.userId,role:$},role:$,permissions:H,organization:Q?{id:Q.id,slug:Q.slug,name:Q.name}:void 0}}}catch(Z){console.error("[Auth] API key check failed:",Z)}}try{let K=new Headers(Y.headers);K.delete("Authorization");let Z=await G.measure("auth_get_session",()=>X.api.getSession({headers:K}));if(Z){let Q,H;if(Z.session.activeOrganizationId){let $=await G.measure("auth_get_full_organization",()=>X.api.getFullOrganization({headers:K}).catch(()=>null));if($)Q={id:$.id,slug:$.slug,name:$.name},H=$.members?.find((z)=>z.userId===Z.user.id)?.role;else Q={id:Z.session.activeOrganizationId,slug:"",name:""}}return{user:{id:Z.user.id,email:Z.user.email,role:H},role:H,organization:Q}}}catch(K){let Z=K;console.error("[Auth] Session check failed:",JSON.stringify({message:Z.message,body:Z.body,stack:Z.stack},null,2))}return{user:void 0}}var SN6,pV={set:(Y)=>{SN6=Y},create:async(Y,X)=>{return await SN6(Y,X)}},_N6={measure:async(Y,X)=>{return await X()}},CN8=["x-hub-signature-256"];async function kN6(Y){let X=new XA(Y.encryption.key),J=!!z6.CLICKHOUSE_URL,G=J?"clickhouse":"duckdb",W,K;if(J)W=new Oc(z6.CLICKHOUSE_URL),K=new Oc(z6.CLICKHOUSE_URL);else{let{engine:q}=await Cg1({basePath:$z}),{engine:L}=await Cg1({basePath:Jw});W=q,K=L}let{resolve:Z}=await import("path"),Q=Z($z),H=Z(Jw),$=J?(q)=>"monitoring_logs":(q)=>`read_ndjson('${Q}/${q}/**/*.ndjson', auto_detect=true)`,V=J?(q)=>"monitoring_metrics":(q)=>`read_ndjson('${H}/${q}/**/*.ndjson', auto_detect=true)`,z=new dc(Y.db),U={connections:new Ig(Y.db,X),organizationSettings:new jg1(Y.db),monitoring:new nh1(W,$,K,V,G),monitoringDashboards:new Ig1(Y.db),virtualMcps:new mh1(Y.db),users:new vg1(Y.db),tags:new kg1(Y.db),projects:new jg(Y.db),projectConnections:new Sg1(Y.db),projectPluginConfigs:new _g1(Y.db),aiProviderKeys:new Pm1(Y.db,X),oauthPkceStates:new Em1(Y.db),automations:x71(Y.db)};return async(q,L)=>{let B=L?.timings??_N6,M=nj(),P=q?.headers.get("x-caller-id")??void 0,C=q?await RN8(q,Y.auth,Y.db,B):{user:void 0},I=Rm1({auth:Y.auth,headers:q?.headers??new Headers,role:C.role,permissions:C.permissions,userId:C.user?.id}),R={user:C.user};if(C.apiKeyId)R.apiKey={id:C.apiKeyId,name:"",userId:""};let E=C.organization,S=q?z6.BASE_URL??`${new URL(q.url).origin}`:wQ(),v=new Z$(Y.auth,R.user?.id,void 0,I,C.role,"self"),k={...U,threads:new lc(z,E?.id)},g=new Tm1(k.aiProviderKeys,Y.modelListCache),f={timings:B,auth:R,connectionId:P,organization:E,storage:k,vault:X,authInstance:Y.auth,boundAuth:I,access:v,db:Y.db,tracer:Y.observability.tracer,meter:Y.observability.meter,baseUrl:S,metadata:{requestId:crypto.randomUUID(),timestamp:new Date,wellKnownForwardableHeaders:Object.fromEntries(CN8.map((y)=>[y,q?.headers.get(y)??null]).filter(([y,a])=>a!==null)),userAgent:q?.headers.get("x-mesh-client")||q?.headers.get("User-Agent")||void 0,ipAddress:(q?.headers.get("CF-Connecting-IP")||q?.headers.get("X-Forwarded-For"))??void 0,properties:PN8(q?.headers.get("x-mesh-properties"))},eventBus:Y.eventBus,aiProviders:g,createMCPProxy:async(y)=>{return await DN6(y,f)},getOrCreateClient:M};return f}}ij();iC();class vN6{db;constructor(Y){this.db=Y}mapRowToSubscription(Y){return{id:Y.id,organizationId:Y.organization_id,connectionId:Y.connection_id,publisher:Y.publisher,eventType:Y.event_type,filter:Y.filter,enabled:Boolean(Y.enabled),createdAt:Y.created_at,updatedAt:Y.updated_at}}async publishEvent(Y){let X=new Date().toISOString();return await this.db.insertInto("events").values({id:Y.id,organization_id:Y.organizationId,type:Y.type,source:Y.source,specversion:"1.0",subject:Y.subject??null,time:Y.time,datacontenttype:Y.datacontenttype??"application/json",dataschema:Y.dataschema??null,data:Y.data?JSON.stringify(Y.data):null,cron:Y.cron??null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:X,updated_at:X}).execute(),{id:Y.id,organizationId:Y.organizationId,type:Y.type,source:Y.source,specversion:"1.0",subject:Y.subject??null,time:Y.time,datacontenttype:Y.datacontenttype??"application/json",dataschema:Y.dataschema??null,data:Y.data??null,cron:Y.cron??null,status:"pending",attempts:0,lastError:null,nextRetryAt:null,createdAt:X,updatedAt:X}}async subscribe(Y){let X=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y.organizationId).where("connection_id","=",Y.connectionId).where("event_type","=",Y.eventType);if(Y.publisher)X=X.where("publisher","=",Y.publisher);else X=X.where("publisher","is",null);if(Y.filter)X=X.where("filter","=",Y.filter);else X=X.where("filter","is",null);let J=await X.executeTakeFirst();if(J)return this.mapRowToSubscription(J);let G=new Date().toISOString();return await this.db.insertInto("event_subscriptions").values({id:Y.id,organization_id:Y.organizationId,connection_id:Y.connectionId,publisher:Y.publisher??null,event_type:Y.eventType,filter:Y.filter??null,enabled:1,created_at:G,updated_at:G}).execute(),{id:Y.id,organizationId:Y.organizationId,connectionId:Y.connectionId,publisher:Y.publisher??null,eventType:Y.eventType,filter:Y.filter??null,enabled:1,createdAt:G,updatedAt:G}}async unsubscribe(Y,X){return{success:((await this.db.deleteFrom("event_subscriptions").where("id","=",Y).where("organization_id","=",X).executeTakeFirst()).numDeletedRows??0n)>0n}}async listSubscriptions(Y,X){let J=this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y);if(X)J=J.where("connection_id","=",X);return(await J.execute()).map((W)=>this.mapRowToSubscription(W))}async getSubscription(Y,X){let J=await this.db.selectFrom("event_subscriptions").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();if(!J)return null;return this.mapRowToSubscription(J)}async getMatchingSubscriptions(Y){return(await this.db.selectFrom("event_subscriptions").selectAll().where("organization_id","=",Y.organizationId).where("enabled","=",1).where("event_type","=",Y.type).where((J)=>J.or([J("publisher","is",null),J("publisher","=",Y.source)])).execute()).map((J)=>this.mapRowToSubscription(J))}async createDeliveries(Y,X,J){if(X.length===0)return;let G=new Date().toISOString(),W=J??null,K=X.map((Z)=>({id:crypto.randomUUID(),event_id:Y,subscription_id:Z,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:W,created_at:G}));await this.db.insertInto("event_deliveries").values(K).execute()}async claimPendingDeliveries(Y){let X=new Date().toISOString(),G=(await this.db.updateTable("event_deliveries").set({status:"processing"}).where("id","in",(K)=>K.selectFrom("event_deliveries as d").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select("d.id").where("d.status","=","pending").where("s.enabled","=",1).where((Z)=>Z.or([Z("d.next_retry_at","is",null),Z("d.next_retry_at","<=",X)])).orderBy("d.created_at","asc").limit(Y)).where("status","=","pending").returning(["id"]).execute()).map((K)=>K.id);if(G.length===0)return[];return(await this.db.selectFrom("event_deliveries as d").innerJoin("events as e","e.id","d.event_id").innerJoin("event_subscriptions as s","s.id","d.subscription_id").select(["d.id as delivery_id","d.event_id","d.subscription_id","d.status as delivery_status","d.attempts as delivery_attempts","d.last_error as delivery_last_error","d.delivered_at","d.next_retry_at as delivery_next_retry_at","d.created_at as delivery_created_at","e.organization_id","e.type","e.source","e.specversion","e.subject","e.time","e.datacontenttype","e.dataschema","e.data","e.cron","e.status as event_status","e.attempts as event_attempts","e.last_error as event_last_error","e.next_retry_at","e.created_at as event_created_at","e.updated_at as event_updated_at","s.connection_id","s.publisher","s.event_type","s.filter","s.enabled","s.created_at as subscription_created_at","s.updated_at as subscription_updated_at"]).where("d.id","in",G).where("d.status","=","processing").execute()).map((K)=>({delivery:{id:K.delivery_id,eventId:K.event_id,subscriptionId:K.subscription_id,status:K.delivery_status,attempts:K.delivery_attempts,lastError:K.delivery_last_error,deliveredAt:K.delivered_at,nextRetryAt:K.delivery_next_retry_at,createdAt:K.delivery_created_at},event:{id:K.event_id,organizationId:K.organization_id,type:K.type,source:K.source,specversion:K.specversion,subject:K.subject,time:K.time,datacontenttype:K.datacontenttype,dataschema:K.dataschema,data:K.data?JSON.parse(K.data):null,cron:K.cron,status:K.event_status,attempts:K.event_attempts,lastError:K.event_last_error,nextRetryAt:K.next_retry_at,createdAt:K.event_created_at,updatedAt:K.event_updated_at},subscription:{id:K.subscription_id,organizationId:K.organization_id,connectionId:K.connection_id,publisher:K.publisher,eventType:K.event_type,filter:K.filter,enabled:Boolean(K.enabled),createdAt:K.subscription_created_at,updatedAt:K.subscription_updated_at}}))}async markDeliveriesDelivered(Y){if(Y.length===0)return;let X=new Date().toISOString();await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:X}).where("id","in",Y).execute()}async markDeliveriesPermanentlyFailed(Y,X){if(Y.length===0)return;await this.db.updateTable("event_deliveries").set({status:"failed",last_error:X,next_retry_at:null}).where("id","in",Y).execute()}async markDeliveriesFailed(Y,X,J=20,G=1000,W=3600000){if(Y.length===0)return;for(let K of Y){let Z=await this.db.selectFrom("event_deliveries").select(["attempts"]).where("id","=",K).executeTakeFirst();if(!Z)continue;let Q=Z.attempts+1;if(Q>=J)await this.db.updateTable("event_deliveries").set({attempts:Q,last_error:X,status:"failed",next_retry_at:null}).where("id","=",K).execute();else{let H=Math.min(G*Math.pow(2,Q-1),W),$=new Date(Date.now()+H).toISOString();await this.db.updateTable("event_deliveries").set({attempts:Q,last_error:X,status:"pending",next_retry_at:$}).where("id","=",K).execute()}}}async updateEventStatus(Y){let X=await this.db.selectFrom("event_deliveries").select(["status"]).where("event_id","=",Y).execute();if(X.length===0)return;let J=X.every((K)=>K.status==="delivered"),G=X.some((K)=>K.status==="failed"),W=X.some((K)=>K.status==="pending"||K.status==="processing");if(J)await this.db.updateTable("events").set({status:"delivered",updated_at:new Date().toISOString()}).where("id","=",Y).execute();else if(G&&!W)await this.db.updateTable("events").set({status:"failed",updated_at:new Date().toISOString()}).where("id","=",Y).execute()}async resetStuckDeliveries(){let Y=await this.db.updateTable("event_deliveries").set({status:"pending"}).where("status","=","processing").executeTakeFirst();return Number(Y.numUpdatedRows??0)}async getEvent(Y,X){let J=await this.db.selectFrom("events").selectAll().where("id","=",Y).where("organization_id","=",X).executeTakeFirst();if(!J)return null;return{id:J.id,organizationId:J.organization_id,type:J.type,source:J.source,specversion:J.specversion,subject:J.subject,time:J.time,datacontenttype:J.datacontenttype,dataschema:J.dataschema,data:J.data?JSON.parse(J.data):null,cron:J.cron,status:J.status,attempts:J.attempts,lastError:J.last_error,nextRetryAt:J.next_retry_at,createdAt:J.created_at,updatedAt:J.updated_at}}async findActiveCronEvent(Y,X,J,G){let W=await this.db.selectFrom("events").selectAll().where("organization_id","=",Y).where("type","=",X).where("source","=",J).where("cron","=",G).where("status","in",["pending","processing","delivered"]).orderBy("created_at","desc").executeTakeFirst();if(!W)return null;return{id:W.id,organizationId:W.organization_id,type:W.type,source:W.source,specversion:W.specversion,subject:W.subject,time:W.time,datacontenttype:W.datacontenttype,dataschema:W.dataschema,data:W.data?JSON.parse(W.data):null,cron:W.cron,status:W.status,attempts:W.attempts,lastError:W.last_error,nextRetryAt:W.next_retry_at,createdAt:W.created_at,updatedAt:W.updated_at}}async findOrphanedCronEvents(){return(await this.db.selectFrom("events").selectAll().where("cron","is not",null).where("status","=","delivered").where((X)=>X.not(X.exists(X.selectFrom("event_deliveries").select("id").whereRef("event_deliveries.event_id","=","events.id").where("event_deliveries.status","in",["pending","processing"])))).execute()).map((X)=>({id:X.id,organizationId:X.organization_id,type:X.type,source:X.source,specversion:X.specversion,subject:X.subject,time:X.time,datacontenttype:X.datacontenttype,dataschema:X.dataschema,data:X.data?JSON.parse(X.data):null,cron:X.cron,status:X.status,attempts:X.attempts,lastError:X.last_error,nextRetryAt:X.next_retry_at,createdAt:X.created_at,updatedAt:X.updated_at}))}async cancelEvent(Y,X,J){let G=await this.db.updateTable("events").set({status:"failed",last_error:"Cancelled by publisher",updated_at:new Date().toISOString()}).where("id","=",Y).where("organization_id","=",X).where("source","=",J).where("status","in",["pending","processing"]).executeTakeFirst();if((G.numUpdatedRows??0n)>0n)await this.db.updateTable("event_deliveries").set({status:"failed",last_error:"Event cancelled by publisher"}).where("event_id","=",Y).where("status","in",["pending","processing"]).execute();return{success:(G.numUpdatedRows??0n)>0n}}async scheduleRetryWithoutAttemptIncrement(Y,X){if(Y.length===0)return;let J=new Date(Date.now()+X).toISOString();await this.db.updateTable("event_deliveries").set({status:"pending",next_retry_at:J}).where("id","in",Y).execute()}async ackDelivery(Y,X,J){if(!await this.db.selectFrom("events").select(["id"]).where("id","=",Y).where("organization_id","=",X).executeTakeFirst())return{success:!1};let K=((await this.db.updateTable("event_deliveries").set({status:"delivered",delivered_at:new Date().toISOString()}).where("event_id","=",Y).where("status","in",["pending","processing"]).where((Z)=>Z.exists(Z.selectFrom("event_subscriptions").select("id").whereRef("event_subscriptions.id","=","event_deliveries.subscription_id").where("event_subscriptions.connection_id","=",J).where("event_subscriptions.organization_id","=",X))).executeTakeFirst()).numUpdatedRows??0n)>0n;if(K)await this.updateEventStatus(Y);return{success:K}}async syncSubscriptions(Y){let{organizationId:X,connectionId:J,subscriptions:G}=Y,W=(P,C)=>{return`${P}::${C??""}`},K=await this.listSubscriptions(X,J),Z=new Map;for(let P of K)Z.set(W(P.eventType,P.publisher),P);let Q=new Map;for(let P of G)Q.set(W(P.eventType,P.publisher),P);let H=new Date().toISOString(),$=[],V=[],z=[],U=0;for(let[P,C]of Q){let I=Z.get(P);if(!I)$.push({id:crypto.randomUUID(),organization_id:X,connection_id:J,event_type:C.eventType,publisher:C.publisher??null,filter:C.filter??null,enabled:1,created_at:H,updated_at:H});else{let R=I.filter??null,E=C.filter??null;if(R!==E)V.push({id:I.id,filter:E});else U++}}for(let[P,C]of Z)if(!Q.has(P))z.push(C.id);if($.length>0)await this.db.insertInto("event_subscriptions").values($).execute();if(V.length>0)await Promise.all(V.map((P)=>this.db.updateTable("event_subscriptions").set({filter:P.filter,updated_at:H}).where("id","=",P.id).execute()));if(z.length>0)await this.db.deleteFrom("event_subscriptions").where("id","in",z).execute();let q=$.length,L=V.length,B=z.length,M=await this.listSubscriptions(X,J);return{created:q,updated:L,deleted:B,unchanged:U,subscriptions:M}}}function fN6(Y){return new vN6(Y)}Ul();class yN6{listeners=new Map;totalCount=0;strategy=null;started=!1;async start(Y){if(this.started){if(!Y)return;await this.stop()}this.strategy=Y,await this.strategy.start((X,J)=>this.localEmit(X,J)),this.started=!0}async stop(){if(!this.started||!this.strategy)return;await this.strategy.stop(),this.started=!1}add(Y){if(this.totalCount>=500)return console.warn("[SSEHub] Total connection limit reached (500)"),null;let X=this.listeners.get(Y.organizationId);if(!X)X=new Map,this.listeners.set(Y.organizationId,X);if(X.size>=50)return console.warn(`[SSEHub] Per-org connection limit reached for ${Y.organizationId} (50)`),null;return X.set(Y.id,Y),this.totalCount++,Y.id}remove(Y,X){let J=this.listeners.get(Y);if(!J)return;if(J.delete(X)){if(this.totalCount--,J.size===0)this.listeners.delete(Y)}}emit(Y,X){if(this.strategy)this.strategy.broadcast(Y,X);else this.localEmit(Y,X)}countForOrg(Y){return this.listeners.get(Y)?.size??0}get count(){return this.totalCount}localEmit(Y,X){let J=this.listeners.get(Y);if(!J||J.size===0)return;for(let G of J.values()){if(G.typePatterns&&!IN8(X.type,G.typePatterns))continue;try{G.push(X)}catch{this.remove(Y,G.id)}}}}function IN8(Y,X){for(let J of X){if(J===Y)return!0;if(J.endsWith(".*")){let G=J.slice(0,-1);if(Y.startsWith(G))return!0}}return!1}var A$=new yN6;function bN6(Y){return{id:Y.id,type:Y.type,source:Y.source,subject:Y.subject,data:Y.data?jN8(Y.data):void 0,time:Y.time}}function jN8(Y){if(typeof Y==="string")try{return JSON.parse(Y)}catch{return Y}return Y}Ul();var SN8=new Set([401]),_N8=["unauthorized","invalid_token","invalid api key","api key required","api-key required"];function hN6(Y){if(typeof Y==="object"&&Y!==null){let G=Y,W=G.status??G.code;if(typeof W==="number"&&SN8.has(W))return!0}let X=Y instanceof Error?Y.message:typeof Y==="string"?Y:"";if(!X)return!1;let J=X.toLowerCase();if(/\b401\b/.test(J))return!0;return _N8.some((G)=>J.includes(G))}class cc extends Error{constructor(Y){super(Y);this.name="PermanentDeliveryError"}}var oG1={pollIntervalMs:5000,batchSize:100,maxAttempts:20,retryDelayMs:1000,maxDelayMs:3600000};A51();y51();hu();function kN8(Y){return Y.endsWith("_self")}function vN8(Y){return Y.slice(0,-5)}function xN6(){return async(Y,X)=>{try{if(kN8(Y)&&iv1()){let Z=vN8(Y),Q=await pV.create();if(await G76(X,{organizationId:Z,connectionId:Y,publish:async(V,z,U,q)=>{await Q.eventBus.publish(Z,Y,{type:V,subject:z,data:U,deliverAt:q?.deliverAt})},createMCPProxy:async(V)=>{let z={...Q,getOrCreateClient:nj()},U=await Mm1(V,z);return{callTool:async(q,L,B)=>{let M=await U.callTool(q,L,B);return{content:M.content,structuredContent:M.structuredContent,isError:M.isError}},close:()=>U.close()}}}))return{success:!0}}let J=await pV.create(),G=await Mm1(Y,J),K=await dj1.forClient(mc(G)).ON_EVENTS({events:X});return{success:K.success,error:K.error,retryAfter:K.retryAfter,results:K.results}}catch(J){let G=J instanceof Error?J.message:String(J);if(console.error(`[EventBus] Failed to notify connection ${Y}:`,G),hN6(J))throw new cc(G);return{success:!1,error:G}}}}function gN6(Y){return{specversion:"1.0",id:Y.id,source:Y.source,type:Y.type,time:Y.time,subject:Y.subject??void 0,datacontenttype:Y.datacontenttype,dataschema:Y.dataschema??void 0,data:Y.data??void 0}}function fN8(Y){let X=new Map;for(let G of Y){let W=G.subscription.connectionId,K=X.get(W);if(K){if(K.deliveryIds.push(G.delivery.id),!K.seenEventIds.has(G.event.id))K.seenEventIds.add(G.event.id),K.events.push(gN6(G.event))}else X.set(W,{connectionId:G.subscription.connectionId,deliveryIds:[G.delivery.id],events:[gN6(G.event)],seenEventIds:new Set([G.event.id])})}let J=new Map;for(let[G,W]of X)J.set(G,{connectionId:W.connectionId,deliveryIds:W.deliveryIds,events:W.events});return J}class Cm1{storage;notifySubscriber;running=!1;processing=!1;pendingNotify=!1;config;eventTriggerEngine;constructor(Y,X,J){this.storage=Y;this.notifySubscriber=J??xN6(),this.config={...oG1,...X}}setEventTriggerEngine(Y){this.eventTriggerEngine=Y}async start(){if(this.running)return;let Y=await this.storage.resetStuckDeliveries();if(Y>0)console.log(`[EventBus] Reset ${Y} stuck deliveries from previous shutdown`);let X=await this.storage.findOrphanedCronEvents();for(let J of X)await this.scheduleNextCronDelivery(J),console.log(`[EventBus] Recovered orphaned cron event ${J.id} (${J.type}, cron: ${J.cron})`);if(X.length>0)console.log(`[EventBus] Recovered ${X.length} orphaned cron event(s)`);this.running=!0}stop(){this.running=!1}isRunning(){return this.running}async processNow(){if(!this.running)return;if(this.processing){this.pendingNotify=!0;return}this.processing=!0;try{do this.pendingNotify=!1,await this.processEvents();while(this.pendingNotify)}catch(Y){console.error("[EventBus] Error processing events:",Y)}finally{this.processing=!1}}async processEvents(){let Y=await this.storage.claimPendingDeliveries(this.config.batchSize);if(Y.length===0)return;let X=fN8(Y),J=await Promise.allSettled(Array.from(X.entries()).map(async([K,Z])=>{let Q=new Set;try{let $=await this.notifySubscriber(Z.connectionId,Z.events);if($.results&&Object.keys($.results).length>0)await this.processPerEventResults(Z,$);else if($.success)await this.storage.markDeliveriesDelivered(Z.deliveryIds);else if($.retryAfter&&$.retryAfter>0)await this.storage.scheduleRetryWithoutAttemptIncrement(Z.deliveryIds,$.retryAfter);else await this.storage.markDeliveriesFailed(Z.deliveryIds,$.error||"Subscriber returned success=false",this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}catch($){if($ instanceof cc){await this.storage.markDeliveriesPermanentlyFailed(Z.deliveryIds,$.message);for(let V of Z.events)Q.add(V.id)}else{let V=$ instanceof Error?$.message:String($);console.error(`[EventBus] Failed to notify subscription ${K}:`,V),await this.storage.markDeliveriesFailed(Z.deliveryIds,V,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}let H=new Set;for(let $ of Y)if(Z.deliveryIds.includes($.delivery.id))H.add($.event.id);return{eventIds:H,permanentlyFailed:Q}})),G=new Set,W=new Set;for(let K of J)if(K.status==="fulfilled"){for(let Z of K.value.eventIds)G.add(Z);for(let Z of K.value.permanentlyFailed)W.add(Z)}for(let K of G)try{await this.storage.updateEventStatus(K);let Z=Y.find((Q)=>Q.event.id===K)?.event;if(Z?.cron&&!W.has(K))await this.scheduleNextCronDelivery(Z)}catch(Z){console.error(`[EventBus] Failed to update event status ${K}:`,Z)}if(this.eventTriggerEngine){let K=new Set,Z=[];for(let Q of Y){if(Q.delivery.attempts>0)continue;if(!K.has(Q.event.id))K.add(Q.event.id),Z.push({source:Q.event.source,type:Q.event.type,data:Q.event.data,organizationId:Q.event.organizationId})}if(Z.length>0)this.eventTriggerEngine.notifyEvents(Z)}}async processPerEventResults(Y,X){let J=[],G=new Map,W=[],K=new Map;for(let Z=0;Z<Y.events.length;Z++){let Q=Y.events?.[Z];if(!Q)continue;let H=Y.deliveryIds?.[Z];if(!H)continue;K.set(Q.id,H)}for(let Z of Y.events){let Q=K.get(Z.id);if(!Q)continue;let H=X.results?.[Z.id];if(H)if(H.success)J.push(Q);else if(H.retryAfter&&H.retryAfter>0){let $=G.get(H.retryAfter)||[];$.push(Q),G.set(H.retryAfter,$)}else W.push({deliveryId:Q,error:H.error||"Event processing failed"});else if(X.success)J.push(Q);else if(X.retryAfter&&X.retryAfter>0){let $=G.get(X.retryAfter)||[];$.push(Q),G.set(X.retryAfter,$)}else W.push({deliveryId:Q,error:X.error||"Batch processing failed"})}if(J.length>0)await this.storage.markDeliveriesDelivered(J);for(let[Z,Q]of G)await this.storage.scheduleRetryWithoutAttemptIncrement(Q,Z);if(W.length>0){let Z=new Map;for(let{deliveryId:Q,error:H}of W){let $=Z.get(H)||[];$.push(Q),Z.set(H,$)}for(let[Q,H]of Z)await this.storage.markDeliveriesFailed(H,Q,this.config.maxAttempts,this.config.retryDelayMs,this.config.maxDelayMs)}}async scheduleNextCronDelivery(Y){if(!Y.cron)return;try{let J=new iN(Y.cron,{timezone:"UTC"}).nextRun();if(!J){console.log(`[EventBus] Cron expression for event ${Y.id} has no more runs`);return}let G=J.toISOString(),W=await this.storage.getMatchingSubscriptions(Y);if(W.length===0){console.log(`[EventBus] No subscriptions for cron event ${Y.id}, skipping next delivery`);return}await this.storage.createDeliveries(Y.id,W.map((K)=>K.id),G),console.log(`[EventBus] Scheduled next cron delivery for event ${Y.id} at ${G}`)}catch(X){console.error(`[EventBus] Failed to schedule next cron delivery for event ${Y.id}:`,X)}}}class Im1{storage;worker;notifyStrategy;running=!1;constructor(Y){this.storage=Y.storage,this.notifyStrategy=Y.notifyStrategy,this.worker=new Cm1(this.storage,Y.config)}setEventTriggerEngine(Y){this.worker.setEventTriggerEngine(Y)}async publish(Y,X,J){if(J.deliverAt&&J.cron)throw Error("Cannot set both deliverAt and cron. Use one or the other.");let G;if(J.cron){try{let V=new iN(J.cron,{timezone:"UTC"}).nextRun();if(!V)throw Error("Cron expression does not produce a next run time");G=V.toISOString()}catch($){throw Error(`Invalid cron expression: ${$ instanceof Error?$.message:String($)}`)}let H=await this.storage.findActiveCronEvent(Y,J.type,X,J.cron);if(H)return H}let W=crypto.randomUUID(),K=new Date().toISOString(),Z=await this.storage.publishEvent({id:W,organizationId:Y,type:J.type,source:X,subject:J.subject,time:K,data:J.data,cron:J.cron});A$.emit(Y,bN6(Z));let Q=await this.storage.getMatchingSubscriptions(Z);if(Q.length>0){let H=J.deliverAt??G;if(await this.storage.createDeliveries(W,Q.map(($)=>$.id),H),this.notifyStrategy&&!H)await this.notifyStrategy.notify(W).catch(($)=>{console.warn("[EventBus] Notify failed (non-critical):",$)})}return Z}async subscribe(Y,X){return this.storage.subscribe({id:crypto.randomUUID(),organizationId:Y,connectionId:X.connectionId,publisher:X.publisher,eventType:X.eventType,filter:X.filter})}async unsubscribe(Y,X){return this.storage.unsubscribe(X,Y)}async listSubscriptions(Y,X){return this.storage.listSubscriptions(Y,X)}async getSubscription(Y,X){return this.storage.getSubscription(X,Y)}async getEvent(Y,X){return this.storage.getEvent(X,Y)}async cancelEvent(Y,X,J){return this.storage.cancelEvent(X,Y,J)}async ackEvent(Y,X,J){return this.storage.ackDelivery(X,Y,J)}async syncSubscriptions(Y,X){return this.storage.syncSubscriptions({organizationId:Y,...X})}async start(){if(this.running)return;if(this.running=!0,await this.worker.start(),this.notifyStrategy)await this.notifyStrategy.start(()=>{this.worker.processNow().catch((Y)=>{console.error("[EventBus] Error processing after notify:",Y)})});await this.worker.processNow().catch((Y)=>{console.error("[EventBus] Error processing pending events on startup:",Y)})}async stop(){if(!this.running)return;if(this.running=!1,this.worker.stop(),this.notifyStrategy)try{await this.notifyStrategy.stop()}catch(Y){console.error("[EventBus] Error stopping notify strategy:",Y)}}isRunning(){return this.running}}class jm1{options;sub=null;onNotify=null;encoder=new TextEncoder;constructor(Y){this.options=Y}async start(Y){if(this.sub)return;this.onNotify=Y,this.sub=this.options.getConnection().subscribe("mesh.events.notify"),(async()=>{for await(let X of this.sub)this.onNotify?.()})().catch((X)=>{console.error("[NatsNotify] Subscription error:",X)})}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onNotify=null}async notify(Y){try{this.options.getConnection().publish("mesh.events.notify",this.encoder.encode(Y))}catch(X){console.warn("[NatsNotify] Publish failed (non-critical):",X)}}}class Sm1{options;sub=null;localEmit=null;originId=crypto.randomUUID();encoder=new TextEncoder;constructor(Y){this.options=Y}async start(Y){if(this.localEmit=Y,this.sub)return;this.sub=this.options.getConnection().subscribe("mesh.sse.broadcast");let X=new TextDecoder;(async()=>{for await(let J of this.sub)try{let G=JSON.parse(X.decode(J.data));if(typeof G?.originId!=="string"||typeof G?.organizationId!=="string"||typeof G?.event?.id!=="string"||typeof G?.event?.type!=="string")continue;if(G.originId===this.originId)continue;this.localEmit?.(G.organizationId,G.event)}catch{}})().catch((J)=>{console.error("[NatsSSEBroadcast] Subscription error:",J)})}broadcast(Y,X){this.localEmit?.(Y,X);let J={originId:this.originId,organizationId:Y,event:X};try{this.options.getConnection().publish("mesh.sse.broadcast",this.encoder.encode(JSON.stringify(J)))}catch(G){console.warn("[NatsSSEBroadcast] Publish failed (non-critical):",G)}}async stop(){this.sub?.unsubscribe(),this.sub=null,this.localEmit=null}}function uN6(...Y){return{async start(X){await Promise.all(Y.map((J)=>J.start(X)))},async stop(){await Promise.all(Y.map((X)=>X.stop().catch((J)=>{console.error("[NotifyStrategy] Error stopping strategy:",J)})))},async notify(X){await Promise.all(Y.map((J)=>J.notify(X).catch((G)=>{console.warn("[NotifyStrategy] Notify failed (non-critical):",G)})))}}}class _m1{intervalMs;timer=null;onNotify=null;constructor(Y){this.intervalMs=Y}async start(Y){if(this.timer)return;this.onNotify=Y,this.scheduleNext()}async stop(){if(this.timer)clearTimeout(this.timer),this.timer=null;this.onNotify=null}async notify(Y){if(this.onNotify)this.onNotify()}scheduleNext(){this.timer=setTimeout(()=>{if(this.onNotify)this.onNotify();if(this.timer)this.scheduleNext()},this.intervalMs)}}function mN6(Y,X,J){let G=fN6(Y.db),W=J?.pollIntervalMs??oG1.pollIntervalMs,K=uN6(new _m1(W),new jm1({getConnection:()=>X.getConnection()})),Z=new Sm1({getConnection:()=>X.getConnection()});return A$.start(Z).catch((Q)=>{console.error("[SSEHub] Failed to start broadcast strategy:",Q)}),new Im1({storage:G,config:J,notifyStrategy:K})}sq();rZ();eL();var yN8={br:".br",zstd:".zst",gzip:".gz"},ZpY=Object.keys(yN8);YB();kD1();var km1="x-hono-disable-ssg",EpY=(()=>{try{return new Response("SSG is disabled",{status:404,headers:{[km1]:"true"}})}catch{return null}})();O11();var{write:ZnY}=Bun;var xN8=class{#Y;constructor(Y){this.#Y=Y,this.raw=Y.raw,this.url=Y.url?new URL(Y.url):null,this.protocol=Y.protocol??null}send(Y,X){this.#Y.send(Y,X??{})}raw;binaryType="arraybuffer";get readyState(){return this.#Y.readyState}url;protocol;close(Y,X){this.#Y.close(Y,X)}};var lN6=(Y)=>{return(...X)=>{if(typeof X[0]==="function"){let[J,G]=X;return async function(K,Z){let Q=await J(K),H=await Y(K,Q,G);if(H)return H;await Z()}}else{let[J,G,W]=X;return(async()=>{let K=await Y(J,G,W);if(!K)throw Error("Failed to upgrade WebSocket");return K})()}}};var pc=(Y)=>("server"in Y.env)?Y.env.server:Y.env;var gN8=lN6((Y,X)=>{let J=pc(Y);if(!J)throw TypeError("env has to include the 2nd argument of fetch.");if(J.upgrade(Y.req.raw,{data:{events:X,url:new URL(Y.req.url),protocol:Y.req.url}}))return new Response(null);return});var vm1=(Y)=>{let X=pc(Y);if(!X)throw TypeError("env has to include the 2nd argument of fetch.");if(typeof X.requestIP!=="function")throw TypeError("server.requestIP is not a function.");let J=X.requestIP(Y.req.raw);if(!J)return{remote:{}};return{remote:{address:J.address,addressType:J.family==="IPv6"||J.family==="IPv4"?J.family:void 0,port:J.port}}};nX();HP();var dN6={google:{name:"Google",icon:"https://assets.decocache.com/webdraw/eb7480aa-a68b-4ce4-98ff-36aa121762a7/google.svg"},github:{name:"GitHub",icon:"https://assets.decocache.com/webdraw/5f999dcb-c8a6-4572-948c-9996ef1d502f/github.svg"},microsoft:{name:"Microsoft",icon:"https://assets.decocache.com/mcp/aa6f6e1a-6526-4bca-99cc-82e2ec38b0e4/microsoft.png"}};__();var ym1=new ZX;ym1.get("/config",async(Y)=>{try{let X=Object.keys(U8.socialProviders??{}),J=X.length>0,G=X.map((Z)=>({name:Z,icon:dN6[Z].icon})),W=z6.NODE_ENV!=="production"||z6.UNSAFE_ALLOW_STDIO_TRANSPORT,K={emailAndPassword:{enabled:U8.emailAndPassword?.enabled??!1},magicLink:{enabled:U8.magicLinkConfig?.enabled??!1},emailOtp:{enabled:U8.emailOtpConfig?.enabled??!1},resetPassword:{enabled:xJ1},socialProviders:{enabled:J,providers:G},sso:U8.ssoConfig?{enabled:!0,providerId:U8.ssoConfig.providerId}:{enabled:!1},stdioEnabled:W,localMode:K2()};return Y.json({success:!0,config:K})}catch(X){let J=X instanceof Error?X.message:"Failed to load auth config";return Y.json({success:!1,error:J},500)}});ym1.post("/local-session",async(Y)=>{if(!K2())return Y.json({success:!1,error:"Local mode is not active"},403);let X;try{X=vm1(Y).remote.address}catch{}if(!(X==="127.0.0.1"||X==="::1"||X==="::ffff:127.0.0.1"))return Y.json({success:!1,error:"Forbidden"},403);try{let{waitForSeed:G}=await Promise.resolve().then(() => (__(),eG1));await G();let{auth:W}=await Promise.resolve().then(() => (HP(),GH6)),K=await fm1();if(!K)return Y.json({success:!1,error:"Local admin user not found"},500);let Z=await tG1();return await W.api.signInEmail({body:{email:K.email,password:Z},asResponse:!0})}catch(G){return console.error("Failed to create local session:",G),Y.json({success:!1,error:G instanceof Error?G.message:"Failed to create local session"},500)}});var nN6=ym1;J3();rZ();HT();J3();function iN6(Y){let X=Y.filter((G)=>G.role==="system"),J=Y.find((G)=>G.role!=="system");return{systemMessages:X,requestMessage:J}}function tN8(Y){let X=!1,J=Y.map((G)=>{if(G.role!=="assistant")return G;if(!G.parts.some((K)=>("state"in K)&&K.state==="approval-requested"))return G;return X=!0,{...G,parts:G.parts.map((K)=>{if(!("state"in K)||K.state!=="approval-requested"||!("approval"in K)||!K.approval)return K;return{...K,state:"output-denied",approval:{...K.approval,approved:!1,reason:"User sent a new message without approving this tool call."}}})}});return X?J:Y}function eN8(Y){let[X,J]=Y.reduce((G,W)=>{if(W.role==="system")G[0].push(W);else G[1].push(W);return G},[[],[]]);return{systemMessages:X,messages:J}}async function YO8(Y,X){return await Y.loadHistory(X)}function XO8(Y,X){let J=Y.filter((K)=>K.parts&&K.parts.length>0),G=J.findIndex((K)=>K.id===X.id);return G>=0?[...J.slice(0,G),X]:[...J,X]}async function aN6(Y,X,J,G){let W=await YO8(Y,G),K=XO8(W,X);return[...J,...K]}async function rN6(Y,X){let J=await U86({messages:Y}),G=tN8(J),W=await z86(G,{tools:X.tools,ignoreIncompleteToolCalls:!0}),{systemMessages:K,messages:Z}=eN8(W),Q=X.models.thinking.capabilities?.reasoning!==!1,H=L86({messages:Z,reasoning:Q?"all":"none",emptyMessages:"remove",toolCalls:"none"});return{systemMessages:K,messages:H,originalMessages:J}}l5();J3();HT();J3();o1();T51();function oN6(Y){let{toolOutputMap:X}=Y;return j7({description:"The input is a string. Dont make assumptions about its format; prefer using regexes and string manipulation to extract the desired information. You may call this tool multiple times to extract the desired information.",inputExamples:[{input:{tool_call_id:"tool_call_id_1",code:"export default (input) => { return input.match(/[a-z]/g); }"}},{input:{tool_call_id:"tool_call_id_2",code:"export default (input) => { return input.split(' ').map(word => word.length); }"}}],inputSchema:E0(F.object({tool_call_id:F.string(),code:F.string().min(1).describe("JavaScript code to transform the tool output. The code must be an ES module: `export default (input) => { ... }`")})),execute:async({tool_call_id:J,code:G})=>{if(!X.has(J))throw Error(`Tool output not found for tool call id: ${J}`);let W=X.get(J),K=await Jf1({input:W,code:G,timeoutMs:5000}),Z=bm1({return:K.returnValue});if(Z>4000)throw Error(`Tool call ${J} output is too long to display (${Z} tokens), reduce or truncate the output`);return{result:K.returnValue,error:K.error,consoleLogs:K.consoleLogs}}})}var JO8=4,GO8=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\u4e00-\u9fff\u3400-\u4dbf\uf900-\ufaff]/g;function WO8(Y){if(!Y)return 0;let X=Y.match(GO8)?.length??0,J=Y.length-X;return Math.ceil(J/JO8)+Math.ceil(X*1.5)}function bm1(Y){let X=typeof Y==="string"?Y:JSON.stringify(Y);return WO8(X)}function YW1(Y,X){if(Y==="yolo")return!1;if(Y==="none")return!0;return X!==!0}function XW1(Y){let X=Y.get("meshContext").organization;if(!X)throw Error("Organization context is required");if((X.slug??X.id)!==Y.req.param("org"))throw Error("Organization mismatch");return X}async function nc(Y,X,J,G="none",W){let K=!W?.disableOutputTruncation,Q=(await Y.listTools()).tools.map((H)=>{let{name:$,title:V,description:z,inputSchema:U,annotations:q,_meta:L}=H;return[$,j7({title:V??$,description:z,inputSchema:X3(U),outputSchema:void 0,needsApproval:YW1(G,q?.readOnlyHint),execute:async(B,M)=>{let P=performance.now();try{return await Y.callTool({name:H.name,arguments:B},ZF,{signal:M.abortSignal,timeout:NN6})}finally{if(J){let C=performance.now()-P;J.write({type:"data-tool-metadata",id:M.toolCallId,data:{_meta:L,annotations:q,latencyMs:C}})}}},toModelOutput:async({output:B,toolCallId:M})=>{if(K){let C=bm1(B.structuredContent??B.content);if(C>4000)return X.set(M,JSON.stringify(B.structuredContent??B.content)),{type:"text",value:`Tool call ${M} output is too long to display (${C} tokens), use the read_tool_output tool`}}if(B.isError)return{type:"error-text",value:B.content.map((I)=>I.type==="text"?I.text:null).filter(Boolean).join(`
|
|
1573
1573
|
`)||"Unknown error"};if("structuredContent"in B)return{type:"json",value:B.structuredContent};return{type:"text",value:B.content.map((C)=>{if(C.type==="text")return C.text;return JSON.stringify(C)}).join(`
|
|
1574
1574
|
`)}}})]});return Object.fromEntries(Q)}async function hm1(Y){let X=Y.get("meshContext"),J=X.auth?.user?.id;if(!J)throw new DJ(401,{message:"Unauthorized"});let G=XW1(Y),W=Y.req.param("threadId");if(!W)throw new DJ(400,{message:"Missing thread ID"});if(/[.*>\s]/.test(W))throw new DJ(400,{message:"Invalid thread ID"});let K=await X.storage.threads.get(W);if(!K)throw new DJ(404,{message:"Thread not found"});return{ctx:X,organization:G,thread:K,threadId:W,userId:J}}async function sN6(Y){let X=await hm1(Y);if(X.thread.created_by!==X.userId)throw new DJ(403,{message:"Not authorized"});return X}Qd();o1();var ZO8=F.looseObject({id:F.string().optional(),role:F.enum(["user","assistant","system"]),parts:F.array(F.record(F.string(),F.unknown())),metadata:F.unknown().optional()}),QO8=F.object({windowSize:F.number().default(S_),thread_id:F.string()}),KO8=F.enum(["openai","anthropic","google","xai","deepseek","openrouter","openai-compatible","deco"]),tN6=KO8.optional().nullable(),xm1=F.object({id:F.string(),title:F.string(),capabilities:F.object({vision:F.boolean().optional(),text:F.boolean().optional(),tools:F.boolean().optional(),reasoning:F.boolean().optional()}).optional(),provider:tN6,limits:F.object({contextWindow:F.number().optional(),maxOutputTokens:F.number().optional()}).optional()}),HO8=xm1.extend({provider:tN6}),$O8=F.object({credentialId:F.string(),thinking:HO8.describe("Backbone model for the agentic loop"),coding:xm1.optional().describe("Good coding model"),fast:xm1.optional().describe("Cheap model for simple tasks")}).loose(),eN6=F.object({messages:F.array(ZO8).min(1).refine((Y)=>Y.filter((X)=>X.role!=="system").length===1,{message:"Expected exactly one non-system message"}),memory:QO8.optional(),models:$O8,agent:F.object({id:F.string(),mode:F.enum(["passthrough","smart_tool_selection","code_execution"])}).loose(),stream:F.boolean().optional(),temperature:F.number().default(0.5),thread_id:F.string().optional(),toolApprovalLevel:F.enum(["none","readonly","yolo"]).default("none")});Ql();b51();qK();var JW1=a6(I0(),1),FO8="Decopilot";function gm1(Y){VO8({...Y,tracer:Y.ctx.tracer})}function VO8(Y){try{if(!Y.organizationId)return;let X=Y.tracer.startSpan(pr),J=JW1.trace.setSpan(JW1.context.active(),X);rj({type:OE,organizationId:Y.organizationId,connectionId:ir,connectionTitle:FO8,toolName:Y.modelId,toolArguments:{model:Y.modelId,credentialId:Y.credentialId,threadId:Y.threadId,...Y.request?.body!==void 0?{requestBody:Y.request.body}:{}},result:{...Y.usage??{},...Y.totalUsage?{totalUsage:Y.totalUsage}:{},...Y.finishReason?{finishReason:Y.finishReason}:{},...Y.response?{responseId:Y.response.id,responseModelId:Y.response.modelId,responseTimestamp:Y.response.timestamp,messages:Y.response.messages}:{},logType:OE},duration:Y.durationMs,isError:Y.isError,errorMessage:Y.errorMessage??null,userId:Y.userId,requestId:Y.requestId,userAgent:Y.userAgent??null,virtualMcpId:Y.agentId??null,properties:{model_title:Y.modelTitle,credential_id:Y.credentialId,thread_id:Y.threadId,log_type:OE,...Y.response?{response_id:Y.response.id}:{}}},J),X.end()}catch{}}qK();function um1(Y){let{ctx:X,organizationId:J,modelId:G,durationMs:W,isError:K,inputTokens:Z,outputTokens:Q}=Y;if(!J||!G)return;let H={"connection.id":ir,"tool.name":G,"organization.id":J,status:K?"error":"success","error.type":K?Y.errorType||"Error":""};if(X.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(W,H),X.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,H),Z!=null||Q!=null){let $={...H};X.meter.createCounter("tool.execution.tokens",{description:"Number of tokens used by LLM calls"}).add((Z??0)+(Q??0),$)}}PY();J3();J3();o1();var zO8=F.object({search_term:F.string().optional().describe("Optional search term to filter agents by name, title, or description. Leave empty to return all available agents.")}),UO8=F.object({agents:F.array(F.object({agent_id:F.string().describe("Unique identifier for the agent"),name:F.string().describe("Human-readable agent name"),purpose:F.string().nullable().describe("What the agent is designed to do"),capabilities:F.array(F.string()).describe("List of capabilities the agent has")}))}),qO8="Search for agents configured in the organization. Returns agent metadata including purpose and capabilities. Use this to discover specialized agents before delegating work with subtask_run.",LO8={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1};function YO6(Y,X,J){let{organization:G,needsApproval:W}=X;return j7({description:qO8,inputSchema:E0(zO8),outputSchema:E0(UO8),needsApproval:W,execute:async({search_term:K},Z)=>{let Q=performance.now();try{let $=(await J.storage.virtualMcps.list(G.id)).filter((z)=>z.status==="active");if(K&&K.trim().length>0){let z=K.toLowerCase();$=$.filter((U)=>{let q=U.title.toLowerCase().includes(z),L=U.description?.toLowerCase().includes(z)??!1;return q||L})}return{agents:$.map((z)=>({agent_id:z.id,name:z.title,purpose:z.description,capabilities:[]}))}}finally{let H=performance.now()-Q;Y.write({type:"data-tool-metadata",id:Z.toolCallId,data:{annotations:LO8,latencyMs:H}})}}})}Ql();PY();J3();o1();var BO8=F.object({prompt:F.string().min(1).max(50000).describe("The task to delegate to the subagent. Be specific and self-contained \u2014 "+"the subagent has no access to the parent conversation history."),agent_id:F.string().min(1).max(128).describe("The ID of the agent (Virtual MCP) to delegate to. This agent must exist and be active in the current organization.")}),NO8=`Delegate a self-contained task to another agent. The subagent runs independently with its own tools and returns results when complete. Use this when a task is better handled by a specialized agent, or to parallelize work across agents.
|
|
1575
1575
|
|
|
@@ -1598,7 +1598,7 @@ End with a concise summary: what you did, what you found/produced, any assumptio
|
|
|
1598
1598
|
|
|
1599
1599
|
${Y}`;return X}function XO6(Y,X,J){let{provider:G,organization:W,models:K,needsApproval:Z}=X;return j7({description:NO8,inputSchema:E0(BO8),needsApproval:Z,execute:async function*({prompt:Q,agent_id:H},{abortSignal:$,toolCallId:V}){let z=performance.now(),U=await J.storage.virtualMcps.findById(H,W.id);if(!U||U.organization_id!==W.id)throw Error("Agent not found");if(U.status!=="active")throw Error("Agent is not active");let q=await mN(U,J,"passthrough"),L=await nc(q,new Map,Y,"yolo",{disableOutputTruncation:!0}),B=Object.fromEntries(Object.entries(L).filter(([E])=>!TN6.includes(E))),M=q.getInstructions(),P=DO8(M),C=PD1(),I=Aj({model:G.aiSdk.languageModel(K.thinking.id),system:P,prompt:Q,tools:B,abortSignal:$,stopWhen:SN(EN6),maxOutputTokens:K.thinking.limits?.maxOutputTokens??iG1,onStepFinish:({usage:E,providerMetadata:S})=>{C=ED1(C,{...E,providerMetadata:S})},onAbort:()=>{console.error(`[subtask:${H}] Aborted`),q.close().catch(()=>{})},onError:(E)=>{console.error(`[subtask:${H}] Error`,E)}});for await(let E of V86({stream:I.toUIMessageStream()}))yield E;let R=performance.now()-z;Y.write({type:"data-tool-metadata",id:V,data:{annotations:OO8,latencyMs:R}}),Y.write({type:"data-tool-subtask-metadata",id:V,data:{usage:C,agent:H,models:K}})},toModelOutput:({output:Q})=>{return{type:"text",value:Q?.parts?.findLast(($)=>("type"in $)&&$.type==="text"&&("text"in $))?.text??"Subtask completed (no output)."}}})}J3();o1();var wO8=F.object({prompt:F.string().min(1).describe("The question to display"),type:F.enum(["text","choice","confirm"]).describe("'text': free-form, 'choice': pick from options (UI adds 'Other' automatically), 'confirm': yes/no"),options:F.array(F.string()).optional().describe("Required for 'choice'"),default:F.string().optional()}).refine((Y)=>{if(Y.type==="choice")return Y.options&&Y.options.length>=2;return!0},{message:"Options array with at least 2 items required for 'choice' type",path:["options"]}),MO8=F.object({response:F.string().describe("User's response")}),AO8="Ask the user instead of guessing when requirements are ambiguous, multiple valid approaches exist, or before destructive changes. Prefer this tool over asking in plain text.",JO6=j7({description:AO8,inputSchema:E0(wO8),outputSchema:E0(MO8)});function GO6(Y,X,J){let{provider:G,organization:W,models:K,toolApprovalLevel:Z="none",toolOutputMap:Q}=X;return{user_ask:JO6,subtask:XO6(Y,{provider:G,organization:W,models:K,needsApproval:YW1(Z,!1)},J),agent_search:YO6(Y,{organization:W,needsApproval:YW1(Z,!0)},J),read_tool_output:oN6({toolOutputMap:Q})}}MW();class WO6{thread;organization_id;storage;defaultWindowSize;constructor(Y){this.thread=Y.thread,this.organization_id=Y.thread.organization_id,this.storage=Y.storage,this.defaultWindowSize=Y.defaultWindowSize??50}async loadHistory(Y){let X=Y??this.defaultWindowSize,{messages:J}=await this.storage.listMessages(this.thread.id,{limit:X,sort:"desc"}),G=[...J].reverse(),W=G.findIndex((K)=>K.role==="user");return W>=0?G.slice(W):G}async save(Y){if(Y.length===0)return;await this.storage.saveMessages(Y)}}async function ZO6(Y,X){let{thread_id:J,organization_id:G,userId:W,defaultWindowSize:K,triggerId:Z}=X,Q;if(!J)Q=await Y.create({id:a8("thrd"),organization_id:G,created_by:W,trigger_id:Z??null});else{let H=await Y.get(J);if(H)Q=H;else Q=await Y.create({id:J,organization_id:G,created_by:W,trigger_id:Z??null})}return new WO6({thread:Q,storage:Y,defaultWindowSize:K})}HT();function QO6(Y,X){if(!(Y.thinking.capabilities?.vision??!1)){if(X.some((W)=>W.parts?.some((K)=>K.type==="file")))throw new DJ(400,{message:"This model does not support file uploads. Please change the model and try again."})}}Qd();function KO6(Y,X=[]){if(Y==="stop")return X.filter((W)=>W.type==="text"&&W.text).map((W)=>W.text).join(`
|
|
1600
1600
|
`).replace(/https?:\/\/[^\s)>\]]+/g,"").includes("?")?"requires_action":"completed";if(Y==="tool-calls"){let J=X.some((W)=>W.type==="tool-user_ask"&&W.state==="input-available"),G=X.some((W)=>W.state==="approval-requested");return J||G?"requires_action":"completed"}return"failed"}J3();var PO8=2500;async function HO6(Y){let{abortSignal:X,model:J,userMessage:G}=Y,W=new AbortController,K=()=>W.abort();X.addEventListener("abort",K,{once:!0});let Z=setTimeout(()=>{W.abort()},PO8);try{let H=(await Mj({model:J,system:RN6,messages:[{role:"user",content:G}],maxOutputTokens:60,temperature:0.2,abortSignal:W.signal})).text.trim();return(H.split(`
|
|
1601
|
-
`)[0]??H).replace(/^["']|["']$/g,"").replace(/^(Title:|title:)\s*/i,"").replace(/[.!?]$/,"").slice(0,60).trim()}catch(Q){let H=Q;if(H.name==="AbortError")console.warn("[decopilot:title] Title generation aborted (timeout or parent abort)");else console.error("[decopilot:title] \u274C Failed to generate title:",H.message);return null}finally{clearTimeout(Z),X.removeEventListener("abort",K)}}async function k_(Y,X,J){let{runRegistry:G,streamBuffer:W}=J,K,Z=!1,Q,H,$=!1;try{let V=await Rq(X.db,Y.organizationId,X.auth.user?.role);if(!LS(V,Y.models.credentialId,Y.models.thinking.id))throw Error("Model not allowed for your role");let z=Y.windowSize??S_,[U,q,L]=await Promise.all([X.storage.virtualMcps.findById(Y.agent.id,Y.organizationId),X.aiProviders.activate(Y.models.credentialId,Y.organizationId),ZO6(X.storage.threads,{organization_id:Y.organizationId,thread_id:Y.threadId,userId:Y.userId,defaultWindowSize:z,triggerId:Y.triggerId})]);if(Q=L.thread.id,L.thread.created_by!==Y.userId)throw Error("You are not allowed to write to this thread because you are not the owner");let B=async(...y)=>{let a=Date.now(),c=[...new Map(y.filter(Boolean).map((m)=>[m.id,m])).values()].map((m,i)=>({...m,thread_id:L.thread.id,created_at:new Date(a+i).toISOString(),updated_at:new Date(a+i).toISOString()}));if(c.length===0)return;await L.save(c).catch((m)=>{console.error("[decopilot:stream] Error saving messages",m)})};if(!U)throw Error("Agent not found");await G.execute({type:"START",threadId:L.thread.id,orgId:Y.organizationId,userId:Y.userId,abortController:new AbortController}),Z=!0;let M=G.getAbortSignal(L.thread.id);if(!M)throw await G.execute({type:"FINISH",threadId:L.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if(Y.abortSignal){let y=Y.abortSignal;if(y.aborted)await G.execute({type:"CANCEL",threadId:L.thread.id});else y.addEventListener("abort",()=>{G.execute({type:"CANCEL",threadId:L.thread.id}).catch(()=>{})},{once:!0})}W?.purge(L.thread.id);let P=Y.messages.filter((y)=>y.role==="system"),C=Y.messages.find((y)=>y.role!=="system");if(!C)throw Error("No user message found in input \u2014 expected at least one non-system message");await B(C),M.addEventListener("abort",()=>{K?.()});let I=Y.agent.mode!=="passthrough",R=Y.models.thinking.limits?.maxOutputTokens??iG1,E=!1,S=[],v=await aN6(L,C,[Am1(),...P],z),k=new Map,g=X.organization,f=NX1({originalMessages:v,execute:async({writer:y})=>{let[a,c]=await Promise.all([mN(U,X,"passthrough"),I?mN(U,X,Y.agent.mode):Promise.resolve(null)]);K=()=>{a.close().catch(()=>{}),c?.close().catch(()=>{})};let m=a.getInstructions(),i=m?.trim()?v.map((F0)=>F0.id==="decopilot-system"?Am1(m):F0):v,H1=await nc(a,k,y,Y.toolApprovalLevel),W1=c?await nc(c,k,y,Y.toolApprovalLevel):{},D1=await GO6(y,{provider:q,organization:g,models:Y.models,toolApprovalLevel:Y.toolApprovalLevel,toolOutputMap:k},X),M1={...H1,...W1,...D1},P1=c?[...Object.keys(W1),...Object.keys(D1)]:void 0,{systemMessages:k1,messages:y1,originalMessages:W0}=await rN6(i,{windowSize:z,models:Y.models,tools:M1});if(QO6(Y.models,W0),L.thread.title===aG1)HO6({abortSignal:M,model:q.aiSdk.languageModel(Y.models.fast?.id??Y.models.thinking.id),userMessage:JSON.stringify(y1[0]?.content)}).then(async(F0)=>{if(!F0)return;if(await X.storage.threads.update(L.thread.id,{title:F0}).catch((u1)=>{console.error("[decopilot:stream] Error updating thread title",u1)}),!E)y.write({type:"data-thread-title",data:{title:F0},transient:!0})}).catch((F0)=>{console.warn("[decopilot:stream] Title generation failed:",F0)});let f1=null,Q1;H=Date.now();let P0=Aj({model:q.aiSdk.languageModel(Y.models.thinking.id),system:k1,messages:y1,tools:M1,activeTools:P1,temperature:Y.temperature,maxOutputTokens:R,abortSignal:M,stopWhen:SN(PN6),onFinish:async({usage:F0,totalUsage:u1,finishReason:A1,request:q1,response:K1})=>{if(M.aborted)return;let O1=Date.now()-(H??Date.now());$=!0,um1({ctx:X,organizationId:Y.organizationId,modelId:Y.models.thinking.id,durationMs:O1,isError:!1,inputTokens:u1.inputTokens,outputTokens:u1.outputTokens}),gm1({ctx:X,organizationId:Y.organizationId,agentId:Y.agent.id,modelId:Y.models.thinking.id,modelTitle:Y.models.thinking.title??Y.models.thinking.id,credentialId:Y.models.credentialId,threadId:L.thread.id,durationMs:O1,isError:!1,finishReason:A1,usage:{inputTokens:F0.inputTokens??0,outputTokens:F0.outputTokens??0,totalTokens:F0.totalTokens??0},totalUsage:{inputTokens:u1.inputTokens??0,outputTokens:u1.outputTokens??0,totalTokens:u1.totalTokens??0},request:q1,response:K1,userId:Y.userId,requestId:X.metadata.requestId,userAgent:X.metadata.userAgent??null})},onError:async(F0)=>{if(console.error("[decopilot:stream] Error",F0),M.aborted)throw F0;if(!$){let u1=Date.now()-(H??Date.now());$=!0,um1({ctx:X,organizationId:Y.organizationId,modelId:Y.models.thinking.id,durationMs:u1,isError:!0,errorType:F0 instanceof Error?F0.name:"Error"}),gm1({ctx:X,organizationId:Y.organizationId,agentId:Y.agent.id,modelId:Y.models.thinking.id,modelTitle:Y.models.thinking.title??Y.models.thinking.id,credentialId:Y.models.credentialId,threadId:L.thread.id,durationMs:u1,isError:!0,errorMessage:F0 instanceof Error?F0.message:String(F0),userId:Y.userId,requestId:X.metadata.requestId,userAgent:X.metadata.userAgent??null})}throw F0}}).toUIMessageStream({originalMessages:W0,generateMessageId:AN6,onError:(F0)=>mm1(F0),messageMetadata:({part:F0})=>{if(F0.type==="start")return{agent:{id:Y.agent.id??null,mode:Y.agent.mode},models:{credentialId:Y.models.credentialId,thinking:{...Y.models.thinking,provider:Y.models.thinking.provider??void 0}},created_at:new Date,thread_id:L.thread.id};if(F0.type==="reasoning-start"){if(f1===null)f1=new Date;return{reasoning_start_at:f1}}if(F0.type==="reasoning-end")return{reasoning_end_at:new Date};if(F0.type==="finish-step"){Q1=F0.providerMetadata;return}if(F0.type==="finish"){let u1=Y.models.thinking.provider,A1=F0.totalUsage,q1=Q1??F0.providerMetadata,K1=A1?{inputTokens:A1.inputTokens??0,outputTokens:A1.outputTokens??0,reasoningTokens:A1.reasoningTokens??void 0,totalTokens:A1.totalTokens??0,providerMetadata:AD1(u1&&q1?{...q1,[u1]:{...q1[u1]??{},reasoning_details:void 0}}:q1)}:void 0;return{...K1&&{usage:K1}}}return}});if(W)y.merge(W.relay(P0,L.thread.id,M));else y.merge(P0)},onFinish:async({responseMessage:y,finishReason:a})=>{if(E=!0,K?.(),await Promise.allSettled(S),await B(y),M.aborted)return;let c=KO6(a,y?.parts);await G.execute({type:"FINISH",threadId:L.thread.id,threadStatus:c})},onStepFinish:({responseMessage:y})=>{let a=G.dispatch({type:"STEP_DONE",threadId:L.thread.id});S.push(G.react(a).catch((m)=>{console.error("[decopilot:stream] onStepFinish reactor failed",m)}));let c=a[0]?.event;if(c?.type==="STEP_COMPLETED"&&c.stepCount%5===0)S.push(B(y).catch((m)=>{console.error("[decopilot:stream] onStepFinish save failed",m)}))},onError:(y)=>{if(E=!0,K?.(),M.aborted)return mm1(y);return console.error("[decopilot] stream error:",y),G.execute({type:"FINISH",threadId:L.thread.id,threadStatus:"failed"}).catch((a)=>{console.error("[decopilot:stream] onError reactor failed",a)}),mm1(y)}});return{threadId:L.thread.id,stream:f}}catch(V){if(K?.(),Z&&Q)G.execute({type:"FINISH",threadId:Q,threadStatus:"failed"}).catch((z)=>{console.error("[decopilot:stream] catch-block reactor failed",z)});throw V}}function EO8(Y){let J=Y.split(/\.\s+/).filter((W)=>!/https?:\/\//i.test(W)&&!/openrouter/i.test(W));if(J.length===0)return Y;let G=J.join(". ").trim();return G.endsWith(".")?G:`${G}.`}function mm1(Y){if(Y instanceof Error){if(Y.statusCode===402||Y.message.toLowerCase().includes("credit"))return EO8(Y.message);return Y.message}return String(Y)}async function $O6(Y){let X=Y.stream.getReader();while(!0){let{done:J}=await X.read();if(J)break}}async function TO8(Y){let X=XW1(Y),J=await Y.req.json(),G=eN6.safeParse(J);if(!G.success)throw new DJ(400,{message:G.error.message});let{messages:W,...K}=G.data,Z=W,{systemMessages:Q,requestMessage:H}=iN6(Z);return{organization:X,systemMessages:Q,requestMessage:H,...K}}function lm1(Y){let{cancelBroadcast:X,streamBuffer:J,runRegistry:G}=Y,W=new ZX;return W.get("/:org/decopilot/allowed-models",async(K)=>{try{let Z=K.get("meshContext"),Q=XW1(K),H=Z.auth.user?.role,$=await Rq(Z.db,Q.id,H);return K.json(f36($))}catch(Z){if(console.error("[decopilot:allowed-models] Error",Z),Z instanceof DJ)return K.json({error:Z.message},Z.status);return K.json({error:Z instanceof Error?Z.message:"Internal error"},500)}}),W.post("/:org/decopilot/stream",async(K)=>{try{let Z=K.get("meshContext"),{organization:Q,models:H,agent:$,systemMessages:V,requestMessage:z,temperature:U,memory:q,thread_id:L,toolApprovalLevel:B}=await TO8(K),M=Z.auth?.user?.id;if(!M)throw new DJ(401,{message:"User ID is required"});let P=await Rq(Z.db,Q.id,Z.auth.user?.role);if(P!==void 0&&!LS(P,H.credentialId,H.thinking.id))throw new DJ(403,{message:"Model not allowed for your role"});let C=q?.windowSize??S_,I=L??q?.thread_id,R=await k_({messages:[...V,z],models:H,agent:$,temperature:U,toolApprovalLevel:B,organizationId:Q.id,userId:M,threadId:I,windowSize:C},Z,{runRegistry:G,streamBuffer:J,cancelBroadcast:X});return BX1({stream:R.stream,consumeSseStream:Vm})}catch(Z){if(console.error("[decopilot:stream] Error",Z),Z instanceof DJ)return K.json({error:Z.message},Z.status);if(Z instanceof Error&&Z.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:Z.message}),K.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:Z instanceof Error?Z.message:JSON.stringify(Z),stack:Z instanceof Error?Z.stack:void 0}),K.json({error:Z instanceof Error?Z.message:JSON.stringify(Z)},500)}}),W.post("/:org/decopilot/cancel/:threadId",async(K)=>{let{threadId:Z,thread:Q,organization:H}=await sN6(K);if((await G.execute({type:"CANCEL",threadId:Z})).some((V)=>V.event.type==="RUN_FAILED"))return K.json({cancelled:!0});if(X.broadcast(Z),Q.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{threadId:Z}),G.execute({type:"FORCE_FAIL",threadId:Z,reason:"ghost",orgId:H.id}).catch((V)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{threadId:Z,err:V})});return K.json({cancelled:!0,async:!0},202)}),W.get("/:org/decopilot/attach/:threadId",async(K)=>{try{let{threadId:Z}=await hm1(K);if(!G.isRunning(Z))return K.body(null,204);let Q=await J.createReplayStream(Z);if(!Q)return K.body(null,204);let H=NX1({execute:async({writer:$})=>{let V=Q.getReader();try{while(!0){let{done:z,value:U}=await V.read();if(z)break;$.write(U)}}finally{V.releaseLock()}}});return BX1({stream:H,consumeSseStream:Vm})}catch(Z){if(Z instanceof DJ)throw Z;return console.error("[decopilot:attach] Error",Z),K.body(null,500)}}),W}rZ();f51();var GW1=new ZX;GW1.post("/connections/:connectionId/oauth-token",async(Y)=>{let X=Y.get("meshContext"),J=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);if(!await X.storage.connections.findById(J,X.organization?.id))return Y.json({error:"Connection not found"},404);let K=await Y.req.json();if(!K.accessToken)return Y.json({error:"accessToken is required"},400);if(K.tokenEndpoint){let V;try{V=new URL(K.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(V.protocol!=="http:"&&V.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let Z=K.expiresIn?new Date(Date.now()+K.expiresIn*1000):null,Q=new Uq(X.db,X.vault),H={connectionId:J,accessToken:K.accessToken,refreshToken:K.refreshToken??null,scope:K.scope??null,expiresAt:Z,clientId:K.clientId??null,clientSecret:K.clientSecret??null,tokenEndpoint:K.tokenEndpoint??null},$=await Q.upsert(H);return Y.json({success:!0,expiresAt:$.expiresAt})});GW1.delete("/connections/:connectionId/oauth-token",async(Y)=>{let X=Y.get("meshContext"),J=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);return await new Uq(X.db,X.vault).delete(J),Y.json({success:!0})});GW1.get("/connections/:connectionId/oauth-token/status",async(Y)=>{let X=Y.get("meshContext"),J=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let W=new Uq(X.db,X.vault),K=await W.get(J);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let Z=W.isExpired(K),Q=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:Z,canRefresh:Q,expiresAt:K.expiresAt})});var FO6=GW1;$f1();Wl();J3();rZ();var dm1=class{writer;encoder;writable;abortSubscribers=[];responseReadable;aborted=!1;closed=!1;constructor(Y,X){this.writable=Y,this.writer=Y.getWriter(),this.encoder=new TextEncoder;let J=X.getReader();this.abortSubscribers.push(async()=>{await J.cancel()}),this.responseReadable=new ReadableStream({async pull(G){let{done:W,value:K}=await J.read();W?G.close():G.enqueue(K)},cancel:()=>{this.abort()}})}async write(Y){try{if(typeof Y==="string")Y=this.encoder.encode(Y);await this.writer.write(Y)}catch{}return this}async writeln(Y){return await this.write(Y+`
|
|
1601
|
+
`)[0]??H).replace(/^["']|["']$/g,"").replace(/^(Title:|title:)\s*/i,"").replace(/[.!?]$/,"").slice(0,60).trim()}catch(Q){let H=Q;if(H.name==="AbortError")console.warn("[decopilot:title] Title generation aborted (timeout or parent abort)");else console.error("[decopilot:title] \u274C Failed to generate title:",H.message);return null}finally{clearTimeout(Z),X.removeEventListener("abort",K)}}async function k_(Y,X,J){let{runRegistry:G,streamBuffer:W}=J,K,Z=!1,Q,H,$=!1;try{let V=await Rq(X.db,Y.organizationId,X.auth.user?.role);if(!LS(V,Y.models.credentialId,Y.models.thinking.id))throw Error("Model not allowed for your role");let z=Y.windowSize??S_,[U,q,L]=await Promise.all([X.storage.virtualMcps.findById(Y.agent.id,Y.organizationId),X.aiProviders.activate(Y.models.credentialId,Y.organizationId),ZO6(X.storage.threads,{organization_id:Y.organizationId,thread_id:Y.threadId,userId:Y.userId,defaultWindowSize:z,triggerId:Y.triggerId})]);if(Q=L.thread.id,L.thread.created_by!==Y.userId)throw Error("You are not allowed to write to this thread because you are not the owner");let B=async(...y)=>{let a=Date.now(),c=[...new Map(y.filter(Boolean).map((m)=>[m.id,m])).values()].filter((m)=>m.parts&&m.parts.length>0).map((m,i)=>({...m,thread_id:L.thread.id,created_at:new Date(a+i).toISOString(),updated_at:new Date(a+i).toISOString()}));if(c.length===0)return;await L.save(c).catch((m)=>{console.error("[decopilot:stream] Error saving messages",m)})};if(!U)throw Error("Agent not found");await G.execute({type:"START",threadId:L.thread.id,orgId:Y.organizationId,userId:Y.userId,abortController:new AbortController}),Z=!0;let M=G.getAbortSignal(L.thread.id);if(!M)throw await G.execute({type:"FINISH",threadId:L.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if(Y.abortSignal){let y=Y.abortSignal;if(y.aborted)await G.execute({type:"CANCEL",threadId:L.thread.id});else y.addEventListener("abort",()=>{G.execute({type:"CANCEL",threadId:L.thread.id}).catch(()=>{})},{once:!0})}W?.purge(L.thread.id);let P=Y.messages.filter((y)=>y.role==="system"),C=Y.messages.find((y)=>y.role!=="system");if(!C)throw Error("No user message found in input \u2014 expected at least one non-system message");await B(C),M.addEventListener("abort",()=>{K?.()});let I=Y.agent.mode!=="passthrough",R=Y.models.thinking.limits?.maxOutputTokens??iG1,E=!1,S=[],v=await aN6(L,C,[Am1(),...P],z),k=new Map,g=X.organization,f=NX1({originalMessages:v,execute:async({writer:y})=>{let[a,c]=await Promise.all([mN(U,X,"passthrough"),I?mN(U,X,Y.agent.mode):Promise.resolve(null)]);K=()=>{a.close().catch(()=>{}),c?.close().catch(()=>{})};let m=a.getInstructions(),i=m?.trim()?v.map((F0)=>F0.id==="decopilot-system"?Am1(m):F0):v,H1=await nc(a,k,y,Y.toolApprovalLevel),W1=c?await nc(c,k,y,Y.toolApprovalLevel):{},D1=await GO6(y,{provider:q,organization:g,models:Y.models,toolApprovalLevel:Y.toolApprovalLevel,toolOutputMap:k},X),M1={...H1,...W1,...D1},P1=c?[...Object.keys(W1),...Object.keys(D1)]:void 0,{systemMessages:k1,messages:y1,originalMessages:W0}=await rN6(i,{windowSize:z,models:Y.models,tools:M1});if(QO6(Y.models,W0),L.thread.title===aG1)HO6({abortSignal:M,model:q.aiSdk.languageModel(Y.models.fast?.id??Y.models.thinking.id),userMessage:JSON.stringify(y1[0]?.content)}).then(async(F0)=>{if(!F0)return;if(await X.storage.threads.update(L.thread.id,{title:F0}).catch((u1)=>{console.error("[decopilot:stream] Error updating thread title",u1)}),!E)y.write({type:"data-thread-title",data:{title:F0},transient:!0})}).catch((F0)=>{console.warn("[decopilot:stream] Title generation failed:",F0)});let f1=null,Q1;H=Date.now();let P0=Aj({model:q.aiSdk.languageModel(Y.models.thinking.id),system:k1,messages:y1,tools:M1,activeTools:P1,temperature:Y.temperature,maxOutputTokens:R,abortSignal:M,stopWhen:SN(PN6),onFinish:async({usage:F0,totalUsage:u1,finishReason:A1,request:q1,response:K1})=>{if(M.aborted)return;let O1=Date.now()-(H??Date.now());$=!0,um1({ctx:X,organizationId:Y.organizationId,modelId:Y.models.thinking.id,durationMs:O1,isError:!1,inputTokens:u1.inputTokens,outputTokens:u1.outputTokens}),gm1({ctx:X,organizationId:Y.organizationId,agentId:Y.agent.id,modelId:Y.models.thinking.id,modelTitle:Y.models.thinking.title??Y.models.thinking.id,credentialId:Y.models.credentialId,threadId:L.thread.id,durationMs:O1,isError:!1,finishReason:A1,usage:{inputTokens:F0.inputTokens??0,outputTokens:F0.outputTokens??0,totalTokens:F0.totalTokens??0},totalUsage:{inputTokens:u1.inputTokens??0,outputTokens:u1.outputTokens??0,totalTokens:u1.totalTokens??0},request:q1,response:K1,userId:Y.userId,requestId:X.metadata.requestId,userAgent:X.metadata.userAgent??null})},onError:async(F0)=>{if(console.error("[decopilot:stream] Error",F0),M.aborted)throw F0;if(!$){let u1=Date.now()-(H??Date.now());$=!0,um1({ctx:X,organizationId:Y.organizationId,modelId:Y.models.thinking.id,durationMs:u1,isError:!0,errorType:F0 instanceof Error?F0.name:"Error"}),gm1({ctx:X,organizationId:Y.organizationId,agentId:Y.agent.id,modelId:Y.models.thinking.id,modelTitle:Y.models.thinking.title??Y.models.thinking.id,credentialId:Y.models.credentialId,threadId:L.thread.id,durationMs:u1,isError:!0,errorMessage:F0 instanceof Error?F0.message:String(F0),userId:Y.userId,requestId:X.metadata.requestId,userAgent:X.metadata.userAgent??null})}throw F0}}).toUIMessageStream({originalMessages:W0,generateMessageId:AN6,onError:(F0)=>mm1(F0),messageMetadata:({part:F0})=>{if(F0.type==="start")return{agent:{id:Y.agent.id??null,mode:Y.agent.mode},models:{credentialId:Y.models.credentialId,thinking:{...Y.models.thinking,provider:Y.models.thinking.provider??void 0}},created_at:new Date,thread_id:L.thread.id};if(F0.type==="reasoning-start"){if(f1===null)f1=new Date;return{reasoning_start_at:f1}}if(F0.type==="reasoning-end")return{reasoning_end_at:new Date};if(F0.type==="finish-step"){Q1=F0.providerMetadata;return}if(F0.type==="finish"){let u1=Y.models.thinking.provider,A1=F0.totalUsage,q1=Q1??F0.providerMetadata,K1=A1?{inputTokens:A1.inputTokens??0,outputTokens:A1.outputTokens??0,reasoningTokens:A1.reasoningTokens??void 0,totalTokens:A1.totalTokens??0,providerMetadata:AD1(u1&&q1?{...q1,[u1]:{...q1[u1]??{},reasoning_details:void 0}}:q1)}:void 0;return{...K1&&{usage:K1}}}return}});if(W)y.merge(W.relay(P0,L.thread.id,M));else y.merge(P0)},onFinish:async({responseMessage:y,finishReason:a})=>{if(E=!0,K?.(),await Promise.allSettled(S),await B(y),M.aborted)return;let c=KO6(a,y?.parts);await G.execute({type:"FINISH",threadId:L.thread.id,threadStatus:c})},onStepFinish:({responseMessage:y})=>{let a=G.dispatch({type:"STEP_DONE",threadId:L.thread.id});S.push(G.react(a).catch((m)=>{console.error("[decopilot:stream] onStepFinish reactor failed",m)}));let c=a[0]?.event;if(c?.type==="STEP_COMPLETED"&&c.stepCount%5===0)S.push(B(y).catch((m)=>{console.error("[decopilot:stream] onStepFinish save failed",m)}))},onError:(y)=>{if(E=!0,K?.(),M.aborted)return mm1(y);return console.error("[decopilot] stream error:",y),G.execute({type:"FINISH",threadId:L.thread.id,threadStatus:"failed"}).catch((a)=>{console.error("[decopilot:stream] onError reactor failed",a)}),mm1(y)}});return{threadId:L.thread.id,stream:f}}catch(V){if(K?.(),Z&&Q)G.execute({type:"FINISH",threadId:Q,threadStatus:"failed"}).catch((z)=>{console.error("[decopilot:stream] catch-block reactor failed",z)});throw V}}function EO8(Y){let J=Y.split(/\.\s+/).filter((W)=>!/https?:\/\//i.test(W)&&!/openrouter/i.test(W));if(J.length===0)return Y;let G=J.join(". ").trim();return G.endsWith(".")?G:`${G}.`}function mm1(Y){if(Y instanceof Error){if(Y.statusCode===402||Y.message.toLowerCase().includes("credit"))return EO8(Y.message);return Y.message}return String(Y)}async function $O6(Y){let X=Y.stream.getReader();while(!0){let{done:J}=await X.read();if(J)break}}async function TO8(Y){let X=XW1(Y),J=await Y.req.json(),G=eN6.safeParse(J);if(!G.success)throw new DJ(400,{message:G.error.message});let{messages:W,...K}=G.data,Z=W,{systemMessages:Q,requestMessage:H}=iN6(Z);return{organization:X,systemMessages:Q,requestMessage:H,...K}}function lm1(Y){let{cancelBroadcast:X,streamBuffer:J,runRegistry:G}=Y,W=new ZX;return W.get("/:org/decopilot/allowed-models",async(K)=>{try{let Z=K.get("meshContext"),Q=XW1(K),H=Z.auth.user?.role,$=await Rq(Z.db,Q.id,H);return K.json(f36($))}catch(Z){if(console.error("[decopilot:allowed-models] Error",Z),Z instanceof DJ)return K.json({error:Z.message},Z.status);return K.json({error:Z instanceof Error?Z.message:"Internal error"},500)}}),W.post("/:org/decopilot/stream",async(K)=>{try{let Z=K.get("meshContext"),{organization:Q,models:H,agent:$,systemMessages:V,requestMessage:z,temperature:U,memory:q,thread_id:L,toolApprovalLevel:B}=await TO8(K),M=Z.auth?.user?.id;if(!M)throw new DJ(401,{message:"User ID is required"});let P=await Rq(Z.db,Q.id,Z.auth.user?.role);if(P!==void 0&&!LS(P,H.credentialId,H.thinking.id))throw new DJ(403,{message:"Model not allowed for your role"});let C=q?.windowSize??S_,I=L??q?.thread_id,R=await k_({messages:[...V,z],models:H,agent:$,temperature:U,toolApprovalLevel:B,organizationId:Q.id,userId:M,threadId:I,windowSize:C},Z,{runRegistry:G,streamBuffer:J,cancelBroadcast:X});return BX1({stream:R.stream,consumeSseStream:Vm})}catch(Z){if(console.error("[decopilot:stream] Error",Z),Z instanceof DJ)return K.json({error:Z.message},Z.status);if(Z instanceof Error&&Z.name==="AbortError")return console.warn("[decopilot:stream] Aborted",{error:Z.message}),K.json({error:"Request aborted"},400);return console.error("[decopilot:stream] Failed",{error:Z instanceof Error?Z.message:JSON.stringify(Z),stack:Z instanceof Error?Z.stack:void 0}),K.json({error:Z instanceof Error?Z.message:JSON.stringify(Z)},500)}}),W.post("/:org/decopilot/cancel/:threadId",async(K)=>{let{threadId:Z,thread:Q,organization:H}=await sN6(K);if((await G.execute({type:"CANCEL",threadId:Z})).some((V)=>V.event.type==="RUN_FAILED"))return K.json({cancelled:!0});if(X.broadcast(Z),Q.status==="in_progress")console.warn("[decopilot:cancel] Ghost run detected, force-failing",{threadId:Z}),G.execute({type:"FORCE_FAIL",threadId:Z,reason:"ghost",orgId:H.id}).catch((V)=>{console.error("[decopilot:cancel] Failed to force-fail ghost thread",{threadId:Z,err:V})});return K.json({cancelled:!0,async:!0},202)}),W.get("/:org/decopilot/attach/:threadId",async(K)=>{try{let{threadId:Z}=await hm1(K);if(!G.isRunning(Z))return K.body(null,204);let Q=await J.createReplayStream(Z);if(!Q)return K.body(null,204);let H=NX1({execute:async({writer:$})=>{let V=Q.getReader();try{while(!0){let{done:z,value:U}=await V.read();if(z)break;$.write(U)}}finally{V.releaseLock()}}});return BX1({stream:H,consumeSseStream:Vm})}catch(Z){if(Z instanceof DJ)throw Z;return console.error("[decopilot:attach] Error",Z),K.body(null,500)}}),W}rZ();f51();var GW1=new ZX;GW1.post("/connections/:connectionId/oauth-token",async(Y)=>{let X=Y.get("meshContext"),J=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);if(!await X.storage.connections.findById(J,X.organization?.id))return Y.json({error:"Connection not found"},404);let K=await Y.req.json();if(!K.accessToken)return Y.json({error:"accessToken is required"},400);if(K.tokenEndpoint){let V;try{V=new URL(K.tokenEndpoint)}catch{return Y.json({error:"tokenEndpoint must be a valid URL"},400)}if(V.protocol!=="http:"&&V.protocol!=="https:")return Y.json({error:"tokenEndpoint must be an http(s) URL"},400)}let Z=K.expiresIn?new Date(Date.now()+K.expiresIn*1000):null,Q=new Uq(X.db,X.vault),H={connectionId:J,accessToken:K.accessToken,refreshToken:K.refreshToken??null,scope:K.scope??null,expiresAt:Z,clientId:K.clientId??null,clientSecret:K.clientSecret??null,tokenEndpoint:K.tokenEndpoint??null},$=await Q.upsert(H);return Y.json({success:!0,expiresAt:$.expiresAt})});GW1.delete("/connections/:connectionId/oauth-token",async(Y)=>{let X=Y.get("meshContext"),J=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);return await new Uq(X.db,X.vault).delete(J),Y.json({success:!0})});GW1.get("/connections/:connectionId/oauth-token/status",async(Y)=>{let X=Y.get("meshContext"),J=Y.req.param("connectionId");if(!(X.auth.user?.id??X.auth.apiKey?.userId??null))return Y.json({error:"Unauthorized"},401);let W=new Uq(X.db,X.vault),K=await W.get(J);if(!K)return Y.json({hasToken:!1,isExpired:!0,canRefresh:!1});let Z=W.isExpired(K),Q=!!K.refreshToken&&!!K.tokenEndpoint;return Y.json({hasToken:!0,isExpired:Z,canRefresh:Q,expiresAt:K.expiresAt})});var FO6=GW1;$f1();Wl();J3();rZ();var dm1=class{writer;encoder;writable;abortSubscribers=[];responseReadable;aborted=!1;closed=!1;constructor(Y,X){this.writable=Y,this.writer=Y.getWriter(),this.encoder=new TextEncoder;let J=X.getReader();this.abortSubscribers.push(async()=>{await J.cancel()}),this.responseReadable=new ReadableStream({async pull(G){let{done:W,value:K}=await J.read();W?G.close():G.enqueue(K)},cancel:()=>{this.abort()}})}async write(Y){try{if(typeof Y==="string")Y=this.encoder.encode(Y);await this.writer.write(Y)}catch{}return this}async writeln(Y){return await this.write(Y+`
|
|
1602
1602
|
`),this}sleep(Y){return new Promise((X)=>setTimeout(X,Y))}async close(){try{await this.writer.close()}catch{}this.closed=!0}async pipe(Y){this.writer.releaseLock(),await Y.pipeTo(this.writable,{preventClose:!0}),this.writer=this.writable.getWriter()}onAbort(Y){this.abortSubscribers.push(Y)}abort(){if(!this.aborted)this.aborted=!0,this.abortSubscribers.forEach((Y)=>Y())}};var WW1=()=>{let Y=typeof Bun<"u"?Bun.version:void 0;if(Y===void 0)return!1;let X=Y.startsWith("1.1")||Y.startsWith("1.0")||Y.startsWith("0.");return WW1=()=>X,X};O11();var VO6=class extends dm1{constructor(Y,X){super(Y,X)}async writeSSE(Y){let J=(await yb(Y.data,N11.Stringify,!1,{})).split(/\r\n|\r|\n/).map((W)=>{return`data: ${W}`}).join(`
|
|
1603
1603
|
`);for(let W of["event","id","retry"])if(Y[W]&&/[\r\n]/.test(Y[W]))throw Error(`${W} must not contain "\\r" or "\\n"`);let G=[Y.event&&`event: ${Y.event}`,J,Y.id&&`id: ${Y.id}`,Y.retry&&`retry: ${Y.retry}`].filter(Boolean).join(`
|
|
1604
1604
|
`)+`
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ap as a,aq as t}from"./index-B_DxRVw1.js";const e=a(t,{target:"draft-7"});export{e as B};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as r,j as i}from"./index-B_DxRVw1.js";import{P as m}from"./project-plugins-DwwhiaLk.js";import"./useQuery-B8Io0Oda.js";import"./useMutation-d1AXy22c.js";import"./constants-CKGlP4oN.js";import"./switch-BE6ziGyo.js";import"./label--AQoxbpU.js";import"./Container-BeAIfNvy.js";import"./use-connection-DA77pjoV.js";import"./use-collections-aokT1D_C.js";import"./registry-utils--TC_kKCq.js";import"./binder-B5Q0NNkg.js";import"./use-install-from-registry-C_csgcCs.js";import"./extract-connection-data-D46U8dB4.js";import"./constants-DqZ0hFNm.js";import"./generate-id-Dyweu44Y.js";import"./Loading01-Dt16NixZ.js";import"./Plus-DN4FtVmx.js";import"./select-BM9jpLT2.js";import"./ChevronUp-B5BOcmGB.js";import"./index-DRLd-piX.js";import"./Check-Bme4aNg5.js";import"./ChevronDown-jyPVRLzp.js";function q(){const o=r.c(1);let t;return o[0]===Symbol.for("react.memo_cache_sentinel")?(t=i.jsx(m,{}),o[0]=t):t=o[0],t}export{q as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as n,j as r,E as d,r as f,u as x,e as j}from"./index-B_DxRVw1.js";import{T as h}from"./tasks-panel-BXchRGWe.js";import{P as p}from"./index-CsqngJxb.js";import{B as g,a as b,b as T,c as k}from"./breadcrumb-BhQI8Xw3.js";import{i as B}from"./Loading01-Dt16NixZ.js";import{u as S}from"./context-ow-zK3BP.js";import"./task-status-B3QSknHK.js";import"./popover-DOnHuwq3.js";import"./skeleton-BkpiIfDB.js";import"./spinner-tJ67zxkj.js";import"./tooltip-Bm11lCIm.js";import"./index-DRLd-piX.js";import"./constants-CKGlP4oN.js";import"./use-mcp-prompts-Dw4CvfV3.js";import"./useQuery-B8Io0Oda.js";import"./dialog-COv8XUO0.js";import"./X-CxZVsh3L.js";import"./form-CZrleug2.js";import"./label--AQoxbpU.js";import"./input-DqwWeNgs.js";import"./index-CVyJGNS2.js";import"./usage-BW6ztpN6.js";import"./ArrowUp-WIHiBhdv.js";import"./ChevronDown-jyPVRLzp.js";import"./Edit01-BxDvpu_b.js";import"./Lock01-DZeZ3WxC.js";import"./Users03-rAyzQyh3.js";import"./use-copy-CPgIfOPM.js";import"./AlertCircle-PBJUtpjc.js";import"./select-BM9jpLT2.js";import"./ChevronUp-B5BOcmGB.js";import"./Check-Bme4aNg5.js";import"./org-ai-providers-BHi1kOOt.js";import"./useMutation-d1AXy22c.js";import"./EyeOff-E0TupCAH.js";import"./Eye-DN-kY_sb.js";import"./Key01-CdH7i8vY.js";import"./Trash01-PnuUudMl.js";import"./card-B8QXMrj8.js";import"./toggle-group-B9XVwguR.js";import"./avatar-CXKBBJaI.js";import"./ai-providers-logos-DPOiBl7V.js";import"./formatDistanceToNow-Cb2QZZJn.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./ArrowLeft-BHzi0YLf.js";import"./tabs-BQ5doEBy.js";import"./badge-BfLRgdaW.js";import"./collapsible-MCSgly5t.js";import"./index-Bc75bxbq.js";import"./Code01-DygQPwlG.js";import"./checkbox-C5Om9oxx.js";import"./AlignLeft-CddYwC43.js";import"./Image01-B9BH_f0p.js";import"./RefreshCcw01-B88e0cNw.js";import"./SearchMd-BQseJVRu.js";import"./Settings01-CS4vVmx5.js";import"./Tool01-xNX6v26H.js";import"./select-virtual-mcp-DzKjKtT5.js";import"./integration-icon-Dv0HduyT.js";import"./Container-BeAIfNvy.js";import"./use-virtual-mcp-FAfRsySa.js";import"./use-collections-aokT1D_C.js";import"./use-create-virtual-mcp-Dd303mOp.js";import"./use-mcp-resources-CFkkQw1d.js";import"./ChevronRight-Ct9VK1GH.js";import"./Copy01-ekqsSfJN.js";import"./marked.esm-BaswSlok.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-D7CJTHIn.js";import"./types-BnNswHwQ.js";import"./Globe02-CB2InS06.js";import"./LayersTwo01-8gQGsURS.js";import"./XClose-hdsxwv2G.js";import"./Clock-Bwl2wOhM.js";import"./useSuspenseInfiniteQuery-DsCmMd3U.js";import"./infiniteQueryObserver-DNhlrWmr.js";import"./CheckCircle-BSVa-h_Y.js";import"./collection-search-DDX1Zkg7.js";import"./user-z34A3977.js";import"./format-time-CMKyl-GC.js";import"./Plus-DN4FtVmx.js";import"./dropdown-menu-Cr1iKfFo.js";import"./decopilot-events-Brt4gAR6.js";import"./index-iqPDmcBY.js";function v(){const t=n.c(8),{org:o,project:s}=x(),a=j(),{switchToTask:c}=S();let i;t[0]!==a||t[1]!==o.slug||t[2]!==s.slug||t[3]!==c?(i=async u=>{await c(u),a({to:"/$org/$project",params:{org:o.slug,project:s.slug}})},t[0]=a,t[1]=o.slug,t[2]=s.slug,t[3]=c,t[4]=i):i=t[4];const l=i;let m;t[5]===Symbol.for("react.memo_cache_sentinel")?(m=r.jsx(p.Header,{children:r.jsx(p.Header.Left,{children:r.jsx(g,{children:r.jsx(b,{children:r.jsx(T,{children:r.jsx(k,{children:"Tasks"})})})})})}),t[5]=m):m=t[5];let e;return t[6]!==l?(e=r.jsxs(p,{children:[m,r.jsx(p.Content,{children:r.jsx("div",{className:"h-full flex flex-col overflow-hidden",children:r.jsx(h,{onTaskSelect:l})})})]}),t[6]=l,t[7]=e):e=t[7],e}function rr(){const t=n.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=r.jsx(d,{children:r.jsx(f.Suspense,{fallback:r.jsx("div",{className:"flex h-full items-center justify-center",children:r.jsx(B,{size:32,className:"animate-spin text-muted-foreground"})}),children:r.jsx(v,{})})}),t[0]=o):o=t[0],o}export{rr as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./infiniteQueryObserver-DNhlrWmr.js";import{Y as i}from"./index-B_DxRVw1.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Y as u,ah as s}from"./index-B_DxRVw1.js";function o(e,r){return u(e,s,r)}export{o as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./infiniteQueryObserver-DNhlrWmr.js";import{Y as u,Z as n}from"./index-B_DxRVw1.js";function a(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{a as u};
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
# pg-cloudflare
|
|
2
|
-
|
|
3
|
-
`pg-cloudflare` makes it easier to take an existing package that relies on `tls` and `net`, and make it work in environments where only `connect()` is supported, such as Cloudflare Workers.
|
|
4
|
-
|
|
5
|
-
`pg-cloudflare` wraps `connect()`, the [TCP Socket API](https://github.com/wintercg/proposal-sockets-api) proposed within WinterCG, and implemented in [Cloudflare Workers](https://developers.cloudflare.com/workers/runtime-apis/tcp-sockets/), and exposes an interface with methods similar to what the `net` and `tls` modules in Node.js expose. (ex: `net.connect(path[, options][, callback])`). This minimizes the number of changes needed in order to make an existing package work across JavaScript runtimes.
|
|
6
|
-
|
|
7
|
-
## Installation
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
npm i --save-dev pg-cloudflare
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
The package uses conditional exports to support bundlers that don't know about
|
|
14
|
-
`cloudflare:sockets`, so the consumer code by default imports an empty file. To
|
|
15
|
-
enable the package, resolve to the `cloudflare` condition in your bundler's
|
|
16
|
-
config. For example:
|
|
17
|
-
|
|
18
|
-
- `webpack.config.js`
|
|
19
|
-
```js
|
|
20
|
-
export default {
|
|
21
|
-
...,
|
|
22
|
-
resolve: { conditionNames: [..., "workerd"] },
|
|
23
|
-
plugins: [
|
|
24
|
-
// ignore cloudflare:sockets imports
|
|
25
|
-
new webpack.IgnorePlugin({
|
|
26
|
-
resourceRegExp: /^cloudflare:sockets$/,
|
|
27
|
-
}),
|
|
28
|
-
],
|
|
29
|
-
}
|
|
30
|
-
```
|
|
31
|
-
- `vite.config.js`
|
|
32
|
-
|
|
33
|
-
> [!NOTE]
|
|
34
|
-
> If you are using the [Cloudflare Vite plugin](https://www.npmjs.com/package/@cloudflare/vite-plugin) then the following configuration is not necessary.
|
|
35
|
-
|
|
36
|
-
```js
|
|
37
|
-
export default defineConfig({
|
|
38
|
-
...,
|
|
39
|
-
resolve: {
|
|
40
|
-
conditions: [..., "workerd"],
|
|
41
|
-
},
|
|
42
|
-
build: {
|
|
43
|
-
...,
|
|
44
|
-
// don't try to bundle cloudflare:sockets
|
|
45
|
-
rollupOptions: {
|
|
46
|
-
external: [..., 'cloudflare:sockets'],
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
})
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
- `rollup.config.js`
|
|
53
|
-
```js
|
|
54
|
-
export default defineConfig({
|
|
55
|
-
...,
|
|
56
|
-
plugins: [..., nodeResolve({ exportConditions: [..., 'workerd'] })],
|
|
57
|
-
// don't try to bundle cloudflare:sockets
|
|
58
|
-
external: [..., 'cloudflare:sockets'],
|
|
59
|
-
})
|
|
60
|
-
```
|
|
61
|
-
- `esbuild.config.js`
|
|
62
|
-
```js
|
|
63
|
-
await esbuild.build({
|
|
64
|
-
...,
|
|
65
|
-
conditions: [..., 'workerd'],
|
|
66
|
-
})
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
The concrete examples can be found in `packages/pg-bundler-test`.
|
|
70
|
-
|
|
71
|
-
## How to use conditionally, in non-Node.js environments
|
|
72
|
-
|
|
73
|
-
As implemented in `pg` [here](https://github.com/brianc/node-postgres/commit/07553428e9c0eacf761a5d4541a3300ff7859578#diff-34588ad868ebcb232660aba7ee6a99d1e02f4bc93f73497d2688c3f074e60533R5-R13), a typical use case might look as follows, where in a Node.js environment the `net` module is used, while in a non-Node.js environment, where `net` is unavailable, `pg-cloudflare` is used instead, providing an equivalent interface:
|
|
74
|
-
|
|
75
|
-
```js
|
|
76
|
-
module.exports.getStream = function getStream(ssl = false) {
|
|
77
|
-
const net = require('net')
|
|
78
|
-
if (typeof net.Socket === 'function') {
|
|
79
|
-
return net.Socket()
|
|
80
|
-
}
|
|
81
|
-
const { CloudflareSocket } = require('pg-cloudflare')
|
|
82
|
-
return new CloudflareSocket(ssl)
|
|
83
|
-
}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Node.js implementation of the Socket API proposal
|
|
87
|
-
|
|
88
|
-
If you're looking for a way to rely on `connect()` as the interface you use to interact with raw sockets, but need this interface to be available in a Node.js environment, [`@arrowood.dev/socket`](https://github.com/Ethan-Arrowood/socket) provides a Node.js implementation of the Socket API.
|
|
89
|
-
|
|
90
|
-
### license
|
|
91
|
-
|
|
92
|
-
The MIT License (MIT)
|
|
93
|
-
|
|
94
|
-
Copyright (c) 2023 Brian M. Carlson
|
|
95
|
-
|
|
96
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
97
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
98
|
-
in the Software without restriction, including without limitation the rights
|
|
99
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
100
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
101
|
-
furnished to do so, subject to the following conditions:
|
|
102
|
-
|
|
103
|
-
The above copyright notice and this permission notice shall be included in
|
|
104
|
-
all copies or substantial portions of the Software.
|
|
105
|
-
|
|
106
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
107
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
108
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
109
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
110
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
111
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
112
|
-
THE SOFTWARE.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"empty.js","sourceRoot":"","sources":["../src/empty.ts"],"names":[],"mappings":";;AAAA,kFAAkF;AAClF,0CAA0C;AAC1C,kBAAe,EAAE,CAAA"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
/// <reference types="node" />
|
|
4
|
-
import { TlsOptions } from 'cloudflare:sockets';
|
|
5
|
-
import { EventEmitter } from 'events';
|
|
6
|
-
/**
|
|
7
|
-
* Wrapper around the Cloudflare built-in socket that can be used by the `Connection`.
|
|
8
|
-
*/
|
|
9
|
-
export declare class CloudflareSocket extends EventEmitter {
|
|
10
|
-
readonly ssl: boolean;
|
|
11
|
-
writable: boolean;
|
|
12
|
-
destroyed: boolean;
|
|
13
|
-
private _upgrading;
|
|
14
|
-
private _upgraded;
|
|
15
|
-
private _cfSocket;
|
|
16
|
-
private _cfWriter;
|
|
17
|
-
private _cfReader;
|
|
18
|
-
constructor(ssl: boolean);
|
|
19
|
-
setNoDelay(): this;
|
|
20
|
-
setKeepAlive(): this;
|
|
21
|
-
ref(): this;
|
|
22
|
-
unref(): this;
|
|
23
|
-
connect(port: number, host: string, connectListener?: (...args: unknown[]) => void): Promise<this | undefined>;
|
|
24
|
-
_listen(): Promise<void>;
|
|
25
|
-
_listenOnce(): Promise<void>;
|
|
26
|
-
write(data: Uint8Array | string, encoding?: BufferEncoding, callback?: (...args: unknown[]) => void): true | void;
|
|
27
|
-
end(data?: Buffer, encoding?: BufferEncoding, callback?: (...args: unknown[]) => void): this;
|
|
28
|
-
destroy(reason: string): this;
|
|
29
|
-
startTls(options: TlsOptions): void;
|
|
30
|
-
_addClosedHandler(): void;
|
|
31
|
-
}
|