decocms 4.92.0 → 4.92.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-BtNVN6lT.js → AlertCircle-Cvc_10Uv.js} +1 -1
- package/dist/client/assets/{AreaChart-G7ca0KYF.js → AreaChart-D4PMIsMV.js} +1 -1
- package/dist/client/assets/{ArrowUp-SfmKmvG1.js → ArrowUp-Dq6JgHsq.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-DPmhEMyl.js → ArrowUpRight-DgI9ki5h.js} +1 -1
- package/dist/client/assets/{CheckCircle-Dqg_7udX.js → CheckCircle-B5oIKeSF.js} +1 -1
- package/dist/client/assets/{ChevronDown-CtpYRw0N.js → ChevronDown-D_W2bIqv.js} +1 -1
- package/dist/client/assets/{ChevronRight-DQFD5vOs.js → ChevronRight-BnIvJcIZ.js} +1 -1
- package/dist/client/assets/{ChevronUp-Bu3KYaYp.js → ChevronUp-Ci-XiWb6.js} +1 -1
- package/dist/client/assets/{Copy01-B4AQ9voq.js → Copy01-Q4xZmPKp.js} +1 -1
- package/dist/client/assets/{DotsVertical-4fMK5hdE.js → DotsVertical-Bcfqjiks.js} +1 -1
- package/dist/client/assets/{Eye-7UpR5EsV.js → Eye-BuukW7MV.js} +1 -1
- package/dist/client/assets/{FilterLines-jo0eHglf.js → FilterLines-Do4UgzmV.js} +1 -1
- package/dist/client/assets/{Globe01-BEuNOgWE.js → Globe01-qjaQZUfN.js} +1 -1
- package/dist/client/assets/{Globe04-ezZLp1FH.js → Globe04-CqIGMVDi.js} +1 -1
- package/dist/client/assets/{HardDrive-Bx0yMIUr.js → HardDrive-DrLvUMYg.js} +1 -1
- package/dist/client/assets/{Image01-BemfbeRy.js → Image01-BWotytID.js} +1 -1
- package/dist/client/assets/{Key01-wlopeCn8.js → Key01-BPZUhUcV.js} +1 -1
- package/dist/client/assets/{LayoutLeft-DgCOjEX2.js → LayoutLeft-COV7zlIC.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DjHN0DVc.js → LinkExternal01-CyMOdGfe.js} +1 -1
- package/dist/client/assets/{Monitor01-CvVGHJ2u.js → Monitor01-dLHbd0CB.js} +1 -1
- package/dist/client/assets/{Package-Dkg7P-qU.js → Package-B7Qii2Tl.js} +1 -1
- package/dist/client/assets/{Palette-DnEGtR5r.js → Palette-tVNOj7Ym.js} +1 -1
- package/dist/client/assets/{Play-pFWdRfmo.js → Play-BE8nTtBp.js} +1 -1
- package/dist/client/assets/{Plus-BhgoGeba.js → Plus-5VWQJEkS.js} +1 -1
- package/dist/client/assets/{SearchLg-D7iDyCtR.js → SearchLg-BiyFAMx0.js} +1 -1
- package/dist/client/assets/{SearchMd-DU7sZsGX.js → SearchMd-LbMkvaPD.js} +1 -1
- package/dist/client/assets/{Settings02-Kn3GUgY3.js → Settings02-CU2rilKq.js} +1 -1
- package/dist/client/assets/{Shield01-BF7nZR91.js → Shield01-7KT2UKvg.js} +1 -1
- package/dist/client/assets/{Star01-UbWAuLRP.js → Star01-D4LxiizA.js} +1 -1
- package/dist/client/assets/{Stars01-CKHcD24W.js → Stars01-HAbkffzq.js} +1 -1
- package/dist/client/assets/{Stars02-ByALJtc-.js → Stars02-CdgckoDr.js} +1 -1
- package/dist/client/assets/{Sun-ERdj2Ruh.js → Sun-Ca3eslhz.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-B2hcs1rw.js → SwitchHorizontal01-DNcPUv7P.js} +1 -1
- package/dist/client/assets/{Tool01-DoTp9Ymb.js → Tool01-DBXzU6aR.js} +1 -1
- package/dist/client/assets/{Tool02-f6hCEEx5.js → Tool02-rl8XhSPG.js} +1 -1
- package/dist/client/assets/{Trash01-Dgm4FHaX.js → Trash01-DxXosbkh.js} +1 -1
- package/dist/client/assets/{TrendUp01-DdLolkHU.js → TrendUp01-BmzCTIbp.js} +1 -1
- package/dist/client/assets/{Upload01-DPgiWRF2.js → Upload01-CXsTipbe.js} +1 -1
- package/dist/client/assets/{User01-4oxhkWpc.js → User01-CZgThaZQ.js} +1 -1
- package/dist/client/assets/{Users01-CbDWoQDz.js → Users01-IdyAszrF.js} +1 -1
- package/dist/client/assets/{Users03-DQDFsIZA.js → Users03-3HXi1aia.js} +1 -1
- package/dist/client/assets/{X-BJznV24Z.js → X-CLG08ht8.js} +1 -1
- package/dist/client/assets/{XCircle-Mn7Ozb-Q.js → XCircle-pZ6nD22L.js} +1 -1
- package/dist/client/assets/{XClose-BYGQndp2.js → XClose-BYq2BBpT.js} +1 -1
- package/dist/client/assets/{Zap-SMAt3bB0.js → Zap-C6tkfs5m.js} +1 -1
- package/dist/client/assets/{ZapSquare-Chem9D1s.js → ZapSquare-DdKvM81Z.js} +1 -1
- package/dist/client/assets/{ZoomOut-znim4joS.js → ZoomOut-DAAhtu2Z.js} +1 -1
- package/dist/client/assets/{access-gate-CXUaT8Bg.js → access-gate-B8spscer.js} +1 -1
- package/dist/client/assets/add-section-modal-De0GxBTc.js +1 -0
- package/dist/client/assets/agent-icon-BIj6WxKp.js +1 -0
- package/dist/client/assets/{agents-list-CxMjWnYV.js → agents-list-Cc-986WT.js} +1 -1
- package/dist/client/assets/{ai-providers-V_ToPNx9.js → ai-providers-Ck_-NP1I.js} +1 -1
- package/dist/client/assets/{alert-DCHONWz2.js → alert-CI7flGPF.js} +1 -1
- package/dist/client/assets/{alert-dialog-9jx8jzEO.js → alert-dialog-D2oa47X8.js} +1 -1
- package/dist/client/assets/{app-editor-B5Y1RFnh.js → app-editor-Cn-tT-ug.js} +1 -1
- package/dist/client/assets/{auth-wA89jw5z.js → auth-Kymy4xkz.js} +1 -1
- package/dist/client/assets/{auth-catchall-gpLRqkDV.js → auth-catchall-B0gQyYvu.js} +1 -1
- package/dist/client/assets/{auth-entry-ByL0Zb6R.js → auth-entry-Crrd0hkP.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BoMjBMXD.js → auth-split-layout-BO4l9cCp.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-CO2Dkq5Q.js → authenticate-and-persist-oauth-DAAmwSgR.js} +1 -1
- package/dist/client/assets/{automation-list-row-CZVotwYb.js → automation-list-row-D-cT9rxb.js} +1 -1
- package/dist/client/assets/{automation-runs-oeg4SZH2.js → automation-runs-_XAGR1m2.js} +1 -1
- package/dist/client/assets/{automations-kL1ULwau.js → automations-Bh1OF4xf.js} +1 -1
- package/dist/client/assets/{autosend-DFAdUSMh.js → autosend-D-JHJKNK.js} +1 -1
- package/dist/client/assets/{avatar-D2faXu9B.js → avatar-1o2VQKTj.js} +1 -1
- package/dist/client/assets/{badge-C22fJvJ9.js → badge-dHBIjKyY.js} +1 -1
- package/dist/client/assets/{block-document-F7Fz2w43.js → block-document-nemKITlN.js} +1 -1
- package/dist/client/assets/{brand-context-CwktNs2n.js → brand-context-DSZ7O9_c.js} +1 -1
- package/dist/client/assets/{buckets-BqmVHHty.js → buckets-BDkQllTH.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-DEnhQv4x.js → bulk-category-panel-Cn58Io0u.js} +1 -1
- package/dist/client/assets/{calendar-C55pfZGp.js → calendar-C9b1I5Xh.js} +1 -1
- package/dist/client/assets/{capability-load-error-D-GHd7kt.js → capability-load-error-DI4Ww9LY.js} +1 -1
- package/dist/client/assets/{card-BZY4DqkC.js → card-CoG27DVs.js} +1 -1
- package/dist/client/assets/category-editor-BmpcIx1s.js +1 -0
- package/dist/client/assets/{chat-context-8zti4wkh.js → chat-context-glCfFIWX.js} +1 -1
- package/dist/client/assets/{checkbox-DvRekaoI.js → checkbox-BOAToSlJ.js} +1 -1
- package/dist/client/assets/{cli-auth-success-BwJqzavM.js → cli-auth-success-CqzQrYb8.js} +1 -1
- package/dist/client/assets/collection-detail-I0O1ME9a.js +1 -0
- package/dist/client/assets/{collection-display-button-Su2JKz2G.js → collection-display-button-Bw2bFMNm.js} +1 -1
- package/dist/client/assets/{collection-search-B4ji9AjC.js → collection-search-DuPY-s4R.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DhT1Pcxz.js → collection-table-wrapper-BOKHq7cp.js} +1 -1
- package/dist/client/assets/{collection-tabs-DTWzD8v3.js → collection-tabs-CcN3J070.js} +1 -1
- package/dist/client/assets/{command-BeMVvNyF.js → command-BB6Oir8o.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-wd060R0w.js → commerce-onboarding-DejhsIyX.js} +1 -1
- package/dist/client/assets/{companions-core-D6ZCzGBn.js → companions-core-C-kZqiTC.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-ekgjUng_.js → connect-desktop-dialog-CUGIAU17.js} +1 -1
- package/dist/client/assets/{connection-card-7Jlr5ou8.js → connection-card-7gBTmFox.js} +1 -1
- package/dist/client/assets/{connection-detail-CVc89tOZ.js → connection-detail-BB0rtYjx.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BT4sViBb.js → connection-form-helpers-CJKig9hy.js} +1 -1
- package/dist/client/assets/{connections-U8gRLumN.js → connections-E7mextbc.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-us-M5mS8.js → decopilot-sse-pool-DEJZ4gJu.js} +1 -1
- package/dist/client/assets/{dialog-B_MtszrV.js → dialog-ChJw5xnr.js} +1 -1
- package/dist/client/assets/{domain-settings-C_FTyjE2.js → domain-settings-B6Co6UtW.js} +1 -1
- package/dist/client/assets/{drawer-BsQ2VY2t.js → drawer-_WfOhyRU.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CCf9b-Ue.js → dropdown-menu-B7HOgSu8.js} +1 -1
- package/dist/client/assets/{empty-state-uOmVY7AV.js → empty-state-kSEyPCAz.js} +1 -1
- package/dist/client/assets/{extract-connection-data-B1PMDhhA.js → extract-connection-data-oUFnwuwD.js} +1 -1
- package/dist/client/assets/{file-explorer-Cq-sGwnZ.js → file-explorer-CnTvRnvj.js} +1 -1
- package/dist/client/assets/{file-type-icon-DLDSmTyC.js → file-type-icon-CeQVzqDu.js} +1 -1
- package/dist/client/assets/{files-CCiFVnRx.js → files-CCxNqj9u.js} +1 -1
- package/dist/client/assets/{form-CBH5rcB6.js → form-BUM27CLj.js} +1 -1
- package/dist/client/assets/{general-DnViTnDI.js → general-BjF2DfAd.js} +1 -1
- package/dist/client/assets/{github-repo-picker-DWdab-4Y.js → github-repo-picker-4TIPzYjR.js} +1 -1
- package/dist/client/assets/{hooks-CQZHp8Dt.js → hooks-CJqrF4BQ.js} +1 -1
- package/dist/client/assets/{index-BfunopXO.js → index-BHqz24vm.js} +1 -1
- package/dist/client/assets/index-B_qFi_-_.js +519 -0
- package/dist/client/assets/{index-CodlhltM.js → index-BderZvBT.js} +1 -1
- package/dist/client/assets/{index-F-zmfSqw.js → index-Bj_MaVUP.js} +1 -1
- package/dist/client/assets/{index-QeeIyPD-.js → index-C8rlFaFO.js} +3 -3
- package/dist/client/assets/{index-d_66hXvz.js → index-CHWLrEqX.js} +1 -1
- package/dist/client/assets/{index-CmemNDJU.js → index-CQwS9Ezr.js} +1 -1
- package/dist/client/assets/{index-DWmvNX0u.js → index-CR0rMz7E.js} +1 -1
- package/dist/client/assets/{index-C1alCXBf.js → index-CWGwstEz.js} +3 -3
- package/dist/client/assets/{index-CAK7n_FO.js → index-CWlzI7M3.js} +2 -2
- package/dist/client/assets/{index-hhU2F3WQ.js → index-D6ixbRYa.js} +1 -1
- package/dist/client/assets/{index-DWS4NoqH.js → index-DVotD2Sm.js} +1 -1
- package/dist/client/assets/{index-B-kvMeNd.js → index-DyXd0E61.js} +1 -1
- package/dist/client/assets/{index-C_AuPrej.js → index-WDnleR3r.js} +1 -1
- package/dist/client/assets/{index-redirect-BRH-3ZCu.js → index-redirect-CZuVtK8Y.js} +1 -1
- package/dist/client/assets/{input-ksjqlSwm.js → input-CWExGH7j.js} +1 -1
- package/dist/client/assets/{integration-icon-nHJfLZDJ.js → integration-icon-BXEpLE2r.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-C6cxYu7U.js → invite-member-dialog-Cj35CA_W.js} +1 -1
- package/dist/client/assets/{label-B8xrTNKP.js → label-BbLr7wPS.js} +1 -1
- package/dist/client/assets/{layout-BJDwPfq0.js → layout-yKsHfaYu.js} +1 -1
- package/dist/client/assets/{login-DlJSNcQs.js → login-g6Yf2A86.js} +1 -1
- package/dist/client/assets/{mcp-oauth-C_zNkYXB.js → mcp-oauth-B2KaqQoI.js} +1 -1
- package/dist/client/assets/{members-BM7Uqu1Q.js → members-yX31omZQ.js} +1 -1
- package/dist/client/assets/{monaco-editor-CAwKA7tN.js → monaco-editor-CJKnQM68.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CC7F0Phb.js → monitoring-stats-row-DTqvYy56.js} +1 -1
- package/dist/client/assets/{multi-select-5dvonfKB.js → multi-select-C9lH7lr4.js} +1 -1
- package/dist/client/assets/{oauth-callback-8qeP_w61.js → oauth-callback-DPu8Jv31.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BmIt9KYD.js → oauth-callback-ai-provider-DXhgROtl.js} +1 -1
- package/dist/client/assets/{onboarding-Cg0DtUJd.js → onboarding-b8UESLyK.js} +1 -1
- package/dist/client/assets/{org-install-CTi6z1kk.js → org-install-DFTAzRMO.js} +1 -1
- package/dist/client/assets/{org-layout-tdajFZ6u.js → org-layout-BbjFIQ-M.js} +1 -1
- package/dist/client/assets/{organization-choice-GMUL1NeO.js → organization-choice-DjVV9MCZ.js} +1 -1
- package/dist/client/assets/{orgs-6ZiXdiJ2.js → orgs-B1jGApXW.js} +1 -1
- package/dist/client/assets/{page-seo-form-CGZUz0ph.js → page-seo-form-DeD_2a8R.js} +1 -1
- package/dist/client/assets/page-seo-sheet-BWnl0tVz.js +1 -0
- package/dist/client/assets/{popover-3l0deoOx.js → popover-kOy_asOa.js} +1 -1
- package/dist/client/assets/post-editor-BZQdhdwo.js +1 -0
- package/dist/client/assets/{primitives-DGvfP5N2.js → primitives-Cyz_TV23.js} +1 -1
- package/dist/client/assets/{profile-BjX7gD7e.js → profile-D5HUGTyF.js} +1 -1
- package/dist/client/assets/project-app-view-Bsaa-6LK.js +1 -0
- package/dist/client/assets/record-editor-Bjgurgfp.js +1 -0
- package/dist/client/assets/redirect-editor-DnT7ef0C.js +1 -0
- package/dist/client/assets/registry-DHjmo34d.js +2 -0
- package/dist/client/assets/{registry-layout-50Nc58LU.js → registry-layout-JPmaR-tb.js} +1 -1
- package/dist/client/assets/{reports-CMuw_Eim.js → reports-Btc-1oN-.js} +1 -1
- package/dist/client/assets/{require-capability-BMCPfqFj.js → require-capability-BBszzyH9.js} +1 -1
- package/dist/client/assets/{required-auth-layout-BON6U2A_.js → required-auth-layout-CR5_YK6W.js} +1 -1
- package/dist/client/assets/{reset-password-CuQp3WxW.js → reset-password-u9Nbv0bS.js} +1 -1
- package/dist/client/assets/{roles-flCogJRV.js → roles-B7bUsR2h.js} +1 -1
- package/dist/client/assets/{search-input-UOEApV9M.js → search-input-B6akQV4Y.js} +1 -1
- package/dist/client/assets/{secrets-CUe-abV1.js → secrets-Dsj3iy5H.js} +1 -1
- package/dist/client/assets/sections-editor-CvIj0bPs.js +2 -0
- package/dist/client/assets/{select-BK6Fwx47.js → select-4-vdHbLT.js} +1 -1
- package/dist/client/assets/{select-model-FeZ2YvBx.js → select-model-CVcEVUsi.js} +1 -1
- package/dist/client/assets/{self-tool-result-BblMArR-.js → self-tool-result-Cwdk21K_.js} +1 -1
- package/dist/client/assets/{seo-editor-D48-7A97.js → seo-editor-B0_qMHl0.js} +1 -1
- package/dist/client/assets/{settings-layout-DEiZmbv4.js → settings-layout-BURikhtl.js} +1 -1
- package/dist/client/assets/{settings-section--wnksRdd.js → settings-section-DxqR9iml.js} +1 -1
- package/dist/client/assets/{shell-controls-6ZpSpxU3.js → shell-controls-DYq3DSuV.js} +1 -1
- package/dist/client/assets/{shell-layout-CGSn6NPr.js → shell-layout-DvMdeukx.js} +1 -1
- package/dist/client/assets/{sidebar-BjCGlNJL.js → sidebar-AfeWMY1r.js} +1 -1
- package/dist/client/assets/{skeleton-4wAys1SB.js → skeleton-DraYvTQP.js} +1 -1
- package/dist/client/assets/{sso-C8y4ysn5.js → sso-DWBNvY6X.js} +1 -1
- package/dist/client/assets/{store-EbX-J8BD.js → store-BFhYLhoT.js} +1 -1
- package/dist/client/assets/store-registry-C50_5LUp.js +2 -0
- package/dist/client/assets/{studio-tools-Dz5m3DDC.js → studio-tools-B3FHZXsQ.js} +1 -1
- package/dist/client/assets/{switch-BGTwAogo.js → switch-CyZjNvfZ.js} +1 -1
- package/dist/client/assets/{table-FWVzL2nm.js → table-iG6kCmeS.js} +1 -1
- package/dist/client/assets/{tabs-BovIXRni.js → tabs-C1LpzuaJ.js} +1 -1
- package/dist/client/assets/{textarea-B0BnrQRd.js → textarea-B8dhUfp9.js} +1 -1
- package/dist/client/assets/{toggle-group-DvzPCkJs.js → toggle-group-c5TjS6xS.js} +1 -1
- package/dist/client/assets/{toolbar-Dde3UP0K.js → toolbar-Daz4jqLs.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-BGzii147.js → toolbar-icon-button-Bbbo7hyv.js} +1 -1
- package/dist/client/assets/{tooltip-CfmdP-aL.js → tooltip-DE_gqCm3.js} +1 -1
- package/dist/client/assets/{use-ai-providers-UWnZZKKY.js → use-ai-providers-CGzSWtp7.js} +1 -1
- package/dist/client/assets/{use-automations-URCauyn7.js → use-automations-Btiu7Z09.js} +1 -1
- package/dist/client/assets/{use-autosave-BjhwOY2t.js → use-autosave-DphOvxb9.js} +1 -1
- package/dist/client/assets/{use-capability-B2RpFGXs.js → use-capability-BNcFOggs.js} +1 -1
- package/dist/client/assets/{use-clock-tick-CI9n9Iqh.js → use-clock-tick-Dw7sAB29.js} +1 -1
- package/dist/client/assets/{use-collections-CI5XorIY.js → use-collections-u5tkBX1a.js} +1 -1
- package/dist/client/assets/{use-connection-BlWYloF8.js → use-connection-CcmTBTY-.js} +1 -1
- package/dist/client/assets/{use-copy-CCSClSvL.js → use-copy-CveeH2p4.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-D97QNssr.js → use-create-virtual-mcp-jvSmQNTU.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DbO1S1EK.js → use-debounced-autosave-DFle-8Sb.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DuzsGBjb.js → use-debounced-value-D1xFGN32.js} +1 -1
- package/dist/client/assets/{use-deco-credits-Bov6Ef1l.js → use-deco-credits-CV7sw9Em.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CqSDZlRU.js → use-decopilot-events-VInARyiN.js} +1 -1
- package/dist/client/assets/{use-delete-connection-B_AyED2-.js → use-delete-connection-DDV7XY4a.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-CSBPrawc.js → use-deployment-admin-h9tth1Ey.js} +1 -1
- package/dist/client/assets/{use-file-configs-BsBJamST.js → use-file-configs-BEHJ-b8Q.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Cylb4hyl.js → use-infinite-scroll-BI8YTyTt.js} +1 -1
- package/dist/client/assets/{use-join-requests-Cy4mJo9l.js → use-join-requests-V5rMqfIc.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-D-mrOgSF.js → use-mcp-auth-status-DINFEYgi.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DXFWWHbs.js → use-mcp-client-PcphUWIj.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-ePfAnuof.js → use-mcp-tools-CakNulXp.js} +1 -1
- package/dist/client/assets/{use-members-C1OZBryu.js → use-members-JooO5O_z.js} +1 -1
- package/dist/client/assets/{use-mobile-CEVETdVq.js → use-mobile-C57pT7o9.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CflMFlHw.js → use-navigate-to-agent-DVHUkqpb.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-BFFpNQiA.js → use-org-auth-client-C0qPMRhc.js} +1 -1
- package/dist/client/assets/{use-org-sso-QrZAqFtN.js → use-org-sso-BaYh30WC.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CYJSylgX.js → use-organization-roles-BG6jMK7e.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BpxUnud5.js → use-organization-settings-DBhnNnJm.js} +1 -1
- package/dist/client/assets/{use-registry-app-CkuNrX2M.js → use-registry-app-Dyfesgrg.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DWBXDDYI.js → use-registry-connections-CTtHQqlB.js} +1 -1
- package/dist/client/assets/{use-secrets-C8ssS7Ik.js → use-secrets-BYzFSfMf.js} +1 -1
- package/dist/client/assets/{use-status-sounds-2UIUBUS4.js → use-status-sounds-DJxvpKl9.js} +1 -1
- package/dist/client/assets/{use-t-BKpqHjpb.js → use-t-BeHordU2.js} +1 -1
- package/dist/client/assets/{use-view-mode-BEQ3VoIc.js → use-view-mode-C0yNdLzJ.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-D9jFTGjm.js → use-virtual-mcp-BtFe5DoR.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-mNPfD3Pk.js +1 -0
- package/dist/client/assets/{useRouterState-d9mo2HNv.js → useRouterState-C6jzqArr.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DIVSilzv.js +1 -0
- package/dist/client/assets/{users-B6WaBMxE.js → users-C0dY9LVq.js} +1 -1
- package/dist/client/assets/{variant-calendar-D4S-Oofs.js → variant-calendar-FpbApEV2.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CQ-IPomp.js → view-mode-toggle-DwdmtuKb.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/add-section-modal-Bu0jJfTp.js +0 -1
- package/dist/client/assets/agent-icon-CMi9hXve.js +0 -1
- package/dist/client/assets/category-editor-DZf03BWu.js +0 -1
- package/dist/client/assets/collection-detail-BCNd0Ifz.js +0 -1
- package/dist/client/assets/index-D_TDrkT8.js +0 -519
- package/dist/client/assets/page-seo-sheet-DB06C8Zh.js +0 -1
- package/dist/client/assets/post-editor-Cf2q6koS.js +0 -1
- package/dist/client/assets/project-app-view-CInCPGOf.js +0 -1
- package/dist/client/assets/record-editor-C1rBRosQ.js +0 -1
- package/dist/client/assets/redirect-editor-DH3saw4e.js +0 -1
- package/dist/client/assets/registry-BIMV2dS4.js +0 -2
- package/dist/client/assets/sections-editor-BCCsHWJ1.js +0 -2
- package/dist/client/assets/store-registry-C4UWjh6m.js +0 -2
- package/dist/client/assets/useInfiniteQuery-DvViU0Gq.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-COT_NVJE.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as $,r as T,l as f,j as i}from"./index-
|
|
1
|
+
import{c as $,r as T,l as f,j as i}from"./index-C8rlFaFO.js";import{b as k,T as I,a as P}from"./tooltip-DE_gqCm3.js";const M={sm:{button:"size-7",buttonWithLabel:"h-7",icon:"size-4"},md:{button:"size-9",buttonWithLabel:"h-9",icon:"size-5"},lg:{button:"size-12",buttonWithLabel:"h-12",icon:"size-6"}};function B(E){const t=$.c(27),{value:s,onValueChange:y,options:o,size:C,fullWidth:L,className:z}=E,_=C===void 0?"sm":C,b=L===void 0?!1:L;let h;t[0]===Symbol.for("react.memo_cache_sentinel")?(h=[],t[0]=h):h=t[0];const R=T.useRef(h);let x;t[1]===Symbol.for("react.memo_cache_sentinel")?(x={left:0,width:0,opacity:0},t[1]=x):x=t[1];const[d,S]=T.useState(x);let g,p;t[2]!==o||t[3]!==s?(g=()=>{const e=o.findIndex(j=>j.value===s),m=R.current[e];m&&S({left:m.offsetLeft,width:m.offsetWidth,opacity:1})},p=[s,o],t[2]=o,t[3]=s,t[4]=g,t[5]=p):(g=t[4],p=t[5]),T.useEffect(g,p);const n=M[_];let l;t[6]!==z?(l=f("relative flex gap-0 bg-muted rounded-lg",z),t[6]=z,t[7]=l):l=t[7];let a;t[8]!==n||t[9]!==b||t[10]!==y||t[11]!==o||t[12]!==s?(a=o.map((e,m)=>{const j=i.jsxs("button",{ref:V=>{R.current[m]=V},type:"button",onClick:()=>y(e.value),className:f("relative z-10 flex items-center justify-center gap-2 rounded-lg transition-colors [transition-timing-function:var(--ease-out-cubic)] duration-200",b?"flex-1 h-12 px-4":e.label?f(n.buttonWithLabel,"px-3"):n.button),children:[i.jsx("span",{className:f("transition-colors ease-out duration-200 flex items-center justify-center [&>svg]:size-[1em]",n.icon,s===e.value?"text-foreground":"text-muted-foreground"),children:e.icon}),e.label&&i.jsx("span",{className:f("text-xs transition-colors ease-out duration-200 whitespace-nowrap",s===e.value?"text-foreground":"text-muted-foreground"),children:e.label})]},e.value);return e.tooltip?i.jsxs(k,{children:[i.jsx(I,{asChild:!0,children:j}),i.jsx(P,{side:"bottom",children:e.tooltip})]},e.value):j}),t[8]=n,t[9]=b,t[10]=y,t[11]=o,t[12]=s,t[13]=a):a=t[13];const w=b?"h-12":n.button;let r;t[14]!==w?(r=f("absolute z-0 bg-background rounded-lg border-shadow transition-all [transition-timing-function:var(--ease-out-cubic)] duration-200",w),t[14]=w,t[15]=r):r=t[15];const W=`${d.left}px`,N=`${d.width}px`;let c;t[16]!==d.opacity||t[17]!==W||t[18]!==N?(c={left:W,width:N,opacity:d.opacity},t[16]=d.opacity,t[17]=W,t[18]=N,t[19]=c):c=t[19];let u;t[20]!==r||t[21]!==c?(u=i.jsx("div",{className:r,style:c}),t[20]=r,t[21]=c,t[22]=u):u=t[22];let v;return t[23]!==u||t[24]!==l||t[25]!==a?(v=i.jsxs("div",{className:l,children:[a,u]}),t[23]=u,t[24]=l,t[25]=a,t[26]=v):v=t[26],v}export{B as V};
|
package/dist/client/index.html
CHANGED
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
57
57
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
58
58
|
<meta name="apple-mobile-web-app-title" content="deco Studio" />
|
|
59
|
-
<script type="module" crossorigin src="/assets/index-
|
|
59
|
+
<script type="module" crossorigin src="/assets/index-C8rlFaFO.js"></script>
|
|
60
60
|
<link rel="stylesheet" crossorigin href="/assets/index-DxTnZ0Oo.css">
|
|
61
61
|
</head>
|
|
62
62
|
<body>
|
package/dist/server/cli.js
CHANGED
|
@@ -84564,7 +84564,7 @@ ${$}`;h(N);return}if(E(null,y),t.strategy==="count"){if(w--,w===0)h()}if(t.strat
|
|
|
84564
84564
|
`);function h(_){if(t===void 0)return!0;let v=sM(_),D=v&&sM(t)?ieu(t):t,n=v?ieu(_):ueu(_),O=WCt(D,n);return O===""||!O.startsWith("..")&&!XCt(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(!sM(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||!sM(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(!N2(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=N2(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=feu(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}KCt(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(sM(D.sandboxPath)&&N2(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let N=N2(D.sandboxPath,["status","--porcelain"]);if(N.ok){let y=N.stdout.trim();n=y===""?0:y.split(`
|
|
84565
84565
|
`).length}if(D.branch!==null&&D.branch.trim()!=="")O=feu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:n,merged:O}},close(){u.close()}}}var QRi=()=>{};function HCt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function ceu(i,u){if(process.platform==="win32")return;for(let t of HCt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var Eeu=()=>{};import{existsSync as RCt,readdirSync as bCt}from"fs";import{rm as CCt}from"fs/promises";import{join as $eu}from"path";async function weu(i,u={}){let t=u.detach??MCt,f=u.exists??RCt,l=u.readdir??(($)=>bCt($)),c=u.rm??(($)=>CCt($,{recursive:!0,force:!0})),E=$eu(i,"org");if(f(E))for(let $ of l(E))t($eu(E,$));await c(i)}var MCt=(i)=>ceu(i,process.platform==="darwin");var deu=g(()=>{Eeu()});import{join as qCt}from"path";function heu(i){let u=i.purge??weu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await bl(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??qCt(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 Lc?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var _eu=g(()=>{N4();deu()});import{randomBytes as VCt}from"crypto";import{mkdir as rCt}from"fs/promises";import{createServer as mCt}from"net";import{join as eCt}from"path";function veu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function Deu(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function neu(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 aCt(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 oCt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:aCt(i.repo?.cloneUrl)}}function geu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??sCt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((n,O)=>`http://127.0.0.1:${O}`),E=(n)=>eCt(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=oCt(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 rCt(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=VCt(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 veu("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 veu(Deu(k)?"configuration timed out":"the sandbox rejected its configuration",k)}}catch(G){if((Deu(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:neu(G),sandboxPath:N,projectName:O.projectName,branch:O.branch}),$({handle:n.handle,status:"failed",sandboxPath:N,port:null,previewUrl:null,...O,error:neu(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 sCt(){return new Promise((i,u)=>{let t=mCt();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 Oeu=()=>{};import{randomUUID as pCt}from"crypto";import{hostname as iMt}from"os";async function Neu(i){let u=iMt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=abu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=J1i({path:K1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=geu({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:pCt(),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 iCu(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=Dh(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 E2(`http://127.0.0.1:${k}`,W,Y)},waitForHealth:async(k)=>{await Kli(`http://127.0.0.1:${k}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await bmu({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=tCu({provider:$}),h=async()=>{let k=await c2({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 smu(i.dataDir),v=process.env.npm_package_version??"0.0.0",D=await YRi(),n=amu(D,{onChange:(k)=>{console.log(`[link-daemon] capabilities detected: +${k.join(",")} (now: ${D.join(",")})`)}}),O=Azi({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 Smu(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(`
|
|
84566
84566
|
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=heu({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 yeu=g(()=>{yzi();BM();obu();uCu();fCu();Izi();jmu();Cmu();omu();pmu();TM();QRi();_eu();Oeu()});function zRi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as uMt}from"net";async function fMt(i){for(let u of tMt)if(await HRi(i,u))return u;return null}async function Zeu(i,{intervalMs:u=1000}={}){for(;;){let t=await fMt(i);if(t)return t;await O0(u)}}function HRi(i,u){return new Promise((t)=>{let f=uMt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var tMt;var RRi=g(()=>{N4();tMt=["localhost","127.0.0.1","0.0.0.0"]});function Teu(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function lMt(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 Beu(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`:","",` ${lMt(i,u)}`].join(`
|
|
84567
|
-
`)}var bRi;var Feu=g(()=>{bRi=class bRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var fW;var X1i=g(()=>{fW={name:"decocms",version:"4.92.0",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 pM={};Ji(pM,{printBanner:()=>$Mt,bannerLines:()=>Ueu,BANNER_LINES:()=>L1i,BANNER_GRADIENT:()=>W1i});function EMt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Ueu(i){let u=L1i.map((t,f)=>{let[l,c,E]=EMt(W1i[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 $Mt(i){console.log("");for(let u of Ueu(i))console.log(u);console.log("")}var L1i,W1i;var lW=g(()=>{L1i=[" \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 "],W1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as wMt,Text as Peu}from"ink";import{jsx as dMt,jsxs as Aeu}from"react/jsx-runtime";function Y1i({version:i}){return Aeu(wMt,{flexDirection:"column",marginTop:1,children:[L1i.map((u,t)=>dMt(Peu,{color:W1i[t],children:u},t)),Aeu(Peu,{dimColor:!0,children:[" v",i]})]})}var CRi=g(()=>{lW()});function Ieu(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 cW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function xeu(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 keu(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 rRi={};Ji(rRi,{subscribeLinkState:()=>MRi,setSelectedHandle:()=>qRi,setRemoving:()=>H1i,setPersistedSandboxes:()=>ZMt,setPendingConfirm:()=>uq,setMachine:()=>gMt,setLogPath:()=>NMt,setLinkActions:()=>yMt,setIngress:()=>nMt,setDaemonError:()=>OMt,setClusterUrl:()=>DMt,setCluster:()=>vMt,setActionError:()=>z1i,resetLinkStateForTests:()=>BMt,removeSandboxRow:()=>VRi,pushSandboxEvent:()=>TMt,getLinkState:()=>iq,applySandboxEvent:()=>Geu});function _Mt(i){return i==="spawning"||i==="ready"||i==="failed"}function Geu(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 Seu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:hMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Y$(){for(let i of Q1i)i()}function iq(){return lf}function MRi(i){return Q1i.add(i),()=>Q1i.delete(i)}function vMt(i){lf={...lf,cluster:i},Y$()}function DMt(i){lf={...lf,clusterUrl:i},Y$()}function nMt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Y$()}function gMt(i){lf={...lf,machine:i},Y$()}function OMt(i){lf={...lf,daemonError:i},Y$()}function NMt(i){lf={...lf,logPath:i},Y$()}function qRi(i){lf={...lf,selectedHandle:i},Y$()}function uq(i){lf={...lf,pendingConfirm:i},Y$()}function z1i(i){lf={...lf,actionError:i},Y$()}function H1i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},Y$()}function yMt(i){lf={...lf,actions:i},Y$()}function VRi(i){let u=cW(lf.sandboxes),t=keu(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Y$()}function ZMt(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 lf.sandboxes)if(_Mt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Y$()}function TMt(i){lf={...lf,sandboxes:Geu(lf.sandboxes,i)},Y$()}function BMt(){lf=Seu(),Q1i.clear()}var hMt=20,lf,Q1i;var tq=g(()=>{lf=Seu(),Q1i=new Set});import{spawn as FMt}from"child_process";function UMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function jeu(i,u=process.platform){let t=UMt(u);try{FMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Keu=()=>{};function Jeu(i,u={}){let t=u.openUrl??jeu,f=iq(),l=cW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":qRi(xeu(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);z1i(null),uq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(uq(null),$===null||!E)return;H1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)VRi($.handle);else H1i($.handle,!1),z1i(w.error)});return}case"confirmNo":uq(null);return;case"quit":if(E)E.quit();return}}var Xeu=g(()=>{tq();Keu()});function Leu(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 Weu={};Ji(Weu,{LinkApp:()=>xMt});import{Box as Ml,Text as h1,useInput as PMt}from"ink";import{useSyncExternalStore as AMt}from"react";import{jsx as kf,jsxs as Ph}from"react/jsx-runtime";function IMt(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 xMt(){let i=AMt(MRi,iq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=cW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return PMt((l,c)=>{let E=Leu(l,c,i.pendingConfirm!==null);if(E!==null)Jeu(E)}),Ph(Ml,{flexDirection:"column",children:[kf(Y1i,{version:fW.version}),kf(Ml,{marginBottom:1,children:kf(h1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Ml,{children:i.cluster==="linked"?Ph(h1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Ph(h1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Ph(h1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Ml,{children:i.ingressUrl?Ph(h1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(h1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Ml,{marginBottom:1,children:kf(h1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(h1,{dimColor:!0,children:"No previews running yet."}):Ph(Ml,{flexDirection:"column",children:[Ph(Ml,{children:[kf(Ml,{width:2,flexShrink:0}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Ml,{flexGrow:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=IMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Ph(Ml,{children:[kf(Ml,{width:2,flexShrink:0,children:kf(h1,{color:"cyan",children:E?"\u203A":" "})}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(h1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(h1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(h1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Ml,{flexGrow:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Ml,{marginTop:1,children:Ph(h1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Ml,{marginTop:1,children:Ph(h1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Ml,{marginTop:1,children:kf(h1,{color:"yellow",children:Ieu(i.pendingConfirm)})}):null,i.actionError?kf(Ml,{marginTop:1,children:Ph(h1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Ml,{marginTop:1,children:kf(h1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var EW;var Yeu=g(()=>{X1i();CRi();Xeu();tq();EW={project:18,branch:22,status:14}});var Qeu={};Ji(Qeu,{runLinkCommand:()=>LMt});import{closeSync as kMt,mkdirSync as GMt,openSync as SMt,writeSync as jMt}from"fs";import{homedir as KMt}from"os";import{join as mRi}from"path";function JMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{jMt(u,`${zRi(l)}
|
|
84567
|
+
`)}var bRi;var Feu=g(()=>{bRi=class bRi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var fW;var X1i=g(()=>{fW={name:"decocms",version:"4.92.2",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 pM={};Ji(pM,{printBanner:()=>$Mt,bannerLines:()=>Ueu,BANNER_LINES:()=>L1i,BANNER_GRADIENT:()=>W1i});function EMt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Ueu(i){let u=L1i.map((t,f)=>{let[l,c,E]=EMt(W1i[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 $Mt(i){console.log("");for(let u of Ueu(i))console.log(u);console.log("")}var L1i,W1i;var lW=g(()=>{L1i=[" \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 "],W1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as wMt,Text as Peu}from"ink";import{jsx as dMt,jsxs as Aeu}from"react/jsx-runtime";function Y1i({version:i}){return Aeu(wMt,{flexDirection:"column",marginTop:1,children:[L1i.map((u,t)=>dMt(Peu,{color:W1i[t],children:u},t)),Aeu(Peu,{dimColor:!0,children:[" v",i]})]})}var CRi=g(()=>{lW()});function Ieu(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 cW(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function xeu(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 keu(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 rRi={};Ji(rRi,{subscribeLinkState:()=>MRi,setSelectedHandle:()=>qRi,setRemoving:()=>H1i,setPersistedSandboxes:()=>ZMt,setPendingConfirm:()=>uq,setMachine:()=>gMt,setLogPath:()=>NMt,setLinkActions:()=>yMt,setIngress:()=>nMt,setDaemonError:()=>OMt,setClusterUrl:()=>DMt,setCluster:()=>vMt,setActionError:()=>z1i,resetLinkStateForTests:()=>BMt,removeSandboxRow:()=>VRi,pushSandboxEvent:()=>TMt,getLinkState:()=>iq,applySandboxEvent:()=>Geu});function _Mt(i){return i==="spawning"||i==="ready"||i==="failed"}function Geu(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 Seu(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:hMt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Y$(){for(let i of Q1i)i()}function iq(){return lf}function MRi(i){return Q1i.add(i),()=>Q1i.delete(i)}function vMt(i){lf={...lf,cluster:i},Y$()}function DMt(i){lf={...lf,clusterUrl:i},Y$()}function nMt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Y$()}function gMt(i){lf={...lf,machine:i},Y$()}function OMt(i){lf={...lf,daemonError:i},Y$()}function NMt(i){lf={...lf,logPath:i},Y$()}function qRi(i){lf={...lf,selectedHandle:i},Y$()}function uq(i){lf={...lf,pendingConfirm:i},Y$()}function z1i(i){lf={...lf,actionError:i},Y$()}function H1i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},Y$()}function yMt(i){lf={...lf,actions:i},Y$()}function VRi(i){let u=cW(lf.sandboxes),t=keu(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Y$()}function ZMt(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 lf.sandboxes)if(_Mt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Y$()}function TMt(i){lf={...lf,sandboxes:Geu(lf.sandboxes,i)},Y$()}function BMt(){lf=Seu(),Q1i.clear()}var hMt=20,lf,Q1i;var tq=g(()=>{lf=Seu(),Q1i=new Set});import{spawn as FMt}from"child_process";function UMt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function jeu(i,u=process.platform){let t=UMt(u);try{FMt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Keu=()=>{};function Jeu(i,u={}){let t=u.openUrl??jeu,f=iq(),l=cW(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":qRi(xeu(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);z1i(null),uq({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(uq(null),$===null||!E)return;H1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)VRi($.handle);else H1i($.handle,!1),z1i(w.error)});return}case"confirmNo":uq(null);return;case"quit":if(E)E.quit();return}}var Xeu=g(()=>{tq();Keu()});function Leu(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 Weu={};Ji(Weu,{LinkApp:()=>xMt});import{Box as Ml,Text as h1,useInput as PMt}from"ink";import{useSyncExternalStore as AMt}from"react";import{jsx as kf,jsxs as Ph}from"react/jsx-runtime";function IMt(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 xMt(){let i=AMt(MRi,iq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=cW(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return PMt((l,c)=>{let E=Leu(l,c,i.pendingConfirm!==null);if(E!==null)Jeu(E)}),Ph(Ml,{flexDirection:"column",children:[kf(Y1i,{version:fW.version}),kf(Ml,{marginBottom:1,children:kf(h1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Ml,{children:i.cluster==="linked"?Ph(h1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Ph(h1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Ph(h1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Ml,{children:i.ingressUrl?Ph(h1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(h1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Ml,{marginBottom:1,children:kf(h1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(h1,{dimColor:!0,children:"No previews running yet."}):Ph(Ml,{flexDirection:"column",children:[Ph(Ml,{children:[kf(Ml,{width:2,flexShrink:0}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Ml,{flexGrow:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=IMt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return Ph(Ml,{children:[kf(Ml,{width:2,flexShrink:0,children:kf(h1,{color:"cyan",children:E?"\u203A":" "})}),kf(Ml,{width:EW.project,flexShrink:0,marginRight:1,children:kf(h1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Ml,{width:EW.branch,flexShrink:0,marginRight:1,children:kf(h1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Ml,{width:EW.status,flexShrink:0,marginRight:1,children:kf(h1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Ml,{flexGrow:1,children:kf(h1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Ml,{marginTop:1,children:Ph(h1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Ml,{marginTop:1,children:Ph(h1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Ml,{marginTop:1,children:kf(h1,{color:"yellow",children:Ieu(i.pendingConfirm)})}):null,i.actionError?kf(Ml,{marginTop:1,children:Ph(h1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Ml,{marginTop:1,children:kf(h1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var EW;var Yeu=g(()=>{X1i();CRi();Xeu();tq();EW={project:18,branch:22,status:14}});var Qeu={};Ji(Qeu,{runLinkCommand:()=>LMt});import{closeSync as kMt,mkdirSync as GMt,openSync as SMt,writeSync as jMt}from"fs";import{homedir as KMt}from"os";import{join as mRi}from"path";function JMt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{jMt(u,`${zRi(l)}
|
|
84568
84568
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(zRi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function XMt(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 LMt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??mRi(KMt(),"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 HRi(u,"127.0.0.1"))throw new bRi(u);let w=mRi(t,"sandboxes");E=J1i({path:K1i(t),managedSandboxRoot:w});let d=await kli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await XMt(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(() => (Yeu(),Weu)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:A,setMachine:G,setPersistedSandboxes:I}=await Promise.resolve().then(() => (tq(),rRi));GMt(t,{recursive:!0});let k=mRi(t,"link.log");c=SMt(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=JMt(B,c),n(O(N),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:n}=await Promise.resolve().then(() => (lW(),pM));n(i.version??"0.0.0")}$();let v=process.env.DECOCMS_LINK_MANAGED!=="1",D=await Neu({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(() => (tq(),rRi));n({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(Teu(w)?Beu(u):w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{kMt(c)}catch{}$()}}var zeu=g(()=>{Nzi();yeu();RRi();Feu();QRi()});var ibi={};Ji(ibi,{resolveDevLinkClusterUrl:()=>zMt,populateDevLinkToxiProxy:()=>qeu,isDevLinkToxiProxyEnabled:()=>QMt,ensureDevLinkToxiProxy:()=>MMt,buildDevLinkToxiProxyConfig:()=>Ceu,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Reu,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>beu});function QMt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function eRi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Ceu(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=eRi(i.apiPort,"apiPort"),f=eRi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=eRi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Reu,proxyName:beu,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 zMt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function aRi(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 pRi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Meu(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Meu(i.cause)}async function oRi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${pRi(l)}`,{cause:l})}}async function qeu(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await oRi(u,"reset",t,{method:"POST"});await aRi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await oRi(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 aRi(c,"populate",l)}async function HMt(i,u){let t=`${i.apiUrl}/version`;try{await bl(async()=>{let f=await oRi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(YMt)});await aRi(f,"readiness check",t)},{maxAttempts:WMt,minTimeout:Heu,maxTimeout:Heu,multiplier:1,jitter:0,isRetriable:(f)=>!Meu(f)})}catch(f){let l=f instanceof Lc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${pRi(l)}`,{cause:l})}}async function RMt(i){if(i===null)return"";return await new Response(i).text()}async function sRi(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}): ${pRi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,RMt(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 bMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await sRi(["rm","-f",t],{ignoreFailure:!0}),await sRi(["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 CMt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await sRi(["rm","-f",t],{ignoreFailure:!0})}async function MMt(i){let u=Ceu(i),t=i.startDaemon??bMt,f=i.stopDaemon??(i.startDaemon===void 0?CMt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await HMt(u,l),await qeu(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 Reu="ToxiProxy",beu="dev_link_studio",WMt=20,Heu=100,YMt=100;var ubi=g(()=>{N4()});var Veu={};Ji(Veu,{migrateBetterAuth:()=>tbi});import{getMigrations as qMt}from"better-auth/db";import{sso as VMt}from"@better-auth/sso";import{organization as rMt}from"@decocms/better-auth/plugins";import{admin as mMt,apiKey as eMt,jwt as aMt,magicLink as oMt,mcp as sMt,openAPI as pMt}from"better-auth/plugins";import{emailOTP as iqt}from"better-auth/plugins/email-otp";async function tbi(i){let t={database:nM(i||u2()),plugins:[rMt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),mMt(),eMt(),aMt(),pMt(),sMt({loginPage:"/login"}),VMt(),oMt({sendMagicLink:async()=>{}}),iqt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await qMt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var fbi=g(()=>{lE()});var lbi={};Ji(lbi,{up:()=>uqt,down:()=>tqt});import{sql as $v}from"kysely";async function uqt(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 tqt(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 reu=()=>{};var cbi={};Ji(cbi,{up:()=>fqt,down:()=>lqt});import{sql as meu}from"kysely";async function fqt(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(meu`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(meu`CURRENT_TIMESTAMP`)).execute()}async function lqt(i){await i.schema.dropTable("organization_settings").execute()}var eeu=()=>{};var Ebi={};Ji(Ebi,{up:()=>cqt,down:()=>Eqt});async function cqt(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 Eqt(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 $bi={};Ji($bi,{up:()=>$qt,down:()=>wqt});async function $qt(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 wqt(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 wbi={};Ji(wbi,{up:()=>dqt,down:()=>hqt});async function dqt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function hqt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var dbi={};Ji(dbi,{up:()=>vqt,down:()=>Dqt});import{sql as _qt}from"kysely";async function vqt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",_qt`text`).execute()}async function Dqt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var aeu=()=>{};var hbi={};Ji(hbi,{up:()=>nqt,down:()=>gqt});async function nqt(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 gqt(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 _bi={};Ji(_bi,{up:()=>Oqt,down:()=>Nqt});import{sql as fq}from"kysely";async function Oqt(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(fq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(fq`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(fq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(fq`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(fq`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 Nqt(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 oeu=()=>{};var vbi={};Ji(vbi,{up:()=>Zqt,down:()=>Tqt});import{sql as yqt}from"kysely";async function Zqt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Tqt(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(yqt`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 seu=()=>{};var Dbi={};Ji(Dbi,{up:()=>Bqt,down:()=>Fqt});import{sql as R1i}from"kysely";async function Bqt(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(R1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(R1i`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(R1i`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 R1i`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 Fqt(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 peu=()=>{};var nbi={};Ji(nbi,{up:()=>Uqt,down:()=>Pqt});async function Uqt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function Pqt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var gbi={};Ji(gbi,{up:()=>Aqt,down:()=>Iqt});import{sql as b1i}from"kysely";async function Aqt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await b1i`
|
|
84569
84569
|
UPDATE gateways
|
|
84570
84570
|
SET tool_selection_mode = CASE
|
|
@@ -88098,7 +88098,7 @@ Hint: Configure a valid Google account email in Monitor Configuration > Contexto
|
|
|
88098
88098
|
|
|
88099
88099
|
`).trim(),v=h.length>0?`Not executed tools (${h.length}/${i.tools.length}): ${h.join(", ")}`:"",D=[_,v].filter((n)=>n.length>0).join(`
|
|
88100
88100
|
|
|
88101
|
-
`);return{toolResults:w,agentSummary:D.length>0?D:null,unexecutedTools:h}}finally{await u.close?.().catch(()=>{})}}async function I3u(i,u){let t=i.storage.registry,f=i.organization.id,l=await t.monitorConnections.findByItemId(f,u.id);if(l){if(await i.storage.connections.findById(l.connection_id,f))return l.connection_id}let c=Fg4(u);if(!c)throw Error(`Registry item ${u.id} has no remote URL`);if(F3u(c))throw Error(`Registry item ${u.id} targets a private network URL, refusing to create a monitor connection`);let E=Tg4(i),$=Bg4(u),w=await i.storage.connections.create({organization_id:f,created_by:E,title:`[MCP Tester] ${u.title}`,description:`Auto-created monitor connection for ${u.id}`,app_name:"private-registry-monitor",app_id:`${GJ}:monitor`,connection_type:$,connection_url:c,metadata:{monitorConnection:!0,registryItemId:u.id,pluginId:GJ}});return await t.monitorConnections.upsert({organization_id:f,item_id:u.id,connection_id:w.id,auth_status:"none"}),w.id}async function Kg4(i){let u=i.ctx.storage.registry;switch(i.action){case"unlisted":return await u.items.update(i.organizationId,i.item.id,{is_unlisted:!0}),"unlisted";case"remove_public":return await u.items.update(i.organizationId,i.item.id,{is_public:!1}),"removed_public";case"remove_private":case"remove_all":return await u.items.delete(i.organizationId,i.item.id),i.action==="remove_all"?"removed_all":"removed_private";default:return"none"}}async function Jg4(i){let u=Date.now();if(i.signal.aborted)throw Error("Run cancelled");let t="passed",f=!1,l=!1,c=null,E="none",$=null,w=[],d=null,h=async()=>{await i.onProgress?.({status:t,connectionOk:f,toolsListed:l,toolResults:[...w],agentSummary:$,errorMessage:c,actionTaken:E,durationMs:Date.now()-u})};try{let _=await I3u(i.ctx,i.item);d=await i.ctx.createMCPProxy(_),f=!0;let D=(await ip(d.listTools?d.listTools():Promise.resolve({tools:[]}),i.monitorConfig.perMcpTimeoutMs,`listTools ${i.item.id}`)).tools??[];if(l=!0,i.monitorConfig.monitorMode!=="health_check")w.push(...D.map((n)=>A3u(n.name))),await h();if(i.monitorConfig.monitorMode==="full_agent"){let n=await jg4({ctx:i.ctx,monitorConfig:i.monitorConfig,item:i.item,proxy:d,tools:D,signal:i.signal,onProgress:async(O)=>{w.length=0,w.push(...$e0({discoveredTools:D,executedResults:O})),t=O.some((N)=>!N.success)?"failed":"passed",await h()}});if(w.length=0,w.push(...$e0({discoveredTools:D,executedResults:n.toolResults})),$=n.agentSummary,n.toolResults.some((O)=>!O.success))t="failed";if(n.unexecutedTools.length>0){if(t="failed",!c)c=`Agent skipped ${n.unexecutedTools.length} tool(s): ${n.unexecutedTools.join(", ")}`}}else if(i.monitorConfig.monitorMode!=="health_check"){for(let n=0;n<D.length;n++){let O=D[n];if(!O||i.signal.aborted)throw Error("Run cancelled");let N=Date.now();try{let y={},Z=await ip(d.callTool({name:O.name,arguments:y}),i.monitorConfig.perToolTimeoutMs,`tool ${O.name}`),T=!Z.isError,B=Date.now()-N;we0(w,{toolName:O.name,success:T,input:y,durationMs:B,outputPreview:ve0(Z.structuredContent??Z.content),error:T?null:NPi(Z.content?.find((F)=>F.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await h()}catch(y){let Z=Date.now()-N,T=y instanceof Error?y.message:String(y);we0(w,{toolName:O.name,success:!1,durationMs:Z,error:NPi(T)}),await h()}}if(w.some((n)=>!n.success))t="failed"}else for(let n of D)w.push(A3u(n.name));if(i.canApplyFailureAction&&t==="failed"&&i.monitorConfig.onFailure!=="none")E=await Kg4({ctx:i.ctx,organizationId:i.organizationId,item:i.item,action:i.monitorConfig.onFailure})}catch(_){if(c=_ instanceof Error?_.message:String(_),Ug4(_))t="needs_auth",await i.ctx.storage.registry.monitorConnections.updateAuthStatus(i.organizationId,i.item.id,"needs_auth");else t="error"}finally{await d?.close?.().catch(()=>{})}return{status:t,connectionOk:f,toolsListed:l,toolResults:w,agentSummary:$,errorMessage:c,actionTaken:E,durationMs:Date.now()-u}}async function Xg4(i){let u=i.ctx.storage.registry,f=(await u.items.list(i.organizationId,{includeUnlisted:!0})).items.filter((h)=>{if(i.monitorConfig.testPublicOnly&&!h.is_public)return!1;if(i.monitorConfig.testPrivateOnly&&h.is_public)return!1;return!0}),l=i.monitorConfig.includePendingRequests?(await u.publishRequests.list(i.organizationId,{status:"pending",limit:500})).items.map((h)=>Lg4(h)):[],c=[...f.map((h)=>({item:h,source:"registry_item"})),...l.map((h)=>({item:h,source:"publish_request"}))];if(c.length===0){await u.monitorRuns.update(i.organizationId,i.runId,{total_items:0,status:"completed",started_at:new Date().toISOString(),finished_at:new Date().toISOString()});return}await u.monitorRuns.update(i.organizationId,i.runId,{total_items:c.length,status:"running",started_at:new Date().toISOString()});let E=0,$=0,w=0,d=0;for(let h=0;h<c.length;h++){let _=c[h],v=_?.item;if(!v||i.signal.aborted){await u.monitorRuns.update(i.organizationId,i.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()});return}await u.monitorRuns.update(i.organizationId,i.runId,{current_item_id:v.id});let D=null,n=async(N)=>{if(!D){D=(await u.monitorResults.create({run_id:i.runId,organization_id:i.organizationId,item_id:v.id,item_title:v.title,status:N.status,error_message:N.errorMessage,connection_ok:N.connectionOk,tools_listed:N.toolsListed,tool_results:N.toolResults,agent_summary:N.agentSummary,duration_ms:N.durationMs,action_taken:N.actionTaken})).id;return}await u.monitorResults.update(i.organizationId,D,{status:N.status,error_message:N.errorMessage,connection_ok:N.connectionOk,tools_listed:N.toolsListed,tool_results:N.toolResults,agent_summary:N.agentSummary,duration_ms:N.durationMs,action_taken:N.actionTaken})},O=await Jg4({ctx:i.ctx,organizationId:i.organizationId,item:v,monitorConfig:i.monitorConfig,signal:i.signal,canApplyFailureAction:_.source==="registry_item",onProgress:n});if(await n({status:O.status,connectionOk:O.connectionOk,toolsListed:O.toolsListed,toolResults:O.toolResults,agentSummary:O.agentSummary,errorMessage:O.errorMessage,actionTaken:O.actionTaken,durationMs:O.durationMs}),E+=1,O.status==="passed")$+=1;else if(O.status==="failed"||O.status==="error")w+=1;else d+=1;await u.monitorRuns.update(i.organizationId,i.runId,{tested_items:E,passed_items:$,failed_items:w,skipped_items:d})}await u.monitorRuns.update(i.organizationId,i.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()})}function Lg4(i){return{id:`${Og}${i.id}`,title:i.title,description:i.description,_meta:i._meta,server:i.server,is_public:!1,is_unlisted:!0,created_at:i.created_at,updated_at:i.updated_at}}async function Wg4(i,u){let t=Zg4(i);await t.access.check();let f=t.storage.registry,l=await f.monitorRuns.create({organization_id:t.organization.id,status:"pending",config_snapshot:u,started_at:null}),c=new AbortController;return OPi.set(l.id,c),Xg4({ctx:t,runId:l.id,organizationId:t.organization.id,monitorConfig:u,signal:c.signal}).catch(async(E)=>{await f.monitorRuns.update(t.organization.id,l.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),yg4(`Run ${l.id} failed with uncaught error:`,E)}).finally(()=>{OPi.delete(l.id)}),{run:{id:l.id}}}var OPi,gg4="[MONITOR-AGENT]",Og4,Ng4="health_check: not called",ge0;var yPi=g(()=>{Eu();Uf();U3u();nR();s8();OPi=new Map,Og4=zm0;ge0=ti({name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:qm0,outputSchema:Vm0,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=Mm0(i.config??{}),{run:l}=await Wg4(u,f),E=await u.storage.registry.monitorRuns.findById(t.id,l.id);if(!E)throw Error(`Failed to load monitor run ${l.id}`);return{run:E}}})});var Oe0;var Ne0=g(()=>{Eu();s8();Oe0=ti({name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:em0,outputSchema:am0,handler:async(i,u)=>{let t=yi(u);return await u.access.check(),u.storage.registry.monitorRuns.list(t.id,i)}})});var ye0;var Ze0=g(()=>{Eu();s8();ye0=ti({name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:om0,outputSchema:sm0,handler:async(i,u)=>{let t=yi(u);return await u.access.check(),{run:await u.storage.registry.monitorRuns.findById(t.id,i.runId)}}})});var Te0;var Be0=g(()=>{Eu();s8();yPi();Te0=ti({name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:rm0,outputSchema:mm0,handler:async(i,u)=>{let t=yi(u);return await u.access.check(),_e0(i.runId),{run:await u.storage.registry.monitorRuns.update(t.id,i.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}}})});var Fe0;var Ue0=g(()=>{Eu();s8();Fe0=ti({name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:pm0,outputSchema:ie0,handler:async(i,u)=>{let t=yi(u);return await u.access.check(),u.storage.registry.monitorResults.listByRun(t.id,i.runId,{status:i.status,limit:i.limit,offset:i.offset})}})});var Pe0;var Ae0=g(()=>{Eu();s8();nR();Pe0=ti({name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:ue0,outputSchema:te0,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=await f.monitorConnections.list(t.id);return{items:await Promise.all(l.map(async(E)=>{let $=await f.items.findById(t.id,E.item_id);if(!$&&E.item_id.startsWith(Og)){let h=E.item_id.slice(Og.length),_=await f.publishRequests.findById(t.id,h);if(_)$={id:E.item_id,title:_.title,description:_.description,_meta:_._meta,server:_.server,is_public:!1,is_unlisted:!0,created_at:_.created_at,updated_at:_.updated_at}}let w=$?.server.remotes?.find((h)=>h.url)?.url??null,d=E.item_id.startsWith(Og)?"request":"store";return{mapping:E,item:$,remoteUrl:w,source:d}}))}}})});function Yg4(i){return{id:`${Og}${i.id}`,title:i.title,description:i.description,_meta:i._meta,server:i.server,is_public:!1,is_unlisted:!0,created_at:i.created_at,updated_at:i.updated_at}}var Ie0;var xe0=g(()=>{Eu();s8();yPi();nR();Ie0=ti({name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:fe0,outputSchema:le0,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=(await f.items.list(t.id,{includeUnlisted:!0})).items,E=(await f.publishRequests.list(t.id,{status:"pending",limit:500})).items.map(Yg4),$=[...l,...E],w=await f.monitorConnections.list(t.id),d=new Set(w.map((_)=>_.item_id)),h=0;for(let _ of $){if(!_.server.remotes?.some((v)=>v.url))continue;try{await I3u(u,_)}catch(v){console.warn(`[REGISTRY_MONITOR_CONNECTION_SYNC] Skipping ${_.id}:`,v instanceof Error?v.message:v);continue}if(!d.has(_.id))h+=1}return{created:h,updated:Math.max($.length-h,0)}}})});var ke0;var Ge0=g(()=>{Eu();s8();ke0=ti({name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:ce0,outputSchema:Ee0,handler:async({connectionId:i,authStatus:u},t)=>{let f=yi(t);await t.access.check();let l=t.storage.registry,c=f.id,E=await l.monitorConnections.findByConnectionId(c,i);if(!E)throw Error(`No monitor connection mapping found for connection ${i}`);return await l.monitorConnections.updateAuthStatus(c,E.item_id,u),{success:!0}}})});function Qg4(i){if(!i)return{};if(typeof i==="string")try{return JSON.parse(i)}catch{return{}}if(typeof i==="object")return i;return{}}async function up(i,u){let f=(await i.db.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",GJ).execute()).map((c)=>Qg4(c.settings)),l={acceptPublishRequests:f.some((c)=>c.acceptPublishRequests===!0),requireApiToken:f.some((c)=>c.requireApiToken===!0),storePrivateOnly:f.some((c)=>c.storePrivateOnly===!0)};if(l.acceptPublishRequests||l.requireApiToken||l.storePrivateOnly)return l;for(let c of f)if(Object.keys(c).length>0)return c;return{}}var Se0=g(()=>{nR()});import{z as x3u}from"zod";function zg4(i,u){if(!u)return i;let t={field:["is_public"],operator:"eq",value:!1};if(!i)return t;return{operator:"and",conditions:[i,t]}}function Hg4(i){let u=new Map,t=new Map;for(let l of i){let c=l._meta?.["mcp.mesh"];for(let E of c?.tags??[])u.set(E,(u.get(E)??0)+1);for(let E of c?.categories??[])t.set(E,(t.get(E)??0)+1)}let f=(l)=>Array.from(l.entries()).map(([c,E])=>({value:c,count:E})).sort((c,E)=>c.value.localeCompare(E.value));return{tags:f(u),categories:f(t)}}var je0,Ke0,Je0,Xe0;var Le0=g(()=>{Eu();F1();Se0();je0=ti({name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:dR,outputSchema:hR,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=await up(u,t.id);return f.items.list(t.id,{...i,where:zg4(i.where,l.storePrivateOnly===!0)})}}),Ke0=ti({name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:j5,outputSchema:kJ,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=await up(u,t.id),c=i.id??i.name;if(!c)return{item:null};let E=await f.items.findByIdOrName(t.id,c);if(!E)return{item:null};if(l.storePrivateOnly&&E.is_public)return{item:null};return{item:E}}}),Je0=ti({name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:j5,outputSchema:x3u.object({versions:x3u.array(Q_)}),handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=await up(u,t.id),c=i.id??i.name;if(!c)return{versions:[]};let E=await f.items.findByIdOrName(t.id,c);if(!E)return{versions:[]};if(l.storePrivateOnly&&E.is_public)return{versions:[]};return{versions:[E]}}}),Xe0=ti({name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:x3u.object({}),outputSchema:_R,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry;if(!(await up(u,t.id)).storePrivateOnly)return f.items.getFilters(t.id);let c=await f.items.list(t.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return Hg4(c.items)}})});var We0;var Ye0=g(()=>{fm0();cm0();$m0();dm0();U3u();Dm0();gm0();Nm0();Zm0();Bm0();Pm0();Im0();km0();Sm0();Km0();Xm0();Wm0();Qm0();yPi();Ne0();Ze0();Be0();Ue0();Ae0();xe0();Ge0();Le0();We0=[je0,Ke0,Je0,Xe0,Om0,ym0,nm0,Um0,Em0,tm0,Tm0,wm0,vm0,_m0,lm0,Am0,xm0,Gm0,jm0,Jm0,Lm0,Ym0,ge0,Oe0,ye0,Te0,Fe0,Pe0,Ie0,ke0]});import{z as gR}from"zod";var bg4,k3u;var Qe0=g(()=>{yd();Eu();$H();Dw();VK();bg4=gR.enum(["agent-sandbox","user-desktop","cluster"]),k3u=ti({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:gR.object({virtualMcpId:gR.string().describe("Virtual MCP ID that owns this VM"),branch:gR.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:bg4.describe("Kind of sandbox provider the VM was started with. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. Used to locate the correct 3-level sandboxMap entry.")}),outputSchema:gR.object({success:gR.boolean()}),handler:async(i,u)=>{let t=G8(i.sandboxProviderKind),f;try{f=await VS0({...i,sandboxProviderKind:t},u)}catch($){if($ instanceof Error&&$.message==="Virtual MCP not found")return{success:!0};throw $}let{entry:l,userId:c}=f;if(!l)return{success:!0};let{provider:E}=await Ud(u,{userId:c,branch:i.branch,virtualMcpMetadata:f.metadata,explicitKind:t});return await A9(u.storage.virtualMcps,i.virtualMcpId,c,c,i.branch,t),await E.delete(l.sandboxHandle).catch(($)=>console.error(`[SANDBOX_DELETE] ${t} ${l.sandboxHandle}: ${$ instanceof Error?$.message:String($)}`)),{success:!0}}})});var ze0=g(()=>{kTi();Qe0()});import{z as K5}from"zod";var Mg4="https://api.github.com",G3u;var He0=g(()=>{Eu();f9();l9();n_();G3u=ti({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:K5.object({connectionId:K5.string().describe("ID of the mcp-github connection to use")}),outputSchema:K5.object({installations:K5.array(K5.object({installationId:K5.number(),login:K5.string(),avatarUrl:K5.string(),type:K5.string()})),appSlug:K5.string().optional()}),handler:async(i,u)=>{await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization context required");let f=await u.storage.connections.findById(i.connectionId,t);if(!f)throw Error("Connection not found");if(k3(f))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let l=new el(u.db,u.vault),c=await l.get(i.connectionId);if(!c)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let E=c.accessToken;if(i3i(c)&&l.isExpired(c,va)){let v=await u3i(c,l);if(!v)throw Error(FE);E=v,c=await l.get(i.connectionId)??c}let $=[],w,d=1,h=100,_=async(v)=>fetch(`${Mg4}/user/installations?per_page=${h}&page=${d}`,{headers:{Authorization:`Bearer ${v}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let v=await _(E);if(v.status===401){let n=await l.get(i.connectionId);if(!n||!i3i(n))throw Error(FE);let O=await u3i(n,l);if(!O)throw Error(FE);if(E=O,v=await _(E),v.status===401)throw Error(FE)}if(!v.ok)throw Error(`GitHub /user/installations failed: ${v.status}`);let D=await v.json();for(let n of D.installations){if(!w)w=n.app_slug??n.app?.slug;$.push({installationId:n.id,login:n.account.login,avatarUrl:n.account.avatar_url,type:n.account.type})}if(D.installations.length<h)break;d++}return{installations:$,...w?{appSlug:w}:{}}}})});var Re0=g(()=>{He0()});import SJ from"zod";var S3u;var be0=g(()=>{TRi();Eu();S3u=ti({name:"LINK_CURRENT_GET",description:"Return the calling user's currently registered desktop link, or `online: false` if no link is registered or the TTL has expired.",inputSchema:SJ.object({}),outputSchema:SJ.object({online:SJ.boolean(),machineId:SJ.string().optional(),hostname:SJ.string().optional(),cliVersion:SJ.string().optional(),capabilities:SJ.array(Uzi).default([])}),handler:async(i,u)=>{ki(u),await u.access.check();let t=u.linkStatusProbe;if(!t)return{online:!1,capabilities:[]};let f=await t(u.auth.user.id);if(!f.online)return{online:!1,capabilities:[]};return{online:!0,hostname:f.hostname,cliVersion:f.cliVersion,capabilities:f.capabilities}}})});import j3u from"zod";var K3u;var Ce0=g(()=>{Eu();K3u=ti({name:"LINK_DISCONNECT",description:"Disconnect the calling user's desktop link from the Studio side: tells the linked daemon to shut down (via a `shutdown` control frame) and removes the presence claim. The user re-links by running `bunx decocms@latest link` on the desktop.",inputSchema:j3u.object({}),outputSchema:j3u.object({disconnected:j3u.boolean()}),handler:async(i,u)=>{ki(u),await u.access.check();let t=u.auth.user.id;if(!u.publishLinkControlFrame)return{disconnected:!1};return u.publishLinkControlFrame(t,{type:"shutdown"}),{disconnected:!0}}})});var Me0=g(()=>{be0();Ce0()});import{z as fc}from"zod";function qe0(i){if(!i)return"";return typeof i==="string"?i:i.toISOString()}var rg4,mg4,eg4,ag4,og4,J3u;var Ve0=g(()=>{Eu();rg4=["thread"],mg4=fc.object({type:fc.literal("thread"),id:fc.string(),title:fc.string(),created_at:fc.string(),updated_at:fc.string(),virtual_mcp_id:fc.string().nullable(),run_config:fc.record(fc.string(),fc.unknown()).nullable(),status:fc.string().nullable()}),eg4=fc.discriminatedUnion("type",[mg4]),ag4=fc.object({query:fc.string().min(1).describe("Free-text search query."),limit:fc.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:fc.array(fc.enum(rg4)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),og4=fc.object({items:fc.array(eg4),totalCount:fc.number()});J3u=ti({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ag4,outputSchema:og4,handler:async(i,u)=>{await u.access.check(),yi(u);let t=i.limit??20,f=i.types?.length?new Set(i.types):null,l=!f||f.has("thread"),c=[],E=0;if(l){let{threads:$,total:w}=await u.storage.threads.list(void 0,{limit:t,offset:0,search:i.query,includeArchived:!1});E+=w;for(let d of $)c.push({type:"thread",id:d.id,title:d.title??"",created_at:qe0(d.created_at),updated_at:qe0(d.updated_at),virtual_mcp_id:d.virtual_mcp_id??null,run_config:d.run_config??null,status:d.status??null})}return{items:c,totalCount:E}}})});var re0=g(()=>{Ve0()});var J3i={};Ji(J3i,{managementMCP:()=>yH,managementContextStore:()=>oK,listManagementTools:()=>pg4,TOOL_BY_NAME:()=>tp,CORE_TOOLS:()=>ee0});import{z as me0}from"zod";async function pg4(i){let u=await yH(i),[t,f]=Er.createLinkedPair();await u.connect(f);let l=new k1({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:Jl});try{return await l.connect(t),(await l.listTools()).tools}finally{await l.close().catch(()=>{}),await u.close().catch(()=>{})}}var ee0,tp,yH=async(i)=>{let u=new CD({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:Jl});for(let l of tp.values()){let{config:c,handler:E}=fPi(l);u.registerTool(l.name,c,E)}let t=tPi();for(let l of t){let c=l.arguments?.length?Object.fromEntries(l.arguments.map((E)=>{let $=E.required?me0.string():me0.string().optional();return[E.name,E.description?$.describe(E.description):$]})):void 0;u.registerPrompt(l.name,{title:l.title,description:l.description,...c?{argsSchema:c}:{}},(E)=>{return{messages:[{role:"user",content:{type:"text",text:typeof l.text==="function"?l.text(E??{}):l.text}}]}})}if(i.organization?.id){let l=await i.storage.brandContext.list(i.organization.id),c=new Set;for(let E of l){let $=E.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),w=$?`brand-${$}`:`brand-${E.id}`;if(c.has(w))w=`${w}-${E.id.slice(0,8)}`;c.add(w);let d=[`# Brand: ${E.name}`,"",`**Domain:** ${E.domain}`,"","## Overview",E.overview];if(E.colors){let _=Object.entries(E.colors).filter(([,v])=>v);if(_.length>0){d.push("","## Colors");for(let[v,D]of _)d.push(`- **${v}:** ${D}`)}}if(E.fonts){let _=Object.entries(E.fonts).filter(([,v])=>v);if(_.length>0){d.push("","## Fonts");for(let[v,D]of _)d.push(`- ${D} (${v})`)}}if(E.logo)d.push("",`**Logo:** ${E.logo}`);if(E.favicon)d.push(`**Favicon:** ${E.favicon}`);if(E.ogImage)d.push(`**OG Image:** ${E.ogImage}`);if(E.images&&E.images.length>0){d.push("","## Images");for(let _ of E.images){let v=Object.entries(_).map(([D,n])=>`${D}: ${n}`).join(", ");d.push(`- ${v}`)}}let h=d.join(`
|
|
88101
|
+
`);return{toolResults:w,agentSummary:D.length>0?D:null,unexecutedTools:h}}finally{await u.close?.().catch(()=>{})}}async function I3u(i,u){let t=i.storage.registry,f=i.organization.id,l=await t.monitorConnections.findByItemId(f,u.id);if(l){if(await i.storage.connections.findById(l.connection_id,f))return l.connection_id}let c=Fg4(u);if(!c)throw Error(`Registry item ${u.id} has no remote URL`);if(F3u(c))throw Error(`Registry item ${u.id} targets a private network URL, refusing to create a monitor connection`);let E=Tg4(i),$=Bg4(u),w=await i.storage.connections.create({organization_id:f,created_by:E,title:`[MCP Tester] ${u.title}`,description:`Auto-created monitor connection for ${u.id}`,app_name:"private-registry-monitor",app_id:`${GJ}:monitor`,connection_type:$,connection_url:c,metadata:{monitorConnection:!0,registryItemId:u.id,pluginId:GJ}});return await t.monitorConnections.upsert({organization_id:f,item_id:u.id,connection_id:w.id,auth_status:"none"}),w.id}async function Kg4(i){let u=i.ctx.storage.registry;switch(i.action){case"unlisted":return await u.items.update(i.organizationId,i.item.id,{is_unlisted:!0}),"unlisted";case"remove_public":return await u.items.update(i.organizationId,i.item.id,{is_public:!1}),"removed_public";case"remove_private":case"remove_all":return await u.items.delete(i.organizationId,i.item.id),i.action==="remove_all"?"removed_all":"removed_private";default:return"none"}}async function Jg4(i){let u=Date.now();if(i.signal.aborted)throw Error("Run cancelled");let t="passed",f=!1,l=!1,c=null,E="none",$=null,w=[],d=null,h=async()=>{await i.onProgress?.({status:t,connectionOk:f,toolsListed:l,toolResults:[...w],agentSummary:$,errorMessage:c,actionTaken:E,durationMs:Date.now()-u})};try{let _=await I3u(i.ctx,i.item);d=await i.ctx.createMCPProxy(_),f=!0;let D=(await ip(d.listTools?d.listTools():Promise.resolve({tools:[]}),i.monitorConfig.perMcpTimeoutMs,`listTools ${i.item.id}`)).tools??[];if(l=!0,i.monitorConfig.monitorMode!=="health_check")w.push(...D.map((n)=>A3u(n.name))),await h();if(i.monitorConfig.monitorMode==="full_agent"){let n=await jg4({ctx:i.ctx,monitorConfig:i.monitorConfig,item:i.item,proxy:d,tools:D,signal:i.signal,onProgress:async(O)=>{w.length=0,w.push(...$e0({discoveredTools:D,executedResults:O})),t=O.some((N)=>!N.success)?"failed":"passed",await h()}});if(w.length=0,w.push(...$e0({discoveredTools:D,executedResults:n.toolResults})),$=n.agentSummary,n.toolResults.some((O)=>!O.success))t="failed";if(n.unexecutedTools.length>0){if(t="failed",!c)c=`Agent skipped ${n.unexecutedTools.length} tool(s): ${n.unexecutedTools.join(", ")}`}}else if(i.monitorConfig.monitorMode!=="health_check"){for(let n=0;n<D.length;n++){let O=D[n];if(!O||i.signal.aborted)throw Error("Run cancelled");let N=Date.now();try{let y={},Z=await ip(d.callTool({name:O.name,arguments:y}),i.monitorConfig.perToolTimeoutMs,`tool ${O.name}`),T=!Z.isError,B=Date.now()-N;we0(w,{toolName:O.name,success:T,input:y,durationMs:B,outputPreview:ve0(Z.structuredContent??Z.content),error:T?null:NPi(Z.content?.find((F)=>F.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await h()}catch(y){let Z=Date.now()-N,T=y instanceof Error?y.message:String(y);we0(w,{toolName:O.name,success:!1,durationMs:Z,error:NPi(T)}),await h()}}if(w.some((n)=>!n.success))t="failed"}else for(let n of D)w.push(A3u(n.name));if(i.canApplyFailureAction&&t==="failed"&&i.monitorConfig.onFailure!=="none")E=await Kg4({ctx:i.ctx,organizationId:i.organizationId,item:i.item,action:i.monitorConfig.onFailure})}catch(_){if(c=_ instanceof Error?_.message:String(_),Ug4(_))t="needs_auth",await i.ctx.storage.registry.monitorConnections.updateAuthStatus(i.organizationId,i.item.id,"needs_auth");else t="error"}finally{await d?.close?.().catch(()=>{})}return{status:t,connectionOk:f,toolsListed:l,toolResults:w,agentSummary:$,errorMessage:c,actionTaken:E,durationMs:Date.now()-u}}async function Xg4(i){let u=i.ctx.storage.registry,f=(await u.items.list(i.organizationId,{includeUnlisted:!0})).items.filter((h)=>{if(i.monitorConfig.testPublicOnly&&!h.is_public)return!1;if(i.monitorConfig.testPrivateOnly&&h.is_public)return!1;return!0}),l=i.monitorConfig.includePendingRequests?(await u.publishRequests.list(i.organizationId,{status:"pending",limit:500})).items.map((h)=>Lg4(h)):[],c=[...f.map((h)=>({item:h,source:"registry_item"})),...l.map((h)=>({item:h,source:"publish_request"}))];if(c.length===0){await u.monitorRuns.update(i.organizationId,i.runId,{total_items:0,status:"completed",started_at:new Date().toISOString(),finished_at:new Date().toISOString()});return}await u.monitorRuns.update(i.organizationId,i.runId,{total_items:c.length,status:"running",started_at:new Date().toISOString()});let E=0,$=0,w=0,d=0;for(let h=0;h<c.length;h++){let _=c[h],v=_?.item;if(!v||i.signal.aborted){await u.monitorRuns.update(i.organizationId,i.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()});return}await u.monitorRuns.update(i.organizationId,i.runId,{current_item_id:v.id});let D=null,n=async(N)=>{if(!D){D=(await u.monitorResults.create({run_id:i.runId,organization_id:i.organizationId,item_id:v.id,item_title:v.title,status:N.status,error_message:N.errorMessage,connection_ok:N.connectionOk,tools_listed:N.toolsListed,tool_results:N.toolResults,agent_summary:N.agentSummary,duration_ms:N.durationMs,action_taken:N.actionTaken})).id;return}await u.monitorResults.update(i.organizationId,D,{status:N.status,error_message:N.errorMessage,connection_ok:N.connectionOk,tools_listed:N.toolsListed,tool_results:N.toolResults,agent_summary:N.agentSummary,duration_ms:N.durationMs,action_taken:N.actionTaken})},O=await Jg4({ctx:i.ctx,organizationId:i.organizationId,item:v,monitorConfig:i.monitorConfig,signal:i.signal,canApplyFailureAction:_.source==="registry_item",onProgress:n});if(await n({status:O.status,connectionOk:O.connectionOk,toolsListed:O.toolsListed,toolResults:O.toolResults,agentSummary:O.agentSummary,errorMessage:O.errorMessage,actionTaken:O.actionTaken,durationMs:O.durationMs}),E+=1,O.status==="passed")$+=1;else if(O.status==="failed"||O.status==="error")w+=1;else d+=1;await u.monitorRuns.update(i.organizationId,i.runId,{tested_items:E,passed_items:$,failed_items:w,skipped_items:d})}await u.monitorRuns.update(i.organizationId,i.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()})}function Lg4(i){return{id:`${Og}${i.id}`,title:i.title,description:i.description,_meta:i._meta,server:i.server,is_public:!1,is_unlisted:!0,created_at:i.created_at,updated_at:i.updated_at}}async function Wg4(i,u){let t=Zg4(i);await t.access.check();let f=t.storage.registry,l=await f.monitorRuns.create({organization_id:t.organization.id,status:"pending",config_snapshot:u,started_at:null}),c=new AbortController;return OPi.set(l.id,c),Xg4({ctx:t,runId:l.id,organizationId:t.organization.id,monitorConfig:u,signal:c.signal}).catch(async(E)=>{await f.monitorRuns.update(t.organization.id,l.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),yg4(`Run ${l.id} failed with uncaught error:`,E)}).finally(()=>{OPi.delete(l.id)}),{run:{id:l.id}}}var OPi,gg4="[MONITOR-AGENT]",Og4,Ng4="health_check: not called",ge0;var yPi=g(()=>{Eu();Uf();U3u();nR();s8();OPi=new Map,Og4=zm0;ge0=ti({name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:qm0,outputSchema:Vm0,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=Mm0(i.config??{}),{run:l}=await Wg4(u,f),E=await u.storage.registry.monitorRuns.findById(t.id,l.id);if(!E)throw Error(`Failed to load monitor run ${l.id}`);return{run:E}}})});var Oe0;var Ne0=g(()=>{Eu();s8();Oe0=ti({name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:em0,outputSchema:am0,handler:async(i,u)=>{let t=yi(u);return await u.access.check(),u.storage.registry.monitorRuns.list(t.id,i)}})});var ye0;var Ze0=g(()=>{Eu();s8();ye0=ti({name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:om0,outputSchema:sm0,handler:async(i,u)=>{let t=yi(u);return await u.access.check(),{run:await u.storage.registry.monitorRuns.findById(t.id,i.runId)}}})});var Te0;var Be0=g(()=>{Eu();s8();yPi();Te0=ti({name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:rm0,outputSchema:mm0,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry;if(!await f.monitorRuns.findById(t.id,i.runId))throw Error(`Monitor run not found: ${i.runId}`);return _e0(i.runId),{run:await f.monitorRuns.update(t.id,i.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}}})});var Fe0;var Ue0=g(()=>{Eu();s8();Fe0=ti({name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:pm0,outputSchema:ie0,handler:async(i,u)=>{let t=yi(u);return await u.access.check(),u.storage.registry.monitorResults.listByRun(t.id,i.runId,{status:i.status,limit:i.limit,offset:i.offset})}})});var Pe0;var Ae0=g(()=>{Eu();s8();nR();Pe0=ti({name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:ue0,outputSchema:te0,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=await f.monitorConnections.list(t.id);return{items:await Promise.all(l.map(async(E)=>{let $=await f.items.findById(t.id,E.item_id);if(!$&&E.item_id.startsWith(Og)){let h=E.item_id.slice(Og.length),_=await f.publishRequests.findById(t.id,h);if(_)$={id:E.item_id,title:_.title,description:_.description,_meta:_._meta,server:_.server,is_public:!1,is_unlisted:!0,created_at:_.created_at,updated_at:_.updated_at}}let w=$?.server.remotes?.find((h)=>h.url)?.url??null,d=E.item_id.startsWith(Og)?"request":"store";return{mapping:E,item:$,remoteUrl:w,source:d}}))}}})});function Yg4(i){return{id:`${Og}${i.id}`,title:i.title,description:i.description,_meta:i._meta,server:i.server,is_public:!1,is_unlisted:!0,created_at:i.created_at,updated_at:i.updated_at}}var Ie0;var xe0=g(()=>{Eu();s8();yPi();nR();Ie0=ti({name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:fe0,outputSchema:le0,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=(await f.items.list(t.id,{includeUnlisted:!0})).items,E=(await f.publishRequests.list(t.id,{status:"pending",limit:500})).items.map(Yg4),$=[...l,...E],w=await f.monitorConnections.list(t.id),d=new Set(w.map((_)=>_.item_id)),h=0;for(let _ of $){if(!_.server.remotes?.some((v)=>v.url))continue;try{await I3u(u,_)}catch(v){console.warn(`[REGISTRY_MONITOR_CONNECTION_SYNC] Skipping ${_.id}:`,v instanceof Error?v.message:v);continue}if(!d.has(_.id))h+=1}return{created:h,updated:Math.max($.length-h,0)}}})});var ke0;var Ge0=g(()=>{Eu();s8();ke0=ti({name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:ce0,outputSchema:Ee0,handler:async({connectionId:i,authStatus:u},t)=>{let f=yi(t);await t.access.check();let l=t.storage.registry,c=f.id,E=await l.monitorConnections.findByConnectionId(c,i);if(!E)throw Error(`No monitor connection mapping found for connection ${i}`);return await l.monitorConnections.updateAuthStatus(c,E.item_id,u),{success:!0}}})});function Qg4(i){if(!i)return{};if(typeof i==="string")try{return JSON.parse(i)}catch{return{}}if(typeof i==="object")return i;return{}}async function up(i,u){let f=(await i.db.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",GJ).execute()).map((c)=>Qg4(c.settings)),l={acceptPublishRequests:f.some((c)=>c.acceptPublishRequests===!0),requireApiToken:f.some((c)=>c.requireApiToken===!0),storePrivateOnly:f.some((c)=>c.storePrivateOnly===!0)};if(l.acceptPublishRequests||l.requireApiToken||l.storePrivateOnly)return l;for(let c of f)if(Object.keys(c).length>0)return c;return{}}var Se0=g(()=>{nR()});import{z as x3u}from"zod";function zg4(i,u){if(!u)return i;let t={field:["is_public"],operator:"eq",value:!1};if(!i)return t;return{operator:"and",conditions:[i,t]}}function Hg4(i){let u=new Map,t=new Map;for(let l of i){let c=l._meta?.["mcp.mesh"];for(let E of c?.tags??[])u.set(E,(u.get(E)??0)+1);for(let E of c?.categories??[])t.set(E,(t.get(E)??0)+1)}let f=(l)=>Array.from(l.entries()).map(([c,E])=>({value:c,count:E})).sort((c,E)=>c.value.localeCompare(E.value));return{tags:f(u),categories:f(t)}}var je0,Ke0,Je0,Xe0;var Le0=g(()=>{Eu();F1();Se0();je0=ti({name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:dR,outputSchema:hR,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=await up(u,t.id);return f.items.list(t.id,{...i,where:zg4(i.where,l.storePrivateOnly===!0)})}}),Ke0=ti({name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:j5,outputSchema:kJ,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=await up(u,t.id),c=i.id??i.name;if(!c)return{item:null};let E=await f.items.findByIdOrName(t.id,c);if(!E)return{item:null};if(l.storePrivateOnly&&E.is_public)return{item:null};return{item:E}}}),Je0=ti({name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:j5,outputSchema:x3u.object({versions:x3u.array(Q_)}),handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry,l=await up(u,t.id),c=i.id??i.name;if(!c)return{versions:[]};let E=await f.items.findByIdOrName(t.id,c);if(!E)return{versions:[]};if(l.storePrivateOnly&&E.is_public)return{versions:[]};return{versions:[E]}}}),Xe0=ti({name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:x3u.object({}),outputSchema:_R,handler:async(i,u)=>{let t=yi(u);await u.access.check();let f=u.storage.registry;if(!(await up(u,t.id)).storePrivateOnly)return f.items.getFilters(t.id);let c=await f.items.list(t.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return Hg4(c.items)}})});var We0;var Ye0=g(()=>{fm0();cm0();$m0();dm0();U3u();Dm0();gm0();Nm0();Zm0();Bm0();Pm0();Im0();km0();Sm0();Km0();Xm0();Wm0();Qm0();yPi();Ne0();Ze0();Be0();Ue0();Ae0();xe0();Ge0();Le0();We0=[je0,Ke0,Je0,Xe0,Om0,ym0,nm0,Um0,Em0,tm0,Tm0,wm0,vm0,_m0,lm0,Am0,xm0,Gm0,jm0,Jm0,Lm0,Ym0,ge0,Oe0,ye0,Te0,Fe0,Pe0,Ie0,ke0]});import{z as gR}from"zod";var bg4,k3u;var Qe0=g(()=>{yd();Eu();$H();Dw();VK();bg4=gR.enum(["agent-sandbox","user-desktop","cluster"]),k3u=ti({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:gR.object({virtualMcpId:gR.string().describe("Virtual MCP ID that owns this VM"),branch:gR.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:bg4.describe("Kind of sandbox provider the VM was started with. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. Used to locate the correct 3-level sandboxMap entry.")}),outputSchema:gR.object({success:gR.boolean()}),handler:async(i,u)=>{let t=G8(i.sandboxProviderKind),f;try{f=await VS0({...i,sandboxProviderKind:t},u)}catch($){if($ instanceof Error&&$.message==="Virtual MCP not found")return{success:!0};throw $}let{entry:l,userId:c}=f;if(!l)return{success:!0};let{provider:E}=await Ud(u,{userId:c,branch:i.branch,virtualMcpMetadata:f.metadata,explicitKind:t});return await A9(u.storage.virtualMcps,i.virtualMcpId,c,c,i.branch,t),await E.delete(l.sandboxHandle).catch(($)=>console.error(`[SANDBOX_DELETE] ${t} ${l.sandboxHandle}: ${$ instanceof Error?$.message:String($)}`)),{success:!0}}})});var ze0=g(()=>{kTi();Qe0()});import{z as K5}from"zod";var Mg4="https://api.github.com",G3u;var He0=g(()=>{Eu();f9();l9();n_();G3u=ti({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:K5.object({connectionId:K5.string().describe("ID of the mcp-github connection to use")}),outputSchema:K5.object({installations:K5.array(K5.object({installationId:K5.number(),login:K5.string(),avatarUrl:K5.string(),type:K5.string()})),appSlug:K5.string().optional()}),handler:async(i,u)=>{await u.access.check();let t=u.organization?.id;if(!t)throw Error("Organization context required");let f=await u.storage.connections.findById(i.connectionId,t);if(!f)throw Error("Connection not found");if(k3(f))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let l=new el(u.db,u.vault),c=await l.get(i.connectionId);if(!c)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let E=c.accessToken;if(i3i(c)&&l.isExpired(c,va)){let v=await u3i(c,l);if(!v)throw Error(FE);E=v,c=await l.get(i.connectionId)??c}let $=[],w,d=1,h=100,_=async(v)=>fetch(`${Mg4}/user/installations?per_page=${h}&page=${d}`,{headers:{Authorization:`Bearer ${v}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let v=await _(E);if(v.status===401){let n=await l.get(i.connectionId);if(!n||!i3i(n))throw Error(FE);let O=await u3i(n,l);if(!O)throw Error(FE);if(E=O,v=await _(E),v.status===401)throw Error(FE)}if(!v.ok)throw Error(`GitHub /user/installations failed: ${v.status}`);let D=await v.json();for(let n of D.installations){if(!w)w=n.app_slug??n.app?.slug;$.push({installationId:n.id,login:n.account.login,avatarUrl:n.account.avatar_url,type:n.account.type})}if(D.installations.length<h)break;d++}return{installations:$,...w?{appSlug:w}:{}}}})});var Re0=g(()=>{He0()});import SJ from"zod";var S3u;var be0=g(()=>{TRi();Eu();S3u=ti({name:"LINK_CURRENT_GET",description:"Return the calling user's currently registered desktop link, or `online: false` if no link is registered or the TTL has expired.",inputSchema:SJ.object({}),outputSchema:SJ.object({online:SJ.boolean(),machineId:SJ.string().optional(),hostname:SJ.string().optional(),cliVersion:SJ.string().optional(),capabilities:SJ.array(Uzi).default([])}),handler:async(i,u)=>{ki(u),await u.access.check();let t=u.linkStatusProbe;if(!t)return{online:!1,capabilities:[]};let f=await t(u.auth.user.id);if(!f.online)return{online:!1,capabilities:[]};return{online:!0,hostname:f.hostname,cliVersion:f.cliVersion,capabilities:f.capabilities}}})});import j3u from"zod";var K3u;var Ce0=g(()=>{Eu();K3u=ti({name:"LINK_DISCONNECT",description:"Disconnect the calling user's desktop link from the Studio side: tells the linked daemon to shut down (via a `shutdown` control frame) and removes the presence claim. The user re-links by running `bunx decocms@latest link` on the desktop.",inputSchema:j3u.object({}),outputSchema:j3u.object({disconnected:j3u.boolean()}),handler:async(i,u)=>{ki(u),await u.access.check();let t=u.auth.user.id;if(!u.publishLinkControlFrame)return{disconnected:!1};return u.publishLinkControlFrame(t,{type:"shutdown"}),{disconnected:!0}}})});var Me0=g(()=>{be0();Ce0()});import{z as fc}from"zod";function qe0(i){if(!i)return"";return typeof i==="string"?i:i.toISOString()}var rg4,mg4,eg4,ag4,og4,J3u;var Ve0=g(()=>{Eu();rg4=["thread"],mg4=fc.object({type:fc.literal("thread"),id:fc.string(),title:fc.string(),created_at:fc.string(),updated_at:fc.string(),virtual_mcp_id:fc.string().nullable(),run_config:fc.record(fc.string(),fc.unknown()).nullable(),status:fc.string().nullable()}),eg4=fc.discriminatedUnion("type",[mg4]),ag4=fc.object({query:fc.string().min(1).describe("Free-text search query."),limit:fc.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:fc.array(fc.enum(rg4)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),og4=fc.object({items:fc.array(eg4),totalCount:fc.number()});J3u=ti({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ag4,outputSchema:og4,handler:async(i,u)=>{await u.access.check(),yi(u);let t=i.limit??20,f=i.types?.length?new Set(i.types):null,l=!f||f.has("thread"),c=[],E=0;if(l){let{threads:$,total:w}=await u.storage.threads.list(void 0,{limit:t,offset:0,search:i.query,includeArchived:!1});E+=w;for(let d of $)c.push({type:"thread",id:d.id,title:d.title??"",created_at:qe0(d.created_at),updated_at:qe0(d.updated_at),virtual_mcp_id:d.virtual_mcp_id??null,run_config:d.run_config??null,status:d.status??null})}return{items:c,totalCount:E}}})});var re0=g(()=>{Ve0()});var J3i={};Ji(J3i,{managementMCP:()=>yH,managementContextStore:()=>oK,listManagementTools:()=>pg4,TOOL_BY_NAME:()=>tp,CORE_TOOLS:()=>ee0});import{z as me0}from"zod";async function pg4(i){let u=await yH(i),[t,f]=Er.createLinkedPair();await u.connect(f);let l=new k1({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:Jl});try{return await l.connect(t),(await l.listTools()).tools}finally{await l.close().catch(()=>{}),await u.close().catch(()=>{})}}var ee0,tp,yH=async(i)=>{let u=new CD({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:Jl});for(let l of tp.values()){let{config:c,handler:E}=fPi(l);u.registerTool(l.name,c,E)}let t=tPi();for(let l of t){let c=l.arguments?.length?Object.fromEntries(l.arguments.map((E)=>{let $=E.required?me0.string():me0.string().optional();return[E.name,E.description?$.describe(E.description):$]})):void 0;u.registerPrompt(l.name,{title:l.title,description:l.description,...c?{argsSchema:c}:{}},(E)=>{return{messages:[{role:"user",content:{type:"text",text:typeof l.text==="function"?l.text(E??{}):l.text}}]}})}if(i.organization?.id){let l=await i.storage.brandContext.list(i.organization.id),c=new Set;for(let E of l){let $=E.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),w=$?`brand-${$}`:`brand-${E.id}`;if(c.has(w))w=`${w}-${E.id.slice(0,8)}`;c.add(w);let d=[`# Brand: ${E.name}`,"",`**Domain:** ${E.domain}`,"","## Overview",E.overview];if(E.colors){let _=Object.entries(E.colors).filter(([,v])=>v);if(_.length>0){d.push("","## Colors");for(let[v,D]of _)d.push(`- **${v}:** ${D}`)}}if(E.fonts){let _=Object.entries(E.fonts).filter(([,v])=>v);if(_.length>0){d.push("","## Fonts");for(let[v,D]of _)d.push(`- ${D} (${v})`)}}if(E.logo)d.push("",`**Logo:** ${E.logo}`);if(E.favicon)d.push(`**Favicon:** ${E.favicon}`);if(E.ogImage)d.push(`**OG Image:** ${E.ogImage}`);if(E.images&&E.images.length>0){d.push("","## Images");for(let _ of E.images){let v=Object.entries(_).map(([D,n])=>`${D}: ${n}`).join(", ");d.push(`- ${v}`)}}let h=d.join(`
|
|
88102
88102
|
`);u.prompt(w,`Brand context for ${E.name}`,()=>({messages:[{role:"user",content:{type:"text",text:h}}]}))}}let f=jV0();for(let l of f)u.resource(l.name,l.uri,{description:l.description,mimeType:l.mimeType??"text/markdown"},async(c)=>{return{contents:[{uri:typeof c==="string"?c:c.href,mimeType:l.mimeType??"text/markdown",text:l.text}]}});return u};var Vy=g(()=>{Rh();ZV();sE();xw0();zw0();WO0();HO0();pO0();lN0();GN0();pF0();cU0();VK0();KJ0();XJ0();lX0();$X0();EV0();wV0();f3u();lPi();lPi();fr0();Ye0();ze0();Re0();Me0();re0();ee0=[Otu,Ntu,ytu,Ztu,Ttu,Btu,Ftu,B4u,U4u,P4u,A4u,x4u,Utu,Ptu,Atu,Itu,xtu,Gtu,Stu,jtu,Xtu,Ltu,Wtu,Ytu,Qtu,ztu,Htu,Rtu,btu,Ctu,Mtu,qtu,Y0u,q0u,V0u,m0u,e0u,a0u,Rai,zai,Yai,Qai,s0u,itu,ttu,ltu,Etu,zO0,_tu,vtu,Dtu,ntu,Kai,Xai,Lai,Jai,F6u,J4u,dZ,hZ,Y4u,Q4u,_Z,Mcu,qcu,k4u,G4u,S4u,j4u,K4u,Vcu,rcu,mcu,g6u,O6u,N6u,y6u,Z6u,T6u,B6u,$tu,wtu,dtu,htu,U6u,I6u,x6u,k6u,G6u,S6u,j6u,K6u,J6u,X6u,L6u,W6u,Y6u,z6u,H6u,rdu,edu,adu,odu,t3u,$V0,l3u,c3u,E3u,$3u,w3u,d3u,...We0,Zcu,k3u,G3u,S3u,K3u,J3u],tp=new Map(ee0.map((i)=>[i.name,i]))});import{z as ae0}from"zod";function iO4(i){return[{permissions:{self:["*"]},getTools:async()=>{let{CORE_TOOLS:u}=await Promise.resolve().then(() => (Vy(),J3i));return u.map((t)=>{return{name:t.name,inputSchema:ae0.toJSONSchema(t.inputSchema,{unrepresentable:"any"}),outputSchema:t.outputSchema?ae0.toJSONSchema(t.outputSchema,{unrepresentable:"any"}):void 0,description:t.description}})},data:Lri(C1(),i)},{data:Xri()},{data:Jri(i)}]}async function oe0(i,u){try{let t=Ft(),f=yu(),l=new aD(f.encryptionKey),c=new oV(t.db,l),E=iO4(i);await Promise.all(E.map(async($)=>{let w=null;if($.permissions)w=(await Tt.api.createApiKey({body:{name:`${$.data.app_name??crypto.randomUUID()}-mcp`,userId:u,permissions:$.permissions,rateLimitEnabled:!1,metadata:{organization:{id:i},purpose:"default-org-connections"}}}))?.key;let d=await i7({id:"pending",title:$.data.title,connection_type:$.data.connection_type,connection_url:$.data.connection_url,connection_token:$.data.connection_token??w,connection_headers:$.data.connection_headers}).catch(()=>null),h=await $.getTools?.()??d?.tools??null,_=d?.scopes?.length?d.scopes:null,v=$.data.id?$.data.id.startsWith(`${i}_`)?$.data.id:`${i}_${$.data.id}`:void 0;await c.create({...$.data,id:v,tools:h,configuration_scopes:_,organization_id:i,created_by:u,connection_token:$.data.connection_token??w})}));try{await Sai({orgId:i,createdBy:u})}catch($){console.error("Failed to enqueue studio pack install:",$)}if(f.aiGatewayEnabled&&f.studioProvisionSecretKey&&rV.provisionKey)try{let $=await u7(u),w=await rV.provisionKey($,i);await new aV(t.db,l).upsert({providerId:"deco",label:"Auto-provisioned",apiKey:w,organizationId:i,createdBy:u})}catch($){console.error("Failed to auto-provision Deco AI Gateway key:",$)}}catch(t){console.error("Error creating default MCP connections:",t)}}var se0=g(()=>{St();oei();cE();lE();eV();pei();lai();lr();_t();J3();t$i();JN()});async function pe0(i,u){let t=ME();if(!t)return u;let f=await Ft().db.selectFrom("organization").select("slug").where("id","=",i).executeTakeFirst();if(!f?.slug)return u;return await NM({objectStorage:bw(t,i),baseUrl:C1(),orgSlug:f.slug,prefix:"org-logos"})(u)??u}var ia0=g(()=>{lE();l2();Fli();cE()});function uO4(i,u){let t=i.email.split("@")[1]?.toLowerCase()??null;return{distinctId:i.id,properties:{$set:{email:i.email,name:i.name,email_verified:i.emailVerified},$set_once:{first_seen_at:u.toISOString(),signup_email_domain:t}}}}function X3u(i){mu.identify(uO4(i,new Date))}var ua0=g(()=>{z4()});import{decodeJwt as tO4}from"jose";import{sql as fp}from"kysely";async function cO4(i){let{user:u,token:t}=i;if(!t?.idToken)return;let f;try{f=tO4(t.idToken)}catch{return}let{preferred_username:l,upn:c}=f,E=[l,c].filter((d)=>typeof d==="string"&&d.length>0&&d.toLowerCase()!==u.email.toLowerCase()).map((d)=>d.toLowerCase());if(E.length===0)return;let{db:$}=Ft(),w=await $.selectFrom("user").selectAll().where("email","in",E).where("id","!=",u.id).executeTakeFirst();if(!w)return;try{await $.transaction().execute(async(d)=>{await fp`UPDATE "account" SET "userId" = ${w.id} WHERE "userId" = ${u.id}`.execute(d),await fp`UPDATE "session" SET "userId" = ${w.id} WHERE "userId" = ${u.id}`.execute(d),await fp`
|
|
88103
88103
|
UPDATE "member" SET "userId" = ${w.id}
|
|
88104
88104
|
WHERE "userId" = ${u.id}
|