decocms 4.122.17 → 4.123.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-CB8evxCj.js → AlertCircle-DlUb0J29.js} +1 -1
- package/dist/client/assets/{AreaChart-BkJbSKxL.js → AreaChart-CKKK1IXy.js} +1 -1
- package/dist/client/assets/{ArrowRight-CO8p41uK.js → ArrowRight-D1hlUace.js} +1 -1
- package/dist/client/assets/{ArrowUp-BR7ibBBM.js → ArrowUp-2DUrc896.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-DCLk7jvp.js → ArrowUpRight-CCdnTo5z.js} +1 -1
- package/dist/client/assets/{Check-BJGdFBNn.js → Check-D4Pc9s5H.js} +1 -1
- package/dist/client/assets/{CheckCircle-DY7mMAww.js → CheckCircle-fUZL-awt.js} +1 -1
- package/dist/client/assets/{ChevronDown-BM3t2ElG.js → ChevronDown-B-4xb6nQ.js} +1 -1
- package/dist/client/assets/{ChevronRight-BbOBdv74.js → ChevronRight-B146nbPD.js} +1 -1
- package/dist/client/assets/{ChevronUp-DIJaVIdA.js → ChevronUp-CoErHhHc.js} +1 -1
- package/dist/client/assets/{Copy01-CK5knGKp.js → Copy01-DLJCGzPS.js} +1 -1
- package/dist/client/assets/{DotsVertical-DjSsDd1c.js → DotsVertical-Dj8BekJ0.js} +1 -1
- package/dist/client/assets/{Eye-MOop_tVc.js → Eye-8YzED8lX.js} +1 -1
- package/dist/client/assets/{FilterLines-B7y-Xm3H.js → FilterLines-DBgbbUzT.js} +1 -1
- package/dist/client/assets/{Globe01-MjZa9YQB.js → Globe01-oYjNKDJP.js} +1 -1
- package/dist/client/assets/{Globe04-D1YFVFm0.js → Globe04-C_DCgHcF.js} +1 -1
- package/dist/client/assets/{HardDrive-BpTUI4uj.js → HardDrive-eDqDeZKt.js} +1 -1
- package/dist/client/assets/{Image01-CUaqY4Yc.js → Image01-CK_pzVD7.js} +1 -1
- package/dist/client/assets/{Key01-Beah7ipb.js → Key01-4bl6Lbz5.js} +1 -1
- package/dist/client/assets/{LayoutLeft-BDWKvFdm.js → LayoutLeft-DaWUjS16.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CBnNyR_B.js → LinkExternal01-qH7xz6cg.js} +1 -1
- package/dist/client/assets/{LogOut01-CCGk3BJe.js → LogOut01-BvCU9BQw.js} +1 -1
- package/dist/client/assets/{Monitor01-BWzkCpKZ.js → Monitor01-DO8roJfi.js} +1 -1
- package/dist/client/assets/{Package-VfKhd8OL.js → Package-Buih6K1G.js} +1 -1
- package/dist/client/assets/{Palette-fJxrDYyQ.js → Palette-D4rUos9W.js} +1 -1
- package/dist/client/assets/{Play-CtlyTkk4.js → Play-Btn-jh06.js} +1 -1
- package/dist/client/assets/{Plus-Dkpbqo5H.js → Plus-YV4myGhm.js} +1 -1
- package/dist/client/assets/{SearchLg-vcFnf1VB.js → SearchLg-DtJQ669m.js} +1 -1
- package/dist/client/assets/{SearchMd-AhCt2X3N.js → SearchMd-BG5Y_568.js} +1 -1
- package/dist/client/assets/{Settings02-CYPGPmRW.js → Settings02-VrNhOHMS.js} +1 -1
- package/dist/client/assets/{Shield01-DIEvsbPn.js → Shield01-DXvT93S_.js} +1 -1
- package/dist/client/assets/{Star01-DeDe4WVL.js → Star01-DCfNTBib.js} +1 -1
- package/dist/client/assets/{Stars01-ClJpZGl2.js → Stars01-CatWaARi.js} +1 -1
- package/dist/client/assets/{Stars02-CWvGrf1h.js → Stars02-DHhZyJwA.js} +1 -1
- package/dist/client/assets/{Sun-Da7W1Imy.js → Sun-VImQiMsC.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-BblfDNkm.js → SwitchHorizontal01-owwezVwA.js} +1 -1
- package/dist/client/assets/{Tool01-CKmBqyrM.js → Tool01-D1b1B0Di.js} +1 -1
- package/dist/client/assets/{Tool02-Ck4OWrK-.js → Tool02-B4SjNCRH.js} +1 -1
- package/dist/client/assets/{Trash01-DlSqNEU_.js → Trash01-CJnWtlRZ.js} +1 -1
- package/dist/client/assets/{TrendUp01-BZvwt0gw.js → TrendUp01-DlqQVTOA.js} +1 -1
- package/dist/client/assets/{Upload01-Cd7EY-Nb.js → Upload01-D3ii_SLu.js} +1 -1
- package/dist/client/assets/{User01-Bq28MeMt.js → User01-DoAGUu67.js} +1 -1
- package/dist/client/assets/{Users01-DkgZA09a.js → Users01-DubJU6qZ.js} +1 -1
- package/dist/client/assets/{Users03-B12Een7e.js → Users03-Q2OgnuV1.js} +1 -1
- package/dist/client/assets/{X-BcGjSIZB.js → X-B8wnz5OR.js} +1 -1
- package/dist/client/assets/{XCircle-1Jqnr0CU.js → XCircle-PI5qHkZH.js} +1 -1
- package/dist/client/assets/{XClose-uPAUBOai.js → XClose-zvXd1Z-O.js} +1 -1
- package/dist/client/assets/{Zap-BIvc2aJt.js → Zap-CxuZkDdj.js} +1 -1
- package/dist/client/assets/{ZapSquare-D40IZr0G.js → ZapSquare-CWSOmELu.js} +1 -1
- package/dist/client/assets/{ZoomOut-CCbAU-N1.js → ZoomOut-DbtOC-9H.js} +1 -1
- package/dist/client/assets/{access-gate-Brg_qN6j.js → access-gate-DXr5Ou05.js} +1 -1
- package/dist/client/assets/{add-section-modal-BP3KSMWa.js → add-section-modal-CbOUsjIM.js} +1 -1
- package/dist/client/assets/{agent-icon-B_0mwzFK.js → agent-icon-CwdqDl5W.js} +1 -1
- package/dist/client/assets/{agents-list-BGzAIJ6e.js → agents-list-DRXhRZfb.js} +1 -1
- package/dist/client/assets/{ai-providers-BItYXgXa.js → ai-providers-FDEMjKzt.js} +1 -1
- package/dist/client/assets/{alert-BWdKRC3P.js → alert-Cj5QfCBC.js} +1 -1
- package/dist/client/assets/{alert-dialog-JH0A2tQ8.js → alert-dialog-BzVXNhF7.js} +1 -1
- package/dist/client/assets/{app-editor-Bt72eJHZ.js → app-editor-XJcKJXX_.js} +1 -1
- package/dist/client/assets/{auth-DkKwhvvD.js → auth-Bt0CmJX9.js} +1 -1
- package/dist/client/assets/{auth-catchall-CkdYhrl8.js → auth-catchall-B9UbEwVo.js} +1 -1
- package/dist/client/assets/{auth-entry-CggMgxhe.js → auth-entry-BbVoddbj.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BuZWrYZe.js → auth-split-layout-mENc0UqV.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-Dp-AZyu5.js → authenticate-and-persist-oauth-Cap38VvM.js} +1 -1
- package/dist/client/assets/{automation-list-row-B69xhe0i.js → automation-list-row-BT2Adnuw.js} +1 -1
- package/dist/client/assets/{automation-runs-CD-vV3wL.js → automation-runs-B7Wwqf0I.js} +1 -1
- package/dist/client/assets/{automations-CLr9eVfR.js → automations-CIg8LLAu.js} +1 -1
- package/dist/client/assets/{autosend-Cgjml_20.js → autosend-BzoMjPCK.js} +1 -1
- package/dist/client/assets/{avatar-mhyLodn8.js → avatar-FwB_6Vx5.js} +1 -1
- package/dist/client/assets/{badge-B1aiNHfr.js → badge-NkMUwpVH.js} +1 -1
- package/dist/client/assets/{block-document-CIyp53iM.js → block-document-CRsNEBk-.js} +1 -1
- package/dist/client/assets/{brand-context-09-vY2au.js → brand-context-B7lQCcCS.js} +1 -1
- package/dist/client/assets/{buckets-4zftUUon.js → buckets-CDNU-6LE.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-D8nVXPqr.js → bulk-category-panel-C3389yse.js} +1 -1
- package/dist/client/assets/{calendar-CHzpzNPi.js → calendar-te50aK8e.js} +1 -1
- package/dist/client/assets/{capability-load-error-vhzQtOL5.js → capability-load-error-YX13FHDI.js} +1 -1
- package/dist/client/assets/{card-dXTumucK.js → card-lk-ifJDq.js} +1 -1
- package/dist/client/assets/{category-editor-BCz3IM0q.js → category-editor-Dj-Y9kVO.js} +1 -1
- package/dist/client/assets/{chat-context-BwIEAxyD.js → chat-context-C--r5NAp.js} +1 -1
- package/dist/client/assets/{checkbox-CBLy7_I6.js → checkbox-C_m-MvOL.js} +1 -1
- package/dist/client/assets/{cli-auth-success-BgzV86Vh.js → cli-auth-success-DX2t_KMD.js} +1 -1
- package/dist/client/assets/{collection-detail-A-QDBHWH.js → collection-detail-DlY3TQ3R.js} +1 -1
- package/dist/client/assets/{collection-display-button-vW4a8zg9.js → collection-display-button-BM6OQqW5.js} +1 -1
- package/dist/client/assets/{collection-search-ClFxGVuC.js → collection-search-KXVbCyxu.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CZGKq7G-.js → collection-table-wrapper-BOYc5-jr.js} +1 -1
- package/dist/client/assets/{collection-tabs-BPrc4KhD.js → collection-tabs-CeCpyUq5.js} +1 -1
- package/dist/client/assets/{command-BzYFLxRp.js → command-DsA7W0yR.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-1XJCmA0o.js → commerce-onboarding-DiyXfm-5.js} +1 -1
- package/dist/client/assets/{companions-core-2oUOc_h6.js → companions-core-DoaCzYlY.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-BE3Nr9Dp.js → connect-desktop-dialog-Bkr_115n.js} +1 -1
- package/dist/client/assets/{connect-D7RsLDSF.js → connect-suwzE2qW.js} +1 -1
- package/dist/client/assets/{connection-n2NWdrJz.js → connection-48rHXixt.js} +1 -1
- package/dist/client/assets/{connection-card-rqChYPtS.js → connection-card-DOil8WmL.js} +1 -1
- package/dist/client/assets/{connection-detail-BEIBGJEf.js → connection-detail-COkEZYP5.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-NzMBN5Sa.js → connection-form-helpers-CPEbOlKb.js} +1 -1
- package/dist/client/assets/{connections-CxN1PyC_.js → connections-_QUc2ocJ.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-BcbLk4a2.js → decopilot-sse-pool-YDhL1koE.js} +1 -1
- package/dist/client/assets/{dialog-8iue0RFd.js → dialog-C_8LeXF7.js} +1 -1
- package/dist/client/assets/{domain-settings-BC-Cupqc.js → domain-settings-DiHLFyy9.js} +1 -1
- package/dist/client/assets/{drawer-nHRm0CHA.js → drawer--rJ0GwmS.js} +1 -1
- package/dist/client/assets/{dropdown-menu-Dz1eHzWs.js → dropdown-menu-Nb7Swtbf.js} +1 -1
- package/dist/client/assets/{empty-state-BuU9H98_.js → empty-state-CgECUdIR.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CNtFPAgH.js → extract-connection-data-8Y9b8B7K.js} +1 -1
- package/dist/client/assets/{file-explorer-DZpb3uC-.js → file-explorer-FLk9KU7R.js} +1 -1
- package/dist/client/assets/{file-type-icon-D-uhYYdF.js → file-type-icon-CJ7Z8HL1.js} +1 -1
- package/dist/client/assets/{files-BNV3rcXZ.js → files-DFZkbjd3.js} +1 -1
- package/dist/client/assets/{form-BER8KDsb.js → form-DlgvoK65.js} +1 -1
- package/dist/client/assets/{general-C8g6LbKN.js → general-BzEZeAPj.js} +1 -1
- package/dist/client/assets/{github-repo-picker-BasUtK7v.js → github-repo-picker-2dcJnCE2.js} +1 -1
- package/dist/client/assets/{hooks-DRWVkrd7.js → hooks-C-ClFPY8.js} +1 -1
- package/dist/client/assets/{index-B7FYxZBc.js → index-9n7WBC2A.js} +1 -1
- package/dist/client/assets/{index-XO2Ms9Hq.js → index-Bg2hPYeI.js} +1 -1
- package/dist/client/assets/{index-DlMo8Z7q.js → index-BkhyqMD4.js} +4 -4
- package/dist/client/assets/{index-BCfGDChs.js → index-C1QHoHGG.js} +1 -1
- package/dist/client/assets/{index-DOsdKB09.js → index-CqXjWwOv.js} +1 -1
- package/dist/client/assets/{index-C6WB9Rqp.js → index-CsnrnosM.js} +1 -1
- package/dist/client/assets/{index-D1b6WgPO.js → index-D6zyrPkb.js} +1 -1
- package/dist/client/assets/{index-CRokVYMd.js → index-DjTSwBq1.js} +1 -1
- package/dist/client/assets/{index-vc_kdNPe.js → index-Dph846XC.js} +1 -1
- package/dist/client/assets/{index-DVEQ9Stx.js → index-Dvvp-ZL4.js} +27 -27
- package/dist/client/assets/index-MvzqRvOm.js +1 -0
- package/dist/client/assets/{index-BDvt_dt_.js → index-YUnnsZUR.js} +3 -3
- package/dist/client/assets/{index-redirect-DtoM1qrk.js → index-redirect-BSscoocT.js} +1 -1
- package/dist/client/assets/{index-BrmPFLtc.js → index-xkJnAJ1v.js} +1 -1
- package/dist/client/assets/{input-oOvbduQb.js → input-BMCXFfOH.js} +1 -1
- package/dist/client/assets/{integration-icon-43fal-Eo.js → integration-icon-hZ9nu1eP.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-DXvrysOL.js → invite-member-dialog-YrizOdFZ.js} +1 -1
- package/dist/client/assets/{label-BbFgEpCv.js → label-DkUhbKVv.js} +1 -1
- package/dist/client/assets/{layout-D7KDjv3r.js → layout-C4lXSqed.js} +1 -1
- package/dist/client/assets/{login-CaXxYjNn.js → login-A3bSEm81.js} +1 -1
- package/dist/client/assets/{mcp-oauth-D4vRs_fp.js → mcp-oauth-BEzIcmaP.js} +1 -1
- package/dist/client/assets/{members-CZ8-jL87.js → members-BNvwStLs.js} +1 -1
- package/dist/client/assets/{monaco-editor-BFZwx2Gz.js → monaco-editor-p4hcXX8t.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DSuOHa1_.js → monitoring-stats-row-D30HLMlO.js} +1 -1
- package/dist/client/assets/{multi-select-dztCo2O3.js → multi-select-ibXQebAL.js} +1 -1
- package/dist/client/assets/{oauth-callback-tzZSPt6O.js → oauth-callback-DHueVEnD.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-HQKgFzHe.js → oauth-callback-ai-provider--oGB6I06.js} +1 -1
- package/dist/client/assets/{onboarding-CypzR-dI.js → onboarding-t5mpZvO1.js} +1 -1
- package/dist/client/assets/{org-install-BrUwf22W.js → org-install-u4VBQ-Jx.js} +1 -1
- package/dist/client/assets/{org-layout-Ddb2vyOF.js → org-layout-jSSs4snb.js} +1 -1
- package/dist/client/assets/{organization-choice-CNnBW-fP.js → organization-choice-CF1cudmW.js} +1 -1
- package/dist/client/assets/{orgs-DM-JWv3x.js → orgs-20Bp_P_z.js} +1 -1
- package/dist/client/assets/{page-seo-form-Cku-MZTO.js → page-seo-form-Cu7bShEY.js} +1 -1
- package/dist/client/assets/page-seo-sheet-DP9D9HzX.js +1 -0
- package/dist/client/assets/{popover-Bcvy5_Z_.js → popover-CRcSqIBc.js} +1 -1
- package/dist/client/assets/{post-editor-DRq4TBAk.js → post-editor-CGyq0DPR.js} +1 -1
- package/dist/client/assets/{primitives-CO8CEBom.js → primitives-BW0ftLDj.js} +1 -1
- package/dist/client/assets/{profile-cf9EapuG.js → profile-BBJEeLF1.js} +1 -1
- package/dist/client/assets/project-app-view-BclZv1TN.js +1 -0
- package/dist/client/assets/record-editor-DppV9VA7.js +1 -0
- package/dist/client/assets/{redirect-editor-C4OrrHVF.js → redirect-editor-e7m5qDdy.js} +1 -1
- package/dist/client/assets/{registry-layout-BbfCH4jZ.js → registry-layout-D_N2_qf9.js} +1 -1
- package/dist/client/assets/registry-sn8XWzt2.js +2 -0
- package/dist/client/assets/{reports-CGrc5Adb.js → reports-CfDSS5YR.js} +1 -1
- package/dist/client/assets/{require-capability-BGkHtljL.js → require-capability-DNR2fRZP.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DzSqiz43.js → required-auth-layout-B7ZZh9qk.js} +1 -1
- package/dist/client/assets/{reset-password-BmeJIjxM.js → reset-password-Cvn-FYaj.js} +1 -1
- package/dist/client/assets/{roles-Blv66eNb.js → roles-CT8ngKOF.js} +1 -1
- package/dist/client/assets/{search-input-BpHujNWO.js → search-input-ByoJeb5s.js} +1 -1
- package/dist/client/assets/{secrets-D_uaXoXy.js → secrets-alXMr9GQ.js} +1 -1
- package/dist/client/assets/{sections-editor-BJVQj60u.js → sections-editor-DhMVZ84W.js} +1 -1
- package/dist/client/assets/{select-kQeatpE1.js → select-BGLnMqUE.js} +1 -1
- package/dist/client/assets/{select-model-ufrMNGsQ.js → select-model-ChhZWgXF.js} +1 -1
- package/dist/client/assets/{self-tool-result-CwOP7q6N.js → self-tool-result-C2-O98yz.js} +1 -1
- package/dist/client/assets/{seo-editor-CsMKlTHU.js → seo-editor-CONBFTvQ.js} +1 -1
- package/dist/client/assets/{settings-layout-Dsv1LDCx.js → settings-layout-CcPTF2Fd.js} +1 -1
- package/dist/client/assets/{settings-section-CuXohME-.js → settings-section-CESV8oGV.js} +1 -1
- package/dist/client/assets/{shell-controls-CiYYRW9e.js → shell-controls-BixTldyc.js} +1 -1
- package/dist/client/assets/{shell-layout-BiNIMStR.js → shell-layout-CZ4iI2QL.js} +1 -1
- package/dist/client/assets/{sidebar-B20wG8M4.js → sidebar-CgY7Y5-g.js} +1 -1
- package/dist/client/assets/{skeleton-XkxdDF4U.js → skeleton-B2Z48mAP.js} +1 -1
- package/dist/client/assets/{sso-DNI0-9Iq.js → sso-BX_BLlM4.js} +1 -1
- package/dist/client/assets/{store-FJ_Mmj5-.js → store-iq5rrJBd.js} +1 -1
- package/dist/client/assets/store-registry-C4P2yO69.js +2 -0
- package/dist/client/assets/{studio-tools-DjAKYle3.js → studio-tools-hWL04vfF.js} +1 -1
- package/dist/client/assets/{switch-Diy5_vcr.js → switch-CCd1rtz5.js} +1 -1
- package/dist/client/assets/{table-i5-y9PFx.js → table-D0yKdvEN.js} +1 -1
- package/dist/client/assets/{tabs-Dr7SeFpH.js → tabs-CrsSZstE.js} +1 -1
- package/dist/client/assets/{textarea-CDiUWJye.js → textarea-C28Z6dtH.js} +1 -1
- package/dist/client/assets/{toggle-group-1p1jlTAf.js → toggle-group-CYT0Qbna.js} +1 -1
- package/dist/client/assets/{toolbar-rdTZphgM.js → toolbar-DDS4PB_O.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-Cr1vmbGC.js → toolbar-icon-button-CMGwtm0i.js} +1 -1
- package/dist/client/assets/{tooltip-CZAVogct.js → tooltip-Wr4gthGP.js} +1 -1
- package/dist/client/assets/{use-ai-providers-ti3Lnc7f.js → use-ai-providers-GrqKCbIT.js} +1 -1
- package/dist/client/assets/{use-api-keys-BhjB9xSl.js → use-api-keys-D-7MGzc4.js} +1 -1
- package/dist/client/assets/{use-automations-CQPe4mE_.js → use-automations-hTtVC4V0.js} +1 -1
- package/dist/client/assets/{use-autosave-B7UOOx7y.js → use-autosave-8Xs2XjMc.js} +1 -1
- package/dist/client/assets/{use-capability-CWDYSpwe.js → use-capability-garYu4b8.js} +1 -1
- package/dist/client/assets/{use-clock-tick-2NNWJxjX.js → use-clock-tick-Bg-nSG-L.js} +1 -1
- package/dist/client/assets/{use-connection-CkYmKaWh.js → use-connection-jKXbqyOn.js} +1 -1
- package/dist/client/assets/{use-copy-HjWHpSIq.js → use-copy-BarzK_vr.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BC9zwwuM.js → use-create-virtual-mcp-DFEE1fS6.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-C6l_JhSt.js → use-debounced-autosave-CQY_Z99j.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BQ3--N_W.js → use-debounced-value-B_AxWgQe.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BInIg3gd.js → use-deco-credits-B45z1NDW.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-C7BMNN8V.js → use-decopilot-events-Bkfj0Jil.js} +1 -1
- package/dist/client/assets/{use-delete-connection-RYc3OSe8.js → use-delete-connection-CFbogUuz.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-wpSRBKcn.js → use-deployment-admin-spvt0kE2.js} +1 -1
- package/dist/client/assets/{use-file-configs-CpolVMXG.js → use-file-configs-CsMsmMbe.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-_7IY6uRg.js → use-infinite-scroll-QM2Uw9SY.js} +1 -1
- package/dist/client/assets/{use-join-requests-DrzmY0y2.js → use-join-requests-C3Qx6WWz.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-BxQn9wKU.js → use-mcp-auth-status-BfgxtwQU.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DFkgbF94.js → use-mcp-client-Bry12Dni.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-7XboT0O9.js → use-mcp-tools-DhovNLhJ.js} +1 -1
- package/dist/client/assets/{use-members-DkAifm3b.js → use-members-B9Q8F-X-.js} +1 -1
- package/dist/client/assets/{use-mobile-CC0d7kJB.js → use-mobile-mC7yf-Ko.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BfbMqTmz.js → use-navigate-to-agent-BjBfWHCt.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-BL0DB7JG.js → use-org-auth-client-BDrZtD3c.js} +1 -1
- package/dist/client/assets/{use-org-sso-Dubv5eqt.js → use-org-sso-BC5sLn7W.js} +1 -1
- package/dist/client/assets/{use-organization-roles-D6GgQbEs.js → use-organization-roles-B0EDTA7R.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DDoolWN1.js → use-organization-settings-BrrgMfKi.js} +1 -1
- package/dist/client/assets/{use-registry-app-0ei9ui0P.js → use-registry-app-5wjxCxuI.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DaH0FhFg.js → use-registry-connections-DNHKIrwW.js} +1 -1
- package/dist/client/assets/{use-secrets-CP1Jr6e-.js → use-secrets-DvlYY2WI.js} +1 -1
- package/dist/client/assets/{use-status-sounds-uyLoXL66.js → use-status-sounds-BNlhmXGQ.js} +1 -1
- package/dist/client/assets/{use-view-mode---7W1h7p.js → use-view-mode-Clwf0WD3.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-Dq2Q-7f0.js → use-virtual-mcp-CKNCtcz0.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DTgV9deG.js +1 -0
- package/dist/client/assets/{useQueries-GVj-Rnec.js → useQueries-Byd9MLqp.js} +1 -1
- package/dist/client/assets/{useRouterState-CtmUzuUo.js → useRouterState-BlvVAv0l.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-D0h2M_Rz.js +1 -0
- package/dist/client/assets/{users-cJMiets_.js → users-Bz6odZKU.js} +1 -1
- package/dist/client/assets/{variant-calendar-75Ho2Gi5.js → variant-calendar-Boi9z8ME.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-jH5VMOH8.js → view-mode-toggle-DCdUhKS4.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/index-UOHW-UTL.js +0 -1
- package/dist/client/assets/page-seo-sheet-DO9a4JE1.js +0 -1
- package/dist/client/assets/project-app-view-Bpx4eDIO.js +0 -1
- package/dist/client/assets/record-editor-D_EEktrY.js +0 -1
- package/dist/client/assets/registry-DJ1B-a67.js +0 -2
- package/dist/client/assets/store-registry-C1gtrThw.js +0 -2
- package/dist/client/assets/useInfiniteQuery-C081mnnD.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Cr9k7Dps.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -70886,7 +70886,7 @@ You are running in a coding workspace for this conversation.
|
|
|
70886
70886
|
\` : ""}Use the repository and working tree as the source of truth for code questions.
|
|
70887
70887
|
Before answering about implementation behavior, inspect the relevant files.
|
|
70888
70888
|
When asked to change code, edit the working tree directly and verify the result.
|
|
70889
|
-
The preview hot-reloads from the working tree, so your edits are immediately visible to the user \\u2014 that IS how a change ships in this workspace, and it is the default "done" for a change request. Opening a pull request is a
|
|
70889
|
+
The preview hot-reloads from the working tree, so your edits are immediately visible to the user \\u2014 that IS how a change ships in this workspace, and it is the default definition of "done" for a change request. Opening a pull request is a separate step that does NOT update the running preview, so by default do not open or push a PR on your own to "finish" a change. Open a PR only when this turn's instructions explicitly ask you to publish, ship, or open one.
|
|
70890
70890
|
|
|
70891
70891
|
Cite files as \\\`path:line\\\` when explaining code.
|
|
70892
70892
|
Do not re-clone the repository; it is already available in the workspace.
|
|
@@ -83070,7 +83070,7 @@ ${w}`;v(B);return}if(E(null,g),t.strategy==="count"){if($--,$===0)v()}if(t.strat
|
|
|
83070
83070
|
`);function v(d){if(t===void 0)return!0;let D=wq(d),_=D&&wq(t)?reu(t):t,N=D?reu(d):meu(d),Z=Qqt(_,N);return Z===""||!Z.startsWith("..")&&!Wqt(Z)}return{upsert(d){f.run({$handle:d.handle,$status:d.status,$sandboxPath:d.sandboxPath,$port:d.port??null,$previewUrl:d.previewUrl??null,$repoCloneUrl:d.repoCloneUrl??null,$branch:d.branch??null,$projectName:d.projectName??null,$error:d.error??null,$now:Date.now()})},list(){return l.all().map(rli)},reconcile(){let d=Date.now();for(let D of l.all().map(rli)){if(!v(D.sandboxPath)){c.run({$handle:D.handle,$now:d});continue}if(!wq(D.sandboxPath)){E.run({$handle:D.handle,$now:d});continue}if(D.status==="spawning"||D.status==="ready"||D.status==="failed"||D.status==="missing")w.run({$handle:D.handle,$now:d})}return l.all().map(rli)},prune(d){let D=[],_=[],N=this.reconcile();for(let Z of N){if(!v(Z.sandboxPath)){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(d.missing&&Z.status==="missing"){$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!d.merged||!wq(Z.sandboxPath))continue;if(Z.branch===null||Z.branch.trim()===""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!y7(Z.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let B=y7(Z.sandboxPath,["status","--porcelain"]);if(!B.ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(B.stdout.trim()!==""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let g=aeu(Z.sandboxPath,Z.branch);if(g===null){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!g){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}Sqt(Z.sandboxPath,{recursive:!0,force:!0}),$.run({$handle:Z.handle}),D.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:D,skipped:_}},delete(d){$.run({$handle:d})},inspect(d){let D=h.get({$handle:d});if(D===null)return null;let _=rli(D),N=0,Z=null;if(wq(_.sandboxPath)&&y7(_.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let B=y7(_.sandboxPath,["status","--porcelain"]);if(B.ok){let g=B.stdout.trim();N=g===""?0:g.split(`
|
|
83071
83071
|
`).length}if(_.branch!==null&&_.branch.trim()!=="")Z=aeu(_.sandboxPath,_.branch)}return{handle:_.handle,branch:_.branch,sandboxPath:_.sandboxPath,dirtyCount:N,merged:Z}},close(){u.close()}}}var Obi=()=>{};function Rqt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function seu(i,u){if(process.platform==="win32")return;for(let t of Rqt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var peu=()=>{};import{existsSync as bqt,readdirSync as Cqt}from"fs";import{rm as Mqt}from"fs/promises";import{join as iau}from"path";async function uau(i,u={}){let t=u.detach??qqt,f=u.exists??bqt,l=u.readdir??((w)=>Cqt(w)),c=u.rm??((w)=>Mqt(w,{recursive:!0,force:!0})),E=iau(i,"org");if(f(E))for(let w of l(E))t(iau(E,w));await c(i)}var qqt=(i)=>seu(i,process.platform==="darwin");var tau=O(()=>{peu()});import{join as Vqt}from"path";function fau(i){let u=i.purge??uau;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await H1(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??Vqt(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 L6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var lau=O(()=>{U4();tau()});import{randomBytes as rqt}from"crypto";import{mkdir as mqt}from"fs/promises";import{createServer as eqt}from"net";import{join as aqt}from"path";function cau(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function Eau(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function wau(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 oqt(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 sqt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:oqt(i.repo?.cloneUrl)}}function $au(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??pqt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((N,Z)=>`http://127.0.0.1:${Z}`),E=(N)=>aqt(i.dataDir,"sandboxes",N),w=(N)=>{try{i.registry?.upsert(N)}catch(Z){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${N.handle} status=${N.status}:`,Z)}},$=(N)=>{try{i.onEvent?.(N)}catch{}},h=async(N)=>{let Z=new AbortController,B=setTimeout(()=>Z.abort(),1500);try{let g=await l(`${N}/health`,{signal:Z.signal});if(!g.ok)console.warn(`[user-desktop] probe ${N}/health \u2192 ${g.status} (treating as dead)`);return g.ok}catch(g){return console.warn(`[user-desktop] probe ${N}/health failed: ${g instanceof Error?g.message:String(g)} (treating as dead)`),!1}finally{clearTimeout(B)}},v=(N)=>{console.warn(`[user-desktop] evicting dead daemon handle=${N.handle} port=${N.port}`);try{N.process.kill("SIGTERM")}catch{}if(t.get(N.handle)===N)t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:E(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),$({handle:N.handle,phase:"evicted"})},d=new Map;function D(){if(t.size<u)return;let N=[...t.values()].filter((B)=>B.activeDispatchCount===0).sort((B,g)=>B.lastUsedAt-g.lastUsedAt);if(N.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let Z=N[0];console.log(`[user-desktop] evicting LRU victim handle=${Z.handle} port=${Z.port} (cap ${u} reached, size=${t.size})`);try{Z.process.kill("SIGTERM")}catch{}t.delete(Z.handle),w({handle:Z.handle,status:"stopped",sandboxPath:E(Z.handle),port:null,previewUrl:null,...Z.registryMetadata,error:null}),$({handle:Z.handle,phase:"evicted"})}let _=async(N)=>{let Z=sqt(N),B=E(N.handle);w({handle:N.handle,status:"spawning",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"spawning",sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),D();let g,F=null,T;try{await mqt(B,{recursive:!0}),console.log(`[user-desktop] ensure handle=${N.handle} repo=${N.repo?.cloneUrl??"(none)"} branch=${N.repo?.branch??"(none)"} runtime=${N.workload?.runtime??"(autodetect)"} pm=${N.workload?.packageManager??"(autodetect)"}`),T=rqt(24).toString("hex");let[k,G]=await Promise.all([f(),f()]);g=k,console.log(`[user-desktop] spawn handle=${N.handle} port=${g} devPort=${G} workdir=${B}`),F=await Promise.resolve(i.spawnDaemon({workdir:B,handle:N.handle,port:g,daemonToken:T,offloadAllowedHosts:N.offloadAllowedHosts??[],offloadAllowSameHostDev:N.offloadAllowSameHostDev??!1,orgFsConfigJson:N.orgFsConfigJson}));try{await i.waitForHealth(g)}catch(X){throw cau("the sandbox didn't come online in time",X)}console.log(`[user-desktop] healthy handle=${N.handle} port=${g} \u2014 posting config`);try{await i.postConfig(g,G,{repo:N.repo,workload:N.workload,operator:N.operator},T)}catch(X){throw cau(Eau(X)?"configuration timed out":"the sandbox rejected its configuration",X)}}catch(k){if((Eau(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${N.handle} port=${g??"(none)"}${F?" (killing daemon)":""}:`,k),F)try{F.kill("SIGKILL")}catch{}throw $({handle:N.handle,phase:"failed",error:wau(k),sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),w({handle:N.handle,status:"failed",sandboxPath:B,port:null,previewUrl:null,...Z,error:wau(k)}),k}if(!F||g===void 0)throw Error("sandbox bring-up invariant violated");let U=`http://127.0.0.1:${g}`,A=c(N.handle,g);console.log(`[user-desktop] ready handle=${N.handle} port=${g} sandboxApiUrl=${U} previewUrl=${A}`);let I={handle:N.handle,port:g,process:F,sandboxApiUrl:U,previewUrl:A,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:Z};if(t.set(N.handle,I),w({handle:N.handle,status:"ready",sandboxPath:B,port:g,previewUrl:A,...Z,error:null}),$({handle:N.handle,phase:"ready",port:g,previewUrl:A,sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),F.exited)F.exited.then(()=>{if(t.get(N.handle)===I)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${N.handle} port=${g} \u2014 removing from cache`),t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${N.handle} port=${g} (already replaced/removed)`)});return{sandboxApiUrl:U,previewUrl:A,port:g}};return{async ensureSandbox(N){let Z=t.get(N.handle);if(Z){if(await h(Z.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${N.handle} port=${Z.port} (alive)`),Z.lastUsedAt=Date.now(),{sandboxApiUrl:Z.sandboxApiUrl,previewUrl:Z.previewUrl,port:Z.port};console.warn(`[user-desktop] cache stale handle=${N.handle} port=${Z.port} \u2014 respawning`),v(Z)}let B=d.get(N.handle);if(B)return console.log(`[user-desktop] joining in-flight ensure handle=${N.handle}`),B;let g=_(N).finally(()=>{d.delete(N.handle)});return d.set(N.handle,g),g},proxyPort(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now();return Z?.port??null},getDaemonToken(N){return t.get(N)?.daemonToken??null},hasHandle(N){return t.has(N)||d.has(N)},recordHit(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now()},acquireDispatch(N){let Z=t.get(N);if(!Z)return()=>{};Z.activeDispatchCount+=1;let B=!1;return()=>{if(B)return;B=!0;let g=t.get(N);if(g)g.activeDispatchCount=Math.max(0,g.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(N){let Z=t.get(N);if(!Z){console.log(`[user-desktop] delete handle=${N} (not found, no-op)`);return}if(Z.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${N} port=${Z.port} REFUSED \u2014 ${Z.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${N} port=${Z.port}`);try{Z.process.kill("SIGTERM")}catch{}t.delete(N),w({handle:N,status:"stopped",sandboxPath:E(N),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),$({handle:N,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let N of t.values())try{N.process.kill("SIGTERM")}catch{}t.clear()}}}function pqt(){return new Promise((i,u)=>{let t=eqt();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 hau=()=>{};import{randomUUID as iVt}from"crypto";import{hostname as uVt}from"os";async function vau(i){let u=uVt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=CCu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=eli({path:mli(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,w=$au({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(X,b)=>E>0?`http://${X}.localhost:${E}`:`http://127.0.0.1:${b}`,spawnDaemon:async(X)=>{let b={DAEMON_BOOT_ID:iVt(),APP_ROOT:X.workdir,PROXY_PORT:String(X.port),DAEMON_TOKEN:X.daemonToken,OFFLOAD_ALLOWED_HOSTS:X.offloadAllowedHosts.join(","),...X.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(X.orgFsConfigJson){let L=await rCu(i.dataDir);if(L)b.ORGFS_CONFIG=X.orgFsConfigJson,b.ORGFS_RCLONE_PATH=L}let K=await t({workdir:X.workdir,env:b,daemonPort:X.port});return{port:X.port,kill:(L)=>K.kill(L),exited:K.exited.then(()=>{return})}},postConfig:async(X,b,K,L)=>{let m={port:b};if(K.workload)m.runtime=K.workload.runtime,m.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Q={application:m},ui=B5(K.operator??null);if(ui)Q.operator=ui;if(K.repo)Q.git={repository:{cloneUrl:K.repo.cloneUrl,branch:K.repo.branch,...K.repo.submoduleCredentials&&K.repo.submoduleCredentials.length>0?{submoduleCredentials:K.repo.submoduleCredentials}:{}},...K.repo.userName&&K.repo.userEmail?{identity:{userName:K.repo.userName,userEmail:K.repo.userEmail}}:{}};await D7(`http://127.0.0.1:${X}`,L,Q)},waitForHealth:async(X)=>{await m1i(`http://127.0.0.1:${X}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),$=await Weu({port:i.port,lookupSandboxPort:(X)=>w.proxyPort(X)});E=$.port,console.log(`Local ingress listening on http://127.0.0.1:${$.port} (use http://<handle>.localhost:${$.port}/)`),i.monitor?.onIngress?.($.port);let h=eCu({provider:w}),v=async()=>{let X=await d7({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!X)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 X.accessToken},d=await qeu(i.dataDir),D=process.env.npm_package_version??"0.0.0",_=await Nbi(),N=Ceu(_,{onChange:(X)=>{console.log(`[link-daemon] capabilities detected: +${X.join(",")} (now: ${_.join(",")})`)}}),Z=tHi({path:`${i.dataDir}/link/outbox.sqlite`});Z.clear();let B=()=>{},g=new AbortController,F={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:v,provider:w,outbox:Z,controlHandler:h,capabilities:_,machineId:d,cliVersion:D,previewPort:$.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>B(),runLifetimeSignal:g.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await yeu(F);console.log("[link-daemon] active transport=tunnel");let U,A=new Promise((X)=>{U=X}),I=!1,k=async()=>{if(I)return;I=!0,g.abort(),console.log(`
|
|
83072
83072
|
Shutting down\u2026`),N();try{await T.close()}catch{}try{await $.stop()}catch{}try{await w.shutdown()}catch{}try{Z.close()}catch{}c(),U(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),B=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),k()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!I)console.error("Cluster connection closed permanently; exiting."),k()});let G=fau({provider:w,registry:f,dataDir:i.dataDir});return{stopped:A,stop:k,stopSandbox:G.stopSandbox,removeSandbox:G.removeSandbox,inspectSandbox:G.inspectSandbox}}catch(E){throw c(),E}}var dau=O(()=>{ezi();XM();MCu();mCu();aCu();fHi();Peu();Leu();Meu();Veu();jM();Obi();lau();hau()});function Zbi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as tVt}from"net";async function lVt(i){for(let u of fVt)if(await Bbi(i,u))return u;return null}async function Dau(i,{intervalMs:u=1000}={}){for(;;){let t=await lVt(i);if(t)return t;await y0(u)}}function Bbi(i,u){return new Promise((t)=>{let f=tVt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var fVt;var gbi=O(()=>{U4();fVt=["localhost","127.0.0.1","0.0.0.0"]});function _au(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function cVt(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 Nau(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`:","",` ${cVt(i,u)}`].join(`
|
|
83073
|
-
`)}var Fbi;var Oau=O(()=>{Fbi=class Fbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var NL;var ali=O(()=>{NL={name:"decocms",version:"4.122.17",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^5.9.3",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var $q={};Xi($q,{printBanner:()=>$Vt,bannerLines:()=>Zau,BANNER_LINES:()=>oli,BANNER_GRADIENT:()=>sli});function wVt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Zau(i){let u=oli.map((t,f)=>{let[l,c,E]=wVt(sli[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 $Vt(i){console.log("");for(let u of Zau(i))console.log(u);console.log("")}var oli,sli;var OL=O(()=>{oli=[" \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 "],sli=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as hVt,Text as Bau}from"ink";import{jsx as vVt,jsxs as gau}from"react/jsx-runtime";function pli({version:i}){return gau(hVt,{flexDirection:"column",marginTop:1,children:[oli.map((u,t)=>vVt(Bau,{color:sli[t],children:u},t)),gau(Bau,{dimColor:!0,children:[" v",i]})]})}var Tbi=O(()=>{OL()});function Fau(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 ZL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Tau(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 Uau(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 Pbi={};Xi(Pbi,{subscribeLinkState:()=>Ubi,setSelectedHandle:()=>Abi,setRemoving:()=>t6i,setPersistedSandboxes:()=>TVt,setPendingConfirm:()=>vq,setMachine:()=>ZVt,setLogPath:()=>gVt,setLinkActions:()=>FVt,setIngress:()=>OVt,setDaemonError:()=>BVt,setClusterUrl:()=>NVt,setCluster:()=>_Vt,setActionError:()=>u6i,resetLinkStateForTests:()=>AVt,removeSandboxRow:()=>ybi,pushSandboxEvent:()=>UVt,getLinkState:()=>hq,applySandboxEvent:()=>Aau});function DVt(i){return i==="spawning"||i==="ready"||i==="failed"}function Aau(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 yau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:dVt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Rw(){for(let i of i6i)i()}function hq(){return lf}function Ubi(i){return i6i.add(i),()=>i6i.delete(i)}function _Vt(i){lf={...lf,cluster:i},Rw()}function NVt(i){lf={...lf,clusterUrl:i},Rw()}function OVt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Rw()}function ZVt(i){lf={...lf,machine:i},Rw()}function BVt(i){lf={...lf,daemonError:i},Rw()}function gVt(i){lf={...lf,logPath:i},Rw()}function Abi(i){lf={...lf,selectedHandle:i},Rw()}function vq(i){lf={...lf,pendingConfirm:i},Rw()}function u6i(i){lf={...lf,actionError:i},Rw()}function t6i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},Rw()}function FVt(i){lf={...lf,actions:i},Rw()}function ybi(i){let u=ZL(lf.sandboxes),t=Uau(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Rw()}function TVt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of lf.sandboxes)if(DVt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Rw()}function UVt(i){lf={...lf,sandboxes:Aau(lf.sandboxes,i)},Rw()}function AVt(){lf=yau(),i6i.clear()}var dVt=20,lf,i6i;var dq=O(()=>{lf=yau(),i6i=new Set});import{spawn as yVt}from"child_process";function PVt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Pau(i,u=process.platform){let t=PVt(u);try{yVt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Iau=()=>{};function Gau(i,u={}){let t=u.openUrl??Pau,f=hq(),l=ZL(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":Abi(Tau(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),$=f.sandboxes.get(c);u6i(null),vq({handle:c,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(vq(null),w===null||!E)return;t6i(w.handle,!0),E.removeSandbox(w.handle).then(($)=>{if($.ok)ybi(w.handle);else t6i(w.handle,!1),u6i($.error)});return}case"confirmNo":vq(null);return;case"quit":if(E)E.quit();return}}var xau=O(()=>{dq();Iau()});function kau(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 jau={};Xi(jau,{LinkApp:()=>kVt});import{Box as b1,Text as hl,useInput as IVt}from"ink";import{useSyncExternalStore as GVt}from"react";import{jsx as kf,jsxs as k5}from"react/jsx-runtime";function xVt(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 kVt(){let i=GVt(Ubi,hq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=ZL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return IVt((l,c)=>{let E=kau(l,c,i.pendingConfirm!==null);if(E!==null)Gau(E)}),k5(b1,{flexDirection:"column",children:[kf(pli,{version:NL.version}),kf(b1,{marginBottom:1,children:kf(hl,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(b1,{children:i.cluster==="linked"?k5(hl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?k5(hl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):k5(hl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(b1,{children:i.ingressUrl?k5(hl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(hl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(b1,{marginBottom:1,children:kf(hl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(hl,{dimColor:!0,children:"No previews running yet."}):k5(b1,{flexDirection:"column",children:[k5(b1,{children:[kf(b1,{width:2,flexShrink:0}),kf(b1,{width:BL.project,flexShrink:0,marginRight:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(b1,{width:BL.branch,flexShrink:0,marginRight:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(b1,{width:BL.status,flexShrink:0,marginRight:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(b1,{flexGrow:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=xVt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return k5(b1,{children:[kf(b1,{width:2,flexShrink:0,children:kf(hl,{color:"cyan",children:E?"\u203A":" "})}),kf(b1,{width:BL.project,flexShrink:0,marginRight:1,children:kf(hl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(b1,{width:BL.branch,flexShrink:0,marginRight:1,children:kf(hl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(b1,{width:BL.status,flexShrink:0,marginRight:1,children:kf(hl,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(b1,{flexGrow:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(b1,{marginTop:1,children:k5(hl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(b1,{marginTop:1,children:k5(hl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(b1,{marginTop:1,children:kf(hl,{color:"yellow",children:Fau(i.pendingConfirm)})}):null,i.actionError?kf(b1,{marginTop:1,children:k5(hl,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(b1,{marginTop:1,children:kf(hl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var BL;var Xau=O(()=>{ali();Tbi();xau();dq();BL={project:18,branch:22,status:14}});var Jau={};Xi(Jau,{runLinkCommand:()=>LVt});import{closeSync as jVt,mkdirSync as XVt,openSync as JVt,writeSync as KVt}from"fs";import{homedir as SVt}from"os";import{join as Ibi}from"path";function YVt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{KVt(u,`${Zbi(l)}
|
|
83073
|
+
`)}var Fbi;var Oau=O(()=>{Fbi=class Fbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var NL;var ali=O(()=>{NL={name:"decocms",version:"4.123.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/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^5.9.3",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var $q={};Xi($q,{printBanner:()=>$Vt,bannerLines:()=>Zau,BANNER_LINES:()=>oli,BANNER_GRADIENT:()=>sli});function wVt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function Zau(i){let u=oli.map((t,f)=>{let[l,c,E]=wVt(sli[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 $Vt(i){console.log("");for(let u of Zau(i))console.log(u);console.log("")}var oli,sli;var OL=O(()=>{oli=[" \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 "],sli=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as hVt,Text as Bau}from"ink";import{jsx as vVt,jsxs as gau}from"react/jsx-runtime";function pli({version:i}){return gau(hVt,{flexDirection:"column",marginTop:1,children:[oli.map((u,t)=>vVt(Bau,{color:sli[t],children:u},t)),gau(Bau,{dimColor:!0,children:[" v",i]})]})}var Tbi=O(()=>{OL()});function Fau(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 ZL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function Tau(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 Uau(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 Pbi={};Xi(Pbi,{subscribeLinkState:()=>Ubi,setSelectedHandle:()=>Abi,setRemoving:()=>t6i,setPersistedSandboxes:()=>TVt,setPendingConfirm:()=>vq,setMachine:()=>ZVt,setLogPath:()=>gVt,setLinkActions:()=>FVt,setIngress:()=>OVt,setDaemonError:()=>BVt,setClusterUrl:()=>NVt,setCluster:()=>_Vt,setActionError:()=>u6i,resetLinkStateForTests:()=>AVt,removeSandboxRow:()=>ybi,pushSandboxEvent:()=>UVt,getLinkState:()=>hq,applySandboxEvent:()=>Aau});function DVt(i){return i==="spawning"||i==="ready"||i==="failed"}function Aau(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 yau(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:dVt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function Rw(){for(let i of i6i)i()}function hq(){return lf}function Ubi(i){return i6i.add(i),()=>i6i.delete(i)}function _Vt(i){lf={...lf,cluster:i},Rw()}function NVt(i){lf={...lf,clusterUrl:i},Rw()}function OVt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},Rw()}function ZVt(i){lf={...lf,machine:i},Rw()}function BVt(i){lf={...lf,daemonError:i},Rw()}function gVt(i){lf={...lf,logPath:i},Rw()}function Abi(i){lf={...lf,selectedHandle:i},Rw()}function vq(i){lf={...lf,pendingConfirm:i},Rw()}function u6i(i){lf={...lf,actionError:i},Rw()}function t6i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},Rw()}function FVt(i){lf={...lf,actions:i},Rw()}function ybi(i){let u=ZL(lf.sandboxes),t=Uau(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},Rw()}function TVt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of lf.sandboxes)if(DVt(f.status))u.set(t,f);lf={...lf,sandboxes:u},Rw()}function UVt(i){lf={...lf,sandboxes:Aau(lf.sandboxes,i)},Rw()}function AVt(){lf=yau(),i6i.clear()}var dVt=20,lf,i6i;var dq=O(()=>{lf=yau(),i6i=new Set});import{spawn as yVt}from"child_process";function PVt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Pau(i,u=process.platform){let t=PVt(u);try{yVt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Iau=()=>{};function Gau(i,u={}){let t=u.openUrl??Pau,f=hq(),l=ZL(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":Abi(Tau(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),$=f.sandboxes.get(c);u6i(null),vq({handle:c,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(vq(null),w===null||!E)return;t6i(w.handle,!0),E.removeSandbox(w.handle).then(($)=>{if($.ok)ybi(w.handle);else t6i(w.handle,!1),u6i($.error)});return}case"confirmNo":vq(null);return;case"quit":if(E)E.quit();return}}var xau=O(()=>{dq();Iau()});function kau(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 jau={};Xi(jau,{LinkApp:()=>kVt});import{Box as b1,Text as hl,useInput as IVt}from"ink";import{useSyncExternalStore as GVt}from"react";import{jsx as kf,jsxs as k5}from"react/jsx-runtime";function xVt(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 kVt(){let i=GVt(Ubi,hq),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=ZL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return IVt((l,c)=>{let E=kau(l,c,i.pendingConfirm!==null);if(E!==null)Gau(E)}),k5(b1,{flexDirection:"column",children:[kf(pli,{version:NL.version}),kf(b1,{marginBottom:1,children:kf(hl,{dimColor:!0,children:"\u2500".repeat(80)})}),kf(b1,{children:i.cluster==="linked"?k5(hl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?k5(hl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):k5(hl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),kf(b1,{children:i.ingressUrl?k5(hl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):kf(hl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),kf(b1,{marginBottom:1,children:kf(hl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?kf(hl,{dimColor:!0,children:"No previews running yet."}):k5(b1,{flexDirection:"column",children:[k5(b1,{children:[kf(b1,{width:2,flexShrink:0}),kf(b1,{width:BL.project,flexShrink:0,marginRight:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),kf(b1,{width:BL.branch,flexShrink:0,marginRight:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),kf(b1,{width:BL.status,flexShrink:0,marginRight:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),kf(b1,{flexGrow:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=xVt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return k5(b1,{children:[kf(b1,{width:2,flexShrink:0,children:kf(hl,{color:"cyan",children:E?"\u203A":" "})}),kf(b1,{width:BL.project,flexShrink:0,marginRight:1,children:kf(hl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),kf(b1,{width:BL.branch,flexShrink:0,marginRight:1,children:kf(hl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),kf(b1,{width:BL.status,flexShrink:0,marginRight:1,children:kf(hl,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),kf(b1,{flexGrow:1,children:kf(hl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?kf(b1,{marginTop:1,children:k5(hl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?kf(b1,{marginTop:1,children:k5(hl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?kf(b1,{marginTop:1,children:kf(hl,{color:"yellow",children:Fau(i.pendingConfirm)})}):null,i.actionError?kf(b1,{marginTop:1,children:k5(hl,{color:"red",children:["\u2717 ",i.actionError]})}):null,kf(b1,{marginTop:1,children:kf(hl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var BL;var Xau=O(()=>{ali();Tbi();xau();dq();BL={project:18,branch:22,status:14}});var Jau={};Xi(Jau,{runLinkCommand:()=>LVt});import{closeSync as jVt,mkdirSync as XVt,openSync as JVt,writeSync as KVt}from"fs";import{homedir as SVt}from"os";import{join as Ibi}from"path";function YVt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{KVt(u,`${Zbi(l)}
|
|
83074
83074
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(Zbi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function WVt(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 LVt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??Ibi(SVt(),"deco"),f=i.clusterBaseUrl??process.env.STUDIO_CLUSTER_URL??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 Bbi(u,"127.0.0.1"))throw new Fbi(u);let $=Ibi(t,"sandboxes");E=eli({path:mli(t),managedSandboxRoot:$});let h=await M1i({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await WVt(f,h.accessToken);let v=E.reconcile();if(i.prune){let N=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${N.removed.length}, skipped ${N.skipped.length}.`);v=E.reconcile()}let d;if(i.tui){let{render:N}=await import("ink"),{createElement:Z}=await import("react"),{LinkApp:B}=await Promise.resolve().then(() => (Xau(),jau)),{pushSandboxEvent:g,setCluster:F,setClusterUrl:T,setDaemonError:U,setIngress:A,setLogPath:I,setMachine:k,setPersistedSandboxes:G}=await Promise.resolve().then(() => (dq(),Pbi));XVt(t,{recursive:!0});let X=Ibi(t,"link.log");c=JVt(X,"w"),I(X),G(v),T(f),F("connecting"),d={onEvent:(b)=>g(b),onIngress:(b)=>A(b,`http://127.0.0.1:${b}`),onCluster:(b)=>F(b),onMachine:(b)=>k(b)},l=YVt(U,c),N(Z(B),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:N}=await Promise.resolve().then(() => (OL(),$q));N(i.version??"0.0.0")}w();let D=process.env.DECOCMS_LINK_MANAGED!=="1",_=await vau({port:u,clusterBaseUrl:f,dataDir:t,session:h,monitor:d,logFd:c,perSandboxLogs:D,hotReload:i.hotReload});if(i.tui){let{setLinkActions:N}=await Promise.resolve().then(() => (dq(),Pbi));N({stopSandbox:_.stopSandbox,removeSandbox:_.removeSandbox,inspectSandbox:_.inspectSandbox,quit:_.stop})}return await _.stopped}catch($){return l?.(),console.error(_au($)?Nau(u):$ instanceof Error?$.message:String($)),1}finally{if(l?.(),c!==void 0)try{jVt(c)}catch{}w()}}var Kau=O(()=>{mzi();dau();gbi();Oau();Obi()});var Jbi={};Xi(Jbi,{resolveDevLinkClusterUrl:()=>HVt,populateDevLinkToxiProxy:()=>nau,isDevLinkToxiProxyEnabled:()=>zVt,ensureDevLinkToxiProxy:()=>qVt,buildDevLinkToxiProxyConfig:()=>Lau,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Yau,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Wau});function zVt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Gbi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Lau(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=Gbi(i.apiPort,"apiPort"),f=Gbi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=Gbi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Yau,proxyName:Wau,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 HVt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function xbi(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 Xbi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Qau(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Qau(i.cause)}async function kbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${Xbi(l)}`,{cause:l})}}async function nau(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await kbi(u,"reset",t,{method:"POST"});await xbi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await kbi(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 xbi(c,"populate",l)}async function RVt(i,u){let t=`${i.apiUrl}/version`;try{await H1(async()=>{let f=await kbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(nVt)});await xbi(f,"readiness check",t)},{maxAttempts:QVt,minTimeout:Sau,maxTimeout:Sau,multiplier:1,jitter:0,isRetriable:(f)=>!Qau(f)})}catch(f){let l=f instanceof L6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${Xbi(l)}`,{cause:l})}}async function bVt(i){if(i===null)return"";return await new Response(i).text()}async function jbi(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}): ${Xbi(w)}`,{cause:w})}})(),[l,c]=await Promise.all([f.exited,bVt(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 CVt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await jbi(["rm","-f",t],{ignoreFailure:!0}),await jbi(["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 MVt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await jbi(["rm","-f",t],{ignoreFailure:!0})}async function qVt(i){let u=Lau(i),t=i.startDaemon??CVt,f=i.stopDaemon??(i.startDaemon===void 0?MVt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await RVt(u,l),await nau(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 Yau="ToxiProxy",Wau="dev_link_studio",QVt=20,Sau=100,nVt=100;var Kbi=O(()=>{U4()});var zau={};Xi(zau,{migrateBetterAuth:()=>Sbi});import{getMigrations as VVt}from"better-auth/db";import{sso as rVt}from"@better-auth/sso";import{organization as mVt}from"@decocms/better-auth/plugins";import{admin as eVt,apiKey as aVt,jwt as oVt,magicLink as sVt,mcp as pVt,openAPI as irt}from"better-auth/plugins";import{emailOTP as urt}from"better-auth/plugins/email-otp";async function Sbi(i){let t={database:yM(i||w7()),plugins:[mVt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),eVt(),aVt(),oVt(),irt(),pVt({loginPage:"/login"}),rVt(),sVt({sendMagicLink:async()=>{}}),urt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await VVt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var Ybi=O(()=>{H6()});var Wbi={};Xi(Wbi,{up:()=>trt,down:()=>frt});import{sql as hd}from"kysely";async function trt(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(hd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(hd`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(hd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(hd`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(hd`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(hd`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(hd`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(hd`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(hd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(hd`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 frt(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 Hau=()=>{};var Lbi={};Xi(Lbi,{up:()=>lrt,down:()=>crt});import{sql as Rau}from"kysely";async function lrt(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(Rau`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Rau`CURRENT_TIMESTAMP`)).execute()}async function crt(i){await i.schema.dropTable("organization_settings").execute()}var bau=()=>{};var Qbi={};Xi(Qbi,{up:()=>Ert,down:()=>wrt});async function Ert(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 wrt(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 nbi={};Xi(nbi,{up:()=>$rt,down:()=>hrt});async function $rt(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 hrt(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 zbi={};Xi(zbi,{up:()=>vrt,down:()=>drt});async function vrt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function drt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var Hbi={};Xi(Hbi,{up:()=>_rt,down:()=>Nrt});import{sql as Drt}from"kysely";async function _rt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",Drt`text`).execute()}async function Nrt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Cau=()=>{};var Rbi={};Xi(Rbi,{up:()=>Ort,down:()=>Zrt});async function Ort(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 Zrt(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 bbi={};Xi(bbi,{up:()=>Brt,down:()=>grt});import{sql as Dq}from"kysely";async function Brt(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(Dq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Dq`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(Dq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Dq`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(Dq`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 grt(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 Mau=()=>{};var Cbi={};Xi(Cbi,{up:()=>Trt,down:()=>Urt});import{sql as Frt}from"kysely";async function Trt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Urt(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(Frt`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 qau=()=>{};var Mbi={};Xi(Mbi,{up:()=>Art,down:()=>yrt});import{sql as f6i}from"kysely";async function Art(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(f6i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(f6i`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(f6i`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 f6i`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 yrt(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 Vau=()=>{};var qbi={};Xi(qbi,{up:()=>Prt,down:()=>Irt});async function Prt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function Irt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var Vbi={};Xi(Vbi,{up:()=>Grt,down:()=>xrt});import{sql as l6i}from"kysely";async function Grt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await l6i`
|
|
83075
83075
|
UPDATE gateways
|
|
83076
83076
|
SET tool_selection_mode = CASE
|
|
@@ -85333,7 +85333,7 @@ ${f.join(`
|
|
|
85333
85333
|
`:""}Use the repository and working tree as the source of truth for code questions.
|
|
85334
85334
|
Before answering about implementation behavior, inspect the relevant files.
|
|
85335
85335
|
When asked to change code, edit the working tree directly and verify the result.
|
|
85336
|
-
The preview hot-reloads from the working tree, so your edits are immediately visible to the user \u2014 that IS how a change ships in this workspace, and it is the default "done" for a change request. Opening a pull request is a
|
|
85336
|
+
The preview hot-reloads from the working tree, so your edits are immediately visible to the user \u2014 that IS how a change ships in this workspace, and it is the default definition of "done" for a change request. Opening a pull request is a separate step that does NOT update the running preview, so by default do not open or push a PR on your own to "finish" a change. Open a PR only when this turn's instructions explicitly ask you to publish, ship, or open one.
|
|
85337
85337
|
|
|
85338
85338
|
Cite files as \`path:line\` when explaining code.
|
|
85339
85339
|
Do not re-clone the repository; it is already available in the workspace.
|