decocms 4.82.11 → 4.82.13
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-B5S0Howv.js → AlertCircle-B6AELEdc.js} +1 -1
- package/dist/client/assets/{AreaChart-BqhmXRim.js → AreaChart-fCNs67j_.js} +1 -1
- package/dist/client/assets/{ArrowUp-C2Uom_QG.js → ArrowUp-YK2fJPgi.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-CWABXTLe.js → ArrowUpRight-BKVLcZTe.js} +1 -1
- package/dist/client/assets/{Check-2hvdb-vm.js → Check-BF3t7WWi.js} +1 -1
- package/dist/client/assets/{CheckCircle-Dtlxzayc.js → CheckCircle-BfxYbuVE.js} +1 -1
- package/dist/client/assets/{ChevronDown-BOF5C-lc.js → ChevronDown-CQLSXgt3.js} +1 -1
- package/dist/client/assets/{ChevronRight-Gt0dyTZv.js → ChevronRight-Fgy0rUS_.js} +1 -1
- package/dist/client/assets/{ChevronUp-BgF4lo04.js → ChevronUp-Y-IpPAUR.js} +1 -1
- package/dist/client/assets/{Circle-WCex1xh9.js → Circle-0HId1SV6.js} +1 -1
- package/dist/client/assets/{Copy01-JoQTJv1g.js → Copy01-B0CQRE_5.js} +1 -1
- package/dist/client/assets/{DotsVertical-D5iMp6bE.js → DotsVertical-CYU3Mae1.js} +1 -1
- package/dist/client/assets/{Eye-u_eyLJkM.js → Eye-CLtdCpUf.js} +1 -1
- package/dist/client/assets/{FilterLines-9uIhD3OH.js → FilterLines-DeiGsRZY.js} +1 -1
- package/dist/client/assets/{Flag01-B66NcKmx.js → Flag01-B_AKNFoc.js} +1 -1
- package/dist/client/assets/{Globe01-BLXYE4Cy.js → Globe01-B52VKYy7.js} +1 -1
- package/dist/client/assets/{Globe04-f79X3HKE.js → Globe04-B0las6Jv.js} +1 -1
- package/dist/client/assets/{HardDrive-al9D_s63.js → HardDrive-CU-vvmKE.js} +1 -1
- package/dist/client/assets/{Image01-DVYnawJP.js → Image01-B-FQwXx8.js} +1 -1
- package/dist/client/assets/{Key01-TX-oFrbw.js → Key01-myvTSA8u.js} +1 -1
- package/dist/client/assets/{LayoutLeft-C1tijNFg.js → LayoutLeft-C0g0LezP.js} +1 -1
- package/dist/client/assets/{LinkExternal01-B0gcEmkE.js → LinkExternal01-d9EixhiS.js} +1 -1
- package/dist/client/assets/{List-LBmnlI0P.js → List-DZAsltZv.js} +1 -1
- package/dist/client/assets/{Monitor01-CdKZX-bL.js → Monitor01-BkDBzdlH.js} +1 -1
- package/dist/client/assets/{Package-CMkd2sHI.js → Package-eNacrLmv.js} +1 -1
- package/dist/client/assets/{Palette-Q_tRuOMf.js → Palette-BiKqXWvc.js} +1 -1
- package/dist/client/assets/{Play-Bm9V641L.js → Play-CdkPhmTs.js} +1 -1
- package/dist/client/assets/{Plus-Bt0qDPEV.js → Plus-DWjKZ2wj.js} +1 -1
- package/dist/client/assets/{SearchLg-DSuw112A.js → SearchLg-DBOWvxyl.js} +1 -1
- package/dist/client/assets/{SearchMd-CVmGoUfY.js → SearchMd-CKteZWzZ.js} +1 -1
- package/dist/client/assets/{Settings02-C28ltUF9.js → Settings02-CM0Uzs0U.js} +1 -1
- package/dist/client/assets/{Shield01-Bxz1cNPl.js → Shield01-aDvWVv5Z.js} +1 -1
- package/dist/client/assets/{Star01-ijVxXmb8.js → Star01-B-8espqJ.js} +1 -1
- package/dist/client/assets/{Stars01-yVlwMkQy.js → Stars01-DsfblQf3.js} +1 -1
- package/dist/client/assets/{Stars02-ClLIxwPM.js → Stars02-DBH33Ez2.js} +1 -1
- package/dist/client/assets/{Sun-BHNbv08f.js → Sun-MvOAGgKN.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-DEvDgDFu.js → SwitchHorizontal01-DUrn8gXV.js} +1 -1
- package/dist/client/assets/{Tool01-MVmzVfJA.js → Tool01-4pit7qOS.js} +1 -1
- package/dist/client/assets/{Tool02-B4J4k_Jq.js → Tool02-tJKj7JcW.js} +1 -1
- package/dist/client/assets/{Trash01-D3uneq9V.js → Trash01-DEWgFvvg.js} +1 -1
- package/dist/client/assets/{TrendUp01-BnB7HNcK.js → TrendUp01-7N_6K3-X.js} +1 -1
- package/dist/client/assets/{Upload01-Dz_C9C_o.js → Upload01-C8RP0Fvq.js} +1 -1
- package/dist/client/assets/{User01-B21uLVgH.js → User01-v0Bqr3nA.js} +1 -1
- package/dist/client/assets/{UserPlus01-B1r5BrnS.js → UserPlus01-D2pAl0t2.js} +1 -1
- package/dist/client/assets/{Users01-DS-6elOB.js → Users01-CPNZ7uMu.js} +1 -1
- package/dist/client/assets/{Users03-5UfvMRx2.js → Users03-WVYBBENu.js} +1 -1
- package/dist/client/assets/{X-CuXL2cLN.js → X-Dm6kY_ek.js} +1 -1
- package/dist/client/assets/{XCircle-Bqih3VAo.js → XCircle-cwYbcP7y.js} +1 -1
- package/dist/client/assets/{XClose-DEI4maVJ.js → XClose-DnNyN9T-.js} +1 -1
- package/dist/client/assets/{Zap-CbZARwtr.js → Zap-CNRURtEh.js} +1 -1
- package/dist/client/assets/{ZapSquare-DntY_gJw.js → ZapSquare-Dj8pa8Fg.js} +1 -1
- package/dist/client/assets/{ZoomOut-CUl1mvu1.js → ZoomOut-_psBJlXD.js} +1 -1
- package/dist/client/assets/{access-gate-DDYRYhpb.js → access-gate-CPecvlS5.js} +1 -1
- package/dist/client/assets/{add-section-modal-D3akZWgZ.js → add-section-modal-CcLBxmBX.js} +1 -1
- package/dist/client/assets/{agent-icon-BD0Dhqds.js → agent-icon-DmIJ53uv.js} +1 -1
- package/dist/client/assets/{agents-list-BYgzGNrl.js → agents-list-GFWV8fSw.js} +1 -1
- package/dist/client/assets/{ai-providers-CC2a0KaA.js → ai-providers-C93Uux8H.js} +1 -1
- package/dist/client/assets/{alert-r0EE7buF.js → alert-XkDwazoe.js} +1 -1
- package/dist/client/assets/{alert-dialog-YVSboGyg.js → alert-dialog-3VMQ65hF.js} +1 -1
- package/dist/client/assets/{app-editor-D3NrrquY.js → app-editor-GnwEYs2F.js} +1 -1
- package/dist/client/assets/{auth-catchall-DjuiYYzw.js → auth-catchall-BVp4zpOf.js} +1 -1
- package/dist/client/assets/{auth-CQTZH4-O.js → auth-dSVlMQ86.js} +1 -1
- package/dist/client/assets/{auth-entry-CsE0cCZS.js → auth-entry-C48ylSC_.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BXWnGvvD.js → auth-split-layout-dbrXw6Uq.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BWBUH6FO.js → authenticate-and-persist-oauth-BHT9Kp62.js} +1 -1
- package/dist/client/assets/{automation-list-row-mah_f33i.js → automation-list-row-PkSpkeID.js} +1 -1
- package/dist/client/assets/{automation-runs-CI_DXiSg.js → automation-runs-yMzfgCqo.js} +2 -2
- package/dist/client/assets/automations-Db9v_2wu.js +1 -0
- package/dist/client/assets/{autosend-Cy6yTFx0.js → autosend-D_-616qs.js} +1 -1
- package/dist/client/assets/{avatar-B26L6f3M.js → avatar-UXZ4R5Yb.js} +1 -1
- package/dist/client/assets/{badge-Cagw1NWA.js → badge-CfAmvo-h.js} +1 -1
- package/dist/client/assets/{block-document-4o_mZ5Wu.js → block-document-DbCz5f9N.js} +1 -1
- package/dist/client/assets/{brand-context-BIWhPFQh.js → brand-context-G_6bLd5F.js} +1 -1
- package/dist/client/assets/{buckets-CYkE09pb.js → buckets-Bkz3itxJ.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-D6Gvn6u4.js → bulk-category-panel-EjjgUKdU.js} +1 -1
- package/dist/client/assets/{calendar-C3xMag-0.js → calendar-BdMqQsTv.js} +1 -1
- package/dist/client/assets/{capability-load-error-zjT6zavB.js → capability-load-error-B9xkkNBq.js} +1 -1
- package/dist/client/assets/{card-DaWNzsoz.js → card-dLLzWD0r.js} +1 -1
- package/dist/client/assets/{category-editor-BdTKt4Wb.js → category-editor-l1ImzDA-.js} +1 -1
- package/dist/client/assets/{chat-context-DsgMhUkR.js → chat-context-CyCuyn4t.js} +1 -1
- package/dist/client/assets/{checkbox-Bfo0_7OX.js → checkbox-CxV2vfbv.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CXRXasyO.js → cli-auth-success-zoB4TWhQ.js} +1 -1
- package/dist/client/assets/{collection-detail-DN9ZxScE.js → collection-detail-ByPPxvaR.js} +1 -1
- package/dist/client/assets/{collection-display-button-BKjWwtNp.js → collection-display-button-BBHublq2.js} +1 -1
- package/dist/client/assets/{collection-search-B1Ombzts.js → collection-search-C4jDpdZf.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-X2s9eJ1l.js → collection-table-wrapper-DIkftYUF.js} +1 -1
- package/dist/client/assets/{collection-tabs-WaSVL-dS.js → collection-tabs-DvvibY6H.js} +1 -1
- package/dist/client/assets/{command-Cn83qANG.js → command-EQNrbniG.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-BuAsGrLS.js → commerce-onboarding-Dgs4FWfH.js} +1 -1
- package/dist/client/assets/{companions-core-DekO4Tau.js → companions-core-fc2Z_sCB.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-IeFRacue.js → connect-desktop-dialog-CPSwwSyz.js} +1 -1
- package/dist/client/assets/{connection-card-CGYwJ0pB.js → connection-card-CtY9PRIw.js} +1 -1
- package/dist/client/assets/{connection-detail-CeB50ytn.js → connection-detail-DuvF3pbE.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CmcaSfzc.js → connection-form-helpers-TGmycj7X.js} +1 -1
- package/dist/client/assets/{connections-CfHN_-P2.js → connections-CE66Octw.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-DZSk4S2t.js → decopilot-sse-pool-DHojW3EC.js} +1 -1
- package/dist/client/assets/{dialog-B71p2x2p.js → dialog-CmXDzme5.js} +1 -1
- package/dist/client/assets/{domain-settings-B8r_-ck2.js → domain-settings-GxKzcerZ.js} +1 -1
- package/dist/client/assets/{drawer-Do-PSohO.js → drawer-Ds-r7525.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CCDOmXjQ.js → dropdown-menu-BgNr7tM1.js} +1 -1
- package/dist/client/assets/{empty-state-pDQBZsd9.js → empty-state-CdKwtMyP.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DZ42iEpK.js → extract-connection-data-CK9iLAoG.js} +1 -1
- package/dist/client/assets/{file-explorer-BDF4Y5o5.js → file-explorer-nG37TAVQ.js} +1 -1
- package/dist/client/assets/{file-type-icon-CrVWqTLg.js → file-type-icon-DjNFZnTs.js} +1 -1
- package/dist/client/assets/{files-B3NTZjcB.js → files-CQYyuV1E.js} +1 -1
- package/dist/client/assets/{form-IQF2IyvU.js → form-x0k-kdB2.js} +1 -1
- package/dist/client/assets/{general-CxQInQw2.js → general-c3hgsq_x.js} +1 -1
- package/dist/client/assets/{github-repo-picker-DS0e520o.js → github-repo-picker-C-tZ-Bba.js} +1 -1
- package/dist/client/assets/{hooks-Ce88nl_8.js → hooks-QHrmNjJQ.js} +1 -1
- package/dist/client/assets/{index-CdSATOtN.js → index-BCiDnhhX.js} +1 -1
- package/dist/client/assets/{index-BB6iYbEk.js → index-BcWQMJI4.js} +1 -1
- package/dist/client/assets/{index-D5mw-efR.js → index-BjO8A-VO.js} +1 -1
- package/dist/client/assets/{index-DpU56SgE.js → index-C-B6S6Q9.js} +1 -1
- package/dist/client/assets/{index-DKGDY3AR.js → index-CUVgjm02.js} +1 -1
- package/dist/client/assets/{index-BQmin4cH.js → index-CeqD0RVV.js} +1 -1
- package/dist/client/assets/{index-DdQdmhmf.js → index-CzMEWsZX.js} +1 -1
- package/dist/client/assets/{index-CP-UVMqF.js → index-Czi2ZhJ5.js} +1 -1
- package/dist/client/assets/{index-JkzY1USm.js → index-DF3zg-P1.js} +3 -3
- package/dist/client/assets/{index-BZJ9XJhj.js → index-DKadkG06.js} +2 -2
- package/dist/client/assets/{index-B3Lao2pE.js → index-DonY639O.js} +27 -27
- package/dist/client/assets/index-DpLPq5a_.css +1 -0
- package/dist/client/assets/{index-tJkQ3pGR.js → index-T-oY3h3t.js} +1 -1
- package/dist/client/assets/{index-B1f7loQR.js → index-bj26_8KX.js} +1 -1
- package/dist/client/assets/{index-CoSY6fwz.js → index-cG8paP3z.js} +1 -1
- package/dist/client/assets/{index-redirect-De-_NmXc.js → index-redirect-_hpy7g8S.js} +1 -1
- package/dist/client/assets/{input-typWdmM2.js → input-BZTiU0ds.js} +1 -1
- package/dist/client/assets/{integration-icon-CTpNPfCm.js → integration-icon-BfKWLZT4.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-D3bZ7PY8.js → invite-member-dialog-fPpySKy7.js} +1 -1
- package/dist/client/assets/{label-6eYPMIMn.js → label-B1OfKy2N.js} +1 -1
- package/dist/client/assets/{layout-CTMgqxil.js → layout-BzlkAZij.js} +1 -1
- package/dist/client/assets/{login-s_mFeh5v.js → login-CfYNPvDo.js} +1 -1
- package/dist/client/assets/{mcp-oauth-HL_Y9nO8.js → mcp-oauth-CoKzxQiz.js} +1 -1
- package/dist/client/assets/{members-BL33Np9a.js → members-CrKGCoFu.js} +1 -1
- package/dist/client/assets/{monaco-editor-B1MWJFdI.js → monaco-editor-BzdwB2U8.js} +2 -2
- package/dist/client/assets/{monitoring-stats-row-CAKSC2D3.js → monitoring-stats-row-C0-lT8X-.js} +1 -1
- package/dist/client/assets/{multi-select--lKhvO-B.js → multi-select-BYFsBcLx.js} +1 -1
- package/dist/client/assets/{oauth-callback-DCPcIBMz.js → oauth-callback-D6L6RroV.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-5L_Z_1xs.js → oauth-callback-ai-provider-NS24Yhk_.js} +1 -1
- package/dist/client/assets/{onboarding-lSuasVhF.js → onboarding-CXfWXP3L.js} +1 -1
- package/dist/client/assets/{org-install-BiDNis-e.js → org-install-CFASOU4_.js} +1 -1
- package/dist/client/assets/{org-layout-BxReJo9f.js → org-layout-gngtZKVa.js} +1 -1
- package/dist/client/assets/{organization-choice-CJNcxP4s.js → organization-choice-DB-AR__E.js} +1 -1
- package/dist/client/assets/{orgs-Dcte6nVl.js → orgs-jcqywdGM.js} +1 -1
- package/dist/client/assets/{page-seo-form-Q5I4DhzQ.js → page-seo-form-DsaBxdUW.js} +1 -1
- package/dist/client/assets/page-seo-sheet-BF2mpJ0B.js +1 -0
- package/dist/client/assets/{popover--4QSfinM.js → popover-BzHpXFL_.js} +1 -1
- package/dist/client/assets/{post-editor-Y4xJXCQh.js → post-editor-JD3fSSO7.js} +1 -1
- package/dist/client/assets/{primitives-BZ0jR3FH.js → primitives-BxBoeZTE.js} +1 -1
- package/dist/client/assets/{profile-BsKSKdiq.js → profile-CZ9vM3_S.js} +1 -1
- package/dist/client/assets/project-app-view-40EQ9ogm.js +1 -0
- package/dist/client/assets/record-editor-BmGDR-eB.js +1 -0
- package/dist/client/assets/redirect-editor-0M8-Neu7.js +1 -0
- package/dist/client/assets/registry-CwTOcwuV.js +2 -0
- package/dist/client/assets/{registry-layout-BJ3nc_ht.js → registry-layout-B8iHO94t.js} +1 -1
- package/dist/client/assets/{reports-BNm1jTDx.js → reports-DFt5o5JU.js} +1 -1
- package/dist/client/assets/{require-capability-Bd1LXPXR.js → require-capability-CEBGt_Ot.js} +1 -1
- package/dist/client/assets/{required-auth-layout-CLFVeE7_.js → required-auth-layout-vPZ2d-Yx.js} +1 -1
- package/dist/client/assets/{reset-password-BtRqnFx3.js → reset-password-l6ffdCqx.js} +1 -1
- package/dist/client/assets/{role-color-H2mpSAHk.js → role-color-Dn2tXDDF.js} +1 -1
- package/dist/client/assets/{roles-BFfEI8kY.js → roles-Bo-eSbrf.js} +1 -1
- package/dist/client/assets/{search-input-D9-x3yYV.js → search-input-ByuB0YyC.js} +1 -1
- package/dist/client/assets/{secrets-Yg2E60R5.js → secrets-C_1Jcs02.js} +1 -1
- package/dist/client/assets/{sections-editor-b1Ixv47y.js → sections-editor-gaZ0BvyI.js} +1 -1
- package/dist/client/assets/{select-Bd-q1yCw.js → select-B6GE4jHJ.js} +1 -1
- package/dist/client/assets/{select-model-K2oi5fLk.js → select-model-CebmAt-C.js} +1 -1
- package/dist/client/assets/{self-tool-result-BiEjz1Ry.js → self-tool-result-DJIiUu6Z.js} +1 -1
- package/dist/client/assets/{seo-editor-CdjtqxtA.js → seo-editor-DNUmLmzw.js} +1 -1
- package/dist/client/assets/{settings-layout-5c1plOIU.js → settings-layout-DUpflFya.js} +1 -1
- package/dist/client/assets/{settings-section-shb-u7Ue.js → settings-section-DS6otYn7.js} +1 -1
- package/dist/client/assets/{shell-controls-BpqLtOsH.js → shell-controls-B9xMPAfw.js} +1 -1
- package/dist/client/assets/{shell-layout-BIqZZ6_U.js → shell-layout-Bo6QxW8m.js} +1 -1
- package/dist/client/assets/{sidebar-CfdFP1cX.js → sidebar-BFdShy9x.js} +1 -1
- package/dist/client/assets/{skeleton-BN44BcrT.js → skeleton-BGZh750P.js} +1 -1
- package/dist/client/assets/{sso-BXhJwgt8.js → sso-D7EYt-G3.js} +1 -1
- package/dist/client/assets/{store-BKjhBvgx.js → store-ioH_J-rE.js} +1 -1
- package/dist/client/assets/store-registry-s8bkhEBH.js +2 -0
- package/dist/client/assets/{studio-tools-BbXlY124.js → studio-tools-bThaob6p.js} +1 -1
- package/dist/client/assets/{switch-CuIkQ0ts.js → switch-C2KH_TaK.js} +1 -1
- package/dist/client/assets/{table-BXIfO88i.js → table-XKbQ5Wjx.js} +1 -1
- package/dist/client/assets/{tabs-7EuH5ewS.js → tabs-D-6eQ0wE.js} +1 -1
- package/dist/client/assets/{textarea-COeZkp4P.js → textarea-PYu4eHQV.js} +1 -1
- package/dist/client/assets/{toggle-group-DuFTDXUv.js → toggle-group-BcxqPGrf.js} +1 -1
- package/dist/client/assets/{toolbar-B6T3nvfB.js → toolbar-D90MFc80.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-DzWXQwu7.js → toolbar-icon-button-D3m9VnTI.js} +1 -1
- package/dist/client/assets/{tooltip-8XxDCvjI.js → tooltip-O3iHy7-o.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CJ46O17u.js → use-ai-providers-B4nhSJlr.js} +1 -1
- package/dist/client/assets/{use-automations-CX5x-Uqw.js → use-automations-C01orYPa.js} +1 -1
- package/dist/client/assets/{use-autosave-V0-E8XGy.js → use-autosave-BhfvFfoI.js} +1 -1
- package/dist/client/assets/{use-capability-FmP_AGyE.js → use-capability--WeMT0KP.js} +1 -1
- package/dist/client/assets/{use-clock-tick-DNb1k8Bx.js → use-clock-tick-DboEo7Cc.js} +1 -1
- package/dist/client/assets/{use-collections-BUbpxhiU.js → use-collections-K1HyCAfG.js} +1 -1
- package/dist/client/assets/{use-connection-Bk3dYNpt.js → use-connection-twfWXxwG.js} +1 -1
- package/dist/client/assets/{use-copy-Cw847YgD.js → use-copy-DQ4y4418.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BRbI72EV.js → use-create-virtual-mcp-NwJ9x5Kd.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-JeuWph6h.js → use-debounced-autosave-BdWGMbok.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CNzGGbsu.js → use-debounced-value-xN0eyoO9.js} +1 -1
- package/dist/client/assets/{use-deco-credits-B4BR0gFr.js → use-deco-credits-Bm-VH5Hm.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-D28_JGgq.js → use-decopilot-events-BEOY-_n2.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CjmQkOW1.js → use-delete-connection-BlzYSB_f.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-Dyk7hBaE.js → use-deployment-admin-DYO-CLsy.js} +1 -1
- package/dist/client/assets/{use-file-configs-DL_xMbOi.js → use-file-configs-Bs9N4w-Z.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-OAX5SxNS.js → use-infinite-scroll-Dt7gLdpr.js} +1 -1
- package/dist/client/assets/{use-join-requests-B3tUIQS3.js → use-join-requests-D0z99IAk.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-CPftzmcf.js → use-mcp-auth-status-C7G9bAkb.js} +1 -1
- package/dist/client/assets/{use-mcp-client-FLTjUCG7.js → use-mcp-client-DrROXOcH.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-D2FBN-6Y.js → use-mcp-tools-D28ox9dJ.js} +1 -1
- package/dist/client/assets/{use-members-Dq8ZMPmz.js → use-members-mvfsRjey.js} +1 -1
- package/dist/client/assets/{use-mobile-DCYqAZ4D.js → use-mobile-nauPjzo2.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-zGXO_gBb.js → use-navigate-to-agent-BJC_x779.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-asYkCBii.js → use-org-auth-client-jU0nDPT-.js} +1 -1
- package/dist/client/assets/{use-org-sso-DGvCB7c3.js → use-org-sso-j8hZyqdO.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DNoMRyWZ.js → use-organization-roles-thqey2Pm.js} +1 -1
- package/dist/client/assets/{use-organization-settings-vZiR9w_k.js → use-organization-settings-BJ1bjHsL.js} +1 -1
- package/dist/client/assets/{use-registry-app-DEcBrUWC.js → use-registry-app-CeyrXTI4.js} +1 -1
- package/dist/client/assets/{use-registry-connections-ZIIAN618.js → use-registry-connections-D94L7VqK.js} +1 -1
- package/dist/client/assets/{use-secrets-BPGFw9d3.js → use-secrets-C1Fme0Ya.js} +1 -1
- package/dist/client/assets/{use-status-sounds-lae0TShH.js → use-status-sounds-B1YKt2sD.js} +1 -1
- package/dist/client/assets/{use-view-mode-CPvsHu0J.js → use-view-mode-gP4n4GFH.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-qUMQTRyD.js → use-virtual-mcp-C964oRwj.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DKhJHTs2.js +1 -0
- package/dist/client/assets/{useRouterState-B99a8RMJ.js → useRouterState-Bi7YKwTw.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DAAXTkZt.js +1 -0
- package/dist/client/assets/{users-_WAywRSq.js → users-BiDYlXA2.js} +1 -1
- package/dist/client/assets/{variant-calendar-DV02T715.js → variant-calendar-m6XjJ2dx.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-vOT0KHyw.js → view-mode-toggle-kFlOpvCC.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +9 -9
- package/dist/server/server.js +9 -9
- package/package.json +1 -1
- package/dist/client/assets/automations-Bo6bbj7e.js +0 -1
- package/dist/client/assets/index-BGqqvTWB.css +0 -1
- package/dist/client/assets/page-seo-sheet-DJO-4Ve3.js +0 -1
- package/dist/client/assets/project-app-view-BndTM51x.js +0 -1
- package/dist/client/assets/record-editor-BvebEElK.js +0 -1
- package/dist/client/assets/redirect-editor-DnWBgwhK.js +0 -1
- package/dist/client/assets/registry-Ci2-56YH.js +0 -2
- package/dist/client/assets/store-registry-g5R_VlWb.js +0 -2
- package/dist/client/assets/useInfiniteQuery-sJT3Rp66.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-QwMQXCnx.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -84519,7 +84519,7 @@ ${$}`;h(N);return}if(E(null,y),t.strategy==="count"){if(w--,w===0)h()}if(t.strat
|
|
|
84519
84519
|
`);function h(_){if(t===void 0)return!0;let v=iq(_),D=v&&iq(t)?Vmu(t):t,n=v?Vmu(_):rmu(_),O=xCt(D,n);return O===""||!O.startsWith("..")&&!ACt(O)}return{upsert(_){f.run({$handle:_.handle,$status:_.status,$sandboxPath:_.sandboxPath,$port:_.port??null,$previewUrl:_.previewUrl??null,$repoCloneUrl:_.repoCloneUrl??null,$branch:_.branch??null,$projectName:_.projectName??null,$error:_.error??null,$now:Date.now()})},list(){return l.all().map(J1i)},reconcile(){let _=Date.now();for(let v of l.all().map(J1i)){if(!h(v.sandboxPath)){c.run({$handle:v.handle,$now:_});continue}if(!iq(v.sandboxPath)){E.run({$handle:v.handle,$now:_});continue}if(v.status==="spawning"||v.status==="ready"||v.status==="failed"||v.status==="missing")$.run({$handle:v.handle,$now:_})}return l.all().map(J1i)},prune(_){let v=[],D=[],n=this.reconcile();for(let O of n){if(!h(O.sandboxPath)){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(_.missing&&O.status==="missing"){w.run({$handle:O.handle}),v.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!_.merged||!iq(O.sandboxPath))continue;if(O.branch===null||O.branch.trim()===""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!Z2(O.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let N=Z2(O.sandboxPath,["status","--porcelain"]);if(!N.ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(N.stdout.trim()!==""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let y=emu(O.sandboxPath,O.branch);if(y===null){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!y){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}UCt(O.sandboxPath,{recursive:!0,force:!0}),w.run({$handle:O.handle}),v.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:v,skipped:D}},delete(_){w.run({$handle:_})},inspect(_){let v=d.get({$handle:_});if(v===null)return null;let D=J1i(v),n=0,O=null;if(iq(D.sandboxPath)&&Z2(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let N=Z2(D.sandboxPath,["status","--porcelain"]);if(N.ok){let y=N.stdout.trim();n=y===""?0:y.split(`
|
|
84520
84520
|
`).length}if(D.branch!==null&&D.branch.trim()!=="")O=emu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:n,merged:O}},close(){u.close()}}}var LRi=()=>{};function jCt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function omu(i,u){if(process.platform==="win32")return;for(let t of jCt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var smu=()=>{};import{existsSync as KCt,readdirSync as JCt}from"fs";import{rm as XCt}from"fs/promises";import{join as pmu}from"path";async function ieu(i,u={}){let t=u.detach??LCt,f=u.exists??KCt,l=u.readdir??(($)=>JCt($)),c=u.rm??(($)=>XCt($,{recursive:!0,force:!0})),E=pmu(i,"org");if(f(E))for(let $ of l(E))t(pmu(E,$));await c(i)}var LCt=(i)=>omu(i,process.platform==="darwin");var ueu=g(()=>{smu()});import{join as WCt}from"path";function teu(i){let u=i.purge??ieu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await Cl(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??WCt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof Wc?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var feu=g(()=>{y4();ueu()});import{randomBytes as YCt}from"crypto";import{mkdir as QCt}from"fs/promises";import{createServer as zCt}from"net";import{join as HCt}from"path";function leu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function ceu(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function Eeu(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function RCt(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function bCt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:RCt(i.repo?.cloneUrl)}}function $eu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??CCt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((n,O)=>`http://127.0.0.1:${O}`),E=(n)=>HCt(i.dataDir,"sandboxes",n),$=(n)=>{try{i.registry?.upsert(n)}catch(O){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${n.handle} status=${n.status}:`,O)}},w=(n)=>{try{i.onEvent?.(n)}catch{}},d=async(n)=>{let O=new AbortController,N=setTimeout(()=>O.abort(),1500);try{let y=await l(`${n}/health`,{signal:O.signal});if(!y.ok)console.warn(`[user-desktop] probe ${n}/health \u2192 ${y.status} (treating as dead)`);return y.ok}catch(y){return console.warn(`[user-desktop] probe ${n}/health failed: ${y instanceof Error?y.message:String(y)} (treating as dead)`),!1}finally{clearTimeout(N)}},h=(n)=>{console.warn(`[user-desktop] evicting dead daemon handle=${n.handle} port=${n.port}`);try{n.process.kill("SIGTERM")}catch{}if(t.get(n.handle)===n)t.delete(n.handle),$({handle:n.handle,status:"stopped",sandboxPath:E(n.handle),port:null,previewUrl:null,...n.registryMetadata,error:null}),w({handle:n.handle,phase:"evicted"})},_=new Map;function v(){if(t.size<u)return;let n=[...t.values()].filter((N)=>N.activeDispatchCount===0).sort((N,y)=>N.lastUsedAt-y.lastUsedAt);if(n.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let O=n[0];console.log(`[user-desktop] evicting LRU victim handle=${O.handle} port=${O.port} (cap ${u} reached, size=${t.size})`);try{O.process.kill("SIGTERM")}catch{}t.delete(O.handle),$({handle:O.handle,status:"stopped",sandboxPath:E(O.handle),port:null,previewUrl:null,...O.registryMetadata,error:null}),w({handle:O.handle,phase:"evicted"})}let D=async(n)=>{let O=bCt(n),N=E(n.handle);$({handle:n.handle,status:"spawning",sandboxPath:N,port:null,previewUrl:null,...O,error:null}),w({handle:n.handle,phase:"spawning",sandboxPath:N,projectName:O.projectName,branch:O.branch}),v();let y,Z=null,T;try{await QCt(N,{recursive:!0}),console.log(`[user-desktop] ensure handle=${n.handle} repo=${n.repo?.cloneUrl??"(none)"} branch=${n.repo?.branch??"(none)"} runtime=${n.workload?.runtime??"(autodetect)"} pm=${n.workload?.packageManager??"(autodetect)"}`),T=YCt(24).toString("hex");let[G,I]=await Promise.all([f(),f()]);y=G,console.log(`[user-desktop] spawn handle=${n.handle} port=${y} devPort=${I} workdir=${N}`),Z=await Promise.resolve(i.spawnDaemon({workdir:N,handle:n.handle,port:y,daemonToken:T,offloadAllowedHosts:n.offloadAllowedHosts??[],offloadAllowSameHostDev:n.offloadAllowSameHostDev??!1,orgFsConfigJson:n.orgFsConfigJson}));try{await i.waitForHealth(y)}catch(k){throw leu("the sandbox didn't come online in time",k)}console.log(`[user-desktop] healthy handle=${n.handle} port=${y} \u2014 posting config`);try{await i.postConfig(y,I,{repo:n.repo,workload:n.workload,operator:n.operator},T)}catch(k){throw leu(ceu(k)?"configuration timed out":"the sandbox rejected its configuration",k)}}catch(G){if((ceu(G)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${n.handle} port=${y??"(none)"}${Z?" (killing daemon)":""}:`,G),Z)try{Z.kill("SIGKILL")}catch{}throw w({handle:n.handle,phase:"failed",error:Eeu(G),sandboxPath:N,projectName:O.projectName,branch:O.branch}),$({handle:n.handle,status:"failed",sandboxPath:N,port:null,previewUrl:null,...O,error:Eeu(G)}),G}if(!Z||y===void 0)throw Error("sandbox bring-up invariant violated");let B=`http://127.0.0.1:${y}`,F=c(n.handle,y);console.log(`[user-desktop] ready handle=${n.handle} port=${y} sandboxApiUrl=${B} previewUrl=${F}`);let A={handle:n.handle,port:y,process:Z,sandboxApiUrl:B,previewUrl:F,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:O};if(t.set(n.handle,A),$({handle:n.handle,status:"ready",sandboxPath:N,port:y,previewUrl:F,...O,error:null}),w({handle:n.handle,phase:"ready",port:y,previewUrl:F,sandboxPath:N,projectName:O.projectName,branch:O.branch}),Z.exited)Z.exited.then(()=>{if(t.get(n.handle)===A)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${n.handle} port=${y} \u2014 removing from cache`),t.delete(n.handle),$({handle:n.handle,status:"stopped",sandboxPath:N,port:null,previewUrl:null,...O,error:null}),w({handle:n.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${n.handle} port=${y} (already replaced/removed)`)});return{sandboxApiUrl:B,previewUrl:F,port:y}};return{async ensureSandbox(n){let O=t.get(n.handle);if(O){if(await d(O.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${n.handle} port=${O.port} (alive)`),O.lastUsedAt=Date.now(),{sandboxApiUrl:O.sandboxApiUrl,previewUrl:O.previewUrl,port:O.port};console.warn(`[user-desktop] cache stale handle=${n.handle} port=${O.port} \u2014 respawning`),h(O)}let N=_.get(n.handle);if(N)return console.log(`[user-desktop] joining in-flight ensure handle=${n.handle}`),N;let y=D(n).finally(()=>{_.delete(n.handle)});return _.set(n.handle,y),y},proxyPort(n){let O=t.get(n);if(O)O.lastUsedAt=Date.now();return O?.port??null},getDaemonToken(n){return t.get(n)?.daemonToken??null},hasHandle(n){return t.has(n)||_.has(n)},recordHit(n){let O=t.get(n);if(O)O.lastUsedAt=Date.now()},acquireDispatch(n){let O=t.get(n);if(!O)return()=>{};O.activeDispatchCount+=1;let N=!1;return()=>{if(N)return;N=!0;let y=t.get(n);if(y)y.activeDispatchCount=Math.max(0,y.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(n){let O=t.get(n);if(!O){console.log(`[user-desktop] delete handle=${n} (not found, no-op)`);return}if(O.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${n} port=${O.port} REFUSED \u2014 ${O.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${n} port=${O.port}`);try{O.process.kill("SIGTERM")}catch{}t.delete(n),$({handle:n,status:"stopped",sandboxPath:E(n),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),w({handle:n,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let n of t.values())try{n.process.kill("SIGTERM")}catch{}t.clear()}}}function CCt(){return new Promise((i,u)=>{let t=zCt();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var weu=()=>{};import{randomUUID as MCt}from"crypto";import{hostname as qCt}from"os";async function deu(i){let u=qCt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=bbu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=L1i({path:X1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=$eu({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(k,q)=>E>0?`http://${k}.localhost:${E}`:`http://127.0.0.1:${q}`,spawnDaemon:async(k)=>{let q={DAEMON_BOOT_ID:MCt(),APP_ROOT:k.workdir,PROXY_PORT:String(k.port),DAEMON_TOKEN:k.daemonToken,OFFLOAD_ALLOWED_HOSTS:k.offloadAllowedHosts.join(","),...k.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(k.orgFsConfigJson){let W=await Vbu(i.dataDir);if(W)q.ORGFS_CONFIG=k.orgFsConfigJson,q.ORGFS_RCLONE_PATH=W}let J=await t({workdir:k.workdir,env:q,daemonPort:k.port});return{port:k.port,kill:(W)=>J.kill(W),exited:J.exited.then(()=>{return})}},postConfig:async(k,q,J,W)=>{let r={port:q};if(J.workload)r.runtime=J.workload.runtime,r.packageManager={name:J.workload.packageManager,...J.workload.packageManagerPath?{path:J.workload.packageManagerPath}:{}};let Y={application:r},fi=vh(J.operator??null);if(fi)Y.operator=fi;if(J.repo)Y.git={repository:{cloneUrl:J.repo.cloneUrl,branch:J.repo.branch},...J.repo.userName&&J.repo.userEmail?{identity:{userName:J.repo.userName,userEmail:J.repo.userEmail}}:{}};await w2(`http://127.0.0.1:${k}`,W,Y)},waitForHealth:async(k)=>{await Xli(`http://127.0.0.1:${k}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await Xmu({port:i.port,lookupSandboxPort:(k)=>$.proxyPort(k)});E=w.port,console.log(`Local ingress listening on http://127.0.0.1:${w.port} (use http://<handle>.localhost:${w.port}/)`),i.monitor?.onIngress?.(w.port);let d=mbu({provider:$}),h=async()=>{let k=await $2({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!k)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return k.accessToken},_=await Mmu(i.dataDir),v=process.env.npm_package_version??"0.0.0",D=await XRi(),n=bmu(D,{onChange:(k)=>{console.log(`[link-daemon] capabilities detected: +${k.join(",")} (now: ${D.join(",")})`)}}),O=Fzi({path:`${i.dataDir}/link/outbox.sqlite`});O.clear();let N=()=>{},y=new AbortController,Z={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:h,provider:$,outbox:O,controlHandler:d,capabilities:D,machineId:_,cliVersion:v,previewPort:w.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>N(),runLifetimeSignal:y.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await Fmu(Z);console.log("[link-daemon] active transport=tunnel");let B,F=new Promise((k)=>{B=k}),A=!1,G=async()=>{if(A)return;A=!0,y.abort(),console.log(`
|
|
84521
84521
|
Shutting down\u2026`),n();try{await T.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{O.close()}catch{}c(),B(0)};process.on("SIGINT",()=>void G()),process.on("SIGTERM",()=>void G()),N=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),G()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!A)console.error("Cluster connection closed permanently; exiting."),G()});let I=teu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:F,stop:G,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(E){throw c(),E}}var heu=g(()=>{gzi();UM();Cbu();rbu();ebu();Uzi();Umu();Lmu();Cmu();qmu();FM();LRi();feu();weu()});function WRi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as VCt}from"net";async function mCt(i){for(let u of rCt)if(await YRi(i,u))return u;return null}async function _eu(i,{intervalMs:u=1000}={}){for(;;){let t=await mCt(i);if(t)return t;await O0(u)}}function YRi(i,u){return new Promise((t)=>{let f=VCt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var rCt;var QRi=g(()=>{y4();rCt=["localhost","127.0.0.1","0.0.0.0"]});function veu(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function eCt(i,u=process.platform){if(u==="win32")return`for /f "tokens=5" %P in ('netstat -ano ^| findstr /R /C:":${i} .*LISTENING"') do taskkill /F /PID %P`;return`kill -9 $(lsof -ti tcp:${i})`}function Deu(i,u=process.platform){return[`Port ${i} is already in use.`,"Run this command to stop the process listening on it, then retry `decocms link`:","",` ${eCt(i,u)}`].join(`
|
|
84522
|
-
`)}var zRi;var neu=g(()=>{zRi=class zRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var tW;var W1i=g(()=>{tW={name:"decocms",version:"4.82.11",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var uq={};Xi(uq,{printBanner:()=>sCt,bannerLines:()=>geu,BANNER_LINES:()=>Y1i,BANNER_GRADIENT:()=>Q1i});function oCt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function geu(i){let u=Y1i.map((t,f)=>{let[l,c,E]=oCt(Q1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function sCt(i){console.log("");for(let u of geu(i))console.log(u);console.log("")}var Y1i,Q1i;var fW=g(()=>{Y1i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Q1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as pCt,Text as Oeu}from"ink";import{jsx as iMt,jsxs as Neu}from"react/jsx-runtime";function z1i({version:i}){return Neu(pCt,{flexDirection:"column",marginTop:1,children:[Y1i.map((u,t)=>iMt(Oeu,{color:Q1i[t],children:u},t)),Neu(Oeu,{dimColor:!0,children:[" v",i]})]})}var HRi=g(()=>{fW()});function yeu(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function lW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Zeu(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function Teu(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var MRi={};Xi(MRi,{subscribeLinkState:()=>RRi,setSelectedHandle:()=>bRi,setRemoving:()=>b1i,setPersistedSandboxes:()=>hMt,setPendingConfirm:()=>fq,setMachine:()=>EMt,setLogPath:()=>wMt,setLinkActions:()=>dMt,setIngress:()=>cMt,setDaemonError:()=>$Mt,setClusterUrl:()=>lMt,setCluster:()=>fMt,setActionError:()=>R1i,resetLinkStateForTests:()=>vMt,removeSandboxRow:()=>CRi,pushSandboxEvent:()=>_Mt,getLinkState:()=>tq,applySandboxEvent:()=>Beu});function tMt(i){return i==="spawning"||i==="ready"||i==="failed"}function Beu(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function Feu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:uMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function z$(){for(let i of H1i)i()}function tq(){return cf}function RRi(i){return H1i.add(i),()=>H1i.delete(i)}function fMt(i){cf={...cf,cluster:i},z$()}function lMt(i){cf={...cf,clusterUrl:i},z$()}function cMt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},z$()}function EMt(i){cf={...cf,machine:i},z$()}function $Mt(i){cf={...cf,daemonError:i},z$()}function wMt(i){cf={...cf,logPath:i},z$()}function bRi(i){cf={...cf,selectedHandle:i},z$()}function fq(i){cf={...cf,pendingConfirm:i},z$()}function R1i(i){cf={...cf,actionError:i},z$()}function b1i(i,u){if(cf.removingHandles.has(i)===u)return;let t=new Set(cf.removingHandles);if(u)t.add(i);else t.delete(i);cf={...cf,removingHandles:t},z$()}function dMt(i){cf={...cf,actions:i},z$()}function CRi(i){let u=lW(cf.sandboxes),t=Teu(u,i,cf.selectedHandle),f=new Map(cf.sandboxes);f.delete(i);let l=new Set(cf.removingHandles);l.delete(i),cf={...cf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},z$()}function hMt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of cf.sandboxes)if(tMt(f.status))u.set(t,f);cf={...cf,sandboxes:u},z$()}function _Mt(i){cf={...cf,sandboxes:Beu(cf.sandboxes,i)},z$()}function vMt(){cf=Feu(),H1i.clear()}var uMt=20,cf,H1i;var lq=g(()=>{cf=Feu(),H1i=new Set});import{spawn as DMt}from"child_process";function nMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Ueu(i,u=process.platform){let t=nMt(u);try{DMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Peu=()=>{};function Aeu(i,u={}){let t=u.openUrl??Ueu,f=tq(),l=lW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":bRi(Zeu(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);R1i(null),fq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(fq(null),$===null||!E)return;b1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)CRi($.handle);else b1i($.handle,!1),R1i(w.error)});return}case"confirmNo":fq(null);return;case"quit":if(E)E.quit();return}}var Ieu=g(()=>{lq();Peu()});function xeu(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var keu={};Xi(keu,{LinkApp:()=>yMt});import{Box as ql,Text as _1,useInput as gMt}from"ink";import{useSyncExternalStore as OMt}from"react";import{jsx as Gf,jsxs as Uh}from"react/jsx-runtime";function NMt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function yMt(){let i=OMt(RRi,tq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=lW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return gMt((l,c)=>{let E=xeu(l,c,i.pendingConfirm!==null);if(E!==null)Aeu(E)}),Uh(ql,{flexDirection:"column",children:[Gf(z1i,{version:tW.version}),Gf(ql,{marginBottom:1,children:Gf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),Gf(ql,{children:i.cluster==="linked"?Uh(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Uh(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Uh(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Gf(ql,{children:i.ingressUrl?Uh(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Gf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Gf(ql,{marginBottom:1,children:Gf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Gf(_1,{dimColor:!0,children:"No previews running yet."}):Uh(ql,{flexDirection:"column",children:[Uh(ql,{children:[Gf(ql,{width:2,flexShrink:0}),Gf(ql,{width:cW.project,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Gf(ql,{width:cW.branch,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Gf(ql,{width:cW.status,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Gf(ql,{flexGrow:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=NMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Uh(ql,{children:[Gf(ql,{width:2,flexShrink:0,children:Gf(_1,{color:"cyan",children:E?"\u203A":" "})}),Gf(ql,{width:cW.project,flexShrink:0,marginRight:1,children:Gf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),Gf(ql,{width:cW.branch,flexShrink:0,marginRight:1,children:Gf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),Gf(ql,{width:cW.status,flexShrink:0,marginRight:1,children:Gf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),Gf(ql,{flexGrow:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Gf(ql,{marginTop:1,children:Uh(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Gf(ql,{marginTop:1,children:Uh(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Gf(ql,{marginTop:1,children:Gf(_1,{color:"yellow",children:yeu(i.pendingConfirm)})}):null,i.actionError?Gf(ql,{marginTop:1,children:Uh(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,Gf(ql,{marginTop:1,children:Gf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var cW;var Geu=g(()=>{W1i();HRi();Ieu();lq();cW={project:18,branch:22,status:14}});var Seu={};Xi(Seu,{runLinkCommand:()=>IMt});import{closeSync as ZMt,mkdirSync as TMt,openSync as BMt,writeSync as FMt}from"fs";import{homedir as UMt}from"os";import{join as qRi}from"path";function PMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{FMt(u,`${WRi(l)}
|
|
84522
|
+
`)}var zRi;var neu=g(()=>{zRi=class zRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var tW;var W1i=g(()=>{tW={name:"decocms",version:"4.82.13",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var uq={};Xi(uq,{printBanner:()=>sCt,bannerLines:()=>geu,BANNER_LINES:()=>Y1i,BANNER_GRADIENT:()=>Q1i});function oCt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function geu(i){let u=Y1i.map((t,f)=>{let[l,c,E]=oCt(Q1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function sCt(i){console.log("");for(let u of geu(i))console.log(u);console.log("")}var Y1i,Q1i;var fW=g(()=>{Y1i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Q1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as pCt,Text as Oeu}from"ink";import{jsx as iMt,jsxs as Neu}from"react/jsx-runtime";function z1i({version:i}){return Neu(pCt,{flexDirection:"column",marginTop:1,children:[Y1i.map((u,t)=>iMt(Oeu,{color:Q1i[t],children:u},t)),Neu(Oeu,{dimColor:!0,children:[" v",i]})]})}var HRi=g(()=>{fW()});function yeu(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function lW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Zeu(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function Teu(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var MRi={};Xi(MRi,{subscribeLinkState:()=>RRi,setSelectedHandle:()=>bRi,setRemoving:()=>b1i,setPersistedSandboxes:()=>hMt,setPendingConfirm:()=>fq,setMachine:()=>EMt,setLogPath:()=>wMt,setLinkActions:()=>dMt,setIngress:()=>cMt,setDaemonError:()=>$Mt,setClusterUrl:()=>lMt,setCluster:()=>fMt,setActionError:()=>R1i,resetLinkStateForTests:()=>vMt,removeSandboxRow:()=>CRi,pushSandboxEvent:()=>_Mt,getLinkState:()=>tq,applySandboxEvent:()=>Beu});function tMt(i){return i==="spawning"||i==="ready"||i==="failed"}function Beu(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:u.projectName??f?.projectName??null,branch:u.branch??f?.branch??null,sandboxPath:u.sandboxPath??f?.sandboxPath??null}),t}function Feu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:uMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function z$(){for(let i of H1i)i()}function tq(){return cf}function RRi(i){return H1i.add(i),()=>H1i.delete(i)}function fMt(i){cf={...cf,cluster:i},z$()}function lMt(i){cf={...cf,clusterUrl:i},z$()}function cMt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},z$()}function EMt(i){cf={...cf,machine:i},z$()}function $Mt(i){cf={...cf,daemonError:i},z$()}function wMt(i){cf={...cf,logPath:i},z$()}function bRi(i){cf={...cf,selectedHandle:i},z$()}function fq(i){cf={...cf,pendingConfirm:i},z$()}function R1i(i){cf={...cf,actionError:i},z$()}function b1i(i,u){if(cf.removingHandles.has(i)===u)return;let t=new Set(cf.removingHandles);if(u)t.add(i);else t.delete(i);cf={...cf,removingHandles:t},z$()}function dMt(i){cf={...cf,actions:i},z$()}function CRi(i){let u=lW(cf.sandboxes),t=Teu(u,i,cf.selectedHandle),f=new Map(cf.sandboxes);f.delete(i);let l=new Set(cf.removingHandles);l.delete(i),cf={...cf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},z$()}function hMt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of cf.sandboxes)if(tMt(f.status))u.set(t,f);cf={...cf,sandboxes:u},z$()}function _Mt(i){cf={...cf,sandboxes:Beu(cf.sandboxes,i)},z$()}function vMt(){cf=Feu(),H1i.clear()}var uMt=20,cf,H1i;var lq=g(()=>{cf=Feu(),H1i=new Set});import{spawn as DMt}from"child_process";function nMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Ueu(i,u=process.platform){let t=nMt(u);try{DMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Peu=()=>{};function Aeu(i,u={}){let t=u.openUrl??Ueu,f=tq(),l=lW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":bRi(Zeu(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);R1i(null),fq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(fq(null),$===null||!E)return;b1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)CRi($.handle);else b1i($.handle,!1),R1i(w.error)});return}case"confirmNo":fq(null);return;case"quit":if(E)E.quit();return}}var Ieu=g(()=>{lq();Peu()});function xeu(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var keu={};Xi(keu,{LinkApp:()=>yMt});import{Box as ql,Text as _1,useInput as gMt}from"ink";import{useSyncExternalStore as OMt}from"react";import{jsx as Gf,jsxs as Uh}from"react/jsx-runtime";function NMt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function yMt(){let i=OMt(RRi,tq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=lW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return gMt((l,c)=>{let E=xeu(l,c,i.pendingConfirm!==null);if(E!==null)Aeu(E)}),Uh(ql,{flexDirection:"column",children:[Gf(z1i,{version:tW.version}),Gf(ql,{marginBottom:1,children:Gf(_1,{dimColor:!0,children:"\u2500".repeat(80)})}),Gf(ql,{children:i.cluster==="linked"?Uh(_1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Uh(_1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Uh(_1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),Gf(ql,{children:i.ingressUrl?Uh(_1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):Gf(_1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),Gf(ql,{marginBottom:1,children:Gf(_1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?Gf(_1,{dimColor:!0,children:"No previews running yet."}):Uh(ql,{flexDirection:"column",children:[Uh(ql,{children:[Gf(ql,{width:2,flexShrink:0}),Gf(ql,{width:cW.project,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),Gf(ql,{width:cW.branch,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),Gf(ql,{width:cW.status,flexShrink:0,marginRight:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),Gf(ql,{flexGrow:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=NMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Uh(ql,{children:[Gf(ql,{width:2,flexShrink:0,children:Gf(_1,{color:"cyan",children:E?"\u203A":" "})}),Gf(ql,{width:cW.project,flexShrink:0,marginRight:1,children:Gf(_1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),Gf(ql,{width:cW.branch,flexShrink:0,marginRight:1,children:Gf(_1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),Gf(ql,{width:cW.status,flexShrink:0,marginRight:1,children:Gf(_1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),Gf(ql,{flexGrow:1,children:Gf(_1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?Gf(ql,{marginTop:1,children:Uh(_1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?Gf(ql,{marginTop:1,children:Uh(_1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?Gf(ql,{marginTop:1,children:Gf(_1,{color:"yellow",children:yeu(i.pendingConfirm)})}):null,i.actionError?Gf(ql,{marginTop:1,children:Uh(_1,{color:"red",children:["\u2717 ",i.actionError]})}):null,Gf(ql,{marginTop:1,children:Gf(_1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var cW;var Geu=g(()=>{W1i();HRi();Ieu();lq();cW={project:18,branch:22,status:14}});var Seu={};Xi(Seu,{runLinkCommand:()=>IMt});import{closeSync as ZMt,mkdirSync as TMt,openSync as BMt,writeSync as FMt}from"fs";import{homedir as UMt}from"os";import{join as qRi}from"path";function PMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{FMt(u,`${WRi(l)}
|
|
84523
84523
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(WRi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function AMt(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function IMt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??qRi(UMt(),"deco"),f=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,c,E,$=()=>{if(E===void 0)return;try{E.close()}catch{}finally{E=void 0}};try{if(await YRi(u,"127.0.0.1"))throw new zRi(u);let w=qRi(t,"sandboxes");E=L1i({path:X1i(t),managedSandboxRoot:w});let d=await Sli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await AMt(f,d.accessToken);let h=E.reconcile();if(i.prune){let n=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${n.removed.length}, skipped ${n.skipped.length}.`);h=E.reconcile()}let _;if(i.tui){let{render:n}=await import("ink"),{createElement:O}=await import("react"),{LinkApp:N}=await Promise.resolve().then(() => (Geu(),keu)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:A,setMachine:G,setPersistedSandboxes:I}=await Promise.resolve().then(() => (lq(),MRi));TMt(t,{recursive:!0});let k=qRi(t,"link.log");c=BMt(k,"w"),A(k),I(h),T(f),Z("connecting"),_={onEvent:(q)=>y(q),onIngress:(q)=>F(q,`http://127.0.0.1:${q}`),onCluster:(q)=>Z(q),onMachine:(q)=>G(q)},l=PMt(B,c),n(O(N),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:n}=await Promise.resolve().then(() => (fW(),uq));n(i.version??"0.0.0")}$();let v=process.env.DECOCMS_LINK_MANAGED!=="1",D=await deu({port:u,clusterBaseUrl:f,dataDir:t,session:d,monitor:_,logFd:c,perSandboxLogs:v,hotReload:i.hotReload});if(i.tui){let{setLinkActions:n}=await Promise.resolve().then(() => (lq(),MRi));n({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(veu(w)?Deu(u):w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{ZMt(c)}catch{}$()}}var jeu=g(()=>{nzi();heu();QRi();neu();LRi()});var oRi={};Xi(oRi,{resolveDevLinkClusterUrl:()=>SMt,populateDevLinkToxiProxy:()=>Yeu,isDevLinkToxiProxyEnabled:()=>GMt,ensureDevLinkToxiProxy:()=>LMt,buildDevLinkToxiProxyConfig:()=>Leu,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Jeu,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Xeu});function GMt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function VRi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Leu(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=VRi(i.apiPort,"apiPort"),f=VRi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=VRi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Jeu,proxyName:Xeu,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:c,clusterUrl:E,logLine:`[dev-link-toxiproxy] ready: ${E} -> ${c}`}}function SMt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function rRi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function aRi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Weu(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Weu(i.cause)}async function mRi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${aRi(l)}`,{cause:l})}}async function Yeu(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await mRi(u,"reset",t,{method:"POST"});await rRi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await mRi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await rRi(c,"populate",l)}async function jMt(i,u){let t=`${i.apiUrl}/version`;try{await Cl(async()=>{let f=await mRi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(kMt)});await rRi(f,"readiness check",t)},{maxAttempts:xMt,minTimeout:Keu,maxTimeout:Keu,multiplier:1,jitter:0,isRetriable:(f)=>!Weu(f)})}catch(f){let l=f instanceof Wc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${aRi(l)}`,{cause:l})}}async function KMt(i){if(i===null)return"";return await new Response(i).text()}async function eRi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${t}): ${aRi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,KMt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let E=c.trim().length>0?`: ${c.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${E}`)}async function JMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await eRi(["rm","-f",t],{ignoreFailure:!0}),await eRi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function XMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await eRi(["rm","-f",t],{ignoreFailure:!0})}async function LMt(i){let u=Leu(i),t=i.startDaemon??JMt,f=i.stopDaemon??(i.startDaemon===void 0?XMt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await jMt(u,l),await Yeu(u,l)}catch(c){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw c}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var Jeu="ToxiProxy",Xeu="dev_link_studio",xMt=20,Keu=100,kMt=100;var sRi=g(()=>{y4()});var Qeu={};Xi(Qeu,{migrateBetterAuth:()=>pRi});import{getMigrations as WMt}from"better-auth/db";import{sso as YMt}from"@better-auth/sso";import{organization as QMt}from"@decocms/better-auth/plugins";import{admin as zMt,apiKey as HMt,jwt as RMt,magicLink as bMt,mcp as CMt,openAPI as MMt}from"better-auth/plugins";import{emailOTP as qMt}from"better-auth/plugins/email-otp";async function pRi(i){let t={database:OM(i||f2()),plugins:[QMt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),zMt(),HMt(),RMt(),MMt(),CMt({loginPage:"/login"}),YMt(),bMt({sendMagicLink:async()=>{}}),qMt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await WMt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var ibi=g(()=>{cE()});var ubi={};Xi(ubi,{up:()=>VMt,down:()=>rMt});import{sql as $v}from"kysely";async function VMt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo($v`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function rMt(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var zeu=()=>{};var tbi={};Xi(tbi,{up:()=>mMt,down:()=>eMt});import{sql as Heu}from"kysely";async function mMt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Heu`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Heu`CURRENT_TIMESTAMP`)).execute()}async function eMt(i){await i.schema.dropTable("organization_settings").execute()}var Reu=()=>{};var fbi={};Xi(fbi,{up:()=>aMt,down:()=>oMt});async function aMt(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function oMt(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var lbi={};Xi(lbi,{up:()=>sMt,down:()=>pMt});async function sMt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function pMt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var cbi={};Xi(cbi,{up:()=>iqt,down:()=>uqt});async function iqt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function uqt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Ebi={};Xi(Ebi,{up:()=>fqt,down:()=>lqt});import{sql as tqt}from"kysely";async function fqt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",tqt`text`).execute()}async function lqt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var beu=()=>{};var $bi={};Xi($bi,{up:()=>cqt,down:()=>Eqt});async function cqt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function Eqt(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var wbi={};Xi(wbi,{up:()=>$qt,down:()=>wqt});import{sql as cq}from"kysely";async function $qt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(cq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(cq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(cq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(cq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(cq`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function wqt(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var Ceu=()=>{};var dbi={};Xi(dbi,{up:()=>hqt,down:()=>_qt});import{sql as dqt}from"kysely";async function hqt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function _qt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(dqt`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var Meu=()=>{};var hbi={};Xi(hbi,{up:()=>vqt,down:()=>Dqt});import{sql as C1i}from"kysely";async function vqt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(C1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(C1i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(C1i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await C1i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function Dqt(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var qeu=()=>{};var _bi={};Xi(_bi,{up:()=>nqt,down:()=>gqt});async function nqt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function gqt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var vbi={};Xi(vbi,{up:()=>Oqt,down:()=>Nqt});import{sql as M1i}from"kysely";async function Oqt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await M1i`
|
|
84524
84524
|
UPDATE gateways
|
|
84525
84525
|
SET tool_selection_mode = CASE
|
|
@@ -85814,7 +85814,7 @@ You are the Agent Manager. You create, configure, and maintain agents (Virtual M
|
|
|
85814
85814
|
- Empty selected_tools or selected connections that no longer exist.
|
|
85815
85815
|
d. Suggest a concrete action per flagged agent: rewrite instructions (workflow 4), narrow scope, merge with another, or delete.
|
|
85816
85816
|
e. Confirm with the user before any destructive change. Apply with COLLECTION_VIRTUAL_MCP_UPDATE or COLLECTION_VIRTUAL_MCP_DELETE.
|
|
85817
|
-
</workflows>`,X$0;var L$0=g(()=>{jt();X$0={id:"studio-agent-manager",title:"Agent Manager",icon:"icon://Bot?color=
|
|
85817
|
+
</workflows>`,X$0;var L$0=g(()=>{jt();X$0={id:"studio-agent-manager",title:"Agent Manager",icon:"icon://Bot?color=chart-5",description:"Create, configure, and manage agents",selectedTools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_UPDATE","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_PLUGIN_CONFIG_GET","VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE","VIRTUAL_MCP_PINNED_VIEWS_UPDATE","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET"],selectedConnections:null,selectedPrompts:[],instructions:J$0,resolveRuntime:async({orgId:i,ctx:u})=>{if(!(await u.storage.virtualMcps.list(i)).some((l)=>!Yri(l.id)))return{instructions:R3f,selectedTools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET"]};return{instructions:J$0,selectedTools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_UPDATE","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_PLUGIN_CONFIG_GET","VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE","VIRTUAL_MCP_PINNED_VIEWS_UPDATE","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET"]}},getId:B6.AGENT_MANAGER}});var b3f=`<role>
|
|
85818
85818
|
You are the API Key Manager. You create and manage the current user's API keys for this organization, with least-privilege permissions and safe secret handling.
|
|
85819
85819
|
</role>
|
|
85820
85820
|
|
|
@@ -85872,7 +85872,7 @@ You are the API Key Manager. You create and manage the current user's API keys f
|
|
|
85872
85872
|
b. Propose a replacement with the same or narrower permissions and a suitable expiration; confirm and create it.
|
|
85873
85873
|
c. Tell the user to deploy and validate the replacement. Do not revoke the old key in the same step.
|
|
85874
85874
|
d. Only after the user confirms the replacement is working, follow the revocation workflow for the old key.
|
|
85875
|
-
</workflows>`,W$0;var Y$0=g(()=>{jt();W$0={id:"studio-api-key-manager",title:"API Key Manager",icon:"icon://Key01?color=
|
|
85875
|
+
</workflows>`,W$0;var Y$0=g(()=>{jt();W$0={id:"studio-api-key-manager",title:"API Key Manager",icon:"icon://Key01?color=destructive",description:"Create, scope, audit, rotate, and revoke API keys safely",selectedTools:["API_KEY_CREATE","API_KEY_LIST","API_KEY_UPDATE","API_KEY_DELETE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET"],selectedConnections:null,selectedPrompts:[],instructions:b3f,getId:B6.API_KEY_MANAGER}});var C3f=`<role>
|
|
85876
85876
|
You are the Automation Manager. You create, configure, and manage automations \u2014 background agents that run on triggers (cron schedules or events).
|
|
85877
85877
|
</role>
|
|
85878
85878
|
|
|
@@ -85930,7 +85930,7 @@ You are the Automation Manager. You create, configure, and manage automations \u
|
|
|
85930
85930
|
- Tighten <constraints> when the current messages are too open-ended.
|
|
85931
85931
|
e. Save with AUTOMATION_UPDATE using the smallest change set.
|
|
85932
85932
|
f. Re-read with AUTOMATION_GET to verify the stored result.
|
|
85933
|
-
</workflows>`,Q$0;var z$0=g(()=>{jt();Q$0={id:"studio-automation-manager",title:"Automation Manager",icon:"icon://Zap?color=
|
|
85933
|
+
</workflows>`,Q$0;var z$0=g(()=>{jt();Q$0={id:"studio-automation-manager",title:"Automation Manager",icon:"icon://Zap?color=chart-4",description:"Create, configure, and run automations with triggers",selectedTools:["AUTOMATION_CREATE","AUTOMATION_GET","AUTOMATION_LIST","AUTOMATION_UPDATE","AUTOMATION_DELETE","AUTOMATION_TRIGGER_ADD","AUTOMATION_TRIGGER_REMOVE","AUTOMATION_RUN","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET"],selectedConnections:null,selectedPrompts:[],instructions:C3f,getId:B6.AUTOMATION_MANAGER}});async function H$0(i,u){let t=i.objectStorage;if(!t)return!1;try{return(await t.list({prefix:u,maxKeys:1})).objects.length>0}catch{return!1}}var M3f=`<role>
|
|
85934
85934
|
You are the Brand Manager. The organization does not have a brand context yet \u2014 your first job is to help the user create one.
|
|
85935
85935
|
</role>
|
|
85936
85936
|
|
|
@@ -85997,7 +85997,7 @@ You are the Brand Manager. You manage the organization's brand contexts (company
|
|
|
85997
85997
|
b. Write the HTML \u2014 inline CSS, brand assets from <active_brand> by URL, no external scripts. The preview panel renders it as you stream.
|
|
85998
85998
|
c. Reply with one short line offering iteration ("Want different copy, layout, or sections?"). Do not restate the URL, do not describe what you wrote, do not list sections \u2014 the user can see the page.
|
|
85999
85999
|
d. Only ask before writing when the user's brief includes something that can't be defaulted (unusual structure, multi-page bundle). Even then, sketch the default in one line and ask "build this or adjust?" \u2014 never open with a discovery questionnaire.
|
|
86000
|
-
</workflows>`,b$0;var C$0=g(()=>{jt();b$0={id:"studio-brand-manager",title:"Brand Manager",icon:"icon://Brand?color=
|
|
86000
|
+
</workflows>`,b$0;var C$0=g(()=>{jt();b$0={id:"studio-brand-manager",title:"Brand Manager",icon:"icon://Brand?color=chart-5",description:"Create, configure, and manage brand contexts (company profiles) for the organization.",selectedTools:["BRAND_CONTEXT_CREATE","BRAND_CONTEXT_GET","BRAND_CONTEXT_LIST","BRAND_CONTEXT_TEST","BRAND_CONTEXT_UPDATE","BRAND_CONTEXT_DELETE","BRAND_CONTEXT_EXTRACT"],selectedConnections:["self"],selectedPrompts:["brand-manager-set-up","brand-manager-complete-profile","brand-manager-create-landing-page"],instructions:R$0,resolveRuntime:async({orgId:i,ctx:u})=>{let t=await u.storage.brandContext.list(i),f=t.find((c)=>c.isDefault)??t[0];if(!f)return{instructions:M3f,selectedTools:["BRAND_CONTEXT_CREATE","BRAND_CONTEXT_EXTRACT"]};let l=`
|
|
86001
86001
|
|
|
86002
86002
|
<active_brand>
|
|
86003
86003
|
${JSON.stringify({id:f.id,name:f.name,domain:f.domain,overview:f.overview,logo:f.logo,colors:f.colors,fonts:f.fonts},null,2)}
|
|
@@ -86038,7 +86038,7 @@ You are the Connection Manager. You create, configure, test, and manage MCP conn
|
|
|
86038
86038
|
a. List all connections with COLLECTION_CONNECTIONS_LIST.
|
|
86039
86039
|
b. Test each connection's health with CONNECTION_TEST.
|
|
86040
86040
|
c. Report which connections are healthy, erroring, or inactive.
|
|
86041
|
-
</workflows>`,M$0;var q$0=g(()=>{jt();M$0={id:"studio-connection-manager",title:"Connection Manager",icon:"icon://Link01?color=
|
|
86041
|
+
</workflows>`,M$0;var q$0=g(()=>{jt();M$0={id:"studio-connection-manager",title:"Connection Manager",icon:"icon://Link01?color=chart-3",description:"Create, configure, test, and manage connections",selectedTools:["COLLECTION_CONNECTIONS_CREATE","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_UPDATE","COLLECTION_CONNECTIONS_DELETE","CONNECTION_TEST"],selectedConnections:null,selectedPrompts:[],instructions:q3f,getId:B6.CONNECTION_MANAGER}});var V3f=`<role>
|
|
86042
86042
|
You are the Store Manager. You browse the Deco Store and the Community
|
|
86043
86043
|
Registry, propose installable MCPs to the user, and guide their installation.
|
|
86044
86044
|
</role>
|
|
@@ -86078,7 +86078,7 @@ Registry, propose installable MCPs to the user, and guide their installation.
|
|
|
86078
86078
|
3. Reviewing the catalog:
|
|
86079
86079
|
a. List both registries' contents (or filter by category).
|
|
86080
86080
|
b. Report categories, popular entries, and any new additions.
|
|
86081
|
-
</workflows>`,V$0;var r$0=g(()=>{jt();V$0={id:"studio-store-manager",title:"Store Manager",icon:"icon://Store01?color=
|
|
86081
|
+
</workflows>`,V$0;var r$0=g(()=>{jt();V$0={id:"studio-store-manager",title:"Store Manager",icon:"icon://Store01?color=success",description:"Browse the Deco Store and Community Registry, recommend MCPs, and guide installations.",selectedTools:null,selectedConnections:["registry","community-registry"],selectedPrompts:["store-manager-browse-store"],instructions:V3f,checklist:[{label:"Browse the Deco Store",activeForm:"Browsing the Deco Store",action:{kind:"open-agent-thread",promptName:"store-manager-browse-store"},isCompleted:async({orgId:i,ctx:u})=>{let t=[_4.SELF(i),_4.REGISTRY(i),_4.COMMUNITY_REGISTRY(i),_4.DEV_ASSETS(i)],{totalCount:f}=await u.storage.connections.list(i,{where:{operator:"not",conditions:[{field:["id"],operator:"in",value:t}]},limit:1});return f>0}}],getId:B6.STORE_MANAGER}});var r3f=`<role>
|
|
86082
86082
|
You are the Task Manager. You organize and maintain this organization's task board so the team can see what needs attention, what is underway, and what is complete.
|
|
86083
86083
|
</role>
|
|
86084
86084
|
|
|
@@ -86131,7 +86131,7 @@ You are the Task Manager. You organize and maintain this organization's task boa
|
|
|
86131
86131
|
a. Resolve the exact item with TASK_BOARD_ITEM_LIST unless its id is already known.
|
|
86132
86132
|
b. Show the task title and explain that deleting the card is irreversible. Get explicit confirmation immediately before the tool call.
|
|
86133
86133
|
c. Call TASK_BOARD_ITEM_DELETE only after confirmation, then briefly confirm removal.
|
|
86134
|
-
</workflows>`,m$0;var e$0=g(()=>{jt();m$0={id:"studio-task-manager",title:"Task Manager",icon:"icon://Flag01?color=
|
|
86134
|
+
</workflows>`,m$0;var e$0=g(()=>{jt();m$0={id:"studio-task-manager",title:"Task Manager",icon:"icon://Flag01?color=chart-1",description:"Create, prioritize, assign, and track work on the task board",selectedTools:["TASK_BOARD_ITEM_CREATE","TASK_BOARD_ITEM_LIST","TASK_BOARD_ITEM_UPDATE","TASK_BOARD_ITEM_DELETE","TASK_BOARD_ITEM_PRS_GET"],selectedConnections:null,selectedPrompts:[],instructions:r3f,getId:B6.TASK_MANAGER}});var m3f=`<role>
|
|
86135
86135
|
You are the Usage Manager. You analyze how this workspace is actually used \u2014 which agents and connections get traffic, who uses them, what it costs \u2014 and help clean up what's idle.
|
|
86136
86136
|
</role>
|
|
86137
86137
|
|
|
@@ -86182,7 +86182,7 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
|
|
|
86182
86182
|
b. MONITORING_LOGS_LIST with isError true (plus connectionId/toolName/virtualMcpId filters) \u2192 failing calls.
|
|
86183
86183
|
c. MONITORING_LOG_GET on specific log ids for full input/output when the error message isn't enough.
|
|
86184
86184
|
d. Report the failing tool/connection, error pattern, and suggest the fix or owner.
|
|
86185
|
-
</workflows>`,a$0;var o$0=g(()=>{jt();a$0={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=blue",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:m3f,getId:B6.USAGE_MANAGER}});function Uai(i){return JN.find((u)=>i.startsWith(`${u.id}_`))??null}async function e3f(i,u){if("resolveRuntime"in i)return i.resolveRuntime(u);return{instructions:i.instructions,selectedTools:i.selectedTools}}async function u$i({virtualMcp:i,agentId:u=i.id,organizationId:t,ctx:f}){let l=Uai(u);if(!l)return i;let c=await e3f(l,{orgId:t,ctx:f}),E=c.selectedTools?[...c.selectedTools]:null;return{...i,metadata:{...i.metadata??{},instructions:c.instructions},connections:i.connections.map(($)=>({...$,selected_tools:E}))}}async function t$i(i,u){if(!("checklist"in i))return[];return Promise.all(i.checklist.map(async(t)=>({label:t.label,activeForm:t.activeForm,action:t.action,completed:await t.isCompleted(u),alwaysSuggest:t.alwaysSuggest})))}async function s$0(i,u,t){let f={self:_4.SELF(i),registry:_4.REGISTRY(i),"community-registry":_4.COMMUNITY_REGISTRY(i)};await Promise.all(JN.map(async(l)=>{let c=l.getId(i),E=await t.findById(c,i),w=(l.selectedConnections??["self"]).map((d)=>f[d]);if(E){await t.update(c,u,{metadata:{...E.metadata??{},instructions:l.instructions},connections:w.map((d)=>{let h=E.connections.find((_)=>_.connection_id===d);return{connection_id:d,selected_tools:l.selectedTools?[...l.selectedTools]:null,selected_resources:h?.selected_resources??null,selected_prompts:h?.selected_prompts??null}})});return}await t.create(i,u,{title:l.title,description:l.description,icon:l.icon,status:"active",pinned:!1,metadata:{instructions:l.instructions},connections:w.map((d)=>({connection_id:d,selected_tools:l.selectedTools?[...l.selectedTools]:null,selected_resources:null,selected_prompts:l.selectedPrompts?[...l.selectedPrompts]:null}))},{id:c})}))}var JN;var FY=g(()=>{jt();L$0();Y$0();z$0();C$0();q$0();r$0();e$0();o$0();JN=[b$0,X$0,Q$0,M$0,W$0,V$0,m$0,a$0]});import{DBOS as f$i}from"@dbos-inc/dbos-sdk";async function a3f(i){let u=Ut(),t=new BY(u.db);await s$0(i.orgId,i.createdBy,t)}async function o3f(i){let u=Ut(),t=new BY(u.db);for(let f of JN){let l=f.getId(i.orgId),c=await t.findById(l,i.orgId);if(!c)continue;let E=f.selectedPrompts?[...f.selectedPrompts]:null;if(c.connections.every((w)=>{let d=w.selected_prompts;if(E===null)return d===null;if(d===null)return!1;if(d.length!==E.length)return!1;return d.every((h,_)=>h===E[_])}))continue;await t.update(l,i.createdBy,{connections:c.connections.map((w)=>({connection_id:w.connection_id,selected_tools:w.selected_tools,selected_resources:w.selected_resources,selected_prompts:E}))})}}async function s3f(i){await f$i.runStep(()=>a3f(i),{name:"installStudioPack"}),await f$i.runStep(()=>o3f(i),{name:"backfillSelectedPrompts"})}async function Pai(i){await f$i.startWorkflow(p3f,{workflowID:`install-studio-pack:${ihf}:${i.orgId}`})(i)}async function p$0(){let u=await Ut().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),t=new Map;for(let f of u)if(!t.has(f.organizationId))t.set(f.organizationId,f.userId);await Promise.all(Array.from(t).map(async([f,l])=>{try{await Pai({orgId:f,createdBy:l})}catch(c){console.error("[studio-pack-backfill] enqueue failed",{orgId:f},c)}}))}var p3f,ihf="v5";var l$i=g(()=>{cE();Fai();FY();p3f=f$i.registerWorkflow(s3f,{name:"installStudioPackWorkflow"})});import{jwtVerify as uhf,SignJWT as iw0}from"jose";import{randomBytes as thf}from"crypto";function uw0(){if($r)return $r;let i=yu(),u=i.meshJwtSecret??i.betterAuthSecret;if(u)$r=new TextEncoder().encode(u);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),$r=new Uint8Array(thf(32));return $r}async function tw0(i,u="5m"){let t=uw0();return await new iw0(i).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(u).sign(t)}async function Aai(i){try{let u=uw0(),{payload:t}=await uhf(i,u);return t}catch{return}}async function f7(i,u,t=3600){let f=yu(),l=f.meshJwtSecret??f.betterAuthSecret;if(!l)throw Error("A deterministic JWT secret is required to mint gateway JWTs \u2014 set MESH_JWT_SECRET or BETTER_AUTH_SECRET");let c=new TextEncoder().encode(l);return await new iw0({iss:"mesh",sub:i,...u&&{email:u}}).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Math.floor(Date.now()/1000)+t).sign(c)}var $r=null;var XN=g(()=>{vt()});class wr{constructor(){this._messageQueue=[]}static createLinkedPair(){let i=new wr,u=new wr;return i._otherTransport=u,u._otherTransport=i,[i,u]}async start(){while(this._messageQueue.length>0){let i=this._messageQueue.shift();this.onmessage?.(i.message,i.extra)}}async close(){let i=this._otherTransport;this._otherTransport=void 0,await i?.close(),this.onclose?.()}async send(i,u){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage(i,{authInfo:u?.authInfo});else this._otherTransport._messageQueue.push({message:i,extra:{authInfo:u?.authInfo}})}}import{SpanStatusCode as fw0}from"@opentelemetry/api";function ti(i){return{...i,execute:async(u,t)=>{return await t.timings.measure(`tool.${i.name}`,async()=>t.tracer.startActiveSpan(`tool.${i.name}`,{attributes:{"tool.name":i.name,"organization.id":t.organization?.id??"system","user.id":t.auth.user?.id??t.auth.apiKey?.userId??"anonymous"}},async(f)=>{try{t.toolName=i.name,t.access.setToolName?.(i.name);let l=await i.handler(u,t);return f.setStatus({code:fw0.OK}),l}catch(l){throw f.setStatus({code:fw0.ERROR,message:l.message}),f.recordException(l),l}finally{f.end()}}))}}}var Eu=()=>{};function yi(i){if(!i.organization)throw Error("This operation requires organization scope");return i.organization}function Hu(i){return i.auth.user?.id??i.auth.apiKey?.userId}function fhf(i){return!!(i.auth.user||i.auth.apiKey)}function ki(i){if(!fhf(i))throw Error("Authentication required")}import{z as Df}from"zod";var c$i,lw0,cw0,Ew0,$w0,ww0,dw0,hw0,_w0,vw0;var UY=g(()=>{c$i=Df.record(Df.string(),Df.array(Df.string())),lw0=Df.object({id:Df.string().describe("Unique identifier for the API key"),name:Df.string().describe("Human-readable name for the API key"),userId:Df.string().describe("ID of the user who owns this API key"),permissions:c$i.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:Df.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:Df.string().datetime().describe("When the API key was created (ISO 8601)")}),cw0=Df.object({name:Df.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:c$i.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:Df.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:Df.record(Df.string(),Df.unknown()).optional().describe("Additional metadata to store with the API key")}),Ew0=Df.object({id:Df.string().describe("Unique identifier for the API key"),name:Df.string().describe("Human-readable name for the API key"),key:Df.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:c$i.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:Df.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:Df.string().datetime().describe("When the API key was created (ISO 8601)")}),$w0=Df.object({}),ww0=Df.object({items:Df.array(lw0).describe("List of API keys (without key values)")}),dw0=Df.object({keyId:Df.string().describe("ID of the API key to update"),name:Df.string().min(1).max(64).optional().describe("New name for the API key"),permissions:c$i.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:Df.record(Df.string(),Df.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),hw0=Df.object({item:lw0.describe("The updated API key (without key value)")}),_w0=Df.object({keyId:Df.string().describe("ID of the API key to delete")}),vw0=Df.object({success:Df.boolean().describe("Whether the deletion was successful"),keyId:Df.string().describe("ID of the deleted API key")})});var Iai;var Dw0=g(()=>{H4();Eu();UY();Iai=ti({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:cw0,outputSchema:Ew0,handler:async(i,u)=>{ki(u),await u.access.check();let t=await u.boundAuth.apiKey.create({name:i.name,permissions:i.permissions,expiresIn:i.expiresIn,metadata:{...i.metadata,organization:u.organization}}),f=t.expiresAt?t.expiresAt instanceof Date?t.expiresAt.toISOString():t.expiresAt:null,l=t.createdAt instanceof Date?t.createdAt.toISOString():t.createdAt,c=Hu(u);if(c)mu.capture({distinctId:c,event:"api_key_created",...u.organization?.id?{groups:{organization:u.organization.id}}:{},properties:{key_id:t.id,key_name:t.name??i.name,organization_id:u.organization?.id,has_expiry:!!f}});return{id:t.id,name:t.name??i.name,key:t.key,permissions:t.permissions??{},expiresAt:f,createdAt:l}}})});var xai;var nw0=g(()=>{H4();Eu();UY();xai=ti({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_w0,outputSchema:vw0,handler:async(i,u)=>{ki(u),await u.access.check();let t=Hu(u);if(!t)throw Error("User ID required to delete API key");let l=(await u.boundAuth.apiKey.list())?.find((w)=>w.id===i.keyId);if(!l)throw Error("API key not found");let E=l.metadata?.organization?.id,$=u.organization?.id;if(E!==$)throw Error("Cannot delete API key from another organization");if(await u.boundAuth.apiKey.delete(i.keyId),$)mu.capture({distinctId:t,event:"api_key_deleted",groups:{organization:$},properties:{key_id:i.keyId,organization_id:$}});return{success:!0,keyId:i.keyId}}})});var kai;var gw0=g(()=>{Eu();UY();kai=ti({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:$w0,outputSchema:ww0,handler:async(i,u)=>{ki(u),await u.access.check();let t=await u.boundAuth.apiKey.list(),f=u.organization?.id;return{items:(t??[]).filter((c)=>{return c.metadata?.organization?.id===f}).map((c)=>({id:c.id,name:c.name??"Unnamed Key",userId:c.userId,permissions:c.permissions??{},expiresAt:c.expiresAt?c.expiresAt instanceof Date?c.expiresAt.toISOString():c.expiresAt:null,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():c.createdAt}))}}})});var Gai;var Ow0=g(()=>{Eu();UY();Gai=ti({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:dw0,outputSchema:hw0,handler:async(i,u)=>{if(ki(u),await u.access.check(),!Hu(u))throw Error("User ID required to update API key");let l=(await u.boundAuth.apiKey.list())?.find((d)=>d.id===i.keyId);if(!l)throw Error(`API key not found: ${i.keyId}`);let E=l.metadata?.organization?.id,$=u.organization?.id;if(E!==$)throw Error("Cannot update API key from another organization");let w=await u.boundAuth.apiKey.update({keyId:i.keyId,name:i.name,permissions:i.permissions,metadata:{...i.metadata,organization:u.organization}});if(!w)throw Error(`Failed to update API key: ${i.keyId}`);return{item:{id:w.id,name:w.name??i.name??"Unnamed Key",userId:w.userId,permissions:w.permissions??{},expiresAt:w.expiresAt?w.expiresAt instanceof Date?w.expiresAt.toISOString():w.expiresAt:null,createdAt:w.createdAt instanceof Date?w.createdAt.toISOString():w.createdAt}}}})});var Nw0=g(()=>{Dw0();nw0();gw0();Ow0();UY()});function l7(i){let u=i.trim();if(!u)return{ok:!1,error:"Enter a website URL."};let t=chf.test(u),f=Ehf.test(u),l=$hf.test(u);if(t&&!f&&!l)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let c=f?u:`https://${u}`,E;try{E=new URL(c)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(E.protocol!=="http:"&&E.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let $=E.hostname.split(".");if($.length<2||$.some((w)=>!w||!whf.test(w)))return{ok:!1,error:"Enter a valid website URL."};return E.protocol="https:",{ok:!0,value:E.origin}}var chf,Ehf,$hf,whf;var dr=g(()=>{chf=/^[a-zA-Z][a-zA-Z\d+.-]*:/,Ehf=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,$hf=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,whf=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as E$}from"zod";function LN(i){if(i.baseUrl)return i.baseUrl.replace(/\/+$/,"");return((i.settings??yu()).commerceDiscoveryInternalApiUrl??dhf).replace(/\/+$/,"")}function Zw0(i={}){return`${LN(i)}/api/v2/mcp`}function WN(i){let u=i.apiKey??(i.settings??yu()).commerceDiscoveryInternalApiKey;if(!u)throw Error("COMMERCE_DISCOVERY_INTERNAL_API_KEY is required to set up Commerce Discovery.");return u}function E$i(i){return new URL(i).hostname}function _hf(i){return i==="ownership_unverified"||i==="already_claimed_by_other_org"}function vhf(i,u={}){switch(i){case"ownership_unverified":{let t=u.email?`O e-mail ${u.email}`:"Este e-mail",f=u.domain?` ${u.domain}`:" este site";return`${t} n\xE3o tem permiss\xE3o para reivindicar${f}. Use um e-mail do dom\xEDnio do site ou pe\xE7a ao suporte para autorizar seu dom\xEDnio.`}case"already_claimed_by_other_org":return"Este site j\xE1 pertence a outra organiza\xE7\xE3o. Fale com o suporte para transferir o acesso.";case"unknown":return"N\xE3o foi poss\xEDvel configurar o Commerce Discovery. Tente novamente ou fale com o suporte.";default:return i}}async function Dhf(i){let u=await i.text().catch(()=>"");if(!u)return"unknown";try{let t=JSON.parse(u);return _hf(t.error)?t.error:"unknown"}catch{return"unknown"}}async function Sai(i){let u=`Commerce Discovery auth failed with status ${i.status}.`,t=await i.text().catch(()=>"");if(!t)return u;try{let f=JSON.parse(t),l=typeof f.error==="string"?f.error:typeof f.message==="string"?f.message:null;return l?`Commerce Discovery auth failed: ${l}.`:u}catch{return u}}async function Bw0(i,u={}){let t=LN(u),f=WN(u),l=u.fetchImpl??fetch,c=E$i(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/upgrade`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId,...i.orgName?{name:i.orgName}:{},...i.email?{email:i.email}:{},...i.reportUrl?{report_url:i.reportUrl}:{}})});if(!$.ok){let d=await Dhf($);throw new Tw0(d,{email:i.email,domain:c})}let w=hhf.safeParse(await $.json());if(!w.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:w.data.token}}async function Fw0(i,u={}){let t=LN(u),f=WN(u),l=u.fetchImpl??fetch,c=E$i(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/bindings`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId,provider:i.provider,resource_id:i.resourceId})});if($.status===409)return{ok:!1,reason:"resource_already_bound",detail:"Este recurso j\xE1 est\xE1 vinculado a outra loja. Se ele \xE9 seu, fale com o suporte para revis\xE3o manual."};if($.status===422){let d=yw0.safeParse(await $.json());return{ok:!1,reason:d.success?d.data.reason??"verification_failed":"verification_failed",detail:(d.success?d.data.detail:void 0)??"N\xE3o foi poss\xEDvel verificar o acesso a este recurso."}}if(!$.ok)throw Error(await Sai($));let w=yw0.safeParse(await $.json());if(!w.success||!w.data.binding)throw Error("Commerce Discovery bind response did not include a binding.");return{ok:!0,resourceId:w.data.binding.resource_id,evidence:w.data.binding.evidence}}async function Uw0(i,u={}){let t=LN(u),f=WN(u),l=u.fetchImpl??fetch,c=E$i(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/run`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId,...i.githubRepo?{github_repo:i.githubRepo}:{}})});if($.status===409)return{triggered:!1,reason:"not_upgraded"};if(!$.ok)throw Error(await Sai($));return{triggered:!0}}async function Pw0(i,u={}){let t=LN(u),f=WN(u),l=u.fetchImpl??fetch,c=E$i(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/connections/status?org_id=${encodeURIComponent(i.orgId)}`,$=await l(E,{method:"GET",headers:{Authorization:`Bearer ${f}`}});if($.status===404||$.status===409)return{};if(!$.ok)throw Error(await Sai($));let w=nhf.safeParse(await $.json());return w.success?w.data.providers:{}}var dhf,hhf,yw0,Tw0,nhf;var PY=g(()=>{jt();vt();dhf=new URL(Ari).origin,hhf=E$.object({token:E$.string().min(1)}),yw0=E$.object({binding:E$.object({resource_id:E$.string(),evidence:E$.string()}).optional(),reason:E$.string().optional(),detail:E$.string().optional()});Tw0=class Tw0 extends Error{code;constructor(i,u={}){super(vhf(i,u));this.name="CommerceDiscoveryClaimError",this.code=i}};nhf=E$.object({providers:E$.record(E$.string(),E$.object({connected:E$.boolean(),via:E$.enum(["oauth","sa"]).nullable(),resource:E$.string().nullable()}))})});import{z as ud}from"zod";var ghf,Ohf,jai;var Aw0=g(()=>{dr();Eu();PY();ghf=ud.object({siteUrl:ud.string().min(1).describe("Website URL of the store being bound."),provider:ud.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:ud.string().min(1).describe("The resource id the client typed: GA4 numeric property id, or GSC site (sc-domain:example.com or https://example.com/).")}),Ohf=ud.discriminatedUnion("ok",[ud.object({ok:ud.literal(!0),resourceId:ud.string(),evidence:ud.string()}),ud.object({ok:ud.literal(!1),reason:ud.string(),detail:ud.string()})]),jai=ti({name:"COMMERCE_DISCOVERY_BIND",description:"Bind a GA4 property or GSC site to the org's store via the shared service account (consent-free lane). The client grants deco-reader@\u2026 access to the resource and provides its id; Commerce Discovery verifies the resource belongs to this domain before persisting. Returns ok:false with an actionable pt-BR detail when verification fails or the resource is already bound elsewhere.",annotations:{title:"Bind Commerce Discovery Data Source",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:ghf,outputSchema:Ohf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check();let f=l7(i.siteUrl);if(!f.ok)throw Error(f.error);return Fw0({siteUrl:f.value,orgId:t.id,provider:i.provider,resourceId:i.resourceId.trim()})}})});import{z as u8}from"zod";var Nhf,yhf,Kai;var Iw0=g(()=>{dr();Eu();PY();Nhf=u8.object({siteUrl:u8.string().min(1).describe("Website URL of the store to inspect.")}),yhf=u8.object({providers:u8.record(u8.string(),u8.object({connected:u8.boolean(),via:u8.enum(["oauth","sa"]).nullable(),resource:u8.string().nullable()}))}),Kai=ti({name:"COMMERCE_DISCOVERY_CONNECTION_STATUS",description:"Read per-provider connection status (ga4/gsc/vtex) for the org's store \u2014 { connected, via: oauth|sa, resource }. The single source of truth for whether a data source is connected, unifying the OAuth (Studio vault) and shared-SA binding lanes. Read-only.",annotations:{title:"Commerce Discovery Connection Status",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Nhf,outputSchema:yhf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check();let f=l7(i.siteUrl);if(!f.ok)throw Error(f.error);return{providers:await Pw0({siteUrl:f.value,orgId:t.id})}}})});import{z as hr}from"zod";var Zhf,Thf,Jai;var xw0=g(()=>{jt();dr();Eu();PY();Zhf=hr.object({siteUrl:hr.string().min(1).describe("Website URL to run the diagnostic for.")}),Thf=hr.object({triggered:hr.boolean(),reason:hr.string().optional()}),Jai=ti({name:"COMMERCE_DISCOVERY_RUN",description:"Trigger the Commerce Discovery diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Zhf,outputSchema:Thf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check();let f=l7(i.siteUrl);if(!f.ok)throw Error(f.error);let l=_4.COMMERCE_DISCOVERY(t.id),E=(await u.storage.connections.findById(l,t.id))?.configuration_state,$=E&&typeof E==="object"&&typeof E.github_repo==="string"&&E.github_repo.length>0?E.github_repo:void 0;return Uw0({siteUrl:f.value,orgId:t.id,githubRepo:$})}})});var c7=g(()=>{o6i()});import{z as Gv}from"zod";async function Phf(i,u,t,f){let l=await i.storage.connections.findById(u,t);if(l)return l;throw f}async function Ahf(i,u,t,f){let l=await i.storage.virtualMcps.findById(u,t);if(l)return l;throw f}var Xai,Bhf=3600000,Fhf,Uhf,Lai;var kw0=g(()=>{jt();dr();Eu();kv();c7();PY();Xai=Iri,Fhf=Gv.object({siteUrl:Gv.string().min(1).describe("Website URL to configure.")}),Uhf=Gv.object({connection:U6,virtualMcp:P6,reportApp:Gv.object({connectionId:Gv.string(),virtualMcpId:Gv.string(),toolName:Gv.literal(Xai)}),created:Gv.object({connection:Gv.boolean(),virtualMcp:Gv.boolean()})});Lai=ti({name:"COMMERCE_DISCOVERY_SETUP",description:"Create or return the Commerce Discovery connection and virtual MCP for the current organization.",annotations:{title:"Set Up Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Fhf,outputSchema:Uhf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check("COLLECTION_CONNECTIONS_CREATE");let f=Hu(u);if(!f)throw Error("User ID required to set up Commerce Discovery");let l=l7(i.siteUrl);if(!l.ok)throw Error(l.error);let c=_4.COMMERCE_DISCOVERY(t.id),E=Xri(t.id),$=new URLSearchParams({virtualmcpid:E,main:`app:${c}:${Xai}`}),w={email:u.auth.user?.email,reportUrl:`${u.baseUrl}/${encodeURIComponent(t.slug??t.id)}/${crypto.randomUUID()}?${$.toString()}`},d=await u.storage.connections.findById(c,t.id),h={connection:!1,virtualMcp:!1},_=await Bw0({siteUrl:l.value,orgId:t.id,orgName:t.name,...w}),v=Zw0();if(d)console.log("[commerce-discovery] syncing connection to claimed site",{orgId:t.id,siteUrl:l.value,connectionId:c}),d=await u.storage.connections.update(d.id,{connection_url:v,connection_token:_.authorizationToken,metadata:{...d.metadata??{},siteUrl:l.value}});else{console.log("[commerce-discovery] creating connection",{orgId:t.id,siteUrl:l.value,connectionId:c});try{let N=Lri(t.id,_.authorizationToken,v);d=await u.storage.connections.create({...N,metadata:{...N.metadata??{},siteUrl:l.value},organization_id:t.id,created_by:f}),h.connection=!0}catch(N){d=await Phf(u,c,t.id,N)}}let D=await u.storage.virtualMcps.findById(E,t.id);if(!D){console.log("[commerce-discovery] creating virtual MCP",{orgId:t.id,siteUrl:l.value,connectionId:d.id,virtualMcpId:E});try{D=await u.storage.virtualMcps.create(t.id,f,Wri(t.id,d.id),{id:E}),h.virtualMcp=!0}catch(N){D=await Ahf(u,E,t.id,N)}}if(!D.pinned)D=await u.storage.virtualMcps.update(D.id,f,{pinned:!0});let n=await u.db.selectFrom("organization").select(["createdAt"]).where("id","=",t.id).executeTakeFirst();if((n?Date.now()-new Date(n.createdAt).getTime():Number.POSITIVE_INFINITY)<Bhf){if((await u.storage.organizationSettings.get(t.id))?.reports_only==null)await u.storage.organizationSettings.upsert(t.id,{reports_only:!0})}return{connection:d,virtualMcp:D,reportApp:{connectionId:d.id,virtualMcpId:D.id,toolName:Xai},created:h}}})});var Gw0=g(()=>{Aw0();Iw0();xw0();kw0()});var Wai=K((Sw0)=>{Object.defineProperty(Sw0,"__esModule",{value:!0});Sw0.kvPrefix=Sw0.KvWatchInclude=void 0;Sw0.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};Sw0.kvPrefix="KV_"});var bw0=K((Hw0)=>{Object.defineProperty(Hw0,"__esModule",{value:!0});Hw0.KvStatusImpl=Hw0.Bucket=Hw0.Kvm=Hw0.kvOperationHdr=void 0;Hw0.Base64KeyCodec=khf;Hw0.NoopKvCodecs=Yai;Hw0.defaultBucketOpts=Jw0;Hw0.validateKey=Xw0;Hw0.validateSearchKey=Lw0;Hw0.hasWildcards=Ww0;Hw0.validateBucket=$$i;var ml=rw(),dl=I1i(),rl=Wai();function khf(){let i=(u,t)=>{let f=[];for(let l of u.split("."))switch(l){case">":case"*":f.push(l);break;default:f.push(t(l));break}return f.join(".")};return{encode(u){return i(u,btoa)},decode(u){return i(u,atob)}}}function Yai(){return{key:{encode(i){return i},decode(i){return i}},value:{encode(i){return typeof i==="string"?new TextEncoder().encode(i):i},decode(i){return i}}}}function Jw0(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:Yai(),storage:dl.StorageType.File}}Hw0.kvOperationHdr="KV-Operation";var Kw0="$KV",Ghf=/^[-/=.\w]+$/,Shf=/^[-/=.>*\w]+$/,jhf=/^[-\w]+$/;function Xw0(i){if(i.startsWith(".")||i.endsWith(".")||!Ghf.test(i))throw Error(`invalid key: ${i}`)}function Lw0(i){if(i.startsWith(".")||i.endsWith(".")||i.includes("..")||!Shf.test(i))throw Error(`invalid key: ${i}`)}function Ww0(i){if(i.startsWith(".")||i.endsWith("."))throw Error(`invalid key: ${i}`);let u=i.split("."),t=!1;for(let f=0;f<u.length;f++)switch(u[f]){case"*":t=!0;break;case">":if(f!==u.length-1)throw Error(`invalid key: ${i}`);t=!0;break;default:}return t}function $$i(i){if(!jhf.test(i))throw Error(`invalid bucket name: ${i}`)}class Yw0{js;constructor(i){this.js=(0,dl.toJetStreamClient)(i)}create(i,u={}){return this.#i(i,u)}open(i,u={}){return u.bindOnly=!0,this.#i(i,u)}#i(i,u={}){let{ok:t,min:f}=this.js.nc.features.get(ml.Feature.JS_KV);if(!t)return Promise.reject(Error(`kv is only supported on servers ${f} or better`));if(u.bindOnly)return AY.bind(this.js,i,u);return AY.create(this.js,i,u)}list(){let i=(t)=>{let l=t.streams.filter((E)=>{return E.config.name.startsWith(rl.kvPrefix)});l.forEach((E)=>{E.config.sealed=E.config.sealed||!1,E.config.deny_delete=E.config.deny_delete||!1,E.config.deny_purge=E.config.deny_purge||!1,E.config.allow_rollup_hdrs=E.config.allow_rollup_hdrs||!1});let c="";if(l.length)c=this.js.nc.info?.cluster??"";return l.map((E)=>{return new w$i(E,c)})},u=`${this.js.prefix}.STREAM.LIST`;return new dl.ListerImpl(u,i,this.js)}}Hw0.Kvm=Yw0;class AY{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor(i,u,t){$$i(i),this.js=u,this.jsm=t,this.bucket=i,this.prefix=Kw0,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create(i,u,t={}){$$i(u);let f=await i.jetstreamManager(),l=new AY(u,i,f);return await l.init(t),l}static async bind(i,u,t={}){let f=i.getOptions()?.checkAPI||t.bindOnly===!1,l=await i.jetstreamManager(f),c={config:{allow_direct:t.allow_direct}};$$i(u);let E=new AY(u,i,l);return c.config.name=t.streamName??E.bucketName(),Object.assign(E,c),E.stream=c.config.name,E.codec=t.codec||Yai(),E.direct=c.config.allow_direct??!1,E.initializePrefixes(c),E}async init(i={}){let u=Object.assign(Jw0(),i);this.codec=u.codec;let t={};if(this.stream=t.name=i.streamName??this.bucketName(),t.retention=dl.RetentionPolicy.Limits,t.max_msgs_per_subject=u.history,u.max_bytes)t.max_bytes=u.max_bytes;if(t.max_msg_size=u.maxValueSize,t.storage=u.storage,i.placement)t.placement=i.placement;if(i.republish)t.republish=i.republish;if(i.description)t.description=i.description;if(i.markerTTL)t.allow_msg_ttl=!0,t.subject_delete_marker_ttl=(0,ml.nanos)(u.markerTTL);if(i.mirror){let d=Object.assign({},i.mirror);if(!d.name.startsWith(rl.kvPrefix))d.name=`${rl.kvPrefix}${d.name}`;t.mirror=d,t.mirror_direct=!0}else if(i.sources){let d=i.sources.map((h)=>{let _=Object.assign({},h),v=_.name.startsWith(rl.kvPrefix)?_.name.substring(rl.kvPrefix.length):_.name;if(!_.name.startsWith(rl.kvPrefix))_.name=`${rl.kvPrefix}${_.name}`;if(!h.external&&v!==this.bucket)_.subject_transforms=[{src:`$KV.${v}.>`,dest:`$KV.${this.bucket}.>`}];return _});t.sources=d,t.subjects=[this.subjectForBucket()]}else t.subjects=[this.subjectForBucket()];if(i.metadata)t.metadata=i.metadata;if(typeof i.compression==="boolean")t.compression=i.compression?dl.StoreCompression.S2:dl.StoreCompression.None;let f=this.js.nc,l=f.getServerVersion(),c=l?(0,ml.compare)(l,(0,ml.parseSemVer)("2.7.2"))>=0:!1;t.discard=c?dl.DiscardPolicy.New:dl.DiscardPolicy.Old;let{ok:E,min:$}=f.features.get(ml.Feature.JS_ALLOW_DIRECT);if(!E&&i.allow_direct===!0){let d=l?`${l.major}.${l.minor}.${l.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${d} - requires ${$}`))}if(i.allow_direct=typeof i.allow_direct==="boolean"?i.allow_direct:E,t.allow_direct=i.allow_direct,this.direct=t.allow_direct,t.num_replicas=u.replicas,u.ttl)t.max_age=(0,ml.nanos)(u.ttl);t.allow_rollup_hdrs=!0;let w;try{if(w=await this.jsm.streams.info(t.name),!w.config.allow_direct&&this.direct===!0)this.direct=!1}catch(d){if(d.message==="stream not found")w=await this.jsm.streams.add(t);else throw d}this.initializePrefixes(w)}initializePrefixes(i){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:u}=i.config;if(u){let t=u.name;if(t.startsWith(rl.kvPrefix))t=t.substring(rl.kvPrefix.length);if(u.external&&u.external.api!==""){let f=u.name.substring(rl.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${f}`,this.editPrefix=`${u.external.api}.$KV.${t}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${rl.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey(i,u=!1){let t=[];if(u){if(this.useJsPrefix)t.push(this.js.apiPrefix);if(this.editPrefix!=="")t.push(this.editPrefix);else t.push(this.prefix)}else if(this.prefix)t.push(this.prefix);return t.push(i),t.join(".")}fullKeyName(i){if(this.prefix!=="")return`${this.prefix}.${i}`;return`${Kw0}.${this.bucket}.${i}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey(i){let u=[];for(let t of i.split("."))switch(t){case">":case"*":u.push(t);break;default:u.push(this.codec.key.encode(t));break}return u.join(".")}decodeKey(i){let u=[];for(let t of i.split("."))switch(t){case">":case"*":u.push(t);break;default:u.push(this.codec.key.decode(t));break}return u.join(".")}validateKey=Xw0;validateSearchKey=Lw0;hasWildcards=Ww0;close(){return Promise.resolve()}dataLen(i,u){let t=u?u.get(dl.JsHeaders.MessageSizeHdr)||"":"";if(t!=="")return parseInt(t,10);return i.length}smToEntry(i){return new Qw0(this.bucket,this.prefixLen,i,this.codec)}jmToWatchEntry(i,u){return new zw0(this.bucket,this.prefixLen,i,u,this.codec)}async create(i,u,t){let f;try{let c={previousSeq:0},E=await this._put(i,u,c,t);return Promise.resolve(E)}catch(c){if(f=c,c instanceof dl.JetStreamApiError){let E=c;if(E.code!==dl.JetStreamApiCodes.StreamWrongLastSequence&&E.code!==dl.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(c)}}let l=0;try{let c=await this.get(i);if(c?.operation==="DEL"||c?.operation==="PURGE")return l=c!==null?c.revision:0,this._put(i,u,{previousSeq:l},t);else return Promise.reject(f)}catch(c){return Promise.reject(c)}}update(i,u,t,f){if(t<=0)throw Error("version must be greater than 0");return this.put(i,u,{previousSeq:t,timeout:f})}async _put(i,u,t={},f){let l=this.encodeKey(i);this.validateKey(l),u=this.codec.value.encode(u);let c={timeout:t?.timeout};if(t.previousSeq!==void 0){let E=(0,ml.headers)();c.headers=E,E.set(dl.PubHeaders.ExpectedLastSubjectSequenceHdr,`${t.previousSeq}`)}if(f)(c.headers||(0,ml.headers)()).set(dl.PubHeaders.MessageTTL,f);try{return(await this.js.publish(this.subjectForKey(l,!0),u,c)).seq}catch(E){return Promise.reject(E)}}put(i,u,t={}){return this._put(i,u,t)}async get(i,u){let t=this.encodeKey(i);this.validateKey(t);let f={last_by_subj:this.subjectForKey(t)};if(u&&u.revision>0)f={seq:u.revision};let l=null;try{if(this.direct)l=await this.jsm.direct.getMessage(this.bucketName(),f);else l=await this.jsm.streams.getMessage(this.bucketName(),f);if(l===null)return null;let c=this.smToEntry(l);if(c.rawKey!==t)return null;return c}catch(c){throw c}}purge(i,u){return this._deleteOrPurge(i,"PURGE",u)}delete(i,u){return this._deleteOrPurge(i,"DEL",u)}async purgeDeletes(i=1800000){let u=[],t=await this.history({key:">"});await(async()=>{for await(let E of t)if(E.operation==="DEL"||E.operation==="PURGE")u.push(E)})().then(),t.stop();let f=Date.now()-i,l=u.map((E)=>{let $=this.subjectForKey(E.key);if(E.created.getTime()>=f)return this.jsm.streams.purge(this.stream,{filter:$,keep:1});else return this.jsm.streams.purge(this.stream,{filter:$,keep:0})}),c=await Promise.all(l);return c.unshift({success:!0,purged:0}),c.reduce((E,$)=>{return E.purged+=$.purged,E})}async _deleteOrPurge(i,u,t){if(!this.hasWildcards(i))return this._doDeleteOrPurge(i,u,t);let f=await this.keys(i),l=[];for await(let c of f)if(l.push(this._doDeleteOrPurge(c,u)),l.length===100)await Promise.all(l),l.length=0;if(l.length>0)await Promise.all(l)}async _doDeleteOrPurge(i,u,t){let f=this.encodeKey(i);this.validateKey(f);let l=(0,ml.headers)();if(l.set(Hw0.kvOperationHdr,u),u==="PURGE"){let c=t;if(l.set(dl.JsHeaders.RollupHdr,dl.JsHeaders.RollupValueSubject),typeof c?.ttl==="string"&&c.ttl!=="")l.set(dl.PubHeaders.MessageTTL,`${c.ttl}`)}if(t?.previousSeq)l.set(dl.PubHeaders.ExpectedLastSubjectSequenceHdr,`${t.previousSeq}`);await this.js.publish(this.subjectForKey(f,!0),ml.Empty,{headers:l})}_buildCC(i,u,t={}){let l=(!Array.isArray(i)?[i]:i).map(($)=>{let w=this.encodeKey($);return this.validateSearchKey($),this.fullKeyName(w)}),c=dl.DeliverPolicy.LastPerSubject;if(u===rl.KvWatchInclude.AllHistory)c=dl.DeliverPolicy.All;if(u===rl.KvWatchInclude.UpdatesOnly)c=dl.DeliverPolicy.New;let E=void 0;if(l.length===1)E=l[0],l=void 0;return Object.assign({deliver_policy:c,ack_policy:dl.AckPolicy.None,filter_subjects:l,filter_subject:E,flow_control:!0,idle_heartbeat:(0,ml.nanos)(5000)},t)}remove(i){return this.purge(i)}async history(i={}){let u=i.key??">",t={};t.headers_only=i.headers_only||!1;let f=new ml.QueuedIteratorImpl,l=()=>{f.stop()},c=this._buildCC(u,rl.KvWatchInclude.AllHistory,t),E=await this.js.consumers.getPushConsumer(this.stream,c);if(f._data=E,(await E.info(!0)).num_pending===0)return f.push(l),f;let w=await E.consume({callback:(d)=>{let h=this.jmToWatchEntry(d,!1);if(f.push(h),f.received++,d.info.pending===0)f.push(l)}});return w.closed().then(()=>{f.push(l)}),(async()=>{for await(let d of w.status())switch(d.type){case"heartbeat":f.push(()=>{f.stop()});break}})().then(),f.iterClosed.then(()=>{w.stop()}),f}canSetWatcherName(){let i=this.js.nc,{ok:u}=i.features.get(ml.Feature.JS_NEW_CONSUMER_CREATE_API);return u}async watch(i={}){let u=i.key??">",t=new ml.QueuedIteratorImpl,f={};f.headers_only=i.headers_only||!1;let l=rl.KvWatchInclude.LastValue;if(i.include===rl.KvWatchInclude.AllHistory)l=rl.KvWatchInclude.AllHistory;else if(i.include===rl.KvWatchInclude.UpdatesOnly)l=rl.KvWatchInclude.UpdatesOnly;let c=i.ignoreDeletes===!0,E=this._buildCC(u,l,f);if(E.name=`KV_WATCHER_${ml.nuid.next()}`,i.resumeFromRevision&&i.resumeFromRevision>0)E.deliver_policy=dl.DeliverPolicy.StartSequence,E.opt_start_seq=i.resumeFromRevision;let $=await this.js.consumers.getPushConsumer(this.stream,E),d=(await $.info(!0)).num_pending,h=l===rl.KvWatchInclude.UpdatesOnly||d===0;t._data=$;let _=0,v=await $.consume({callback:(D)=>{if(!h)_++,h=_>=d;let n=this.jmToWatchEntry(D,h);if(c&&n.operation==="DEL")return;t.push(n),t.received++}});return t.iterClosed.then(()=>{v.stop()}),v.closed().then(()=>{t.push(()=>{t.stop()})}),t}async keys(i=">"){let u=new ml.QueuedIteratorImpl,t=this._buildCC(i,rl.KvWatchInclude.LastValue,{headers_only:!0}),f=await this.js.consumers.getPushConsumer(this.stream,t);if((await f.info()).num_pending===0)return u.stop(),u;u._data=f;let c=await f.consume({callback:(E)=>{let $=E.headers?.get(Hw0.kvOperationHdr);if($!=="DEL"&&$!=="PURGE"){let w=this.decodeKey(E.subject.substring(this.prefixLen));u.push(w)}if(E.info.pending===0)c.stop()}});return(async()=>{for await(let E of c.status())switch(E.type){case"heartbeat":u.push(()=>{u.stop()});break}})().then(),c.closed().then(()=>{u.push(()=>{u.stop()})}),u.iterClosed.then(()=>{c.stop()}),u}purgeBucket(i){return this.jsm.streams.purge(this.bucketName(),i)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let u=this.js.nc.info?.cluster??"",t=this.bucketName(),f=await this.jsm.streams.info(t);return new w$i(f,u)}}Hw0.Bucket=AY;class w$i{si;cluster;constructor(i,u=""){this.si=i,this.cluster=u}get bucket(){return this.si.config.name.startsWith(rl.kvPrefix)?this.si.config.name.substring(rl.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,ml.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,ml.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==dl.StoreCompression.None;return!1}}Hw0.KvStatusImpl=w$i;class Qw0{bucket;sm;prefixLen;codec;constructor(i,u,t,f){this.bucket=i,this.prefixLen=u,this.sm=t,this.codec=f}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(Hw0.kvOperationHdr)||"PUT"}get length(){let i=this.sm.header.get(dl.JsHeaders.MessageSizeHdr)||"";if(i!=="")return parseInt(i,10);return this.sm.data.length}json(i){return JSON.parse(ml.TD.decode(this.value),i)}string(){return ml.TD.decode(this.value)}}class zw0{bucket;sm;prefixLen;update;codec;constructor(i,u,t,f,l){this.bucket=i,this.prefixLen=u,this.sm=t,this.update=f,this.codec=l}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,ml.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(Hw0.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let i=this.sm.headers?.get(dl.JsHeaders.MessageSizeHdr)||"";if(i!=="")return parseInt(i,10);return this.sm.data.length}get isUpdate(){return this.update}json(i){return JSON.parse(ml.TD.decode(this.value),i)}string(){return ml.TD.decode(this.value)}}});var Qai=K((mh)=>{Object.defineProperty(mh,"__esModule",{value:!0});mh.validateKey=mh.validateBucket=mh.NoopKvCodecs=mh.Kvm=mh.defaultBucketOpts=mh.Bucket=mh.Base64KeyCodec=mh.KvWatchInclude=mh.kvPrefix=void 0;var Cw0=Wai();Object.defineProperty(mh,"kvPrefix",{enumerable:!0,get:function(){return Cw0.kvPrefix}});Object.defineProperty(mh,"KvWatchInclude",{enumerable:!0,get:function(){return Cw0.KvWatchInclude}});var YN=bw0();Object.defineProperty(mh,"Base64KeyCodec",{enumerable:!0,get:function(){return YN.Base64KeyCodec}});Object.defineProperty(mh,"Bucket",{enumerable:!0,get:function(){return YN.Bucket}});Object.defineProperty(mh,"defaultBucketOpts",{enumerable:!0,get:function(){return YN.defaultBucketOpts}});Object.defineProperty(mh,"Kvm",{enumerable:!0,get:function(){return YN.Kvm}});Object.defineProperty(mh,"NoopKvCodecs",{enumerable:!0,get:function(){return YN.NoopKvCodecs}});Object.defineProperty(mh,"validateBucket",{enumerable:!0,get:function(){return YN.validateBucket}});Object.defineProperty(mh,"validateKey",{enumerable:!0,get:function(){return YN.validateKey}})});var zai=K((E7)=>{Object.defineProperty(E7,"__esModule",{value:!0});E7.NoopKvCodecs=E7.Kvm=E7.defaultBucketOpts=E7.Bucket=E7.Base64KeyCodec=E7.KvWatchInclude=void 0;var bhf=Qai();Object.defineProperty(E7,"KvWatchInclude",{enumerable:!0,get:function(){return bhf.KvWatchInclude}});var vr=Qai();Object.defineProperty(E7,"Base64KeyCodec",{enumerable:!0,get:function(){return vr.Base64KeyCodec}});Object.defineProperty(E7,"Bucket",{enumerable:!0,get:function(){return vr.Bucket}});Object.defineProperty(E7,"defaultBucketOpts",{enumerable:!0,get:function(){return vr.defaultBucketOpts}});Object.defineProperty(E7,"Kvm",{enumerable:!0,get:function(){return vr.Kvm}});Object.defineProperty(E7,"NoopKvCodecs",{enumerable:!0,get:function(){return vr.NoopKvCodecs}})});function d$i(){let i=new TextEncoder,u=new TextDecoder;return{encode:(t)=>i.encode(JSON.stringify(t)),decode:(t)=>JSON.parse(u.decode(t))}}class Rai{options;kv=null;codec=d$i();constructor(i){this.options=i}async init(){let i=this.options.getJetStream();if(!i)return;this.kv=await new qw0.Kvm(i).create(Mhf,{storage:Mw0.StorageType.Memory})}async get(i,u){if(!this.kv)return null;try{let t=await this.kv.get(`${i}.${u}`);if(!t?.value?.length)return null;if(t.operation==="DEL"||t.operation==="PURGE")return null;return this.codec.decode(t.value)}catch{return null}}async set(i,u,t){if(!this.kv)return;try{await this.kv.put(`${i}.${u}`,this.codec.encode(t))}catch{}}async invalidate(i){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(t)=>{try{await this.kv.delete(`${t}.${i}`)}catch{}}))}teardown(){this.kv=null}}function qhf(i,u,t){if(t<=0)return!0;if(i===void 0)return!0;return u-i>=t}function h$i(i){return i instanceof Ku&&i.code===zu.MethodNotFound}function Vhf(i){return i instanceof Ku&&i.code===-32000&&/connection closed/i.test(i.message)}async function w7(i,u,t,f,l,c=0){if(!f)try{return await t()}catch(d){if(h$i(d))return[];return Dr.add(1,{type:i,outcome:"error",stage:"no_cache"}),null}let E=`${i}:${u}`,$=await f.get(i,u);if($===null)try{let d=await t();return f.set(i,u,d).catch(()=>{}),Hai.set(E,Date.now()),Dr.add(1,{type:i,outcome:"miss",stage:"miss"}),d}catch(d){if(h$i(d))return f.set(i,u,[]).catch(()=>{}),[];return Dr.add(1,{type:i,outcome:"error",stage:"miss"}),null}if(Dr.add(1,{type:i,outcome:"hit",stage:"hit"}),qhf(Hai.get(E),Date.now(),c)&&!_$i.has(E)){_$i.add(E),Hai.set(E,Date.now());let d=t().then((h)=>f.set(i,u,h)).catch((h)=>{if(h$i(h)||Vhf(h)){if(h$i(h))f.set(i,u,[]).catch(()=>{});return}Dr.add(1,{type:i,outcome:"error",stage:"revalidation"})}).finally(()=>_$i.delete(E));l?.(d)}return $}function bai(i){Vw0=i}function v1(){return Vw0}var Mw0,qw0,Dr,Mhf="DECOCMS_MCP_LISTS",_$i,Hai,$7=30000,Vw0=null;var td=g(()=>{Kl();jl();Mw0=S(N2(),1),qw0=S(zai(),1),Dr=Ft.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});_$i=new Set;Ft.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback((i)=>i.observe(_$i.size));Hai=new Map});var nr=(i,u)=>{if(u===null||u===void 0)return;let t=i.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),f=u;for(let l of t){if(f===null||f===void 0||typeof f!=="object")return;f=f[l]}return f};function v$i(i){let u=i.split("::");if(u.length!==2||!u[0]||!u[1])throw Error(`Invalid scope format: ${i}. Expected format: "KEY::SCOPE"`);return u}function rhf(i){try{return v$i(i)}catch{return null}}function mhf(i){if(typeof i==="object"&&i!==null&&"value"in i){let u=i.value;if(typeof u==="string")return u}return null}function Cai(i,u){let t={};if(!i||!u)return t;for(let f of u){if(f==="*"){t["*"]=["*"];continue}let l=rhf(f);if(!l)continue;let[c,E]=l,$=nr(c,i),w=mhf($);if(w){if(!t[w])t[w]=[];t[w].push(E)}}return t}function rw0(i,u){let t=Cai(i,u);return new Set(Object.keys(t).filter((f)=>f!=="*"))}var Mai=()=>{};async function mw0(i){if(!i.refreshToken)return{success:!1,permanent:!1,error:"No refresh token available"};if(!i.tokenEndpoint)return{success:!1,permanent:!1,error:"No token endpoint available"};if(!i.clientId)return{success:!1,permanent:!1,error:"No client ID available"};try{let u=new URLSearchParams({grant_type:"refresh_token",refresh_token:i.refreshToken,client_id:i.clientId});if(i.clientSecret)u.set("client_secret",i.clientSecret);if(i.scope)u.set("scope",i.scope);let t=await fetch(i.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:u.toString()});if(!t.ok){let l=await t.text(),c,E;try{let w=JSON.parse(l);c=w.error,E=w.error_description}catch{}let $=t.status===400&&!!c&&ehf.has(c);return($?console.error:console.warn)("[TokenRefresh] refresh failed",{connectionId:i.connectionId,tokenEndpoint:i.tokenEndpoint,status:t.status,errorCode:c,errorDescription:E,permanent:$}),{success:!1,permanent:$,status:t.status,errorCode:c,error:E||c||`Token refresh failed: ${t.status}`}}let f=await t.json();return{success:!0,accessToken:f.access_token,refreshToken:f.refresh_token||i.refreshToken,expiresIn:f.expires_in,scope:f.scope}}catch(u){return console.warn("[TokenRefresh] network/parse error",{connectionId:i.connectionId,tokenEndpoint:i.tokenEndpoint,message:u instanceof Error?u.message:String(u)}),{success:!1,permanent:!1,error:u instanceof Error?u.message:"Token refresh failed"}}}var ehf;var ew0=g(()=>{ehf=new Set(["invalid_grant","bad_refresh_token"])});import{createHash as ahf,randomBytes as ohf,timingSafeEqual as mUl}from"crypto";function phf(i){return i.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Vai(i){return ahf("sha256").update(i).digest("hex")}function sw0(i){let u=qai.length+1,t=u+ow0;if(!i.startsWith(`${qai}_`)||i.length<=t+1||i[t]!=="_")return null;let f=i.slice(u,t),l=i.slice(t+1);if(!aw0.test(f)||!aw0.test(l))return null;return f}function pw0(){let i=phf(ohf(shf)),u=i.slice(0,ow0),t=`${qai}_${u}_${i}`;return{plaintext:t,prefix:u,hash:Vai(t)}}var qai="stv",shf=32,ow0=12,aw0;var id0=g(()=>{aw0=/^[A-Za-z0-9_-]+$/});function ud0(i){return{id:i.id,organizationId:i.organization_id,subjectConnectionId:i.subject_connection_id,tokenHash:i.token_hash,tokenPrefix:i.token_prefix,name:i.name,revokedAt:i.revoked_at,lastUsedAt:i.last_used_at,createdAt:i.created_at,updatedAt:i.updated_at}}class rai{db;constructor(i){this.db=i}async createOrRotateWorkloadToken(i){let u=i.name??"default";return await this.db.transaction().execute(async(f)=>{if(!await f.selectFrom("connections").select("id").where("id","=",i.subjectConnectionId).where("organization_id","=",i.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let c=pw0(),E=new Date().toISOString();await f.updateTable("connection_workload_tokens").set({revoked_at:E,updated_at:E}).where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("name","=",u).where("revoked_at","is",null).execute();let $=await f.insertInto("connection_workload_tokens").values({id:Jf("cwt"),organization_id:i.organizationId,subject_connection_id:i.subjectConnectionId,token_hash:c.hash,token_prefix:c.prefix,name:u,revoked_at:null,last_used_at:null,created_at:E,updated_at:E}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:c.plaintext,record:ud0($)}})}async findActiveWorkloadToken(i){let u=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("name","=",i.name??"default").where("revoked_at","is",null).executeTakeFirst();return u?ud0(u):null}async revokeWorkloadToken(i){let u=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:u,updated_at:u}).where("id","=",i.tokenId).where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken(i){let u=sw0(i);if(!u)return null;let t=Vai(i),f=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",u).where("token_hash","=",t).where("revoked_at","is",null).executeTakeFirst();if(!f)return null;let l=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:l,updated_at:l}).where("id","=",f.id).execute(),{tokenId:f.id,tokenPrefix:f.token_prefix,organizationId:f.organization_id,subjectConnectionId:f.subject_connection_id}}async replaceGrantsForSubject(i){await this.db.transaction().execute(async(u)=>{if(!await u.selectFrom("connections").select("id").where("id","=",i.subjectConnectionId).where("organization_id","=",i.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let f=[...new Set(i.grants.map((E)=>E.targetConnectionId))];if(f.length>0){if((await u.selectFrom("connections").select("id").where("organization_id","=",i.organizationId).where("id","in",f).execute()).length!==f.length)throw Error("Referenced connection not found in organization")}if(await u.deleteFrom("connection_credential_grants").where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).execute(),i.grants.length===0)return;let l=new Date().toISOString(),c=i.grants.map((E)=>({id:Jf("ccg"),organization_id:i.organizationId,subject_connection_id:i.subjectConnectionId,target_connection_id:E.targetConnectionId,scope:E.scope,created_by:i.createdBy,created_at:l,updated_at:l}));await u.insertInto("connection_credential_grants").values(c).execute()})}async hasGrant(i){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("target_connection_id","=",i.targetConnectionId).where("scope","=",i.scope).executeTakeFirst()}}var D$i="credential:access-token:read",n$i="credential:configuration:read";var g$i=g(()=>{c$();id0()});function QN(i){let u=String(i??"");if(u&&!u.includes("T"))return u.replace(" ","T")+"Z";return u}function j0(i){return i.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function at(i){let u=Number(i??0);return Number.isFinite(u)?u:0}function u_f(i){if(!i_f.has(i))throw Error(`Invalid groupByColumn: ${i}`);return i}function mai(i){if(!t_f.test(i))throw Error(`Invalid JSONPath: ${i}`);if(i.startsWith("$."))return i;if(i.startsWith("."))return`$${i}`;return`$.${i}`}function sai(i){return i.replace(/^\$\./,"").split(".").map((t)=>`'${j0(t)}'`).join(", ")}function c_f(i){let u=f_f.exec(i);if(!u||!u[1]||!u[2])throw Error(`Invalid interval: ${i}`);let t=parseInt(u[1],10),f=u[2],l=l_f[f];if(t<1||t>l)throw Error(`Invalid interval amount: ${t}${f} (max ${l}${f})`);return{amount:t,unit:f}}function d7(i,u,t="timestamp"){let{amount:f,unit:l}=c_f(i),E={m:"MINUTE",h:"HOUR",d:"DAY"}[l];if(u==="duckdb")return`time_bucket(INTERVAL '${f} ${E}', CAST(${t} AS TIMESTAMP))`;return`toStartOfInterval(${t}, INTERVAL ${f} ${E})`}function gr(i,u,t){if(t==="duckdb")return`json_extract_string(${i}, '${u}')`;let f=sai(u);return`JSONExtractString(${i}, ${f})`}function E_f(i,u,t){if(t==="duckdb")return`CAST(json_extract_string(${i}, '${u}') AS DOUBLE)`;let f=sai(u);return`JSONExtractFloat(${i}, ${f})`}function td0(i,u,t){if(t==="duckdb")return`TRY_CAST(json_extract_string(${i}, '${u}') AS DOUBLE)`;let f=sai(u);return`toFloat64OrZero(JSONExtractString(${i}, ${f}))`}function eai(i){if(i===null||i===void 0)return{};if(typeof i==="object")return i;let u=String(i);try{return JSON.parse(u)}catch{return{_decocms_truncated:u}}}function aai(i){return{id:String(i.id??""),organizationId:String(i.organization_id??""),connectionId:String(i.connection_id??""),toolName:String(i.tool_name??""),input:eai(i.input),output:eai(i.output),isError:i.is_error===1||i.is_error===!0||i.is_error==="1"||typeof i.is_error==="bigint"&&i.is_error===1n,errorMessage:i.error_message!=null?String(i.error_message):null,durationMs:Number(i.duration_ms??0),timestamp:(()=>{if(i.timestamp instanceof Date)return i.timestamp.toISOString();let u=String(i.timestamp??""),t=new Date(u.includes("T")?u:u.replace(" ","T")+"Z");return Number.isNaN(t.getTime())?u:t.toISOString()})(),userId:i.user_id!=null?String(i.user_id):null,requestId:String(i.request_id??""),userAgent:i.user_agent!=null?String(i.user_agent):null,virtualMcpId:i.virtual_mcp_id!=null?String(i.virtual_mcp_id):null,properties:i.properties?eai(i.properties):null}}function Ed0(i,u){let t=[];if(i.properties)for(let[f,l]of Object.entries(i.properties)){let c=j0(f),E=j0(l);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${c}') = '${E}'`);else t.push(`JSONExtractString(properties, '${c}') = '${E}'`)}if(i.propertyKeys)for(let f of i.propertyKeys){let l=j0(f);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${l}') IS NOT NULL AND json_extract_string(properties, '$.${l}') != ''`);else t.push(`JSONExtractString(properties, '${l}') IS NOT NULL AND JSONExtractString(properties, '${l}') != ''`)}if(i.propertyPatterns)for(let[f,l]of Object.entries(i.propertyPatterns)){let c=j0(f),E=j0(l);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${c}') ILIKE '${E}'`);else t.push(`JSONExtractString(properties, '${c}') ILIKE '${E}'`)}if(i.propertyInValues)for(let[f,l]of Object.entries(i.propertyInValues)){let c=j0(f),E=j0(l);if(u==="duckdb")t.push(`list_contains(string_split(json_extract_string(properties, '$.${c}'), ','), '${E}')`);else t.push(`has(splitByChar(',', JSONExtractString(properties, '${c}')), '${E}')`)}return t}function ld0(i,u){let t=[];if(ah(t,u?.startDate,i),!u)return t;if(u.connectionIds?.length){let f=u.connectionIds.map((l)=>`'${j0(l)}'`).join(",");t.push(`connection_id IN (${f})`)}if(u.toolNames?.length){let f=u.toolNames.map((l)=>`'${j0(l)}'`).join(",");t.push(`tool_name IN (${f})`)}if(u.virtualMcpIds?.length){let f=u.virtualMcpIds.map((l)=>`'${j0(l)}'`).join(",");t.push(`virtual_mcp_id IN (${f})`)}if(u.endDate)t.push(eh(u.endDate,i));if(u.propertyFilters)t.push(...Ed0(u.propertyFilters,i));return t}function cd0(i,u,t="timestamp"){if(u==="duckdb")return`CAST(${t} AS TIMESTAMP) >= TIMESTAMP '${i.toISOString()}'`;if(t==="bucket")return`${t} >= parseDateTimeBestEffort('${i.toISOString()}')`;return`${t} >= parseDateTime64BestEffort('${i.toISOString()}', 9)`}function eh(i,u,t="timestamp"){if(u==="duckdb")return`CAST(${t} AS TIMESTAMP) <= TIMESTAMP '${i.toISOString()}'`;if(t==="bucket")return`${t} <= parseDateTimeBestEffort('${i.toISOString()}')`;return`${t} <= parseDateTime64BestEffort('${i.toISOString()}', 9)`}function ah(i,u,t,f="timestamp"){if(u)i.push(cd0(u,t,f));else if(t==="clickhouse")i.push(cd0(new Date(Date.now()-$_f),t,f))}class pai{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor(i,u,t,f,l="clickhouse",c=!1){this.engine=i;this.sourceFactory=u;this.metricEngine=t;this.metricSourceFactory=f;this.dialect=l;this.metricsFromLogs=c}async query(i){if(!i.organizationId)throw Error("organizationId is required");let u=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),t=[`organization_id = '${j0(i.organizationId)}'`];if(i.connectionId)t.push(`connection_id = '${j0(i.connectionId)}'`);if(i.excludeConnectionIds?.length){let v=i.excludeConnectionIds.map((D)=>`'${j0(D)}'`).join(",");t.push(`connection_id NOT IN (${v})`)}if(i.virtualMcpId)t.push(`virtual_mcp_id = '${j0(i.virtualMcpId)}'`);if(i.toolName)t.push(`tool_name = '${j0(i.toolName)}'`);if(i.isError!==void 0)t.push(`is_error = ${i.isError?1:0}`);if(ah(t,i.startDate,this.dialect),i.endDate)t.push(eh(i.endDate,this.dialect));if(i.propertyFilters)t.push(...Ed0(i.propertyFilters,this.dialect));let f=1000,l=Math.min(Math.max(1,Math.floor(i.limit??50)),f),c=Math.max(0,Math.floor(i.offset??0)),E=t.join(" AND ");if(this.dialect==="duckdb"){let v=`SELECT ${fd0}, count(*) OVER () AS _total FROM ${u} WHERE ${E} ORDER BY timestamp DESC LIMIT ${l} OFFSET ${c}`,D=await this.engine.query(v);if(D.length===0)return{logs:[],total:0};let n=Number(D[0]._total??0);return{logs:D.map(aai),total:n}}let $=`SELECT count(*) AS total FROM ${u} WHERE ${E}`,w=`SELECT ${fd0} FROM ${u} WHERE ${E} ORDER BY timestamp DESC LIMIT ${l} OFFSET ${c}`,[d,h]=await Promise.all([this.engine.query($),this.engine.query(w)]),_=Number(d[0]?.total??0);return{logs:h.map(aai),total:_}}async getById(i,u){if(!i||!u)return null;let f=`SELECT * FROM ${this.sourceFactory(i)} WHERE organization_id = '${j0(i)}' AND id = '${j0(u)}' LIMIT 1`,l=await this.engine.query(f);if(l.length===0)return null;return aai(l[0])}async getStats(i){if(!i.organizationId)throw Error("organizationId is required");let u=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),t=[`organization_id = '${j0(i.organizationId)}'`];if(ah(t,i.startDate,this.dialect),i.endDate)t.push(eh(i.endDate,this.dialect));let f=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${u} WHERE ${t.join(" AND ")}`,c=(await this.engine.query(f))[0]??{};return{totalCalls:Number(c.total_calls??0),errorRate:Number(c.error_rate??0),avgDurationMs:Number(c.avg_duration_ms??0)}}async queryLlmUsageStats(i){let u={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!i.organizationId||!i.connectionId)return u;let t=this.dialect,f=t==="clickhouse",l=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),c=d7(i.interval,t,"timestamp"),E=(y)=>`coalesce(${td0("properties",`$.${y}`,t)}, 0)`,$=f?"count()":"count(*)",w=f?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",d=(y)=>f?`quantile(${y})(duration_ms)`:`quantile_cont(duration_ms, ${y})`,h=[`organization_id = '${j0(i.organizationId)}'`,`connection_id = '${j0(i.connectionId)}'`];if(ah(h,i.startDate,t),i.endDate)h.push(eh(i.endDate,t));if(i.userIds?.length){let y=i.userIds.slice(0,100).map((Z)=>`'${j0(Z)}'`).join(",");h.push(`user_id IN (${y})`)}let _=h.join(" AND "),v=Math.min(Math.max(1,Math.floor(i.topN??5)),20),D=`${$} AS calls,
|
|
86185
|
+
</workflows>`,a$0;var o$0=g(()=>{jt();a$0={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=chart-2",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:m3f,getId:B6.USAGE_MANAGER}});function Uai(i){return JN.find((u)=>i.startsWith(`${u.id}_`))??null}async function e3f(i,u){if("resolveRuntime"in i)return i.resolveRuntime(u);return{instructions:i.instructions,selectedTools:i.selectedTools}}async function u$i({virtualMcp:i,agentId:u=i.id,organizationId:t,ctx:f}){let l=Uai(u);if(!l)return i;let c=await e3f(l,{orgId:t,ctx:f}),E=c.selectedTools?[...c.selectedTools]:null;return{...i,metadata:{...i.metadata??{},instructions:c.instructions},connections:i.connections.map(($)=>({...$,selected_tools:E}))}}async function t$i(i,u){if(!("checklist"in i))return[];return Promise.all(i.checklist.map(async(t)=>({label:t.label,activeForm:t.activeForm,action:t.action,completed:await t.isCompleted(u),alwaysSuggest:t.alwaysSuggest})))}async function s$0(i,u,t){let f={self:_4.SELF(i),registry:_4.REGISTRY(i),"community-registry":_4.COMMUNITY_REGISTRY(i)};await Promise.all(JN.map(async(l)=>{let c=l.getId(i),E=await t.findById(c,i),w=(l.selectedConnections??["self"]).map((d)=>f[d]);if(E){await t.update(c,u,{metadata:{...E.metadata??{},instructions:l.instructions},connections:w.map((d)=>{let h=E.connections.find((_)=>_.connection_id===d);return{connection_id:d,selected_tools:l.selectedTools?[...l.selectedTools]:null,selected_resources:h?.selected_resources??null,selected_prompts:h?.selected_prompts??null}})});return}await t.create(i,u,{title:l.title,description:l.description,icon:l.icon,status:"active",pinned:!1,metadata:{instructions:l.instructions},connections:w.map((d)=>({connection_id:d,selected_tools:l.selectedTools?[...l.selectedTools]:null,selected_resources:null,selected_prompts:l.selectedPrompts?[...l.selectedPrompts]:null}))},{id:c})}))}var JN;var FY=g(()=>{jt();L$0();Y$0();z$0();C$0();q$0();r$0();e$0();o$0();JN=[b$0,X$0,Q$0,M$0,W$0,V$0,m$0,a$0]});import{DBOS as f$i}from"@dbos-inc/dbos-sdk";async function a3f(i){let u=Ut(),t=new BY(u.db);await s$0(i.orgId,i.createdBy,t)}async function o3f(i){let u=Ut(),t=new BY(u.db);for(let f of JN){let l=f.getId(i.orgId),c=await t.findById(l,i.orgId);if(!c)continue;let E=f.selectedPrompts?[...f.selectedPrompts]:null;if(c.connections.every((w)=>{let d=w.selected_prompts;if(E===null)return d===null;if(d===null)return!1;if(d.length!==E.length)return!1;return d.every((h,_)=>h===E[_])}))continue;await t.update(l,i.createdBy,{connections:c.connections.map((w)=>({connection_id:w.connection_id,selected_tools:w.selected_tools,selected_resources:w.selected_resources,selected_prompts:E}))})}}async function s3f(i){await f$i.runStep(()=>a3f(i),{name:"installStudioPack"}),await f$i.runStep(()=>o3f(i),{name:"backfillSelectedPrompts"})}async function Pai(i){await f$i.startWorkflow(p3f,{workflowID:`install-studio-pack:${ihf}:${i.orgId}`})(i)}async function p$0(){let u=await Ut().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),t=new Map;for(let f of u)if(!t.has(f.organizationId))t.set(f.organizationId,f.userId);await Promise.all(Array.from(t).map(async([f,l])=>{try{await Pai({orgId:f,createdBy:l})}catch(c){console.error("[studio-pack-backfill] enqueue failed",{orgId:f},c)}}))}var p3f,ihf="v5";var l$i=g(()=>{cE();Fai();FY();p3f=f$i.registerWorkflow(s3f,{name:"installStudioPackWorkflow"})});import{jwtVerify as uhf,SignJWT as iw0}from"jose";import{randomBytes as thf}from"crypto";function uw0(){if($r)return $r;let i=yu(),u=i.meshJwtSecret??i.betterAuthSecret;if(u)$r=new TextEncoder().encode(u);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),$r=new Uint8Array(thf(32));return $r}async function tw0(i,u="5m"){let t=uw0();return await new iw0(i).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(u).sign(t)}async function Aai(i){try{let u=uw0(),{payload:t}=await uhf(i,u);return t}catch{return}}async function f7(i,u,t=3600){let f=yu(),l=f.meshJwtSecret??f.betterAuthSecret;if(!l)throw Error("A deterministic JWT secret is required to mint gateway JWTs \u2014 set MESH_JWT_SECRET or BETTER_AUTH_SECRET");let c=new TextEncoder().encode(l);return await new iw0({iss:"mesh",sub:i,...u&&{email:u}}).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Math.floor(Date.now()/1000)+t).sign(c)}var $r=null;var XN=g(()=>{vt()});class wr{constructor(){this._messageQueue=[]}static createLinkedPair(){let i=new wr,u=new wr;return i._otherTransport=u,u._otherTransport=i,[i,u]}async start(){while(this._messageQueue.length>0){let i=this._messageQueue.shift();this.onmessage?.(i.message,i.extra)}}async close(){let i=this._otherTransport;this._otherTransport=void 0,await i?.close(),this.onclose?.()}async send(i,u){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage(i,{authInfo:u?.authInfo});else this._otherTransport._messageQueue.push({message:i,extra:{authInfo:u?.authInfo}})}}import{SpanStatusCode as fw0}from"@opentelemetry/api";function ti(i){return{...i,execute:async(u,t)=>{return await t.timings.measure(`tool.${i.name}`,async()=>t.tracer.startActiveSpan(`tool.${i.name}`,{attributes:{"tool.name":i.name,"organization.id":t.organization?.id??"system","user.id":t.auth.user?.id??t.auth.apiKey?.userId??"anonymous"}},async(f)=>{try{t.toolName=i.name,t.access.setToolName?.(i.name);let l=await i.handler(u,t);return f.setStatus({code:fw0.OK}),l}catch(l){throw f.setStatus({code:fw0.ERROR,message:l.message}),f.recordException(l),l}finally{f.end()}}))}}}var Eu=()=>{};function yi(i){if(!i.organization)throw Error("This operation requires organization scope");return i.organization}function Hu(i){return i.auth.user?.id??i.auth.apiKey?.userId}function fhf(i){return!!(i.auth.user||i.auth.apiKey)}function ki(i){if(!fhf(i))throw Error("Authentication required")}import{z as Df}from"zod";var c$i,lw0,cw0,Ew0,$w0,ww0,dw0,hw0,_w0,vw0;var UY=g(()=>{c$i=Df.record(Df.string(),Df.array(Df.string())),lw0=Df.object({id:Df.string().describe("Unique identifier for the API key"),name:Df.string().describe("Human-readable name for the API key"),userId:Df.string().describe("ID of the user who owns this API key"),permissions:c$i.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:Df.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:Df.string().datetime().describe("When the API key was created (ISO 8601)")}),cw0=Df.object({name:Df.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:c$i.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:Df.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:Df.record(Df.string(),Df.unknown()).optional().describe("Additional metadata to store with the API key")}),Ew0=Df.object({id:Df.string().describe("Unique identifier for the API key"),name:Df.string().describe("Human-readable name for the API key"),key:Df.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:c$i.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:Df.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:Df.string().datetime().describe("When the API key was created (ISO 8601)")}),$w0=Df.object({}),ww0=Df.object({items:Df.array(lw0).describe("List of API keys (without key values)")}),dw0=Df.object({keyId:Df.string().describe("ID of the API key to update"),name:Df.string().min(1).max(64).optional().describe("New name for the API key"),permissions:c$i.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:Df.record(Df.string(),Df.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),hw0=Df.object({item:lw0.describe("The updated API key (without key value)")}),_w0=Df.object({keyId:Df.string().describe("ID of the API key to delete")}),vw0=Df.object({success:Df.boolean().describe("Whether the deletion was successful"),keyId:Df.string().describe("ID of the deleted API key")})});var Iai;var Dw0=g(()=>{H4();Eu();UY();Iai=ti({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:cw0,outputSchema:Ew0,handler:async(i,u)=>{ki(u),await u.access.check();let t=await u.boundAuth.apiKey.create({name:i.name,permissions:i.permissions,expiresIn:i.expiresIn,metadata:{...i.metadata,organization:u.organization}}),f=t.expiresAt?t.expiresAt instanceof Date?t.expiresAt.toISOString():t.expiresAt:null,l=t.createdAt instanceof Date?t.createdAt.toISOString():t.createdAt,c=Hu(u);if(c)mu.capture({distinctId:c,event:"api_key_created",...u.organization?.id?{groups:{organization:u.organization.id}}:{},properties:{key_id:t.id,key_name:t.name??i.name,organization_id:u.organization?.id,has_expiry:!!f}});return{id:t.id,name:t.name??i.name,key:t.key,permissions:t.permissions??{},expiresAt:f,createdAt:l}}})});var xai;var nw0=g(()=>{H4();Eu();UY();xai=ti({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_w0,outputSchema:vw0,handler:async(i,u)=>{ki(u),await u.access.check();let t=Hu(u);if(!t)throw Error("User ID required to delete API key");let l=(await u.boundAuth.apiKey.list())?.find((w)=>w.id===i.keyId);if(!l)throw Error("API key not found");let E=l.metadata?.organization?.id,$=u.organization?.id;if(E!==$)throw Error("Cannot delete API key from another organization");if(await u.boundAuth.apiKey.delete(i.keyId),$)mu.capture({distinctId:t,event:"api_key_deleted",groups:{organization:$},properties:{key_id:i.keyId,organization_id:$}});return{success:!0,keyId:i.keyId}}})});var kai;var gw0=g(()=>{Eu();UY();kai=ti({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:$w0,outputSchema:ww0,handler:async(i,u)=>{ki(u),await u.access.check();let t=await u.boundAuth.apiKey.list(),f=u.organization?.id;return{items:(t??[]).filter((c)=>{return c.metadata?.organization?.id===f}).map((c)=>({id:c.id,name:c.name??"Unnamed Key",userId:c.userId,permissions:c.permissions??{},expiresAt:c.expiresAt?c.expiresAt instanceof Date?c.expiresAt.toISOString():c.expiresAt:null,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():c.createdAt}))}}})});var Gai;var Ow0=g(()=>{Eu();UY();Gai=ti({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:dw0,outputSchema:hw0,handler:async(i,u)=>{if(ki(u),await u.access.check(),!Hu(u))throw Error("User ID required to update API key");let l=(await u.boundAuth.apiKey.list())?.find((d)=>d.id===i.keyId);if(!l)throw Error(`API key not found: ${i.keyId}`);let E=l.metadata?.organization?.id,$=u.organization?.id;if(E!==$)throw Error("Cannot update API key from another organization");let w=await u.boundAuth.apiKey.update({keyId:i.keyId,name:i.name,permissions:i.permissions,metadata:{...i.metadata,organization:u.organization}});if(!w)throw Error(`Failed to update API key: ${i.keyId}`);return{item:{id:w.id,name:w.name??i.name??"Unnamed Key",userId:w.userId,permissions:w.permissions??{},expiresAt:w.expiresAt?w.expiresAt instanceof Date?w.expiresAt.toISOString():w.expiresAt:null,createdAt:w.createdAt instanceof Date?w.createdAt.toISOString():w.createdAt}}}})});var Nw0=g(()=>{Dw0();nw0();gw0();Ow0();UY()});function l7(i){let u=i.trim();if(!u)return{ok:!1,error:"Enter a website URL."};let t=chf.test(u),f=Ehf.test(u),l=$hf.test(u);if(t&&!f&&!l)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let c=f?u:`https://${u}`,E;try{E=new URL(c)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(E.protocol!=="http:"&&E.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let $=E.hostname.split(".");if($.length<2||$.some((w)=>!w||!whf.test(w)))return{ok:!1,error:"Enter a valid website URL."};return E.protocol="https:",{ok:!0,value:E.origin}}var chf,Ehf,$hf,whf;var dr=g(()=>{chf=/^[a-zA-Z][a-zA-Z\d+.-]*:/,Ehf=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,$hf=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,whf=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as E$}from"zod";function LN(i){if(i.baseUrl)return i.baseUrl.replace(/\/+$/,"");return((i.settings??yu()).commerceDiscoveryInternalApiUrl??dhf).replace(/\/+$/,"")}function Zw0(i={}){return`${LN(i)}/api/v2/mcp`}function WN(i){let u=i.apiKey??(i.settings??yu()).commerceDiscoveryInternalApiKey;if(!u)throw Error("COMMERCE_DISCOVERY_INTERNAL_API_KEY is required to set up Commerce Discovery.");return u}function E$i(i){return new URL(i).hostname}function _hf(i){return i==="ownership_unverified"||i==="already_claimed_by_other_org"}function vhf(i,u={}){switch(i){case"ownership_unverified":{let t=u.email?`O e-mail ${u.email}`:"Este e-mail",f=u.domain?` ${u.domain}`:" este site";return`${t} n\xE3o tem permiss\xE3o para reivindicar${f}. Use um e-mail do dom\xEDnio do site ou pe\xE7a ao suporte para autorizar seu dom\xEDnio.`}case"already_claimed_by_other_org":return"Este site j\xE1 pertence a outra organiza\xE7\xE3o. Fale com o suporte para transferir o acesso.";case"unknown":return"N\xE3o foi poss\xEDvel configurar o Commerce Discovery. Tente novamente ou fale com o suporte.";default:return i}}async function Dhf(i){let u=await i.text().catch(()=>"");if(!u)return"unknown";try{let t=JSON.parse(u);return _hf(t.error)?t.error:"unknown"}catch{return"unknown"}}async function Sai(i){let u=`Commerce Discovery auth failed with status ${i.status}.`,t=await i.text().catch(()=>"");if(!t)return u;try{let f=JSON.parse(t),l=typeof f.error==="string"?f.error:typeof f.message==="string"?f.message:null;return l?`Commerce Discovery auth failed: ${l}.`:u}catch{return u}}async function Bw0(i,u={}){let t=LN(u),f=WN(u),l=u.fetchImpl??fetch,c=E$i(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/upgrade`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId,...i.orgName?{name:i.orgName}:{},...i.email?{email:i.email}:{},...i.reportUrl?{report_url:i.reportUrl}:{}})});if(!$.ok){let d=await Dhf($);throw new Tw0(d,{email:i.email,domain:c})}let w=hhf.safeParse(await $.json());if(!w.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:w.data.token}}async function Fw0(i,u={}){let t=LN(u),f=WN(u),l=u.fetchImpl??fetch,c=E$i(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/bindings`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId,provider:i.provider,resource_id:i.resourceId})});if($.status===409)return{ok:!1,reason:"resource_already_bound",detail:"Este recurso j\xE1 est\xE1 vinculado a outra loja. Se ele \xE9 seu, fale com o suporte para revis\xE3o manual."};if($.status===422){let d=yw0.safeParse(await $.json());return{ok:!1,reason:d.success?d.data.reason??"verification_failed":"verification_failed",detail:(d.success?d.data.detail:void 0)??"N\xE3o foi poss\xEDvel verificar o acesso a este recurso."}}if(!$.ok)throw Error(await Sai($));let w=yw0.safeParse(await $.json());if(!w.success||!w.data.binding)throw Error("Commerce Discovery bind response did not include a binding.");return{ok:!0,resourceId:w.data.binding.resource_id,evidence:w.data.binding.evidence}}async function Uw0(i,u={}){let t=LN(u),f=WN(u),l=u.fetchImpl??fetch,c=E$i(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/run`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId,...i.githubRepo?{github_repo:i.githubRepo}:{}})});if($.status===409)return{triggered:!1,reason:"not_upgraded"};if(!$.ok)throw Error(await Sai($));return{triggered:!0}}async function Pw0(i,u={}){let t=LN(u),f=WN(u),l=u.fetchImpl??fetch,c=E$i(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/connections/status?org_id=${encodeURIComponent(i.orgId)}`,$=await l(E,{method:"GET",headers:{Authorization:`Bearer ${f}`}});if($.status===404||$.status===409)return{};if(!$.ok)throw Error(await Sai($));let w=nhf.safeParse(await $.json());return w.success?w.data.providers:{}}var dhf,hhf,yw0,Tw0,nhf;var PY=g(()=>{jt();vt();dhf=new URL(Ari).origin,hhf=E$.object({token:E$.string().min(1)}),yw0=E$.object({binding:E$.object({resource_id:E$.string(),evidence:E$.string()}).optional(),reason:E$.string().optional(),detail:E$.string().optional()});Tw0=class Tw0 extends Error{code;constructor(i,u={}){super(vhf(i,u));this.name="CommerceDiscoveryClaimError",this.code=i}};nhf=E$.object({providers:E$.record(E$.string(),E$.object({connected:E$.boolean(),via:E$.enum(["oauth","sa"]).nullable(),resource:E$.string().nullable()}))})});import{z as ud}from"zod";var ghf,Ohf,jai;var Aw0=g(()=>{dr();Eu();PY();ghf=ud.object({siteUrl:ud.string().min(1).describe("Website URL of the store being bound."),provider:ud.enum(["ga4","gsc"]).describe("Which Google source to bind: ga4 (Analytics) or gsc (Search Console)."),resourceId:ud.string().min(1).describe("The resource id the client typed: GA4 numeric property id, or GSC site (sc-domain:example.com or https://example.com/).")}),Ohf=ud.discriminatedUnion("ok",[ud.object({ok:ud.literal(!0),resourceId:ud.string(),evidence:ud.string()}),ud.object({ok:ud.literal(!1),reason:ud.string(),detail:ud.string()})]),jai=ti({name:"COMMERCE_DISCOVERY_BIND",description:"Bind a GA4 property or GSC site to the org's store via the shared service account (consent-free lane). The client grants deco-reader@\u2026 access to the resource and provides its id; Commerce Discovery verifies the resource belongs to this domain before persisting. Returns ok:false with an actionable pt-BR detail when verification fails or the resource is already bound elsewhere.",annotations:{title:"Bind Commerce Discovery Data Source",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:ghf,outputSchema:Ohf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check();let f=l7(i.siteUrl);if(!f.ok)throw Error(f.error);return Fw0({siteUrl:f.value,orgId:t.id,provider:i.provider,resourceId:i.resourceId.trim()})}})});import{z as u8}from"zod";var Nhf,yhf,Kai;var Iw0=g(()=>{dr();Eu();PY();Nhf=u8.object({siteUrl:u8.string().min(1).describe("Website URL of the store to inspect.")}),yhf=u8.object({providers:u8.record(u8.string(),u8.object({connected:u8.boolean(),via:u8.enum(["oauth","sa"]).nullable(),resource:u8.string().nullable()}))}),Kai=ti({name:"COMMERCE_DISCOVERY_CONNECTION_STATUS",description:"Read per-provider connection status (ga4/gsc/vtex) for the org's store \u2014 { connected, via: oauth|sa, resource }. The single source of truth for whether a data source is connected, unifying the OAuth (Studio vault) and shared-SA binding lanes. Read-only.",annotations:{title:"Commerce Discovery Connection Status",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Nhf,outputSchema:yhf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check();let f=l7(i.siteUrl);if(!f.ok)throw Error(f.error);return{providers:await Pw0({siteUrl:f.value,orgId:t.id})}}})});import{z as hr}from"zod";var Zhf,Thf,Jai;var xw0=g(()=>{jt();dr();Eu();PY();Zhf=hr.object({siteUrl:hr.string().min(1).describe("Website URL to run the diagnostic for.")}),Thf=hr.object({triggered:hr.boolean(),reason:hr.string().optional()}),Jai=ti({name:"COMMERCE_DISCOVERY_RUN",description:"Trigger the Commerce Discovery diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:Zhf,outputSchema:Thf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check();let f=l7(i.siteUrl);if(!f.ok)throw Error(f.error);let l=_4.COMMERCE_DISCOVERY(t.id),E=(await u.storage.connections.findById(l,t.id))?.configuration_state,$=E&&typeof E==="object"&&typeof E.github_repo==="string"&&E.github_repo.length>0?E.github_repo:void 0;return Uw0({siteUrl:f.value,orgId:t.id,githubRepo:$})}})});var c7=g(()=>{o6i()});import{z as Gv}from"zod";async function Phf(i,u,t,f){let l=await i.storage.connections.findById(u,t);if(l)return l;throw f}async function Ahf(i,u,t,f){let l=await i.storage.virtualMcps.findById(u,t);if(l)return l;throw f}var Xai,Bhf=3600000,Fhf,Uhf,Lai;var kw0=g(()=>{jt();dr();Eu();kv();c7();PY();Xai=Iri,Fhf=Gv.object({siteUrl:Gv.string().min(1).describe("Website URL to configure.")}),Uhf=Gv.object({connection:U6,virtualMcp:P6,reportApp:Gv.object({connectionId:Gv.string(),virtualMcpId:Gv.string(),toolName:Gv.literal(Xai)}),created:Gv.object({connection:Gv.boolean(),virtualMcp:Gv.boolean()})});Lai=ti({name:"COMMERCE_DISCOVERY_SETUP",description:"Create or return the Commerce Discovery connection and virtual MCP for the current organization.",annotations:{title:"Set Up Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Fhf,outputSchema:Uhf,handler:async(i,u)=>{ki(u);let t=yi(u);await u.access.check("COLLECTION_CONNECTIONS_CREATE");let f=Hu(u);if(!f)throw Error("User ID required to set up Commerce Discovery");let l=l7(i.siteUrl);if(!l.ok)throw Error(l.error);let c=_4.COMMERCE_DISCOVERY(t.id),E=Xri(t.id),$=new URLSearchParams({virtualmcpid:E,main:`app:${c}:${Xai}`}),w={email:u.auth.user?.email,reportUrl:`${u.baseUrl}/${encodeURIComponent(t.slug??t.id)}/${crypto.randomUUID()}?${$.toString()}`},d=await u.storage.connections.findById(c,t.id),h={connection:!1,virtualMcp:!1},_=await Bw0({siteUrl:l.value,orgId:t.id,orgName:t.name,...w}),v=Zw0();if(d)console.log("[commerce-discovery] syncing connection to claimed site",{orgId:t.id,siteUrl:l.value,connectionId:c}),d=await u.storage.connections.update(d.id,{connection_url:v,connection_token:_.authorizationToken,metadata:{...d.metadata??{},siteUrl:l.value}});else{console.log("[commerce-discovery] creating connection",{orgId:t.id,siteUrl:l.value,connectionId:c});try{let N=Lri(t.id,_.authorizationToken,v);d=await u.storage.connections.create({...N,metadata:{...N.metadata??{},siteUrl:l.value},organization_id:t.id,created_by:f}),h.connection=!0}catch(N){d=await Phf(u,c,t.id,N)}}let D=await u.storage.virtualMcps.findById(E,t.id);if(!D){console.log("[commerce-discovery] creating virtual MCP",{orgId:t.id,siteUrl:l.value,connectionId:d.id,virtualMcpId:E});try{D=await u.storage.virtualMcps.create(t.id,f,Wri(t.id,d.id),{id:E}),h.virtualMcp=!0}catch(N){D=await Ahf(u,E,t.id,N)}}if(!D.pinned)D=await u.storage.virtualMcps.update(D.id,f,{pinned:!0});let n=await u.db.selectFrom("organization").select(["createdAt"]).where("id","=",t.id).executeTakeFirst();if((n?Date.now()-new Date(n.createdAt).getTime():Number.POSITIVE_INFINITY)<Bhf){if((await u.storage.organizationSettings.get(t.id))?.reports_only==null)await u.storage.organizationSettings.upsert(t.id,{reports_only:!0})}return{connection:d,virtualMcp:D,reportApp:{connectionId:d.id,virtualMcpId:D.id,toolName:Xai},created:h}}})});var Gw0=g(()=>{Aw0();Iw0();xw0();kw0()});var Wai=K((Sw0)=>{Object.defineProperty(Sw0,"__esModule",{value:!0});Sw0.kvPrefix=Sw0.KvWatchInclude=void 0;Sw0.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};Sw0.kvPrefix="KV_"});var bw0=K((Hw0)=>{Object.defineProperty(Hw0,"__esModule",{value:!0});Hw0.KvStatusImpl=Hw0.Bucket=Hw0.Kvm=Hw0.kvOperationHdr=void 0;Hw0.Base64KeyCodec=khf;Hw0.NoopKvCodecs=Yai;Hw0.defaultBucketOpts=Jw0;Hw0.validateKey=Xw0;Hw0.validateSearchKey=Lw0;Hw0.hasWildcards=Ww0;Hw0.validateBucket=$$i;var ml=rw(),dl=I1i(),rl=Wai();function khf(){let i=(u,t)=>{let f=[];for(let l of u.split("."))switch(l){case">":case"*":f.push(l);break;default:f.push(t(l));break}return f.join(".")};return{encode(u){return i(u,btoa)},decode(u){return i(u,atob)}}}function Yai(){return{key:{encode(i){return i},decode(i){return i}},value:{encode(i){return typeof i==="string"?new TextEncoder().encode(i):i},decode(i){return i}}}}function Jw0(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:Yai(),storage:dl.StorageType.File}}Hw0.kvOperationHdr="KV-Operation";var Kw0="$KV",Ghf=/^[-/=.\w]+$/,Shf=/^[-/=.>*\w]+$/,jhf=/^[-\w]+$/;function Xw0(i){if(i.startsWith(".")||i.endsWith(".")||!Ghf.test(i))throw Error(`invalid key: ${i}`)}function Lw0(i){if(i.startsWith(".")||i.endsWith(".")||i.includes("..")||!Shf.test(i))throw Error(`invalid key: ${i}`)}function Ww0(i){if(i.startsWith(".")||i.endsWith("."))throw Error(`invalid key: ${i}`);let u=i.split("."),t=!1;for(let f=0;f<u.length;f++)switch(u[f]){case"*":t=!0;break;case">":if(f!==u.length-1)throw Error(`invalid key: ${i}`);t=!0;break;default:}return t}function $$i(i){if(!jhf.test(i))throw Error(`invalid bucket name: ${i}`)}class Yw0{js;constructor(i){this.js=(0,dl.toJetStreamClient)(i)}create(i,u={}){return this.#i(i,u)}open(i,u={}){return u.bindOnly=!0,this.#i(i,u)}#i(i,u={}){let{ok:t,min:f}=this.js.nc.features.get(ml.Feature.JS_KV);if(!t)return Promise.reject(Error(`kv is only supported on servers ${f} or better`));if(u.bindOnly)return AY.bind(this.js,i,u);return AY.create(this.js,i,u)}list(){let i=(t)=>{let l=t.streams.filter((E)=>{return E.config.name.startsWith(rl.kvPrefix)});l.forEach((E)=>{E.config.sealed=E.config.sealed||!1,E.config.deny_delete=E.config.deny_delete||!1,E.config.deny_purge=E.config.deny_purge||!1,E.config.allow_rollup_hdrs=E.config.allow_rollup_hdrs||!1});let c="";if(l.length)c=this.js.nc.info?.cluster??"";return l.map((E)=>{return new w$i(E,c)})},u=`${this.js.prefix}.STREAM.LIST`;return new dl.ListerImpl(u,i,this.js)}}Hw0.Kvm=Yw0;class AY{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor(i,u,t){$$i(i),this.js=u,this.jsm=t,this.bucket=i,this.prefix=Kw0,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create(i,u,t={}){$$i(u);let f=await i.jetstreamManager(),l=new AY(u,i,f);return await l.init(t),l}static async bind(i,u,t={}){let f=i.getOptions()?.checkAPI||t.bindOnly===!1,l=await i.jetstreamManager(f),c={config:{allow_direct:t.allow_direct}};$$i(u);let E=new AY(u,i,l);return c.config.name=t.streamName??E.bucketName(),Object.assign(E,c),E.stream=c.config.name,E.codec=t.codec||Yai(),E.direct=c.config.allow_direct??!1,E.initializePrefixes(c),E}async init(i={}){let u=Object.assign(Jw0(),i);this.codec=u.codec;let t={};if(this.stream=t.name=i.streamName??this.bucketName(),t.retention=dl.RetentionPolicy.Limits,t.max_msgs_per_subject=u.history,u.max_bytes)t.max_bytes=u.max_bytes;if(t.max_msg_size=u.maxValueSize,t.storage=u.storage,i.placement)t.placement=i.placement;if(i.republish)t.republish=i.republish;if(i.description)t.description=i.description;if(i.markerTTL)t.allow_msg_ttl=!0,t.subject_delete_marker_ttl=(0,ml.nanos)(u.markerTTL);if(i.mirror){let d=Object.assign({},i.mirror);if(!d.name.startsWith(rl.kvPrefix))d.name=`${rl.kvPrefix}${d.name}`;t.mirror=d,t.mirror_direct=!0}else if(i.sources){let d=i.sources.map((h)=>{let _=Object.assign({},h),v=_.name.startsWith(rl.kvPrefix)?_.name.substring(rl.kvPrefix.length):_.name;if(!_.name.startsWith(rl.kvPrefix))_.name=`${rl.kvPrefix}${_.name}`;if(!h.external&&v!==this.bucket)_.subject_transforms=[{src:`$KV.${v}.>`,dest:`$KV.${this.bucket}.>`}];return _});t.sources=d,t.subjects=[this.subjectForBucket()]}else t.subjects=[this.subjectForBucket()];if(i.metadata)t.metadata=i.metadata;if(typeof i.compression==="boolean")t.compression=i.compression?dl.StoreCompression.S2:dl.StoreCompression.None;let f=this.js.nc,l=f.getServerVersion(),c=l?(0,ml.compare)(l,(0,ml.parseSemVer)("2.7.2"))>=0:!1;t.discard=c?dl.DiscardPolicy.New:dl.DiscardPolicy.Old;let{ok:E,min:$}=f.features.get(ml.Feature.JS_ALLOW_DIRECT);if(!E&&i.allow_direct===!0){let d=l?`${l.major}.${l.minor}.${l.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${d} - requires ${$}`))}if(i.allow_direct=typeof i.allow_direct==="boolean"?i.allow_direct:E,t.allow_direct=i.allow_direct,this.direct=t.allow_direct,t.num_replicas=u.replicas,u.ttl)t.max_age=(0,ml.nanos)(u.ttl);t.allow_rollup_hdrs=!0;let w;try{if(w=await this.jsm.streams.info(t.name),!w.config.allow_direct&&this.direct===!0)this.direct=!1}catch(d){if(d.message==="stream not found")w=await this.jsm.streams.add(t);else throw d}this.initializePrefixes(w)}initializePrefixes(i){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:u}=i.config;if(u){let t=u.name;if(t.startsWith(rl.kvPrefix))t=t.substring(rl.kvPrefix.length);if(u.external&&u.external.api!==""){let f=u.name.substring(rl.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${f}`,this.editPrefix=`${u.external.api}.$KV.${t}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${rl.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey(i,u=!1){let t=[];if(u){if(this.useJsPrefix)t.push(this.js.apiPrefix);if(this.editPrefix!=="")t.push(this.editPrefix);else t.push(this.prefix)}else if(this.prefix)t.push(this.prefix);return t.push(i),t.join(".")}fullKeyName(i){if(this.prefix!=="")return`${this.prefix}.${i}`;return`${Kw0}.${this.bucket}.${i}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey(i){let u=[];for(let t of i.split("."))switch(t){case">":case"*":u.push(t);break;default:u.push(this.codec.key.encode(t));break}return u.join(".")}decodeKey(i){let u=[];for(let t of i.split("."))switch(t){case">":case"*":u.push(t);break;default:u.push(this.codec.key.decode(t));break}return u.join(".")}validateKey=Xw0;validateSearchKey=Lw0;hasWildcards=Ww0;close(){return Promise.resolve()}dataLen(i,u){let t=u?u.get(dl.JsHeaders.MessageSizeHdr)||"":"";if(t!=="")return parseInt(t,10);return i.length}smToEntry(i){return new Qw0(this.bucket,this.prefixLen,i,this.codec)}jmToWatchEntry(i,u){return new zw0(this.bucket,this.prefixLen,i,u,this.codec)}async create(i,u,t){let f;try{let c={previousSeq:0},E=await this._put(i,u,c,t);return Promise.resolve(E)}catch(c){if(f=c,c instanceof dl.JetStreamApiError){let E=c;if(E.code!==dl.JetStreamApiCodes.StreamWrongLastSequence&&E.code!==dl.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(c)}}let l=0;try{let c=await this.get(i);if(c?.operation==="DEL"||c?.operation==="PURGE")return l=c!==null?c.revision:0,this._put(i,u,{previousSeq:l},t);else return Promise.reject(f)}catch(c){return Promise.reject(c)}}update(i,u,t,f){if(t<=0)throw Error("version must be greater than 0");return this.put(i,u,{previousSeq:t,timeout:f})}async _put(i,u,t={},f){let l=this.encodeKey(i);this.validateKey(l),u=this.codec.value.encode(u);let c={timeout:t?.timeout};if(t.previousSeq!==void 0){let E=(0,ml.headers)();c.headers=E,E.set(dl.PubHeaders.ExpectedLastSubjectSequenceHdr,`${t.previousSeq}`)}if(f)(c.headers||(0,ml.headers)()).set(dl.PubHeaders.MessageTTL,f);try{return(await this.js.publish(this.subjectForKey(l,!0),u,c)).seq}catch(E){return Promise.reject(E)}}put(i,u,t={}){return this._put(i,u,t)}async get(i,u){let t=this.encodeKey(i);this.validateKey(t);let f={last_by_subj:this.subjectForKey(t)};if(u&&u.revision>0)f={seq:u.revision};let l=null;try{if(this.direct)l=await this.jsm.direct.getMessage(this.bucketName(),f);else l=await this.jsm.streams.getMessage(this.bucketName(),f);if(l===null)return null;let c=this.smToEntry(l);if(c.rawKey!==t)return null;return c}catch(c){throw c}}purge(i,u){return this._deleteOrPurge(i,"PURGE",u)}delete(i,u){return this._deleteOrPurge(i,"DEL",u)}async purgeDeletes(i=1800000){let u=[],t=await this.history({key:">"});await(async()=>{for await(let E of t)if(E.operation==="DEL"||E.operation==="PURGE")u.push(E)})().then(),t.stop();let f=Date.now()-i,l=u.map((E)=>{let $=this.subjectForKey(E.key);if(E.created.getTime()>=f)return this.jsm.streams.purge(this.stream,{filter:$,keep:1});else return this.jsm.streams.purge(this.stream,{filter:$,keep:0})}),c=await Promise.all(l);return c.unshift({success:!0,purged:0}),c.reduce((E,$)=>{return E.purged+=$.purged,E})}async _deleteOrPurge(i,u,t){if(!this.hasWildcards(i))return this._doDeleteOrPurge(i,u,t);let f=await this.keys(i),l=[];for await(let c of f)if(l.push(this._doDeleteOrPurge(c,u)),l.length===100)await Promise.all(l),l.length=0;if(l.length>0)await Promise.all(l)}async _doDeleteOrPurge(i,u,t){let f=this.encodeKey(i);this.validateKey(f);let l=(0,ml.headers)();if(l.set(Hw0.kvOperationHdr,u),u==="PURGE"){let c=t;if(l.set(dl.JsHeaders.RollupHdr,dl.JsHeaders.RollupValueSubject),typeof c?.ttl==="string"&&c.ttl!=="")l.set(dl.PubHeaders.MessageTTL,`${c.ttl}`)}if(t?.previousSeq)l.set(dl.PubHeaders.ExpectedLastSubjectSequenceHdr,`${t.previousSeq}`);await this.js.publish(this.subjectForKey(f,!0),ml.Empty,{headers:l})}_buildCC(i,u,t={}){let l=(!Array.isArray(i)?[i]:i).map(($)=>{let w=this.encodeKey($);return this.validateSearchKey($),this.fullKeyName(w)}),c=dl.DeliverPolicy.LastPerSubject;if(u===rl.KvWatchInclude.AllHistory)c=dl.DeliverPolicy.All;if(u===rl.KvWatchInclude.UpdatesOnly)c=dl.DeliverPolicy.New;let E=void 0;if(l.length===1)E=l[0],l=void 0;return Object.assign({deliver_policy:c,ack_policy:dl.AckPolicy.None,filter_subjects:l,filter_subject:E,flow_control:!0,idle_heartbeat:(0,ml.nanos)(5000)},t)}remove(i){return this.purge(i)}async history(i={}){let u=i.key??">",t={};t.headers_only=i.headers_only||!1;let f=new ml.QueuedIteratorImpl,l=()=>{f.stop()},c=this._buildCC(u,rl.KvWatchInclude.AllHistory,t),E=await this.js.consumers.getPushConsumer(this.stream,c);if(f._data=E,(await E.info(!0)).num_pending===0)return f.push(l),f;let w=await E.consume({callback:(d)=>{let h=this.jmToWatchEntry(d,!1);if(f.push(h),f.received++,d.info.pending===0)f.push(l)}});return w.closed().then(()=>{f.push(l)}),(async()=>{for await(let d of w.status())switch(d.type){case"heartbeat":f.push(()=>{f.stop()});break}})().then(),f.iterClosed.then(()=>{w.stop()}),f}canSetWatcherName(){let i=this.js.nc,{ok:u}=i.features.get(ml.Feature.JS_NEW_CONSUMER_CREATE_API);return u}async watch(i={}){let u=i.key??">",t=new ml.QueuedIteratorImpl,f={};f.headers_only=i.headers_only||!1;let l=rl.KvWatchInclude.LastValue;if(i.include===rl.KvWatchInclude.AllHistory)l=rl.KvWatchInclude.AllHistory;else if(i.include===rl.KvWatchInclude.UpdatesOnly)l=rl.KvWatchInclude.UpdatesOnly;let c=i.ignoreDeletes===!0,E=this._buildCC(u,l,f);if(E.name=`KV_WATCHER_${ml.nuid.next()}`,i.resumeFromRevision&&i.resumeFromRevision>0)E.deliver_policy=dl.DeliverPolicy.StartSequence,E.opt_start_seq=i.resumeFromRevision;let $=await this.js.consumers.getPushConsumer(this.stream,E),d=(await $.info(!0)).num_pending,h=l===rl.KvWatchInclude.UpdatesOnly||d===0;t._data=$;let _=0,v=await $.consume({callback:(D)=>{if(!h)_++,h=_>=d;let n=this.jmToWatchEntry(D,h);if(c&&n.operation==="DEL")return;t.push(n),t.received++}});return t.iterClosed.then(()=>{v.stop()}),v.closed().then(()=>{t.push(()=>{t.stop()})}),t}async keys(i=">"){let u=new ml.QueuedIteratorImpl,t=this._buildCC(i,rl.KvWatchInclude.LastValue,{headers_only:!0}),f=await this.js.consumers.getPushConsumer(this.stream,t);if((await f.info()).num_pending===0)return u.stop(),u;u._data=f;let c=await f.consume({callback:(E)=>{let $=E.headers?.get(Hw0.kvOperationHdr);if($!=="DEL"&&$!=="PURGE"){let w=this.decodeKey(E.subject.substring(this.prefixLen));u.push(w)}if(E.info.pending===0)c.stop()}});return(async()=>{for await(let E of c.status())switch(E.type){case"heartbeat":u.push(()=>{u.stop()});break}})().then(),c.closed().then(()=>{u.push(()=>{u.stop()})}),u.iterClosed.then(()=>{c.stop()}),u}purgeBucket(i){return this.jsm.streams.purge(this.bucketName(),i)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let u=this.js.nc.info?.cluster??"",t=this.bucketName(),f=await this.jsm.streams.info(t);return new w$i(f,u)}}Hw0.Bucket=AY;class w$i{si;cluster;constructor(i,u=""){this.si=i,this.cluster=u}get bucket(){return this.si.config.name.startsWith(rl.kvPrefix)?this.si.config.name.substring(rl.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,ml.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,ml.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==dl.StoreCompression.None;return!1}}Hw0.KvStatusImpl=w$i;class Qw0{bucket;sm;prefixLen;codec;constructor(i,u,t,f){this.bucket=i,this.prefixLen=u,this.sm=t,this.codec=f}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(Hw0.kvOperationHdr)||"PUT"}get length(){let i=this.sm.header.get(dl.JsHeaders.MessageSizeHdr)||"";if(i!=="")return parseInt(i,10);return this.sm.data.length}json(i){return JSON.parse(ml.TD.decode(this.value),i)}string(){return ml.TD.decode(this.value)}}class zw0{bucket;sm;prefixLen;update;codec;constructor(i,u,t,f,l){this.bucket=i,this.prefixLen=u,this.sm=t,this.update=f,this.codec=l}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,ml.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(Hw0.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let i=this.sm.headers?.get(dl.JsHeaders.MessageSizeHdr)||"";if(i!=="")return parseInt(i,10);return this.sm.data.length}get isUpdate(){return this.update}json(i){return JSON.parse(ml.TD.decode(this.value),i)}string(){return ml.TD.decode(this.value)}}});var Qai=K((mh)=>{Object.defineProperty(mh,"__esModule",{value:!0});mh.validateKey=mh.validateBucket=mh.NoopKvCodecs=mh.Kvm=mh.defaultBucketOpts=mh.Bucket=mh.Base64KeyCodec=mh.KvWatchInclude=mh.kvPrefix=void 0;var Cw0=Wai();Object.defineProperty(mh,"kvPrefix",{enumerable:!0,get:function(){return Cw0.kvPrefix}});Object.defineProperty(mh,"KvWatchInclude",{enumerable:!0,get:function(){return Cw0.KvWatchInclude}});var YN=bw0();Object.defineProperty(mh,"Base64KeyCodec",{enumerable:!0,get:function(){return YN.Base64KeyCodec}});Object.defineProperty(mh,"Bucket",{enumerable:!0,get:function(){return YN.Bucket}});Object.defineProperty(mh,"defaultBucketOpts",{enumerable:!0,get:function(){return YN.defaultBucketOpts}});Object.defineProperty(mh,"Kvm",{enumerable:!0,get:function(){return YN.Kvm}});Object.defineProperty(mh,"NoopKvCodecs",{enumerable:!0,get:function(){return YN.NoopKvCodecs}});Object.defineProperty(mh,"validateBucket",{enumerable:!0,get:function(){return YN.validateBucket}});Object.defineProperty(mh,"validateKey",{enumerable:!0,get:function(){return YN.validateKey}})});var zai=K((E7)=>{Object.defineProperty(E7,"__esModule",{value:!0});E7.NoopKvCodecs=E7.Kvm=E7.defaultBucketOpts=E7.Bucket=E7.Base64KeyCodec=E7.KvWatchInclude=void 0;var bhf=Qai();Object.defineProperty(E7,"KvWatchInclude",{enumerable:!0,get:function(){return bhf.KvWatchInclude}});var vr=Qai();Object.defineProperty(E7,"Base64KeyCodec",{enumerable:!0,get:function(){return vr.Base64KeyCodec}});Object.defineProperty(E7,"Bucket",{enumerable:!0,get:function(){return vr.Bucket}});Object.defineProperty(E7,"defaultBucketOpts",{enumerable:!0,get:function(){return vr.defaultBucketOpts}});Object.defineProperty(E7,"Kvm",{enumerable:!0,get:function(){return vr.Kvm}});Object.defineProperty(E7,"NoopKvCodecs",{enumerable:!0,get:function(){return vr.NoopKvCodecs}})});function d$i(){let i=new TextEncoder,u=new TextDecoder;return{encode:(t)=>i.encode(JSON.stringify(t)),decode:(t)=>JSON.parse(u.decode(t))}}class Rai{options;kv=null;codec=d$i();constructor(i){this.options=i}async init(){let i=this.options.getJetStream();if(!i)return;this.kv=await new qw0.Kvm(i).create(Mhf,{storage:Mw0.StorageType.Memory})}async get(i,u){if(!this.kv)return null;try{let t=await this.kv.get(`${i}.${u}`);if(!t?.value?.length)return null;if(t.operation==="DEL"||t.operation==="PURGE")return null;return this.codec.decode(t.value)}catch{return null}}async set(i,u,t){if(!this.kv)return;try{await this.kv.put(`${i}.${u}`,this.codec.encode(t))}catch{}}async invalidate(i){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(t)=>{try{await this.kv.delete(`${t}.${i}`)}catch{}}))}teardown(){this.kv=null}}function qhf(i,u,t){if(t<=0)return!0;if(i===void 0)return!0;return u-i>=t}function h$i(i){return i instanceof Ku&&i.code===zu.MethodNotFound}function Vhf(i){return i instanceof Ku&&i.code===-32000&&/connection closed/i.test(i.message)}async function w7(i,u,t,f,l,c=0){if(!f)try{return await t()}catch(d){if(h$i(d))return[];return Dr.add(1,{type:i,outcome:"error",stage:"no_cache"}),null}let E=`${i}:${u}`,$=await f.get(i,u);if($===null)try{let d=await t();return f.set(i,u,d).catch(()=>{}),Hai.set(E,Date.now()),Dr.add(1,{type:i,outcome:"miss",stage:"miss"}),d}catch(d){if(h$i(d))return f.set(i,u,[]).catch(()=>{}),[];return Dr.add(1,{type:i,outcome:"error",stage:"miss"}),null}if(Dr.add(1,{type:i,outcome:"hit",stage:"hit"}),qhf(Hai.get(E),Date.now(),c)&&!_$i.has(E)){_$i.add(E),Hai.set(E,Date.now());let d=t().then((h)=>f.set(i,u,h)).catch((h)=>{if(h$i(h)||Vhf(h)){if(h$i(h))f.set(i,u,[]).catch(()=>{});return}Dr.add(1,{type:i,outcome:"error",stage:"revalidation"})}).finally(()=>_$i.delete(E));l?.(d)}return $}function bai(i){Vw0=i}function v1(){return Vw0}var Mw0,qw0,Dr,Mhf="DECOCMS_MCP_LISTS",_$i,Hai,$7=30000,Vw0=null;var td=g(()=>{Kl();jl();Mw0=S(N2(),1),qw0=S(zai(),1),Dr=Ft.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});_$i=new Set;Ft.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback((i)=>i.observe(_$i.size));Hai=new Map});var nr=(i,u)=>{if(u===null||u===void 0)return;let t=i.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),f=u;for(let l of t){if(f===null||f===void 0||typeof f!=="object")return;f=f[l]}return f};function v$i(i){let u=i.split("::");if(u.length!==2||!u[0]||!u[1])throw Error(`Invalid scope format: ${i}. Expected format: "KEY::SCOPE"`);return u}function rhf(i){try{return v$i(i)}catch{return null}}function mhf(i){if(typeof i==="object"&&i!==null&&"value"in i){let u=i.value;if(typeof u==="string")return u}return null}function Cai(i,u){let t={};if(!i||!u)return t;for(let f of u){if(f==="*"){t["*"]=["*"];continue}let l=rhf(f);if(!l)continue;let[c,E]=l,$=nr(c,i),w=mhf($);if(w){if(!t[w])t[w]=[];t[w].push(E)}}return t}function rw0(i,u){let t=Cai(i,u);return new Set(Object.keys(t).filter((f)=>f!=="*"))}var Mai=()=>{};async function mw0(i){if(!i.refreshToken)return{success:!1,permanent:!1,error:"No refresh token available"};if(!i.tokenEndpoint)return{success:!1,permanent:!1,error:"No token endpoint available"};if(!i.clientId)return{success:!1,permanent:!1,error:"No client ID available"};try{let u=new URLSearchParams({grant_type:"refresh_token",refresh_token:i.refreshToken,client_id:i.clientId});if(i.clientSecret)u.set("client_secret",i.clientSecret);if(i.scope)u.set("scope",i.scope);let t=await fetch(i.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:u.toString()});if(!t.ok){let l=await t.text(),c,E;try{let w=JSON.parse(l);c=w.error,E=w.error_description}catch{}let $=t.status===400&&!!c&&ehf.has(c);return($?console.error:console.warn)("[TokenRefresh] refresh failed",{connectionId:i.connectionId,tokenEndpoint:i.tokenEndpoint,status:t.status,errorCode:c,errorDescription:E,permanent:$}),{success:!1,permanent:$,status:t.status,errorCode:c,error:E||c||`Token refresh failed: ${t.status}`}}let f=await t.json();return{success:!0,accessToken:f.access_token,refreshToken:f.refresh_token||i.refreshToken,expiresIn:f.expires_in,scope:f.scope}}catch(u){return console.warn("[TokenRefresh] network/parse error",{connectionId:i.connectionId,tokenEndpoint:i.tokenEndpoint,message:u instanceof Error?u.message:String(u)}),{success:!1,permanent:!1,error:u instanceof Error?u.message:"Token refresh failed"}}}var ehf;var ew0=g(()=>{ehf=new Set(["invalid_grant","bad_refresh_token"])});import{createHash as ahf,randomBytes as ohf,timingSafeEqual as mUl}from"crypto";function phf(i){return i.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Vai(i){return ahf("sha256").update(i).digest("hex")}function sw0(i){let u=qai.length+1,t=u+ow0;if(!i.startsWith(`${qai}_`)||i.length<=t+1||i[t]!=="_")return null;let f=i.slice(u,t),l=i.slice(t+1);if(!aw0.test(f)||!aw0.test(l))return null;return f}function pw0(){let i=phf(ohf(shf)),u=i.slice(0,ow0),t=`${qai}_${u}_${i}`;return{plaintext:t,prefix:u,hash:Vai(t)}}var qai="stv",shf=32,ow0=12,aw0;var id0=g(()=>{aw0=/^[A-Za-z0-9_-]+$/});function ud0(i){return{id:i.id,organizationId:i.organization_id,subjectConnectionId:i.subject_connection_id,tokenHash:i.token_hash,tokenPrefix:i.token_prefix,name:i.name,revokedAt:i.revoked_at,lastUsedAt:i.last_used_at,createdAt:i.created_at,updatedAt:i.updated_at}}class rai{db;constructor(i){this.db=i}async createOrRotateWorkloadToken(i){let u=i.name??"default";return await this.db.transaction().execute(async(f)=>{if(!await f.selectFrom("connections").select("id").where("id","=",i.subjectConnectionId).where("organization_id","=",i.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let c=pw0(),E=new Date().toISOString();await f.updateTable("connection_workload_tokens").set({revoked_at:E,updated_at:E}).where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("name","=",u).where("revoked_at","is",null).execute();let $=await f.insertInto("connection_workload_tokens").values({id:Jf("cwt"),organization_id:i.organizationId,subject_connection_id:i.subjectConnectionId,token_hash:c.hash,token_prefix:c.prefix,name:u,revoked_at:null,last_used_at:null,created_at:E,updated_at:E}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:c.plaintext,record:ud0($)}})}async findActiveWorkloadToken(i){let u=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("name","=",i.name??"default").where("revoked_at","is",null).executeTakeFirst();return u?ud0(u):null}async revokeWorkloadToken(i){let u=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:u,updated_at:u}).where("id","=",i.tokenId).where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken(i){let u=sw0(i);if(!u)return null;let t=Vai(i),f=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",u).where("token_hash","=",t).where("revoked_at","is",null).executeTakeFirst();if(!f)return null;let l=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:l,updated_at:l}).where("id","=",f.id).execute(),{tokenId:f.id,tokenPrefix:f.token_prefix,organizationId:f.organization_id,subjectConnectionId:f.subject_connection_id}}async replaceGrantsForSubject(i){await this.db.transaction().execute(async(u)=>{if(!await u.selectFrom("connections").select("id").where("id","=",i.subjectConnectionId).where("organization_id","=",i.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let f=[...new Set(i.grants.map((E)=>E.targetConnectionId))];if(f.length>0){if((await u.selectFrom("connections").select("id").where("organization_id","=",i.organizationId).where("id","in",f).execute()).length!==f.length)throw Error("Referenced connection not found in organization")}if(await u.deleteFrom("connection_credential_grants").where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).execute(),i.grants.length===0)return;let l=new Date().toISOString(),c=i.grants.map((E)=>({id:Jf("ccg"),organization_id:i.organizationId,subject_connection_id:i.subjectConnectionId,target_connection_id:E.targetConnectionId,scope:E.scope,created_by:i.createdBy,created_at:l,updated_at:l}));await u.insertInto("connection_credential_grants").values(c).execute()})}async hasGrant(i){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("target_connection_id","=",i.targetConnectionId).where("scope","=",i.scope).executeTakeFirst()}}var D$i="credential:access-token:read",n$i="credential:configuration:read";var g$i=g(()=>{c$();id0()});function QN(i){let u=String(i??"");if(u&&!u.includes("T"))return u.replace(" ","T")+"Z";return u}function j0(i){return i.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function at(i){let u=Number(i??0);return Number.isFinite(u)?u:0}function u_f(i){if(!i_f.has(i))throw Error(`Invalid groupByColumn: ${i}`);return i}function mai(i){if(!t_f.test(i))throw Error(`Invalid JSONPath: ${i}`);if(i.startsWith("$."))return i;if(i.startsWith("."))return`$${i}`;return`$.${i}`}function sai(i){return i.replace(/^\$\./,"").split(".").map((t)=>`'${j0(t)}'`).join(", ")}function c_f(i){let u=f_f.exec(i);if(!u||!u[1]||!u[2])throw Error(`Invalid interval: ${i}`);let t=parseInt(u[1],10),f=u[2],l=l_f[f];if(t<1||t>l)throw Error(`Invalid interval amount: ${t}${f} (max ${l}${f})`);return{amount:t,unit:f}}function d7(i,u,t="timestamp"){let{amount:f,unit:l}=c_f(i),E={m:"MINUTE",h:"HOUR",d:"DAY"}[l];if(u==="duckdb")return`time_bucket(INTERVAL '${f} ${E}', CAST(${t} AS TIMESTAMP))`;return`toStartOfInterval(${t}, INTERVAL ${f} ${E})`}function gr(i,u,t){if(t==="duckdb")return`json_extract_string(${i}, '${u}')`;let f=sai(u);return`JSONExtractString(${i}, ${f})`}function E_f(i,u,t){if(t==="duckdb")return`CAST(json_extract_string(${i}, '${u}') AS DOUBLE)`;let f=sai(u);return`JSONExtractFloat(${i}, ${f})`}function td0(i,u,t){if(t==="duckdb")return`TRY_CAST(json_extract_string(${i}, '${u}') AS DOUBLE)`;let f=sai(u);return`toFloat64OrZero(JSONExtractString(${i}, ${f}))`}function eai(i){if(i===null||i===void 0)return{};if(typeof i==="object")return i;let u=String(i);try{return JSON.parse(u)}catch{return{_decocms_truncated:u}}}function aai(i){return{id:String(i.id??""),organizationId:String(i.organization_id??""),connectionId:String(i.connection_id??""),toolName:String(i.tool_name??""),input:eai(i.input),output:eai(i.output),isError:i.is_error===1||i.is_error===!0||i.is_error==="1"||typeof i.is_error==="bigint"&&i.is_error===1n,errorMessage:i.error_message!=null?String(i.error_message):null,durationMs:Number(i.duration_ms??0),timestamp:(()=>{if(i.timestamp instanceof Date)return i.timestamp.toISOString();let u=String(i.timestamp??""),t=new Date(u.includes("T")?u:u.replace(" ","T")+"Z");return Number.isNaN(t.getTime())?u:t.toISOString()})(),userId:i.user_id!=null?String(i.user_id):null,requestId:String(i.request_id??""),userAgent:i.user_agent!=null?String(i.user_agent):null,virtualMcpId:i.virtual_mcp_id!=null?String(i.virtual_mcp_id):null,properties:i.properties?eai(i.properties):null}}function Ed0(i,u){let t=[];if(i.properties)for(let[f,l]of Object.entries(i.properties)){let c=j0(f),E=j0(l);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${c}') = '${E}'`);else t.push(`JSONExtractString(properties, '${c}') = '${E}'`)}if(i.propertyKeys)for(let f of i.propertyKeys){let l=j0(f);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${l}') IS NOT NULL AND json_extract_string(properties, '$.${l}') != ''`);else t.push(`JSONExtractString(properties, '${l}') IS NOT NULL AND JSONExtractString(properties, '${l}') != ''`)}if(i.propertyPatterns)for(let[f,l]of Object.entries(i.propertyPatterns)){let c=j0(f),E=j0(l);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${c}') ILIKE '${E}'`);else t.push(`JSONExtractString(properties, '${c}') ILIKE '${E}'`)}if(i.propertyInValues)for(let[f,l]of Object.entries(i.propertyInValues)){let c=j0(f),E=j0(l);if(u==="duckdb")t.push(`list_contains(string_split(json_extract_string(properties, '$.${c}'), ','), '${E}')`);else t.push(`has(splitByChar(',', JSONExtractString(properties, '${c}')), '${E}')`)}return t}function ld0(i,u){let t=[];if(ah(t,u?.startDate,i),!u)return t;if(u.connectionIds?.length){let f=u.connectionIds.map((l)=>`'${j0(l)}'`).join(",");t.push(`connection_id IN (${f})`)}if(u.toolNames?.length){let f=u.toolNames.map((l)=>`'${j0(l)}'`).join(",");t.push(`tool_name IN (${f})`)}if(u.virtualMcpIds?.length){let f=u.virtualMcpIds.map((l)=>`'${j0(l)}'`).join(",");t.push(`virtual_mcp_id IN (${f})`)}if(u.endDate)t.push(eh(u.endDate,i));if(u.propertyFilters)t.push(...Ed0(u.propertyFilters,i));return t}function cd0(i,u,t="timestamp"){if(u==="duckdb")return`CAST(${t} AS TIMESTAMP) >= TIMESTAMP '${i.toISOString()}'`;if(t==="bucket")return`${t} >= parseDateTimeBestEffort('${i.toISOString()}')`;return`${t} >= parseDateTime64BestEffort('${i.toISOString()}', 9)`}function eh(i,u,t="timestamp"){if(u==="duckdb")return`CAST(${t} AS TIMESTAMP) <= TIMESTAMP '${i.toISOString()}'`;if(t==="bucket")return`${t} <= parseDateTimeBestEffort('${i.toISOString()}')`;return`${t} <= parseDateTime64BestEffort('${i.toISOString()}', 9)`}function ah(i,u,t,f="timestamp"){if(u)i.push(cd0(u,t,f));else if(t==="clickhouse")i.push(cd0(new Date(Date.now()-$_f),t,f))}class pai{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor(i,u,t,f,l="clickhouse",c=!1){this.engine=i;this.sourceFactory=u;this.metricEngine=t;this.metricSourceFactory=f;this.dialect=l;this.metricsFromLogs=c}async query(i){if(!i.organizationId)throw Error("organizationId is required");let u=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),t=[`organization_id = '${j0(i.organizationId)}'`];if(i.connectionId)t.push(`connection_id = '${j0(i.connectionId)}'`);if(i.excludeConnectionIds?.length){let v=i.excludeConnectionIds.map((D)=>`'${j0(D)}'`).join(",");t.push(`connection_id NOT IN (${v})`)}if(i.virtualMcpId)t.push(`virtual_mcp_id = '${j0(i.virtualMcpId)}'`);if(i.toolName)t.push(`tool_name = '${j0(i.toolName)}'`);if(i.isError!==void 0)t.push(`is_error = ${i.isError?1:0}`);if(ah(t,i.startDate,this.dialect),i.endDate)t.push(eh(i.endDate,this.dialect));if(i.propertyFilters)t.push(...Ed0(i.propertyFilters,this.dialect));let f=1000,l=Math.min(Math.max(1,Math.floor(i.limit??50)),f),c=Math.max(0,Math.floor(i.offset??0)),E=t.join(" AND ");if(this.dialect==="duckdb"){let v=`SELECT ${fd0}, count(*) OVER () AS _total FROM ${u} WHERE ${E} ORDER BY timestamp DESC LIMIT ${l} OFFSET ${c}`,D=await this.engine.query(v);if(D.length===0)return{logs:[],total:0};let n=Number(D[0]._total??0);return{logs:D.map(aai),total:n}}let $=`SELECT count(*) AS total FROM ${u} WHERE ${E}`,w=`SELECT ${fd0} FROM ${u} WHERE ${E} ORDER BY timestamp DESC LIMIT ${l} OFFSET ${c}`,[d,h]=await Promise.all([this.engine.query($),this.engine.query(w)]),_=Number(d[0]?.total??0);return{logs:h.map(aai),total:_}}async getById(i,u){if(!i||!u)return null;let f=`SELECT * FROM ${this.sourceFactory(i)} WHERE organization_id = '${j0(i)}' AND id = '${j0(u)}' LIMIT 1`,l=await this.engine.query(f);if(l.length===0)return null;return aai(l[0])}async getStats(i){if(!i.organizationId)throw Error("organizationId is required");let u=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),t=[`organization_id = '${j0(i.organizationId)}'`];if(ah(t,i.startDate,this.dialect),i.endDate)t.push(eh(i.endDate,this.dialect));let f=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${u} WHERE ${t.join(" AND ")}`,c=(await this.engine.query(f))[0]??{};return{totalCalls:Number(c.total_calls??0),errorRate:Number(c.error_rate??0),avgDurationMs:Number(c.avg_duration_ms??0)}}async queryLlmUsageStats(i){let u={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!i.organizationId||!i.connectionId)return u;let t=this.dialect,f=t==="clickhouse",l=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),c=d7(i.interval,t,"timestamp"),E=(y)=>`coalesce(${td0("properties",`$.${y}`,t)}, 0)`,$=f?"count()":"count(*)",w=f?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",d=(y)=>f?`quantile(${y})(duration_ms)`:`quantile_cont(duration_ms, ${y})`,h=[`organization_id = '${j0(i.organizationId)}'`,`connection_id = '${j0(i.connectionId)}'`];if(ah(h,i.startDate,t),i.endDate)h.push(eh(i.endDate,t));if(i.userIds?.length){let y=i.userIds.slice(0,100).map((Z)=>`'${j0(Z)}'`).join(",");h.push(`user_id IN (${y})`)}let _=h.join(" AND "),v=Math.min(Math.max(1,Math.floor(i.topN??5)),20),D=`${$} AS calls,
|
|
86186
86186
|
${w} AS errors,
|
|
86187
86187
|
avg(duration_ms) AS avg,
|
|
86188
86188
|
sum(${E("input_tokens")}) AS in_tok,
|