decocms 4.113.4 → 4.114.0
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-D3NSbtte.js → AlertCircle-u3-jN7cm.js} +1 -1
- package/dist/client/assets/{AreaChart-CVVwbKz-.js → AreaChart-BW8WzRm-.js} +1 -1
- package/dist/client/assets/{ArrowRight-ByO1s01w.js → ArrowRight-mNj20Zjh.js} +1 -1
- package/dist/client/assets/{ArrowUp-Cd7BXS0r.js → ArrowUp-L9cgM-6a.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-OT_eUSGv.js → ArrowUpRight-H1UBXt5Z.js} +1 -1
- package/dist/client/assets/{Check-DexGeb34.js → Check-CaYU5aLO.js} +1 -1
- package/dist/client/assets/{CheckCircle-BHeeUcEs.js → CheckCircle-CMKcMKAK.js} +1 -1
- package/dist/client/assets/{ChevronDown-CHuNudj6.js → ChevronDown-CX9YkMBs.js} +1 -1
- package/dist/client/assets/{ChevronRight-CMzdRCrr.js → ChevronRight-DbHUX8I-.js} +1 -1
- package/dist/client/assets/{ChevronUp-lRFXwe0H.js → ChevronUp-DIB-4lf0.js} +1 -1
- package/dist/client/assets/{Copy01-uMwlKnXA.js → Copy01-CjNrDuBL.js} +1 -1
- package/dist/client/assets/{DotsVertical-BYSP2N_n.js → DotsVertical-Bp1NHhTP.js} +1 -1
- package/dist/client/assets/{Eye-BctMyF-b.js → Eye-FOTe0Dsm.js} +1 -1
- package/dist/client/assets/{FilterLines-CN2zN3dy.js → FilterLines-BZTwbbeF.js} +1 -1
- package/dist/client/assets/{Globe01-CdsyprSD.js → Globe01-DOxk62wN.js} +1 -1
- package/dist/client/assets/{Globe04-Bsu11XTy.js → Globe04-9hsl-3e6.js} +1 -1
- package/dist/client/assets/{HardDrive-BbGoyEqj.js → HardDrive-ynMUj-ia.js} +1 -1
- package/dist/client/assets/{Image01-CEPIXDUJ.js → Image01-av9S7TeF.js} +1 -1
- package/dist/client/assets/{Key01-I5rdl_Gb.js → Key01-CwuF_1BL.js} +1 -1
- package/dist/client/assets/{LayoutLeft-DUKr-FQx.js → LayoutLeft-D_cBv5Sy.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CerBDso7.js → LinkExternal01-B1nrIFqo.js} +1 -1
- package/dist/client/assets/{LogOut01-BQcYh9Ui.js → LogOut01-BZi_DqYW.js} +1 -1
- package/dist/client/assets/{Monitor01-bBKqAlRi.js → Monitor01-ymd1mMPU.js} +1 -1
- package/dist/client/assets/{Package-C1L6WXbG.js → Package-CM9ahKwn.js} +1 -1
- package/dist/client/assets/{Palette-DkA-m4II.js → Palette-Ct1p9svP.js} +1 -1
- package/dist/client/assets/{Play-D5AlhRua.js → Play-DVEIH1ry.js} +1 -1
- package/dist/client/assets/{Plus-B78kfbrH.js → Plus-B2hbLmYg.js} +1 -1
- package/dist/client/assets/{SearchLg-HLi9z3k2.js → SearchLg-CtS3seao.js} +1 -1
- package/dist/client/assets/{SearchMd-D9xCjcBT.js → SearchMd-D3MjkhDD.js} +1 -1
- package/dist/client/assets/{Settings02-D4D7dHyq.js → Settings02-BetwzLEO.js} +1 -1
- package/dist/client/assets/{Shield01-C0sINRXL.js → Shield01-BAlJAwp4.js} +1 -1
- package/dist/client/assets/{Star01-Hh5rtrm_.js → Star01-Cp-5Xhim.js} +1 -1
- package/dist/client/assets/{Stars01-BIr-9im_.js → Stars01-CvaXntTQ.js} +1 -1
- package/dist/client/assets/{Stars02-x-FNLmKd.js → Stars02-DyviDCrE.js} +1 -1
- package/dist/client/assets/{Sun-CbURsFMr.js → Sun-Y3l5BCJc.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-CI53Hh9k.js → SwitchHorizontal01-q1XlSXKm.js} +1 -1
- package/dist/client/assets/{Tool01-CrK-zdU8.js → Tool01-DiRWeEXb.js} +1 -1
- package/dist/client/assets/{Tool02-BLqj76jE.js → Tool02-aqrHyC0g.js} +1 -1
- package/dist/client/assets/{Trash01-Df4dKmk-.js → Trash01-COnrCNth.js} +1 -1
- package/dist/client/assets/{TrendUp01-CDAx5KLE.js → TrendUp01-Bn-PWo-g.js} +1 -1
- package/dist/client/assets/{Upload01-Dy7G4Vqj.js → Upload01-DGTw7Jar.js} +1 -1
- package/dist/client/assets/{User01-B00HeJ3v.js → User01-BIMIGJ25.js} +1 -1
- package/dist/client/assets/{Users01-demha86n.js → Users01-CZUvnM1S.js} +1 -1
- package/dist/client/assets/{Users03-CK3Zfb7D.js → Users03-CVsX8nJx.js} +1 -1
- package/dist/client/assets/{X-CehcuOdv.js → X-DNu2-GhF.js} +1 -1
- package/dist/client/assets/{XCircle-BaIgTqjQ.js → XCircle-C_rSb0eR.js} +1 -1
- package/dist/client/assets/{XClose-Bf6_Xwqn.js → XClose-DW-dDUEB.js} +1 -1
- package/dist/client/assets/{Zap-CqCVe0AY.js → Zap-De1_wbpV.js} +1 -1
- package/dist/client/assets/{ZapSquare-UWBEBtze.js → ZapSquare-Bp4aYGIH.js} +1 -1
- package/dist/client/assets/{ZoomOut-kGLYh1vh.js → ZoomOut-BgItYrX3.js} +1 -1
- package/dist/client/assets/{access-gate-Brf1uq7w.js → access-gate-CvPG2rlY.js} +1 -1
- package/dist/client/assets/{add-section-modal-hl41gB3e.js → add-section-modal-BA2tqrcH.js} +1 -1
- package/dist/client/assets/{agent-icon-C5hkjd9d.js → agent-icon-CtZCFShI.js} +1 -1
- package/dist/client/assets/{agents-list-DUZLZiO7.js → agents-list-j6YU2i_U.js} +1 -1
- package/dist/client/assets/{ai-providers-Ddtnde82.js → ai-providers-DLZzYNyZ.js} +1 -1
- package/dist/client/assets/{alert-C0nUQV3Z.js → alert-EAq1jY4N.js} +1 -1
- package/dist/client/assets/{alert-dialog-CoSPCPpg.js → alert-dialog-aAfJenSo.js} +1 -1
- package/dist/client/assets/{app-editor-C022NrTg.js → app-editor-az0PkUZQ.js} +1 -1
- package/dist/client/assets/{auth-catchall-B4Hu45Ne.js → auth-catchall-DBwvY4WS.js} +1 -1
- package/dist/client/assets/{auth-entry-Bd0jbgb_.js → auth-entry-BPBAWmPC.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CY08Qy2Q.js → auth-split-layout-DDWwxUG2.js} +1 -1
- package/dist/client/assets/{auth-3hywqU0Z.js → auth-uUmd_yUz.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-C97UAKVm.js → authenticate-and-persist-oauth-nQ-5iboz.js} +1 -1
- package/dist/client/assets/{automation-list-row-CzqgyFTo.js → automation-list-row-DLSYuPO0.js} +1 -1
- package/dist/client/assets/{automation-runs-BJXzFuc5.js → automation-runs-BvVxkEL_.js} +1 -1
- package/dist/client/assets/{automations-BNgdqlWi.js → automations-Dg5iM9D-.js} +1 -1
- package/dist/client/assets/{autosend-DKunmHJC.js → autosend-DNGUJUeU.js} +1 -1
- package/dist/client/assets/{avatar-bZ-OyZ4C.js → avatar-yTPDq5I2.js} +1 -1
- package/dist/client/assets/{badge-BEoEV_-s.js → badge-BYYz59-0.js} +1 -1
- package/dist/client/assets/{block-document-Bsh4SSZF.js → block-document-D_2P8u2S.js} +1 -1
- package/dist/client/assets/{brand-context-DsI_N6jC.js → brand-context-BdmZewbA.js} +1 -1
- package/dist/client/assets/{buckets-66qFPEUl.js → buckets-BalCtIX4.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-Cufz0WM3.js → bulk-category-panel-CziXKZ4f.js} +1 -1
- package/dist/client/assets/{calendar-CtwiiKBb.js → calendar-DWFDhFNo.js} +1 -1
- package/dist/client/assets/{capability-load-error-BIVVxP4I.js → capability-load-error-BVSx_lmj.js} +1 -1
- package/dist/client/assets/{card-BzIUIhXj.js → card-C3QUqs2n.js} +1 -1
- package/dist/client/assets/{category-editor-CvwKblO3.js → category-editor-yjOQrzEJ.js} +1 -1
- package/dist/client/assets/{chat-context-Crb9rWHK.js → chat-context-DZnGXN4a.js} +1 -1
- package/dist/client/assets/{checkbox-B7FxhNJt.js → checkbox-CBFK8MAq.js} +1 -1
- package/dist/client/assets/{cli-auth-success-B13-d7YS.js → cli-auth-success-2A3RVtIL.js} +1 -1
- package/dist/client/assets/{collection-detail-CEn6RIOn.js → collection-detail-Fw_SCIDN.js} +1 -1
- package/dist/client/assets/{collection-display-button-CzT8Gsvj.js → collection-display-button-CMt3Z67p.js} +1 -1
- package/dist/client/assets/{collection-search-CnQx2Rcs.js → collection-search-B9mHZ3UO.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-1UMvZ3fa.js → collection-table-wrapper-C2UsHzHD.js} +1 -1
- package/dist/client/assets/{collection-tabs-CBtRCQQL.js → collection-tabs-BDkyuUR4.js} +1 -1
- package/dist/client/assets/{command-C5gxZS1R.js → command-BPpRMP2H.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-CB-WZK2l.js → commerce-onboarding-C0k3wy77.js} +1 -1
- package/dist/client/assets/{companions-core-42eUIML2.js → companions-core-DiyBwoGG.js} +1 -1
- package/dist/client/assets/{connect-DrIqorJQ.js → connect-D2oqeqWc.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-BTzMpZn4.js → connect-desktop-dialog-DNUW6BIf.js} +1 -1
- package/dist/client/assets/{connection-card-CBIOrMcr.js → connection-card-QCEeFg-E.js} +1 -1
- package/dist/client/assets/{connection-detail-CUFaaTIx.js → connection-detail-BuvcWRak.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-51wU-tA4.js → connection-form-helpers--HrBI-cC.js} +1 -1
- package/dist/client/assets/{connections-fJWiq9na.js → connections-CWtydlE_.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-JL7UXTva.js → decopilot-sse-pool-D68vKjC2.js} +1 -1
- package/dist/client/assets/{dialog-BopH09uO.js → dialog-CrWMCat9.js} +1 -1
- package/dist/client/assets/{domain-settings-UBCepEd-.js → domain-settings-qXQKOoeU.js} +1 -1
- package/dist/client/assets/{drawer-4wGUz3NV.js → drawer-DVTkiBrG.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CqUwPgCM.js → dropdown-menu-CWVq2kdv.js} +1 -1
- package/dist/client/assets/{empty-state-DMQGyp-2.js → empty-state-BtX-gDuD.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Dg2OurD8.js → extract-connection-data-DfO_43Ui.js} +1 -1
- package/dist/client/assets/{file-explorer-Cr2rWfg3.js → file-explorer-nlzTvV0U.js} +1 -1
- package/dist/client/assets/{file-type-icon-Dq1fYczo.js → file-type-icon-Blhm8rpp.js} +1 -1
- package/dist/client/assets/{files-D11P-V12.js → files-CB-VCQ9J.js} +1 -1
- package/dist/client/assets/{form-DGbrQv7O.js → form-JvR3caoV.js} +1 -1
- package/dist/client/assets/{general-ByuqDQPP.js → general-ofhGwPwk.js} +1 -1
- package/dist/client/assets/{github-repo-picker-CsJtF4k1.js → github-repo-picker-BzqT9Pn1.js} +1 -1
- package/dist/client/assets/{hooks-Bqa3-ZMc.js → hooks-CX-tJdCi.js} +1 -1
- package/dist/client/assets/{index-MOQFWNpJ.js → index-BF9MIXYh.js} +1 -1
- package/dist/client/assets/{index-DNl9xlj2.js → index-BQKAFkvb.js} +3 -3
- package/dist/client/assets/{index-DJOz2VN0.js → index-Bl8jlw7D.js} +5 -5
- package/dist/client/assets/{index-BzpPy3wE.js → index-Bm91_nbV.js} +3 -3
- package/dist/client/assets/{index-D0ar0WVw.js → index-BuHs6OTD.js} +1 -1
- package/dist/client/assets/{index-BU5jOX-E.js → index-CZGf-QlT.js} +1 -1
- package/dist/client/assets/{index-CYhwzBFB.js → index-CdqOC8p4.js} +1 -1
- package/dist/client/assets/{index-BZ6EPALd.js → index-D8itVaOh.js} +1 -1
- package/dist/client/assets/{index-BsEzp8oj.js → index-DeAa7cPD.js} +1 -1
- package/dist/client/assets/{index-2cPeCHTJ.js → index-TgTbYxQM.js} +1 -1
- package/dist/client/assets/{index-Cfzztnsx.js → index-cM-0JEJy.js} +1 -1
- package/dist/client/assets/{index-JokIayzs.js → index-jrZjRdSI.js} +1 -1
- package/dist/client/assets/{index-D3an6z2y.js → index-k2B6oHDy.js} +1 -1
- package/dist/client/assets/{index-redirect-C8kzuGQD.js → index-redirect-pd-pFoY5.js} +1 -1
- package/dist/client/assets/{input-BgKPAcUy.js → input-CfDoPzy7.js} +1 -1
- package/dist/client/assets/{integration-icon-COAmfKM2.js → integration-icon-ChBrp2uX.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-D_2ikydr.js → invite-member-dialog-7T9uI3o5.js} +1 -1
- package/dist/client/assets/{label-Bit-k39a.js → label-Br-zNLTG.js} +1 -1
- package/dist/client/assets/{layout-bmMNsy2b.js → layout-DMOlkuOh.js} +1 -1
- package/dist/client/assets/{login-Bme8dehk.js → login-CWIddfiC.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DtUJKJBX.js → mcp-oauth-DhzxU0XK.js} +1 -1
- package/dist/client/assets/{members-BdjB5MAU.js → members-CGKVy4T3.js} +1 -1
- package/dist/client/assets/{monaco-editor-BrEGduvG.js → monaco-editor-BcwFx31f.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CNmPKGSb.js → monitoring-stats-row-DKIXNyFS.js} +1 -1
- package/dist/client/assets/{multi-select-Bu-8nHIy.js → multi-select-DwEYUWQk.js} +1 -1
- package/dist/client/assets/{oauth-callback-DVtgM464.js → oauth-callback-CRC-TNHK.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-D0dOkVqX.js → oauth-callback-ai-provider-Bn5ecNQ9.js} +1 -1
- package/dist/client/assets/{onboarding-BT0PHxMW.js → onboarding-ChQBM6P7.js} +1 -1
- package/dist/client/assets/{org-install-CVKBAdf6.js → org-install-B2VYuIrV.js} +1 -1
- package/dist/client/assets/{org-layout-Dv1Blc3Y.js → org-layout-CXw1-r8T.js} +1 -1
- package/dist/client/assets/{organization-choice-B6BWp_1y.js → organization-choice-thMPBy_H.js} +1 -1
- package/dist/client/assets/{orgs-Cy8dbVQf.js → orgs-DpewEJO4.js} +1 -1
- package/dist/client/assets/{page-seo-form-CBHtkQ-1.js → page-seo-form-Bj8agFDN.js} +1 -1
- package/dist/client/assets/page-seo-sheet-xYyduq_3.js +1 -0
- package/dist/client/assets/{popover-Bk7l46es.js → popover-PFUSi04J.js} +1 -1
- package/dist/client/assets/{post-editor-BFFD4TxR.js → post-editor-fudBfEMW.js} +1 -1
- package/dist/client/assets/{primitives-BUqBmg2w.js → primitives-CRg4BEbe.js} +1 -1
- package/dist/client/assets/{profile-_UM8G-04.js → profile-krVPqEis.js} +1 -1
- package/dist/client/assets/project-app-view-F_105CvS.js +1 -0
- package/dist/client/assets/record-editor-B9z6hPr0.js +1 -0
- package/dist/client/assets/redirect-editor-pmxNft8I.js +1 -0
- package/dist/client/assets/registry-BBaBGga3.js +2 -0
- package/dist/client/assets/{registry-layout-DZTQ7Enm.js → registry-layout-D0if0uky.js} +1 -1
- package/dist/client/assets/{reports-CogLmgwx.js → reports-DQRCq5Dl.js} +1 -1
- package/dist/client/assets/{require-capability-DAXk0d5y.js → require-capability-lUm3WxQW.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DVJ0P1R1.js → required-auth-layout-zgA3qXU6.js} +1 -1
- package/dist/client/assets/{reset-password-Ba_pBAvO.js → reset-password-d6_AkYAQ.js} +1 -1
- package/dist/client/assets/{roles-CXTr00hX.js → roles-B_zG47r7.js} +1 -1
- package/dist/client/assets/{search-input-C-UMJodP.js → search-input-Im3obJ_5.js} +1 -1
- package/dist/client/assets/{secrets-D88X3IUQ.js → secrets-DZpWBr7n.js} +1 -1
- package/dist/client/assets/{sections-editor-BFKZY_dP.js → sections-editor-D7TakwFG.js} +1 -1
- package/dist/client/assets/{select-C-jyJoDt.js → select-BDOR27tE.js} +1 -1
- package/dist/client/assets/{select-model-Dgd4xGjo.js → select-model-BRQ-V94m.js} +1 -1
- package/dist/client/assets/{self-tool-result-DPMrglQq.js → self-tool-result-VStIScqg.js} +1 -1
- package/dist/client/assets/{seo-editor-BY6DSXGz.js → seo-editor-DgKKLq5W.js} +1 -1
- package/dist/client/assets/{settings-layout-CkDQpCLh.js → settings-layout-CxNvsg8J.js} +1 -1
- package/dist/client/assets/{settings-section-6MwJAdqF.js → settings-section-BWS26hMF.js} +1 -1
- package/dist/client/assets/{shell-controls-CnX0OdDH.js → shell-controls-HSPoO0mS.js} +1 -1
- package/dist/client/assets/{shell-layout-CN7hhO1J.js → shell-layout-D_sblBCw.js} +1 -1
- package/dist/client/assets/{sidebar-C_iv7Nh9.js → sidebar-BvGzib5A.js} +1 -1
- package/dist/client/assets/{skeleton-DbS6ExIt.js → skeleton-BUe_WzkR.js} +1 -1
- package/dist/client/assets/{sso-B8CdFzAl.js → sso-dMXAkSfn.js} +1 -1
- package/dist/client/assets/{store-Bnyy1WiV.js → store-qzvEGiXH.js} +1 -1
- package/dist/client/assets/store-registry-C0M7zBzp.js +2 -0
- package/dist/client/assets/{studio-tools-IiJMHnzv.js → studio-tools-CvoMFYCt.js} +1 -1
- package/dist/client/assets/{switch-yqZ24tl_.js → switch-muGjhkBJ.js} +1 -1
- package/dist/client/assets/{table-CmSWRFMQ.js → table-BUQ1sil8.js} +1 -1
- package/dist/client/assets/{tabs-7R3MGlLI.js → tabs-DHpcGpHH.js} +1 -1
- package/dist/client/assets/{textarea-BE6VI2Sm.js → textarea-Bt_QtOk0.js} +1 -1
- package/dist/client/assets/{toggle-group-lTjODskL.js → toggle-group-CQKX4oUd.js} +1 -1
- package/dist/client/assets/{toolbar-mS39lMFz.js → toolbar-0DwtxERz.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-DysigV8P.js → toolbar-icon-button-DZhVI9-2.js} +1 -1
- package/dist/client/assets/{tooltip-CQ993dHl.js → tooltip-BigwhDSP.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CcQLY3nb.js → use-ai-providers-WKbvbsVL.js} +1 -1
- package/dist/client/assets/{use-api-keys-DJYutKrk.js → use-api-keys-Te5PgtxD.js} +1 -1
- package/dist/client/assets/{use-automations-Dhj1E9Ph.js → use-automations--GMik9NX.js} +1 -1
- package/dist/client/assets/{use-autosave-C2xapmR1.js → use-autosave-M2ceoril.js} +1 -1
- package/dist/client/assets/{use-capability-DyYemPOJ.js → use-capability-Bh8YlueK.js} +1 -1
- package/dist/client/assets/{use-clock-tick-Cy_Qdrwk.js → use-clock-tick-IRvpmO0_.js} +1 -1
- package/dist/client/assets/{use-connection-DgItAPXg.js → use-connection-COZgUeU0.js} +1 -1
- package/dist/client/assets/{use-copy-Cl4f2mnT.js → use-copy-CFyLSHsK.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Cr2zciLP.js → use-create-virtual-mcp-VVjBeALb.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DacEdb47.js → use-debounced-autosave-BxkO-_ca.js} +1 -1
- package/dist/client/assets/{use-debounced-value-COWnhTlx.js → use-debounced-value-DmIl8W6n.js} +1 -1
- package/dist/client/assets/{use-deco-credits-C258e8Gu.js → use-deco-credits-CmiQbTPM.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-C8Qld7KH.js → use-decopilot-events-O1Gk-ETR.js} +1 -1
- package/dist/client/assets/{use-delete-connection-D8xzfXPS.js → use-delete-connection-B5quwMM9.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-CUVPi201.js → use-deployment-admin-BElTs8M7.js} +1 -1
- package/dist/client/assets/{use-file-configs-BS9XBoPf.js → use-file-configs-B0d07k9Y.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CHbZVRlR.js → use-infinite-scroll-BZlKDm5N.js} +1 -1
- package/dist/client/assets/{use-join-requests-BnVp32Ft.js → use-join-requests-CZ3onEZJ.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-C_bc7znM.js → use-mcp-auth-status-BeMiAxE7.js} +1 -1
- package/dist/client/assets/{use-mcp-client-rUzkHeFC.js → use-mcp-client-CZsvR6c7.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-wZzusmBD.js → use-mcp-tools-C86d_75c.js} +1 -1
- package/dist/client/assets/{use-members-Bs4G8Gn6.js → use-members-DmoF-3Ie.js} +1 -1
- package/dist/client/assets/{use-mobile-Dfk9gz4P.js → use-mobile-BVFGUH1V.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-D_ROb12r.js → use-navigate-to-agent-CID4qRVq.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-C2bpFjJB.js → use-org-auth-client-CcOUerBq.js} +1 -1
- package/dist/client/assets/{use-org-sso-o6qtDNhz.js → use-org-sso-DK1YMh-o.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CIhMiXnm.js → use-organization-roles-DGfdPMyJ.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BN6Mbe3T.js → use-organization-settings-C8zNTcuC.js} +1 -1
- package/dist/client/assets/{use-registry-app-CdXrR-uL.js → use-registry-app-DOaPd1Kq.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DUTwru2C.js → use-registry-connections-BLLrfs0c.js} +1 -1
- package/dist/client/assets/{use-secrets-BGQjv51d.js → use-secrets-CmLaq4UW.js} +1 -1
- package/dist/client/assets/{use-status-sounds-DNfyHXSY.js → use-status-sounds-C_iNgi5N.js} +1 -1
- package/dist/client/assets/{use-view-mode-3AUQk446.js → use-view-mode-Be73RvXD.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-EXgj09hR.js → use-virtual-mcp-BGZZhgI8.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-Cdk9mXL-.js +1 -0
- package/dist/client/assets/{useQueries-BTxFVSBJ.js → useQueries-C11UDtFe.js} +1 -1
- package/dist/client/assets/{useRouterState-CSm1vh-t.js → useRouterState-B8sLgF57.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-LZ9xlW1Z.js +1 -0
- package/dist/client/assets/{users-BUKZ3ENb.js → users-B_lOVuoe.js} +1 -1
- package/dist/client/assets/{variant-calendar-BkY_wbhM.js → variant-calendar-3-o3D_Rr.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-cynxUaRv.js → view-mode-toggle-DnN-vUal.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +25 -31
- package/dist/server/server.js +25 -31
- package/package.json +1 -1
- package/dist/client/assets/page-seo-sheet-BEV8Rj_2.js +0 -1
- package/dist/client/assets/project-app-view-d8NlTW9s.js +0 -1
- package/dist/client/assets/record-editor-D87inyPk.js +0 -1
- package/dist/client/assets/redirect-editor-B5p1mIS_.js +0 -1
- package/dist/client/assets/registry-Cgy8gH4Y.js +0 -2
- package/dist/client/assets/store-registry-BSo6cvku.js +0 -2
- package/dist/client/assets/useInfiniteQuery-BuJ4N0EZ.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CnxU3y26.js +0 -1
package/dist/client/index.html
CHANGED
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
57
57
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
58
58
|
<meta name="apple-mobile-web-app-title" content="deco Studio" />
|
|
59
|
-
<script type="module" crossorigin src="/assets/index-
|
|
59
|
+
<script type="module" crossorigin src="/assets/index-BQKAFkvb.js"></script>
|
|
60
60
|
<link rel="stylesheet" crossorigin href="/assets/index-CY_ng_RT.css">
|
|
61
61
|
</head>
|
|
62
62
|
<body>
|
package/dist/server/cli.js
CHANGED
|
@@ -84795,7 +84795,7 @@ ${w}`;$(O);return}if(E(null,y),t.strategy==="count"){if(d--,d===0)$()}if(t.strat
|
|
|
84795
84795
|
`);function $(v){if(t===void 0)return!0;let n=Eq(v),_=n&&Eq(t)?Heu(t):t,D=n?Heu(v):Reu(v),N=wqt(_,D);return N===""||!N.startsWith("..")&&!cqt(N)}return{upsert(v){f.run({$handle:v.handle,$status:v.status,$sandboxPath:v.sandboxPath,$port:v.port??null,$previewUrl:v.previewUrl??null,$repoCloneUrl:v.repoCloneUrl??null,$branch:v.branch??null,$projectName:v.projectName??null,$error:v.error??null,$now:Date.now()})},list(){return l.all().map(s1i)},reconcile(){let v=Date.now();for(let n of l.all().map(s1i)){if(!$(n.sandboxPath)){c.run({$handle:n.handle,$now:v});continue}if(!Eq(n.sandboxPath)){E.run({$handle:n.handle,$now:v});continue}if(n.status==="spawning"||n.status==="ready"||n.status==="failed"||n.status==="missing")w.run({$handle:n.handle,$now:v})}return l.all().map(s1i)},prune(v){let n=[],_=[],D=this.reconcile();for(let N of D){if(!$(N.sandboxPath)){_.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(v.missing&&N.status==="missing"){d.run({$handle:N.handle}),n.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!v.merged||!Eq(N.sandboxPath))continue;if(N.branch===null||N.branch.trim()===""){_.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!F2(N.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){_.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let O=F2(N.sandboxPath,["status","--porcelain"]);if(!O.ok){_.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(O.stdout.trim()!==""){_.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let y=Ceu(N.sandboxPath,N.branch);if(y===null){_.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!y){_.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}fqt(N.sandboxPath,{recursive:!0,force:!0}),d.run({$handle:N.handle}),n.push({handle:N.handle,sandboxPath:N.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:n,skipped:_}},delete(v){d.run({$handle:v})},inspect(v){let n=h.get({$handle:v});if(n===null)return null;let _=s1i(n),D=0,N=null;if(Eq(_.sandboxPath)&&F2(_.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let O=F2(_.sandboxPath,["status","--porcelain"]);if(O.ok){let y=O.stdout.trim();D=y===""?0:y.split(`
|
|
84796
84796
|
`).length}if(_.branch!==null&&_.branch.trim()!=="")N=Ceu(_.sandboxPath,_.branch)}return{handle:_.handle,branch:_.branch,sandboxPath:_.sandboxPath,dirtyCount:D,merged:N}},close(){u.close()}}}var dbi=()=>{};function vqt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function qeu(i,u){if(process.platform==="win32")return;for(let t of vqt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var Veu=()=>{};import{existsSync as nqt,readdirSync as _qt}from"fs";import{rm as Dqt}from"fs/promises";import{join as reu}from"path";async function meu(i,u={}){let t=u.detach??gqt,f=u.exists??nqt,l=u.readdir??((w)=>_qt(w)),c=u.rm??((w)=>Dqt(w,{recursive:!0,force:!0})),E=reu(i,"org");if(f(E))for(let w of l(E))t(reu(E,w));await c(i)}var gqt=(i)=>qeu(i,process.platform==="darwin");var eeu=g(()=>{Veu()});import{join as Nqt}from"path";function aeu(i){let u=i.purge??meu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await Rl(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??Nqt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof Wc?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var oeu=g(()=>{O4();eeu()});import{randomBytes as Oqt}from"crypto";import{mkdir as yqt}from"fs/promises";import{createServer as Zqt}from"net";import{join as Tqt}from"path";function seu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function peu(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function iau(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 Bqt(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 Fqt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:Bqt(i.repo?.cloneUrl)}}function uau(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??Aqt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((D,N)=>`http://127.0.0.1:${N}`),E=(D)=>Tqt(i.dataDir,"sandboxes",D),w=(D)=>{try{i.registry?.upsert(D)}catch(N){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${D.handle} status=${D.status}:`,N)}},d=(D)=>{try{i.onEvent?.(D)}catch{}},h=async(D)=>{let N=new AbortController,O=setTimeout(()=>N.abort(),1500);try{let y=await l(`${D}/health`,{signal:N.signal});if(!y.ok)console.warn(`[user-desktop] probe ${D}/health \u2192 ${y.status} (treating as dead)`);return y.ok}catch(y){return console.warn(`[user-desktop] probe ${D}/health failed: ${y instanceof Error?y.message:String(y)} (treating as dead)`),!1}finally{clearTimeout(O)}},$=(D)=>{console.warn(`[user-desktop] evicting dead daemon handle=${D.handle} port=${D.port}`);try{D.process.kill("SIGTERM")}catch{}if(t.get(D.handle)===D)t.delete(D.handle),w({handle:D.handle,status:"stopped",sandboxPath:E(D.handle),port:null,previewUrl:null,...D.registryMetadata,error:null}),d({handle:D.handle,phase:"evicted"})},v=new Map;function n(){if(t.size<u)return;let D=[...t.values()].filter((O)=>O.activeDispatchCount===0).sort((O,y)=>O.lastUsedAt-y.lastUsedAt);if(D.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let N=D[0];console.log(`[user-desktop] evicting LRU victim handle=${N.handle} port=${N.port} (cap ${u} reached, size=${t.size})`);try{N.process.kill("SIGTERM")}catch{}t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:E(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),d({handle:N.handle,phase:"evicted"})}let _=async(D)=>{let N=Fqt(D),O=E(D.handle);w({handle:D.handle,status:"spawning",sandboxPath:O,port:null,previewUrl:null,...N,error:null}),d({handle:D.handle,phase:"spawning",sandboxPath:O,projectName:N.projectName,branch:N.branch}),n();let y,Z=null,T;try{await yqt(O,{recursive:!0}),console.log(`[user-desktop] ensure handle=${D.handle} repo=${D.repo?.cloneUrl??"(none)"} branch=${D.repo?.branch??"(none)"} runtime=${D.workload?.runtime??"(autodetect)"} pm=${D.workload?.packageManager??"(autodetect)"}`),T=Oqt(24).toString("hex");let[k,I]=await Promise.all([f(),f()]);y=k,console.log(`[user-desktop] spawn handle=${D.handle} port=${y} devPort=${I} workdir=${O}`),Z=await Promise.resolve(i.spawnDaemon({workdir:O,handle:D.handle,port:y,daemonToken:T,offloadAllowedHosts:D.offloadAllowedHosts??[],offloadAllowSameHostDev:D.offloadAllowSameHostDev??!1,orgFsConfigJson:D.orgFsConfigJson}));try{await i.waitForHealth(y)}catch(S){throw seu("the sandbox didn't come online in time",S)}console.log(`[user-desktop] healthy handle=${D.handle} port=${y} \u2014 posting config`);try{await i.postConfig(y,I,{repo:D.repo,workload:D.workload,operator:D.operator},T)}catch(S){throw seu(peu(S)?"configuration timed out":"the sandbox rejected its configuration",S)}}catch(k){if((peu(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${D.handle} port=${y??"(none)"}${Z?" (killing daemon)":""}:`,k),Z)try{Z.kill("SIGKILL")}catch{}throw d({handle:D.handle,phase:"failed",error:iau(k),sandboxPath:O,projectName:N.projectName,branch:N.branch}),w({handle:D.handle,status:"failed",sandboxPath:O,port:null,previewUrl:null,...N,error:iau(k)}),k}if(!Z||y===void 0)throw Error("sandbox bring-up invariant violated");let B=`http://127.0.0.1:${y}`,F=c(D.handle,y);console.log(`[user-desktop] ready handle=${D.handle} port=${y} sandboxApiUrl=${B} previewUrl=${F}`);let P={handle:D.handle,port:y,process:Z,sandboxApiUrl:B,previewUrl:F,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:N};if(t.set(D.handle,P),w({handle:D.handle,status:"ready",sandboxPath:O,port:y,previewUrl:F,...N,error:null}),d({handle:D.handle,phase:"ready",port:y,previewUrl:F,sandboxPath:O,projectName:N.projectName,branch:N.branch}),Z.exited)Z.exited.then(()=>{if(t.get(D.handle)===P)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${D.handle} port=${y} \u2014 removing from cache`),t.delete(D.handle),w({handle:D.handle,status:"stopped",sandboxPath:O,port:null,previewUrl:null,...N,error:null}),d({handle:D.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${D.handle} port=${y} (already replaced/removed)`)});return{sandboxApiUrl:B,previewUrl:F,port:y}};return{async ensureSandbox(D){let N=t.get(D.handle);if(N){if(await h(N.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${D.handle} port=${N.port} (alive)`),N.lastUsedAt=Date.now(),{sandboxApiUrl:N.sandboxApiUrl,previewUrl:N.previewUrl,port:N.port};console.warn(`[user-desktop] cache stale handle=${D.handle} port=${N.port} \u2014 respawning`),$(N)}let O=v.get(D.handle);if(O)return console.log(`[user-desktop] joining in-flight ensure handle=${D.handle}`),O;let y=_(D).finally(()=>{v.delete(D.handle)});return v.set(D.handle,y),y},proxyPort(D){let N=t.get(D);if(N)N.lastUsedAt=Date.now();return N?.port??null},getDaemonToken(D){return t.get(D)?.daemonToken??null},hasHandle(D){return t.has(D)||v.has(D)},recordHit(D){let N=t.get(D);if(N)N.lastUsedAt=Date.now()},acquireDispatch(D){let N=t.get(D);if(!N)return()=>{};N.activeDispatchCount+=1;let O=!1;return()=>{if(O)return;O=!0;let y=t.get(D);if(y)y.activeDispatchCount=Math.max(0,y.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(D){let N=t.get(D);if(!N){console.log(`[user-desktop] delete handle=${D} (not found, no-op)`);return}if(N.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${D} port=${N.port} REFUSED \u2014 ${N.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${D} port=${N.port}`);try{N.process.kill("SIGTERM")}catch{}t.delete(D),w({handle:D,status:"stopped",sandboxPath:E(D),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),d({handle:D,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let D of t.values())try{D.process.kill("SIGTERM")}catch{}t.clear()}}}function Aqt(){return new Promise((i,u)=>{let t=Zqt();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 tau=()=>{};import{randomUUID as Uqt}from"crypto";import{hostname as Pqt}from"os";async function fau(i){let u=Pqt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=YCu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=ici({path:p1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,w=uau({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(S,C)=>E>0?`http://${S}.localhost:${E}`:`http://127.0.0.1:${C}`,spawnDaemon:async(S)=>{let C={DAEMON_BOOT_ID:Uqt(),APP_ROOT:S.workdir,PROXY_PORT:String(S.port),DAEMON_TOKEN:S.daemonToken,OFFLOAD_ALLOWED_HOSTS:S.offloadAllowedHosts.join(","),...S.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(S.orgFsConfigJson){let Y=await HCu(i.dataDir);if(Y)C.ORGFS_CONFIG=S.orgFsConfigJson,C.ORGFS_RCLONE_PATH=Y}let X=await t({workdir:S.workdir,env:C,daemonPort:S.port});return{port:S.port,kill:(Y)=>X.kill(Y),exited:X.exited.then(()=>{return})}},postConfig:async(S,C,X,Y)=>{let r={port:C};if(X.workload)r.runtime=X.workload.runtime,r.packageManager={name:X.workload.packageManager,...X.workload.packageManagerPath?{path:X.workload.packageManagerPath}:{}};let L={application:r},ii=T$(X.operator??null);if(ii)L.operator=ii;if(X.repo)L.git={repository:{cloneUrl:X.repo.cloneUrl,branch:X.repo.branch,...X.repo.submoduleCredentials&&X.repo.submoduleCredentials.length>0?{submoduleCredentials:X.repo.submoduleCredentials}:{}},...X.repo.userName&&X.repo.userEmail?{identity:{userName:X.repo.userName,userEmail:X.repo.userEmail}}:{}};await v2(`http://127.0.0.1:${S}`,Y,L)},waitForHealth:async(S)=>{await pli(`http://127.0.0.1:${S}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),d=await keu({port:i.port,lookupSandboxPort:(S)=>w.proxyPort(S)});E=d.port,console.log(`Local ingress listening on http://127.0.0.1:${d.port} (use http://<handle>.localhost:${d.port}/)`),i.monitor?.onIngress?.(d.port);let h=bCu({provider:w}),$=async()=>{let S=await $2({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!S)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 S.accessToken},v=await zeu(i.dataDir),n=process.env.npm_package_version??"0.0.0",_=await wbi(),D=Yeu(_,{onChange:(S)=>{console.log(`[link-daemon] capabilities detected: +${S.join(",")} (now: ${_.join(",")})`)}}),N=eQi({path:`${i.dataDir}/link/outbox.sqlite`});N.clear();let O=()=>{},y=new AbortController,Z={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:$,provider:w,outbox:N,controlHandler:h,capabilities:_,machineId:v,cliVersion:n,previewPort:d.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>O(),runLifetimeSignal:y.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await Neu(Z);console.log("[link-daemon] active transport=tunnel");let B,F=new Promise((S)=>{B=S}),P=!1,k=async()=>{if(P)return;P=!0,y.abort(),console.log(`
|
|
84797
84797
|
Shutting down\u2026`),D();try{await T.close()}catch{}try{await d.stop()}catch{}try{await w.shutdown()}catch{}try{N.close()}catch{}c(),B(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),O=()=>{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"),!P)console.error("Cluster connection closed permanently; exiting."),k()});let I=aeu({provider:w,registry:f,dataDir:i.dataDir});return{stopped:F,stop:k,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(E){throw c(),E}}var lau=g(()=>{bQi();GM();LCu();RCu();CCu();aQi();Oeu();Geu();Leu();Qeu();kM();dbi();oeu();tau()});function hbi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as Iqt}from"net";async function kqt(i){for(let u of xqt)if(await $bi(i,u))return u;return null}async function cau(i,{intervalMs:u=1000}={}){for(;;){let t=await kqt(i);if(t)return t;await N0(u)}}function $bi(i,u){return new Promise((t)=>{let f=Iqt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var xqt;var vbi=g(()=>{O4();xqt=["localhost","127.0.0.1","0.0.0.0"]});function Eau(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function Gqt(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 wau(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`:","",` ${Gqt(i,u)}`].join(`
|
|
84798
|
-
`)}var nbi;var dau=g(()=>{nbi=class nbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var _Y;var uci=g(()=>{_Y={name:"decocms",version:"4.113.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/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","driver.js":"^1.8.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var wq={};ji(wq,{printBanner:()=>Xqt,bannerLines:()=>hau,BANNER_LINES:()=>tci,BANNER_GRADIENT:()=>fci});function jqt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function hau(i){let u=tci.map((t,f)=>{let[l,c,E]=jqt(fci[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Xqt(i){console.log("");for(let u of hau(i))console.log(u);console.log("")}var tci,fci;var DY=g(()=>{tci=[" \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 "],fci=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Jqt,Text as $au}from"ink";import{jsx as Kqt,jsxs as vau}from"react/jsx-runtime";function lci({version:i}){return vau(Jqt,{flexDirection:"column",marginTop:1,children:[tci.map((u,t)=>Kqt($au,{color:fci[t],children:u},t)),vau($au,{dimColor:!0,children:[" v",i]})]})}var _bi=g(()=>{DY()});function nau(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 gY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function _au(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 Dau(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 Obi={};ji(Obi,{subscribeLinkState:()=>Dbi,setSelectedHandle:()=>gbi,setRemoving:()=>wci,setPersistedSandboxes:()=>Mqt,setPendingConfirm:()=>hq,setMachine:()=>Hqt,setLogPath:()=>bqt,setLinkActions:()=>Cqt,setIngress:()=>Qqt,setDaemonError:()=>Rqt,setClusterUrl:()=>zqt,setCluster:()=>Lqt,setActionError:()=>Eci,resetLinkStateForTests:()=>Vqt,removeSandboxRow:()=>Nbi,pushSandboxEvent:()=>qqt,getLinkState:()=>dq,applySandboxEvent:()=>gau});function Yqt(i){return i==="spawning"||i==="ready"||i==="failed"}function gau(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 Nau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Wqt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Hw(){for(let i of cci)i()}function dq(){return cf}function Dbi(i){return cci.add(i),()=>cci.delete(i)}function Lqt(i){cf={...cf,cluster:i},Hw()}function zqt(i){cf={...cf,clusterUrl:i},Hw()}function Qqt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},Hw()}function Hqt(i){cf={...cf,machine:i},Hw()}function Rqt(i){cf={...cf,daemonError:i},Hw()}function bqt(i){cf={...cf,logPath:i},Hw()}function gbi(i){cf={...cf,selectedHandle:i},Hw()}function hq(i){cf={...cf,pendingConfirm:i},Hw()}function Eci(i){cf={...cf,actionError:i},Hw()}function wci(i,u){if(cf.removingHandles.has(i)===u)return;let t=new Set(cf.removingHandles);if(u)t.add(i);else t.delete(i);cf={...cf,removingHandles:t},Hw()}function Cqt(i){cf={...cf,actions:i},Hw()}function Nbi(i){let u=gY(cf.sandboxes),t=Dau(u,i,cf.selectedHandle),f=new Map(cf.sandboxes);f.delete(i);let l=new Set(cf.removingHandles);l.delete(i),cf={...cf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Hw()}function Mqt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of cf.sandboxes)if(Yqt(f.status))u.set(t,f);cf={...cf,sandboxes:u},Hw()}function qqt(i){cf={...cf,sandboxes:gau(cf.sandboxes,i)},Hw()}function Vqt(){cf=Nau(),cci.clear()}var Wqt=20,cf,cci;var $q=g(()=>{cf=Nau(),cci=new Set});import{spawn as rqt}from"child_process";function mqt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Oau(i,u=process.platform){let t=mqt(u);try{rqt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var yau=()=>{};function Zau(i,u={}){let t=u.openUrl??Oau,f=dq(),l=gY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":gbi(_au(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let w=f.sandboxes.get(c);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let w=E.inspectSandbox(c),d=f.sandboxes.get(c);Eci(null),hq({handle:c,branch:w?.branch??d?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(hq(null),w===null||!E)return;wci(w.handle,!0),E.removeSandbox(w.handle).then((d)=>{if(d.ok)Nbi(w.handle);else wci(w.handle,!1),Eci(d.error)});return}case"confirmNo":hq(null);return;case"quit":if(E)E.quit();return}}var Tau=g(()=>{$q();yau()});function Bau(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 Fau={};ji(Fau,{LinkApp:()=>sqt});import{Box as Cl,Text as v1,useInput as eqt}from"ink";import{useSyncExternalStore as aqt}from"react";import{jsx as kf,jsxs as j$}from"react/jsx-runtime";function oqt(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 sqt(){let i=aqt(Dbi,dq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=gY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return eqt((l,c)=>{let E=Bau(l,c,i.pendingConfirm!==null);if(E!==null)Zau(E)}),j$(Cl,{flexDirection:"column",children:[kf(lci,{version:_Y.version}),kf(Cl,{marginBottom:1,children:kf(v1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Cl,{children:i.cluster==="linked"?j$(v1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?j$(v1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):j$(v1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Cl,{children:i.ingressUrl?j$(v1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(v1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Cl,{marginBottom:1,children:kf(v1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(v1,{dimColor:!0,children:"No previews running yet."}):j$(Cl,{flexDirection:"column",children:[j$(Cl,{children:[kf(Cl,{width:2,flexShrink:0}),kf(Cl,{width:NY.project,flexShrink:0,marginRight:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Cl,{width:NY.branch,flexShrink:0,marginRight:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Cl,{width:NY.status,flexShrink:0,marginRight:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Cl,{flexGrow:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=oqt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return j$(Cl,{children:[kf(Cl,{width:2,flexShrink:0,children:kf(v1,{color:"cyan",children:E?"\u203A":" "})}),kf(Cl,{width:NY.project,flexShrink:0,marginRight:1,children:kf(v1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Cl,{width:NY.branch,flexShrink:0,marginRight:1,children:kf(v1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Cl,{width:NY.status,flexShrink:0,marginRight:1,children:kf(v1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Cl,{flexGrow:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Cl,{marginTop:1,children:j$(v1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Cl,{marginTop:1,children:j$(v1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Cl,{marginTop:1,children:kf(v1,{color:"yellow",children:nau(i.pendingConfirm)})}):null,i.actionError?kf(Cl,{marginTop:1,children:j$(v1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Cl,{marginTop:1,children:kf(v1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var NY;var Aau=g(()=>{uci();_bi();Tau();$q();NY={project:18,branch:22,status:14}});var Uau={};ji(Uau,{runLinkCommand:()=>EVt});import{closeSync as pqt,mkdirSync as iVt,openSync as uVt,writeSync as tVt}from"fs";import{homedir as fVt}from"os";import{join as ybi}from"path";function lVt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{tVt(u,`${hbi(l)}
|
|
84798
|
+
`)}var nbi;var dau=g(()=>{nbi=class nbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var _Y;var uci=g(()=>{_Y={name:"decocms",version:"4.114.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","@tanstack/react-virtual":"3.13.24","@tiptap/extension-text-align":"3.20.2","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","driver.js":"^1.8.0",echarts:"^5.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2","use-stick-to-bottom":"^1.1.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var wq={};ji(wq,{printBanner:()=>Xqt,bannerLines:()=>hau,BANNER_LINES:()=>tci,BANNER_GRADIENT:()=>fci});function jqt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function hau(i){let u=tci.map((t,f)=>{let[l,c,E]=jqt(fci[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function Xqt(i){console.log("");for(let u of hau(i))console.log(u);console.log("")}var tci,fci;var DY=g(()=>{tci=[" \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 "],fci=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as Jqt,Text as $au}from"ink";import{jsx as Kqt,jsxs as vau}from"react/jsx-runtime";function lci({version:i}){return vau(Jqt,{flexDirection:"column",marginTop:1,children:[tci.map((u,t)=>Kqt($au,{color:fci[t],children:u},t)),vau($au,{dimColor:!0,children:[" v",i]})]})}var _bi=g(()=>{DY()});function nau(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 gY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function _au(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 Dau(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 Obi={};ji(Obi,{subscribeLinkState:()=>Dbi,setSelectedHandle:()=>gbi,setRemoving:()=>wci,setPersistedSandboxes:()=>Mqt,setPendingConfirm:()=>hq,setMachine:()=>Hqt,setLogPath:()=>bqt,setLinkActions:()=>Cqt,setIngress:()=>Qqt,setDaemonError:()=>Rqt,setClusterUrl:()=>zqt,setCluster:()=>Lqt,setActionError:()=>Eci,resetLinkStateForTests:()=>Vqt,removeSandboxRow:()=>Nbi,pushSandboxEvent:()=>qqt,getLinkState:()=>dq,applySandboxEvent:()=>gau});function Yqt(i){return i==="spawning"||i==="ready"||i==="failed"}function gau(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 Nau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:Wqt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Hw(){for(let i of cci)i()}function dq(){return cf}function Dbi(i){return cci.add(i),()=>cci.delete(i)}function Lqt(i){cf={...cf,cluster:i},Hw()}function zqt(i){cf={...cf,clusterUrl:i},Hw()}function Qqt(i,u){cf={...cf,ingressPort:i,ingressUrl:u},Hw()}function Hqt(i){cf={...cf,machine:i},Hw()}function Rqt(i){cf={...cf,daemonError:i},Hw()}function bqt(i){cf={...cf,logPath:i},Hw()}function gbi(i){cf={...cf,selectedHandle:i},Hw()}function hq(i){cf={...cf,pendingConfirm:i},Hw()}function Eci(i){cf={...cf,actionError:i},Hw()}function wci(i,u){if(cf.removingHandles.has(i)===u)return;let t=new Set(cf.removingHandles);if(u)t.add(i);else t.delete(i);cf={...cf,removingHandles:t},Hw()}function Cqt(i){cf={...cf,actions:i},Hw()}function Nbi(i){let u=gY(cf.sandboxes),t=Dau(u,i,cf.selectedHandle),f=new Map(cf.sandboxes);f.delete(i);let l=new Set(cf.removingHandles);l.delete(i),cf={...cf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Hw()}function Mqt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of cf.sandboxes)if(Yqt(f.status))u.set(t,f);cf={...cf,sandboxes:u},Hw()}function qqt(i){cf={...cf,sandboxes:gau(cf.sandboxes,i)},Hw()}function Vqt(){cf=Nau(),cci.clear()}var Wqt=20,cf,cci;var $q=g(()=>{cf=Nau(),cci=new Set});import{spawn as rqt}from"child_process";function mqt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Oau(i,u=process.platform){let t=mqt(u);try{rqt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var yau=()=>{};function Zau(i,u={}){let t=u.openUrl??Oau,f=dq(),l=gY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":gbi(_au(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let w=f.sandboxes.get(c);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let w=E.inspectSandbox(c),d=f.sandboxes.get(c);Eci(null),hq({handle:c,branch:w?.branch??d?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(hq(null),w===null||!E)return;wci(w.handle,!0),E.removeSandbox(w.handle).then((d)=>{if(d.ok)Nbi(w.handle);else wci(w.handle,!1),Eci(d.error)});return}case"confirmNo":hq(null);return;case"quit":if(E)E.quit();return}}var Tau=g(()=>{$q();yau()});function Bau(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 Fau={};ji(Fau,{LinkApp:()=>sqt});import{Box as Cl,Text as v1,useInput as eqt}from"ink";import{useSyncExternalStore as aqt}from"react";import{jsx as kf,jsxs as j$}from"react/jsx-runtime";function oqt(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 sqt(){let i=aqt(Dbi,dq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=gY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return eqt((l,c)=>{let E=Bau(l,c,i.pendingConfirm!==null);if(E!==null)Zau(E)}),j$(Cl,{flexDirection:"column",children:[kf(lci,{version:_Y.version}),kf(Cl,{marginBottom:1,children:kf(v1,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(Cl,{children:i.cluster==="linked"?j$(v1,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?j$(v1,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):j$(v1,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(Cl,{children:i.ingressUrl?j$(v1,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(v1,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(Cl,{marginBottom:1,children:kf(v1,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(v1,{dimColor:!0,children:"No previews running yet."}):j$(Cl,{flexDirection:"column",children:[j$(Cl,{children:[kf(Cl,{width:2,flexShrink:0}),kf(Cl,{width:NY.project,flexShrink:0,marginRight:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(Cl,{width:NY.branch,flexShrink:0,marginRight:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(Cl,{width:NY.status,flexShrink:0,marginRight:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(Cl,{flexGrow:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=oqt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return j$(Cl,{children:[kf(Cl,{width:2,flexShrink:0,children:kf(v1,{color:"cyan",children:E?"\u203A":" "})}),kf(Cl,{width:NY.project,flexShrink:0,marginRight:1,children:kf(v1,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(Cl,{width:NY.branch,flexShrink:0,marginRight:1,children:kf(v1,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(Cl,{width:NY.status,flexShrink:0,marginRight:1,children:kf(v1,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(Cl,{flexGrow:1,children:kf(v1,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(Cl,{marginTop:1,children:j$(v1,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(Cl,{marginTop:1,children:j$(v1,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(Cl,{marginTop:1,children:kf(v1,{color:"yellow",children:nau(i.pendingConfirm)})}):null,i.actionError?kf(Cl,{marginTop:1,children:j$(v1,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(Cl,{marginTop:1,children:kf(v1,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var NY;var Aau=g(()=>{uci();_bi();Tau();$q();NY={project:18,branch:22,status:14}});var Uau={};ji(Uau,{runLinkCommand:()=>EVt});import{closeSync as pqt,mkdirSync as iVt,openSync as uVt,writeSync as tVt}from"fs";import{homedir as fVt}from"os";import{join as ybi}from"path";function lVt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{tVt(u,`${hbi(l)}
|
|
84799
84799
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(hbi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function cVt(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 EVt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??ybi(fVt(),"deco"),f=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,c,E,w=()=>{if(E===void 0)return;try{E.close()}catch{}finally{E=void 0}};try{if(await $bi(u,"127.0.0.1"))throw new nbi(u);let d=ybi(t,"sandboxes");E=ici({path:p1i(t),managedSandboxRoot:d});let h=await eli({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await cVt(f,h.accessToken);let $=E.reconcile();if(i.prune){let D=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${D.removed.length}, skipped ${D.skipped.length}.`);$=E.reconcile()}let v;if(i.tui){let{render:D}=await import("ink"),{createElement:N}=await import("react"),{LinkApp:O}=await Promise.resolve().then(() => (Aau(),Fau)),{pushSandboxEvent:y,setCluster:Z,setClusterUrl:T,setDaemonError:B,setIngress:F,setLogPath:P,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => ($q(),Obi));iVt(t,{recursive:!0});let S=ybi(t,"link.log");c=uVt(S,"w"),P(S),I($),T(f),Z("connecting"),v={onEvent:(C)=>y(C),onIngress:(C)=>F(C,`http://127.0.0.1:${C}`),onCluster:(C)=>Z(C),onMachine:(C)=>k(C)},l=lVt(B,c),D(N(O),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:D}=await Promise.resolve().then(() => (DY(),wq));D(i.version??"0.0.0")}w();let n=process.env.DECOCMS_LINK_MANAGED!=="1",_=await fau({port:u,clusterBaseUrl:f,dataDir:t,session:h,monitor:v,logFd:c,perSandboxLogs:n,hotReload:i.hotReload});if(i.tui){let{setLinkActions:D}=await Promise.resolve().then(() => ($q(),Obi));D({stopSandbox:_.stopSandbox,removeSandbox:_.removeSandbox,inspectSandbox:_.inspectSandbox,quit:_.stop})}return await _.stopped}catch(d){return l?.(),console.error(Eau(d)?wau(u):d instanceof Error?d.message:String(d)),1}finally{if(l?.(),c!==void 0)try{pqt(c)}catch{}w()}}var Pau=g(()=>{RQi();lau();vbi();dau();dbi()});var Ubi={};ji(Ubi,{resolveDevLinkClusterUrl:()=>$Vt,populateDevLinkToxiProxy:()=>jau,isDevLinkToxiProxyEnabled:()=>hVt,ensureDevLinkToxiProxy:()=>gVt,buildDevLinkToxiProxyConfig:()=>Gau,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>xau,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>kau});function hVt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Zbi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Gau(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=Zbi(i.apiPort,"apiPort"),f=Zbi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=Zbi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:xau,proxyName:kau,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:c,clusterUrl:E,logLine:`[dev-link-toxiproxy] ready: ${E} -> ${c}`}}function $Vt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function Tbi(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 Abi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Sau(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Sau(i.cause)}async function Bbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${Abi(l)}`,{cause:l})}}async function jau(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await Bbi(u,"reset",t,{method:"POST"});await Tbi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await Bbi(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 Tbi(c,"populate",l)}async function vVt(i,u){let t=`${i.apiUrl}/version`;try{await Rl(async()=>{let f=await Bbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(dVt)});await Tbi(f,"readiness check",t)},{maxAttempts:wVt,minTimeout:Iau,maxTimeout:Iau,multiplier:1,jitter:0,isRetriable:(f)=>!Sau(f)})}catch(f){let l=f instanceof Wc?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${Abi(l)}`,{cause:l})}}async function nVt(i){if(i===null)return"";return await new Response(i).text()}async function Fbi(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}): ${Abi(w)}`,{cause:w})}})(),[l,c]=await Promise.all([f.exited,nVt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let E=c.trim().length>0?`: ${c.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${E}`)}async function _Vt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Fbi(["rm","-f",t],{ignoreFailure:!0}),await Fbi(["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 DVt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Fbi(["rm","-f",t],{ignoreFailure:!0})}async function gVt(i){let u=Gau(i),t=i.startDaemon??_Vt,f=i.stopDaemon??(i.startDaemon===void 0?DVt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await vVt(u,l),await jau(u,l)}catch(c){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw c}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var xau="ToxiProxy",kau="dev_link_studio",wVt=20,Iau=100,dVt=100;var Pbi=g(()=>{O4()});var Xau={};ji(Xau,{migrateBetterAuth:()=>Ibi});import{getMigrations as NVt}from"better-auth/db";import{sso as OVt}from"@better-auth/sso";import{organization as yVt}from"@decocms/better-auth/plugins";import{admin as ZVt,apiKey as TVt,jwt as BVt,magicLink as FVt,mcp as AVt,openAPI as UVt}from"better-auth/plugins";import{emailOTP as PVt}from"better-auth/plugins/email-otp";async function Ibi(i){let t={database:FM(i||E2()),plugins:[yVt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),ZVt(),TVt(),BVt(),UVt(),AVt({loginPage:"/login"}),OVt(),FVt({sendMagicLink:async()=>{}}),PVt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await NVt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var xbi=g(()=>{EE()});var kbi={};ji(kbi,{up:()=>IVt,down:()=>xVt});import{sql as _5}from"kysely";async function IVt(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(_5`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(_5`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(_5`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(_5`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(_5`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(_5`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(_5`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(_5`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(_5`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(_5`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 xVt(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 Jau=()=>{};var Gbi={};ji(Gbi,{up:()=>kVt,down:()=>GVt});import{sql as Kau}from"kysely";async function kVt(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(Kau`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Kau`CURRENT_TIMESTAMP`)).execute()}async function GVt(i){await i.schema.dropTable("organization_settings").execute()}var Wau=()=>{};var Sbi={};ji(Sbi,{up:()=>SVt,down:()=>jVt});async function SVt(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 jVt(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 jbi={};ji(jbi,{up:()=>XVt,down:()=>JVt});async function XVt(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 JVt(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 Xbi={};ji(Xbi,{up:()=>KVt,down:()=>WVt});async function KVt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function WVt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Jbi={};ji(Jbi,{up:()=>LVt,down:()=>zVt});import{sql as YVt}from"kysely";async function LVt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",YVt`text`).execute()}async function zVt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Yau=()=>{};var Kbi={};ji(Kbi,{up:()=>QVt,down:()=>HVt});async function QVt(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 HVt(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var Wbi={};ji(Wbi,{up:()=>RVt,down:()=>bVt});import{sql as vq}from"kysely";async function RVt(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(vq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(vq`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(vq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(vq`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(vq`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 bVt(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 Lau=()=>{};var Ybi={};ji(Ybi,{up:()=>MVt,down:()=>qVt});import{sql as CVt}from"kysely";async function MVt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function qVt(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(CVt`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 zau=()=>{};var Lbi={};ji(Lbi,{up:()=>VVt,down:()=>rVt});import{sql as dci}from"kysely";async function VVt(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(dci`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(dci`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(dci`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 dci`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 rVt(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 Qau=()=>{};var zbi={};ji(zbi,{up:()=>mVt,down:()=>eVt});async function mVt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function eVt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var Qbi={};ji(Qbi,{up:()=>aVt,down:()=>oVt});import{sql as hci}from"kysely";async function aVt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await hci`
|
|
84800
84800
|
UPDATE gateways
|
|
84801
84801
|
SET tool_selection_mode = CASE
|
|
@@ -86095,63 +86095,57 @@ You are the Agent Manager. You create, configure, and maintain agents (Virtual M
|
|
|
86095
86095
|
d. Suggest a concrete action per flagged agent: rewrite instructions (workflow 4), narrow scope, merge with another, or delete.
|
|
86096
86096
|
e. Confirm with the user before any destructive change. Apply with COLLECTION_VIRTUAL_MCP_UPDATE or COLLECTION_VIRTUAL_MCP_DELETE.
|
|
86097
86097
|
</workflows>`,Xd0={id:"studio-agent-manager",title:"Agent Manager",icon:"icon://Bot?color=violet",description:"Create, configure, and manage agents",selectedTools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_UPDATE","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_PLUGIN_CONFIG_GET","VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE","VIRTUAL_MCP_PINNED_VIEWS_UPDATE","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET"],selectedConnections:null,selectedPrompts:[],instructions:jd0,resolveRuntime:async({orgId:i,ctx:u})=>{if(!(await u.storage.virtualMcps.list(i)).some((l)=>!Dmi(l.id)))return{instructions:zvf,selectedTools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET"]};return{instructions:jd0,selectedTools:["COLLECTION_VIRTUAL_MCP_CREATE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_UPDATE","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_PLUGIN_CONFIG_GET","VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE","VIRTUAL_MCP_PINNED_VIEWS_UPDATE","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET"]}},getId:F6.AGENT_MANAGER}});var Qvf=`<role>
|
|
86098
|
-
You are the API Key Manager. You create and manage the current user's API keys for this organization
|
|
86098
|
+
You are the API Key Manager. You create and manage the current user's API keys for this organization. You are fast and compliant: when the user says what they want, you do it \u2014 no interrogation, no lecturing, no unsolicited security commentary.
|
|
86099
86099
|
</role>
|
|
86100
86100
|
|
|
86101
86101
|
<capabilities>
|
|
86102
|
-
- Create API keys with
|
|
86102
|
+
- Create API keys with the permissions, expiration, and metadata the user asks for.
|
|
86103
86103
|
- List and audit the current user's API keys in this organization without exposing key values.
|
|
86104
86104
|
- Update key names, permissions, and metadata.
|
|
86105
|
-
- Revoke keys
|
|
86106
|
-
- Guide staged key rotation: create a replacement,
|
|
86107
|
-
- Inspect agents and connections so permissions use real target ids and tool names.
|
|
86105
|
+
- Revoke keys after a single explicit confirmation.
|
|
86106
|
+
- Guide staged key rotation when asked: create a replacement, then revoke the old key.
|
|
86107
|
+
- Inspect agents and connections so permissions can use real target ids and tool names.
|
|
86108
86108
|
</capabilities>
|
|
86109
86109
|
|
|
86110
|
+
<behavior>
|
|
86111
|
+
- Comply directly. If the user specifies what a key should do, create it \u2014 do not run a multi-question interview first.
|
|
86112
|
+
- Honor explicit requests for wildcard, full-access, or no-expiration keys. Create them exactly as asked; do not push back or repeatedly re-confirm.
|
|
86113
|
+
- Keep responses short. Do not moralize or add security warnings the user did not ask for, beyond the single inline note below.
|
|
86114
|
+
- Only ask a clarifying question when the request is genuinely ambiguous (e.g., which of two same-named connections).
|
|
86115
|
+
- Apply reversible changes (names, metadata, narrower scopes) without re-confirming.
|
|
86116
|
+
</behavior>
|
|
86117
|
+
|
|
86110
86118
|
<constraints>
|
|
86111
|
-
- API keys are capabilities: a key receives only its explicit permission allowlist; the owner's role does not widen it.
|
|
86112
86119
|
- Manage only keys returned by API_KEY_LIST. It lists the current user's keys in the current organization, not every organization's or member's keys.
|
|
86113
|
-
-
|
|
86114
|
-
- Never grant a wildcard resource or wildcard action by default. Use the smallest known tool set. If the user explicitly requests a wildcard, explain its reach and confirm it separately.
|
|
86115
|
-
- Never invent resource ids or tool names. Inspect the target with COLLECTION_VIRTUAL_MCP_LIST / GET or COLLECTION_CONNECTIONS_LIST / GET first.
|
|
86116
|
-
- When inspecting agents or connections, use only their ids and public tool metadata for permission design. Never expose or reuse connection authentication or configuration secrets.
|
|
86120
|
+
- Never invent resource ids or tool names. Inspect the target with COLLECTION_VIRTUAL_MCP_LIST / GET or COLLECTION_CONNECTIONS_LIST / GET when you need real ids.
|
|
86117
86121
|
- Never ask the user to paste an existing API key. Key values cannot be retrieved or changed after creation.
|
|
86118
|
-
-
|
|
86119
|
-
-
|
|
86120
|
-
- Always get explicit confirmation immediately before API_KEY_DELETE. Revocation is immediate and cannot be undone.
|
|
86122
|
+
- When a created key is full-access, wildcard, or has no expiration, add a single one-line inline note next to the result (e.g. "\u26A0 full access, no expiry"). One line only \u2014 not a paragraph, not a blocker, and never a reason to refuse or delay.
|
|
86123
|
+
- API_KEY_CREATE returns the key value exactly once. Print that value once in a fenced plain-text code block so the user can copy it, and don't repeat it in later prose, tables, or messages (it can't be retrieved again anyway).
|
|
86124
|
+
- Always get a single explicit confirmation immediately before API_KEY_DELETE. Revocation is immediate and cannot be undone.
|
|
86121
86125
|
- Do not modify agents or connections. They are read-only context for permission design.
|
|
86122
86126
|
</constraints>
|
|
86123
86127
|
|
|
86124
86128
|
<workflows>
|
|
86125
|
-
1. Creating a
|
|
86126
|
-
a.
|
|
86127
|
-
b.
|
|
86128
|
-
c.
|
|
86129
|
-
d. Present the proposed name, expiration, purpose, and complete permission map. Call out every wildcard. Wait for explicit confirmation.
|
|
86130
|
-
e. Convert the confirmed lifetime to expiresIn seconds and call API_KEY_CREATE.
|
|
86131
|
-
f. Print the returned key exactly once in a fenced plain-text code block, with no other content inside the block. Tell the user to copy and store it now because it cannot be retrieved later.
|
|
86129
|
+
1. Creating a key:
|
|
86130
|
+
a. If the user said what the key is for and what it needs, go straight to creation. Only inspect an agent or connection when you need its real id or tool names.
|
|
86131
|
+
b. Convert the requested lifetime to expiresIn seconds and call API_KEY_CREATE with the exact permissions requested, including wildcards or full access if explicitly asked.
|
|
86132
|
+
c. Print the returned key once in a fenced plain-text code block. If the key is full-access, wildcard, or non-expiring, add the one-line note.
|
|
86132
86133
|
|
|
86133
86134
|
2. Auditing keys:
|
|
86134
86135
|
a. Run API_KEY_LIST.
|
|
86135
86136
|
b. Report key name, created date, expiration, and permission scope without exposing secret values.
|
|
86136
|
-
c. Flag keys with no expiration, broad wildcards, unclear names, or permissions broader than their stated purpose.
|
|
86137
|
-
d. Recommend narrowing, rotation, or revocation, but do not mutate anything without confirmation.
|
|
86138
86137
|
|
|
86139
86138
|
3. Updating a key:
|
|
86140
86139
|
a. Run API_KEY_LIST and identify the exact key by id and name.
|
|
86141
|
-
b.
|
|
86142
|
-
c. Get explicit confirmation for permission expansion or metadata replacement, then call API_KEY_UPDATE.
|
|
86143
|
-
d. List again to verify the saved non-secret metadata.
|
|
86140
|
+
b. Apply the requested change with API_KEY_UPDATE. Permissions and metadata replace their previous values.
|
|
86144
86141
|
|
|
86145
86142
|
4. Revoking a key:
|
|
86146
86143
|
a. Run API_KEY_LIST and identify the exact key by id, name, scope, and expiration.
|
|
86147
|
-
b.
|
|
86148
|
-
c. Call API_KEY_DELETE, then list again to verify the key is gone.
|
|
86144
|
+
b. Get a single explicit confirmation, then call API_KEY_DELETE and list again to verify it is gone.
|
|
86149
86145
|
|
|
86150
86146
|
5. Rotating a key:
|
|
86151
86147
|
a. Run API_KEY_LIST and capture the old key's non-secret configuration.
|
|
86152
|
-
b.
|
|
86153
|
-
c. Tell the user to deploy and validate the replacement. Do not revoke the old key in the same step.
|
|
86154
|
-
d. Only after the user confirms the replacement is working, follow the revocation workflow for the old key.
|
|
86148
|
+
b. Create the replacement, then \u2014 only after the user confirms it works \u2014 revoke the old key.
|
|
86155
86149
|
</workflows>`,Kd0;var Wd0=g(()=>{Ut();Kd0={id:"studio-api-key-manager",title:"API Key Manager",icon:"icon://Key01?color=red",description:"Create, scope, audit, rotate, and revoke API keys safely",selectedTools:["API_KEY_CREATE","API_KEY_LIST","API_KEY_UPDATE","API_KEY_DELETE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET"],selectedConnections:null,selectedPrompts:[],instructions:Qvf,getId:F6.API_KEY_MANAGER}});var Hvf,Yd0;var Ld0=g(()=>{Ut();Hvf=`<role>
|
|
86156
86150
|
You are the Automation Manager. You create, configure, and manage automations \u2014 background agents that run on triggers (cron schedules or events).
|
|
86157
86151
|
</role>
|