decocms 4.122.16 → 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-BlyXiPIP.js → AlertCircle-DlUb0J29.js} +1 -1
- package/dist/client/assets/{AreaChart-BbYh8oAQ.js → AreaChart-CKKK1IXy.js} +1 -1
- package/dist/client/assets/{ArrowRight-BCV_Gw23.js → ArrowRight-D1hlUace.js} +1 -1
- package/dist/client/assets/{ArrowUp-IsMGHY_X.js → ArrowUp-2DUrc896.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-Ln8YGb3c.js → ArrowUpRight-CCdnTo5z.js} +1 -1
- package/dist/client/assets/{Check-CHoE8PMk.js → Check-D4Pc9s5H.js} +1 -1
- package/dist/client/assets/{CheckCircle-BofWr9F7.js → CheckCircle-fUZL-awt.js} +1 -1
- package/dist/client/assets/{ChevronDown-CIUXl0Z1.js → ChevronDown-B-4xb6nQ.js} +1 -1
- package/dist/client/assets/{ChevronRight-uuhXYsex.js → ChevronRight-B146nbPD.js} +1 -1
- package/dist/client/assets/{ChevronUp-KMvxKkO2.js → ChevronUp-CoErHhHc.js} +1 -1
- package/dist/client/assets/{Copy01-UqI6P4RV.js → Copy01-DLJCGzPS.js} +1 -1
- package/dist/client/assets/{DotsVertical-BMT69AFt.js → DotsVertical-Dj8BekJ0.js} +1 -1
- package/dist/client/assets/{Eye-Ba2Ftz4-.js → Eye-8YzED8lX.js} +1 -1
- package/dist/client/assets/{FilterLines-DuQKYiCv.js → FilterLines-DBgbbUzT.js} +1 -1
- package/dist/client/assets/{Globe01-DIUhL0Fs.js → Globe01-oYjNKDJP.js} +1 -1
- package/dist/client/assets/{Globe04-iVBT-v7_.js → Globe04-C_DCgHcF.js} +1 -1
- package/dist/client/assets/{HardDrive-dEguPf5G.js → HardDrive-eDqDeZKt.js} +1 -1
- package/dist/client/assets/{Image01-DNshZGHJ.js → Image01-CK_pzVD7.js} +1 -1
- package/dist/client/assets/{Key01-DH4zZTSP.js → Key01-4bl6Lbz5.js} +1 -1
- package/dist/client/assets/{LayoutLeft-CWHRWV1H.js → LayoutLeft-DaWUjS16.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DzY6nViH.js → LinkExternal01-qH7xz6cg.js} +1 -1
- package/dist/client/assets/{LogOut01-DrEtGu0U.js → LogOut01-BvCU9BQw.js} +1 -1
- package/dist/client/assets/{Monitor01-sZYmstW0.js → Monitor01-DO8roJfi.js} +1 -1
- package/dist/client/assets/{Package-n2a-wArU.js → Package-Buih6K1G.js} +1 -1
- package/dist/client/assets/{Palette-6VP1wKD3.js → Palette-D4rUos9W.js} +1 -1
- package/dist/client/assets/{Play-BUFZrLBi.js → Play-Btn-jh06.js} +1 -1
- package/dist/client/assets/{Plus-MpSgS1MR.js → Plus-YV4myGhm.js} +1 -1
- package/dist/client/assets/{SearchLg-DgquN-JM.js → SearchLg-DtJQ669m.js} +1 -1
- package/dist/client/assets/{SearchMd-B7lKZrLz.js → SearchMd-BG5Y_568.js} +1 -1
- package/dist/client/assets/{Settings02-Bfy940Pk.js → Settings02-VrNhOHMS.js} +1 -1
- package/dist/client/assets/{Shield01-BtqqwjZp.js → Shield01-DXvT93S_.js} +1 -1
- package/dist/client/assets/{Star01-yVt2ltrL.js → Star01-DCfNTBib.js} +1 -1
- package/dist/client/assets/{Stars01-eSabK_rS.js → Stars01-CatWaARi.js} +1 -1
- package/dist/client/assets/{Stars02-BImFpbaA.js → Stars02-DHhZyJwA.js} +1 -1
- package/dist/client/assets/{Sun-Barex1uD.js → Sun-VImQiMsC.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-pjtCrLJ0.js → SwitchHorizontal01-owwezVwA.js} +1 -1
- package/dist/client/assets/{Tool01-KID7Qspb.js → Tool01-D1b1B0Di.js} +1 -1
- package/dist/client/assets/{Tool02-DefbsmAX.js → Tool02-B4SjNCRH.js} +1 -1
- package/dist/client/assets/{Trash01-BEIZf7vB.js → Trash01-CJnWtlRZ.js} +1 -1
- package/dist/client/assets/{TrendUp01-OesVdcgS.js → TrendUp01-DlqQVTOA.js} +1 -1
- package/dist/client/assets/{Upload01-B_AQcPtq.js → Upload01-D3ii_SLu.js} +1 -1
- package/dist/client/assets/{User01-ssTnWgpN.js → User01-DoAGUu67.js} +1 -1
- package/dist/client/assets/{Users01-DX2_U_sb.js → Users01-DubJU6qZ.js} +1 -1
- package/dist/client/assets/{Users03-EWWmZVgE.js → Users03-Q2OgnuV1.js} +1 -1
- package/dist/client/assets/{X-B63qnioL.js → X-B8wnz5OR.js} +1 -1
- package/dist/client/assets/{XCircle-CNS1ugXv.js → XCircle-PI5qHkZH.js} +1 -1
- package/dist/client/assets/{XClose-DPRk3FSQ.js → XClose-zvXd1Z-O.js} +1 -1
- package/dist/client/assets/{Zap-CLgJC1ZI.js → Zap-CxuZkDdj.js} +1 -1
- package/dist/client/assets/{ZapSquare-Dko7wvz9.js → ZapSquare-CWSOmELu.js} +1 -1
- package/dist/client/assets/{ZoomOut-DaaCfd_Q.js → ZoomOut-DbtOC-9H.js} +1 -1
- package/dist/client/assets/{access-gate-CtBr1b22.js → access-gate-DXr5Ou05.js} +1 -1
- package/dist/client/assets/{add-section-modal-hdBXwXqQ.js → add-section-modal-CbOUsjIM.js} +1 -1
- package/dist/client/assets/{agent-icon-CS8e8NAV.js → agent-icon-CwdqDl5W.js} +1 -1
- package/dist/client/assets/{agents-list-C4L_BHSN.js → agents-list-DRXhRZfb.js} +1 -1
- package/dist/client/assets/{ai-providers-C3EBGbNw.js → ai-providers-FDEMjKzt.js} +1 -1
- package/dist/client/assets/{alert-6tdvZgAt.js → alert-Cj5QfCBC.js} +1 -1
- package/dist/client/assets/{alert-dialog-BqaRp9g5.js → alert-dialog-BzVXNhF7.js} +1 -1
- package/dist/client/assets/{app-editor-BO4OlHpV.js → app-editor-XJcKJXX_.js} +1 -1
- package/dist/client/assets/{auth-CYvkqqXe.js → auth-Bt0CmJX9.js} +1 -1
- package/dist/client/assets/{auth-catchall-Dp27ziY-.js → auth-catchall-B9UbEwVo.js} +1 -1
- package/dist/client/assets/{auth-entry-BkDSBSUh.js → auth-entry-BbVoddbj.js} +1 -1
- package/dist/client/assets/{auth-split-layout-Du8H8AWx.js → auth-split-layout-mENc0UqV.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-Cic-2GV4.js → authenticate-and-persist-oauth-Cap38VvM.js} +1 -1
- package/dist/client/assets/{automation-list-row-1Gx4XFRj.js → automation-list-row-BT2Adnuw.js} +1 -1
- package/dist/client/assets/{automation-runs-D0ler-Y5.js → automation-runs-B7Wwqf0I.js} +1 -1
- package/dist/client/assets/{automations-CqP2Z0D0.js → automations-CIg8LLAu.js} +1 -1
- package/dist/client/assets/{autosend-_IWAJmNq.js → autosend-BzoMjPCK.js} +1 -1
- package/dist/client/assets/{avatar-DBME0TxN.js → avatar-FwB_6Vx5.js} +1 -1
- package/dist/client/assets/{badge-DzGgcWQH.js → badge-NkMUwpVH.js} +1 -1
- package/dist/client/assets/{block-document-Dg2GdT36.js → block-document-CRsNEBk-.js} +1 -1
- package/dist/client/assets/{brand-context-CD17csAy.js → brand-context-B7lQCcCS.js} +1 -1
- package/dist/client/assets/{buckets-BMub4_dK.js → buckets-CDNU-6LE.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-Y5PsQJB1.js → bulk-category-panel-C3389yse.js} +1 -1
- package/dist/client/assets/{calendar-MD6Xsw5f.js → calendar-te50aK8e.js} +1 -1
- package/dist/client/assets/{capability-load-error-BRFj1jUL.js → capability-load-error-YX13FHDI.js} +1 -1
- package/dist/client/assets/{card-DuEx9SvB.js → card-lk-ifJDq.js} +1 -1
- package/dist/client/assets/{category-editor-DHHq_pUF.js → category-editor-Dj-Y9kVO.js} +1 -1
- package/dist/client/assets/{chat-context-DbuHHnEV.js → chat-context-C--r5NAp.js} +1 -1
- package/dist/client/assets/{checkbox-DGqH4kW7.js → checkbox-C_m-MvOL.js} +1 -1
- package/dist/client/assets/{cli-auth-success-BYB_SP-K.js → cli-auth-success-DX2t_KMD.js} +1 -1
- package/dist/client/assets/{collection-detail-QdMkEcRW.js → collection-detail-DlY3TQ3R.js} +1 -1
- package/dist/client/assets/{collection-display-button-CswXmu9d.js → collection-display-button-BM6OQqW5.js} +1 -1
- package/dist/client/assets/{collection-search-C29e6e6s.js → collection-search-KXVbCyxu.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CZc6Z79q.js → collection-table-wrapper-BOYc5-jr.js} +1 -1
- package/dist/client/assets/{collection-tabs-Bn1rgQHB.js → collection-tabs-CeCpyUq5.js} +1 -1
- package/dist/client/assets/{command-DiqAByKc.js → command-DsA7W0yR.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-BVXxAKIO.js → commerce-onboarding-DiyXfm-5.js} +1 -1
- package/dist/client/assets/{companions-core-BB-uvDn4.js → companions-core-DoaCzYlY.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-PKemynLR.js → connect-desktop-dialog-Bkr_115n.js} +1 -1
- package/dist/client/assets/{connect-k1UyM3NX.js → connect-suwzE2qW.js} +1 -1
- package/dist/client/assets/{connection-BPcea6Qh.js → connection-48rHXixt.js} +1 -1
- package/dist/client/assets/{connection-card-DQnhq_SR.js → connection-card-DOil8WmL.js} +1 -1
- package/dist/client/assets/{connection-detail-BVsez9dC.js → connection-detail-COkEZYP5.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-DvJ2BJWX.js → connection-form-helpers-CPEbOlKb.js} +1 -1
- package/dist/client/assets/{connections-C4ZFZuXF.js → connections-_QUc2ocJ.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-BlgwUT0d.js → decopilot-sse-pool-YDhL1koE.js} +1 -1
- package/dist/client/assets/{dialog-D2S03swZ.js → dialog-C_8LeXF7.js} +1 -1
- package/dist/client/assets/{domain-settings-C4gz9QTW.js → domain-settings-DiHLFyy9.js} +1 -1
- package/dist/client/assets/{drawer-Cn7hrBl0.js → drawer--rJ0GwmS.js} +1 -1
- package/dist/client/assets/{dropdown-menu-K33mzDHr.js → dropdown-menu-Nb7Swtbf.js} +1 -1
- package/dist/client/assets/{empty-state-CtasOVwD.js → empty-state-CgECUdIR.js} +1 -1
- package/dist/client/assets/{extract-connection-data-y1DTcrSi.js → extract-connection-data-8Y9b8B7K.js} +1 -1
- package/dist/client/assets/{file-explorer-BxZuNP8z.js → file-explorer-FLk9KU7R.js} +1 -1
- package/dist/client/assets/{file-type-icon-D8KLbqVC.js → file-type-icon-CJ7Z8HL1.js} +1 -1
- package/dist/client/assets/{files-BsdjTA_V.js → files-DFZkbjd3.js} +1 -1
- package/dist/client/assets/{form-B5KJo-WL.js → form-DlgvoK65.js} +1 -1
- package/dist/client/assets/{general-YEFGqY5F.js → general-BzEZeAPj.js} +1 -1
- package/dist/client/assets/{github-repo-picker-DVAq9l6E.js → github-repo-picker-2dcJnCE2.js} +1 -1
- package/dist/client/assets/{hooks-BxIbIgu6.js → hooks-C-ClFPY8.js} +1 -1
- package/dist/client/assets/{index-BvzELg9b.js → index-9n7WBC2A.js} +1 -1
- package/dist/client/assets/{index-DLWZbGG5.js → index-Bg2hPYeI.js} +1 -1
- package/dist/client/assets/{index-D5vwHLmE.js → index-BkhyqMD4.js} +4 -4
- package/dist/client/assets/{index-Da1Qfdqx.js → index-C1QHoHGG.js} +1 -1
- package/dist/client/assets/{index-DXj6p4UF.js → index-CqXjWwOv.js} +1 -1
- package/dist/client/assets/{index-B0N5nguR.js → index-CsnrnosM.js} +1 -1
- package/dist/client/assets/{index-Bl6K-c7b.js → index-D6zyrPkb.js} +1 -1
- package/dist/client/assets/{index-D4p_Nj-7.js → index-DjTSwBq1.js} +1 -1
- package/dist/client/assets/{index-BrHDd-md.js → index-Dph846XC.js} +1 -1
- package/dist/client/assets/{index-BeI3xuyZ.js → index-Dvvp-ZL4.js} +27 -27
- package/dist/client/assets/index-MvzqRvOm.js +1 -0
- package/dist/client/assets/{index-DmUnZo_V.js → index-YUnnsZUR.js} +3 -3
- package/dist/client/assets/{index-redirect-BLxJ1KZY.js → index-redirect-BSscoocT.js} +1 -1
- package/dist/client/assets/{index-Ckvq0I0T.js → index-xkJnAJ1v.js} +1 -1
- package/dist/client/assets/{input-rCL_IkRF.js → input-BMCXFfOH.js} +1 -1
- package/dist/client/assets/{integration-icon-C5iEMaEb.js → integration-icon-hZ9nu1eP.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-BO0KHfq2.js → invite-member-dialog-YrizOdFZ.js} +1 -1
- package/dist/client/assets/{label-BJQOJouI.js → label-DkUhbKVv.js} +1 -1
- package/dist/client/assets/{layout-Dh3PmoBI.js → layout-C4lXSqed.js} +1 -1
- package/dist/client/assets/{login-CqHOmeu_.js → login-A3bSEm81.js} +1 -1
- package/dist/client/assets/{mcp-oauth-BlKI_fUq.js → mcp-oauth-BEzIcmaP.js} +1 -1
- package/dist/client/assets/{members-CyzQgdu8.js → members-BNvwStLs.js} +1 -1
- package/dist/client/assets/{monaco-editor-oFOFAs4k.js → monaco-editor-p4hcXX8t.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Bunl3UyF.js → monitoring-stats-row-D30HLMlO.js} +1 -1
- package/dist/client/assets/{multi-select-CGSeFNHD.js → multi-select-ibXQebAL.js} +1 -1
- package/dist/client/assets/{oauth-callback-DQBgY-i9.js → oauth-callback-DHueVEnD.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Ctz54-_L.js → oauth-callback-ai-provider--oGB6I06.js} +1 -1
- package/dist/client/assets/{onboarding-D3yKFH1p.js → onboarding-t5mpZvO1.js} +1 -1
- package/dist/client/assets/{org-install-rB9vO7ZJ.js → org-install-u4VBQ-Jx.js} +1 -1
- package/dist/client/assets/{org-layout-BJMXPWy2.js → org-layout-jSSs4snb.js} +1 -1
- package/dist/client/assets/{organization-choice-CvF9n5oe.js → organization-choice-CF1cudmW.js} +1 -1
- package/dist/client/assets/{orgs-6xCTyfVq.js → orgs-20Bp_P_z.js} +1 -1
- package/dist/client/assets/{page-seo-form-Df2x2Yq-.js → page-seo-form-Cu7bShEY.js} +1 -1
- package/dist/client/assets/page-seo-sheet-DP9D9HzX.js +1 -0
- package/dist/client/assets/{popover-DGXacHGW.js → popover-CRcSqIBc.js} +1 -1
- package/dist/client/assets/{post-editor-B6zfwwhP.js → post-editor-CGyq0DPR.js} +1 -1
- package/dist/client/assets/{primitives-D-FkR7l_.js → primitives-BW0ftLDj.js} +1 -1
- package/dist/client/assets/{profile-Boi6egvN.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-aqseAUhz.js → redirect-editor-e7m5qDdy.js} +1 -1
- package/dist/client/assets/{registry-layout-BEYiP71o.js → registry-layout-D_N2_qf9.js} +1 -1
- package/dist/client/assets/registry-sn8XWzt2.js +2 -0
- package/dist/client/assets/{reports-DqPc2MNJ.js → reports-CfDSS5YR.js} +1 -1
- package/dist/client/assets/{require-capability-C2Fyn_Y5.js → require-capability-DNR2fRZP.js} +1 -1
- package/dist/client/assets/{required-auth-layout-BH7Ob5IR.js → required-auth-layout-B7ZZh9qk.js} +1 -1
- package/dist/client/assets/{reset-password-BIeahbqE.js → reset-password-Cvn-FYaj.js} +1 -1
- package/dist/client/assets/{roles-CX229f9Y.js → roles-CT8ngKOF.js} +1 -1
- package/dist/client/assets/{search-input-DHBNIZu3.js → search-input-ByoJeb5s.js} +1 -1
- package/dist/client/assets/{secrets-W0JPgY0U.js → secrets-alXMr9GQ.js} +1 -1
- package/dist/client/assets/{sections-editor-DzCkS3Nq.js → sections-editor-DhMVZ84W.js} +1 -1
- package/dist/client/assets/{select-B-jLbm2u.js → select-BGLnMqUE.js} +1 -1
- package/dist/client/assets/{select-model-Ca9dfzMi.js → select-model-ChhZWgXF.js} +1 -1
- package/dist/client/assets/{self-tool-result-DgRVH6Z7.js → self-tool-result-C2-O98yz.js} +1 -1
- package/dist/client/assets/{seo-editor-Dat2Jko0.js → seo-editor-CONBFTvQ.js} +1 -1
- package/dist/client/assets/{settings-layout-B1j5T8oJ.js → settings-layout-CcPTF2Fd.js} +1 -1
- package/dist/client/assets/{settings-section-IIqF2-rK.js → settings-section-CESV8oGV.js} +1 -1
- package/dist/client/assets/{shell-controls-HHiuy0Mg.js → shell-controls-BixTldyc.js} +1 -1
- package/dist/client/assets/{shell-layout-BGw4Bz3f.js → shell-layout-CZ4iI2QL.js} +1 -1
- package/dist/client/assets/{sidebar-DorTxndz.js → sidebar-CgY7Y5-g.js} +1 -1
- package/dist/client/assets/{skeleton-DPuHEPP6.js → skeleton-B2Z48mAP.js} +1 -1
- package/dist/client/assets/{sso-B_pxuv-W.js → sso-BX_BLlM4.js} +1 -1
- package/dist/client/assets/{store-B_qIc_h6.js → store-iq5rrJBd.js} +1 -1
- package/dist/client/assets/store-registry-C4P2yO69.js +2 -0
- package/dist/client/assets/{studio-tools-B-YKprUQ.js → studio-tools-hWL04vfF.js} +1 -1
- package/dist/client/assets/{switch-kwqBEIaq.js → switch-CCd1rtz5.js} +1 -1
- package/dist/client/assets/{table-BeQpbKT6.js → table-D0yKdvEN.js} +1 -1
- package/dist/client/assets/{tabs-FCpvPQMt.js → tabs-CrsSZstE.js} +1 -1
- package/dist/client/assets/{textarea-BJyB5b6A.js → textarea-C28Z6dtH.js} +1 -1
- package/dist/client/assets/{toggle-group-eZZEJ77N.js → toggle-group-CYT0Qbna.js} +1 -1
- package/dist/client/assets/{toolbar-D4-KbVI9.js → toolbar-DDS4PB_O.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-D7Ud92r8.js → toolbar-icon-button-CMGwtm0i.js} +1 -1
- package/dist/client/assets/{tooltip-b7iOl6Bw.js → tooltip-Wr4gthGP.js} +1 -1
- package/dist/client/assets/{use-ai-providers-5I2suWez.js → use-ai-providers-GrqKCbIT.js} +1 -1
- package/dist/client/assets/{use-api-keys-COqRUVrC.js → use-api-keys-D-7MGzc4.js} +1 -1
- package/dist/client/assets/{use-automations-BPmG5Zek.js → use-automations-hTtVC4V0.js} +1 -1
- package/dist/client/assets/{use-autosave-CAOUPI6m.js → use-autosave-8Xs2XjMc.js} +1 -1
- package/dist/client/assets/{use-capability-sx-r2Q5B.js → use-capability-garYu4b8.js} +1 -1
- package/dist/client/assets/{use-clock-tick-Dxk6RP_b.js → use-clock-tick-Bg-nSG-L.js} +1 -1
- package/dist/client/assets/{use-connection-B8T30gE2.js → use-connection-jKXbqyOn.js} +1 -1
- package/dist/client/assets/{use-copy-BmzY3A3T.js → use-copy-BarzK_vr.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-yoYxiENq.js → use-create-virtual-mcp-DFEE1fS6.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-CjhbMPIO.js → use-debounced-autosave-CQY_Z99j.js} +1 -1
- package/dist/client/assets/{use-debounced-value-D_Hu1MLK.js → use-debounced-value-B_AxWgQe.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BtrdeQvH.js → use-deco-credits-B45z1NDW.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CdepdoSG.js → use-decopilot-events-Bkfj0Jil.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CC1YAFud.js → use-delete-connection-CFbogUuz.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-B_WTTNZz.js → use-deployment-admin-spvt0kE2.js} +1 -1
- package/dist/client/assets/{use-file-configs-DvDSXF_J.js → use-file-configs-CsMsmMbe.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CZfq2-C0.js → use-infinite-scroll-QM2Uw9SY.js} +1 -1
- package/dist/client/assets/{use-join-requests-DjTEEJ3D.js → use-join-requests-C3Qx6WWz.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-nb1YZEWw.js → use-mcp-auth-status-BfgxtwQU.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DqUaCYWJ.js → use-mcp-client-Bry12Dni.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-3ETcXppH.js → use-mcp-tools-DhovNLhJ.js} +1 -1
- package/dist/client/assets/{use-members-CBG9GUos.js → use-members-B9Q8F-X-.js} +1 -1
- package/dist/client/assets/{use-mobile-C4ostmZk.js → use-mobile-mC7yf-Ko.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-TLUqHnXg.js → use-navigate-to-agent-BjBfWHCt.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CgKM5pXp.js → use-org-auth-client-BDrZtD3c.js} +1 -1
- package/dist/client/assets/{use-org-sso-B6IAXBzb.js → use-org-sso-BC5sLn7W.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BrNiHr2a.js → use-organization-roles-B0EDTA7R.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CjeHD-E7.js → use-organization-settings-BrrgMfKi.js} +1 -1
- package/dist/client/assets/{use-registry-app-BUFDJ3KR.js → use-registry-app-5wjxCxuI.js} +1 -1
- package/dist/client/assets/{use-registry-connections-B9JDZLCs.js → use-registry-connections-DNHKIrwW.js} +1 -1
- package/dist/client/assets/{use-secrets-DC_iZR9m.js → use-secrets-DvlYY2WI.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CUgBbX5n.js → use-status-sounds-BNlhmXGQ.js} +1 -1
- package/dist/client/assets/{use-view-mode-UNICl5lE.js → use-view-mode-Clwf0WD3.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CsxSZ-uz.js → use-virtual-mcp-CKNCtcz0.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DTgV9deG.js +1 -0
- package/dist/client/assets/{useQueries-DbtSti50.js → useQueries-Byd9MLqp.js} +1 -1
- package/dist/client/assets/{useRouterState-BCuq4lEY.js → useRouterState-BlvVAv0l.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-D0h2M_Rz.js +1 -0
- package/dist/client/assets/{users-Db2-OYeS.js → users-Bz6odZKU.js} +1 -1
- package/dist/client/assets/{variant-calendar-DRCotpGa.js → variant-calendar-Boi9z8ME.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CTtsoV6z.js → view-mode-toggle-DCdUhKS4.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +4 -4
- package/dist/server/migrate.js +1 -1
- package/dist/server/server.js +3 -3
- package/package.json +1 -1
- package/dist/client/assets/index-DoL2ECHU.js +0 -1
- package/dist/client/assets/page-seo-sheet-FwS2v-uc.js +0 -1
- package/dist/client/assets/project-app-view-Ca8BhhZz.js +0 -1
- package/dist/client/assets/record-editor-DjXnVyi6.js +0 -1
- package/dist/client/assets/registry-C1HffKGv.js +0 -2
- package/dist/client/assets/store-registry-ctM_M3o_.js +0 -2
- package/dist/client/assets/useInfiniteQuery-D6nH6mMj.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CM0gIIhq.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -174,7 +174,7 @@ Reference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.ht
|
|
|
174
174
|
Then retry.`);console.error(`[ensurePostgres] pg.initialise() failed. dataDir=${f}`,v);let D=b3(i,"postgres");if(D&&rE(D.pid,"postgres"))return u.state="running",u.pid=D.pid,u.port=D.port,u.owner="managed",u;throw v}await w.start();try{await w.createDatabase(oRu)}catch(v){if(!(v instanceof Error?v.message:String(v)).includes("already exists"))throw v}await vM(c);let h=null;if(Ww(l)){let v=$M(l,"utf8").split(`
|
|
175
175
|
`)[0]?.trim();if(v)h=Number.parseInt(v,10)}if(h)F1i(i,"postgres",{pid:h,port:c,startedAt:new Date().toISOString()}),u.pid=h;return u.state="running",u.owner="managed",u}async function ZYt(i){let u=b3(i,"postgres");if(u===null){console.log("PostgreSQL: not running");return}let{pid:t,port:f}=u;if(!z6(t)){console.log("PostgreSQL: process already dead, cleaning up state"),await Il(i,"postgres");return}if(!rE(t,"postgres")){console.log(`PostgreSQL: PID ${t} no longer belongs to postgres (possible PID reuse), cleaning up state`),await Il(i,"postgres");return}console.log(`PostgreSQL: stopping (PID ${t}, port ${f})...`);let l=L4(Lw(i),"postgres","data");try{await new(await import("embedded-postgres")).default({databaseDir:l,port:f,user:Dzi,password:_zi,persistent:!0}).stop()}catch{console.log("PostgreSQL: embedded-postgres stop failed, sending SIGTERM...");try{if(!rE(t,"postgres"))console.log(`PostgreSQL: PID ${t} is no longer postgres, skipping signal`);else{process.kill(t,"SIGTERM");let c=Date.now();while(Date.now()-c<5000&&z6(t))await y0(200);if(z6(t)&&rE(t,"postgres"))process.kill(t,"SIGKILL")}}catch{}}await Il(i,"postgres"),console.log("PostgreSQL stopped")}function BYt(){let i=g1i(),u=dzi(),t={darwin:"darwin",linux:"linux",win32:"windows"},f={arm64:"arm64",x64:"amd64"},l=t[i],c=f[u];if(!l||!c)throw Error(`Unsupported platform: ${i}/${u}`);return`nats-server-${sRu}-${l}-${c}.${l==="windows"?"zip":"tar.gz"}`}function gYt(i){return L4(Lw(i),"nats","bin",`nats-server${Zzi}`)}async function FYt(i){let u=gYt(i);if(Ww(u))return u;let t=L4(Lw(i),"nats","bin");PD(t);let f=BYt(),l=`https://github.com/nats-io/nats-server/releases/download/${sRu}/${f}`,c=await fetch(l);if(!c.ok)throw Error(`Failed to download NATS: ${c.status} ${c.statusText}`);let E=L4(t,f),w=await c.arrayBuffer();CW(E,Buffer.from(w));let $=L4(t,f.replace(/\.(zip|tar\.gz)$/,""));if(O5)await Bun.spawn(["powershell","-Command",`Expand-Archive -Path '${E}' -DestinationPath '${t}' -Force`]).exited;else await Bun.spawn(["tar","-xzf",E,"-C",t]).exited;if(!Ww(u)){let h=L4($,`nats-server${Zzi}`);if(Ww(h))mRu(h,u)}if(cYt($,{recursive:!0,force:!0}),await aRu(E).catch(()=>{}),!O5)await eRu(u,493);if(!Ww(u))throw Error(`NATS binary not found at ${u} after extraction`);return u}function dM(i){return L4(Lw(i),"nats","jwt")}function TYt(i){return L4(dM(i),"keys.json")}function MRu(i){return L4(dM(i),"nats-server.conf")}function UYt(i){return L4(dM(i),"cluster.creds")}function AYt(i){let u=TYt(i);if(Ww(u))try{let f=JSON.parse($M(u,"utf8"));if(a_u(f))return f}catch{}let t=e_u();return PD(dM(i)),CW(u,JSON.stringify(t,null,2),{mode:384}),t}function qRu(i,u,t){return{publicUrl:`nats://127.0.0.1:${u}`,accountJwt:i.tunnelAccountJwt,accountSigningKey:i.tunnelSigningSeed,operatorJwt:i.operatorJwt,credsPath:t}}async function yYt(i){let u={name:"NATS",state:"stopped",pid:null,port:0,owner:"none"},t=AYt(i),f=await o_u(t),l=UYt(i),c=hui()?"0.0.0.0":"127.0.0.1",E=b3(i,"nats");if(E!==null)if(rE(E.pid,"nats-server")){if(c==="127.0.0.1")return u.state="running",u.pid=E.pid,u.port=E.port,u.owner="managed",{info:u,tunnel:qRu(f,E.port,l)};await ibu(i)}else await Il(i,"nats");let w=await hM(),$=await hM();u.port=w;let h=await FYt(i),v=L4(Lw(i),"nats","data"),d=L4(Lw(i),"nats");PD(v),PD(dM(i)),CW(l,f.clusterCreds,{mode:384});let D=s_u({tcpPort:w,wsPort:$,storeDir:v,bindHost:c,artifacts:f});CW(MRu(i),D);let _=Bun.file(L4(d,"nats.log")),N=Bun.spawn([h,"-c",MRu(i)],{stdout:_,stderr:_});return F1i(i,"nats",{pid:N.pid,port:w,wsPort:$,startedAt:new Date().toISOString()}),await vM(w),await vM($),u.state="running",u.pid=N.pid,u.owner="managed",{info:u,tunnel:qRu(f,w,l)}}async function ibu(i){let u=b3(i,"nats");if(u===null){console.log("NATS: not running");return}let{pid:t}=u;if(!z6(t)){console.log("NATS: process already dead, cleaning up state"),await Il(i,"nats");return}if(!rE(t,"nats-server")){console.log(`NATS: PID ${t} no longer belongs to nats-server (possible PID reuse), cleaning up state`),await Il(i,"nats");return}if(console.log(`NATS: stopping (PID ${t})...`),O5)Bun.spawn(["taskkill","/PID",String(t)]);else process.kill(t,"SIGTERM");let f=Date.now();while(Date.now()-f<5000&&z6(t))await y0(200);if(z6(t)&&rE(t,"nats-server"))if(console.log("NATS: force killing..."),O5)Bun.spawn(["taskkill","/PID",String(t),"/F"]);else process.kill(t,"SIGKILL");await Il(i,"nats"),console.log("NATS stopped")}function ubu(i,u){return i==="win32"?"minio.exe":"minio"}function tbu(i,u){let t={darwin:"darwin",linux:"linux",win32:"windows"},f={arm64:"arm64",x64:"amd64"},l=t[i],c=f[u];if(!l||!c)throw Error(`Unsupported platform for MinIO: ${i}/${u}`);let E=ubu(i,u);return`https://dl.min.io/server/minio/release/${l}-${c}/${E}`}function PYt(i){return i===void 0||i===""||i==="true"||i==="1"}function IYt(i){return L4(Lw(i),"minio","bin",`minio${Zzi}`)}async function GYt(i){let u=IYt(i);if(Ww(u))return u;let t=L4(Lw(i),"minio","bin");PD(t);let f=tbu(g1i(),dzi()),l=await fetch(f);if(!l.ok)throw Error(`Failed to download MinIO: ${l.status} ${l.statusText}`);let c=await l.arrayBuffer(),E=`${u}.download-${process.pid}`;if(CW(E,Buffer.from(c)),!O5)await eRu(E,493);if(mRu(E,u),!Ww(u))throw Error(`MinIO binary not found at ${u} after download`);return u}async function xYt(i,u=30000){let t=`http://127.0.0.1:${i}/minio/health/ready`,f=Date.now();while(Date.now()-f<u){try{if((await fetch(t)).status===200)return}catch{}await y0(200).catch(()=>{})}throw Error(`Timed out waiting for MinIO readiness at ${t}`)}async function VRu(i){let{S3Client:u,CreateBucketCommand:t}=await Promise.resolve().then(() => (wM(),CRu)),f=new u({endpoint:i,region:"auto",credentials:{accessKeyId:Nzi,secretAccessKey:Ozi},forcePathStyle:!0});try{await H1(()=>f.send(new t({Bucket:pRu})),{maxAttempts:5,minTimeout:200,maxTimeout:3000,isRetriable:(l)=>l instanceof Error&&/ECONNREFUSED|ECONNRESET|EPIPE|socket|fetch failed|timed out|network/i.test(`${l.name??""} ${l.message}`)})}catch(l){let c=l&&typeof l==="object"&&"name"in l?String(l.name):"";if(c!=="BucketAlreadyOwnedByUs"&&c!=="BucketAlreadyExists"&&!(l instanceof Error&&l.message.includes("already")))throw f.destroy(),l}f.destroy()}async function kYt(i){let u={name:"MinIO",state:"stopped",pid:null,port:0,owner:"none"},t=b3(i,"minio");if(t!==null){if(rE(t.pid,"minio"))return u.state="running",u.pid=t.pid,u.port=t.port,u.owner="managed",await VRu(`http://127.0.0.1:${t.port}`),u;await Il(i,"minio")}let f=await hM();u.port=f;let l=await GYt(i),c=L4(Lw(i),"minio","data"),E=L4(Lw(i),"minio");PD(c);let w=Bun.file(L4(E,"minio.log")),$=Bun.spawn([l,"server",c,"--address",`:${f}`],{env:{...process.env,MINIO_ROOT_USER:Nzi,MINIO_ROOT_PASSWORD:Ozi},stdout:w,stderr:w});return F1i(i,"minio",{pid:$.pid,port:f,startedAt:new Date().toISOString()}),await xYt(f),await VRu(`http://127.0.0.1:${f}`),u.state="running",u.pid=$.pid,u.owner="managed",u}async function jYt(i){let u=b3(i,"minio");if(u===null){console.log("MinIO: not running");return}let{pid:t}=u;if(!z6(t)){console.log("MinIO: process already dead, cleaning up state"),await Il(i,"minio");return}if(!rE(t,"minio")){console.log(`MinIO: PID ${t} no longer belongs to minio (possible PID reuse), cleaning up state`),await Il(i,"minio");return}if(console.log(`MinIO: stopping (PID ${t})...`),O5)Bun.spawn(["taskkill","/PID",String(t)]);else process.kill(t,"SIGTERM");let f=Date.now();while(Date.now()-f<5000&&z6(t))await y0(200);if(z6(t)&&rE(t,"minio"))if(console.log("MinIO: force killing..."),O5)Bun.spawn(["taskkill","/PID",String(t),"/F"]);else process.kill(t,"SIGKILL");await Il(i,"minio"),console.log("MinIO stopped")}function fbu(i){let u=i.hotReload===!0?["--hot"]:[],t=i.hotReload===!0?["--hot"]:[];return["bun",...u,"run","--cwd=apps/api","src/cli.ts","link",i.clusterUrl,"--port",String(i.port),"--no-tui",...t]}async function XYt(i){let u={name:"Link",state:"stopped",pid:null,port:0,owner:"none"},t=b3(i.home,"link");if(t!==null){if(rE(t.pid,vzi,"args"))return u.state="running",u.pid=t.pid,u.port=t.port,u.owner="managed",{info:u,proc:null};await Il(i.home,"link")}if(i.beforeSpawn)await i.beforeSpawn();let f=await hM();u.port=f;let l=Bun.spawn(fbu({clusterUrl:i.clusterUrl,port:f,hotReload:i.hotReload}),{cwd:i.repoRoot,env:{...process.env,STUDIO_CLUSTER_URL:i.clusterUrl,DATA_DIR:i.linkDataDir,DECOCMS_HOME:i.linkDataDir,DECOCMS_LINK_MANAGED:"1"},stdio:i.stdio??["inherit","inherit","inherit"]});F1i(i.home,"link",{pid:l.pid,port:f,startedAt:new Date().toISOString()}),i.onSpawn?.(l);try{await vM(f)}catch(c){try{l.kill()}catch{}throw await Il(i.home,"link"),c}return u.state="running",u.pid=l.pid,u.owner="managed",{info:u,proc:l}}async function lbu(i){let u=b3(i,"link");if(u===null){console.log("Link: not running");return}let{pid:t}=u;if(!z6(t)){console.log("Link: process already dead, cleaning up state"),await Il(i,"link");return}if(!rE(t,vzi,"args")){console.log(`Link: PID ${t} no longer belongs to the link daemon (possible PID reuse), cleaning up state`),await Il(i,"link");return}if(console.log(`Link: stopping (PID ${t})...`),O5)Bun.spawn(["taskkill","/PID",String(t)]);else process.kill(t,"SIGTERM");let f=Date.now();while(Date.now()-f<5000&&z6(t))await y0(200);if(z6(t)&&rE(t,vzi,"args"))if(console.log("Link: force killing..."),O5)Bun.spawn(["taskkill","/PID",String(t),"/F"]);else process.kill(t,"SIGKILL");await Il(i,"link"),console.log("Link stopped")}function rRu(i){return $c(KYt,JYt,i,2,0.5)}function YYt(i,u){if(u.aborted)return Promise.resolve();return new Promise((t)=>{let f=()=>{u.removeEventListener("abort",f),t()};u.addEventListener("abort",f,{once:!0}),i.exited.then(()=>{u.removeEventListener("abort",f),t()})})}async function WYt(i,u){while(!u.aborted&&z6(i))await y0(2000,{signal:u}).catch(()=>{})}async function LYt(i){let u=0;while(!i.signal.aborted){let t=Date.now(),f;try{f=await XYt(i)}catch(w){if(i.onDown?.(),i.onLog?.(`[link] daemon failed to start: ${w instanceof Error?w.message:String(w)} \u2014 retrying`),i.signal.aborted)return;await y0(rRu(u++),{signal:i.signal}).catch(()=>{});continue}let l=new AbortController,c=()=>l.abort();if(i.signal.addEventListener("abort",c,{once:!0}),vM(f.info.port,30000,l.signal).then(()=>{if(!l.signal.aborted)i.onReady?.(f.info.port)}).catch(()=>{}),f.proc)await YYt(f.proc,i.signal);else if(f.info.pid!==null)await WYt(f.info.pid,i.signal);if(l.abort(),i.signal.removeEventListener("abort",c),i.signal.aborted)return;i.onDown?.();let E=Date.now()-t;if(E>=SYt)u=0;i.onLog?.(`[link] daemon exited after ${Math.round(E/1000)}s \u2014 respawning`),await y0(rRu(u++),{signal:i.signal}).catch(()=>{})}}function hzi(i,u){try{let t=new URL(i);return t.port?Number.parseInt(t.port,10):u}catch{return u}}async function QYt(i){PD(Lw(i.home));let u=i.externalDatabaseUrl!==null,t=i.externalNatsUrl!==null,f=Boolean(process.env.S3_ENDPOINT&&process.env.S3_BUCKET&&process.env.S3_ACCESS_KEY_ID&&process.env.S3_SECRET_ACCESS_KEY),l=i.skipMinio===!0||f,c=u?{name:"PostgreSQL",state:"external",pid:null,port:hzi(i.externalDatabaseUrl,5432),owner:"external"}:await OYt(i.home),E=null,w;if(t)w={name:"NATS",state:"external",pid:null,port:hzi(i.externalNatsUrl,4222),owner:"external"};else{let D=await yYt(i.home);if(w=D.info,E=D.tunnel,hui()&&E){let _=await l7u({natsPort:w.port});E={...E,publicUrl:_.config.publicUrl},console.log(`[dev-nats-toxiproxy] daemon NATS routed through ${_.config.publicUrl} -> ${_.config.upstream} (admin ${_.config.apiUrl})`)}}let $=[c,w],h=null;if(f){$.push({name:"MinIO",state:"external",pid:null,port:hzi(process.env.S3_ENDPOINT,dYt),owner:"external"});let D=PYt(process.env.S3_FORCE_PATH_STYLE);h={endpoint:process.env.S3_ENDPOINT,bucket:process.env.S3_BUCKET,accessKeyId:process.env.S3_ACCESS_KEY_ID,secretAccessKey:process.env.S3_SECRET_ACCESS_KEY,forcePathStyle:D}}else if(!l){let D=await kYt(i.home);$.push(D),h={endpoint:`http://127.0.0.1:${D.port}`,bucket:pRu,accessKeyId:Nzi,secretAccessKey:Ozi,forcePathStyle:!0}}if(h){if(process.env.S3_ENDPOINT=h.endpoint,process.env.S3_BUCKET=h.bucket,process.env.S3_ACCESS_KEY_ID=h.accessKeyId,process.env.S3_SECRET_ACCESS_KEY=h.secretAccessKey,h.forcePathStyle)process.env.S3_FORCE_PATH_STYLE="true"}if(E)process.env.NATS_PUBLIC_URL=E.publicUrl,process.env.NATS_ACCOUNT_JWT=E.accountJwt,process.env.NATS_ACCOUNT_SIGNING_KEY=E.accountSigningKey,process.env.NATS_OPERATOR_JWT=E.operatorJwt,process.env.NATS_TUNNEL_PUBLIC_ENABLED="true",process.env.NATS_CREDS=E.credsPath;let v=u?i.externalDatabaseUrl:NYt(c.port),d=t?i.externalNatsUrl:`nats://localhost:${w.port}`;return{services:$,outputs:{databaseUrl:v,natsUrls:[d],s3:h,natsTunnel:E}}}async function nYt(i){if(await lbu(i),await ZYt(i),await ibu(i),await jYt(i),hui())await c7u().catch(()=>{});console.log(`
|
|
176
176
|
All managed services stopped.`)}async function zYt(i){let u=[],t=b3(i,"postgres");if(t!==null&&z6(t.pid))u.push({name:"PostgreSQL",state:"running",pid:t.pid,port:t.port,owner:"managed"});else{if(t!==null)await Il(i,"postgres");u.push({name:"PostgreSQL",state:"stopped",pid:null,port:0,owner:"none"})}let f=b3(i,"nats");if(f!==null&&z6(f.pid))u.push({name:"NATS",state:"running",pid:f.pid,port:f.port,owner:"managed"});else{if(f!==null)await Il(i,"nats");u.push({name:"NATS",state:"stopped",pid:null,port:0,owner:"none"})}let l=b3(i,"minio");if(l!==null&&z6(l.pid))u.push({name:"MinIO",state:"running",pid:l.pid,port:l.port,owner:"managed"});else{if(l!==null)await Il(i,"minio");u.push({name:"MinIO",state:"stopped",pid:null,port:0,owner:"none"})}let c=b3(i,"link");if(c!==null&&z6(c.pid))u.push({name:"Link",state:"running",pid:c.pid,port:c.port,owner:"managed"});else{if(c!==null)await Il(i,"link");u.push({name:"Link",state:"stopped",pid:null,port:0,owner:"none"})}return u}function HYt(i){console.log("Service State PID Port Owner"),console.log("---------- ---------- ----- ----- ----------");for(let f of i){let l=f.name.padEnd(10),c=f.state.padEnd(10),E=(f.pid?.toString()??"-").padEnd(5),w=(f.port?String(f.port):"-").padEnd(5),$=f.owner;console.log(`${l} ${c} ${E} ${w} ${$}`)}}var Dzi="postgres",_zi="postgres",oRu="postgres",sRu="v2.14.2",Nzi="minioadmin",Ozi="minioadmin",pRu="studio-dev",dYt=9000,O5,Zzi,vzi="cli.ts link",JYt=500,KYt=30000,SYt=30000;var QZ=O(()=>{U4();p_u();E7u();O5=g1i()==="win32",Zzi=O5?".exe":""});var Ebu={};Xi(Ebu,{servicesCommand:()=>RYt});function cbu(i){if(!i)return null;try{let t=new URL(i).hostname;if(t==="localhost"||t==="127.0.0.1"||t==="::1")return null;return i}catch{return null}}async function RYt(i){let{subcommand:u,home:t}=i,{ensureServices:f,stopServices:l,getStatus:c,printTable:E}=await Promise.resolve().then(() => (QZ(),LZ));switch(u){case"up":{await f({home:t,externalDatabaseUrl:cbu(process.env.DATABASE_URL),externalNatsUrl:cbu(process.env.NATS_URL)});break}case"down":{await l(t);break}case"status":{let w=await c(t);E(w);break}default:console.error(`Unknown services subcommand: ${u}
|
|
177
|
-
Usage: deco services <up|down|status>`),process.exit(1)}}import{homedir as bYt}from"os";function MYt(i){let u=(i??"").trim();return CYt.has(u)?u:"all"}function VYt(i){let u=(i??"").trim();return qYt.has(u)?u:"development"}function $bu(i,u,t){let f=i==="worker"?0:Math.floor(u*0.6);if(t===void 0||t==="")return f;let l=Number(t);return Number.isFinite(l)&&l>=0?l:f}function nZ(i){return i==="true"||i==="1"}function rYt(i){if(i===void 0||i==="")return;return nZ(i)}function T1i(i,u,t){if(u===void 0||u==="")return t;let f=Number(u);if(!Number.isSafeInteger(f)||f<=0)throw Error(`${i} must be a positive integer`);return f}function mYt(i,u){if(u===void 0||u==="")return;let t=Number(u);if(!Number.isSafeInteger(t)||t<=0)throw Error(`${i} must be a positive integer`);return t}function eYt(i,u){if(i===void 0||i==="")return u;return i==="true"||i==="1"}function wbu(i){if(!i)return null;try{let t=new URL(i).hostname;if(t==="localhost"||t==="127.0.0.1"||t==="::1")return null;return i}catch{return null}}function oYt(i){let u=i&&i.length>0?i:"user-desktop";if(u==="cluster")return"agent-sandbox";if(!aYt.has(u))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${i}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return u}function U1i(i,u){let t=i.home||u.DATA_DIR||u.DECOCMS_HOME||`${bYt()}/deco`,f=i.localMode,l=i.nodeEnv||VYt(u.NODE_ENV),c=u.NATS_URL||"nats://localhost:4222",E=rYt(u.NATS_TUNNEL_PUBLIC_ENABLED)??!!u.NATS_PUBLIC_URL;return{settings:{nodeEnv:l,port:T1i("PORT",i.port||u.PORT,3000),baseUrl:i.baseUrl||u.BASE_URL,dataDir:t,databasePgSsl:nZ(u.DATABASE_PG_SSL),databasePoolMax:T1i("DATABASE_POOL_MAX",u.DATABASE_POOL_MAX,5),betterAuthSecret:u.BETTER_AUTH_SECRET||"",encryptionKey:u.ENCRYPTION_KEY||"",studioJwtSecret:u.STUDIO_JWT_SECRET??u.MESH_JWT_SECRET,localMode:f,disableRateLimit:nZ(u.DISABLE_RATE_LIMIT),studioProvisionSecretKey:u.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(u.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map(($)=>$.trim().toLowerCase()).filter(Boolean),clickhouseUrl:u.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:mYt("CLICKHOUSE_MAX_MEMORY_USAGE",u.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:u.MONITORING_OTLP_ENDPOINT,otelServiceName:u.OTEL_SERVICE_NAME||"studio",natsPublicUrl:u.NATS_PUBLIC_URL,natsTunnelPublicEnabled:E,natsTunnelSessionTtlSeconds:T1i("NATS_TUNNEL_SESSION_TTL_SECONDS",u.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:u.NATS_OPERATOR_JWT,natsAccountJwt:u.NATS_ACCOUNT_JWT,natsAccountSigningKey:u.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:u.NATS_CREDS,configPath:u.CONFIG_PATH||"./config.json",aiGatewayEnabled:nZ(u.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:u.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:u.DECO_AI_GATEWAY_ADMIN_TOKEN,seatAllowanceCents:T1i("STUDIO_SEAT_ALLOWANCE_CENTS",u.STUDIO_SEAT_ALLOWANCE_CENTS,500),stripeWebhookSecret:u.STRIPE_WEBHOOK_SECRET,stripeSecretKey:u.STRIPE_SECRET_KEY,stripeSeatPriceId:u.STRIPE_SEAT_PRICE_ID,enableDecoImport:nZ(u.ENABLE_DECO_IMPORT),billingEnforced:nZ(u.STUDIO_BILLING_ENFORCED),mcpCacheEnabled:eYt(u.MCP_CACHE_ENABLED,l!=="development"),orgFsPublicSetsJson:u.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:nZ(u.DISABLE_ORGFS_MOUNTS),s3Endpoint:u.S3_ENDPOINT,s3Bucket:u.S3_BUCKET,s3Region:u.S3_REGION||"auto",s3AccessKeyId:u.S3_ACCESS_KEY_ID,s3SecretAccessKey:u.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:u.S3_FORCE_PATH_STYLE===void 0||u.S3_FORCE_PATH_STYLE===""||u.S3_FORCE_PATH_STYLE==="true"||u.S3_FORCE_PATH_STYLE==="1",monitoringS3Bucket:u.MONITORING_S3_BUCKET,monitoringS3Endpoint:u.MONITORING_S3_ENDPOINT,monitoringS3Region:u.MONITORING_S3_REGION,monitoringS3AccessKeyId:u.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:u.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:u.MONITORING_S3_PREFIX,duckdbExtensionDirectory:u.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:u.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:u.DUCKDB_THREADS?Number(u.DUCKDB_THREADS):void 0,isCli:!0,noTui:i.noTui===!0,podName:u.POD_NAME??crypto.randomUUID(),dispatchRole:MYt(u.STUDIO_DISPATCH_ROLE??u.MESH_DISPATCH_ROLE),sandboxProviderKind:oYt(u.STUDIO_SANDBOX_PROVIDER),decoSupabaseUrl:u.DECO_SUPABASE_URL,decoSupabaseServiceKey:u.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:u.FIRECRAWL_API_KEY,commerceDiscoveryInternalApiUrl:u.COMMERCE_DISCOVERY_INTERNAL_API_URL,commerceDiscoveryInternalApiKey:u.COMMERCE_DISCOVERY_INTERNAL_API_KEY,s3TenantBucket:u.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:u.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:u.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:u.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:u.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:u.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:u.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:wbu(u.DATABASE_URL),externalNatsUrl:wbu(c),skipMigrations:i.skipMigrations}}var CYt,qYt,aYt;var A1i=O(()=>{CYt=new Set(["all","worker","api"]);qYt=new Set(["production","development","test"]);aYt=new Set(["agent-sandbox","user-desktop"])});function hbu(i){DM=Object.freeze(i)}function du(){if(!DM)sYt();return DM}function sYt(){if(DM)return;let i={...process.env},u=U1i({port:i.PORT||"3000",home:i.DATA_DIR||i.DECOCMS_HOME||"",localMode:i.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:i.DECO_NO_TUI==="true",vitePort:i.VITE_PORT,baseUrl:i.BASE_URL},i);DM=Object.freeze({...u.settings,databaseUrl:i.DATABASE_URL??"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(i.NATS_URL||"nats://localhost:4222").split(",").map((t)=>t.trim()).filter(Boolean)})}var DM=null;var q0=O(()=>{A1i()});import{context as pYt,propagation as iWt,SpanKind as uWt,SpanStatusCode as gzi}from"@opentelemetry/api";function fWt(i,u){let t=i instanceof Error?i.name:void 0;if(t==="TimeoutError")return"timeout";if(t==="AbortError")return"cancelled";if(u?.aborted)return"cancelled";return null}function lWt(i,u){if(u.startsWith("/_sandbox/")){if(i===404)return"daemon_gone";if(i===409)return"daemon_not_ready"}if(i===404&&u.includes("/sandboxclaims/"))return"claim_gone";return null}function cWt(i,u){if(i===404&&(u==="/.decofile"||u==="/live/_meta"||u==="/sprites.svg"))return"not_a_deco_site";return null}function EWt(i){if(!(i instanceof Error))return!1;if(i.message.includes("socket connection was closed"))return!0;let u=i.code;return u==="ECONNRESET"||u==="EPIPE"}async function wWt(i,u){let t,f;if(i instanceof Request)t=new URL(i.url),f=u?.method??i.method;else if(i instanceof URL)t=i,f=u?.method??"GET";else t=new URL(i),f=u?.method??"GET";let l=`${f} ${t.host}`;return c7.startActiveSpan(l,{kind:uWt.CLIENT,attributes:{"http.request.method":f,"url.full":t.href,"url.scheme":t.protocol.replace(":",""),"url.path":t.pathname,"url.query":t.search||void 0,"server.address":t.hostname,"server.port":t.port?Number(t.port):void 0}},async(c)=>{try{let E=new Headers(u?.headers??(i instanceof Request?i.headers:{}));iWt.inject(pYt.active(),E,{set:(D,_,N)=>D.set(_,N)});let w={...u,headers:E},$=await tWt(i,w);c.setAttribute("http.response.status_code",$.status);let h=$.status===405&&f==="GET"&&(E.get("accept")??"").includes("text/event-stream"),v=$.status>=400?lWt($.status,t.pathname):null,d=$.status>=400?cWt($.status,t.pathname):null;if($.status>=400&&!h&&!v&&!d)c.setStatus({code:gzi.ERROR,message:`HTTP ${$.status}`});else{if(v)c.setAttribute("sandbox.lifecycle",v);if(d)c.setAttribute("preview.probe",d);c.setStatus({code:gzi.OK})}return $}catch(E){let w=u?.signal??(i instanceof Request?i.signal:void 0),$=fWt(E,w??void 0);if($)c.setAttribute("abort.reason",$);else if(EWt(E)&&t.pathname.startsWith("/_sandbox/"))c.setAttribute("sandbox.lifecycle","connection_closed");else c.recordException(E),c.setStatus({code:gzi.ERROR,message:E instanceof Error?E.message:"Fetch failed"});throw E}finally{c.end()}})}function vbu(){globalThis.fetch=wWt}var tWt;var dbu=O(()=>{j1();tWt=globalThis.fetch});import{join as Tzi}from"path";function Z5(){return Tzi(du().dataDir,"logs")}function MW(){return Tzi(du().dataDir,"traces")}function ID(){return Tzi(du().dataDir,"metrics")}function E7(i,u){let t=i[u];return t!=null?String(t):""}function _M(i,u){let t=i[u];return t!=null&&t!==""?String(t):null}function Dbu(i){let{attributes:u}=i,t=u[Gf.IS_ERROR],f=u[Gf.DURATION_MS];return{v:1,id:i.id,type:E7(u,Gf.TYPE)||NM,organization_id:E7(u,Gf.ORGANIZATION_ID),connection_id:E7(u,Gf.CONNECTION_ID),connection_title:E7(u,Gf.CONNECTION_TITLE),tool_name:E7(u,Gf.TOOL_NAME),input:E7(u,Gf.INPUT),output:E7(u,Gf.OUTPUT),is_error:t===!0||t===1||t==="true"?1:0,error_message:_M(u,Gf.ERROR_MESSAGE),duration_ms:typeof f==="number"?f:Number(f)||0,timestamp:new Date(Number(i.timestampNano/1000000n)).toISOString(),user_id:_M(u,Gf.USER_ID),request_id:E7(u,Gf.REQUEST_ID),user_agent:_M(u,Gf.USER_AGENT),virtual_mcp_id:_M(u,Gf.VIRTUAL_MCP_ID),properties:_M(u,Gf.PROPERTIES)}}function P1i(i){return i[0]*1000+i[1]/1e6}function VW(i){return new Date(P1i(i)).toISOString()}var Fzi="mcp.proxy.callTool",Gf,NM="tool_call",qW="llm_call",y1i="decopilot";var C3=O(()=>{q0();Gf={TYPE:"studio.monitoring.type",ORGANIZATION_ID:"studio.monitoring.organization_id",CONNECTION_ID:"studio.monitoring.connection_id",CONNECTION_TITLE:"studio.monitoring.connection_title",TOOL_NAME:"studio.monitoring.tool_name",INPUT:"studio.monitoring.input",OUTPUT:"studio.monitoring.output",IS_ERROR:"studio.monitoring.is_error",ERROR_MESSAGE:"studio.monitoring.error_message",DURATION_MS:"studio.monitoring.duration_ms",USER_ID:"studio.monitoring.user_id",REQUEST_ID:"studio.monitoring.request_id",USER_AGENT:"studio.monitoring.user_agent",VIRTUAL_MCP_ID:"studio.monitoring.virtual_mcp_id",PROPERTIES:"studio.monitoring.properties"}});import{ExportResultCode as I1i}from"@opentelemetry/core";import{mkdir as $Wt,rename as hWt,writeFile as vWt}from"fs/promises";import{join as G1i}from"path";class zZ{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(i){this.basePath=i.basePath,this.flushThreshold=i.flushThreshold??1000,this.maxBufferBytes=i.maxBufferBytes??10485760,this.partitionKey=i.partitionKey;let u=i.flushIntervalMs??60000;if(u>0&&u<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((t)=>{console.error("[NDJSONExporter] Timer flush failed:",t)})},u),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(i){if(this.isShutdown)return Promise.resolve({code:I1i.FAILED});for(let u of i){let t=JSON.stringify(u),f=this.partitionKey?this.partitionKey(u):"";this.bufferItems.push({partition:f,json:t}),this.bufferBytes+=Buffer.byteLength(t,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:I1i.SUCCESS})).catch((u)=>{return console.error("[NDJSONExporter] Flush failed:",u),{code:I1i.FAILED}});return Promise.resolve({code:I1i.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let u=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=u,u}async doFlush(){if(this.bufferItems.length===0)return;let i=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let u=new Map;for(let l of i){let c=u.get(l.partition);if(!c)c=[],u.set(l.partition,c);c.push(l.json)}let t=await Promise.allSettled(Array.from(u.entries()).map(([l,c])=>this.writeNDJSON(c,l).then(()=>l))),f=t.find((l)=>l.status==="rejected");if(f){let l=new Set;for(let E of t)if(E.status==="fulfilled")l.add(E.value);let c=i.filter((E)=>!l.has(E.partition));this.bufferItems=c.concat(this.bufferItems),this.bufferBytes=0;for(let E of this.bufferItems)this.bufferBytes+=Buffer.byteLength(E.json,"utf8")+1;throw f.reason}}async writeNDJSON(i,u){let t=new Date,f=[String(t.getUTCFullYear()),String(t.getUTCMonth()+1).padStart(2,"0"),String(t.getUTCDate()).padStart(2,"0"),String(t.getUTCHours()).padStart(2,"0")],l=u?G1i(this.basePath,u,...f):G1i(this.basePath,...f);if(!this.knownDirs.has(l))await $Wt(l,{recursive:!0,mode:448}),this.knownDirs.add(l);let c=`${crypto.randomUUID()}.ndjson`,E=G1i(l,`.${c}.tmp`),w=G1i(l,c),$=i.join(`
|
|
177
|
+
Usage: deco services <up|down|status>`),process.exit(1)}}import{homedir as bYt}from"os";function MYt(i){let u=(i??"").trim();return CYt.has(u)?u:"all"}function VYt(i){let u=(i??"").trim();return qYt.has(u)?u:"development"}function $bu(i,u,t){let f=i==="worker"?0:Math.floor(u*0.6);if(t===void 0||t==="")return f;let l=Number(t);return Number.isFinite(l)&&l>=0?l:f}function nZ(i){return i==="true"||i==="1"}function rYt(i){if(i===void 0||i==="")return;return nZ(i)}function T1i(i,u,t){if(u===void 0||u==="")return t;let f=Number(u);if(!Number.isSafeInteger(f)||f<=0)throw Error(`${i} must be a positive integer`);return f}function mYt(i,u){if(u===void 0||u==="")return;let t=Number(u);if(!Number.isSafeInteger(t)||t<=0)throw Error(`${i} must be a positive integer`);return t}function eYt(i,u){if(i===void 0||i==="")return u;return i==="true"||i==="1"}function wbu(i){if(!i)return null;try{let t=new URL(i).hostname;if(t==="localhost"||t==="127.0.0.1"||t==="::1")return null;return i}catch{return null}}function oYt(i){let u=(i??"").trim(),t=u.length>0?u:"user-desktop";if(t==="cluster")return"agent-sandbox";if(!aYt.has(t))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${i}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return t}function U1i(i,u){let t=i.home||u.DATA_DIR||u.DECOCMS_HOME||`${bYt()}/deco`,f=i.localMode,l=i.nodeEnv||VYt(u.NODE_ENV),c=u.NATS_URL||"nats://localhost:4222",E=rYt(u.NATS_TUNNEL_PUBLIC_ENABLED)??!!u.NATS_PUBLIC_URL;return{settings:{nodeEnv:l,port:T1i("PORT",i.port||u.PORT,3000),baseUrl:i.baseUrl||u.BASE_URL,dataDir:t,databasePgSsl:nZ(u.DATABASE_PG_SSL),databasePoolMax:T1i("DATABASE_POOL_MAX",u.DATABASE_POOL_MAX,5),betterAuthSecret:u.BETTER_AUTH_SECRET||"",encryptionKey:u.ENCRYPTION_KEY||"",studioJwtSecret:u.STUDIO_JWT_SECRET??u.MESH_JWT_SECRET,localMode:f,disableRateLimit:nZ(u.DISABLE_RATE_LIMIT),studioProvisionSecretKey:u.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(u.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map(($)=>$.trim().toLowerCase()).filter(Boolean),clickhouseUrl:u.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:mYt("CLICKHOUSE_MAX_MEMORY_USAGE",u.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:u.MONITORING_OTLP_ENDPOINT,otelServiceName:u.OTEL_SERVICE_NAME||"studio",natsPublicUrl:u.NATS_PUBLIC_URL,natsTunnelPublicEnabled:E,natsTunnelSessionTtlSeconds:T1i("NATS_TUNNEL_SESSION_TTL_SECONDS",u.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:u.NATS_OPERATOR_JWT,natsAccountJwt:u.NATS_ACCOUNT_JWT,natsAccountSigningKey:u.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:u.NATS_CREDS,configPath:u.CONFIG_PATH||"./config.json",aiGatewayEnabled:nZ(u.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:u.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:u.DECO_AI_GATEWAY_ADMIN_TOKEN,seatAllowanceCents:T1i("STUDIO_SEAT_ALLOWANCE_CENTS",u.STUDIO_SEAT_ALLOWANCE_CENTS,500),stripeWebhookSecret:u.STRIPE_WEBHOOK_SECRET,stripeSecretKey:u.STRIPE_SECRET_KEY,stripeSeatPriceId:u.STRIPE_SEAT_PRICE_ID,enableDecoImport:nZ(u.ENABLE_DECO_IMPORT),billingEnforced:nZ(u.STUDIO_BILLING_ENFORCED),mcpCacheEnabled:eYt(u.MCP_CACHE_ENABLED,l!=="development"),orgFsPublicSetsJson:u.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:nZ(u.DISABLE_ORGFS_MOUNTS),s3Endpoint:u.S3_ENDPOINT,s3Bucket:u.S3_BUCKET,s3Region:u.S3_REGION||"auto",s3AccessKeyId:u.S3_ACCESS_KEY_ID,s3SecretAccessKey:u.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:u.S3_FORCE_PATH_STYLE===void 0||u.S3_FORCE_PATH_STYLE===""||u.S3_FORCE_PATH_STYLE==="true"||u.S3_FORCE_PATH_STYLE==="1",monitoringS3Bucket:u.MONITORING_S3_BUCKET,monitoringS3Endpoint:u.MONITORING_S3_ENDPOINT,monitoringS3Region:u.MONITORING_S3_REGION,monitoringS3AccessKeyId:u.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:u.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:u.MONITORING_S3_PREFIX,duckdbExtensionDirectory:u.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:u.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:u.DUCKDB_THREADS?Number(u.DUCKDB_THREADS):void 0,isCli:!0,noTui:i.noTui===!0,podName:u.POD_NAME??crypto.randomUUID(),dispatchRole:MYt(u.STUDIO_DISPATCH_ROLE??u.MESH_DISPATCH_ROLE),sandboxProviderKind:oYt(u.STUDIO_SANDBOX_PROVIDER),decoSupabaseUrl:u.DECO_SUPABASE_URL,decoSupabaseServiceKey:u.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:u.FIRECRAWL_API_KEY,commerceDiscoveryInternalApiUrl:u.COMMERCE_DISCOVERY_INTERNAL_API_URL,commerceDiscoveryInternalApiKey:u.COMMERCE_DISCOVERY_INTERNAL_API_KEY,s3TenantBucket:u.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:u.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:u.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:u.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:u.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:u.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:u.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:wbu(u.DATABASE_URL),externalNatsUrl:wbu(c),skipMigrations:i.skipMigrations}}var CYt,qYt,aYt;var A1i=O(()=>{CYt=new Set(["all","worker","api"]);qYt=new Set(["production","development","test"]);aYt=new Set(["agent-sandbox","user-desktop"])});function hbu(i){DM=Object.freeze(i)}function du(){if(!DM)sYt();return DM}function sYt(){if(DM)return;let i={...process.env},u=U1i({port:i.PORT||"3000",home:i.DATA_DIR||i.DECOCMS_HOME||"",localMode:i.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:i.DECO_NO_TUI==="true",vitePort:i.VITE_PORT,baseUrl:i.BASE_URL},i);DM=Object.freeze({...u.settings,databaseUrl:i.DATABASE_URL??"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(i.NATS_URL||"nats://localhost:4222").split(",").map((t)=>t.trim()).filter(Boolean)})}var DM=null;var q0=O(()=>{A1i()});import{context as pYt,propagation as iWt,SpanKind as uWt,SpanStatusCode as gzi}from"@opentelemetry/api";function fWt(i,u){let t=i instanceof Error?i.name:void 0;if(t==="TimeoutError")return"timeout";if(t==="AbortError")return"cancelled";if(u?.aborted)return"cancelled";return null}function lWt(i,u){if(u.startsWith("/_sandbox/")){if(i===404)return"daemon_gone";if(i===409)return"daemon_not_ready"}if(i===404&&u.includes("/sandboxclaims/"))return"claim_gone";return null}function cWt(i,u){if(i===404&&(u==="/.decofile"||u==="/live/_meta"||u==="/sprites.svg"))return"not_a_deco_site";return null}function EWt(i){if(!(i instanceof Error))return!1;if(i.message.includes("socket connection was closed"))return!0;let u=i.code;return u==="ECONNRESET"||u==="EPIPE"}async function wWt(i,u){let t,f;if(i instanceof Request)t=new URL(i.url),f=u?.method??i.method;else if(i instanceof URL)t=i,f=u?.method??"GET";else t=new URL(i),f=u?.method??"GET";let l=`${f} ${t.host}`;return c7.startActiveSpan(l,{kind:uWt.CLIENT,attributes:{"http.request.method":f,"url.full":t.href,"url.scheme":t.protocol.replace(":",""),"url.path":t.pathname,"url.query":t.search||void 0,"server.address":t.hostname,"server.port":t.port?Number(t.port):void 0}},async(c)=>{try{let E=new Headers(u?.headers??(i instanceof Request?i.headers:{}));iWt.inject(pYt.active(),E,{set:(D,_,N)=>D.set(_,N)});let w={...u,headers:E},$=await tWt(i,w);c.setAttribute("http.response.status_code",$.status);let h=$.status===405&&f==="GET"&&(E.get("accept")??"").includes("text/event-stream"),v=$.status>=400?lWt($.status,t.pathname):null,d=$.status>=400?cWt($.status,t.pathname):null;if($.status>=400&&!h&&!v&&!d)c.setStatus({code:gzi.ERROR,message:`HTTP ${$.status}`});else{if(v)c.setAttribute("sandbox.lifecycle",v);if(d)c.setAttribute("preview.probe",d);c.setStatus({code:gzi.OK})}return $}catch(E){let w=u?.signal??(i instanceof Request?i.signal:void 0),$=fWt(E,w??void 0);if($)c.setAttribute("abort.reason",$);else if(EWt(E)&&t.pathname.startsWith("/_sandbox/"))c.setAttribute("sandbox.lifecycle","connection_closed");else c.recordException(E),c.setStatus({code:gzi.ERROR,message:E instanceof Error?E.message:"Fetch failed"});throw E}finally{c.end()}})}function vbu(){globalThis.fetch=wWt}var tWt;var dbu=O(()=>{j1();tWt=globalThis.fetch});import{join as Tzi}from"path";function Z5(){return Tzi(du().dataDir,"logs")}function MW(){return Tzi(du().dataDir,"traces")}function ID(){return Tzi(du().dataDir,"metrics")}function E7(i,u){let t=i[u];return t!=null?String(t):""}function _M(i,u){let t=i[u];return t!=null&&t!==""?String(t):null}function Dbu(i){let{attributes:u}=i,t=u[Gf.IS_ERROR],f=u[Gf.DURATION_MS];return{v:1,id:i.id,type:E7(u,Gf.TYPE)||NM,organization_id:E7(u,Gf.ORGANIZATION_ID),connection_id:E7(u,Gf.CONNECTION_ID),connection_title:E7(u,Gf.CONNECTION_TITLE),tool_name:E7(u,Gf.TOOL_NAME),input:E7(u,Gf.INPUT),output:E7(u,Gf.OUTPUT),is_error:t===!0||t===1||t==="true"?1:0,error_message:_M(u,Gf.ERROR_MESSAGE),duration_ms:typeof f==="number"?f:Number(f)||0,timestamp:new Date(Number(i.timestampNano/1000000n)).toISOString(),user_id:_M(u,Gf.USER_ID),request_id:E7(u,Gf.REQUEST_ID),user_agent:_M(u,Gf.USER_AGENT),virtual_mcp_id:_M(u,Gf.VIRTUAL_MCP_ID),properties:_M(u,Gf.PROPERTIES)}}function P1i(i){return i[0]*1000+i[1]/1e6}function VW(i){return new Date(P1i(i)).toISOString()}var Fzi="mcp.proxy.callTool",Gf,NM="tool_call",qW="llm_call",y1i="decopilot";var C3=O(()=>{q0();Gf={TYPE:"studio.monitoring.type",ORGANIZATION_ID:"studio.monitoring.organization_id",CONNECTION_ID:"studio.monitoring.connection_id",CONNECTION_TITLE:"studio.monitoring.connection_title",TOOL_NAME:"studio.monitoring.tool_name",INPUT:"studio.monitoring.input",OUTPUT:"studio.monitoring.output",IS_ERROR:"studio.monitoring.is_error",ERROR_MESSAGE:"studio.monitoring.error_message",DURATION_MS:"studio.monitoring.duration_ms",USER_ID:"studio.monitoring.user_id",REQUEST_ID:"studio.monitoring.request_id",USER_AGENT:"studio.monitoring.user_agent",VIRTUAL_MCP_ID:"studio.monitoring.virtual_mcp_id",PROPERTIES:"studio.monitoring.properties"}});import{ExportResultCode as I1i}from"@opentelemetry/core";import{mkdir as $Wt,rename as hWt,writeFile as vWt}from"fs/promises";import{join as G1i}from"path";class zZ{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(i){this.basePath=i.basePath,this.flushThreshold=i.flushThreshold??1000,this.maxBufferBytes=i.maxBufferBytes??10485760,this.partitionKey=i.partitionKey;let u=i.flushIntervalMs??60000;if(u>0&&u<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((t)=>{console.error("[NDJSONExporter] Timer flush failed:",t)})},u),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(i){if(this.isShutdown)return Promise.resolve({code:I1i.FAILED});for(let u of i){let t=JSON.stringify(u),f=this.partitionKey?this.partitionKey(u):"";this.bufferItems.push({partition:f,json:t}),this.bufferBytes+=Buffer.byteLength(t,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:I1i.SUCCESS})).catch((u)=>{return console.error("[NDJSONExporter] Flush failed:",u),{code:I1i.FAILED}});return Promise.resolve({code:I1i.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let u=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=u,u}async doFlush(){if(this.bufferItems.length===0)return;let i=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let u=new Map;for(let l of i){let c=u.get(l.partition);if(!c)c=[],u.set(l.partition,c);c.push(l.json)}let t=await Promise.allSettled(Array.from(u.entries()).map(([l,c])=>this.writeNDJSON(c,l).then(()=>l))),f=t.find((l)=>l.status==="rejected");if(f){let l=new Set;for(let E of t)if(E.status==="fulfilled")l.add(E.value);let c=i.filter((E)=>!l.has(E.partition));this.bufferItems=c.concat(this.bufferItems),this.bufferBytes=0;for(let E of this.bufferItems)this.bufferBytes+=Buffer.byteLength(E.json,"utf8")+1;throw f.reason}}async writeNDJSON(i,u){let t=new Date,f=[String(t.getUTCFullYear()),String(t.getUTCMonth()+1).padStart(2,"0"),String(t.getUTCDate()).padStart(2,"0"),String(t.getUTCHours()).padStart(2,"0")],l=u?G1i(this.basePath,u,...f):G1i(this.basePath,...f);if(!this.knownDirs.has(l))await $Wt(l,{recursive:!0,mode:448}),this.knownDirs.add(l);let c=`${crypto.randomUUID()}.ndjson`,E=G1i(l,`.${c}.tmp`),w=G1i(l,c),$=i.join(`
|
|
178
178
|
`)+`
|
|
179
179
|
`;await vWt(E,$,{mode:384}),await hWt(E,w)}}var x1i=()=>{};import{ExportResultCode as dWt}from"@opentelemetry/core";class Uzi{inner;constructor(i){this.inner=new zZ({...i,partitionKey:(u)=>u.organization_id})}export(i,u){let t=[];for(let f of i){if(!DWt.has(f.attributes[Gf.TYPE]))continue;let l={};for(let[$,h]of Object.entries(f.attributes))if(typeof h==="string"||typeof h==="number"||typeof h==="boolean")l[$]=h;let c=f.spanContext?.spanId??crypto.randomUUID(),E=f.hrTime,w=BigInt(E[0])*1000000000n+BigInt(E[1]);t.push(Dbu({id:c,timestampNano:w,attributes:l}))}this.inner.exportRows(t).then((f)=>u(f)).catch(()=>u({code:dWt.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var DWt;var _bu=O(()=>{C3();x1i();DWt=new Set([NM,qW])});import{ExportResultCode as _Wt}from"@opentelemetry/core";import{AggregationTemporality as NWt,DataPointType as Nbu}from"@opentelemetry/sdk-metrics";class Azi{inner;constructor(i){this.inner=new zZ({...i,partitionKey:(u)=>u.organization_id})}selectAggregationTemporality(i){return NWt.DELTA}export(i,u){let t=[];for(let f of i.scopeMetrics)for(let l of f.metrics){let{descriptor:c,dataPointType:E}=l;if(E===Nbu.SUM)for(let w of l.dataPoints){let $=w.attributes;t.push({v:1,name:c.name,type:"sum",unit:c.unit,timestamp:VW(w.endTime),organization_id:String($["organization.id"]??""),connection_id:String($["connection.id"]??""),tool_name:String($["tool.name"]??""),status:String($.status??""),error_type:String($["error.type"]??""),value:w.value,hist_count:0,hist_sum:0,hist_min:0,hist_max:0,hist_boundaries:"[]",hist_bucket_counts:"[]"})}else if(E===Nbu.HISTOGRAM)for(let w of l.dataPoints){let{attributes:$,value:h}=w;t.push({v:1,name:c.name,type:"histogram",unit:c.unit,timestamp:VW(w.endTime),organization_id:String($["organization.id"]??""),connection_id:String($["connection.id"]??""),tool_name:String($["tool.name"]??""),status:String($.status??""),error_type:String($["error.type"]??""),value:h.count,hist_count:h.count,hist_sum:h.sum??0,hist_min:h.min??0,hist_max:h.max??0,hist_boundaries:JSON.stringify(h.buckets.boundaries),hist_bucket_counts:JSON.stringify(h.buckets.counts)})}}this.inner.exportRows(t).then((f)=>u(f)).catch(()=>u({code:_Wt.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var Obu=O(()=>{C3();x1i()});import{ExportResultCode as OWt}from"@opentelemetry/core";function ZWt(i){let u=i.resource,t=u.attributes["service.name"]??"unknown";return{v:1,trace_id:i.spanContext().traceId,span_id:i.spanContext().spanId,parent_span_id:i.parentSpanContext?.spanId||null,name:i.name,kind:i.kind,status:i.status.code,status_message:i.status.message||null,start_time:VW(i.startTime),end_time:VW(i.endTime),duration_ms:P1i(i.endTime)-P1i(i.startTime),service_name:t,attributes:JSON.stringify(i.attributes),events:JSON.stringify(i.events),links:JSON.stringify(i.links),resource:JSON.stringify(u.attributes)}}class yzi{inner;constructor(i){this.inner=new zZ(i)}export(i,u){let t=i.map(ZWt);this.inner.exportRows(t).then((f)=>u(f)).catch(()=>u({code:OWt.FAILED}))}async shutdown(){await this.inner.shutdown()}async forceFlush(){await this.inner.forceFlush()}}var Zbu=O(()=>{C3();x1i()});function rW(i,u=65536){if(i.length<=u&&Buffer.byteLength(i,"utf8")<=u)return i;let t=u-BWt;if(t<=0)return"... [TRUNCATED]".slice(0,u);let f=0,l=0;for(let c of i){let E=c.charCodeAt(0)<=127?1:Buffer.byteLength(c,"utf8");if(f+E>t)break;f+=E,l+=c.length}return i.slice(0,l)+"... [TRUNCATED]"}var BWt;var Pzi=O(()=>{BWt=Buffer.byteLength("... [TRUNCATED]","utf8")});import{NOOP_LOGGER as gWt}from"@opentelemetry/api-logs";function gbu(i){Bbu=i.getLogger(FWt,TWt)}function Fbu(){return Bbu}var FWt="studio.monitoring",TWt="1.0.0",Bbu;var Izi=O(()=>{Bbu=gWt});var Abu={};Xi(Abu,{shouldSkipStudioContext:()=>Gzi,isServerPath:()=>AWt,isHealthPath:()=>OM,SYSTEM_PATHS:()=>Zc});function OM(i){return i===Zc.HEALTH||i===Zc.HEALTH_LIVE||i===Zc.HEALTH_READY}function Tbu(i){return i===Zc.HEALTH||i===Zc.HEALTH_LIVE||i===Zc.HEALTH_READY||i===Zc.METRICS||i.startsWith(HZ.WELL_KNOWN)||i.startsWith(Zc.DBOS_QUEUE_DEPTH_PREFIX)||i===Zc.HOSTED_RUN_PENDING}function Ubu(i){return i.startsWith(HZ.API)}function AWt(i){return Ubu(i)||i==="/mcp"||i.startsWith(HZ.MCP)||i.startsWith(HZ.OAUTH_PROXY)||i.startsWith(HZ.ORG)||i.startsWith(HZ.REPORT)||Tbu(i)}function Gzi(i){return i==="/"||i.startsWith(HZ.API_AUTH)||i==="/api/trigger-callback"||Tbu(i)||!Ubu(i)&&UWt.test(i)}var Zc,HZ,UWt;var k1i=O(()=>{Zc={HEALTH:"/health",HEALTH_LIVE:"/health/live",HEALTH_READY:"/health/ready",METRICS:"/metrics",DBOS_QUEUE_DEPTH_PREFIX:"/dbos-queue-depth/",HOSTED_RUN_PENDING:"/hosted-run-pending"},HZ={API:"/api/",API_AUTH:"/api/auth/",MCP:"/mcp/",OAUTH_PROXY:"/oauth-proxy/",WELL_KNOWN:"/.well-known",ORG:"/org/",REPORT:"/report/"},UWt=/\.(html|css|js|ico|svg|png|jpg|jpeg|gif|webp|woff|woff2)$/});import{SpanStatusCode as xzi}from"@opentelemetry/api";var yWt,PWt=()=>yWt??=At.createHistogram("http.server.request.duration",{description:"Duration of inbound HTTP requests handled by the API.",unit:"s",advice:{explicitBucketBoundaries:[0.005,0.01,0.025,0.05,0.075,0.1,0.25,0.5,0.75,1,2.5,5,7.5,10]}}),kzi=async(i,u)=>{if(OM(i.req.path))return u();let t=i.req.raw,f=new URL(t.url),l=performance.now(),c=Ibu(t),E=jzi(t),w={"http.request.url":t.url,"http.request.method":t.method,"http.request.body.size":t.headers.get("content-length")??void 0,"url.scheme":f.protocol.replace(":",""),"server.address":f.host,"url.query":f.search||void 0,"url.path":f.pathname,"user_agent.original":t.headers.get("user-agent")??void 0,"request.internal":t.headers.has("traceparent"),...E?{"trace.debug.id":E}:{}};await c7.startActiveSpan(`${t.method} ${f.pathname}`,{attributes:w},c,async($)=>{i.set("rootSpan",$);try{await u()}catch(h){$.recordException(h),$.setStatus({code:xzi.ERROR});let v=typeof h==="object"&&h&&"message"in h?String(h.message):JSON.stringify(h);throw console.error("error: ",v,w),h}finally{let h=i.res?.status??500,v=h>=500;$.setStatus({code:v?xzi.ERROR:xzi.OK}),$.setAttribute("http.response.status_code",h);let d=i.get("studioContext");if(d){if(d.auth.user?.id)$.setAttribute("studio.user.id",d.auth.user.id);if(d.auth.apiKey?.id)$.setAttribute("studio.api_key.id",d.auth.apiKey.id);if(d.organization?.id)$.setAttribute("studio.organization.id",d.organization.id)}if(E)Pbu(i.res.headers,E);PWt().record((performance.now()-l)/1000,{"http.request.method":t.method,"http.route":i.req.routePath,"http.response.status_code":h}),$.end()}})};var ybu=O(()=>{j1();k1i()});import{createContextKey as IWt,metrics as Kbu,propagation as GWt,ROOT_CONTEXT as xWt,SpanStatusCode as Gbu,trace as Jzi}from"@opentelemetry/api";import{logs as Sbu,SeverityNumber as UM}from"@opentelemetry/api-logs";import{OTLPLogExporter as xbu}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as kWt}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as jWt}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as XWt}from"@opentelemetry/instrumentation-runtime-node";import{BatchLogRecordProcessor as Xzi,LoggerProvider as kbu}from"@opentelemetry/sdk-logs";import{detectResources as JWt,envDetector as KWt,hostDetector as SWt,osDetector as YWt,processDetector as WWt,resourceFromAttributes as jbu}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as LWt}from"@opentelemetry/sdk-metrics";import{NodeSDK as QWt}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as Xbu,SamplingDecision as mW}from"@opentelemetry/sdk-trace-base";class Wbu{inner;ratio;constructor(i,u){this.inner=i;this.ratio=u}onEmit(i,u){if(i.severityNumber!==void 0&&i.severityNumber>=UM.ERROR||Math.random()<this.ratio)this.inner.onEmit(i,u)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class Lbu{inner;maxBytes;constructor(i,u){this.inner=i;this.maxBytes=u}onEmit(i,u){let t=Gf.OUTPUT,f=i.attributes?.[t];if(typeof f==="string"&&f.length>this.maxBytes){let l=rW(f,this.maxBytes);this.inner.onEmit({...i,attributes:{...i.attributes,[t]:l}},u)}else this.inner.onEmit(i,u)}forceFlush(){return this.inner.forceFlush()}shutdown(){return this.inner.shutdown()}}class Qbu{inner;constructor(i){this.inner=i}shouldSample(i,u,t,f,l,c){let E=i.getValue(Ybu);if(!E){if(this.inner)return this.inner.shouldSample(i,u,t,f,l,c);return{decision:mW.RECORD_AND_SAMPLED}}let w=jzi(E);if(w)return{decision:mW.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":w}};if(this.inner){let $=this.inner.shouldSample(i,u,t,f,l,c);if($.decision===mW.RECORD_AND_SAMPLED){let h=crypto.randomUUID();$.attributes={...$.attributes??{},"trace.debug.id":h}}return $}return{decision:mW.NOT_RECORD}}toString(){return"DebugSampler"}}class nbu{ratio;constructor(i){this.ratio=i}shouldSample(){if(Math.random()<this.ratio)return{decision:mW.RECORD_AND_SAMPLED};return{decision:mW.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}function zbu(){if(Jbu)return;let i=du(),u=!!process.env.OTEL_EXPORTER_OTLP_ENDPOINT,t=u?new jWt:void 0;ZM=i.nodeEnv==="test"?null:new Uzi({basePath:Z5()}),BM=i.nodeEnv==="test"?null:new yzi({basePath:MW()}),gM=i.nodeEnv==="test"?null:new Azi({basePath:ID()}),FM=gM?new LWt({exporter:gM,exportIntervalMillis:60000}):null;let f=process.env.STUDIO_ENV??"production"??"unknown",l={};if(!process.env.OTEL_RESOURCE_ATTRIBUTES?.includes("deployment.environment"))l["deployment.environment"]=f;new QWt({serviceName:i.otelServiceName,resource:jbu(l),metricReaders:[Kzi,...FM?[FM]:[]],sampler:HWt,spanProcessors:[...t?[new Xbu(t,{scheduledDelayMillis:60000,maxExportBatchSize:1000})]:[],...BM?[new Xbu(BM,{scheduledDelayMillis:60000,maxExportBatchSize:250})]:[]],instrumentations:[new XWt]}).start(),At=Kbu.getMeter("studio","1.0.0"),c7=Jzi.getTracer("studio","1.0.0");let E=JWt({detectors:[KWt,SWt,YWt,WWt]}).merge(jbu({"service.name":i.otelServiceName,...l})),w=[];if(u){let d=f==="prod"||f==="production"?1:0.1,D=process.env.INFRA_LOG_SAMPLE_RATIO,_=d;if(D!==void 0){let N=Number(D);if(Number.isFinite(N)&&N>=0&&N<=1)_=N;else console.warn(`[observability] Ignoring invalid INFRA_LOG_SAMPLE_RATIO="${D}" (expected 0..1); using ${d}`)}w.push(new Wbu(new Xzi(new xbu),_))}TM=new kbu({resource:E,processors:w}),Sbu.setGlobalLoggerProvider(TM),Hbu=TM.getLogger("studio","1.0.0");let $=i.monitoringOtlpEndpoint??process.env.OTEL_EXPORTER_OTLP_ENDPOINT,h=[];if($){let v=$.replace(/\/$/,""),d=v.endsWith("/v1/logs")?v:`${v}/v1/logs`;h.push(new Lbu(new Xzi(new xbu({url:d})),8000))}if(ZM)h.push(new Xzi(ZM,{scheduledDelayMillis:60000,maxExportBatchSize:250}));j1i=new kbu({resource:E,processors:h}),gbu(j1i),vbu(),Jbu=!0}async function th(){let u=(await Promise.allSettled([TM?TM.forceFlush():Promise.resolve(),(async()=>{if(j1i)await j1i.forceFlush();if(ZM)await ZM.forceFlush()})(),(async()=>{let t=Jzi.getTracerProvider();if("forceFlush"in t)await t.forceFlush();if(BM)await BM.forceFlush()})(),(async()=>{if(FM)await FM.forceFlush();if(gM)await gM.forceFlush()})()])).find((t)=>t.status==="rejected");if(u)throw u.reason}function Wzi(i,u,t){return c7.startActiveSpan(i,{attributes:t},async(f)=>{try{let l=await u(f);return f.setStatus({code:Gbu.OK}),l}catch(l){let c=l instanceof Error?l:Error(String(l??"unknown"));throw f.setStatus({code:Gbu.ERROR,message:c.message}),f.recordException(c),l}finally{f.end()}})}var nWt="__d",Ybu,zWt=1,jzi=(i)=>{let t=new URL(i.url).searchParams.get(nWt);if(t==="")return crypto.randomUUID();if(!t)t=i.headers.get("x-trace-debug-id");return t},Pbu=(i,u)=>{try{i.set("x-trace-debug-id",u)}catch{}},Kzi,HWt,ZM=null,BM=null,gM=null,FM=null,TM=null,j1i=null,Jbu=!1,c7,At,Hbu,Szi=(i,u,t)=>{let f={},l=t,c=t[t.length-1];if(c!==null&&typeof c==="object"&&!Array.isArray(c)&&!(c instanceof Error)&&Object.getPrototypeOf(c)===Object.prototype)f=c,l=t.slice(0,-1);let E=l.map((w)=>{if(w instanceof Error)return`${w.name}: ${w.message}`;if(typeof w==="object")try{return JSON.stringify(w)}catch{return"[Object]"}return String(w)}).join(" ");Hbu.emit({severityNumber:i,severityText:u,body:E,attributes:{"log.source":"console",...f}})},Yzi,Ibu=(i)=>{return GWt.extract(xWt,i.headers,{get:(t,f)=>t.get(f)??void 0,keys:(t)=>[...t.keys()]}).setValue(Ybu,i)};var j1=O(()=>{dbu();_bu();Obu();Zbu();C3();Pzi();q0();Izi();ybu();Ybu=IWt("Current request");Kzi=new kWt({preventServerStart:!0}),HWt=new Qbu(new nbu(zWt));c7=Jzi.getTracer("studio","1.0.0"),At=Kbu.getMeter("studio","1.0.0"),Hbu=Sbu.getLogger("studio","1.0.0"),Yzi={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...i)=>{Szi(UM.ERROR,"ERROR",i),Yzi.error(...i)};console.warn=(...i)=>{Szi(UM.WARN,"WARN",i),Yzi.warn(...i)};console.debug=(...i)=>{Szi(UM.DEBUG,"DEBUG",i),Yzi.debug(...i)}});function RZ(){try{return process.memoryUsage()}catch{return null}}import{Session as RWt}from"inspector";function bZ(i,u){return new Promise((t,f)=>eW.post(i,u,(l,c)=>l?f(l):t(c??{})))}async function Rbu(i){try{return eW=new RWt,eW.connect(),await bZ("Profiler.enable"),await bZ("Profiler.setSamplingInterval",{interval:i}),await bZ("Profiler.start"),oW=!0,!0}catch{return oW=!1,eW=null,!1}}function bWt(i,u){let{nodes:t,samples:f,timeDeltas:l}=i;if(!f?.length)return null;let c=new Map,E=new Map;for(let Z of t){c.set(Z.id,Z);for(let B of Z.children??[])E.set(B,Z.id)}let w=Math.max(1,u)*1000,$=0,h=new Map;for(let Z=f.length-1;Z>=0;Z--){$+=l[Z]??0;let B=f[Z];if(B!==void 0)h.set(B,(h.get(B)??0)+1);if($>=w)break}let v=-1,d=0;for(let[Z,B]of h)if(B>d)d=B,v=Z;if(v<0)return null;let D=[],_=new Set,N=v;while(N!=null&&!_.has(N)){_.add(N);let Z=c.get(N);if(!Z)break;let B=Z.callFrame,g=B.url?` ${B.url}:${B.lineNumber+1}`:"";D.push(`${B.functionName||"(anonymous)"}${g}`),N=E.get(N)}return D}async function bbu(i){if(!oW||!eW||aW)return null;aW=!0;try{let{profile:u}=await bZ("Profiler.stop"),t=u?bWt(u,i):null;return await bZ("Profiler.start"),t}catch{return oW=!1,null}finally{aW=!1}}async function Cbu(){if(!oW||!eW||aW)return;aW=!0;try{await bZ("Profiler.stop"),await bZ("Profiler.start")}catch{oW=!1}finally{aW=!1}}var eW=null,oW=!1,aW=!1;var Mbu=()=>{};function Vbu(){if(Lzi)return;let i=performance.now()+Qzi;Lzi=setInterval(()=>{let u=performance.now();qbu=Math.max(0,u-i),i=u+Qzi},Qzi),Lzi.unref?.()}function rbu(){return Vbu(),qbu}function mbu(){if(Vbu(),process.env.EVENT_LOOP_MONITOR!=="1")return()=>{};let i=Number(process.env.EVENT_LOOP_INTERVAL_MS??250),u=Number(process.env.EVENT_LOOP_SPIKE_MS??100),t=process.env.EVENT_LOOP_PROFILE==="1",f=Number(process.env.EVENT_LOOP_PROFILE_MS??1000),l=Number(process.env.EVENT_LOOP_PROFILE_INTERVAL_US??1e4),c=30000,E=performance.now();if(t)Rbu(l).then((h)=>{console.warn(JSON.stringify({msg:"event-loop-profiler",status:h?"started":"unavailable",intervalUs:l}))});let w=At.createHistogram("eventloop.delay",{description:"Event-loop lag measured as timer scheduling drift",unit:"ms"}),$=performance.now()+i;return X1i=setInterval(()=>{let h=performance.now(),v=Math.max(0,h-$);if($=h+i,w.record(v),v>u){let d=RZ();console.warn(JSON.stringify({msg:"event-loop-stall",ts:new Date().toISOString(),lagMs:Math.round(v),rss:d?.rss,heapUsed:d?.heapUsed,heapTotal:d?.heapTotal,external:d?.external}))}if(t){if(v>f)bbu(Math.round(v)).then((d)=>{if(d?.length)console.warn(JSON.stringify({msg:"event-loop-stall-profile",ts:new Date().toISOString(),lagMs:Math.round(v),stack:d}))}),E=h;else if(h-E>c)Cbu(),E=h}},i),X1i.unref?.(),()=>{if(X1i)clearInterval(X1i)}}var X1i,Lzi,qbu=0,Qzi=500;var nzi=O(()=>{j1();Mbu()});var tCu={};Xi(tCu,{withSslmode:()=>zzi,getDbDialect:()=>yM,getDb:()=>m0,getDatabaseUrl:()=>w7,createDatabase:()=>uCu,closeDatabase:()=>$7});import{Kysely as CWt,PostgresDialect as obu}from"kysely";import{Pool as sbu}from"pg";function rWt(i){let u=i.connect.bind(i);return i.connect=(t)=>{if(typeof t==="function")return u(t);let f=performance.now(),l=J1i(),c=i.idleCount===0&&i.totalCount>=l,E=i.idleCount;return u().then((w)=>{let $=performance.now()-f;if(ebu().record($,{"db.pool.outcome":c?"contended":"available"}),$>qWt)if(c)console.error("Slow db pool acquire \u2014 pool saturated:",{waitMs:$,total:i.totalCount,idle:i.idleCount,waiting:i.waitingCount,max:l});else console.warn("Slow db pool acquire \u2014 event-loop lag (not pool):",{waitMs:$,idleAtStart:E,total:i.totalCount,max:l});return w},(w)=>{throw ebu().record(performance.now()-f,{"db.pool.outcome":"error"}),w})},i}function iCu(){try{return du().databasePgSsl}catch{return!1}}function J1i(){try{return du().databasePoolMax}catch{return 10}}function mWt(i){let u=rWt(new sbu({connectionString:i,max:J1i(),ssl:iCu(),...pbu})),t=new obu({pool:u});return{type:"postgres",db:new CWt({dialect:t,log:VWt(u)}),pool:u}}function w7(){return du().databaseUrl}function zzi(i,u){if(!u)return i;let t=new URL(i);if(!t.searchParams.has("sslmode"))t.searchParams.set("sslmode","verify-full");return t.toString()}function yM(i){let u=i||w7();return new obu({pool:new sbu({connectionString:u,max:J1i(),ssl:iCu(),...pbu})})}function uCu(i){let u=i||w7();return mWt(u)}async function $7(i){if(await i.db.destroy(),!i.pool.ended)await i.pool.end();if(i===AM)AM=null}function m0(){if(!AM)AM=uCu(w7());return AM}var MWt=()=>At.createHistogram("db.query.duration",{description:"Database query execution duration in milliseconds",unit:"ms"}),ebu=()=>At.createHistogram("db.pool.acquire.duration",{description:"Time spent waiting to acquire a connection from the pool",unit:"ms"}),abu=400,qWt=100,VWt=(i)=>(u)=>{let t={"db.statement":u.query.sql,"db.status":u.level==="error"?"error":"success"};if(u.queryDurationMillis>abu){let f=rbu(),l=f>abu/2;console.error(l?"Slow query measurement \u2014 likely event-loop lag, not slow SQL:":"Slow query detected:",{durationMs:u.queryDurationMillis,eventLoopLagMs:Math.round(f),sql:u.query.sql,pool:{total:i.totalCount,idle:i.idleCount,waiting:i.waitingCount,max:J1i()}})}if(MWt().record(u.queryDurationMillis,t),u.level==="error")console.error("Query failed:",{durationMs:u.queryDurationMillis,error:u.error,sql:u.query.sql})},pbu,AM=null;var H6=O(()=>{q0();j1();nzi();pbu={keepAlive:!0,keepAliveInitialDelayMillis:1e4,idleTimeoutMillis:300000,connectionTimeoutMillis:30000,allowExitOnIdle:!0}});function lCu(i){let{port:u,query:t}=i,{protocol:f,path:l,hostname:c}=i;if(f&&f.slice(-1)!==":")f+=":";if(u)c+=`:${u}`;if(l&&l.charAt(0)!=="/")l=`/${l}`;let E=t?fCu.buildQueryString(t):"";if(E&&E[0]!=="?")E=`?${E}`;let w="";if(i.username!=null||i.password!=null){let h=i.username??"",v=i.password??"";w=`${h}:${v}@`}let $="";if(i.fragment)$=`#${i.fragment}`;return`${f}//${w}${c}${l}${E}${$}`}var fCu;var cCu=O(()=>{fCu=j(Tui(),1)});var ECu="UNSIGNED-PAYLOAD",wCu="X-Amz-Content-Sha256";class K1i{signer;constructor(i){let u={service:i.signingName||i.service||"s3",uriEscapePath:i.uriEscapePath||!1,applyChecksum:i.applyChecksum||!1,...i};this.signer=new $Cu.SignatureV4MultiRegion(u)}presign(i,{unsignableHeaders:u=new Set,hoistableHeaders:t=new Set,unhoistableHeaders:f=new Set,...l}={}){return this.prepareRequest(i,{unsignableHeaders:u,unhoistableHeaders:f,hoistableHeaders:t}),this.signer.presign(i,{expiresIn:900,unsignableHeaders:u,unhoistableHeaders:f,...l})}presignWithCredentials(i,u,{unsignableHeaders:t=new Set,hoistableHeaders:f=new Set,unhoistableHeaders:l=new Set,...c}={}){return this.prepareRequest(i,{unsignableHeaders:t,unhoistableHeaders:l,hoistableHeaders:f}),this.signer.presignWithCredentials(i,u,{expiresIn:900,unsignableHeaders:t,unhoistableHeaders:l,...c})}prepareRequest(i,{unsignableHeaders:u=new Set,unhoistableHeaders:t=new Set,hoistableHeaders:f=new Set}={}){u.add("content-type"),Object.keys(i.headers).map((w)=>w.toLowerCase()).filter((w)=>w.startsWith("x-amz-server-side-encryption")).forEach((w)=>{if(!f.has(w))t.add(w)}),i.headers[wCu]=ECu;let l=i.headers.host,c=i.port,E=`${i.hostname}${i.port!=null?":"+c:""}`;if(!l||l===i.hostname&&i.port!=null)i.headers.host=E}}var $Cu;var Hzi=O(()=>{$Cu=j(vW(),1)});var hCu,vCu,S1i=async(i,u,t={})=>{let f,l;if(typeof i.config.endpointProvider==="function"){let D=(await hCu.getEndpointFromInstructions(u.input,u.constructor,i.config)).properties?.authSchemes?.[0];if(D?.name==="sigv4a")l=D?.signingRegionSet?.join(",");else l=D?.signingRegion;f=new K1i({...i.config,signingName:D?.signingName,region:async()=>l})}else f=new K1i(i.config);let c=(d,D)=>async(_)=>{let{request:N}=_;if(!vCu.HttpRequest.isInstance(N))throw Error("Request to be presigned is not an valid HTTP request.");delete N.headers["amz-sdk-invocation-id"],delete N.headers["amz-sdk-request"],delete N.headers["x-amz-user-agent"];let Z,B={...t,signingRegion:t.signingRegion??D.signing_region??l,signingService:t.signingService??D.signing_service};if(D.s3ExpressIdentity)Z=await f.presignWithCredentials(N,D.s3ExpressIdentity,B);else Z=await f.presign(N,B);return{response:{},output:{$metadata:{httpStatusCode:200},presigned:Z}}},E="presignInterceptMiddleware",w=i.middlewareStack.clone();w.addRelativeTo(c,{name:E,relation:"before",toMiddleware:"awsAuthMiddleware",override:!0});let $=u.resolveMiddleware(w,i.config,{}),{output:h}=await $({input:u.input}),{presigned:v}=h;return lCu(v)};var dCu=O(()=>{cCu();Hzi();hCu=j(Nu(),1),vCu=j(r4(),1)});var DCu=O(()=>{dCu();Hzi()});import{extname as eWt}from"path";function td(i){let u;try{u=decodeURIComponent(i)}catch{u=i}let f=u.replace(/\0/g,"").replace(/[\x00-\x1f\x7f]/g,"").replace(/\\/g,"/").split("/"),l=[];for(let c of f)if(c==="..")l.pop();else if(c!=="."&&c!=="")l.push(c);return l.join("/")}function h7(i,u){let t=td(u);if(!t)throw Error("Key is empty after sanitization");return`${i}/${t}`}function _Cu(i,u){if(!u)return`${i}/`;let t=td(u);return`${i}/${t}${t.endsWith("/")?"":"/"}`}function sW(i,u,t){let f=t.split("/").map(encodeURIComponent).join("/");return`${i}/api/${encodeURIComponent(u)}/files/${f}`}function Rzi(i,u){let t=`${i}/`;if(u.startsWith(t))return u.slice(t.length);return u}function R6(i){let u=eWt(i).toLowerCase();return aWt[u]??"application/octet-stream"}function Y1i(i){let u=i.split(";")[0].trim();if(oWt.has(u))return!0;if(u.startsWith("text/"))return!0;return!1}var aWt,oWt;var fd=O(()=>{aWt={".json":"application/json",".html":"text/html",".htm":"text/html",".css":"text/css",".js":"application/javascript",".mjs":"application/javascript",".ts":"text/typescript",".txt":"text/plain",".md":"text/markdown",".csv":"text/csv",".xml":"application/xml",".svg":"image/svg+xml",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp",".pdf":"application/pdf",".zip":"application/zip",".gz":"application/gzip",".tar":"application/x-tar",".wasm":"application/wasm",".yaml":"application/yaml",".yml":"application/yaml",".toml":"application/toml"};oWt=new Set(["application/json","text/html","text/css","application/javascript","text/typescript","text/plain","text/markdown","text/csv","application/xml","image/svg+xml","application/yaml","application/toml"])});class bzi{client;bucket;constructor(i){this.bucket=i.bucket,this.client=new lE({endpoint:i.endpoint,region:i.region,credentials:{accessKeyId:i.accessKeyId,secretAccessKey:i.secretAccessKey},forcePathStyle:i.forcePathStyle})}async getBytesOrPresign(i,u,t){let f=h7(i,u),l=await this.client.send(new N5({Bucket:this.bucket,Key:f})),c=l.ContentLength??0,E=l.ContentType??R6(u);if(c>t.presignWhenLargerThan){let v=await S1i(this.client,new yD({Bucket:this.bucket,Key:f}),{expiresIn:t.presignExpiresIn??3600});return{error:"FILE_TOO_LARGE",size:c,maxInlineSize:t.presignWhenLargerThan,presignedUrl:v,contentType:E}}let $=await(await this.client.send(new yD({Bucket:this.bucket,Key:f}))).Body.transformToByteArray(),h=Y1i(E);return{content:h?new TextDecoder().decode($):Buffer.from($).toString("base64"),contentType:E,encoding:h?"utf-8":"base64",size:c,lastModified:l.LastModified,etag:l.ETag}}async getBytes(i,u){let t=h7(i,u);return(await this.client.send(new yD({Bucket:this.bucket,Key:t}))).Body.transformToByteArray()}async put(i,u,t,f){let l=h7(i,u),c=f?.contentType??R6(u);return{etag:(await this.client.send(new ud({Bucket:this.bucket,Key:l,Body:typeof t==="string"?Buffer.from(t,"utf-8"):t,ContentType:c}))).ETag,key:u}}async list(i,u){let t=_Cu(i,u?.prefix),f=await this.client.send(new R3({Bucket:this.bucket,Prefix:t,MaxKeys:u?.maxKeys??1000,ContinuationToken:u?.continuationToken,Delimiter:u?.delimiter})),l=f.CommonPrefixes?.map((c)=>Rzi(i,c.Prefix??"")).filter(Boolean);return{objects:(f.Contents??[]).map((c)=>({key:Rzi(i,c.Key??""),size:c.Size??0,lastModified:c.LastModified,etag:c.ETag})),isTruncated:f.IsTruncated??!1,nextContinuationToken:f.NextContinuationToken,commonPrefixes:l&&l.length>0?l:void 0}}async delete(i,u){let t=h7(i,u);await this.client.send(new LW({Bucket:this.bucket,Key:t}))}async head(i,u){let t=h7(i,u),f=await this.client.send(new N5({Bucket:this.bucket,Key:t}));return{contentType:f.ContentType??R6(u),size:f.ContentLength??0,lastModified:f.LastModified,etag:f.ETag}}async presignedGetUrl(i,u,t=3600,f){let l=h7(i,u);return S1i(this.client,new yD({Bucket:this.bucket,Key:l}),{expiresIn:t})}async presignedPutUrl(i,u,t=3600,f){let l=h7(i,u);return S1i(this.client,new ud({Bucket:this.bucket,Key:l,ContentType:f}),{expiresIn:t})}}var NCu=O(()=>{wM();DCu();fd()});function sWt(){let i=du();return!!(i.s3Endpoint&&i.s3Bucket&&i.s3AccessKeyId&&i.s3SecretAccessKey)}function mE(){if(PM!==void 0)return PM;if(!sWt())return PM=null,null;let i=du();return PM=new bzi({endpoint:i.s3Endpoint,bucket:i.s3Bucket,region:i.s3Region,accessKeyId:i.s3AccessKeyId,secretAccessKey:i.s3SecretAccessKey,forcePathStyle:i.s3ForcePathStyle}),PM}var PM;var v7=O(()=>{q0();NCu()});function M3(i,u){return{getBytesOrPresign:(t,f)=>i.getBytesOrPresign(u,t,f),getBytes:(t)=>i.getBytes(u,t),put:(t,f,l)=>i.put(u,t,f,l),list:(t)=>i.list(u,t),delete:(t)=>i.delete(u,t),head:(t)=>i.head(u,t),presignedGetUrl:(t,f,l)=>i.presignedGetUrl(u,t,f,l),presignedPutUrl:(t,f,l)=>i.presignedPutUrl(u,t,f,l)}}import{createHash as pWt}from"crypto";function OCu(i){let u=i;while(u?.[W1i])u=u[W1i];return u}function GM(i){let{objectStorage:u,baseUrl:t,orgSlug:f,prefix:l="connection-icons",maxBytes:c=uLt,dryRun:E=!1}=i;return async(w)=>{if(typeof w!=="string")return w;let $=w.match(iLt);if(!$)return w;if(!u||!f)return w;let[,h,v]=$,d=h.toLowerCase(),D=fLt[d];if(!D)return w;if(Math.floor(v.length*3/4)>c)return console.warn(`[asset-hoister] asset exceeds ${c} bytes, keeping inline`),w;let _=Buffer.from(v,"base64"),N=pWt("sha256").update(_).digest("hex"),Z=`${l}/${N}.${D}`;if(E)return sW(t,f,Z);try{return await u.put(Z,_,{contentType:d}),sW(t,f,Z)}catch(B){return console.error("[asset-hoister] upload failed, keeping inline asset:",B),w}}}async function L1i(i,u,t=0){if(t>tLt)return i;if(typeof i==="string")return await u(i)??i;if(Array.isArray(i)){let f=await Promise.all(i.map((l)=>L1i(l,u,t+1)));return f.some((l,c)=>l!==i[c])?f:i}if(i!==null&&typeof i==="object"){let f=Object.entries(i),l=await Promise.all(f.map(([,w])=>L1i(w,u,t+1))),c=!1,E={};return f.forEach(([w,$],h)=>{if(E[w]=l[h],l[h]!==$)c=!0}),c?E:i}return i}function Q1i(i,u){return L1i(i,u)}async function IM(i,u){let t={...i};if(typeof t.icon==="string")t.icon=await u(t.icon);if(t.metadata!==null&&typeof t.metadata==="object")t.metadata=await L1i(t.metadata,u);return t}function lLt(i,u){return new Proxy(i,{get(t,f,l){if(f===W1i)return t;if(f==="create")return async(E)=>t.create(await IM(E,u));if(f==="createNew")return async(E)=>t.createNew(await IM(E,u));if(f==="update")return async(E,w)=>t.update(E,await IM(w,u));let c=Reflect.get(t,f,l);return typeof c==="function"?c.bind(t):c}})}function cLt(i,u){return new Proxy(i,{get(t,f,l){if(f===W1i)return t;if(f==="create")return async(E,w,$,h)=>t.create(E,w,await IM($,u),h);if(f==="update")return async(E,w,$)=>t.update(E,w,await IM($,u));let c=Reflect.get(t,f,l);return typeof c==="function"?c.bind(t):c}})}function Czi(i,u){let t=GM(u);if(ZCu(i.connections))i.connections=lLt(OCu(i.connections),t);if(ZCu(i.virtualMcps))i.virtualMcps=cLt(OCu(i.virtualMcps),t)}function ZCu(i){return i!==null&&typeof i==="object"}var iLt,uLt=5242880,tLt=64,W1i,fLt;var n1i=O(()=>{fd();iLt=/^data:((?:image|audio|video)\/[^;,]+)(?:;[^,]+)?;base64,(.+)$/is,W1i=Symbol("assetHoistingTarget"),fLt={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/x-icon":"ico","image/vnd.microsoft.icon":"ico","audio/mpeg":"mp3","audio/mp4":"m4a","audio/wav":"wav","audio/x-wav":"wav","audio/ogg":"ogg","audio/webm":"weba","audio/aac":"aac","video/mp4":"mp4","video/webm":"webm","video/ogg":"ogv","video/quicktime":"mov"}});function El(){let i=du();if(i.baseUrl)return i.baseUrl;return`http://localhost:${i.port??3000}`}function z1i(){return`http://localhost:${du().port??3000}`}function q3(){return process.env.STUDIO_PUBLIC_URL??process.env.MESH_PUBLIC_URL??El()}var b6=O(()=>{q0()});var BCu={};Xi(BCu,{backfillThreadAssetsCommand:()=>ELt});import{sql as Mzi}from"kysely";async function ELt(i){let{dryRun:u,batch:t}=i,f=i.baseUrl??El(),l=mE();if(!l)return console.error("[backfill-assets] Object storage (S3) is not configured \u2014 cannot hoist "+"inline media. Set S3_ENDPOINT/S3_BUCKET/S3_ACCESS_KEY_ID/S3_SECRET_ACCESS_KEY and retry."),1;if(/^https?:\/\/localhost(:|\/|$)/.test(f))console.warn(`[backfill-assets] base URL resolves to "${f}" \u2014 set BASE_URL `+"(or pass --base-url) to the public origin, or stored media URLs will be wrong.");let c=m0(),{db:E}=c,w;if(i.org){let Z=await E.selectFrom("organization").select(["id","slug"]).where((B)=>B.or([B("id","=",i.org),B("slug","=",i.org)])).executeTakeFirst();if(!Z)return console.error(`[backfill-assets] org "${i.org}" not found (slug or id).`),await $7(c).catch(()=>{}),1;w=Z.id,console.log(`[backfill-assets] scoped to org ${Z.slug??Z.id} (${Z.id})`)}console.log(`[backfill-assets] starting${u?" (dry-run)":""} \u2014 target=${i.target} baseUrl=${f} batch=${t}${i.limit?` limit=${i.limit}`:""}`);let $=new Map,h=(Z,B,g)=>{let F=`${g}\x00${Z}`,T=$.get(F);if(T)return T;let U=GM({objectStorage:M3(l,Z),baseUrl:f,orgSlug:B??void 0,prefix:g,dryRun:u});return $.set(F,U),U},v=async(Z,B,g,F)=>{let T="";for(;;){let U=i.limit?i.limit-g.scanned:1/0;if(U<=0)break;let A=await Z(T,Math.min(t,U));if(A.length===0)break;for(let I of A)T=I.id,g.scanned++,await B(I);console.log(`[backfill-assets] ${F}: scanned=${g.scanned} ${u?"would-change":"changed"}=${g.changed} errors=${g.errors} cursor=${T}`)}},d={scanned:0,changed:0,errors:0},D={scanned:0,changed:0,errors:0},_={scanned:0,changed:0,errors:0};try{if(i.target==="all"||i.target==="threads")await v((Z,B)=>E.selectFrom("thread_messages as tm").innerJoin("threads as t","t.id","tm.thread_id").innerJoin("organization as o","o.id","t.organization_id").select(["tm.id as id",Mzi`tm.parts`.as("parts"),Mzi`tm.metadata`.as("metadata"),"t.organization_id as orgId","o.slug as orgSlug"]).where("tm.id",">",Z).$if(!!w,(g)=>g.where("t.organization_id","=",w)).orderBy("tm.id","asc").limit(B).execute(),async(Z)=>{try{if(!xM(Z.parts)&&!xM(Z.metadata))return;let B=h(Z.orgId,Z.orgSlug,"thread-assets"),g=JSON.parse(Z.parts),F=await Q1i(g,B),T=F!==g,U=Z.metadata!==null?JSON.parse(Z.metadata):null,A=await Q1i(U,B),I=A!==U;if(!T&&!I)return;if(d.changed++,u)return;await E.updateTable("thread_messages").set({parts:T?JSON.stringify(F):Z.parts,metadata:I?JSON.stringify(A):Z.metadata}).where("id","=",Z.id).execute()}catch(B){d.errors++,console.error(`[backfill-assets] thread_message ${Z.id} failed, skipping:`,B)}},d,"threads");if(i.target==="all"||i.target==="connections")await v((Z,B)=>E.selectFrom("connections as c").innerJoin("organization as o","o.id","c.organization_id").select(["c.id as id","c.icon as icon",Mzi`c.metadata`.as("metadata"),"c.organization_id as orgId","o.slug as orgSlug"]).where("c.id",">",Z).$if(!!w,(g)=>g.where("c.organization_id","=",w)).orderBy("c.id","asc").limit(B).execute(),async(Z)=>{try{if(!xM(Z.icon)&&!xM(Z.metadata))return;let B=h(Z.orgId,Z.orgSlug,"connection-icons"),g=Z.icon!==null?await B(Z.icon):Z.icon,F=g!==Z.icon,T=Z.metadata!==null?JSON.parse(Z.metadata):null,U=await Q1i(T,B),A=U!==T;if(!F&&!A)return;if(D.changed++,u)return;await E.updateTable("connections").set({icon:F?g??null:Z.icon,metadata:A?JSON.stringify(U):Z.metadata}).where("id","=",Z.id).execute()}catch(B){D.errors++,console.error(`[backfill-assets] connection ${Z.id} failed, skipping:`,B)}},D,"connections");if(i.target==="all"||i.target==="organizations")await v((Z,B)=>E.selectFrom("organization as o").select(["o.id as id","o.logo as logo","o.slug as orgSlug"]).where("o.id",">",Z).$if(!!w,(g)=>g.where("o.id","=",w)).orderBy("o.id","asc").limit(B).execute(),async(Z)=>{try{if(!xM(Z.logo))return;let g=await h(Z.id,Z.orgSlug,"org-logos")(Z.logo);if(g===Z.logo)return;if(_.changed++,u)return;await E.updateTable("organization").set({logo:g??null}).where("id","=",Z.id).execute()}catch(B){_.errors++,console.error(`[backfill-assets] organization ${Z.id} failed, skipping:`,B)}},_,"organizations")}finally{await $7(c).catch(()=>{})}let N=u?"would-change":"changed";return console.log("[backfill-assets] done \u2014 "+`threads(scanned=${d.scanned} ${N}=${d.changed} errors=${d.errors}) connections(scanned=${D.scanned} ${N}=${D.changed} errors=${D.errors}) organizations(scanned=${_.scanned} ${N}=${_.changed} errors=${_.errors})`),d.errors+D.errors+_.errors>0?1:0}var xM=(i)=>i!==null&&(i.includes("data:image/")||i.includes("data:audio/")||i.includes("data:video/"));var gCu=O(()=>{H6();v7();n1i();b6()});async function FCu(i){let u,t,f=new Promise((E,w)=>{u=E,t=w});f.catch(()=>{});let l=!1,c=Bun.serve({port:i.port??0,hostname:"127.0.0.1",fetch(E){if(l)return new Response("",{status:204});let w=new URL(E.url),$=w.searchParams.get("code");if(w.searchParams.get("state")!==i.expectedState)return l=!0,t(Error("OAuth state mismatch")),new Response("State mismatch \u2014 close this tab.",{status:400});if(!$)return l=!0,t(Error("OAuth callback missing code")),new Response("Missing code \u2014 close this tab.",{status:400});return l=!0,u({code:$}),new Response(null,{status:302,headers:{location:i.successRedirectUrl}})}});return{url:`http://127.0.0.1:${c.port}`,waitForCallback:()=>f,close:()=>c.stop(!0)}}import{createHash as wLt,randomBytes as $Lt}from"crypto";function UCu(){let i=TCu($Lt(32)),u=TCu(wLt("sha256").update(i).digest());return{verifier:i,challenge:u}}function TCu(i){return i.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var ACu=()=>{};import{chmod as hLt,mkdir as vLt,readdir as dLt,readFile as DLt,rename as _Lt,rm as yCu,writeFile as NLt}from"fs/promises";import{dirname as OLt,join as Vzi}from"path";function H1i(i,u){if(!u)return Vzi(i,"session.json");return Vzi(i,`session.${ZLt(u)}.json`)}function ZLt(i){let u=i;try{u=new URL(i).host}catch{}return u.replace(/[^a-zA-Z0-9.-]/g,"_")||"default"}async function qzi(i){try{let u=await DLt(i,"utf8"),t=JSON.parse(u);if(!BLt(t))return null;return t}catch{return null}}async function PCu(i){try{return(await dLt(i)).filter((t)=>/^session(\..+)?\.json$/.test(t)).map((t)=>Vzi(i,t))}catch{return[]}}async function R1i(i,u){let t=await qzi(H1i(i,u));if(t)return t;if(u)return qzi(H1i(i));for(let f of await PCu(i)){let l=await qzi(f);if(l)return l}return null}async function pW(i,u){let t=H1i(i,u.target);await vLt(OLt(t),{recursive:!0});let f=`${t}.tmp`;await NLt(f,JSON.stringify(u,null,2),{mode:384}),await hLt(f,384),await _Lt(f,t)}async function ICu(i,u){if(u){await yCu(H1i(i,u),{force:!0});return}for(let t of await PCu(i))await yCu(t,{force:!0})}function BLt(i){if(!i||typeof i!=="object")return!1;let u=i;if(typeof u.target!=="string"||typeof u.clientId!=="string"||typeof u.accessToken!=="string"||typeof u.createdAt!=="string")return!1;if(!u.user||typeof u.user!=="object")return!1;if(typeof u.user.sub!=="string")return!1;return!0}var kM=()=>{};var GCu={};Xi(GCu,{performInteractiveLogin:()=>b1i,loginCommand:()=>ALt});import{spawn as gLt}from"child_process";import{randomUUID as FLt}from"crypto";async function b1i(i={}){let u=(i.target??TLt).replace(/\/$/,""),t=i.fetch??fetch,f=i.openBrowser??GLt,l=FLt(),c=UCu(),E=await FCu({expectedState:l,successRedirectUrl:`${u}/cli/auth-success`});try{let w=`${E.url}/`,$=await yLt(t,u,w),h=new URLSearchParams({client_id:$,redirect_uri:w,response_type:"code",state:l,scope:ULt,code_challenge:c.challenge,code_challenge_method:"S256"}),v=`${u}/login?${h.toString()}`;console.log(`Opening ${v} in your browser...`),await f(v);let{code:d}=await E.waitForCallback(),D=await PLt(t,u,$,d,w,c.verifier);if(!D.id_token)throw Error("Token endpoint returned no id_token");let _=ILt(D.id_token);return{target:u,clientId:$,user:{sub:_.sub,email:_.email,name:_.name},accessToken:D.access_token,refreshToken:D.refresh_token,expiresAt:D.expires_in?Math.floor(Date.now()/1000)+D.expires_in:void 0,createdAt:new Date().toISOString()}}finally{E.close()}}async function ALt(i){try{let u=await b1i({target:i.target,openBrowser:i.openBrowser,fetch:i.fetch});return await pW(i.dataDir,u),console.log(`Logged in as ${u.user.email??u.user.sub}.`),0}catch(u){return console.error(`Login failed: ${u instanceof Error?u.message:String(u)}`),1}}async function yLt(i,u,t){let f=await i(`${u}/api/auth/mcp/register`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client_name:"decocms-cli",redirect_uris:[t],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none",application_type:"native"})});if(!f.ok)throw Error(`Client registration failed: HTTP ${f.status} ${await f.text().catch(()=>"")}`);let l=await f.json();if(typeof l?.client_id!=="string")throw Error("Client registration returned no client_id");return l.client_id}async function PLt(i,u,t,f,l,c){let E=new URLSearchParams({grant_type:"authorization_code",code:f,redirect_uri:l,client_id:t,code_verifier:c}),w=await i(`${u}/api/auth/mcp/token`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:E.toString()});if(!w.ok)throw Error(`Token exchange failed: HTTP ${w.status} ${await w.text().catch(()=>"")}`);let $=await w.json();if(typeof $?.access_token!=="string")throw Error("Token endpoint returned no access_token");return $}function ILt(i){let u=i.split(".");if(u.length!==3||!u[1])throw Error("id_token is not a valid JWT");let t=JSON.parse(Buffer.from(u[1],"base64url").toString("utf8"));if(typeof t.sub!=="string")throw Error("id_token has no sub claim");return{sub:t.sub,email:typeof t.email==="string"?t.email:void 0,name:typeof t.name==="string"?t.name:void 0}}async function GLt(i){let u,t;switch(process.platform){case"darwin":u="open",t=[i];break;case"win32":u="cmd",t=["/c","start","",i];break;default:u="xdg-open",t=[i];break}await new Promise((f)=>{let l=gLt(u,t,{stdio:"ignore",detached:!0});l.on("error",()=>{console.log(`Could not open browser automatically. Please open this URL manually:
|
|
180
180
|
${i}`),f()}),l.on("spawn",()=>{l.unref(),f()})})}var TLt="https://studio.decocms.com",ULt="openid profile email offline_access";var rzi=O(()=>{ACu();kM()});async function xCu(i,u=fetch,t=Date.now){if(!i.refreshToken)throw new fh("invalid_grant","Session has no refresh token");let f=new URLSearchParams({grant_type:"refresh_token",refresh_token:i.refreshToken,client_id:i.clientId}),l;try{l=await u(`${i.target}/api/auth/mcp/token`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:f.toString()})}catch(E){throw new fh("transient",E instanceof Error?E.message:String(E))}if(!l.ok){let E=await l.text().catch(()=>"");if(l.status>=400&&l.status<500)throw new fh("invalid_grant",`HTTP ${l.status} ${E}`);throw new fh("transient",`HTTP ${l.status} ${E}`)}let c=await l.json();if(typeof c.access_token!=="string")throw new fh("transient","Token endpoint returned no access_token");return{...i,accessToken:c.access_token,refreshToken:c.refresh_token??i.refreshToken,expiresAt:c.expires_in?Math.floor(t()/1000)+c.expires_in:i.expiresAt}}var fh;var C1i=O(()=>{fh=class fh extends Error{kind;constructor(i,u){super(u);this.name="RefreshFailedError",this.kind=i}}});async function d7(i){let u=await R1i(i.dataDir,i.target);if(!u)return null;let t=i.now??Date.now;if(!kLt(u,t()))return u;try{let f=await xCu(u,i.fetch,t);return await pW(i.dataDir,f),f}catch(f){if(f instanceof fh&&f.kind==="invalid_grant")return null;throw f}}function kLt(i,u){if(i.expiresAt===void 0)return!1;let t=Math.floor(u/1000);return i.expiresAt-xLt<t}var xLt=60;var jM=O(()=>{C1i();kM()});var kCu={};Xi(kCu,{whoamiCommand:()=>jLt});async function jLt(i){let u;try{u=await d7({dataDir:i.dataDir,fetch:i.fetch,now:i.now})}catch(t){if(t instanceof fh&&t.kind==="transient")return console.error(`Could not refresh session: ${t.message}. Run \`decocms auth login\` to authenticate.`),1;throw t}if(!u)return console.error("Not logged in. Run `decocms auth login` to authenticate."),1;return console.log(`Target: ${u.target}`),console.log(`User: ${u.user.email??u.user.sub}`),0}var jCu=O(()=>{jM();C1i()});var XCu={};Xi(XCu,{logoutCommand:()=>XLt});async function XLt(i){if(!await R1i(i.dataDir))return console.log("Already logged out."),0;return await ICu(i.dataDir),console.log("Logged out."),0}var JCu=O(()=>{kM()});async function M1i(i){let u=i.isInteractive??Boolean(process.stdout.isTTY),t;try{t=await d7({dataDir:i.dataDir,target:i.target,fetch:i.fetch,now:i.now})}catch(l){if(l instanceof fh&&l.kind==="transient")throw Error(`Could not refresh session: ${l.message}. Run \`decocms auth login\` to sign in again.`);throw l}if(t&&i.target&&u&&!JLt(t.target,i.target))t=null;if(t)return t;if(!u)throw Error("No session found. Run `decocms auth login` first, then re-run the command.");console.log(`Not logged in \u2014 opening browser to sign in to ${i.intent}.`);let f=await b1i({target:i.target,openBrowser:i.openBrowser,fetch:i.fetch});return await pW(i.dataDir,f),console.log(`Logged in as ${f.user.email??f.user.sub}.`),f}function JLt(i,u){try{return new URL(i).host===new URL(u).host}catch{return i===u}}var mzi=O(()=>{rzi();jM();C1i();kM()});function B5(i){let u=i?.userName?.trim();if(!u||KCu.test(u))return null;let t=i?.userEmail?.trim();if(!t||KCu.test(t))return{userName:u};if(!KLt.test(t))return{userName:u};return{userName:u,userEmail:t}}var KCu,KLt;var q1i=O(()=>{KCu=/[\r\n<>]/,KLt=/^[^\s@<>]+@[^\s@<>]+\.[^\s@<>]+$/});var XM=O(()=>{U4();q1i()});async function r1i(i){try{let u=await fetch(`${i}/health`,{signal:AbortSignal.timeout(SLt)});if(!u.ok)return null;let t=await u.json();if(typeof t==="object"&&t!==null&&typeof t.bootId==="string"&&typeof t.ready==="boolean"&&t.setup&&typeof t.setup.running==="boolean"&&typeof t.setup.done==="boolean")return t;return null}catch{return null}}async function m1i(i){for(let u=0;u<SCu;u++){if(await r1i(i)!==null)return;let t=(Math.random()*2-1)*YLt;await y0(YCu+t)}throw Error(`sandbox daemon at ${i} did not respond on /health within ${SCu*YCu/1000}s`)}async function D7(i,u,t,f,l){return WLt(i,u,"POST",t,f,l)}async function WLt(i,u,t,f,l,c){let E={...f};if(l&&l.rotateToken!==void 0)E.auth=l;let w=await fetch(`${i}/_sandbox/config`,{method:t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${u}`},body:JSON.stringify(E),signal:AbortSignal.timeout(c?.timeoutMs??WCu)}),$=await w.text();if(!w.ok)throw new V1i(w.status,$);return JSON.parse($)}async function LCu(i,u,t){let f=await fetch(`${i}/_sandbox/orgfs-config`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${u}`},body:t,signal:AbortSignal.timeout(WCu)}),l=await f.text();if(!f.ok)throw Error(`sandbox daemon /_sandbox/orgfs-config returned ${f.status}: ${l}`);return JSON.parse(l)}async function JM(i,u,t,f){let l=new Headers(f.headers);for(let w of LLt)l.delete(w);l.set("authorization",`Bearer ${u}`);let c=f.method!=="GET"&&f.method!=="HEAD",E=`${i}${t.startsWith("/")?t:`/${t}`}`;return fetch(E,{method:f.method,headers:l,body:c?f.body:void 0,redirect:"manual",signal:f.signal,duplex:c?"half":void 0})}var V1i,SLt=500,WCu=30000,SCu=25,YCu=200,YLt=50,LLt;var ezi=O(()=>{XM();V1i=class V1i extends Error{status;constructor(i,u){super(`sandbox daemon /_sandbox/config returned ${i}: ${u}`);this.status=i;this.name="ConfigRequestError"}};LLt=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});var nCu=`var __create = Object.create;
|
|
@@ -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.16",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.
|
package/dist/server/migrate.js
CHANGED
|
@@ -1034,7 +1034,7 @@ var mu=Object.defineProperty;var xu=(t)=>t;function yu(t,n){this[t]=xu.bind(null
|
|
|
1034
1034
|
create unique index organization_billing_stripe_subscription_id_uq
|
|
1035
1035
|
on organization_billing (stripe_subscription_id)
|
|
1036
1036
|
where stripe_subscription_id is not null
|
|
1037
|
-
`.execute(t)}async function uy(t){await Bi`drop index organization_billing_stripe_subscription_id_uq`.execute(t),await t.schema.alterTable("organization_billing").dropColumn("last_stripe_event_at").execute()}var ay={"001-initial-schema":Ct,"002-organization-settings":Nt,"003-connection-schema-align":wt,"004-remove-models-binding":ft,"005-connection-configuration":pt,"006-add-views-to-settings":Et,"007-monitoring-logs":Kt,"008-event-bus":st,"009-drop-audit-logs":ht,"010-gateways":Pt,"011-gateway-icon":zt,"012-gateway-tool-selection-mode":kt,"013-monitoring-user-agent-gateway":Ut,"014-gateway-resources-prompts":Dt,"015-monitoring-properties":jt,"016-downstream-token-client-info":Lt,"017-downstream-token-remove-userid":Jt,"018-drop-gateway-tool-selection-strategy":Rt,"019-remove-gateway-is-default":Wt,"020-enabled-plugins":$t,"021-threads":Xt,"022-rename-gateway-to-virtual-mcp":At,"023-optimize-thread-indexes":Qt,"024-consolidate-virtual-mcp":Zt,"025-add-monitoring-virtual-mcp-id":Ft,"026-restrict-child-connection-delete":Mt,"027-update-management-mcp-url":Yt,"028-update-management-mcp-to-self":St,"029-add-updated-by-to-connections":Ot,"030-member-tags":It,"031-add-dependency-mode":Gt,"032-projects":gt,"033-thread-status":vt,"034-monitoring-dashboards":Vt,"035-project-connections":qt,"036-update-registry-url":lt,"037-ai-provider-keys":dt,"038-oauth-pkce-states":bt,"039-automations":tn,"040-replace-next-run-at-with-last-run-at":nn,"041-ai-provider-keys-unique-constraint":en,"042-rename-mesh-mcp-to-cms-mcp":un,"043-rename-cms-mcp-to-deco-cms":an,"044-drop-connections-tools-column":_n,"045-thread-context-start-message":on,"046-remove-object-storage-plugin":xn,"047-add-next-run-at":yn,"048-merge-projects-agents":cn,"049-remove-org-admin-projects":Tn,"050-durable-agent-runs":Cn,"051-org-sso":wn,"052-thread-agent-ids":fn,"053-registry-config":pn,"054-connection-slug":Kn,"055-spaces":sn,"056-automation-project-scope":hn,"057-thread-virtual-mcp-id":Pn,"058-trigger-callback-tokens":zn,"059-kv":kn,"060-member-index":Un,"061-downstream-token-connection-index":Dn,"062-private-registry":jn,"063-event-subscriptions-enabled-boolean":Ln,"064-brand-context":Jn,"065-organization-domains":Rn,"066-brand-context-structured":Wn,"067-threads-metadata":$n,"068-threads-branch":Xn,"069-sandbox-runner-state":An,"070-model-categories":Qn,"071-default-home-agents":Zn,"072-ai-provider-key-preset-id":Fn,"073-backfill-basic-usage-roles":Mn,"074-sandbox-runner-state-handle-nonunique":Hn,"075-thread-inflight-async-jobs":Yn,"076-automations-drop-agent-json":Bn,"077-tier-only-model-selection":On,"078-automation-tool-call-kind":In,"079-strip-legacy-freestyle-vm-map-entries":Gn,"080-async-research-jobs":gn,"081-async-research-jobs-result-content":vn,"082-secrets":Vn,"083-thread-run-locally":qn,"084-drop-host-sandbox-rows":ln,"085-rename-runner-kind":dn,"086-thread-pins-and-vm-map-rekey":bn,"087-fix-vm-map-rekey":te,"088-purge-cli-activate-keys":ne,"089-rename-remote-user-to-desktop":ee,"090-automation-webhook-triggers":ie,"091-organization-domains-allow-multi":ue,"092-sandbox-naming-uniformization":ae,"093-backfill-global-search-basic-usage":_e,"094-org-file-configs":me,"095-remove-automation-tool-call-kind":xe,"096-org-file-configs-public-url-base":ye,"097-drop-local-docker-sandbox-state":ce,"098-thread-message-parts":Te,"099-run-fence":Ce,"100-link-transport":Ne,"101-cancel-requested-at":we,"102-observational-agent":fe,"103-revert-observational-agent":pe,"104-agent-sandbox-provider-kind":Ke,"105-org-fs":se,"106-automation-tools":he,"107-org-fs-public-org":Pe,"108-automation-max-agent-steps":ze,"109-thread-message-parts-per-message-seq":ke,"110-backfill-ghs-token-expiry":Ue,"111-org-fs-thread-id":De,"112-org-file-configs-credential-type":je,"113-thread-failure-reason":Le,"114-run-acked-seq":Je,"115-thread-projected-seq":Re,"116-org-sites":We,"117-org-file-configs-site-slug":$e,"118-organization-domains-multi-verify":Xe,"119-organization-join-requests":Ae,"120-org-fs-read-public":Qe,"121-org-fs-share-password":Ze,"122-split-web-research-tier":He,"123-connection-credential-vault":Ye,"124-drop-thread-projected-seq":Be,"125-github-child-single-parent":Se,"126-task-board":Ie,"127-task-board-due-date":Ge,"128-reports-only":ge,"129-task-board-assigned-by":ve,"130-task-board-thread-id":Ve,"131-task-board-thread-link-cascade":qe,"132-task-board-item-prs":le,"133-dedupe-duplicate-members":de,"134-drop-task-board-enabled":be,"135-task-board-item-fk-cascade":ti,"136-task-board-import-idempotency":ni,"137-agent-sandbox-runner-state":ei,"138-agent-sandbox-sessions":ii,"139-organization-billing":ui,"140-seat-change-log":ai,"141-benefits-sync-pending":_i,"142-stripe-event-watermark":oi},mi=ay;import{getMigrations as My}from"better-auth/db";import{sso as Hy}from"@better-auth/sso";import{organization as Yy}from"@decocms/better-auth/plugins";import{admin as By,apiKey as Sy,jwt as Oy,magicLink as Iy,mcp as Gy,openAPI as gy}from"better-auth/plugins";import{emailOTP as vy}from"better-auth/plugins/email-otp";import{Kysely as Wy,PostgresDialect as bi}from"kysely";import{Pool as tu}from"pg";import{homedir as _y}from"os";var oy=new Set(["all","worker","api"]);function my(t){let n=(t??"").trim();return oy.has(n)?n:"all"}var xy=new Set(["production","development","test"]);function yy(t){let n=(t??"").trim();return xy.has(n)?n:"development"}function L(t){return t==="true"||t==="1"}function ry(t){if(t===void 0||t==="")return;return L(t)}function mt(t,n,e){if(n===void 0||n==="")return e;let a=Number(n);if(!Number.isSafeInteger(a)||a<=0)throw Error(`${t} must be a positive integer`);return a}function cy(t,n){if(n===void 0||n==="")return;let e=Number(n);if(!Number.isSafeInteger(e)||e<=0)throw Error(`${t} must be a positive integer`);return e}function Ty(t,n){if(t===void 0||t==="")return n;return t==="true"||t==="1"}function Si(t){if(!t)return null;try{let e=new URL(t).hostname;if(e==="localhost"||e==="127.0.0.1"||e==="::1")return null;return t}catch{return null}}var Cy=new Set(["agent-sandbox","user-desktop"]);function Ny(t){let n=t&&t.length>0?t:"user-desktop";if(n==="cluster")return"agent-sandbox";if(!Cy.has(n))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${t}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return n}function Oi(t,n){let e=t.home||n.DATA_DIR||n.DECOCMS_HOME||`${_y()}/deco`,a=t.localMode,u=t.nodeEnv||yy(n.NODE_ENV),_=n.NATS_URL||"nats://localhost:4222",m=ry(n.NATS_TUNNEL_PUBLIC_ENABLED)??!!n.NATS_PUBLIC_URL;return{settings:{nodeEnv:u,port:mt("PORT",t.port||n.PORT,3000),baseUrl:t.baseUrl||n.BASE_URL,dataDir:e,databasePgSsl:L(n.DATABASE_PG_SSL),databasePoolMax:mt("DATABASE_POOL_MAX",n.DATABASE_POOL_MAX,5),betterAuthSecret:n.BETTER_AUTH_SECRET||"",encryptionKey:n.ENCRYPTION_KEY||"",studioJwtSecret:n.STUDIO_JWT_SECRET??n.MESH_JWT_SECRET,localMode:a,disableRateLimit:L(n.DISABLE_RATE_LIMIT),studioProvisionSecretKey:n.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(n.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((x)=>x.trim().toLowerCase()).filter(Boolean),clickhouseUrl:n.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:cy("CLICKHOUSE_MAX_MEMORY_USAGE",n.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:n.MONITORING_OTLP_ENDPOINT,otelServiceName:n.OTEL_SERVICE_NAME||"studio",natsPublicUrl:n.NATS_PUBLIC_URL,natsTunnelPublicEnabled:m,natsTunnelSessionTtlSeconds:mt("NATS_TUNNEL_SESSION_TTL_SECONDS",n.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:n.NATS_OPERATOR_JWT,natsAccountJwt:n.NATS_ACCOUNT_JWT,natsAccountSigningKey:n.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:n.NATS_CREDS,configPath:n.CONFIG_PATH||"./config.json",aiGatewayEnabled:L(n.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:n.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:n.DECO_AI_GATEWAY_ADMIN_TOKEN,seatAllowanceCents:mt("STUDIO_SEAT_ALLOWANCE_CENTS",n.STUDIO_SEAT_ALLOWANCE_CENTS,500),stripeWebhookSecret:n.STRIPE_WEBHOOK_SECRET,stripeSecretKey:n.STRIPE_SECRET_KEY,stripeSeatPriceId:n.STRIPE_SEAT_PRICE_ID,enableDecoImport:L(n.ENABLE_DECO_IMPORT),billingEnforced:L(n.STUDIO_BILLING_ENFORCED),mcpCacheEnabled:Ty(n.MCP_CACHE_ENABLED,u!=="development"),orgFsPublicSetsJson:n.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:L(n.DISABLE_ORGFS_MOUNTS),s3Endpoint:n.S3_ENDPOINT,s3Bucket:n.S3_BUCKET,s3Region:n.S3_REGION||"auto",s3AccessKeyId:n.S3_ACCESS_KEY_ID,s3SecretAccessKey:n.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:n.S3_FORCE_PATH_STYLE===void 0||n.S3_FORCE_PATH_STYLE===""||n.S3_FORCE_PATH_STYLE==="true"||n.S3_FORCE_PATH_STYLE==="1",monitoringS3Bucket:n.MONITORING_S3_BUCKET,monitoringS3Endpoint:n.MONITORING_S3_ENDPOINT,monitoringS3Region:n.MONITORING_S3_REGION,monitoringS3AccessKeyId:n.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:n.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:n.MONITORING_S3_PREFIX,duckdbExtensionDirectory:n.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:n.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:n.DUCKDB_THREADS?Number(n.DUCKDB_THREADS):void 0,isCli:!0,noTui:t.noTui===!0,podName:n.POD_NAME??crypto.randomUUID(),dispatchRole:my(n.STUDIO_DISPATCH_ROLE??n.MESH_DISPATCH_ROLE),sandboxProviderKind:Ny(n.STUDIO_SANDBOX_PROVIDER),decoSupabaseUrl:n.DECO_SUPABASE_URL,decoSupabaseServiceKey:n.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:n.FIRECRAWL_API_KEY,commerceDiscoveryInternalApiUrl:n.COMMERCE_DISCOVERY_INTERNAL_API_URL,commerceDiscoveryInternalApiKey:n.COMMERCE_DISCOVERY_INTERNAL_API_KEY,s3TenantBucket:n.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:n.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:n.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:n.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:n.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:n.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:n.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:Si(n.DATABASE_URL),externalNatsUrl:Si(_),skipMigrations:t.skipMigrations}}var xt=null;function A(){if(!xt)wy();return xt}function wy(){if(xt)return;let t={...process.env},n=Oi({port:t.PORT||"3000",home:t.DATA_DIR||t.DECOCMS_HOME||"",localMode:t.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:t.DECO_NO_TUI==="true",vitePort:t.VITE_PORT,baseUrl:t.BASE_URL},t);xt=Object.freeze({...n.settings,databaseUrl:t.DATABASE_URL??"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(t.NATS_URL||"nats://localhost:4222").split(",").map((e)=>e.trim()).filter(Boolean)})}import{createContextKey as hy,metrics as Py,propagation as eC,ROOT_CONTEXT as iC,SpanStatusCode as uC,trace as zy}from"@opentelemetry/api";import{logs as ky,SeverityNumber as xi}from"@opentelemetry/api-logs";import{OTLPLogExporter as oC}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as Uy}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as yC}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as cC}from"@opentelemetry/instrumentation-runtime-node";import{context as qc,propagation as lc,SpanKind as dc,SpanStatusCode as bc}from"@opentelemetry/api";var nT=globalThis.fetch;import{ExportResultCode as TT}from"@opentelemetry/core";import{ExportResultCode as yt}from"@opentelemetry/core";import{mkdir as fy,rename as py,writeFile as Ey}from"fs/promises";import{join as rt}from"path";class ct{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(t){this.basePath=t.basePath,this.flushThreshold=t.flushThreshold??1000,this.maxBufferBytes=t.maxBufferBytes??10485760,this.partitionKey=t.partitionKey;let n=t.flushIntervalMs??60000;if(n>0&&n<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((e)=>{console.error("[NDJSONExporter] Timer flush failed:",e)})},n),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(t){if(this.isShutdown)return Promise.resolve({code:yt.FAILED});for(let n of t){let e=JSON.stringify(n),a=this.partitionKey?this.partitionKey(n):"";this.bufferItems.push({partition:a,json:e}),this.bufferBytes+=Buffer.byteLength(e,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:yt.SUCCESS})).catch((n)=>{return console.error("[NDJSONExporter] Flush failed:",n),{code:yt.FAILED}});return Promise.resolve({code:yt.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let n=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=n,n}async doFlush(){if(this.bufferItems.length===0)return;let t=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let n=new Map;for(let u of t){let _=n.get(u.partition);if(!_)_=[],n.set(u.partition,_);_.push(u.json)}let e=await Promise.allSettled(Array.from(n.entries()).map(([u,_])=>this.writeNDJSON(_,u).then(()=>u))),a=e.find((u)=>u.status==="rejected");if(a){let u=new Set;for(let m of e)if(m.status==="fulfilled")u.add(m.value);let _=t.filter((m)=>!u.has(m.partition));this.bufferItems=_.concat(this.bufferItems),this.bufferBytes=0;for(let m of this.bufferItems)this.bufferBytes+=Buffer.byteLength(m.json,"utf8")+1;throw a.reason}}async writeNDJSON(t,n){let e=new Date,a=[String(e.getUTCFullYear()),String(e.getUTCMonth()+1).padStart(2,"0"),String(e.getUTCDate()).padStart(2,"0"),String(e.getUTCHours()).padStart(2,"0")],u=n?rt(this.basePath,n,...a):rt(this.basePath,...a);if(!this.knownDirs.has(u))await fy(u,{recursive:!0,mode:448}),this.knownDirs.add(u);let _=`${crypto.randomUUID()}.ndjson`,m=rt(u,`.${_}.tmp`),o=rt(u,_),x=t.join(`
|
|
1037
|
+
`.execute(t)}async function uy(t){await Bi`drop index organization_billing_stripe_subscription_id_uq`.execute(t),await t.schema.alterTable("organization_billing").dropColumn("last_stripe_event_at").execute()}var ay={"001-initial-schema":Ct,"002-organization-settings":Nt,"003-connection-schema-align":wt,"004-remove-models-binding":ft,"005-connection-configuration":pt,"006-add-views-to-settings":Et,"007-monitoring-logs":Kt,"008-event-bus":st,"009-drop-audit-logs":ht,"010-gateways":Pt,"011-gateway-icon":zt,"012-gateway-tool-selection-mode":kt,"013-monitoring-user-agent-gateway":Ut,"014-gateway-resources-prompts":Dt,"015-monitoring-properties":jt,"016-downstream-token-client-info":Lt,"017-downstream-token-remove-userid":Jt,"018-drop-gateway-tool-selection-strategy":Rt,"019-remove-gateway-is-default":Wt,"020-enabled-plugins":$t,"021-threads":Xt,"022-rename-gateway-to-virtual-mcp":At,"023-optimize-thread-indexes":Qt,"024-consolidate-virtual-mcp":Zt,"025-add-monitoring-virtual-mcp-id":Ft,"026-restrict-child-connection-delete":Mt,"027-update-management-mcp-url":Yt,"028-update-management-mcp-to-self":St,"029-add-updated-by-to-connections":Ot,"030-member-tags":It,"031-add-dependency-mode":Gt,"032-projects":gt,"033-thread-status":vt,"034-monitoring-dashboards":Vt,"035-project-connections":qt,"036-update-registry-url":lt,"037-ai-provider-keys":dt,"038-oauth-pkce-states":bt,"039-automations":tn,"040-replace-next-run-at-with-last-run-at":nn,"041-ai-provider-keys-unique-constraint":en,"042-rename-mesh-mcp-to-cms-mcp":un,"043-rename-cms-mcp-to-deco-cms":an,"044-drop-connections-tools-column":_n,"045-thread-context-start-message":on,"046-remove-object-storage-plugin":xn,"047-add-next-run-at":yn,"048-merge-projects-agents":cn,"049-remove-org-admin-projects":Tn,"050-durable-agent-runs":Cn,"051-org-sso":wn,"052-thread-agent-ids":fn,"053-registry-config":pn,"054-connection-slug":Kn,"055-spaces":sn,"056-automation-project-scope":hn,"057-thread-virtual-mcp-id":Pn,"058-trigger-callback-tokens":zn,"059-kv":kn,"060-member-index":Un,"061-downstream-token-connection-index":Dn,"062-private-registry":jn,"063-event-subscriptions-enabled-boolean":Ln,"064-brand-context":Jn,"065-organization-domains":Rn,"066-brand-context-structured":Wn,"067-threads-metadata":$n,"068-threads-branch":Xn,"069-sandbox-runner-state":An,"070-model-categories":Qn,"071-default-home-agents":Zn,"072-ai-provider-key-preset-id":Fn,"073-backfill-basic-usage-roles":Mn,"074-sandbox-runner-state-handle-nonunique":Hn,"075-thread-inflight-async-jobs":Yn,"076-automations-drop-agent-json":Bn,"077-tier-only-model-selection":On,"078-automation-tool-call-kind":In,"079-strip-legacy-freestyle-vm-map-entries":Gn,"080-async-research-jobs":gn,"081-async-research-jobs-result-content":vn,"082-secrets":Vn,"083-thread-run-locally":qn,"084-drop-host-sandbox-rows":ln,"085-rename-runner-kind":dn,"086-thread-pins-and-vm-map-rekey":bn,"087-fix-vm-map-rekey":te,"088-purge-cli-activate-keys":ne,"089-rename-remote-user-to-desktop":ee,"090-automation-webhook-triggers":ie,"091-organization-domains-allow-multi":ue,"092-sandbox-naming-uniformization":ae,"093-backfill-global-search-basic-usage":_e,"094-org-file-configs":me,"095-remove-automation-tool-call-kind":xe,"096-org-file-configs-public-url-base":ye,"097-drop-local-docker-sandbox-state":ce,"098-thread-message-parts":Te,"099-run-fence":Ce,"100-link-transport":Ne,"101-cancel-requested-at":we,"102-observational-agent":fe,"103-revert-observational-agent":pe,"104-agent-sandbox-provider-kind":Ke,"105-org-fs":se,"106-automation-tools":he,"107-org-fs-public-org":Pe,"108-automation-max-agent-steps":ze,"109-thread-message-parts-per-message-seq":ke,"110-backfill-ghs-token-expiry":Ue,"111-org-fs-thread-id":De,"112-org-file-configs-credential-type":je,"113-thread-failure-reason":Le,"114-run-acked-seq":Je,"115-thread-projected-seq":Re,"116-org-sites":We,"117-org-file-configs-site-slug":$e,"118-organization-domains-multi-verify":Xe,"119-organization-join-requests":Ae,"120-org-fs-read-public":Qe,"121-org-fs-share-password":Ze,"122-split-web-research-tier":He,"123-connection-credential-vault":Ye,"124-drop-thread-projected-seq":Be,"125-github-child-single-parent":Se,"126-task-board":Ie,"127-task-board-due-date":Ge,"128-reports-only":ge,"129-task-board-assigned-by":ve,"130-task-board-thread-id":Ve,"131-task-board-thread-link-cascade":qe,"132-task-board-item-prs":le,"133-dedupe-duplicate-members":de,"134-drop-task-board-enabled":be,"135-task-board-item-fk-cascade":ti,"136-task-board-import-idempotency":ni,"137-agent-sandbox-runner-state":ei,"138-agent-sandbox-sessions":ii,"139-organization-billing":ui,"140-seat-change-log":ai,"141-benefits-sync-pending":_i,"142-stripe-event-watermark":oi},mi=ay;import{getMigrations as My}from"better-auth/db";import{sso as Hy}from"@better-auth/sso";import{organization as Yy}from"@decocms/better-auth/plugins";import{admin as By,apiKey as Sy,jwt as Oy,magicLink as Iy,mcp as Gy,openAPI as gy}from"better-auth/plugins";import{emailOTP as vy}from"better-auth/plugins/email-otp";import{Kysely as Wy,PostgresDialect as bi}from"kysely";import{Pool as tu}from"pg";import{homedir as _y}from"os";var oy=new Set(["all","worker","api"]);function my(t){let n=(t??"").trim();return oy.has(n)?n:"all"}var xy=new Set(["production","development","test"]);function yy(t){let n=(t??"").trim();return xy.has(n)?n:"development"}function L(t){return t==="true"||t==="1"}function ry(t){if(t===void 0||t==="")return;return L(t)}function mt(t,n,e){if(n===void 0||n==="")return e;let a=Number(n);if(!Number.isSafeInteger(a)||a<=0)throw Error(`${t} must be a positive integer`);return a}function cy(t,n){if(n===void 0||n==="")return;let e=Number(n);if(!Number.isSafeInteger(e)||e<=0)throw Error(`${t} must be a positive integer`);return e}function Ty(t,n){if(t===void 0||t==="")return n;return t==="true"||t==="1"}function Si(t){if(!t)return null;try{let e=new URL(t).hostname;if(e==="localhost"||e==="127.0.0.1"||e==="::1")return null;return t}catch{return null}}var Cy=new Set(["agent-sandbox","user-desktop"]);function Ny(t){let n=(t??"").trim(),e=n.length>0?n:"user-desktop";if(e==="cluster")return"agent-sandbox";if(!Cy.has(e))throw Error(`Unknown STUDIO_SANDBOX_PROVIDER="${t}" \u2014 expected "agent-sandbox", legacy "cluster", or "user-desktop".`);return e}function Oi(t,n){let e=t.home||n.DATA_DIR||n.DECOCMS_HOME||`${_y()}/deco`,a=t.localMode,u=t.nodeEnv||yy(n.NODE_ENV),_=n.NATS_URL||"nats://localhost:4222",m=ry(n.NATS_TUNNEL_PUBLIC_ENABLED)??!!n.NATS_PUBLIC_URL;return{settings:{nodeEnv:u,port:mt("PORT",t.port||n.PORT,3000),baseUrl:t.baseUrl||n.BASE_URL,dataDir:e,databasePgSsl:L(n.DATABASE_PG_SSL),databasePoolMax:mt("DATABASE_POOL_MAX",n.DATABASE_POOL_MAX,5),betterAuthSecret:n.BETTER_AUTH_SECRET||"",encryptionKey:n.ENCRYPTION_KEY||"",studioJwtSecret:n.STUDIO_JWT_SECRET??n.MESH_JWT_SECRET,localMode:a,disableRateLimit:L(n.DISABLE_RATE_LIMIT),studioProvisionSecretKey:n.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(n.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((x)=>x.trim().toLowerCase()).filter(Boolean),clickhouseUrl:n.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:cy("CLICKHOUSE_MAX_MEMORY_USAGE",n.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:n.MONITORING_OTLP_ENDPOINT,otelServiceName:n.OTEL_SERVICE_NAME||"studio",natsPublicUrl:n.NATS_PUBLIC_URL,natsTunnelPublicEnabled:m,natsTunnelSessionTtlSeconds:mt("NATS_TUNNEL_SESSION_TTL_SECONDS",n.NATS_TUNNEL_SESSION_TTL_SECONDS,900),natsOperatorJwt:n.NATS_OPERATOR_JWT,natsAccountJwt:n.NATS_ACCOUNT_JWT,natsAccountSigningKey:n.NATS_ACCOUNT_SIGNING_KEY,natsCredsPath:n.NATS_CREDS,configPath:n.CONFIG_PATH||"./config.json",aiGatewayEnabled:L(n.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:n.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:n.DECO_AI_GATEWAY_ADMIN_TOKEN,seatAllowanceCents:mt("STUDIO_SEAT_ALLOWANCE_CENTS",n.STUDIO_SEAT_ALLOWANCE_CENTS,500),stripeWebhookSecret:n.STRIPE_WEBHOOK_SECRET,stripeSecretKey:n.STRIPE_SECRET_KEY,stripeSeatPriceId:n.STRIPE_SEAT_PRICE_ID,enableDecoImport:L(n.ENABLE_DECO_IMPORT),billingEnforced:L(n.STUDIO_BILLING_ENFORCED),mcpCacheEnabled:Ty(n.MCP_CACHE_ENABLED,u!=="development"),orgFsPublicSetsJson:n.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:L(n.DISABLE_ORGFS_MOUNTS),s3Endpoint:n.S3_ENDPOINT,s3Bucket:n.S3_BUCKET,s3Region:n.S3_REGION||"auto",s3AccessKeyId:n.S3_ACCESS_KEY_ID,s3SecretAccessKey:n.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:n.S3_FORCE_PATH_STYLE===void 0||n.S3_FORCE_PATH_STYLE===""||n.S3_FORCE_PATH_STYLE==="true"||n.S3_FORCE_PATH_STYLE==="1",monitoringS3Bucket:n.MONITORING_S3_BUCKET,monitoringS3Endpoint:n.MONITORING_S3_ENDPOINT,monitoringS3Region:n.MONITORING_S3_REGION,monitoringS3AccessKeyId:n.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:n.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:n.MONITORING_S3_PREFIX,duckdbExtensionDirectory:n.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:n.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:n.DUCKDB_THREADS?Number(n.DUCKDB_THREADS):void 0,isCli:!0,noTui:t.noTui===!0,podName:n.POD_NAME??crypto.randomUUID(),dispatchRole:my(n.STUDIO_DISPATCH_ROLE??n.MESH_DISPATCH_ROLE),sandboxProviderKind:Ny(n.STUDIO_SANDBOX_PROVIDER),decoSupabaseUrl:n.DECO_SUPABASE_URL,decoSupabaseServiceKey:n.DECO_SUPABASE_SERVICE_KEY,firecrawlApiKey:n.FIRECRAWL_API_KEY,commerceDiscoveryInternalApiUrl:n.COMMERCE_DISCOVERY_INTERNAL_API_URL,commerceDiscoveryInternalApiKey:n.COMMERCE_DISCOVERY_INTERNAL_API_KEY,s3TenantBucket:n.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:n.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:n.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:n.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:n.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:n.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:n.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY},externalDatabaseUrl:Si(n.DATABASE_URL),externalNatsUrl:Si(_),skipMigrations:t.skipMigrations}}var xt=null;function A(){if(!xt)wy();return xt}function wy(){if(xt)return;let t={...process.env},n=Oi({port:t.PORT||"3000",home:t.DATA_DIR||t.DECOCMS_HOME||"",localMode:t.DECOCMS_LOCAL_MODE==="true",skipMigrations:!0,noTui:t.DECO_NO_TUI==="true",vitePort:t.VITE_PORT,baseUrl:t.BASE_URL},t);xt=Object.freeze({...n.settings,databaseUrl:t.DATABASE_URL??"postgresql://postgres:postgres@localhost:5432/postgres",natsUrls:(t.NATS_URL||"nats://localhost:4222").split(",").map((e)=>e.trim()).filter(Boolean)})}import{createContextKey as hy,metrics as Py,propagation as eC,ROOT_CONTEXT as iC,SpanStatusCode as uC,trace as zy}from"@opentelemetry/api";import{logs as ky,SeverityNumber as xi}from"@opentelemetry/api-logs";import{OTLPLogExporter as oC}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as Uy}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as yC}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as cC}from"@opentelemetry/instrumentation-runtime-node";import{context as qc,propagation as lc,SpanKind as dc,SpanStatusCode as bc}from"@opentelemetry/api";var nT=globalThis.fetch;import{ExportResultCode as TT}from"@opentelemetry/core";import{ExportResultCode as yt}from"@opentelemetry/core";import{mkdir as fy,rename as py,writeFile as Ey}from"fs/promises";import{join as rt}from"path";class ct{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(t){this.basePath=t.basePath,this.flushThreshold=t.flushThreshold??1000,this.maxBufferBytes=t.maxBufferBytes??10485760,this.partitionKey=t.partitionKey;let n=t.flushIntervalMs??60000;if(n>0&&n<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((e)=>{console.error("[NDJSONExporter] Timer flush failed:",e)})},n),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(t){if(this.isShutdown)return Promise.resolve({code:yt.FAILED});for(let n of t){let e=JSON.stringify(n),a=this.partitionKey?this.partitionKey(n):"";this.bufferItems.push({partition:a,json:e}),this.bufferBytes+=Buffer.byteLength(e,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:yt.SUCCESS})).catch((n)=>{return console.error("[NDJSONExporter] Flush failed:",n),{code:yt.FAILED}});return Promise.resolve({code:yt.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let n=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=n,n}async doFlush(){if(this.bufferItems.length===0)return;let t=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let n=new Map;for(let u of t){let _=n.get(u.partition);if(!_)_=[],n.set(u.partition,_);_.push(u.json)}let e=await Promise.allSettled(Array.from(n.entries()).map(([u,_])=>this.writeNDJSON(_,u).then(()=>u))),a=e.find((u)=>u.status==="rejected");if(a){let u=new Set;for(let m of e)if(m.status==="fulfilled")u.add(m.value);let _=t.filter((m)=>!u.has(m.partition));this.bufferItems=_.concat(this.bufferItems),this.bufferBytes=0;for(let m of this.bufferItems)this.bufferBytes+=Buffer.byteLength(m.json,"utf8")+1;throw a.reason}}async writeNDJSON(t,n){let e=new Date,a=[String(e.getUTCFullYear()),String(e.getUTCMonth()+1).padStart(2,"0"),String(e.getUTCDate()).padStart(2,"0"),String(e.getUTCHours()).padStart(2,"0")],u=n?rt(this.basePath,n,...a):rt(this.basePath,...a);if(!this.knownDirs.has(u))await fy(u,{recursive:!0,mode:448}),this.knownDirs.add(u);let _=`${crypto.randomUUID()}.ndjson`,m=rt(u,`.${_}.tmp`),o=rt(u,_),x=t.join(`
|
|
1038
1038
|
`)+`
|
|
1039
1039
|
`;await Ey(m,x,{mode:384}),await py(m,o)}}import{ExportResultCode as pT}from"@opentelemetry/core";import{AggregationTemporality as KT,DataPointType as sT}from"@opentelemetry/sdk-metrics";import{ExportResultCode as DT}from"@opentelemetry/core";var RT=Buffer.byteLength("... [TRUNCATED]","utf8");import{BatchLogRecordProcessor as sC,LoggerProvider as hC}from"@opentelemetry/sdk-logs";import{detectResources as zC,envDetector as kC,hostDetector as UC,osDetector as DC,processDetector as jC,resourceFromAttributes as LC}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as RC}from"@opentelemetry/sdk-metrics";import{NOOP_LOGGER as XT}from"@opentelemetry/api-logs";import{NodeSDK as XC}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as QC,SamplingDecision as Q}from"@opentelemetry/sdk-trace-base";import{SpanStatusCode as MT}from"@opentelemetry/api";var Dy="__d",jy=hy("Current request"),Ly=1;var Gi=(t)=>{let e=new URL(t.url).searchParams.get(Dy);if(e==="")return crypto.randomUUID();if(!e)e=t.headers.get("x-trace-debug-id");return e};class gi{inner;constructor(t){this.inner=t}shouldSample(t,n,e,a,u,_){let m=t.getValue(jy);if(!m){if(this.inner)return this.inner.shouldSample(t,n,e,a,u,_);return{decision:Q.RECORD_AND_SAMPLED}}let o=Gi(m);if(o)return{decision:Q.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":o}};if(this.inner){let x=this.inner.shouldSample(t,n,e,a,u,_);if(x.decision===Q.RECORD_AND_SAMPLED){let y=crypto.randomUUID();x.attributes={...x.attributes??{},"trace.debug.id":y}}return x}return{decision:Q.NOT_RECORD}}toString(){return"DebugSampler"}}class vi{ratio;constructor(t){this.ratio=t}shouldSample(){if(Math.random()<this.ratio)return{decision:Q.RECORD_AND_SAMPLED};return{decision:Q.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}var FC=new Uy({preventServerStart:!0}),MC=new gi(new vi(Ly));var Ii=zy.getTracer("studio","1.0.0"),I=Py.getMeter("studio","1.0.0"),Jy=ky.getLogger("studio","1.0.0"),yi=(t,n,e)=>{let a={},u=e,_=e[e.length-1];if(_!==null&&typeof _==="object"&&!Array.isArray(_)&&!(_ instanceof Error)&&Object.getPrototypeOf(_)===Object.prototype)a=_,u=e.slice(0,-1);let m=u.map((o)=>{if(o instanceof Error)return`${o.name}: ${o.message}`;if(typeof o==="object")try{return JSON.stringify(o)}catch{return"[Object]"}return String(o)}).join(" ");Jy.emit({severityNumber:t,severityText:n,body:m,attributes:{"log.source":"console",...a}})},ri={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...t)=>{yi(xi.ERROR,"ERROR",t),ri.error(...t)};console.warn=(...t)=>{yi(xi.WARN,"WARN",t),ri.warn(...t)};console.debug=(...t)=>{yi(xi.DEBUG,"DEBUG",t),ri.debug(...t)};var ci,Vi=0,Ti=500;function Ry(){if(ci)return;let t=performance.now()+Ti;ci=setInterval(()=>{let n=performance.now();Vi=Math.max(0,n-t),t=n+Ti},Ti),ci.unref?.()}function qi(){return Ry(),Vi}var $y=()=>I.createHistogram("db.query.duration",{description:"Database query execution duration in milliseconds",unit:"ms"}),li=()=>I.createHistogram("db.pool.acquire.duration",{description:"Time spent waiting to acquire a connection from the pool",unit:"ms"}),di=400,Xy=100,Ay=(t)=>(n)=>{let e={"db.statement":n.query.sql,"db.status":n.level==="error"?"error":"success"};if(n.queryDurationMillis>di){let a=qi(),u=a>di/2;console.error(u?"Slow query measurement \u2014 likely event-loop lag, not slow SQL:":"Slow query detected:",{durationMs:n.queryDurationMillis,eventLoopLagMs:Math.round(a),sql:n.query.sql,pool:{total:t.totalCount,idle:t.idleCount,waiting:t.waitingCount,max:Tt()}})}if($y().record(n.queryDurationMillis,e),n.level==="error")console.error("Query failed:",{durationMs:n.queryDurationMillis,error:n.error,sql:n.query.sql})};function Qy(t){let n=t.connect.bind(t);return t.connect=(e)=>{if(typeof e==="function")return n(e);let a=performance.now(),u=Tt(),_=t.idleCount===0&&t.totalCount>=u,m=t.idleCount;return n().then((o)=>{let x=performance.now()-a;if(li().record(x,{"db.pool.outcome":_?"contended":"available"}),x>Xy)if(_)console.error("Slow db pool acquire \u2014 pool saturated:",{waitMs:x,total:t.totalCount,idle:t.idleCount,waiting:t.waitingCount,max:u});else console.warn("Slow db pool acquire \u2014 event-loop lag (not pool):",{waitMs:x,idleAtStart:m,total:t.totalCount,max:u});return o},(o)=>{throw li().record(performance.now()-a,{"db.pool.outcome":"error"}),o})},t}var nu={keepAlive:!0,keepAliveInitialDelayMillis:1e4,idleTimeoutMillis:300000,connectionTimeoutMillis:30000,allowExitOnIdle:!0};function eu(){try{return A().databasePgSsl}catch{return!1}}function Tt(){try{return A().databasePoolMax}catch{return 10}}function Zy(t){let n=Qy(new tu({connectionString:t,max:Tt(),ssl:eu(),...nu})),e=new bi({pool:n});return{type:"postgres",db:new Wy({dialect:e,log:Ay(n)}),pool:n}}function g(){return A().databaseUrl}function iu(t){let n=t||g();return new bi({pool:new tu({connectionString:n,max:Tt(),ssl:eu(),...nu})})}function Fy(t){let n=t||g();return Zy(n)}async function uu(t){if(await t.db.destroy(),!t.pool.ended)await t.pool.end();if(t===G)G=null}var G=null;function Ci(){if(!G)G=Fy(g());return G}async function au(t){let e={database:iu(t||g()),plugins:[Yy({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),By(),Sy(),Oy(),gy(),Gy({loginPage:"/login"}),Hy(),Iy({sendMagicLink:async()=>{}}),vy({sendVerificationOTP:async()=>{}})]},{toBeAdded:a,toBeCreated:u,runMigrations:_}=await My(e);if(!a.length&&!u.length)return"up to date";return await _(),`${u.length+a.length} table(s) migrated`}async function ou(t,n){return(await Z`
|
|
1040
1040
|
SELECT table_name FROM information_schema.tables
|