decocms 4.139.3 → 4.139.4
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-94-pYNDH.js → AlertCircle-CoqED6u1.js} +1 -1
- package/dist/client/assets/{AreaChart-CtUNLyU7.js → AreaChart-iI-4XLmP.js} +1 -1
- package/dist/client/assets/{ArrowUp-cGovGJKq.js → ArrowUp-DlplJ-vw.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-uBzHqPrq.js → ArrowUpRight-DdBZD1ld.js} +1 -1
- package/dist/client/assets/{Check-Cn8MFTSq.js → Check-C60NZQqx.js} +1 -1
- package/dist/client/assets/{CheckCircle-COMNeFdL.js → CheckCircle-BUQVtJ84.js} +1 -1
- package/dist/client/assets/{ChevronDown-Z1a2HLr7.js → ChevronDown-7whXhPgH.js} +1 -1
- package/dist/client/assets/{ChevronRight-DUkOg_g3.js → ChevronRight-BAOj5NU7.js} +1 -1
- package/dist/client/assets/{ChevronUp-OUNC_3C9.js → ChevronUp-B54OH-8-.js} +1 -1
- package/dist/client/assets/{Copy01-DSpDVuQY.js → Copy01-DzaJjJZP.js} +1 -1
- package/dist/client/assets/{DotsVertical-bzUIIWjz.js → DotsVertical-PI89kBzR.js} +1 -1
- package/dist/client/assets/{Eye-DzltcVkC.js → Eye-BtcpyaNv.js} +1 -1
- package/dist/client/assets/{FilterLines-Y28VD_Qh.js → FilterLines-BhMj2E1Z.js} +1 -1
- package/dist/client/assets/{HardDrive-C1B8s_iZ.js → HardDrive-B4cHY-Pc.js} +1 -1
- package/dist/client/assets/{Key01-Byx3BWox.js → Key01-DJ5Y-VjX.js} +1 -1
- package/dist/client/assets/{LayoutLeft-Bz4p8mrG.js → LayoutLeft-BN0bljAD.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BlI7BdKK.js → LinkExternal01-D9D3zOwW.js} +1 -1
- package/dist/client/assets/{LogOut01-B6ZAdxgP.js → LogOut01-BgllZRRG.js} +1 -1
- package/dist/client/assets/{Monitor01-CL2O39Pf.js → Monitor01-B8W0HWFV.js} +1 -1
- package/dist/client/assets/{Palette-CiVHaOrr.js → Palette-BnNbif6_.js} +1 -1
- package/dist/client/assets/{Play-D3LdmNlx.js → Play-CWWX6vS4.js} +1 -1
- package/dist/client/assets/{Plus-C8GYlcxk.js → Plus-DQQ65h9c.js} +1 -1
- package/dist/client/assets/{SearchLg-z52vedzh.js → SearchLg-DIZhiYaF.js} +1 -1
- package/dist/client/assets/{SearchMd-BPKhgL8u.js → SearchMd-DjbMW5Lf.js} +1 -1
- package/dist/client/assets/{Settings02-JgHwVAiC.js → Settings02-JYbdjwl_.js} +1 -1
- package/dist/client/assets/{Shield01-cO8Qs-gw.js → Shield01-B-yLZ2pM.js} +1 -1
- package/dist/client/assets/{Star01-D0bNFUcb.js → Star01-U3abHa6B.js} +1 -1
- package/dist/client/assets/{Stars01-BRkb-8jr.js → Stars01-DU91Jsmi.js} +1 -1
- package/dist/client/assets/{Stars02-CAUe_tvn.js → Stars02-CFE3349W.js} +1 -1
- package/dist/client/assets/{Sun-MwunngEC.js → Sun-JRvfVj5D.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-Ba9jK0Ct.js → SwitchHorizontal01-BVL8IcsT.js} +1 -1
- package/dist/client/assets/{Tool01-Bo4pFIop.js → Tool01-DE2a5wTv.js} +1 -1
- package/dist/client/assets/{Tool02-CqPu2tQE.js → Tool02-CSg-rM7f.js} +1 -1
- package/dist/client/assets/{Trash01-BbsqJr39.js → Trash01-Cewj2_Or.js} +1 -1
- package/dist/client/assets/{TrendUp01-BNGI-hb1.js → TrendUp01-DpFAR-q9.js} +1 -1
- package/dist/client/assets/{Upload01-BZHSdr6y.js → Upload01-TPHV8K22.js} +1 -1
- package/dist/client/assets/{User01-B2BQxf4e.js → User01-Cmq9GZEF.js} +1 -1
- package/dist/client/assets/{Users01-NliFt16e.js → Users01-BLrP7Lky.js} +1 -1
- package/dist/client/assets/{Users03-xgXYQ5eh.js → Users03-Da736tRx.js} +1 -1
- package/dist/client/assets/{X-DLVnWZLc.js → X-CDcM62SV.js} +1 -1
- package/dist/client/assets/{XCircle-VUHSu0LM.js → XCircle-D5mySIIr.js} +1 -1
- package/dist/client/assets/{XClose-BxNlY1CD.js → XClose-BTZCYFCA.js} +1 -1
- package/dist/client/assets/{Zap-BGrseuDb.js → Zap-ln8aGN_M.js} +1 -1
- package/dist/client/assets/{ZapSquare-cSyGwMKX.js → ZapSquare-ZVJTjEDI.js} +1 -1
- package/dist/client/assets/{access-gate-CLUDdT6J.js → access-gate-BF8U8_a-.js} +1 -1
- package/dist/client/assets/{add-section-modal-UXsPK-0B.js → add-section-modal-CE4mfZBB.js} +1 -1
- package/dist/client/assets/{agent-icon-DL6gvvDo.js → agent-icon-B4TidYtZ.js} +1 -1
- package/dist/client/assets/{agents-list-Co5fj5NQ.js → agents-list-C_j7iIHp.js} +1 -1
- package/dist/client/assets/{ai-providers-BiCxZ5tb.js → ai-providers-CR0bJTCa.js} +1 -1
- package/dist/client/assets/{alert-D6w3c9Uc.js → alert-CKDazcAO.js} +1 -1
- package/dist/client/assets/{alert-dialog-BQyNKsfW.js → alert-dialog-9YcAEY69.js} +1 -1
- package/dist/client/assets/{app-editor-COvNwfJQ.js → app-editor-BidW6Ict.js} +1 -1
- package/dist/client/assets/{auth-PiaB5qne.js → auth-BV3GLtVr.js} +1 -1
- package/dist/client/assets/{auth-catchall-BhHbk5Vv.js → auth-catchall-YRNtK26J.js} +1 -1
- package/dist/client/assets/{auth-entry-KU72OW6K.js → auth-entry-Dp8ej5yh.js} +1 -1
- package/dist/client/assets/{auth-split-layout-FwLwpd59.js → auth-split-layout-FaYgP4G1.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-UM0NaaXQ.js → authenticate-and-persist-oauth-Cd7jiYQV.js} +1 -1
- package/dist/client/assets/{automation-list-row-kQBGnK5n.js → automation-list-row-in2yfce3.js} +1 -1
- package/dist/client/assets/{automation-runs-CCW7paga.js → automation-runs-BDifwbja.js} +1 -1
- package/dist/client/assets/{automations-DikWVmge.js → automations-BLDpYDwT.js} +1 -1
- package/dist/client/assets/{avatar-CHBeb-lO.js → avatar-CCjUMYsC.js} +1 -1
- package/dist/client/assets/{badge-cz94qavb.js → badge-BWOgzc_l.js} +1 -1
- package/dist/client/assets/{block-document-BHqEnqTU.js → block-document-RbaIsEmo.js} +1 -1
- package/dist/client/assets/{brand-context-ChrLhIyn.js → brand-context-DraN34wU.js} +1 -1
- package/dist/client/assets/{buckets-zBLE4tYi.js → buckets-B5KhxsOP.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-nBGztZPY.js → bulk-category-panel-Gn6Ir0Mb.js} +1 -1
- package/dist/client/assets/{calendar-C6Qg6MUe.js → calendar-D5FdrmFf.js} +1 -1
- package/dist/client/assets/{capability-load-error-NokY_HUl.js → capability-load-error-DIrLXupr.js} +1 -1
- package/dist/client/assets/{card-CdoAAmHK.js → card-BQAJc7Im.js} +1 -1
- package/dist/client/assets/{category-editor-C_oJhVZG.js → category-editor-D0_BqDMx.js} +1 -1
- package/dist/client/assets/{chat-context-BzBSd3Gq.js → chat-context-1Z7W36ie.js} +1 -1
- package/dist/client/assets/{checkbox-Coao2cBN.js → checkbox-kl0X58_R.js} +1 -1
- package/dist/client/assets/{cli-auth-success-BSLfdyEM.js → cli-auth-success-CUkUGkY5.js} +1 -1
- package/dist/client/assets/{collection-detail-B_5bcDNN.js → collection-detail-DHS1zS8h.js} +1 -1
- package/dist/client/assets/{collection-display-button-CeTFo7kO.js → collection-display-button-D8r-SbhP.js} +1 -1
- package/dist/client/assets/{collection-search-CgKq7Kgp.js → collection-search-BTtC8tbY.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CttEbGBB.js → collection-table-wrapper-_fdzePZJ.js} +1 -1
- package/dist/client/assets/{collection-tabs-Y5EVckBd.js → collection-tabs-C4ayRj0I.js} +1 -1
- package/dist/client/assets/{command-Bl8WKaVV.js → command-CfneZZ0v.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-DFenkGRi.js → commerce-onboarding-CjXwJL4L.js} +1 -1
- package/dist/client/assets/{companions-core-Dl4q0jjO.js → companions-core-CnSlDoA4.js} +1 -1
- package/dist/client/assets/{connect-y9OeuRKH.js → connect-DHHU-a8g.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-BWzRmyEs.js → connect-desktop-dialog-C2yIVX8a.js} +1 -1
- package/dist/client/assets/{connection-BSoRaaS-.js → connection-C4v939y-.js} +1 -1
- package/dist/client/assets/{connection-card-CxiyfvfW.js → connection-card-BiPvlb37.js} +1 -1
- package/dist/client/assets/{connection-detail-DCTjOeBX.js → connection-detail-BZiqye-l.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-M8z1aWkl.js → connection-form-helpers-D2pwJbOs.js} +1 -1
- package/dist/client/assets/{connections-k-FvPELb.js → connections-D172sHaI.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-q6zCbm2P.js → decopilot-sse-pool-DBvLOlYw.js} +1 -1
- package/dist/client/assets/{dialog-DukA7kL-.js → dialog-DOmSgDqh.js} +1 -1
- package/dist/client/assets/{domain-settings-9NA3-iSP.js → domain-settings-MXco_yJh.js} +1 -1
- package/dist/client/assets/{drawer-Dn1WPks8.js → drawer-BOFTQkv2.js} +1 -1
- package/dist/client/assets/{dropdown-menu-Dw7aBTAO.js → dropdown-menu-B2Feb9Hq.js} +1 -1
- package/dist/client/assets/{empty-state-CE-UaCR9.js → empty-state-DHOlJZIo.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DxKCR_wU.js → extract-connection-data-BRTRnMKW.js} +1 -1
- package/dist/client/assets/{file-explorer-BClfnE9w.js → file-explorer-Dc3GItiN.js} +1 -1
- package/dist/client/assets/{form-BTesbqf5.js → form-B35HFmW2.js} +1 -1
- package/dist/client/assets/{general-CoCoiU1l.js → general-CYqgvQrv.js} +1 -1
- package/dist/client/assets/{github-repo-picker-DaF3v7ke.js → github-repo-picker-CuHBWibs.js} +1 -1
- package/dist/client/assets/{hooks-B7ZVN-lZ.js → hooks-B3_6ngD9.js} +1 -1
- package/dist/client/assets/{index-BETcUQ-U.js → index-B2vgD-SN.js} +1 -1
- package/dist/client/assets/{index-C5XMNiVZ.js → index-BKiBhFBm.js} +1 -1
- package/dist/client/assets/{index-DPJXF3TB.js → index-BMMWQuJw.js} +1 -1
- package/dist/client/assets/{index-DwIbTuya.js → index-BOh8Ma8h.js} +5 -5
- package/dist/client/assets/{index-Cq4IeWND.js → index-BuXWMvcG.js} +1 -1
- package/dist/client/assets/index-DMtfY8i6.js +1 -0
- package/dist/client/assets/{index-BSkPbz9d.js → index-DeVQOJOc.js} +1 -1
- package/dist/client/assets/{index-DnlGVCc4.js → index-DiH3PAGf.js} +5 -5
- package/dist/client/assets/{index-B_x7BSXY.js → index-JQcStnf_.js} +3 -3
- package/dist/client/assets/{index-CZVh9jrz.js → index-ke_N2sut.js} +1 -1
- package/dist/client/assets/{index-redirect-CS2bb0Pe.js → index-redirect-CpU0MQxF.js} +1 -1
- package/dist/client/assets/{index-Ca5NPFzL.js → index-uxBqzpSb.js} +1 -1
- package/dist/client/assets/{input-C34XIuCI.js → input-52jtvT5F.js} +1 -1
- package/dist/client/assets/{integration-icon-CfCPrY34.js → integration-icon-K8_OZTr5.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-lQ562Fde.js → invite-member-dialog-BV06v10f.js} +1 -1
- package/dist/client/assets/{label-Dh6t0ydK.js → label-0UudweyM.js} +1 -1
- package/dist/client/assets/{layout-dsUcBesa.js → layout-Bb-YFYG_.js} +1 -1
- package/dist/client/assets/{login-C34PrTyZ.js → login-DNdVZvuQ.js} +1 -1
- package/dist/client/assets/{mcp-oauth-BOJpc6-T.js → mcp-oauth-ruaiNeT3.js} +1 -1
- package/dist/client/assets/{members-DefdKp16.js → members-BW9sKwCn.js} +1 -1
- package/dist/client/assets/{monaco-editor-CCGeIiCG.js → monaco-editor-B9O32V4j.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Dp0GFm57.js → monitoring-stats-row-S-YcdbX0.js} +1 -1
- package/dist/client/assets/{multi-select-Dj8UbM_-.js → multi-select-hUuxVWsu.js} +1 -1
- package/dist/client/assets/{oauth-callback-BiJc17zt.js → oauth-callback-D4WGSrPD.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BB4eG5lI.js → oauth-callback-ai-provider-CnibdVpY.js} +1 -1
- package/dist/client/assets/{onboarding-DUubVIGl.js → onboarding-yiue99Hn.js} +1 -1
- package/dist/client/assets/{org-install-DslmlgJN.js → org-install-qFKUJ_ld.js} +1 -1
- package/dist/client/assets/{org-layout-hpqYo3fL.js → org-layout-CN_9cGiI.js} +1 -1
- package/dist/client/assets/{organization-choice-B5UV-QoD.js → organization-choice-CUxqVEwd.js} +1 -1
- package/dist/client/assets/{orgs-3yNLHQz1.js → orgs-osnGXk9p.js} +1 -1
- package/dist/client/assets/{page-seo-form-BsDltTgw.js → page-seo-form-B0-r0Qe2.js} +1 -1
- package/dist/client/assets/{popover-BlQNUJGk.js → popover-DjzRyWtf.js} +1 -1
- package/dist/client/assets/{post-editor-DccEGhS5.js → post-editor-DaThTyDP.js} +1 -1
- package/dist/client/assets/{primitives-DKreSNU5.js → primitives-Dw3ptcEk.js} +1 -1
- package/dist/client/assets/{profile-UZyV9pkR.js → profile-DvH2u11c.js} +1 -1
- package/dist/client/assets/project-app-view-DZ-DWAHz.js +1 -0
- package/dist/client/assets/record-editor-CQ7MItbm.js +1 -0
- package/dist/client/assets/{redirect-editor-C8IqF8CB.js → redirect-editor-Bx9CKnsi.js} +1 -1
- package/dist/client/assets/registry-FqXHq8q0.js +2 -0
- package/dist/client/assets/{registry-layout-CCV-tXXF.js → registry-layout-DSWTbPBT.js} +1 -1
- package/dist/client/assets/{reports-DbaqdUcB.js → reports-D-F6imXX.js} +1 -1
- package/dist/client/assets/{require-capability-BpT7p6hc.js → require-capability-B9v6nKrX.js} +1 -1
- package/dist/client/assets/{required-auth-layout-99194WSx.js → required-auth-layout-C03ZBGEk.js} +1 -1
- package/dist/client/assets/{reset-password-BTamQEbi.js → reset-password-D_yuQUNf.js} +1 -1
- package/dist/client/assets/{roles-CWJIO1Yn.js → roles-D5D9xhgL.js} +1 -1
- package/dist/client/assets/{search-input-McQtKwa0.js → search-input-BJbMg75K.js} +1 -1
- package/dist/client/assets/{secrets-CeO-EGVs.js → secrets-B-0oXN3P.js} +1 -1
- package/dist/client/assets/{sections-editor-PsilzC8V.js → sections-editor-BOrulvB7.js} +1 -1
- package/dist/client/assets/{select-CFhI4PdP.js → select-BkPzRuoH.js} +1 -1
- package/dist/client/assets/{select-model-CIjVrqHf.js → select-model-DbSJVGDr.js} +1 -1
- package/dist/client/assets/{self-tool-result-DvjIDT63.js → self-tool-result-D6fer90h.js} +1 -1
- package/dist/client/assets/{seo-editor-Usvrbuvd.js → seo-editor-BdX92ozj.js} +1 -1
- package/dist/client/assets/{settings-layout-CtqrcvcW.js → settings-layout-CIdLEFd6.js} +1 -1
- package/dist/client/assets/{settings-section-tugyY25K.js → settings-section-yKgXT3wt.js} +1 -1
- package/dist/client/assets/{shell-controls-DGd2vvDn.js → shell-controls-CyzOqhJj.js} +1 -1
- package/dist/client/assets/{shell-layout-mV2gw_v3.js → shell-layout-DsMwj3Sh.js} +1 -1
- package/dist/client/assets/{sidebar-BTeD253h.js → sidebar-BTKnRZzu.js} +1 -1
- package/dist/client/assets/{skeleton-D2EQKaUK.js → skeleton-4X8F75Cz.js} +1 -1
- package/dist/client/assets/{sso-Bp1vj1XL.js → sso-CDNcC2Zz.js} +1 -1
- package/dist/client/assets/{store-j5Hnyp0W.js → store-ByEDH2Dx.js} +1 -1
- package/dist/client/assets/store-registry-CfzgF8es.js +2 -0
- package/dist/client/assets/{studio-tools-D9b3PJCi.js → studio-tools-BwAplcr3.js} +1 -1
- package/dist/client/assets/{switch-BC1btloz.js → switch-C6pTzDVv.js} +1 -1
- package/dist/client/assets/{tab-id-BxSd5RHd.js → tab-id-BrrfpjiM.js} +1 -1
- package/dist/client/assets/{table-DRnLQrMb.js → table-CKNALeNA.js} +1 -1
- package/dist/client/assets/{tabs-SVxKrZVi.js → tabs-D4OP2Wgg.js} +1 -1
- package/dist/client/assets/{textarea-D1JJjw5u.js → textarea-CCVQRm2u.js} +1 -1
- package/dist/client/assets/{toggle-group-yLpWikCd.js → toggle-group-DkcHQ_GP.js} +1 -1
- package/dist/client/assets/{toolbar-D_1Gw-iO.js → toolbar-BDaqGcya.js} +1 -1
- package/dist/client/assets/{tooltip-CySRuEKf.js → tooltip-BrTGO-7L.js} +1 -1
- package/dist/client/assets/{use-ai-providers-BqJIK3az.js → use-ai-providers-Cxq_uyx_.js} +1 -1
- package/dist/client/assets/{use-api-keys-BThhPt2V.js → use-api-keys-CWnf7VSU.js} +1 -1
- package/dist/client/assets/{use-automations-jpZMdZuv.js → use-automations-ipI4iLth.js} +1 -1
- package/dist/client/assets/{use-autosave-D98m3mwz.js → use-autosave-2WcD5cy1.js} +1 -1
- package/dist/client/assets/{use-capability-DW5rchX3.js → use-capability-CjDf28SX.js} +1 -1
- package/dist/client/assets/{use-clock-tick-5wKb7rmZ.js → use-clock-tick-BJUL04G0.js} +1 -1
- package/dist/client/assets/{use-connection-Dr4k3jmU.js → use-connection-C3HjsH5p.js} +1 -1
- package/dist/client/assets/{use-copy-CpXyklW0.js → use-copy-0GL0oLx9.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-uLlVoP7Z.js → use-create-virtual-mcp-RZ8K_ODW.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Br9VeYNS.js → use-debounced-autosave-ENkIsWfY.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DI3v1yUB.js → use-debounced-value-4hk_MzmV.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BsY2WTWa.js → use-deco-credits-CVL56LdR.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-KwnKomN_.js → use-decopilot-events-DRfToExd.js} +1 -1
- package/dist/client/assets/{use-delete-connection-f_25PVG8.js → use-delete-connection-BgyzhKmm.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-Bh9KJKUo.js → use-deployment-admin-DUvTKzsW.js} +1 -1
- package/dist/client/assets/{use-file-configs-D2T-5xR4.js → use-file-configs-DVfPN_wi.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-rw7LMfYQ.js → use-infinite-scroll-BEidFm5u.js} +1 -1
- package/dist/client/assets/{use-join-requests-rPb0lXUE.js → use-join-requests-PTbOwA1z.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-Dj3eQZdF.js → use-mcp-auth-status-BV4rIwnl.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DzLbOTIS.js → use-mcp-client-CX-F4dTF.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DsLWyKdY.js → use-mcp-tools-4qkTafA7.js} +1 -1
- package/dist/client/assets/{use-members-Bj0gNLg2.js → use-members-CxcUrN-g.js} +1 -1
- package/dist/client/assets/{use-mobile-B5P5KX_8.js → use-mobile-okY9QH02.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BPjGX5a8.js → use-navigate-to-agent-Bp6CXfLW.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CW23zudY.js → use-org-auth-client-BDa_mlGu.js} +1 -1
- package/dist/client/assets/{use-org-sso-O7XIlIHg.js → use-org-sso-H4T_F8WZ.js} +1 -1
- package/dist/client/assets/{use-organization-roles-B14GHfrQ.js → use-organization-roles-DTJMRMxC.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DeLDgwxL.js → use-organization-settings-BDmr0s2V.js} +1 -1
- package/dist/client/assets/{use-registry-app-DM6FV9lV.js → use-registry-app-bA5nhFJm.js} +1 -1
- package/dist/client/assets/{use-registry-connections-8rl8-JgE.js → use-registry-connections-DPM18sTP.js} +1 -1
- package/dist/client/assets/{use-secrets-bvHM3hDq.js → use-secrets-BukJmqYg.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CmudDiMP.js → use-status-sounds-BNnBAcjb.js} +1 -1
- package/dist/client/assets/{use-view-mode-CF5M8hYL.js → use-view-mode-DhtWMnbv.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-erycOhf1.js → use-virtual-mcp-BmV73Ep-.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-84DTdgh5.js +1 -0
- package/dist/client/assets/{useQueries-DDmTWVJN.js → useQueries-CbQU84Gn.js} +1 -1
- package/dist/client/assets/{useRouterState-BDgEWEjz.js → useRouterState-BtcNfSWO.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DuJMlEPa.js +1 -0
- package/dist/client/assets/{users-BQ1f9VG6.js → users-D8jRT7J1.js} +1 -1
- package/dist/client/assets/{variant-calendar-BPNjOvSW.js → variant-calendar-mOuvj31b.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-B-pOuMdV.js → view-mode-toggle-DlW0CLC-.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +254 -254
- package/package.json +1 -1
- package/dist/client/assets/index-B0rBdast.js +0 -1
- package/dist/client/assets/project-app-view-Ct7MeMQc.js +0 -1
- package/dist/client/assets/record-editor-C7MvdfaT.js +0 -1
- package/dist/client/assets/registry-70To0y_-.js +0 -2
- package/dist/client/assets/store-registry-C95SnTP6.js +0 -2
- package/dist/client/assets/useInfiniteQuery-DmkBwmPN.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CBL4ZYn9.js +0 -1
package/dist/client/index.html
CHANGED
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
61
61
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
62
62
|
<meta name="apple-mobile-web-app-title" content="deco Studio" />
|
|
63
|
-
<script type="module" crossorigin src="/assets/index-
|
|
63
|
+
<script type="module" crossorigin src="/assets/index-DiH3PAGf.js"></script>
|
|
64
64
|
<link rel="stylesheet" crossorigin href="/assets/index-DiJLgWMy.css">
|
|
65
65
|
</head>
|
|
66
66
|
<body>
|
package/dist/server/cli.js
CHANGED
|
@@ -83095,7 +83095,7 @@ ${w}`;v(B);return}if(c(null,F),t.strategy==="count"){if($--,$===0)v()}if(t.strat
|
|
|
83095
83095
|
`);function v(d){if(t===void 0)return!0;let D=Bq(d),_=D&&Bq(t)?yau(t):t,N=D?yau(d):Pau(d),Z=PVt(_,N);return Z===""||!Z.startsWith("..")&&!AVt(Z)}return{upsert(d){f.run({$handle:d.handle,$status:d.status,$sandboxPath:d.sandboxPath,$port:d.port??null,$previewUrl:d.previewUrl??null,$repoCloneUrl:d.repoCloneUrl??null,$branch:d.branch??null,$projectName:d.projectName??null,$error:d.error??null,$now:Date.now()})},list(){return l.all().map(sli)},reconcile(){let d=Date.now();for(let D of l.all().map(sli)){if(!v(D.sandboxPath)){E.run({$handle:D.handle,$now:d});continue}if(!Bq(D.sandboxPath)){c.run({$handle:D.handle,$now:d});continue}if(D.status==="spawning"||D.status==="ready"||D.status==="failed"||D.status==="missing")w.run({$handle:D.handle,$now:d})}return l.all().map(sli)},prune(d){let D=[],_=[],N=this.reconcile();for(let Z of N){if(!v(Z.sandboxPath)){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(d.missing&&Z.status==="missing"){$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!d.merged||!Bq(Z.sandboxPath))continue;if(Z.branch===null||Z.branch.trim()===""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!j_(Z.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let B=j_(Z.sandboxPath,["status","--porcelain"]);if(!B.ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(B.stdout.trim()!==""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let F=Iau(Z.sandboxPath,Z.branch);if(F===null){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!F){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}TVt(Z.sandboxPath,{recursive:!0,force:!0}),$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:D,skipped:_}},delete(d){$.run({$handle:d})},inspect(d){let D=h.get({$handle:d});if(D===null)return null;let _=sli(D),N=0,Z=null;if(Bq(_.sandboxPath)&&j_(_.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let B=j_(_.sandboxPath,["status","--porcelain"]);if(B.ok){let F=B.stdout.trim();N=F===""?0:F.split(`
|
|
83096
83096
|
`).length}if(_.branch!==null&&_.branch.trim()!=="")Z=Iau(_.sandboxPath,_.branch)}return{handle:_.handle,branch:_.branch,sandboxPath:_.sandboxPath,dirtyCount:N,merged:Z}},close(){u.close()}}}var Abi=()=>{};function kVt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function kau(i,u){if(process.platform==="win32")return;for(let t of kVt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var jau=()=>{};import{existsSync as jVt,readdirSync as XVt}from"fs";import{rm as JVt}from"fs/promises";import{join as Xau}from"path";async function Jau(i,u={}){let t=u.detach??KVt,f=u.exists??jVt,l=u.readdir??((w)=>XVt(w)),E=u.rm??((w)=>JVt(w,{recursive:!0,force:!0})),c=Xau(i,"org");if(f(c))for(let w of l(c))t(Xau(c,w));await E(i)}var KVt=(i)=>kau(i,process.platform==="darwin");var Kau=O(()=>{jau()});import{join as YVt}from"path";function Yau(i){let u=i.purge??Jau;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await B1(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??YVt(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 H6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var Wau=O(()=>{Z4();Kau()});import{randomBytes as WVt}from"crypto";import{mkdir as SVt}from"fs/promises";import{createServer as LVt}from"net";import{join as QVt}from"path";function Sau(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function Lau(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function Qau(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 HVt(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 zVt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:HVt(i.repo?.cloneUrl)}}function Hau(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??RVt,l=i.fetchImpl??fetch,E=i.resolvePreviewUrl??((N,Z)=>`http://127.0.0.1:${Z}`),c=(N)=>QVt(i.dataDir,"sandboxes",N),w=(N)=>{try{i.registry?.upsert(N)}catch(Z){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${N.handle} status=${N.status}:`,Z)}},$=(N)=>{try{i.onEvent?.(N)}catch{}},h=async(N)=>{let Z=new AbortController,B=setTimeout(()=>Z.abort(),1500);try{let F=await l(`${N}/health`,{signal:Z.signal});if(!F.ok)console.warn(`[user-desktop] probe ${N}/health \u2192 ${F.status} (treating as dead)`);return F.ok}catch(F){return console.warn(`[user-desktop] probe ${N}/health failed: ${F instanceof Error?F.message:String(F)} (treating as dead)`),!1}finally{clearTimeout(B)}},v=(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),w({handle:N.handle,status:"stopped",sandboxPath:c(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),$({handle:N.handle,phase:"evicted"})},d=new Map;function D(){if(t.size<u)return;let N=[...t.values()].filter((B)=>B.activeDispatchCount===0).sort((B,F)=>B.lastUsedAt-F.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 Z=N[0];console.log(`[user-desktop] evicting LRU victim handle=${Z.handle} port=${Z.port} (cap ${u} reached, size=${t.size})`);try{Z.process.kill("SIGTERM")}catch{}t.delete(Z.handle),w({handle:Z.handle,status:"stopped",sandboxPath:c(Z.handle),port:null,previewUrl:null,...Z.registryMetadata,error:null}),$({handle:Z.handle,phase:"evicted"})}let _=async(N)=>{let Z=zVt(N),B=c(N.handle);w({handle:N.handle,status:"spawning",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"spawning",sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),D();let F,g=null,T;try{await SVt(B,{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=WVt(24).toString("hex");let[k,I]=await Promise.all([f(),f()]);F=k,console.log(`[user-desktop] spawn handle=${N.handle} port=${F} devPort=${I} workdir=${B}`),g=await Promise.resolve(i.spawnDaemon({workdir:B,handle:N.handle,port:F,daemonToken:T,offloadAllowedHosts:N.offloadAllowedHosts??[],offloadAllowSameHostDev:N.offloadAllowSameHostDev??!1,orgFsConfigJson:N.orgFsConfigJson}));try{await i.waitForHealth(F)}catch(j){throw Sau("the sandbox didn't come online in time",j)}console.log(`[user-desktop] healthy handle=${N.handle} port=${F} \u2014 posting config`);try{await i.postConfig(F,I,{repo:N.repo,workload:N.workload,operator:N.operator},T)}catch(j){throw Sau(Lau(j)?"configuration timed out":"the sandbox rejected its configuration",j)}}catch(k){if((Lau(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${N.handle} port=${F??"(none)"}${g?" (killing daemon)":""}:`,k),g)try{g.kill("SIGKILL")}catch{}throw $({handle:N.handle,phase:"failed",error:Qau(k),sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),w({handle:N.handle,status:"failed",sandboxPath:B,port:null,previewUrl:null,...Z,error:Qau(k)}),k}if(!g||F===void 0)throw Error("sandbox bring-up invariant violated");let U=`http://127.0.0.1:${F}`,A=E(N.handle,F);console.log(`[user-desktop] ready handle=${N.handle} port=${F} sandboxApiUrl=${U} previewUrl=${A}`);let G={handle:N.handle,port:F,process:g,sandboxApiUrl:U,previewUrl:A,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:Z};if(t.set(N.handle,G),w({handle:N.handle,status:"ready",sandboxPath:B,port:F,previewUrl:A,...Z,error:null}),$({handle:N.handle,phase:"ready",port:F,previewUrl:A,sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),g.exited)g.exited.then(()=>{if(t.get(N.handle)===G)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${N.handle} port=${F} \u2014 removing from cache`),t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${N.handle} port=${F} (already replaced/removed)`)});return{sandboxApiUrl:U,previewUrl:A,port:F}};return{async ensureSandbox(N){let Z=t.get(N.handle);if(Z){if(await h(Z.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${N.handle} port=${Z.port} (alive)`),Z.lastUsedAt=Date.now(),{sandboxApiUrl:Z.sandboxApiUrl,previewUrl:Z.previewUrl,port:Z.port};console.warn(`[user-desktop] cache stale handle=${N.handle} port=${Z.port} \u2014 respawning`),v(Z)}let B=d.get(N.handle);if(B)return console.log(`[user-desktop] joining in-flight ensure handle=${N.handle}`),B;let F=_(N).finally(()=>{d.delete(N.handle)});return d.set(N.handle,F),F},proxyPort(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now();return Z?.port??null},getDaemonToken(N){return t.get(N)?.daemonToken??null},hasHandle(N){return t.has(N)||d.has(N)},recordHit(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now()},acquireDispatch(N){let Z=t.get(N);if(!Z)return()=>{};Z.activeDispatchCount+=1;let B=!1;return()=>{if(B)return;B=!0;let F=t.get(N);if(F)F.activeDispatchCount=Math.max(0,F.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(N){let Z=t.get(N);if(!Z){console.log(`[user-desktop] delete handle=${N} (not found, no-op)`);return}if(Z.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${N} port=${Z.port} REFUSED \u2014 ${Z.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${N} port=${Z.port}`);try{Z.process.kill("SIGTERM")}catch{}t.delete(N),w({handle:N,status:"stopped",sandboxPath:c(N),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),$({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 RVt(){return new Promise((i,u)=>{let t=LVt();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 zau=()=>{};import{randomUUID as nVt}from"crypto";import{hostname as bVt}from"os";async function Rau(i){let u=bVt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=gMu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=i6i({path:pli(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,E=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let c=0,w=Hau({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(j,C)=>c>0?`http://${j}.localhost:${c}`:`http://127.0.0.1:${C}`,spawnDaemon:async(j)=>{let C={DAEMON_BOOT_ID:nVt(),APP_ROOT:j.workdir,PROXY_PORT:String(j.port),DAEMON_TOKEN:j.daemonToken,OFFLOAD_ALLOWED_HOSTS:j.offloadAllowedHosts.join(","),...j.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(j.orgFsConfigJson){let L=await yMu(i.dataDir);if(L)C.ORGFS_CONFIG=j.orgFsConfigJson,C.ORGFS_RCLONE_PATH=L}let K=await t({workdir:j.workdir,env:C,daemonPort:j.port});return{port:j.port,kill:(L)=>K.kill(L),exited:K.exited.then(()=>{return})}},postConfig:async(j,C,K,L)=>{let r={port:C};if(K.workload)r.runtime=K.workload.runtime,r.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Q={application:r},fi=Fh(K.operator??null);if(fi)Q.operator=fi;if(K.repo)Q.git={repository:{cloneUrl:K.repo.cloneUrl,branch:K.repo.branch,...K.repo.submoduleCredentials&&K.repo.submoduleCredentials.length>0?{submoduleCredentials:K.repo.submoduleCredentials}:{}},...K.repo.userName&&K.repo.userEmail?{identity:{userName:K.repo.userName,userEmail:K.repo.userEmail}}:{}};await F_(`http://127.0.0.1:${j}`,L,Q)},waitForHealth:async(j)=>{await p1i(`http://127.0.0.1:${j}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),$=await dau({port:i.port,lookupSandboxPort:(j)=>w.proxyPort(j)});c=$.port,console.log(`Local ingress listening on http://127.0.0.1:${$.port} (use http://<handle>.localhost:${$.port}/)`),i.monitor?.onIngress?.($.port);let h=GMu({provider:w}),v=async()=>{let j=await B_({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!j)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 j.accessToken},d=await Uau(i.dataDir),D=process.env.npm_package_version??"0.0.0",_=await Ubi(),N=gau(_,{onChange:(j)=>{console.log(`[link-daemon] capabilities detected: +${j.join(",")} (now: ${_.join(",")})`)}}),Z=hRi({path:`${i.dataDir}/link/outbox.sqlite`});Z.clear();let B=()=>{},F=new AbortController,g={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:v,provider:w,outbox:Z,controlHandler:h,capabilities:_,machineId:d,cliVersion:D,previewPort:$.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>B(),runLifetimeSignal:F.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await peu(g);console.log("[link-daemon] active transport=tunnel");let U,A=new Promise((j)=>{U=j}),G=!1,k=async()=>{if(G)return;G=!0,F.abort(),console.log(`
|
|
83097
83097
|
Shutting down\u2026`),N();try{await T.close()}catch{}try{await $.stop()}catch{}try{await w.shutdown()}catch{}try{Z.close()}catch{}E(),U(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),B=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),k()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!G)console.error("Cluster connection closed permanently; exiting."),k()});let I=Yau({provider:w,registry:f,dataDir:i.dataDir});return{stopped:A,stop:k,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(c){throw E(),c}}var nau=O(()=>{tRi();RM();TMu();PMu();IMu();vRi();iau();Dau();Tau();Aau();zM();Abi();Wau();zau()});function ybi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as CVt}from"net";async function qVt(i){for(let u of MVt)if(await Pbi(i,u))return u;return null}async function bau(i,{intervalMs:u=1000,sleepFn:t=P0}={}){for(;;){let f=await qVt(i);if(f)return f;await t(u)}}function Pbi(i,u){return new Promise((t)=>{let f=CVt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var MVt;var Gbi=O(()=>{Z4();MVt=["localhost","127.0.0.1","0.0.0.0"]});function Cau(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function VVt(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 Mau(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`:","",` ${VVt(i,u)}`].join(`
|
|
83098
|
-
`)}var Ibi;var qau=O(()=>{Ibi=class Ibi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var gL;var u6i=O(()=>{gL={name:"decocms",version:"4.139.3",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/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","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 src","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 --cwd=../.. build:studio"},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","@inkjs/ui":"^2.0.0","@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","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.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","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Fq={};Gi(Fq,{printBanner:()=>eVt,bannerLines:()=>Vau,BANNER_LINES:()=>t6i,BANNER_GRADIENT:()=>f6i});function mVt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Vau(i){let u=t6i.map((t,f)=>{let[l,E,c]=mVt(f6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function eVt(i){console.log("");for(let u of Vau(i))console.log(u);console.log("")}var t6i,f6i;var TL=O(()=>{t6i=[" \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 "],f6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as aVt,Text as rau}from"ink";import{jsx as oVt,jsxs as mau}from"react/jsx-runtime";function l6i({version:i}){return mau(aVt,{flexDirection:"column",marginTop:1,children:[t6i.map((u,t)=>oVt(rau,{color:f6i[t],children:u},t)),mau(rau,{dimColor:!0,children:[" v",i]})]})}var xbi=O(()=>{TL()});function eau(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 UL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function aau(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 oau(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 Jbi={};Gi(Jbi,{subscribeLinkState:()=>kbi,setSelectedHandle:()=>jbi,setRemoving:()=>w6i,setPersistedSandboxes:()=>wrt,setPendingConfirm:()=>Tq,setMachine:()=>frt,setLogPath:()=>Ert,setLinkActions:()=>crt,setIngress:()=>trt,setDaemonError:()=>lrt,setClusterUrl:()=>urt,setCluster:()=>irt,setActionError:()=>c6i,resetLinkStateForTests:()=>hrt,removeSandboxRow:()=>Xbi,pushSandboxEvent:()=>$rt,getLinkState:()=>gq,applySandboxEvent:()=>sau});function pVt(i){return i==="spawning"||i==="ready"||i==="failed"}function sau(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 pau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:sVt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of E6i)i()}function gq(){return lf}function kbi(i){return E6i.add(i),()=>E6i.delete(i)}function irt(i){lf={...lf,cluster:i},b3()}function urt(i){lf={...lf,clusterUrl:i},b3()}function trt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},b3()}function frt(i){lf={...lf,machine:i},b3()}function lrt(i){lf={...lf,daemonError:i},b3()}function Ert(i){lf={...lf,logPath:i},b3()}function jbi(i){lf={...lf,selectedHandle:i},b3()}function Tq(i){lf={...lf,pendingConfirm:i},b3()}function c6i(i){lf={...lf,actionError:i},b3()}function w6i(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},b3()}function crt(i){lf={...lf,actions:i},b3()}function Xbi(i){let u=UL(lf.sandboxes),t=oau(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},b3()}function wrt(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(pVt(f.status))u.set(t,f);lf={...lf,sandboxes:u},b3()}function $rt(i){lf={...lf,sandboxes:sau(lf.sandboxes,i)},b3()}function hrt(){lf=pau(),E6i.clear()}var sVt=20,lf,E6i;var Uq=O(()=>{lf=pau(),E6i=new Set});import{spawn as vrt}from"child_process";function drt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function iou(i,u=process.platform){let t=drt(u);try{vrt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var uou=()=>{};function tou(i,u={}){let t=u.openUrl??iou,f=gq(),l=UL(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":jbi(aau(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);c6i(null),Tq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Tq(null),w===null||!c)return;w6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)Xbi(w.handle);else w6i(w.handle,!1),c6i($.error)});return}case"confirmNo":Tq(null);return;case"quit":if(c)c.quit();return}}var fou=O(()=>{Uq();uou()});function lou(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 Eou={};Gi(Eou,{LinkApp:()=>Ort});import{Box as b1,Text as vl,useInput as Drt}from"ink";import{useSyncExternalStore as _rt}from"react";import{jsx as jf,jsxs as jh}from"react/jsx-runtime";function Nrt(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 Ort(){let i=_rt(kbi,gq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=UL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return Drt((l,E)=>{let c=lou(l,E,i.pendingConfirm!==null);if(c!==null)tou(c)}),jh(b1,{flexDirection:"column",children:[jf(l6i,{version:gL.version}),jf(b1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),jf(b1,{children:i.cluster==="linked"?jh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?jh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):jh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),jf(b1,{children:i.ingressUrl?jh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):jf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),jf(b1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?jf(vl,{dimColor:!0,children:"No previews running yet."}):jh(b1,{flexDirection:"column",children:[jh(b1,{children:[jf(b1,{width:2,flexShrink:0}),jf(b1,{width:AL.project,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),jf(b1,{width:AL.branch,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),jf(b1,{width:AL.status,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),jf(b1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=Nrt(l,i.removingHandles.has(l.handle)),c=l.handle===f;return jh(b1,{children:[jf(b1,{width:2,flexShrink:0,children:jf(vl,{color:"cyan",children:c?"\u203A":" "})}),jf(b1,{width:AL.project,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),jf(b1,{width:AL.branch,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),jf(b1,{width:AL.status,flexShrink:0,marginRight:1,children:jf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),jf(b1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?jf(b1,{marginTop:1,children:jh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?jf(b1,{marginTop:1,children:jh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?jf(b1,{marginTop:1,children:jf(vl,{color:"yellow",children:eau(i.pendingConfirm)})}):null,i.actionError?jf(b1,{marginTop:1,children:jh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,jf(b1,{marginTop:1,children:jf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var AL;var cou=O(()=>{u6i();xbi();fou();Uq();AL={project:18,branch:22,status:14}});var wou={};Gi(wou,{runLinkCommand:()=>yrt});import{closeSync as Zrt,mkdirSync as Brt,openSync as Frt,writeSync as grt}from"fs";import{homedir as Trt}from"os";import{join as Kbi}from"path";function Urt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{grt(u,`${ybi(l)}
|
|
83098
|
+
`)}var Ibi;var qau=O(()=>{Ibi=class Ibi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var gL;var u6i=O(()=>{gL={name:"decocms",version:"4.139.4",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/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","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 src","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 --cwd=../.. build:studio"},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","@inkjs/ui":"^2.0.0","@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","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.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","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Fq={};Gi(Fq,{printBanner:()=>eVt,bannerLines:()=>Vau,BANNER_LINES:()=>t6i,BANNER_GRADIENT:()=>f6i});function mVt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Vau(i){let u=t6i.map((t,f)=>{let[l,E,c]=mVt(f6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function eVt(i){console.log("");for(let u of Vau(i))console.log(u);console.log("")}var t6i,f6i;var TL=O(()=>{t6i=[" \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 "],f6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as aVt,Text as rau}from"ink";import{jsx as oVt,jsxs as mau}from"react/jsx-runtime";function l6i({version:i}){return mau(aVt,{flexDirection:"column",marginTop:1,children:[t6i.map((u,t)=>oVt(rau,{color:f6i[t],children:u},t)),mau(rau,{dimColor:!0,children:[" v",i]})]})}var xbi=O(()=>{TL()});function eau(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 UL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function aau(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 oau(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 Jbi={};Gi(Jbi,{subscribeLinkState:()=>kbi,setSelectedHandle:()=>jbi,setRemoving:()=>w6i,setPersistedSandboxes:()=>wrt,setPendingConfirm:()=>Tq,setMachine:()=>frt,setLogPath:()=>Ert,setLinkActions:()=>crt,setIngress:()=>trt,setDaemonError:()=>lrt,setClusterUrl:()=>urt,setCluster:()=>irt,setActionError:()=>c6i,resetLinkStateForTests:()=>hrt,removeSandboxRow:()=>Xbi,pushSandboxEvent:()=>$rt,getLinkState:()=>gq,applySandboxEvent:()=>sau});function pVt(i){return i==="spawning"||i==="ready"||i==="failed"}function sau(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 pau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:sVt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of E6i)i()}function gq(){return lf}function kbi(i){return E6i.add(i),()=>E6i.delete(i)}function irt(i){lf={...lf,cluster:i},b3()}function urt(i){lf={...lf,clusterUrl:i},b3()}function trt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},b3()}function frt(i){lf={...lf,machine:i},b3()}function lrt(i){lf={...lf,daemonError:i},b3()}function Ert(i){lf={...lf,logPath:i},b3()}function jbi(i){lf={...lf,selectedHandle:i},b3()}function Tq(i){lf={...lf,pendingConfirm:i},b3()}function c6i(i){lf={...lf,actionError:i},b3()}function w6i(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},b3()}function crt(i){lf={...lf,actions:i},b3()}function Xbi(i){let u=UL(lf.sandboxes),t=oau(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},b3()}function wrt(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(pVt(f.status))u.set(t,f);lf={...lf,sandboxes:u},b3()}function $rt(i){lf={...lf,sandboxes:sau(lf.sandboxes,i)},b3()}function hrt(){lf=pau(),E6i.clear()}var sVt=20,lf,E6i;var Uq=O(()=>{lf=pau(),E6i=new Set});import{spawn as vrt}from"child_process";function drt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function iou(i,u=process.platform){let t=drt(u);try{vrt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var uou=()=>{};function tou(i,u={}){let t=u.openUrl??iou,f=gq(),l=UL(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":jbi(aau(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);c6i(null),Tq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(Tq(null),w===null||!c)return;w6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)Xbi(w.handle);else w6i(w.handle,!1),c6i($.error)});return}case"confirmNo":Tq(null);return;case"quit":if(c)c.quit();return}}var fou=O(()=>{Uq();uou()});function lou(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 Eou={};Gi(Eou,{LinkApp:()=>Ort});import{Box as b1,Text as vl,useInput as Drt}from"ink";import{useSyncExternalStore as _rt}from"react";import{jsx as jf,jsxs as jh}from"react/jsx-runtime";function Nrt(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 Ort(){let i=_rt(kbi,gq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=UL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return Drt((l,E)=>{let c=lou(l,E,i.pendingConfirm!==null);if(c!==null)tou(c)}),jh(b1,{flexDirection:"column",children:[jf(l6i,{version:gL.version}),jf(b1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),jf(b1,{children:i.cluster==="linked"?jh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?jh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):jh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),jf(b1,{children:i.ingressUrl?jh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):jf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),jf(b1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?jf(vl,{dimColor:!0,children:"No previews running yet."}):jh(b1,{flexDirection:"column",children:[jh(b1,{children:[jf(b1,{width:2,flexShrink:0}),jf(b1,{width:AL.project,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),jf(b1,{width:AL.branch,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),jf(b1,{width:AL.status,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),jf(b1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=Nrt(l,i.removingHandles.has(l.handle)),c=l.handle===f;return jh(b1,{children:[jf(b1,{width:2,flexShrink:0,children:jf(vl,{color:"cyan",children:c?"\u203A":" "})}),jf(b1,{width:AL.project,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),jf(b1,{width:AL.branch,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),jf(b1,{width:AL.status,flexShrink:0,marginRight:1,children:jf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),jf(b1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?jf(b1,{marginTop:1,children:jh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?jf(b1,{marginTop:1,children:jh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?jf(b1,{marginTop:1,children:jf(vl,{color:"yellow",children:eau(i.pendingConfirm)})}):null,i.actionError?jf(b1,{marginTop:1,children:jh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,jf(b1,{marginTop:1,children:jf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var AL;var cou=O(()=>{u6i();xbi();fou();Uq();AL={project:18,branch:22,status:14}});var wou={};Gi(wou,{runLinkCommand:()=>yrt});import{closeSync as Zrt,mkdirSync as Brt,openSync as Frt,writeSync as grt}from"fs";import{homedir as Trt}from"os";import{join as Kbi}from"path";function Urt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{grt(u,`${ybi(l)}
|
|
83099
83099
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(ybi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function Art(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 yrt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??Kbi(Trt(),"deco"),f=i.clusterBaseUrl??process.env.STUDIO_CLUSTER_URL??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,E,c,w=()=>{if(c===void 0)return;try{c.close()}catch{}finally{c=void 0}};try{if(await Pbi(u,"127.0.0.1"))throw new Ibi(u);let $=Kbi(t,"sandboxes");c=i6i({path:pli(t),managedSandboxRoot:$});let h=await e1i({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await Art(f,h.accessToken);let v=c.reconcile();if(i.prune){let N=c.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${N.removed.length}, skipped ${N.skipped.length}.`);v=c.reconcile()}let d;if(i.tui){let{render:N}=await import("ink"),{createElement:Z}=await import("react"),{LinkApp:B}=await Promise.resolve().then(() => (cou(),Eou)),{pushSandboxEvent:F,setCluster:g,setClusterUrl:T,setDaemonError:U,setIngress:A,setLogPath:G,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (Uq(),Jbi));Brt(t,{recursive:!0});let j=Kbi(t,"link.log");E=Frt(j,"w"),G(j),I(v),T(f),g("connecting"),d={onEvent:(C)=>F(C),onIngress:(C)=>A(C,`http://127.0.0.1:${C}`),onCluster:(C)=>g(C),onMachine:(C)=>k(C)},l=Urt(U,E),N(Z(B),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:N}=await Promise.resolve().then(() => (TL(),Fq));N(i.version??"0.0.0")}w();let D=process.env.DECOCMS_LINK_MANAGED!=="1",_=await Rau({port:u,clusterBaseUrl:f,dataDir:t,session:h,monitor:d,logFd:E,perSandboxLogs:D,hotReload:i.hotReload});if(i.tui){let{setLinkActions:N}=await Promise.resolve().then(() => (Uq(),Jbi));N({stopSandbox:_.stopSandbox,removeSandbox:_.removeSandbox,inspectSandbox:_.inspectSandbox,quit:_.stop})}return await _.stopped}catch($){return l?.(),console.error(Cau($)?Mau(u):$ instanceof Error?$.message:String($)),1}finally{if(l?.(),E!==void 0)try{Zrt(E)}catch{}w()}}var $ou=O(()=>{uRi();nau();Gbi();qau();Abi()});var Hbi={};Gi(Hbi,{resolveDevLinkClusterUrl:()=>xrt,populateDevLinkToxiProxy:()=>Nou,isDevLinkToxiProxyEnabled:()=>Irt,ensureDevLinkToxiProxy:()=>Krt,buildDevLinkToxiProxyConfig:()=>Dou,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>vou,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>dou});function Irt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Ybi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Dou(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=Ybi(i.apiPort,"apiPort"),f=Ybi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=Ybi(Number.parseInt(u.port,10),"upstreamPort"),E=`http://127.0.0.1:${l}`,c=`http://127.0.0.1:${f}`;return{serviceName:vou,proxyName:dou,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:E,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${E}`}}function xrt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function Wbi(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 Qbi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function _ou(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return _ou(i.cause)}async function Sbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${Qbi(l)}`,{cause:l})}}async function Nou(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await Sbi(u,"reset",t,{method:"POST"});await Wbi(f,"reset",t);let l=`${i.apiUrl}/populate`,E=await Sbi(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 Wbi(E,"populate",l)}async function krt(i,u){let t=`${i.apiUrl}/version`;try{await B1(async()=>{let f=await Sbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(Grt)});await Wbi(f,"readiness check",t)},{maxAttempts:Prt,minTimeout:hou,maxTimeout:hou,multiplier:1,jitter:0,isRetriable:(f)=>!_ou(f)})}catch(f){let l=f instanceof H6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${Qbi(l)}`,{cause:l})}}async function jrt(i){if(i===null)return"";return await new Response(i).text()}async function Lbi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch(w){throw Error(`Docker command failed to start (${t}): ${Qbi(w)}`,{cause:w})}})(),[l,E]=await Promise.all([f.exited,jrt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let c=E.trim().length>0?`: ${E.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${c}`)}async function Xrt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Lbi(["rm","-f",t],{ignoreFailure:!0}),await Lbi(["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 Jrt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Lbi(["rm","-f",t],{ignoreFailure:!0})}async function Krt(i){let u=Dou(i),t=i.startDaemon??Xrt,f=i.stopDaemon??(i.startDaemon===void 0?Jrt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await krt(u,l),await Nou(u,l)}catch(E){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw E}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var vou="ToxiProxy",dou="dev_link_studio",Prt=20,hou=100,Grt=100;var zbi=O(()=>{Z4()});var Oou={};Gi(Oou,{migrateBetterAuth:()=>Rbi});import{getMigrations as Yrt}from"better-auth/db";import{sso as Wrt}from"@better-auth/sso";import{organization as Srt}from"@decocms/better-auth/plugins";import{admin as Lrt,apiKey as Qrt,jwt as Hrt,magicLink as zrt,mcp as Rrt,openAPI as nrt}from"better-auth/plugins";import{emailOTP as brt}from"better-auth/plugins/email-otp";async function Rbi(i){let t={database:YM(i||__()),plugins:[Srt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),Lrt(),Qrt(),Hrt(),nrt(),Rrt({loginPage:"/login"}),Wrt(),zrt({sendMagicLink:async()=>{}}),brt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:E}=await Yrt(t);if(!f.length&&!l.length)return"up to date";return await E(),`${l.length+f.length} table(s) migrated`}var nbi=O(()=>{b6()});var bbi={};Gi(bbi,{up:()=>Crt,down:()=>Mrt});import{sql as Od}from"kysely";async function Crt(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(Od`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Od`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(Od`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Od`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(Od`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(Od`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(Od`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(Od`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(Od`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Od`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 Mrt(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 Zou=()=>{};var Cbi={};Gi(Cbi,{up:()=>qrt,down:()=>Vrt});import{sql as Bou}from"kysely";async function qrt(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(Bou`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Bou`CURRENT_TIMESTAMP`)).execute()}async function Vrt(i){await i.schema.dropTable("organization_settings").execute()}var Fou=()=>{};var Mbi={};Gi(Mbi,{up:()=>rrt,down:()=>mrt});async function rrt(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 mrt(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 qbi={};Gi(qbi,{up:()=>ert,down:()=>art});async function ert(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 art(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 Vbi={};Gi(Vbi,{up:()=>ort,down:()=>srt});async function ort(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function srt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var rbi={};Gi(rbi,{up:()=>imt,down:()=>umt});import{sql as prt}from"kysely";async function imt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",prt`text`).execute()}async function umt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var gou=()=>{};var mbi={};Gi(mbi,{up:()=>tmt,down:()=>fmt});async function tmt(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 fmt(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 ebi={};Gi(ebi,{up:()=>lmt,down:()=>Emt});import{sql as Aq}from"kysely";async function lmt(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(Aq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Aq`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(Aq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Aq`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(Aq`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 Emt(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 Tou=()=>{};var abi={};Gi(abi,{up:()=>wmt,down:()=>$mt});import{sql as cmt}from"kysely";async function wmt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function $mt(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(cmt`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 Uou=()=>{};var obi={};Gi(obi,{up:()=>hmt,down:()=>vmt});import{sql as $6i}from"kysely";async function hmt(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($6i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo($6i`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($6i`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 $6i`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 vmt(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 Aou=()=>{};var sbi={};Gi(sbi,{up:()=>dmt,down:()=>Dmt});async function dmt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function Dmt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var pbi={};Gi(pbi,{up:()=>_mt,down:()=>Nmt});import{sql as h6i}from"kysely";async function _mt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await h6i`
|
|
83100
83100
|
UPDATE gateways
|
|
83101
83101
|
SET tool_selection_mode = CASE
|
|
@@ -86654,7 +86654,7 @@ Hint: Configure a valid Google account email in Monitor Configuration > Contexto
|
|
|
86654
86654
|
|
|
86655
86655
|
`).trim(),D=v.length>0?`Not executed tools (${v.length}/${i.tools.length}): ${v.join(", ")}`:"",_=[d,D].filter((N)=>N.length>0).join(`
|
|
86656
86656
|
|
|
86657
|
-
`);return{toolResults:$,agentSummary:_.length>0?_:null,unexecutedTools:v}}finally{await u.close?.().catch(()=>{})}}async function xhu(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 E=RF4(u);if(!E)throw Error(`Registry item ${u.id} has no remote URL`);if(yhu(E))throw Error(`Registry item ${u.id} targets a private network URL, refusing to create a monitor connection`);let c=HF4(i),w=zF4(u),$=await i.storage.connections.create({organization_id:f,created_by:c,title:`[MCP Tester] ${u.title}`,description:`Auto-created monitor connection for ${u.id}`,app_name:"private-registry-monitor",app_id:`${MY}:monitor`,connection_type:w,connection_url:E,metadata:{monitorConnection:!0,registryItemId:u.id,pluginId:MY}});return await t.monitorConnections.upsert({organization_id:f,item_id:u.id,connection_id:$.id,auth_status:"none"}),$.id}async function aF4(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 oF4(i){let u=Date.now();if(i.signal.aborted)throw Error("Run cancelled");let t="passed",f=!1,l=!1,E=null,c="none",w=null,$=[],h=null,v=async()=>{await i.onProgress?.({status:t,connectionOk:f,toolsListed:l,toolResults:[...$],agentSummary:w,errorMessage:E,actionTaken:c,durationMs:Date.now()-u})};try{let d=await xhu(i.ctx,i.item);h=await i.ctx.createMCPProxy(d),f=!0;let _=(await Bp(h.listTools?h.listTools():Promise.resolve({tools:[]}),i.monitorConfig.perMcpTimeoutMs,`listTools ${i.item.id}`)).tools??[];if(l=!0,i.monitorConfig.monitorMode!=="health_check")$.push(..._.map((N)=>Ihu(N.name))),await v();if(i.monitorConfig.monitorMode==="full_agent"){let N=await eF4({ctx:i.ctx,monitorConfig:i.monitorConfig,item:i.item,proxy:h,tools:_,signal:i.signal,onProgress:async(Z)=>{$.length=0,$.push(...jo0({discoveredTools:_,executedResults:Z})),t=Z.some((B)=>!B.success)?"failed":"passed",await v()}});if($.length=0,$.push(...jo0({discoveredTools:_,executedResults:N.toolResults})),w=N.agentSummary,N.toolResults.some((Z)=>!Z.success))t="failed";if(N.unexecutedTools.length>0){if(t="failed",!E)E=`Agent skipped ${N.unexecutedTools.length} tool(s): ${N.unexecutedTools.join(", ")}`}}else if(i.monitorConfig.monitorMode!=="health_check"){for(let N=0;N<_.length;N++){let Z=_[N];if(!Z||i.signal.aborted)throw Error("Run cancelled");let B=Date.now();try{let F={},g=await Bp(h.callTool({name:Z.name,arguments:F}),i.monitorConfig.perToolTimeoutMs,`tool ${Z.name}`),T=!g.isError,U=Date.now()-B;Xo0($,{toolName:Z.name,success:T,input:F,durationMs:U,outputPreview:Wo0(g.structuredContent??g.content),error:T?null:oPi(g.content?.find((A)=>A.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await v()}catch(F){let g=Date.now()-B,T=F instanceof Error?F.message:String(F);Xo0($,{toolName:Z.name,success:!1,durationMs:g,error:oPi(T)}),await v()}}if($.some((N)=>!N.success))t="failed"}else for(let N of _)$.push(Ihu(N.name));if(i.canApplyFailureAction&&t==="failed"&&i.monitorConfig.onFailure!=="none")c=await aF4({ctx:i.ctx,organizationId:i.organizationId,item:i.item,action:i.monitorConfig.onFailure})}catch(d){if(E=d instanceof Error?d.message:String(d),nF4(d))t="needs_auth",await i.ctx.storage.registry.monitorConnections.updateAuthStatus(i.organizationId,i.item.id,"needs_auth");else t="error"}finally{await h?.close?.().catch(()=>{})}return{status:t,connectionOk:f,toolsListed:l,toolResults:$,agentSummary:w,errorMessage:E,actionTaken:c,durationMs:Date.now()-u}}async function sF4(i){let u=i.ctx.storage.registry,f=(await u.items.list(i.organizationId,{includeUnlisted:!0})).items.filter((v)=>{if(i.monitorConfig.testPublicOnly&&!v.is_public)return!1;if(i.monitorConfig.testPrivateOnly&&v.is_public)return!1;return!0}),l=i.monitorConfig.includePendingRequests?(await u.publishRequests.list(i.organizationId,{status:"pending",limit:500})).items.map((v)=>pF4(v)):[],E=[...f.map((v)=>({item:v,source:"registry_item"})),...l.map((v)=>({item:v,source:"publish_request"}))];if(E.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:E.length,status:"running",started_at:new Date().toISOString()});let c=0,w=0,$=0,h=0;for(let v=0;v<E.length;v++){let d=E[v],D=d?.item;if(!D||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:D.id});let _=null,N=async(B)=>{if(!_){_=(await u.monitorResults.create({run_id:i.runId,organization_id:i.organizationId,item_id:D.id,item_title:D.title,status:B.status,error_message:B.errorMessage,connection_ok:B.connectionOk,tools_listed:B.toolsListed,tool_results:B.toolResults,agent_summary:B.agentSummary,duration_ms:B.durationMs,action_taken:B.actionTaken})).id;return}await u.monitorResults.update(i.organizationId,_,{status:B.status,error_message:B.errorMessage,connection_ok:B.connectionOk,tools_listed:B.toolsListed,tool_results:B.toolResults,agent_summary:B.agentSummary,duration_ms:B.durationMs,action_taken:B.actionTaken})},Z=await oF4({ctx:i.ctx,organizationId:i.organizationId,item:D,monitorConfig:i.monitorConfig,signal:i.signal,canApplyFailureAction:d.source==="registry_item",onProgress:N});if(await N({status:Z.status,connectionOk:Z.connectionOk,toolsListed:Z.toolsListed,toolResults:Z.toolResults,agentSummary:Z.agentSummary,errorMessage:Z.errorMessage,actionTaken:Z.actionTaken,durationMs:Z.durationMs}),c+=1,Z.status==="passed")w+=1;else if(Z.status==="failed"||Z.status==="error")$+=1;else h+=1;await u.monitorRuns.update(i.organizationId,i.runId,{tested_items:c,passed_items:w,failed_items:$,skipped_items:h})}await u.monitorRuns.update(i.organizationId,i.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()})}function pF4(i){return{id:`${XO}${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 ig4(i,u){let t=QF4(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}),E=new AbortController;return aPi.set(l.id,E),sF4({ctx:t,runId:l.id,organizationId:t.organization.id,monitorConfig:u,signal:E.signal}).catch(async(c)=>{await f.monitorRuns.update(t.organization.id,l.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),LF4(`Run ${l.id} failed with uncaught error:`,c)}).finally(()=>{aPi.delete(l.id)}),{run:{id:l.id}}}var aPi,YF4="[MONITOR-AGENT]",WF4,SF4="health_check: not called",Qo0;var sPi=O(()=>{fu();Nf();Phu();Kn();D7();aPi=new Map,WF4=wo0;Qo0=p({name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:_o0,outputSchema:No0,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=Do0(i.config??{}),{run:l}=await ig4(u,f),c=await u.storage.registry.monitorRuns.findById(t.id,l.id);if(!c)throw Error(`Failed to load monitor run ${l.id}`);return{run:c}}})});var Ho0;var zo0=O(()=>{fu();D7();Ho0=p({name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:Bo0,outputSchema:Fo0,handler:async(i,u)=>{let t=Oi(u);return await u.access.check(),u.storage.registry.monitorRuns.list(t.id,i)}})});var Ro0;var no0=O(()=>{fu();D7();Ro0=p({name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:go0,outputSchema:To0,handler:async(i,u)=>{let t=Oi(u);return await u.access.check(),{run:await u.storage.registry.monitorRuns.findById(t.id,i.runId)}}})});var bo0;var Co0=O(()=>{fu();D7();sPi();bo0=p({name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:Oo0,outputSchema:Zo0,handler:async(i,u)=>{let t=Oi(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 Yo0(i.runId),{run:await f.monitorRuns.update(t.id,i.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}}})});var Mo0;var qo0=O(()=>{fu();D7();Mo0=p({name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:Uo0,outputSchema:Ao0,handler:async(i,u)=>{let t=Oi(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 Vo0;var ro0=O(()=>{fu();D7();Kn();Vo0=p({name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:yo0,outputSchema:Po0,handler:async(i,u)=>{let t=Oi(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(c)=>{let w=await f.items.findById(t.id,c.item_id);if(!w&&c.item_id.startsWith(XO)){let v=c.item_id.slice(XO.length),d=await f.publishRequests.findById(t.id,v);if(d)w={id:c.item_id,title:d.title,description:d.description,_meta:d._meta,server:d.server,is_public:!1,is_unlisted:!0,created_at:d.created_at,updated_at:d.updated_at}}let $=w?.server.remotes?.find((v)=>v.url)?.url??null,h=c.item_id.startsWith(XO)?"request":"store";return{mapping:c,item:w,remoteUrl:$,source:h}}))}}})});function ug4(i){return{id:`${XO}${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 mo0;var eo0=O(()=>{fu();D7();sPi();Kn();mo0=p({name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:Go0,outputSchema:Io0,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry,l=(await f.items.list(t.id,{includeUnlisted:!0})).items,c=(await f.publishRequests.list(t.id,{status:"pending",limit:500})).items.map(ug4),w=[...l,...c],$=await f.monitorConnections.list(t.id),h=new Set($.map((d)=>d.item_id)),v=0;for(let d of w){if(!d.server.remotes?.some((D)=>D.url))continue;try{await xhu(u,d)}catch(D){console.warn(`[REGISTRY_MONITOR_CONNECTION_SYNC] Skipping ${d.id}:`,D instanceof Error?D.message:D);continue}if(!h.has(d.id))v+=1}return{created:v,updated:Math.max(w.length-v,0)}}})});var ao0;var oo0=O(()=>{fu();D7();ao0=p({name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:xo0,outputSchema:ko0,handler:async({connectionId:i,authStatus:u},t)=>{let f=Oi(t);await t.access.check();let l=t.storage.registry,E=f.id,c=await l.monitorConnections.findByConnectionId(E,i);if(!c)throw Error(`No monitor connection mapping found for connection ${i}`);return await l.monitorConnections.updateAuthStatus(E,c.item_id,u),{success:!0}}})});function tg4(i){if(!i)return{};if(typeof i==="string")try{return JSON.parse(i)}catch{return{}}if(typeof i==="object")return i;return{}}async function Fp(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","=",MY).execute()).map((E)=>tg4(E.settings)),l={acceptPublishRequests:f.some((E)=>E.acceptPublishRequests===!0),requireApiToken:f.some((E)=>E.requireApiToken===!0),storePrivateOnly:f.some((E)=>E.storePrivateOnly===!0)};if(l.acceptPublishRequests||l.requireApiToken||l.storePrivateOnly)return l;for(let E of f)if(Object.keys(E).length>0)return E;return{}}var so0=O(()=>{Kn()});import{z as khu}from"zod";function fg4(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 lg4(i){let u=new Map,t=new Map;for(let l of i){let E=rd(l._meta);for(let c of E?.tags??[])u.set(c,(u.get(c)??0)+1);for(let c of E?.categories??[])t.set(c,(t.get(c)??0)+1)}let f=(l)=>Array.from(l.entries()).map(([E,c])=>({value:E,count:c})).sort((E,c)=>E.value.localeCompare(c.value));return{tags:f(u),categories:f(t)}}var po0,is0,us0,ts0;var fs0=O(()=>{fu();yl();so0();po0=p({name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:xn,outputSchema:kn,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry,l=await Fp(u,t.id);return f.items.list(t.id,{...i,where:fg4(i.where,l.storePrivateOnly===!0)})}}),is0=p({name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:C8,outputSchema:CY,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry,l=await Fp(u,t.id),E=i.id??i.name;if(!E)return{item:null};let c=await f.items.findByIdOrName(t.id,E);if(!c)return{item:null};if(l.storePrivateOnly&&c.is_public)return{item:null};return{item:c}}}),us0=p({name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:C8,outputSchema:khu.object({versions:khu.array(qv)}),handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry,l=await Fp(u,t.id),E=i.id??i.name;if(!E)return{versions:[]};let c=await f.items.findByIdOrName(t.id,E);if(!c)return{versions:[]};if(l.storePrivateOnly&&c.is_public)return{versions:[]};return{versions:[c]}}}),ts0=p({name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:khu.object({}),outputSchema:jn,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry;if(!(await Fp(u,t.id)).storePrivateOnly)return f.items.getFilters(t.id);let E=await f.items.list(t.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return lg4(E.items)}})});var ls0;var Es0=O(()=>{Ga0();xa0();ja0();Ja0();Phu();Sa0();Qa0();za0();na0();Ca0();Va0();ma0();aa0();sa0();io0();to0();lo0();co0();sPi();zo0();no0();Co0();qo0();ro0();eo0();oo0();fs0();ls0=[po0,is0,us0,ts0,Ha0,Ra0,La0,qa0,ka0,Pa0,ba0,Xa0,Wa0,Ya0,Ia0,ra0,ea0,oa0,pa0,uo0,fo0,Eo0,Qo0,Ho0,Ro0,bo0,Mo0,Vo0,mo0,ao0]});import{z as Yn}from"zod";var cg4,jhu;var cs0=O(()=>{C5();fu();AR();G$();UR();cg4=Yn.enum(["agent-sandbox","user-desktop","cluster"]),jhu=p({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:Yn.object({virtualMcpId:Yn.string().describe("Virtual MCP ID that owns this VM"),branch:Yn.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:cg4.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:Yn.object({success:Yn.boolean()}),handler:async(i,u)=>{let t=q2(i.sandboxProviderKind),f;try{f=await EY0({...i,sandboxProviderKind:t},u)}catch(w){if(w instanceof Error&&w.message==="Virtual MCP not found")return{success:!0};throw w}let{entry:l,userId:E}=f;if(!l)return{success:!0};let{provider:c}=await Kv(u,{userId:E,branch:i.branch,virtualMcpMetadata:f.metadata,explicitKind:t});return await RN(u.storage.virtualMcps,i.virtualMcpId,E,E,i.branch,t),await c.delete(l.sandboxHandle).catch((w)=>console.error(`[SANDBOX_DELETE] ${t} ${l.sandboxHandle}: ${w instanceof Error?w.message:String(w)}`)),{success:!0}}})});var ws0=O(()=>{wUi();cs0()});import{z as M8}from"zod";var $g4="https://api.github.com",Xhu;var $s0=O(()=>{fu();ON();ZN();Fv();Xhu=p({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:M8.object({connectionId:M8.string().describe("ID of the mcp-github connection to use")}),outputSchema:M8.object({installations:M8.array(M8.object({installationId:M8.number(),login:M8.string(),avatarUrl:M8.string(),type:M8.string()})),appSlug:M8.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(W5(f))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let l=new r1(u.db,u.vault),E=await l.get(i.connectionId);if(!E)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let c=E.accessToken;if(Y5i(E)&&l.isExpired(E,Pa)){let D=await W5i(E,l);if(!D)throw Error(xc);c=D,E=await l.get(i.connectionId)??E}let w=[],$,h=1,v=100,d=async(D)=>fetch(`${$g4}/user/installations?per_page=${v}&page=${h}`,{headers:{Authorization:`Bearer ${D}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let D=await d(c);if(D.status===401){let N=await l.get(i.connectionId);if(!N||!Y5i(N))throw Error(xc);let Z=await W5i(N,l);if(!Z)throw Error(xc);if(c=Z,D=await d(c),D.status===401)throw Error(xc)}if(!D.ok)throw Error(`GitHub /user/installations failed: ${D.status}`);let _=await D.json();for(let N of _.installations){if(!$)$=N.app_slug??N.app?.slug;w.push({installationId:N.id,login:N.account.login,avatarUrl:N.account.avatar_url,type:N.account.type})}if(_.installations.length<v)break;h++}return{installations:w,...$?{appSlug:$}:{}}}})});var hs0=O(()=>{$s0()});import qY from"zod";var Jhu;var vs0=O(()=>{lbi();fu();Jhu=p({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:qY.object({}),outputSchema:qY.object({online:qY.boolean(),machineId:qY.string().optional(),hostname:qY.string().optional(),cliVersion:qY.string().optional(),capabilities:qY.array(wRi).default([])}),handler:async(i,u)=>{gi(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 Khu from"zod";var Yhu;var ds0=O(()=>{fu();Yhu=p({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:Khu.object({}),outputSchema:Khu.object({disconnected:Khu.boolean()}),handler:async(i,u)=>{gi(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 Ds0=O(()=>{vs0();ds0()});import{z as E6}from"zod";function _s0(i){if(!i)return"";return typeof i==="string"?i:i.toISOString()}var dg4,Dg4,_g4,Ng4,Og4,Whu;var Ns0=O(()=>{fu();dg4=["thread"],Dg4=E6.object({type:E6.literal("thread"),id:E6.string(),title:E6.string(),created_at:E6.string(),updated_at:E6.string(),virtual_mcp_id:E6.string().nullable(),run_config:E6.record(E6.string(),E6.unknown()).nullable(),status:E6.string().nullable()}),_g4=E6.discriminatedUnion("type",[Dg4]),Ng4=E6.object({query:E6.string().min(1).describe("Free-text search query."),limit:E6.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:E6.array(E6.enum(dg4)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),Og4=E6.object({items:E6.array(_g4),totalCount:E6.number()});Whu=p({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:Ng4,outputSchema:Og4,handler:async(i,u)=>{await u.access.check(),Oi(u);let t=i.limit??20,f=i.types?.length?new Set(i.types):null,l=!f||f.has("thread"),E=[],c=0;if(l){let{threads:w,total:$}=await u.storage.threads.list(void 0,{limit:t,offset:0,search:i.query,includeArchived:!1});c+=$;for(let h of w)E.push({type:"thread",id:h.id,title:h.title??"",created_at:_s0(h.created_at),updated_at:_s0(h.updated_at),virtual_mcp_id:h.virtual_mcp_id??null,run_config:h.run_config??null,status:h.status??null})}return{items:E,totalCount:c}}})});var Os0=O(()=>{Ns0()});var Dhi={};Gi(Dhi,{managementMCP:()=>WR,managementContextStore:()=>DY,listManagementTools:()=>Bg4,TOOL_BY_NAME:()=>gp,CORE_TOOLS:()=>Bs0});import{z as Zs0}from"zod";async function Bg4(i){let u=await WR(i),[t,f]=Br.createLinkedPair();await u.connect(f);let l=new rl({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:K1});try{return await l.connect(t),(await l.listTools()).tools}finally{await l.close().catch(()=>{}),await u.close().catch(()=>{})}}var Bs0,gp,WR=async(i)=>{let u=new d2({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:K1});for(let l of gp.values()){let{config:E,handler:c}=LPi(l);u.registerTool(l.name,E,c)}let t=SPi();for(let l of t){let E=l.arguments?.length?Object.fromEntries(l.arguments.map((c)=>{let w=c.required?Zs0.string():Zs0.string().optional();return[c.name,c.description?w.describe(c.description):w]})):void 0;u.registerPrompt(l.name,{title:l.title,description:l.description,...E?{argsSchema:E}:{}},(c)=>{return{messages:[{role:"user",content:{type:"text",text:typeof l.text==="function"?l.text(c??{}):l.text}}]}})}if(i.organization?.id){let l=await i.storage.brandContext.list(i.organization.id),E=new Set;for(let c of l){let w=c.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),$=w?`brand-${w}`:`brand-${c.id}`;if(E.has($))$=`${$}-${c.id.slice(0,8)}`;E.add($);let h=[`# Brand: ${c.name}`,"",`**Domain:** ${c.domain}`,"","## Overview",c.overview];if(c.colors){let d=Object.entries(c.colors).filter(([,D])=>D);if(d.length>0){h.push("","## Colors");for(let[D,_]of d)h.push(`- **${D}:** ${_}`)}}if(c.fonts){let d=Object.entries(c.fonts).filter(([,D])=>D);if(d.length>0){h.push("","## Fonts");for(let[D,_]of d)h.push(`- ${_} (${D})`)}}if(c.logo)h.push("",`**Logo:** ${c.logo}`);if(c.favicon)h.push(`**Favicon:** ${c.favicon}`);if(c.ogImage)h.push(`**OG Image:** ${c.ogImage}`);if(c.images&&c.images.length>0){h.push("","## Images");for(let d of c.images){let D=Object.entries(d).map(([_,N])=>`${_}: ${N}`).join(", ");h.push(`- ${D}`)}}let v=h.join(`
|
|
86657
|
+
`);return{toolResults:$,agentSummary:_.length>0?_:null,unexecutedTools:v}}finally{await u.close?.().catch(()=>{})}}async function xhu(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 E=RF4(u);if(!E)throw Error(`Registry item ${u.id} has no remote URL`);if(yhu(E))throw Error(`Registry item ${u.id} targets a private network URL, refusing to create a monitor connection`);let c=HF4(i),w=zF4(u),$=await i.storage.connections.create({organization_id:f,created_by:c,title:`[MCP Tester] ${u.title}`,description:`Auto-created monitor connection for ${u.id}`,app_name:"private-registry-monitor",app_id:`${MY}:monitor`,connection_type:w,connection_url:E,metadata:{monitorConnection:!0,registryItemId:u.id,pluginId:MY}});return await t.monitorConnections.upsert({organization_id:f,item_id:u.id,connection_id:$.id,auth_status:"none"}),$.id}async function aF4(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 oF4(i){let u=Date.now();if(i.signal.aborted)throw Error("Run cancelled");let t="passed",f=!1,l=!1,E=null,c="none",w=null,$=[],h=null,v=async()=>{await i.onProgress?.({status:t,connectionOk:f,toolsListed:l,toolResults:[...$],agentSummary:w,errorMessage:E,actionTaken:c,durationMs:Date.now()-u})};try{let d=await xhu(i.ctx,i.item);h=await i.ctx.createMCPProxy(d),f=!0;let _=(await Bp(h.listTools?h.listTools():Promise.resolve({tools:[]}),i.monitorConfig.perMcpTimeoutMs,`listTools ${i.item.id}`)).tools??[];if(l=!0,i.monitorConfig.monitorMode!=="health_check")$.push(..._.map((N)=>Ihu(N.name))),await v();if(i.monitorConfig.monitorMode==="full_agent"){let N=await eF4({ctx:i.ctx,monitorConfig:i.monitorConfig,item:i.item,proxy:h,tools:_,signal:i.signal,onProgress:async(Z)=>{$.length=0,$.push(...jo0({discoveredTools:_,executedResults:Z})),t=Z.some((B)=>!B.success)?"failed":"passed",await v()}});if($.length=0,$.push(...jo0({discoveredTools:_,executedResults:N.toolResults})),w=N.agentSummary,N.toolResults.some((Z)=>!Z.success))t="failed";if(N.unexecutedTools.length>0){if(t="failed",!E)E=`Agent skipped ${N.unexecutedTools.length} tool(s): ${N.unexecutedTools.join(", ")}`}}else if(i.monitorConfig.monitorMode!=="health_check"){for(let N=0;N<_.length;N++){let Z=_[N];if(!Z||i.signal.aborted)throw Error("Run cancelled");let B=Date.now();try{let F={},g=await Bp(h.callTool({name:Z.name,arguments:F}),i.monitorConfig.perToolTimeoutMs,`tool ${Z.name}`),T=!g.isError,U=Date.now()-B;Xo0($,{toolName:Z.name,success:T,input:F,durationMs:U,outputPreview:Wo0(g.structuredContent??g.content),error:T?null:oPi(g.content?.find((A)=>A.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await v()}catch(F){let g=Date.now()-B,T=F instanceof Error?F.message:String(F);Xo0($,{toolName:Z.name,success:!1,durationMs:g,error:oPi(T)}),await v()}}if($.some((N)=>!N.success))t="failed"}else for(let N of _)$.push(Ihu(N.name));if(i.canApplyFailureAction&&t==="failed"&&i.monitorConfig.onFailure!=="none")c=await aF4({ctx:i.ctx,organizationId:i.organizationId,item:i.item,action:i.monitorConfig.onFailure})}catch(d){if(E=d instanceof Error?d.message:String(d),nF4(d))t="needs_auth",await i.ctx.storage.registry.monitorConnections.updateAuthStatus(i.organizationId,i.item.id,"needs_auth");else t="error"}finally{await h?.close?.().catch(()=>{})}return{status:t,connectionOk:f,toolsListed:l,toolResults:$,agentSummary:w,errorMessage:E,actionTaken:c,durationMs:Date.now()-u}}async function sF4(i){let u=i.ctx.storage.registry,f=(await u.items.list(i.organizationId,{includeUnlisted:!0})).items.filter((v)=>{if(i.monitorConfig.testPublicOnly&&!v.is_public)return!1;if(i.monitorConfig.testPrivateOnly&&v.is_public)return!1;return!0}),l=i.monitorConfig.includePendingRequests?(await u.publishRequests.list(i.organizationId,{status:"pending",limit:500})).items.map((v)=>pF4(v)):[],E=[...f.map((v)=>({item:v,source:"registry_item"})),...l.map((v)=>({item:v,source:"publish_request"}))];if(E.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:E.length,status:"running",started_at:new Date().toISOString()});let c=0,w=0,$=0,h=0;for(let v=0;v<E.length;v++){let d=E[v],D=d?.item;if(!D||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:D.id});let _=null,N=async(B)=>{if(!_){_=(await u.monitorResults.create({run_id:i.runId,organization_id:i.organizationId,item_id:D.id,item_title:D.title,status:B.status,error_message:B.errorMessage,connection_ok:B.connectionOk,tools_listed:B.toolsListed,tool_results:B.toolResults,agent_summary:B.agentSummary,duration_ms:B.durationMs,action_taken:B.actionTaken})).id;return}await u.monitorResults.update(i.organizationId,_,{status:B.status,error_message:B.errorMessage,connection_ok:B.connectionOk,tools_listed:B.toolsListed,tool_results:B.toolResults,agent_summary:B.agentSummary,duration_ms:B.durationMs,action_taken:B.actionTaken})},Z=await oF4({ctx:i.ctx,organizationId:i.organizationId,item:D,monitorConfig:i.monitorConfig,signal:i.signal,canApplyFailureAction:d.source==="registry_item",onProgress:N});if(await N({status:Z.status,connectionOk:Z.connectionOk,toolsListed:Z.toolsListed,toolResults:Z.toolResults,agentSummary:Z.agentSummary,errorMessage:Z.errorMessage,actionTaken:Z.actionTaken,durationMs:Z.durationMs}),c+=1,Z.status==="passed")w+=1;else if(Z.status==="failed"||Z.status==="error")$+=1;else h+=1;await u.monitorRuns.update(i.organizationId,i.runId,{tested_items:c,passed_items:w,failed_items:$,skipped_items:h})}await u.monitorRuns.update(i.organizationId,i.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()})}function pF4(i){return{id:`${XO}${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 ig4(i,u){let t=QF4(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}),E=new AbortController;return aPi.set(l.id,E),sF4({ctx:t,runId:l.id,organizationId:t.organization.id,monitorConfig:u,signal:E.signal}).catch(async(c)=>{await f.monitorRuns.update(t.organization.id,l.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),LF4(`Run ${l.id} failed with uncaught error:`,c)}).finally(()=>{aPi.delete(l.id)}),{run:{id:l.id}}}var aPi,YF4="[MONITOR-AGENT]",WF4,SF4="health_check: not called",Qo0;var sPi=O(()=>{fu();Nf();Phu();Kn();D7();aPi=new Map,WF4=wo0;Qo0=p({name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:_o0,outputSchema:No0,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=Do0(i.config??{}),{run:l}=await ig4(u,f),c=await u.storage.registry.monitorRuns.findById(t.id,l.id);if(!c)throw Error(`Failed to load monitor run ${l.id}`);return{run:c}}})});var Ho0;var zo0=O(()=>{fu();D7();Ho0=p({name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:Bo0,outputSchema:Fo0,handler:async(i,u)=>{let t=Oi(u);return await u.access.check(),u.storage.registry.monitorRuns.list(t.id,i)}})});var Ro0;var no0=O(()=>{fu();D7();Ro0=p({name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:go0,outputSchema:To0,handler:async(i,u)=>{let t=Oi(u);return await u.access.check(),{run:await u.storage.registry.monitorRuns.findById(t.id,i.runId)}}})});var bo0;var Co0=O(()=>{fu();D7();sPi();bo0=p({name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:Oo0,outputSchema:Zo0,handler:async(i,u)=>{let t=Oi(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 Yo0(i.runId),{run:await f.monitorRuns.update(t.id,i.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}}})});var Mo0;var qo0=O(()=>{fu();D7();Mo0=p({name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:Uo0,outputSchema:Ao0,handler:async(i,u)=>{let t=Oi(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 Vo0;var ro0=O(()=>{fu();D7();Kn();Vo0=p({name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:yo0,outputSchema:Po0,handler:async(i,u)=>{let t=Oi(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(c)=>{let w=await f.items.findById(t.id,c.item_id);if(!w&&c.item_id.startsWith(XO)){let v=c.item_id.slice(XO.length),d=await f.publishRequests.findById(t.id,v);if(d)w={id:c.item_id,title:d.title,description:d.description,_meta:d._meta,server:d.server,is_public:!1,is_unlisted:!0,created_at:d.created_at,updated_at:d.updated_at}}let $=w?.server.remotes?.find((v)=>v.url)?.url??null,h=c.item_id.startsWith(XO)?"request":"store";return{mapping:c,item:w,remoteUrl:$,source:h}}))}}})});function ug4(i){return{id:`${XO}${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 mo0;var eo0=O(()=>{fu();D7();sPi();Kn();mo0=p({name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:Go0,outputSchema:Io0,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry,l=(await f.items.list(t.id,{includeUnlisted:!0})).items,c=(await f.publishRequests.list(t.id,{status:"pending",limit:500})).items.map(ug4),w=[...l,...c],$=await f.monitorConnections.list(t.id),h=new Set($.map((d)=>d.item_id)),v=0;for(let d of w){if(!d.server.remotes?.some((D)=>D.url))continue;try{await xhu(u,d)}catch(D){console.warn(`[REGISTRY_MONITOR_CONNECTION_SYNC] Skipping ${d.id}:`,D instanceof Error?D.message:D);continue}if(!h.has(d.id))v+=1}return{created:v,updated:Math.max(w.length-v,0)}}})});var ao0;var oo0=O(()=>{fu();D7();ao0=p({name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:xo0,outputSchema:ko0,handler:async({connectionId:i,authStatus:u},t)=>{let f=Oi(t);await t.access.check();let l=t.storage.registry,E=f.id,c=await l.monitorConnections.findByConnectionId(E,i);if(!c)throw Error(`No monitor connection mapping found for connection ${i}`);return await l.monitorConnections.updateAuthStatus(E,c.item_id,u),{success:!0}}})});function tg4(i){if(!i)return{};if(typeof i==="string")try{return JSON.parse(i)}catch{return{}}if(typeof i==="object")return i;return{}}async function Fp(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","=",MY).execute()).map((E)=>tg4(E.settings)),l={acceptPublishRequests:f.some((E)=>E.acceptPublishRequests===!0),requireApiToken:f.some((E)=>E.requireApiToken===!0),storePrivateOnly:f.some((E)=>E.storePrivateOnly===!0)};if(l.acceptPublishRequests||l.requireApiToken||l.storePrivateOnly)return l;for(let E of f)if(Object.keys(E).length>0)return E;return{}}var so0=O(()=>{Kn()});import{z as khu}from"zod";function fg4(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 lg4(i){let u=new Map,t=new Map;for(let l of i){let E=rd(l._meta);for(let c of E?.tags??[])u.set(c,(u.get(c)??0)+1);for(let c of E?.categories??[])t.set(c,(t.get(c)??0)+1)}let f=(l)=>Array.from(l.entries()).map(([E,c])=>({value:E,count:c})).sort((E,c)=>E.value.localeCompare(c.value));return{tags:f(u),categories:f(t)}}var po0,is0,us0,ts0;var fs0=O(()=>{fu();yl();so0();po0=p({name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:xn,outputSchema:kn,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry,l=await Fp(u,t.id);return f.items.list(t.id,{...i,where:fg4(i.where,l.storePrivateOnly===!0)})}}),is0=p({name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:C8,outputSchema:CY,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry,l=await Fp(u,t.id),E=i.id??i.name;if(!E)return{item:null};let c=await f.items.findByIdOrName(t.id,E);if(!c)return{item:null};if(l.storePrivateOnly&&c.is_public)return{item:null};return{item:c}}}),us0=p({name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:C8,outputSchema:khu.object({versions:khu.array(qv)}),handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry,l=await Fp(u,t.id),E=i.id??i.name;if(!E)return{versions:[]};let c=await f.items.findByIdOrName(t.id,E);if(!c)return{versions:[]};if(l.storePrivateOnly&&c.is_public)return{versions:[]};return{versions:[c]}}}),ts0=p({name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:khu.object({}),outputSchema:jn,handler:async(i,u)=>{let t=Oi(u);await u.access.check();let f=u.storage.registry;if(!(await Fp(u,t.id)).storePrivateOnly)return f.items.getFilters(t.id);let E=await f.items.list(t.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return lg4(E.items)}})});var ls0;var Es0=O(()=>{Ga0();xa0();ja0();Ja0();Phu();Sa0();Qa0();za0();na0();Ca0();Va0();ma0();aa0();sa0();io0();to0();lo0();co0();sPi();zo0();no0();Co0();qo0();ro0();eo0();oo0();fs0();ls0=[po0,is0,us0,ts0,Ha0,Ra0,La0,qa0,ka0,Pa0,ba0,Xa0,Wa0,Ya0,Ia0,ra0,ea0,oa0,pa0,uo0,fo0,Eo0,Qo0,Ho0,Ro0,bo0,Mo0,Vo0,mo0,ao0]});import{z as Yn}from"zod";var cg4,jhu;var cs0=O(()=>{C5();fu();AR();G$();UR();cg4=Yn.enum(["agent-sandbox","user-desktop","cluster"]),jhu=p({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:Yn.object({virtualMcpId:Yn.string().describe("Virtual MCP ID that owns this VM"),branch:Yn.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:cg4.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:Yn.object({success:Yn.boolean()}),handler:async(i,u)=>{let t=q2(i.sandboxProviderKind),f;try{f=await EY0({...i,sandboxProviderKind:t},u)}catch(w){if(w instanceof Error&&w.message==="Virtual MCP not found")return{success:!0};throw w}let{entry:l,userId:E}=f;if(!l)return{success:!0};let{provider:c}=await Kv(u,{userId:E,branch:i.branch,virtualMcpMetadata:f.metadata,explicitKind:t});return await RN(u.storage.virtualMcps,i.virtualMcpId,E,E,i.branch,t),await c.delete(l.sandboxHandle).catch((w)=>console.error(`[SANDBOX_DELETE] ${t} ${l.sandboxHandle}: ${w instanceof Error?w.message:String(w)}`)),{success:!0}}})});var ws0=O(()=>{wUi();cs0()});import{z as M8}from"zod";var $g4="https://api.github.com",Xhu;var $s0=O(()=>{fu();ON();ZN();Fv();Xhu=p({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:M8.object({connectionId:M8.string().describe("ID of the mcp-github connection to use")}),outputSchema:M8.object({installations:M8.array(M8.object({installationId:M8.number(),login:M8.string(),avatarUrl:M8.string(),type:M8.string()})),appSlug:M8.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(W5(f))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let l=new r1(u.db,u.vault),E=await l.get(i.connectionId);if(!E)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let c=E.accessToken;if(Y5i(E)&&l.isExpired(E,Pa)){let D=await W5i(E,l);if(!D)throw Error(xc);c=D,E=await l.get(i.connectionId)??E}let w=[],$,h=1,v=100,d=async(D)=>fetch(`${$g4}/user/installations?per_page=${v}&page=${h}`,{headers:{Authorization:`Bearer ${D}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let D=await d(c);if(D.status===401){let N=await l.get(i.connectionId);if(!N||!Y5i(N))throw Error(xc);let Z=await W5i(N,l);if(!Z)throw Error(xc);if(c=Z,D=await d(c),D.status===401)throw Error(xc)}if(!D.ok)throw Error(`GitHub /user/installations failed: ${D.status}`);let _=await D.json();for(let N of _.installations){if(!$)$=N.app_slug??N.app?.slug;w.push({installationId:N.id,login:N.account.login,avatarUrl:N.account.avatar_url,type:N.account.type})}if(_.installations.length<v)break;h++}return{installations:w,...$?{appSlug:$}:{}}}})});var hs0=O(()=>{$s0()});import qY from"zod";var Jhu;var vs0=O(()=>{lbi();fu();Jhu=p({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:qY.object({}),outputSchema:qY.object({online:qY.boolean(),machineId:qY.string().optional(),hostname:qY.string().optional(),cliVersion:qY.string().optional(),capabilities:qY.array(wRi).default([])}),handler:async(i,u)=>{gi(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 Khu from"zod";var Yhu;var ds0=O(()=>{fu();Yhu=p({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:Khu.object({}),outputSchema:Khu.object({disconnected:Khu.boolean()}),handler:async(i,u)=>{gi(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 Ds0=O(()=>{vs0();ds0()});import{z as E6}from"zod";function _s0(i){if(!i)return"";return typeof i==="string"?i:i.toISOString()}var dg4,Dg4,_g4,Ng4,Og4,Whu;var Ns0=O(()=>{fu();dg4=["thread"],Dg4=E6.object({type:E6.literal("thread"),id:E6.string(),title:E6.string(),created_at:E6.string(),updated_at:E6.string(),virtual_mcp_id:E6.string().nullable(),run_config:E6.record(E6.string(),E6.unknown()).nullable(),status:E6.string().nullable()}),_g4=E6.discriminatedUnion("type",[Dg4]),Ng4=E6.object({query:E6.string().describe("Free-text search query. Empty string returns the most recently updated resources."),limit:E6.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:E6.array(E6.enum(dg4)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),Og4=E6.object({items:E6.array(_g4),totalCount:E6.number()});Whu=p({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:Ng4,outputSchema:Og4,handler:async(i,u)=>{await u.access.check(),Oi(u);let t=i.limit??20,f=i.types?.length?new Set(i.types):null,l=!f||f.has("thread"),E=[],c=0;if(l){let{threads:w,total:$}=await u.storage.threads.list(void 0,{limit:t,offset:0,search:i.query,includeArchived:!1});c+=$;for(let h of w)E.push({type:"thread",id:h.id,title:h.title??"",created_at:_s0(h.created_at),updated_at:_s0(h.updated_at),virtual_mcp_id:h.virtual_mcp_id??null,run_config:h.run_config??null,status:h.status??null})}return{items:E,totalCount:c}}})});var Os0=O(()=>{Ns0()});var Dhi={};Gi(Dhi,{managementMCP:()=>WR,managementContextStore:()=>DY,listManagementTools:()=>Bg4,TOOL_BY_NAME:()=>gp,CORE_TOOLS:()=>Bs0});import{z as Zs0}from"zod";async function Bg4(i){let u=await WR(i),[t,f]=Br.createLinkedPair();await u.connect(f);let l=new rl({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:K1});try{return await l.connect(t),(await l.listTools()).tools}finally{await l.close().catch(()=>{}),await u.close().catch(()=>{})}}var Bs0,gp,WR=async(i)=>{let u=new d2({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:K1});for(let l of gp.values()){let{config:E,handler:c}=LPi(l);u.registerTool(l.name,E,c)}let t=SPi();for(let l of t){let E=l.arguments?.length?Object.fromEntries(l.arguments.map((c)=>{let w=c.required?Zs0.string():Zs0.string().optional();return[c.name,c.description?w.describe(c.description):w]})):void 0;u.registerPrompt(l.name,{title:l.title,description:l.description,...E?{argsSchema:E}:{}},(c)=>{return{messages:[{role:"user",content:{type:"text",text:typeof l.text==="function"?l.text(c??{}):l.text}}]}})}if(i.organization?.id){let l=await i.storage.brandContext.list(i.organization.id),E=new Set;for(let c of l){let w=c.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),$=w?`brand-${w}`:`brand-${c.id}`;if(E.has($))$=`${$}-${c.id.slice(0,8)}`;E.add($);let h=[`# Brand: ${c.name}`,"",`**Domain:** ${c.domain}`,"","## Overview",c.overview];if(c.colors){let d=Object.entries(c.colors).filter(([,D])=>D);if(d.length>0){h.push("","## Colors");for(let[D,_]of d)h.push(`- **${D}:** ${_}`)}}if(c.fonts){let d=Object.entries(c.fonts).filter(([,D])=>D);if(d.length>0){h.push("","## Fonts");for(let[D,_]of d)h.push(`- ${_} (${D})`)}}if(c.logo)h.push("",`**Logo:** ${c.logo}`);if(c.favicon)h.push(`**Favicon:** ${c.favicon}`);if(c.ogImage)h.push(`**OG Image:** ${c.ogImage}`);if(c.images&&c.images.length>0){h.push("","## Images");for(let d of c.images){let D=Object.entries(d).map(([_,N])=>`${_}: ${N}`).join(", ");h.push(`- ${D}`)}}let v=h.join(`
|
|
86658
86658
|
`);u.prompt($,`Brand context for ${c.name}`,()=>({messages:[{role:"user",content:{type:"text",text:v}}]}))}}let f=om0();for(let l of f)u.resource(l.name,l.uri,{description:l.description,mimeType:l.mimeType??"text/markdown"},async(E)=>{return{contents:[{uri:typeof E==="string"?E:E.href,mimeType:l.mimeType??"text/markdown",text:l.text}]}});return u};var wg=O(()=>{Ld();wr();h3();U50();I50();JF0();SF0();aF0();ug0();Rg0();dG0();BG0();vS0();aS0();tL0();PL0();xL0();Im0();km0();fhu();QPi();QPi();ye0();Es0();ws0();hs0();Ds0();Os0();Bs0=[ufu,tfu,ffu,lfu,Efu,cfu,wfu,N1u,Z1u,B1u,F1u,T1u,$fu,hfu,vfu,dfu,Dfu,Nfu,Ofu,Zfu,gfu,Tfu,Ufu,Afu,yfu,Pfu,Gfu,Ifu,xfu,kfu,jfu,Xfu,Yfu,Wfu,Sfu,Lfu,Qfu,Hfu,zfu,Atu,Xtu,Jtu,Ytu,Wtu,Stu,Uoi,goi,Boi,Foi,Qtu,ztu,ntu,Ctu,qtu,WF0,atu,otu,stu,ptu,_oi,Ooi,Zoi,Noi,Tcu,Ucu,Acu,x1u,Pg,Gg,J1u,K1u,Ig,bEu,CEu,U1u,A1u,y1u,P1u,G1u,MEu,qEu,VEu,_cu,Ncu,Ocu,Zcu,Bcu,Fcu,gcu,Vtu,rtu,mtu,etu,ycu,Icu,xcu,kcu,jcu,Xcu,Jcu,Kcu,Ycu,Wcu,Scu,Lcu,Qcu,zcu,Rcu,r5u,e5u,a5u,o5u,thu,xm0,lhu,Ehu,chu,whu,$hu,hhu,...ls0,OEu,jhu,Xhu,Jhu,Yhu,Whu],gp=new Map(Bs0.map((i)=>[i.name,i]))});import{z as Fs0}from"zod";function Fg4(i){return[{permissions:{self:["*"]},getTools:async()=>{let{CORE_TOOLS:u}=await Promise.resolve().then(() => (wg(),Dhi));return u.map((t)=>{return{name:t.name,inputSchema:Fs0.toJSONSchema(t.inputSchema,{unrepresentable:"any"}),outputSchema:t.outputSchema?Fs0.toJSONSchema(t.outputSchema,{unrepresentable:"any"}):void 0,description:t.description}})},data:si0(wl(),i)},{data:oi0()},{data:ai0(i)}]}async function Shu(i,u,t){let f=m0(),l=new VD(f.db),{released:E,benefitsReferenceId:c}=await l.releaseSeat(i,u,t,{markBenefitsPending:UB()});if(!E||!c)return;try{await sD(i,c,"apply")}catch(w){console.error("Failed to enqueue benefit sync (sweep covers):",w)}}async function gs0(i,u){try{let t=m0(),f=vu();await t.db.insertInto("organization_billing").values({organization_id:i,legacy:!1}).onConflict((w)=>w.column("organization_id").doNothing()).execute();let l=new l2(f.encryptionKey),E=new KV(t.db,l),c=Fg4(i);await Promise.all(c.map(async(w)=>{let $=null;if(w.permissions)$=(await vt.api.createApiKey({body:{name:`${w.data.app_name??crypto.randomUUID()}-mcp`,userId:u,permissions:w.permissions,rateLimitEnabled:!1,metadata:{organization:{id:i},purpose:"default-org-connections"}}}))?.key;let h=await D9({id:"pending",title:w.data.title,connection_type:w.data.connection_type,connection_url:w.data.connection_url,connection_token:w.data.connection_token??$,connection_headers:w.data.connection_headers}).catch(()=>null),v=await w.getTools?.()??h?.tools??null,d=h?.scopes?.length?h.scopes:null,D=w.data.id?w.data.id.startsWith(`${i}_`)?w.data.id:`${i}_${w.data.id}`:void 0;await E.create({...w.data,id:D,tools:v,configuration_scopes:d,organization_id:i,created_by:u,connection_token:w.data.connection_token??$})}));try{await doi({orgId:i,createdBy:u})}catch(w){console.error("Failed to enqueue studio pack install:",w)}if(f.aiGatewayEnabled&&f.studioProvisionSecretKey&&kV.provisionKey)try{let w=await Hd(u),$=await kV.provisionKey(w,i);await new JV(t.db,l).upsert({providerId:"deco",label:"Auto-provisioned",apiKey:$,organizationId:i,createdBy:u})}catch(w){console.error("Failed to auto-provision Deco AI Gateway key:",w)}}catch(t){console.error("Error creating default MCP connections:",t)}}var Ts0=O(()=>{Rt();Gmi();Ml();b6();XV();xmi();Kmi();YL();qL();Or();R0();F$();W3i();_9()});async function Us0(i,u){let t=ec();if(!t)return u;let f=await m0().db.selectFrom("organization").select("slug").where("id","=",i).executeTakeFirst();if(!f?.slug)return u;return await LM({objectStorage:Vw(t,i),baseUrl:wl(),orgSlug:f.slug,prefix:"org-logos"})(u)??u}var As0=O(()=>{b6();Z_();C1i();Ml()});function gg4(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 Lhu(i){mu.identify(gg4(i,new Date))}var ys0=O(()=>{H4()});import{decodeJwt as Tg4}from"jose";import{sql as Tp}from"kysely";async function yg4(i){let{user:u,token:t}=i;if(!t?.idToken)return;let f;try{f=Tg4(t.idToken)}catch{return}let{preferred_username:l,upn:E}=f,c=[l,E].filter((h)=>typeof h==="string"&&h.length>0&&h.toLowerCase()!==u.email.toLowerCase()).map((h)=>h.toLowerCase());if(c.length===0)return;let{db:w}=m0(),$=await w.selectFrom("user").selectAll().where("email","in",c).where("id","!=",u.id).executeTakeFirst();if(!$)return;try{await w.transaction().execute(async(h)=>{await Tp`UPDATE "account" SET "userId" = ${$.id} WHERE "userId" = ${u.id}`.execute(h),await Tp`UPDATE "session" SET "userId" = ${$.id} WHERE "userId" = ${u.id}`.execute(h),await Tp`
|
|
86659
86659
|
UPDATE "member" SET "userId" = ${$.id}
|
|
86660
86660
|
WHERE "userId" = ${u.id}
|