decocms 4.141.0 → 4.141.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-Bmonr-e8.js → AlertCircle-DK_hZWLi.js} +1 -1
- package/dist/client/assets/{AreaChart-CdzFeasE.js → AreaChart-CF0ITrY1.js} +1 -1
- package/dist/client/assets/{ArrowUp-BP86IXK9.js → ArrowUp-DDhr8NEh.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-q79NvOkm.js → ArrowUpRight-D8M7uR-V.js} +1 -1
- package/dist/client/assets/{Check-DgY4oR1y.js → Check-C9vIEKiy.js} +1 -1
- package/dist/client/assets/{CheckCircle-BINhTIBm.js → CheckCircle-BVzt89kW.js} +1 -1
- package/dist/client/assets/{ChevronDown-DuGDmu8w.js → ChevronDown-C7mvEoeA.js} +1 -1
- package/dist/client/assets/{ChevronRight-tNULCKTJ.js → ChevronRight-CdKPBm7P.js} +1 -1
- package/dist/client/assets/{ChevronUp-DK-VnhM1.js → ChevronUp-BejjWTSK.js} +1 -1
- package/dist/client/assets/{Copy01-Bc-jJw_5.js → Copy01-B-Vwf1jO.js} +1 -1
- package/dist/client/assets/{DotsVertical-CTkKvvh9.js → DotsVertical-Dsje57tA.js} +1 -1
- package/dist/client/assets/{Eye-B5NwNKdN.js → Eye-DM3WhFFQ.js} +1 -1
- package/dist/client/assets/{FilterLines-LLGwxZxz.js → FilterLines-TPpQpGjL.js} +1 -1
- package/dist/client/assets/{HardDrive-D-5nfS2d.js → HardDrive-CuZ2cYTd.js} +1 -1
- package/dist/client/assets/{Key01-mzoyFEBM.js → Key01-KtO63N2q.js} +1 -1
- package/dist/client/assets/{LayoutLeft-qxfr6RPO.js → LayoutLeft-BecLnnr-.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CTMDoTXJ.js → LinkExternal01-BJ_C406j.js} +1 -1
- package/dist/client/assets/{LogOut01-BF7Emjjg.js → LogOut01-C9HKtksL.js} +1 -1
- package/dist/client/assets/{Monitor01-DyFHGLXo.js → Monitor01-CgZ60U3a.js} +1 -1
- package/dist/client/assets/{Palette-gJoxW87a.js → Palette-CHr9RkGH.js} +1 -1
- package/dist/client/assets/{Play-DUZ2C6at.js → Play-BQens8MV.js} +1 -1
- package/dist/client/assets/{Plus-DQh3yUdS.js → Plus-En2DPKlr.js} +1 -1
- package/dist/client/assets/{SearchLg-B2jh-ONZ.js → SearchLg-CjUQzwIv.js} +1 -1
- package/dist/client/assets/{SearchMd-npoTtpwv.js → SearchMd-DcTcf845.js} +1 -1
- package/dist/client/assets/{Settings02-DDR2-6RS.js → Settings02-B37wNn8Y.js} +1 -1
- package/dist/client/assets/{Shield01-DxQHWk8g.js → Shield01-CeQl4efa.js} +1 -1
- package/dist/client/assets/{Star01-3uDn_xqW.js → Star01-DUxdCbtN.js} +1 -1
- package/dist/client/assets/{Stars01-CXb6vtxh.js → Stars01-ClHufmzX.js} +1 -1
- package/dist/client/assets/{Stars02-ZgnNsKug.js → Stars02-NGkNRyAQ.js} +1 -1
- package/dist/client/assets/{Sun-C_EbsPrH.js → Sun-Cv_1XSlz.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-Dhatich-.js → SwitchHorizontal01-B6yKTkOT.js} +1 -1
- package/dist/client/assets/{Tool01-ezLyYgf0.js → Tool01-DYUyAxxo.js} +1 -1
- package/dist/client/assets/{Tool02-B3tKM8-X.js → Tool02-_JGPBxDG.js} +1 -1
- package/dist/client/assets/{Trash01-C621XH6N.js → Trash01-mh-ZVQ1x.js} +1 -1
- package/dist/client/assets/{TrendUp01-BtXaTXb1.js → TrendUp01-jwPB9Zo-.js} +1 -1
- package/dist/client/assets/{Upload01-Cmzv1cl-.js → Upload01-Bl2rDc3C.js} +1 -1
- package/dist/client/assets/{User01-CdQxjPhD.js → User01-C6jBhn8i.js} +1 -1
- package/dist/client/assets/{Users01-uLLtV1dx.js → Users01-C_VPJ71u.js} +1 -1
- package/dist/client/assets/{Users03-yHkovbTB.js → Users03-BWIIW_GS.js} +1 -1
- package/dist/client/assets/{X-D8aKT24y.js → X-CzIYqnVO.js} +1 -1
- package/dist/client/assets/{XCircle-BT7hUTFQ.js → XCircle-BIfrj5gP.js} +1 -1
- package/dist/client/assets/{XClose-CGrrq3PT.js → XClose-n2AL16WU.js} +1 -1
- package/dist/client/assets/{Zap-B_OSIFK4.js → Zap-D6OTvr6Q.js} +1 -1
- package/dist/client/assets/{ZapSquare-gtKot3d1.js → ZapSquare-AIhMEksK.js} +1 -1
- package/dist/client/assets/{access-gate-CCAyHnsj.js → access-gate-B0IbCKUV.js} +1 -1
- package/dist/client/assets/{add-section-modal-o2xah6V9.js → add-section-modal-CzK0DEQw.js} +1 -1
- package/dist/client/assets/{agent-icon-Ck0uKal3.js → agent-icon-B3GLRgej.js} +1 -1
- package/dist/client/assets/{agents-list-D0R-7Fmp.js → agents-list-C6O7_HlG.js} +1 -1
- package/dist/client/assets/{ai-providers-CF8tHMFT.js → ai-providers-QVtw6f3a.js} +1 -1
- package/dist/client/assets/{alert-DWp7jwEY.js → alert-3JvGIM5F.js} +1 -1
- package/dist/client/assets/{alert-dialog-Dah7Ucm8.js → alert-dialog-Cmvq2ll_.js} +1 -1
- package/dist/client/assets/{app-editor-B1Mvt12J.js → app-editor-DUGioxXO.js} +1 -1
- package/dist/client/assets/{auth-Cvbtlhy2.js → auth-C0qS3ZPZ.js} +1 -1
- package/dist/client/assets/{auth-catchall-bwGOqvCX.js → auth-catchall-DxwilZz_.js} +1 -1
- package/dist/client/assets/{auth-entry-Cb0wN-xC.js → auth-entry-ChmygdVk.js} +1 -1
- package/dist/client/assets/{auth-split-layout-DxlZnVyq.js → auth-split-layout-BiAqHjYn.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-Cv7F3ARA.js → authenticate-and-persist-oauth-D5c_hFr2.js} +1 -1
- package/dist/client/assets/{automation-list-row-DB9sHmD5.js → automation-list-row-Cu0TaeO6.js} +1 -1
- package/dist/client/assets/{automation-runs-BGCpwXRj.js → automation-runs-DXaVf0DD.js} +15 -15
- package/dist/client/assets/{automations-DtoKLt7I.js → automations-CsfpOv-u.js} +1 -1
- package/dist/client/assets/{avatar-DtCgmhFg.js → avatar-njFkcbQI.js} +1 -1
- package/dist/client/assets/{badge-GSru_DnB.js → badge-DGRKWOWb.js} +1 -1
- package/dist/client/assets/{block-document-Cb60nMNH.js → block-document-goxEwlSF.js} +1 -1
- package/dist/client/assets/{brand-context-DBJIRFq_.js → brand-context-C4URQvVd.js} +1 -1
- package/dist/client/assets/{buckets-Dm_IsmPo.js → buckets-ClIWRz8W.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-DRCOEr7m.js → bulk-category-panel-DkMqadYk.js} +1 -1
- package/dist/client/assets/{calendar-CCOgXKEv.js → calendar-a8kbX9UH.js} +1 -1
- package/dist/client/assets/{capability-load-error-BaRGgVgS.js → capability-load-error-BgQtrUsY.js} +1 -1
- package/dist/client/assets/{card-CYOe3Ma4.js → card-nHeAFFX0.js} +1 -1
- package/dist/client/assets/{category-editor-CM6wZbpo.js → category-editor-DQ_RIz7g.js} +1 -1
- package/dist/client/assets/{chat-context-CSQ5BoF5.js → chat-context-fnNgC6Hd.js} +1 -1
- package/dist/client/assets/{checkbox-B0K_2fdL.js → checkbox-CbADYYUL.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CyrPq8Wl.js → cli-auth-success-CT6dYtts.js} +1 -1
- package/dist/client/assets/{collection-detail-ZVjPfyxn.js → collection-detail-BU8OZhUx.js} +1 -1
- package/dist/client/assets/{collection-display-button-B4BXROZM.js → collection-display-button-bykcKpim.js} +1 -1
- package/dist/client/assets/{collection-search-D--RV_mI.js → collection-search-CskLZbpC.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-Dda7nDC5.js → collection-table-wrapper-D3TsoRKZ.js} +1 -1
- package/dist/client/assets/{collection-tabs-BaObSkOw.js → collection-tabs-O3PwV7k1.js} +1 -1
- package/dist/client/assets/{command-Cs6u7GQr.js → command-B-sBAFrS.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-QOUqLojh.js → commerce-onboarding-DI-fM-P0.js} +1 -1
- package/dist/client/assets/{companions-core-BYHXP3E4.js → companions-core-BWPc9ISb.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-D6Hy4VR9.js → connect-desktop-dialog-BbpRdUBe.js} +1 -1
- package/dist/client/assets/{connect-CH6kZ5kI.js → connect-l_iHXRVz.js} +1 -1
- package/dist/client/assets/{connection-BBnINHrB.js → connection-DBPJ2v-z.js} +1 -1
- package/dist/client/assets/{connection-card-BkQS99gQ.js → connection-card-Bg7PeLDF.js} +1 -1
- package/dist/client/assets/{connection-detail-Bl5xZLZQ.js → connection-detail-D6TwkT3a.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CWmYhPp-.js → connection-form-helpers-C92DqbpZ.js} +1 -1
- package/dist/client/assets/{connections-jWo6c_8k.js → connections-BvIXouo5.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-DA-EwafI.js → decopilot-sse-pool-B90eDV3R.js} +1 -1
- package/dist/client/assets/{dialog-B8xViOj9.js → dialog-BN4-oiS6.js} +1 -1
- package/dist/client/assets/{domain-settings-Da58xMIg.js → domain-settings-DbevUzJN.js} +1 -1
- package/dist/client/assets/{drawer-BLtisBLM.js → drawer-CBJjqCSg.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DTEmVgJk.js → dropdown-menu-CX3-mVgM.js} +1 -1
- package/dist/client/assets/{empty-state-B547dA7-.js → empty-state-CddQAR7S.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DoUqa9Kl.js → extract-connection-data-DTtlB_r-.js} +1 -1
- package/dist/client/assets/{file-explorer-BQ0-6pCV.js → file-explorer-BlSxh2cF.js} +1 -1
- package/dist/client/assets/{form-CVZCDP3G.js → form-Df3ZfSzv.js} +1 -1
- package/dist/client/assets/{general-DG-rEWhJ.js → general-DCAA4Phr.js} +1 -1
- package/dist/client/assets/{github-repo-picker-Fpp3yDGq.js → github-repo-picker-8xvmYQWp.js} +1 -1
- package/dist/client/assets/{hooks-CmseWvga.js → hooks-D2inR1bb.js} +1 -1
- package/dist/client/assets/{index-D9gNgXcG.js → index-4_5tMbz6.js} +1 -1
- package/dist/client/assets/{index-BPusUP2l.js → index-BcMo_kWI.js} +1 -1
- package/dist/client/assets/{index-DtyNanur.js → index-By30bShS.js} +5 -5
- package/dist/client/assets/{index-DtnPc10z.js → index-C22U5VKT.js} +1 -1
- package/dist/client/assets/{index-DVs0MFns.js → index-C2dKx064.js} +1 -1
- package/dist/client/assets/{index-M95-MVce.js → index-CEEoJIq-.js} +3 -3
- package/dist/client/assets/{index-Zj-6la40.js → index-CIKqj4Z6.js} +1 -1
- package/dist/client/assets/{index-BPnWm0XY.js → index-Cc8URq4E.js} +1 -1
- package/dist/client/assets/{index-BQZO-TqS.js → index-D3hdgSu6.js} +1 -1
- package/dist/client/assets/{index-CDpMo84V.js → index-D3j6XZ44.js} +1 -1
- package/dist/client/assets/{index-BlaLesST.js → index-DccGV9T5.js} +4 -4
- package/dist/client/assets/{index-redirect-DWUw5HHS.js → index-redirect-ByY6Y_18.js} +1 -1
- package/dist/client/assets/{input-DsrvM8y_.js → input-3yIKCHiK.js} +1 -1
- package/dist/client/assets/{integration-icon-1BCFzfR1.js → integration-icon-BlDhzkYH.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CJMXbniF.js → invite-member-dialog-Bw_uYptg.js} +1 -1
- package/dist/client/assets/{label-BiBv5Em6.js → label-DIni8cwf.js} +1 -1
- package/dist/client/assets/{layout-CjvSEFB5.js → layout-5rIFbtuA.js} +1 -1
- package/dist/client/assets/{login-CPM3fOIT.js → login-DWmZ160x.js} +1 -1
- package/dist/client/assets/{mcp-oauth-B5B99yU6.js → mcp-oauth-C6QbzasS.js} +1 -1
- package/dist/client/assets/{members-Bd5QcbtK.js → members-BXaR4E3v.js} +1 -1
- package/dist/client/assets/{monaco-editor-jRuDl8PH.js → monaco-editor-CJEQdUMq.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-U0hE32D7.js → monitoring-stats-row-C8r2y5yZ.js} +1 -1
- package/dist/client/assets/{multi-select-iPwI3agX.js → multi-select-DnNqFFRH.js} +1 -1
- package/dist/client/assets/{oauth-callback-DJ2d8NI7.js → oauth-callback-DVZI2BDS.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BKnCkewm.js → oauth-callback-ai-provider-DHoDoE_W.js} +1 -1
- package/dist/client/assets/{onboarding-B5iCREnj.js → onboarding-hg4WHxwY.js} +1 -1
- package/dist/client/assets/{org-install-DCmWW599.js → org-install-CnPMEWS7.js} +1 -1
- package/dist/client/assets/{org-layout-D4mfUbdL.js → org-layout-CS_SZLeV.js} +1 -1
- package/dist/client/assets/{organization-choice-Rrw_lg8T.js → organization-choice-CLC5WLEh.js} +1 -1
- package/dist/client/assets/{orgs-x9SuArW_.js → orgs-l4M1o2RR.js} +1 -1
- package/dist/client/assets/{page-seo-form-CU3qp1P-.js → page-seo-form-DZRR4M1B.js} +1 -1
- package/dist/client/assets/{popover-xhHhenT9.js → popover-Cq8aORhZ.js} +1 -1
- package/dist/client/assets/{post-editor-BH28aAPd.js → post-editor-CJaoEdDY.js} +1 -1
- package/dist/client/assets/{primitives-zj2UKaUs.js → primitives-05E7OrGw.js} +1 -1
- package/dist/client/assets/{profile-DCT-xwOz.js → profile-eNXVe2Sg.js} +1 -1
- package/dist/client/assets/project-app-view-CklVV_Fg.js +1 -0
- package/dist/client/assets/record-editor-cvc4JcUF.js +1 -0
- package/dist/client/assets/{redirect-editor-Bza2fkrK.js → redirect-editor-Si8bzAiP.js} +1 -1
- package/dist/client/assets/registry-610de1B_.js +2 -0
- package/dist/client/assets/{registry-layout-CueHGc54.js → registry-layout-mbiyHoU6.js} +1 -1
- package/dist/client/assets/{reports-4aBCAGtv.js → reports-CyiY0SeM.js} +1 -1
- package/dist/client/assets/{require-capability-Cg0MSwVR.js → require-capability-BOViRiif.js} +1 -1
- package/dist/client/assets/{required-auth-layout-BP_qU8yP.js → required-auth-layout-DWfsRLjS.js} +1 -1
- package/dist/client/assets/{reset-password-DU84nE4q.js → reset-password-iks3bOHQ.js} +1 -1
- package/dist/client/assets/{roles-BnHm_Qpr.js → roles-CyqWnMUR.js} +1 -1
- package/dist/client/assets/{search-input-Z-vEQRvn.js → search-input-C8FKSwyD.js} +1 -1
- package/dist/client/assets/{secrets-Cgw39jMj.js → secrets-DxbpDso9.js} +1 -1
- package/dist/client/assets/{sections-editor-DU98D3sS.js → sections-editor-BCBG48ml.js} +1 -1
- package/dist/client/assets/{select-CSFCwMDg.js → select-BPkio1EU.js} +1 -1
- package/dist/client/assets/{select-model-CUK9jDVF.js → select-model-96sRPlk3.js} +1 -1
- package/dist/client/assets/{self-tool-result-tpBFz6Rd.js → self-tool-result-B5toROyY.js} +1 -1
- package/dist/client/assets/{seo-editor-BDjpHjHD.js → seo-editor-DaIzWsW1.js} +1 -1
- package/dist/client/assets/{settings-layout-DtwaFKlB.js → settings-layout-w8E3Yk60.js} +1 -1
- package/dist/client/assets/{settings-section-DuWV1U_U.js → settings-section-D8BnTpBB.js} +1 -1
- package/dist/client/assets/{shell-controls-qXj21Bh2.js → shell-controls-DcUPQnbS.js} +1 -1
- package/dist/client/assets/{shell-layout-cTmgO41m.js → shell-layout-DcP1NMGY.js} +1 -1
- package/dist/client/assets/{sidebar-CU24ARoA.js → sidebar-Bkvf5akD.js} +1 -1
- package/dist/client/assets/{skeleton-BoYs9sft.js → skeleton-B5raIp9-.js} +1 -1
- package/dist/client/assets/{sso-D93h9Pfa.js → sso-BD9O9QZt.js} +1 -1
- package/dist/client/assets/{store-DP1vJseJ.js → store-BBMlflKq.js} +1 -1
- package/dist/client/assets/store-registry-CFAI2a9W.js +2 -0
- package/dist/client/assets/{studio-tools-DcSHdNPK.js → studio-tools-5gO0U159.js} +1 -1
- package/dist/client/assets/{switch-DOrjCUe3.js → switch-CCNZZCs8.js} +1 -1
- package/dist/client/assets/{tab-id-CpE0xqMi.js → tab-id-DCPUK9eB.js} +1 -1
- package/dist/client/assets/{table-CZ7vCtUp.js → table-IC4ZuZz4.js} +1 -1
- package/dist/client/assets/{tabs-BETaaaMn.js → tabs-CYpvYwLR.js} +1 -1
- package/dist/client/assets/{textarea-Cglqq-5t.js → textarea-DqjHDxHy.js} +1 -1
- package/dist/client/assets/{toggle-group-DA-OW0C4.js → toggle-group-Drz4WmN1.js} +1 -1
- package/dist/client/assets/{toolbar-Djq-SpMJ.js → toolbar-CCTu1eWy.js} +1 -1
- package/dist/client/assets/{tooltip-BlgPkBtv.js → tooltip-CpQpCT4h.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DZL3rV3w.js → use-ai-providers-DVtcjV4-.js} +1 -1
- package/dist/client/assets/{use-api-keys--NIo5guO.js → use-api-keys-DZMMbEoT.js} +1 -1
- package/dist/client/assets/{use-automations-CZ3Qb9KP.js → use-automations-CaDMz2De.js} +1 -1
- package/dist/client/assets/{use-autosave-Dc2cWfTI.js → use-autosave-D4As4WnM.js} +1 -1
- package/dist/client/assets/{use-capability-DrJSS8fu.js → use-capability-Cgki_JE_.js} +1 -1
- package/dist/client/assets/{use-clock-tick-Dc_PLQFP.js → use-clock-tick-Fu7DYG_j.js} +1 -1
- package/dist/client/assets/{use-connection-B-3KVD6S.js → use-connection-DwkaAXIu.js} +1 -1
- package/dist/client/assets/{use-copy-BIkBGBUo.js → use-copy-Bs8WYxa6.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DwbflqAO.js → use-create-virtual-mcp-IU34219E.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-C9g5EXCi.js → use-debounced-autosave-vRrFG-y_.js} +1 -1
- package/dist/client/assets/{use-debounced-value-D1DNGzTg.js → use-debounced-value-Cx5E4fXt.js} +1 -1
- package/dist/client/assets/{use-deco-credits-Pu83C8Zt.js → use-deco-credits-xrFB-Vms.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-BNlJ8Mfs.js → use-decopilot-events-CBGTpx42.js} +1 -1
- package/dist/client/assets/{use-delete-connection-D3HzU4o1.js → use-delete-connection-DdPM4vlz.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-B5mIAzLE.js → use-deployment-admin-Cf6bRcEJ.js} +1 -1
- package/dist/client/assets/{use-file-configs-yLFCysMP.js → use-file-configs-CPbzlP0c.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BWb3Xbgf.js → use-infinite-scroll-xAto--SH.js} +1 -1
- package/dist/client/assets/{use-join-requests-D_EQBWVi.js → use-join-requests-CvSxqErQ.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-CX3vV5lc.js → use-mcp-auth-status-8xcQd_g2.js} +1 -1
- package/dist/client/assets/{use-mcp-client-B2yEuqu3.js → use-mcp-client-DSDKwSB1.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-D7LLUgVz.js → use-mcp-tools-nprqZ_uQ.js} +1 -1
- package/dist/client/assets/{use-members-BZaP-tY0.js → use-members-DYOVV4_O.js} +1 -1
- package/dist/client/assets/{use-mobile-CbUnYrDm.js → use-mobile-Ccd-GNqH.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BPBtxA_H.js → use-navigate-to-agent-1Jw65zEd.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CQo8X6sZ.js → use-org-auth-client-DVlQRJT_.js} +1 -1
- package/dist/client/assets/{use-org-sso-BJA8z1A9.js → use-org-sso-DQgS9XWa.js} +1 -1
- package/dist/client/assets/{use-organization-roles-Bq4Lm_hv.js → use-organization-roles-BFyCNyej.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CnFfid7q.js → use-organization-settings-CpqKEHLP.js} +1 -1
- package/dist/client/assets/{use-registry-app-Cdzlryps.js → use-registry-app-CL76xKsY.js} +1 -1
- package/dist/client/assets/{use-registry-connections-BSnqWkos.js → use-registry-connections-Eahq6Pge.js} +1 -1
- package/dist/client/assets/{use-secrets-DI8wgMxP.js → use-secrets-BnIrU8ef.js} +1 -1
- package/dist/client/assets/{use-status-sounds-DUK0dUtn.js → use-status-sounds-aNljx8Kr.js} +1 -1
- package/dist/client/assets/{use-view-mode-p6WOftwH.js → use-view-mode-a3nfqiDn.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DTk9VIcm.js → use-virtual-mcp-Cso4NKhw.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-CURuX0pi.js +1 -0
- package/dist/client/assets/{useQueries-CnNweMyH.js → useQueries-D8I0CVh6.js} +1 -1
- package/dist/client/assets/{useRouterState-CQGDtClW.js → useRouterState-C4cXGJL5.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BldSUFN6.js +1 -0
- package/dist/client/assets/{users-BRjGplRF.js → users-Binp_XEj.js} +1 -1
- package/dist/client/assets/{variant-calendar-CehWt1bZ.js → variant-calendar-Be3B_vxd.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-RMlrDCx0.js → view-mode-toggle-DojFVKZM.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +35 -27
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/project-app-view-COxpHR4B.js +0 -1
- package/dist/client/assets/record-editor-LSUDJb6e.js +0 -1
- package/dist/client/assets/registry-BHrZ-G6X.js +0 -2
- package/dist/client/assets/store-registry-CeneGo2g.js +0 -2
- package/dist/client/assets/useInfiniteQuery-BWNyXPm3.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BzmV7s4D.js +0 -1
package/dist/client/index.html
CHANGED
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
61
61
|
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
62
62
|
<meta name="apple-mobile-web-app-title" content="deco Studio" />
|
|
63
|
-
<script type="module" crossorigin src="/assets/index-
|
|
63
|
+
<script type="module" crossorigin src="/assets/index-DccGV9T5.js"></script>
|
|
64
64
|
<link rel="stylesheet" crossorigin href="/assets/index-DiJLgWMy.css">
|
|
65
65
|
</head>
|
|
66
66
|
<body>
|
package/dist/server/cli.js
CHANGED
|
@@ -79906,7 +79906,15 @@ function makeToolsSyncHandler(deps) {
|
|
|
79906
79906
|
|
|
79907
79907
|
// daemon/routes/fs.ts
|
|
79908
79908
|
import fs7 from "fs";
|
|
79909
|
-
import {
|
|
79909
|
+
import {
|
|
79910
|
+
mkdir as mkdir6,
|
|
79911
|
+
readdir as readdir2,
|
|
79912
|
+
readFile as readFile3,
|
|
79913
|
+
rm as rm2,
|
|
79914
|
+
stat,
|
|
79915
|
+
unlink as unlink3,
|
|
79916
|
+
writeFile as writeFile5
|
|
79917
|
+
} from "fs/promises";
|
|
79910
79918
|
import path5 from "path";
|
|
79911
79919
|
import { Readable, Transform } from "stream";
|
|
79912
79920
|
import { pipeline as pipeline2 } from "stream/promises";
|
|
@@ -79983,9 +79991,9 @@ function makeReadHandler(deps) {
|
|
|
79983
79991
|
const filePath = resolveReadPath(deps.appRoot, deps.repoDir, body.path ?? "");
|
|
79984
79992
|
if (!filePath)
|
|
79985
79993
|
return jsonResponse({ error: "Path escapes project root" }, 400);
|
|
79986
|
-
let
|
|
79994
|
+
let stat2;
|
|
79987
79995
|
try {
|
|
79988
|
-
|
|
79996
|
+
stat2 = fs7.statSync(filePath);
|
|
79989
79997
|
} catch {
|
|
79990
79998
|
if (path5.basename(filePath) === DECOFILE_GEN_BASENAME) {
|
|
79991
79999
|
const merged = await generateDecofileFromBlocksDeduped(path5.join(path5.dirname(filePath), DECOFILE_BLOCKS_DIRNAME));
|
|
@@ -79995,25 +80003,25 @@ function makeReadHandler(deps) {
|
|
|
79995
80003
|
}
|
|
79996
80004
|
return jsonResponse({ error: \`File not found: \${body.path}\` }, 400);
|
|
79997
80005
|
}
|
|
79998
|
-
if (
|
|
80006
|
+
if (stat2.isDirectory()) {
|
|
79999
80007
|
return jsonResponse({ error: "Path is a directory" }, 400);
|
|
80000
80008
|
}
|
|
80001
80009
|
const fd2 = fs7.openSync(filePath, "r");
|
|
80002
|
-
const probe = Buffer.alloc(Math.min(8192,
|
|
80010
|
+
const probe = Buffer.alloc(Math.min(8192, stat2.size));
|
|
80003
80011
|
fs7.readSync(fd2, probe, 0, probe.length, 0);
|
|
80004
80012
|
fs7.closeSync(fd2);
|
|
80005
80013
|
const imageMediaType = sniffImageMediaType(probe);
|
|
80006
80014
|
if (imageMediaType) {
|
|
80007
|
-
if (
|
|
80015
|
+
if (stat2.size > MAX_IMAGE_BYTES) {
|
|
80008
80016
|
return jsonResponse({
|
|
80009
|
-
error: \`Image too large (\${
|
|
80017
|
+
error: \`Image too large (\${stat2.size} bytes; cap is \${MAX_IMAGE_BYTES})\`
|
|
80010
80018
|
}, 400);
|
|
80011
80019
|
}
|
|
80012
80020
|
const bytes = fs7.readFileSync(filePath);
|
|
80013
80021
|
return jsonResponse({
|
|
80014
80022
|
kind: "image",
|
|
80015
80023
|
mediaType: imageMediaType,
|
|
80016
|
-
size:
|
|
80024
|
+
size: stat2.size,
|
|
80017
80025
|
base64: bytes.toString("base64")
|
|
80018
80026
|
});
|
|
80019
80027
|
}
|
|
@@ -80081,14 +80089,14 @@ function makeUnlinkHandler(deps) {
|
|
|
80081
80089
|
return jsonResponse({ error: "Path escapes app root" }, 400);
|
|
80082
80090
|
let existed = true;
|
|
80083
80091
|
try {
|
|
80084
|
-
const
|
|
80085
|
-
if (
|
|
80092
|
+
const fileStat = await stat(filePath);
|
|
80093
|
+
if (fileStat.isDirectory()) {
|
|
80086
80094
|
if (!body.recursive) {
|
|
80087
80095
|
return jsonResponse({ error: "Refusing to unlink directory without recursive: true" }, 400);
|
|
80088
80096
|
}
|
|
80089
|
-
|
|
80097
|
+
await rm2(filePath, { recursive: true, force: true });
|
|
80090
80098
|
} else {
|
|
80091
|
-
|
|
80099
|
+
await unlink3(filePath);
|
|
80092
80100
|
}
|
|
80093
80101
|
} catch (err) {
|
|
80094
80102
|
if (err.code === "ENOENT") {
|
|
@@ -80387,20 +80395,20 @@ function makeUploadToUrlHandler(deps) {
|
|
|
80387
80395
|
if (!filePath) {
|
|
80388
80396
|
return jsonResponse({ error: "Path escapes project root" }, 400);
|
|
80389
80397
|
}
|
|
80390
|
-
let
|
|
80398
|
+
let stat2;
|
|
80391
80399
|
try {
|
|
80392
|
-
|
|
80400
|
+
stat2 = fs7.statSync(filePath);
|
|
80393
80401
|
} catch {
|
|
80394
80402
|
return jsonResponse({ error: \`File not found: \${body.path}\` }, 400);
|
|
80395
80403
|
}
|
|
80396
|
-
if (
|
|
80404
|
+
if (stat2.isDirectory()) {
|
|
80397
80405
|
return jsonResponse({ error: "Path is a directory" }, 400);
|
|
80398
80406
|
}
|
|
80399
|
-
if (
|
|
80400
|
-
return jsonResponse({ error: \`File too large (\${
|
|
80407
|
+
if (stat2.size > MAX_TRANSFER_BYTES) {
|
|
80408
|
+
return jsonResponse({ error: \`File too large (\${stat2.size} > \${MAX_TRANSFER_BYTES})\` }, 413);
|
|
80401
80409
|
}
|
|
80402
80410
|
const headers = {
|
|
80403
|
-
"Content-Length": String(
|
|
80411
|
+
"Content-Length": String(stat2.size)
|
|
80404
80412
|
};
|
|
80405
80413
|
if (body.contentType)
|
|
80406
80414
|
headers["Content-Type"] = body.contentType;
|
|
@@ -80427,7 +80435,7 @@ function makeUploadToUrlHandler(deps) {
|
|
|
80427
80435
|
error: \`upstream returned HTTP \${resp.status}: \${errText.slice(0, 500)}\`
|
|
80428
80436
|
}, 502);
|
|
80429
80437
|
}
|
|
80430
|
-
return jsonResponse({ ok: true, size:
|
|
80438
|
+
return jsonResponse({ ok: true, size: stat2.size });
|
|
80431
80439
|
};
|
|
80432
80440
|
}
|
|
80433
80441
|
var GLOB_EXCLUDE_DIRS = new Set([
|
|
@@ -80603,16 +80611,16 @@ function makeGlobHandler(deps) {
|
|
|
80603
80611
|
const abs = path5.join(searchPath, rel);
|
|
80604
80612
|
let relPath;
|
|
80605
80613
|
try {
|
|
80606
|
-
const
|
|
80614
|
+
const stat2 = fs7.statSync(abs);
|
|
80607
80615
|
relPath = toRepoRelativePath(abs, searchPath, deps.repoDir);
|
|
80608
80616
|
const depth = pathSegmentDepth(relPath);
|
|
80609
80617
|
if (maxDepth !== undefined && depth > maxDepth) {
|
|
80610
|
-
registerGlobAncestorDirectories(relPath, maxDepth, directoryPaths,
|
|
80618
|
+
registerGlobAncestorDirectories(relPath, maxDepth, directoryPaths, stat2.isFile());
|
|
80611
80619
|
continue;
|
|
80612
80620
|
}
|
|
80613
|
-
if (
|
|
80621
|
+
if (stat2.isDirectory()) {
|
|
80614
80622
|
directoryPaths.add(relPath);
|
|
80615
|
-
} else if (
|
|
80623
|
+
} else if (stat2.isFile()) {
|
|
80616
80624
|
filePaths.push(relPath);
|
|
80617
80625
|
}
|
|
80618
80626
|
} catch {
|
|
@@ -80736,7 +80744,7 @@ function detect(repoDir) {
|
|
|
80736
80744
|
|
|
80737
80745
|
// daemon/setup/clone.ts
|
|
80738
80746
|
import { existsSync as existsSync8, readdirSync as readdirSync3 } from "fs";
|
|
80739
|
-
import { rm as
|
|
80747
|
+
import { rm as rm3, writeFile as writeFile7 } from "fs/promises";
|
|
80740
80748
|
import { dirname as dirname7, isAbsolute as isAbsolute2, join as join17 } from "path";
|
|
80741
80749
|
|
|
80742
80750
|
// daemon/setup/git-command.ts
|
|
@@ -80964,7 +80972,7 @@ async function runSubmoduleUpdate(p) {
|
|
|
80964
80972
|
[clone] warning: submodule update errored (\${err.message}); continuing without submodules\\r
|
|
80965
80973
|
\`);
|
|
80966
80974
|
} finally {
|
|
80967
|
-
await
|
|
80975
|
+
await rm3(credFile, { force: true }).catch(() => {});
|
|
80968
80976
|
}
|
|
80969
80977
|
}
|
|
80970
80978
|
async function spawnClone(deps) {
|
|
@@ -83168,7 +83176,7 @@ ${w}`;v(B);return}if(c(null,F),t.strategy==="count"){if($--,$===0)v()}if(t.strat
|
|
|
83168
83176
|
`);function v(d){if(t===void 0)return!0;let D=Tq(d),_=D&&Tq(t)?kau(t):t,N=D?kau(d):jau(d),Z=SVt(_,N);return Z===""||!Z.startsWith("..")&&!YVt(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(u6i)},reconcile(){let d=Date.now();for(let D of l.all().map(u6i)){if(!v(D.sandboxPath)){E.run({$handle:D.handle,$now:d});continue}if(!Tq(D.sandboxPath)){c.run({$handle:D.handle,$now:d});continue}if(D.status==="spawning"||D.status==="ready"||D.status==="failed"||D.status==="missing")w.run({$handle:D.handle,$now:d})}return l.all().map(u6i)},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||!Tq(Z.sandboxPath))continue;if(Z.branch===null||Z.branch.trim()===""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!X_(Z.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let B=X_(Z.sandboxPath,["status","--porcelain"]);if(!B.ok){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(B.stdout.trim()!==""){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let F=Jau(Z.sandboxPath,Z.branch);if(F===null){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!F){_.push({handle:Z.handle,sandboxPath:Z.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}JVt(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 _=u6i(D),N=0,Z=null;if(Tq(_.sandboxPath)&&X_(_.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let B=X_(_.sandboxPath,["status","--porcelain"]);if(B.ok){let F=B.stdout.trim();N=F===""?0:F.split(`
|
|
83169
83177
|
`).length}if(_.branch!==null&&_.branch.trim()!=="")Z=Jau(_.sandboxPath,_.branch)}return{handle:_.handle,branch:_.branch,sandboxPath:_.sandboxPath,dirtyCount:N,merged:Z}},close(){u.close()}}}var Ibi=()=>{};function zVt(i,u){return u?[["umount","-f",i]]:[["fusermount","-uz",i],["umount","-l",i]]}function Yau(i,u){if(process.platform==="win32")return;for(let t of zVt(i,u))if(Bun.spawnSync(t,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}var Wau=()=>{};import{existsSync as RVt,readdirSync as nVt}from"fs";import{rm as bVt}from"fs/promises";import{join as Sau}from"path";async function Lau(i,u={}){let t=u.detach??CVt,f=u.exists??RVt,l=u.readdir??((w)=>nVt(w)),E=u.rm??((w)=>bVt(w,{recursive:!0,force:!0})),c=Sau(i,"org");if(f(c))for(let w of l(c))t(Sau(c,w));await E(i)}var CVt=(i)=>Yau(i,process.platform==="darwin");var Qau=O(()=>{Wau()});import{join as MVt}from"path";function Hau(i){let u=i.purge??Lau;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await F1(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??MVt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof H6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var zau=O(()=>{Z4();Qau()});import{randomBytes as qVt}from"crypto";import{mkdir as VVt}from"fs/promises";import{createServer as rVt}from"net";import{join as mVt}from"path";function Rau(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function nau(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function bau(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 eVt(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 aVt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:eVt(i.repo?.cloneUrl)}}function Cau(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??oVt,l=i.fetchImpl??fetch,E=i.resolvePreviewUrl??((N,Z)=>`http://127.0.0.1:${Z}`),c=(N)=>mVt(i.dataDir,"sandboxes",N),w=(N)=>{try{i.registry?.upsert(N)}catch(Z){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${N.handle} status=${N.status}:`,Z)}},$=(N)=>{try{i.onEvent?.(N)}catch{}},h=async(N)=>{let Z=new AbortController,B=setTimeout(()=>Z.abort(),1500);try{let F=await l(`${N}/health`,{signal:Z.signal});if(!F.ok)console.warn(`[user-desktop] probe ${N}/health \u2192 ${F.status} (treating as dead)`);return F.ok}catch(F){return console.warn(`[user-desktop] probe ${N}/health failed: ${F instanceof Error?F.message:String(F)} (treating as dead)`),!1}finally{clearTimeout(B)}},v=(N)=>{console.warn(`[user-desktop] evicting dead daemon handle=${N.handle} port=${N.port}`);try{N.process.kill("SIGTERM")}catch{}if(t.get(N.handle)===N)t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:c(N.handle),port:null,previewUrl:null,...N.registryMetadata,error:null}),$({handle:N.handle,phase:"evicted"})},d=new Map;function D(){if(t.size<u)return;let N=[...t.values()].filter((B)=>B.activeDispatchCount===0).sort((B,F)=>B.lastUsedAt-F.lastUsedAt);if(N.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let Z=N[0];console.log(`[user-desktop] evicting LRU victim handle=${Z.handle} port=${Z.port} (cap ${u} reached, size=${t.size})`);try{Z.process.kill("SIGTERM")}catch{}t.delete(Z.handle),w({handle:Z.handle,status:"stopped",sandboxPath:c(Z.handle),port:null,previewUrl:null,...Z.registryMetadata,error:null}),$({handle:Z.handle,phase:"evicted"})}let _=async(N)=>{let Z=aVt(N),B=c(N.handle);w({handle:N.handle,status:"spawning",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"spawning",sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),D();let F,g=null,T;try{await VVt(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=qVt(24).toString("hex");let[k,I]=await Promise.all([f(),f()]);F=k,console.log(`[user-desktop] spawn handle=${N.handle} port=${F} devPort=${I} workdir=${B}`),g=await Promise.resolve(i.spawnDaemon({workdir:B,handle:N.handle,port:F,daemonToken:T,offloadAllowedHosts:N.offloadAllowedHosts??[],offloadAllowSameHostDev:N.offloadAllowSameHostDev??!1,orgFsConfigJson:N.orgFsConfigJson}));try{await i.waitForHealth(F)}catch(j){throw Rau("the sandbox didn't come online in time",j)}console.log(`[user-desktop] healthy handle=${N.handle} port=${F} \u2014 posting config`);try{await i.postConfig(F,I,{repo:N.repo,workload:N.workload,operator:N.operator},T)}catch(j){throw Rau(nau(j)?"configuration timed out":"the sandbox rejected its configuration",j)}}catch(k){if((nau(k)?console.warn:console.error)(`[user-desktop] sandbox bring-up failed handle=${N.handle} port=${F??"(none)"}${g?" (killing daemon)":""}:`,k),g)try{g.kill("SIGKILL")}catch{}throw $({handle:N.handle,phase:"failed",error:bau(k),sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),w({handle:N.handle,status:"failed",sandboxPath:B,port:null,previewUrl:null,...Z,error:bau(k)}),k}if(!g||F===void 0)throw Error("sandbox bring-up invariant violated");let U=`http://127.0.0.1:${F}`,A=E(N.handle,F);console.log(`[user-desktop] ready handle=${N.handle} port=${F} sandboxApiUrl=${U} previewUrl=${A}`);let G={handle:N.handle,port:F,process:g,sandboxApiUrl:U,previewUrl:A,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:T,registryMetadata:Z};if(t.set(N.handle,G),w({handle:N.handle,status:"ready",sandboxPath:B,port:F,previewUrl:A,...Z,error:null}),$({handle:N.handle,phase:"ready",port:F,previewUrl:A,sandboxPath:B,projectName:Z.projectName,branch:Z.branch}),g.exited)g.exited.then(()=>{if(t.get(N.handle)===G)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${N.handle} port=${F} \u2014 removing from cache`),t.delete(N.handle),w({handle:N.handle,status:"stopped",sandboxPath:B,port:null,previewUrl:null,...Z,error:null}),$({handle:N.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${N.handle} port=${F} (already replaced/removed)`)});return{sandboxApiUrl:U,previewUrl:A,port:F}};return{async ensureSandbox(N){let Z=t.get(N.handle);if(Z){if(await h(Z.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${N.handle} port=${Z.port} (alive)`),Z.lastUsedAt=Date.now(),{sandboxApiUrl:Z.sandboxApiUrl,previewUrl:Z.previewUrl,port:Z.port};console.warn(`[user-desktop] cache stale handle=${N.handle} port=${Z.port} \u2014 respawning`),v(Z)}let B=d.get(N.handle);if(B)return console.log(`[user-desktop] joining in-flight ensure handle=${N.handle}`),B;let F=_(N).finally(()=>{d.delete(N.handle)});return d.set(N.handle,F),F},proxyPort(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now();return Z?.port??null},getDaemonToken(N){return t.get(N)?.daemonToken??null},hasHandle(N){return t.has(N)||d.has(N)},recordHit(N){let Z=t.get(N);if(Z)Z.lastUsedAt=Date.now()},acquireDispatch(N){let Z=t.get(N);if(!Z)return()=>{};Z.activeDispatchCount+=1;let B=!1;return()=>{if(B)return;B=!0;let F=t.get(N);if(F)F.activeDispatchCount=Math.max(0,F.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(N){let Z=t.get(N);if(!Z){console.log(`[user-desktop] delete handle=${N} (not found, no-op)`);return}if(Z.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${N} port=${Z.port} REFUSED \u2014 ${Z.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${N} port=${Z.port}`);try{Z.process.kill("SIGTERM")}catch{}t.delete(N),w({handle:N,status:"stopped",sandboxPath:c(N),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),$({handle:N,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let N of t.values())try{N.process.kill("SIGTERM")}catch{}t.clear()}}}function oVt(){return new Promise((i,u)=>{let t=rVt();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 Mau=()=>{};import{randomUUID as sVt}from"crypto";import{hostname as pVt}from"os";async function qau(i){let u=pVt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=PMu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=f6i({path:t6i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,E=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let c=0,w=Cau({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(j,C)=>c>0?`http://${j}.localhost:${c}`:`http://127.0.0.1:${C}`,spawnDaemon:async(j)=>{let C={DAEMON_BOOT_ID:sVt(),APP_ROOT:j.workdir,PROXY_PORT:String(j.port),DAEMON_TOKEN:j.daemonToken,OFFLOAD_ALLOWED_HOSTS:j.offloadAllowedHosts.join(","),...j.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(j.orgFsConfigJson){let L=await kMu(i.dataDir);if(L)C.ORGFS_CONFIG=j.orgFsConfigJson,C.ORGFS_RCLONE_PATH=L}let K=await t({workdir:j.workdir,env:C,daemonPort:j.port});return{port:j.port,kill:(L)=>K.kill(L),exited:K.exited.then(()=>{return})}},postConfig:async(j,C,K,L)=>{let r={port:C};if(K.workload)r.runtime=K.workload.runtime,r.packageManager={name:K.workload.packageManager,...K.workload.packageManagerPath?{path:K.workload.packageManagerPath}:{}};let Q={application:r},ui=gh(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 g_(`http://127.0.0.1:${j}`,L,Q)},waitForHealth:async(j)=>{await tli(`http://127.0.0.1:${j}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),$=await Zau({port:i.port,lookupSandboxPort:(j)=>w.proxyPort(j)});c=$.port,console.log(`Local ingress listening on http://127.0.0.1:${$.port} (use http://<handle>.localhost:${$.port}/)`),i.monitor?.onIngress?.($.port);let h=XMu({provider:w}),v=async()=>{let j=await F_({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!j)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return j.accessToken},d=await Iau(i.dataDir),D=process.env.npm_package_version??"0.0.0",_=await Gbi(),N=Pau(_,{onChange:(j)=>{console.log(`[link-daemon] capabilities detected: +${j.join(",")} (now: ${_.join(",")})`)}}),Z=_Ri({path:`${i.dataDir}/link/outbox.sqlite`});Z.clear();let B=()=>{},F=new AbortController,g={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:v,provider:w,outbox:Z,controlHandler:h,capabilities:_,machineId:d,cliVersion:D,previewPort:$.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>B(),runLifetimeSignal:F.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let T=await lau(g);console.log("[link-daemon] active transport=tunnel");let U,A=new Promise((j)=>{U=j}),G=!1,k=async()=>{if(G)return;G=!0,F.abort(),console.log(`
|
|
83170
83178
|
Shutting down\u2026`),N();try{await T.close()}catch{}try{await $.stop()}catch{}try{await w.shutdown()}catch{}try{Z.close()}catch{}E(),U(0)};process.on("SIGINT",()=>void k()),process.on("SIGTERM",()=>void k()),B=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),k()},T.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!G)console.error("Cluster connection closed permanently; exiting."),k()});let I=Hau({provider:w,registry:f,dataDir:i.dataDir});return{stopped:A,stop:k,stopSandbox:I.stopSandbox,removeSandbox:I.removeSandbox,inspectSandbox:I.inspectSandbox}}catch(c){throw E(),c}}var Vau=O(()=>{cRi();CM();GMu();jMu();JMu();NRi();Eau();Bau();Gau();xau();bM();Ibi();zau();Mau()});function xbi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}import{createServer as irt}from"net";async function trt(i){for(let u of urt)if(await kbi(i,u))return u;return null}async function rau(i,{intervalMs:u=1000,sleepFn:t=P0}={}){for(;;){let f=await trt(i);if(f)return f;await t(u)}}function kbi(i,u){return new Promise((t)=>{let f=irt();f.once("error",(l)=>{t(l.code==="EADDRINUSE")}),f.listen(i,u,()=>{f.close(()=>t(!1))})})}var urt;var jbi=O(()=>{Z4();urt=["localhost","127.0.0.1","0.0.0.0"]});function mau(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="EADDRINUSE"}function frt(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 eau(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`:","",` ${frt(i,u)}`].join(`
|
|
83171
|
-
`)}var Xbi;var aau=O(()=>{Xbi=class Xbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var AL;var l6i=O(()=>{AL={name:"decocms",version:"4.141.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:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Uq={};Gi(Uq,{printBanner:()=>crt,bannerLines:()=>oau,BANNER_LINES:()=>E6i,BANNER_GRADIENT:()=>c6i});function Ert(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function oau(i){let u=E6i.map((t,f)=>{let[l,E,c]=Ert(c6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function crt(i){console.log("");for(let u of oau(i))console.log(u);console.log("")}var E6i,c6i;var yL=O(()=>{E6i=[" \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 "],c6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as wrt,Text as sau}from"ink";import{jsx as $rt,jsxs as pau}from"react/jsx-runtime";function w6i({version:i}){return pau(wrt,{flexDirection:"column",marginTop:1,children:[E6i.map((u,t)=>$rt(sau,{color:c6i[t],children:u},t)),pau(sau,{dimColor:!0,children:[" v",i]})]})}var Jbi=O(()=>{yL()});function iou(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 PL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function uou(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 tou(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 Sbi={};Gi(Sbi,{subscribeLinkState:()=>Kbi,setSelectedHandle:()=>Ybi,setRemoving:()=>v6i,setPersistedSandboxes:()=>Frt,setPendingConfirm:()=>yq,setMachine:()=>Nrt,setLogPath:()=>Zrt,setLinkActions:()=>Brt,setIngress:()=>_rt,setDaemonError:()=>Ort,setClusterUrl:()=>Drt,setCluster:()=>drt,setActionError:()=>h6i,resetLinkStateForTests:()=>Trt,removeSandboxRow:()=>Wbi,pushSandboxEvent:()=>grt,getLinkState:()=>Aq,applySandboxEvent:()=>fou});function vrt(i){return i==="spawning"||i==="ready"||i==="failed"}function fou(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 lou(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:hrt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of $6i)i()}function Aq(){return lf}function Kbi(i){return $6i.add(i),()=>$6i.delete(i)}function drt(i){lf={...lf,cluster:i},b3()}function Drt(i){lf={...lf,clusterUrl:i},b3()}function _rt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},b3()}function Nrt(i){lf={...lf,machine:i},b3()}function Ort(i){lf={...lf,daemonError:i},b3()}function Zrt(i){lf={...lf,logPath:i},b3()}function Ybi(i){lf={...lf,selectedHandle:i},b3()}function yq(i){lf={...lf,pendingConfirm:i},b3()}function h6i(i){lf={...lf,actionError:i},b3()}function v6i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},b3()}function Brt(i){lf={...lf,actions:i},b3()}function Wbi(i){let u=PL(lf.sandboxes),t=tou(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},b3()}function Frt(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(vrt(f.status))u.set(t,f);lf={...lf,sandboxes:u},b3()}function grt(i){lf={...lf,sandboxes:fou(lf.sandboxes,i)},b3()}function Trt(){lf=lou(),$6i.clear()}var hrt=20,lf,$6i;var Pq=O(()=>{lf=lou(),$6i=new Set});import{spawn as Urt}from"child_process";function Art(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Eou(i,u=process.platform){let t=Art(u);try{Urt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var cou=()=>{};function wou(i,u={}){let t=u.openUrl??Eou,f=Aq(),l=PL(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":Ybi(uou(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);h6i(null),yq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(yq(null),w===null||!c)return;v6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)Wbi(w.handle);else v6i(w.handle,!1),h6i($.error)});return}case"confirmNo":yq(null);return;case"quit":if(c)c.quit();return}}var $ou=O(()=>{Pq();cou()});function hou(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 vou={};Gi(vou,{LinkApp:()=>Irt});import{Box as C1,Text as vl,useInput as yrt}from"ink";import{useSyncExternalStore as Prt}from"react";import{jsx as jf,jsxs as Xh}from"react/jsx-runtime";function Grt(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 Irt(){let i=Prt(Kbi,Aq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=PL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return yrt((l,E)=>{let c=hou(l,E,i.pendingConfirm!==null);if(c!==null)wou(c)}),Xh(C1,{flexDirection:"column",children:[jf(w6i,{version:AL.version}),jf(C1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),jf(C1,{children:i.cluster==="linked"?Xh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Xh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Xh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),jf(C1,{children:i.ingressUrl?Xh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):jf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),jf(C1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?jf(vl,{dimColor:!0,children:"No previews running yet."}):Xh(C1,{flexDirection:"column",children:[Xh(C1,{children:[jf(C1,{width:2,flexShrink:0}),jf(C1,{width:GL.project,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),jf(C1,{width:GL.branch,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),jf(C1,{width:GL.status,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),jf(C1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=Grt(l,i.removingHandles.has(l.handle)),c=l.handle===f;return Xh(C1,{children:[jf(C1,{width:2,flexShrink:0,children:jf(vl,{color:"cyan",children:c?"\u203A":" "})}),jf(C1,{width:GL.project,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),jf(C1,{width:GL.branch,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),jf(C1,{width:GL.status,flexShrink:0,marginRight:1,children:jf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),jf(C1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?jf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?jf(C1,{marginTop:1,children:Xh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?jf(C1,{marginTop:1,children:jf(vl,{color:"yellow",children:iou(i.pendingConfirm)})}):null,i.actionError?jf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,jf(C1,{marginTop:1,children:jf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var GL;var dou=O(()=>{l6i();Jbi();$ou();Pq();GL={project:18,branch:22,status:14}});var Dou={};Gi(Dou,{runLinkCommand:()=>Wrt});import{closeSync as xrt,mkdirSync as krt,openSync as jrt,writeSync as Xrt}from"fs";import{homedir as Jrt}from"os";import{join as Lbi}from"path";function Krt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{Xrt(u,`${xbi(l)}
|
|
83179
|
+
`)}var Xbi;var aau=O(()=>{Xbi=class Xbi extends Error{port;code="EADDRINUSE";constructor(i){super(`Port ${i} is already in use.`);this.port=i;this.name="PortInUseError"}}});var AL;var l6i=O(()=>{AL={name:"decocms",version:"4.141.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.144.3","@openai/codex-darwin-arm64":"npm:@openai/codex@0.144.3-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.144.3-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.144.3-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.144.3-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.144.3-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.144.3-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@resvg/resvg-js":"^2.6.2","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6",satori:"^0.28.2"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@decocms/tunnel":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",vite:"^7.2.1",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});var Uq={};Gi(Uq,{printBanner:()=>crt,bannerLines:()=>oau,BANNER_LINES:()=>E6i,BANNER_GRADIENT:()=>c6i});function Ert(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function oau(i){let u=E6i.map((t,f)=>{let[l,E,c]=Ert(c6i[f]);return`\x1B[38;2;${l};${E};${c}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function crt(i){console.log("");for(let u of oau(i))console.log(u);console.log("")}var E6i,c6i;var yL=O(()=>{E6i=[" \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 "],c6i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as wrt,Text as sau}from"ink";import{jsx as $rt,jsxs as pau}from"react/jsx-runtime";function w6i({version:i}){return pau(wrt,{flexDirection:"column",marginTop:1,children:[E6i.map((u,t)=>$rt(sau,{color:c6i[t],children:u},t)),pau(sau,{dimColor:!0,children:[" v",i]})]})}var Jbi=O(()=>{yL()});function iou(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 PL(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function uou(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 tou(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 Sbi={};Gi(Sbi,{subscribeLinkState:()=>Kbi,setSelectedHandle:()=>Ybi,setRemoving:()=>v6i,setPersistedSandboxes:()=>Frt,setPendingConfirm:()=>yq,setMachine:()=>Nrt,setLogPath:()=>Zrt,setLinkActions:()=>Brt,setIngress:()=>_rt,setDaemonError:()=>Ort,setClusterUrl:()=>Drt,setCluster:()=>drt,setActionError:()=>h6i,resetLinkStateForTests:()=>Trt,removeSandboxRow:()=>Wbi,pushSandboxEvent:()=>grt,getLinkState:()=>Aq,applySandboxEvent:()=>fou});function vrt(i){return i==="spawning"||i==="ready"||i==="failed"}function fou(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 lou(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:hrt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function b3(){for(let i of $6i)i()}function Aq(){return lf}function Kbi(i){return $6i.add(i),()=>$6i.delete(i)}function drt(i){lf={...lf,cluster:i},b3()}function Drt(i){lf={...lf,clusterUrl:i},b3()}function _rt(i,u){lf={...lf,ingressPort:i,ingressUrl:u},b3()}function Nrt(i){lf={...lf,machine:i},b3()}function Ort(i){lf={...lf,daemonError:i},b3()}function Zrt(i){lf={...lf,logPath:i},b3()}function Ybi(i){lf={...lf,selectedHandle:i},b3()}function yq(i){lf={...lf,pendingConfirm:i},b3()}function h6i(i){lf={...lf,actionError:i},b3()}function v6i(i,u){if(lf.removingHandles.has(i)===u)return;let t=new Set(lf.removingHandles);if(u)t.add(i);else t.delete(i);lf={...lf,removingHandles:t},b3()}function Brt(i){lf={...lf,actions:i},b3()}function Wbi(i){let u=PL(lf.sandboxes),t=tou(u,i,lf.selectedHandle),f=new Map(lf.sandboxes);f.delete(i);let l=new Set(lf.removingHandles);l.delete(i),lf={...lf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},b3()}function Frt(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(vrt(f.status))u.set(t,f);lf={...lf,sandboxes:u},b3()}function grt(i){lf={...lf,sandboxes:fou(lf.sandboxes,i)},b3()}function Trt(){lf=lou(),$6i.clear()}var hrt=20,lf,$6i;var Pq=O(()=>{lf=lou(),$6i=new Set});import{spawn as Urt}from"child_process";function Art(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Eou(i,u=process.platform){let t=Art(u);try{Urt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var cou=()=>{};function wou(i,u={}){let t=u.openUrl??Eou,f=Aq(),l=PL(f.sandboxes),E=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,c=f.actions;switch(i.type){case"move":Ybi(uou(l,f.selectedHandle,i.delta));return;case"open":{if(E===null)return;let w=f.sandboxes.get(E);if(w?.status==="ready"&&w.previewUrl)t(w.previewUrl);return}case"stop":if(E!==null&&c)c.stopSandbox(E);return;case"delete":{if(E===null||!c)return;let w=c.inspectSandbox(E),$=f.sandboxes.get(E);h6i(null),yq({handle:E,branch:w?.branch??$?.branch??null,dirtyCount:w?.dirtyCount??0,merged:w?.merged??null});return}case"confirmYes":{let w=f.pendingConfirm;if(yq(null),w===null||!c)return;v6i(w.handle,!0),c.removeSandbox(w.handle).then(($)=>{if($.ok)Wbi(w.handle);else v6i(w.handle,!1),h6i($.error)});return}case"confirmNo":yq(null);return;case"quit":if(c)c.quit();return}}var $ou=O(()=>{Pq();cou()});function hou(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 vou={};Gi(vou,{LinkApp:()=>Irt});import{Box as C1,Text as vl,useInput as yrt}from"ink";import{useSyncExternalStore as Prt}from"react";import{jsx as jf,jsxs as Xh}from"react/jsx-runtime";function Grt(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 Irt(){let i=Prt(Kbi,Aq),u=[...i.sandboxes.values()].sort((l,E)=>l.handle.localeCompare(E.handle)),t=PL(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return yrt((l,E)=>{let c=hou(l,E,i.pendingConfirm!==null);if(c!==null)wou(c)}),Xh(C1,{flexDirection:"column",children:[jf(w6i,{version:AL.version}),jf(C1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:"\u2500".repeat(80)})}),jf(C1,{children:i.cluster==="linked"?Xh(vl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?Xh(vl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):Xh(vl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),jf(C1,{children:i.ingressUrl?Xh(vl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):jf(vl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),jf(C1,{marginBottom:1,children:jf(vl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?jf(vl,{dimColor:!0,children:"No previews running yet."}):Xh(C1,{flexDirection:"column",children:[Xh(C1,{children:[jf(C1,{width:2,flexShrink:0}),jf(C1,{width:GL.project,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),jf(C1,{width:GL.branch,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),jf(C1,{width:GL.status,flexShrink:0,marginRight:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),jf(C1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let E=Grt(l,i.removingHandles.has(l.handle)),c=l.handle===f;return Xh(C1,{children:[jf(C1,{width:2,flexShrink:0,children:jf(vl,{color:"cyan",children:c?"\u203A":" "})}),jf(C1,{width:GL.project,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.projectName??l.handle})}),jf(C1,{width:GL.branch,flexShrink:0,marginRight:1,children:jf(vl,{bold:c,wrap:"truncate-end",children:l.branch??"\u2014"})}),jf(C1,{width:GL.status,flexShrink:0,marginRight:1,children:jf(vl,{color:E.color,bold:c,wrap:"truncate-end",children:E.text})}),jf(C1,{flexGrow:1,children:jf(vl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?jf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?jf(C1,{marginTop:1,children:Xh(vl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?jf(C1,{marginTop:1,children:jf(vl,{color:"yellow",children:iou(i.pendingConfirm)})}):null,i.actionError?jf(C1,{marginTop:1,children:Xh(vl,{color:"red",children:["\u2717 ",i.actionError]})}):null,jf(C1,{marginTop:1,children:jf(vl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var GL;var dou=O(()=>{l6i();Jbi();$ou();Pq();GL={project:18,branch:22,status:14}});var Dou={};Gi(Dou,{runLinkCommand:()=>Wrt});import{closeSync as xrt,mkdirSync as krt,openSync as jrt,writeSync as Xrt}from"fs";import{homedir as Jrt}from"os";import{join as Lbi}from"path";function Krt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{Xrt(u,`${xbi(l)}
|
|
83172
83180
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(xbi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function Yrt(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 Wrt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??Lbi(Jrt(),"deco"),f=i.clusterBaseUrl??process.env.STUDIO_CLUSTER_URL??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,E,c,w=()=>{if(c===void 0)return;try{c.close()}catch{}finally{c=void 0}};try{if(await kbi(u,"127.0.0.1"))throw new Xbi(u);let $=Lbi(t,"sandboxes");c=f6i({path:t6i(t),managedSandboxRoot:$});let h=await s1i({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await Yrt(f,h.accessToken);let v=c.reconcile();if(i.prune){let N=c.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${N.removed.length}, skipped ${N.skipped.length}.`);v=c.reconcile()}let d;if(i.tui){let{render:N}=await import("ink"),{createElement:Z}=await import("react"),{LinkApp:B}=await Promise.resolve().then(() => (dou(),vou)),{pushSandboxEvent:F,setCluster:g,setClusterUrl:T,setDaemonError:U,setIngress:A,setLogPath:G,setMachine:k,setPersistedSandboxes:I}=await Promise.resolve().then(() => (Pq(),Sbi));krt(t,{recursive:!0});let j=Lbi(t,"link.log");E=jrt(j,"w"),G(j),I(v),T(f),g("connecting"),d={onEvent:(C)=>F(C),onIngress:(C)=>A(C,`http://127.0.0.1:${C}`),onCluster:(C)=>g(C),onMachine:(C)=>k(C)},l=Krt(U,E),N(Z(B),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:N}=await Promise.resolve().then(() => (yL(),Uq));N(i.version??"0.0.0")}w();let D=process.env.DECOCMS_LINK_MANAGED!=="1",_=await qau({port:u,clusterBaseUrl:f,dataDir:t,session:h,monitor:d,logFd:E,perSandboxLogs:D,hotReload:i.hotReload});if(i.tui){let{setLinkActions:N}=await Promise.resolve().then(() => (Pq(),Sbi));N({stopSandbox:_.stopSandbox,removeSandbox:_.removeSandbox,inspectSandbox:_.inspectSandbox,quit:_.stop})}return await _.stopped}catch($){return l?.(),console.error(mau($)?eau(u):$ instanceof Error?$.message:String($)),1}finally{if(l?.(),E!==void 0)try{xrt(E)}catch{}w()}}var _ou=O(()=>{ERi();Vau();jbi();aau();Ibi()});var bbi={};Gi(bbi,{resolveDevLinkClusterUrl:()=>Hrt,populateDevLinkToxiProxy:()=>gou,isDevLinkToxiProxyEnabled:()=>Qrt,ensureDevLinkToxiProxy:()=>Crt,buildDevLinkToxiProxyConfig:()=>Bou,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Oou,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Zou});function Qrt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function Qbi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Bou(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=Qbi(i.apiPort,"apiPort"),f=Qbi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=Qbi(Number.parseInt(u.port,10),"upstreamPort"),E=`http://127.0.0.1:${l}`,c=`http://127.0.0.1:${f}`;return{serviceName:Oou,proxyName:Zou,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:E,clusterUrl:c,logLine:`[dev-link-toxiproxy] ready: ${c} -> ${E}`}}function Hrt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function Hbi(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 nbi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Fou(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Fou(i.cause)}async function zbi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${nbi(l)}`,{cause:l})}}async function gou(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await zbi(u,"reset",t,{method:"POST"});await Hbi(f,"reset",t);let l=`${i.apiUrl}/populate`,E=await zbi(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 Hbi(E,"populate",l)}async function zrt(i,u){let t=`${i.apiUrl}/version`;try{await F1(async()=>{let f=await zbi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(Lrt)});await Hbi(f,"readiness check",t)},{maxAttempts:Srt,minTimeout:Nou,maxTimeout:Nou,multiplier:1,jitter:0,isRetriable:(f)=>!Fou(f)})}catch(f){let l=f instanceof H6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${nbi(l)}`,{cause:l})}}async function Rrt(i){if(i===null)return"";return await new Response(i).text()}async function Rbi(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}): ${nbi(w)}`,{cause:w})}})(),[l,E]=await Promise.all([f.exited,Rrt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let c=E.trim().length>0?`: ${E.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${c}`)}async function nrt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Rbi(["rm","-f",t],{ignoreFailure:!0}),await Rbi(["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 brt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await Rbi(["rm","-f",t],{ignoreFailure:!0})}async function Crt(i){let u=Bou(i),t=i.startDaemon??nrt,f=i.stopDaemon??(i.startDaemon===void 0?brt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await zrt(u,l),await gou(u,l)}catch(E){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw E}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var Oou="ToxiProxy",Zou="dev_link_studio",Srt=20,Nou=100,Lrt=100;var Cbi=O(()=>{Z4()});var Tou={};Gi(Tou,{migrateBetterAuth:()=>Mbi});import{getMigrations as Mrt}from"better-auth/db";import{sso as qrt}from"@better-auth/sso";import{organization as Vrt}from"@decocms/better-auth/plugins";import{admin as rrt,apiKey as mrt,jwt as ert,magicLink as art,mcp as ort,openAPI as srt}from"better-auth/plugins";import{emailOTP as prt}from"better-auth/plugins/email-otp";async function Mbi(i){let t={database:LM(i||N_()),plugins:[Vrt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),rrt(),mrt(),ert(),srt(),ort({loginPage:"/login"}),qrt(),art({sendMagicLink:async()=>{}}),prt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:E}=await Mrt(t);if(!f.length&&!l.length)return"up to date";return await E(),`${l.length+f.length} table(s) migrated`}var qbi=O(()=>{b6()});var Vbi={};Gi(Vbi,{up:()=>imt,down:()=>umt});import{sql as Zd}from"kysely";async function imt(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(Zd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Zd`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(Zd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Zd`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(Zd`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(Zd`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(Zd`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(Zd`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(Zd`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Zd`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 umt(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 Uou=()=>{};var rbi={};Gi(rbi,{up:()=>tmt,down:()=>fmt});import{sql as Aou}from"kysely";async function tmt(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(Aou`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Aou`CURRENT_TIMESTAMP`)).execute()}async function fmt(i){await i.schema.dropTable("organization_settings").execute()}var you=()=>{};var mbi={};Gi(mbi,{up:()=>lmt,down:()=>Emt});async function lmt(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 Emt(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 ebi={};Gi(ebi,{up:()=>cmt,down:()=>wmt});async function cmt(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 wmt(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 abi={};Gi(abi,{up:()=>$mt,down:()=>hmt});async function $mt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function hmt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var obi={};Gi(obi,{up:()=>dmt,down:()=>Dmt});import{sql as vmt}from"kysely";async function dmt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",vmt`text`).execute()}async function Dmt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Pou=()=>{};var sbi={};Gi(sbi,{up:()=>_mt,down:()=>Nmt});async function _mt(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 Nmt(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 pbi={};Gi(pbi,{up:()=>Omt,down:()=>Zmt});import{sql as Gq}from"kysely";async function Omt(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(Gq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Gq`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(Gq`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(Gq`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(Gq`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 Zmt(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 Gou=()=>{};var iCi={};Gi(iCi,{up:()=>Fmt,down:()=>gmt});import{sql as Bmt}from"kysely";async function Fmt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function gmt(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(Bmt`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 Iou=()=>{};var uCi={};Gi(uCi,{up:()=>Tmt,down:()=>Umt});import{sql as d6i}from"kysely";async function Tmt(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(d6i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(d6i`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(d6i`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 d6i`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 Umt(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 xou=()=>{};var tCi={};Gi(tCi,{up:()=>Amt,down:()=>ymt});async function Amt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function ymt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var fCi={};Gi(fCi,{up:()=>Pmt,down:()=>Gmt});import{sql as D6i}from"kysely";async function Pmt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await D6i`
|
|
83173
83181
|
UPDATE gateways
|
|
83174
83182
|
SET tool_selection_mode = CASE
|
|
@@ -86803,7 +86811,7 @@ ${[...Q].sort().join(`
|
|
|
86803
86811
|
${i.agentInstructions.trim()}
|
|
86804
86812
|
</agent-instructions>`:null,GGi,kR(i.now??new Date)].filter((t)=>Boolean(t?.trim()));return u.length>0?u.join(`
|
|
86805
86813
|
|
|
86806
|
-
`):void 0}var jut;var Xut=O(()=>{Nf();mm();kut();xvu();UGi();Ivu();jvu();xGi();kGi();jut={id:"codex",create(i){return{id:"codex",async*stream(u){let t=ovu(u.models.thinking.id),f=gGi(u.workspace.cwd),l=py4({workspace:u.workspace,agentInstructions:u.agent.instructions});console.log(`[codex] stream start model=${t} cwd=${f??"(default)"} mcpUrl=${u.mcp.url} mode=${u.mode}`);let{model:E,provider:c}=avu(t,sy4(u,f,l));try{let w=await TGi([u.userMessage]),h=Rn({currentThreadTitle:u.currentThreadTitle})?(()=>{let{model:N,provider:Z}=avu(ovu("codex:gpt-5.6-luna"),{toolApprovalLevel:"readonly",isPlanMode:!0,cwd:f}),B=nn({abortSignal:u.signal,models:[()=>N],userMessage:Hn(w)}),F=B.promise.finally(()=>Z.close().catch(()=>{}));return{handle:B,closed:F}})():null,v=h?.handle??null,d=R5({model:E,messages:w,abortSignal:u.signal,allowSystemInMessages:!0}),D=yGi({input:u,providerName:"codex",providerMetadataKey:"codex-app-server",extractSessionId:(N)=>typeof N?.threadId==="string"?N.threadId:void 0}),_=d.toUIMessageStream({generateMessageId:U2,messageMetadata:D});try{let N=v?IGi(_,v):_;for await(let Z of N)yield Z}catch(N){if(u.harness.sessionId&&jGi(N))throw new kp(N);throw N}finally{v?.finish(),await h?.closed.catch(()=>{})}}finally{await c.close().catch(()=>{})}}}}}});import{context as iP4,trace as uP4}from"@opentelemetry/api";function Jut(i){tP4({...i,tracer:i.ctx.tracer})}function tP4(i){try{if(!i.organizationId)return;let u=i.tracer.startSpan(Xzi),t=uP4.setSpan(iP4.active(),u),f=i.totalUsage??i.usage;ka({type:pS,organizationId:i.organizationId,connectionId:J1i,toolName:i.modelId,toolArguments:{model:i.modelId,credentialId:i.credentialId,threadId:i.taskId,...i.request?.body!==void 0?{requestBody:i.request.body}:{}},result:{...i.usage??{},...i.totalUsage?{totalUsage:i.totalUsage}:{},...i.cost!==void 0?{cost:i.cost}:{},...i.finishReason?{finishReason:i.finishReason}:{},...i.response?{responseId:i.response.id,responseModelId:i.response.modelId,responseTimestamp:i.response.timestamp,messages:i.response.messages}:{},logType:pS},duration:i.durationMs,isError:i.isError,errorMessage:i.errorMessage??null,userId:i.userId,requestId:i.requestId,userAgent:i.userAgent??null,virtualMcpId:i.agentId??null,properties:{model_title:i.modelTitle,credential_id:i.credentialId,thread_id:i.taskId,log_type:pS,...i.response?{response_id:i.response.id}:{},...f?{input_tokens:String(f.inputTokens),output_tokens:String(f.outputTokens),total_tokens:String(f.totalTokens)}:{},...i.cost!==void 0?{cost:String(i.cost)}:{}}},t),u.end()}catch{}}var Kut=O(()=>{z5i();qw()});function Yut(i){let{ctx:u,organizationId:t,modelId:f,durationMs:l,isError:E,inputTokens:c,outputTokens:w,cacheReadTokens:$,cacheWriteTokens:h}=i;if(!t||!f)return;let v={"connection.id":J1i,"tool.name":f,"organization.id":t,status:E?"error":"success","error.type":E?i.errorType||"Error":""};if(u.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(l,v),u.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,v),c!=null||w!=null)u.meter.createCounter("tool.execution.tokens",{description:"Number of tokens used by LLM calls"}).add((c??0)+(w??0),v);if(($??0)>0)u.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add($,{...v,kind:"read"});if((h??0)>0)u.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(h,{...v,kind:"write"})}var Wut=O(()=>{qw()});function lP4(i,u,t){if(!t)return i;let f=new Set;for(let[l,E]of u)if(t.has(l)||t.has(E))f.add(E);return Object.fromEntries(Object.entries(i).filter(([l])=>f.has(l)))}function EP4(i,u){if(!u)return i;return Object.fromEntries(Object.entries(i).filter(([t])=>fP4.has(t)||u.has(t)))}async function Sut(i,u,t){let f=bn(i),l=u.organization,E=i.mode==="plan",c=i.toolAllowlist&&i.toolAllowlist.length>0?new Set(i.toolAllowlist):null,w=await t.mcpForAgent(i.agent.id,{superUser:!0,listTimeoutMs:1000});try{let{tools:$,nameMap:h,rawTools:v}=await NUi(w,t.toolOutputMap,t.writer,i.toolApprovalLevel,{isPlanMode:E,timeoutMs:kvi,resolveArgs:t.resolveArgs,onToolCalled:t.onToolCalled,onPrOpened:t.onPrOpened}),d=lP4($,h,c),D=f.virtualMcp.metadata,_=await oo(u,t.threadId),Z=!(_??D.githubRepo),B=i.user.id?{virtualMcpId:i.agent.id,branch:_?lUi(t.threadId,_.connectionId):Z?"ephemeral":f.branch??`thread:${t.threadId}`,userId:i.user.id,threadId:t.threadId,syncTools:!0}:null,F=await yUi(t.writer,{provider:t.provider,imageProvider:t.imageProvider,webSearchProvider:t.webSearchProvider,deepResearchProvider:t.deepResearchProvider,organization:l,models:i.models,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:E,toolOutputMap:t.toolOutputMap,pendingImages:t.pendingImages,passthroughClient:w,vmContext:B,htmlArtifactBuffer:t.htmlArtifactBuffer,taskId:t.threadId,agentId:i.agent.id,onChildUsage:t.onChildUsage,backgroundDispatcher:t.backgroundDispatcher},u),g=EP4(F,c),T=[],U=new Map;for(let I of v){let j=h.get(I.name);if(!j)continue;if(c&&!c.has(I.name)&&!c.has(j))continue;let C=typeof I._meta?.gatewayClientId==="string"?I._meta.gatewayClientId:"unknown";if(T.push({rawName:I.name,safeName:j,connectionId:C}),E)U.set(j,{readOnlyHint:I.annotations?.readOnlyHint})}let A=w.getConnectionTitleMap(),G=w.getInstructions();return{tools:{...d,...g},nameMap:h,passthroughTools:d,builtInTools:g,passthroughToolList:v,connectionsBlockTools:T,toolAnnotations:U,vmContext:B,connectionTitleMap:A,serverInstructions:G,passthroughClient:w,close:async()=>{await w.close().catch(()=>{})}}}catch($){throw await w.close().catch(()=>{}),$}}var fP4;var Lut=O(()=>{EO();HEu();OUi();Cn();fP4=new Set(["read_tool_output","enable_tool","open_in_agent","todo_write","update_interests"])});function Qut(i){let u=cP4.exec(i);if(!u)return null;return{path:i,name:u[2],kind:u[1].toLowerCase()==="decks"?"deck":"page"}}function Hut(i,u){if(i.kind!=="file"||i.deletedAt)return null;let t=u.threadId!=null&&i.threadId===u.threadId,f=i.threadId==null&&i.updatedBy===u.ownerId;if(!t&&!f)return null;return Qut(i.path)}function zut(i,u){if(!u)return null;let t=i.replace(/^\.\//,""),f=`org/${u}/`,l=t.indexOf(f);if(l!==0&&(l<0||t[l-1]!=="/"))return null;return Qut(t.slice(l+f.length))}var cP4;var svu=O(()=>{cP4=/^(decks|pages)\/([a-z0-9][a-z0-9._-]*)\.html$/i});function Rut(i){let u=i.orgFs,t=i.organization?.slug??null,f=i.auth?.user?.id??null;if(!u||!t||!f)return $P4;let l=Eg,E=i.metadata?.threadId??null,c=new Map;return{enqueue(w,$){let h=zut(w,l);if(!h)return;c.set(h.path,$)},async flush(){if(c.size===0)return;let w=[...c.entries()];c.clear(),await Promise.allSettled(w.map(async([$,h])=>{try{await u.write(wP4,$,h,{actor:f,contentType:"text/html; charset=utf-8",threadId:E})}catch(v){console.error("[deck-buffer] org-fs write failed",{path:$},v)}}))}}}var wP4="home",$P4;var nut=O(()=>{M5i();svu();$P4={enqueue:()=>{},flush:async()=>{}}});function but(i,u){let t=i.orgFs,f=i.organization?.slug??null,l=i.auth?.user?.id??null;if(!t||!f||!l)return{sweep:async()=>{}};let E=Eg,c={threadId:i.metadata?.threadId??null,ownerId:l},w=t.latestSeq(pvu).catch((_)=>{return console.error("[deck-watcher] cursor snapshot failed",_),null}),$=null,h=!1,v=!1,d=new Map;return{sweep:async()=>{if(v)return;v=!0;try{if(!h)$=await w,h=!0;if($===null)return;let _=new Map;for(let N=0;N<20;N++){let Z=await t.changes(pvu,$,hP4);for(let B of Z.entries){let F=Hut(B,c);if(!F)continue;if(B.contentHash){if(d.get(F.path)===B.contentHash)continue;d.set(F.path,B.contentHash)}_.set(F.path,{volume:pvu,path:F.path,name:F.name,kind:F.kind,mountPath:`org/${E}/${F.path}`})}if($=Z.cursor,!Z.hasMore)break}for(let N of _.values())u.write({type:"data-deck-updated",id:N.path,data:N})}catch(_){console.error("[deck-watcher] sweep failed",_)}finally{v=!1}}}}var pvu="home",hP4=200;var Cut=O(()=>{M5i();svu()});async function vP4(i,u,t){let f=await XR({kind:t.kind,ctx:i,organization:u,virtualMcp:t.virtualMcp,mcpClient:t.mcpClient,provider:t.provider,models:t.models,messages:t.messages,abortSignal:t.abortSignal,temperature:t.temperature,planMode:t.planMode,isDecopilot:t.isDecopilot,systemAgentInstructions:t.systemAgentInstructions,currentThreadId:t.currentThreadId,user:t.user,userContext:t.userContext,codingWorkspace:t.codingWorkspace,writer:t.writer,subtaskParams:{provider:t.provider,organization:u,models:t.models,codingWorkspace:t.codingWorkspace},prepareStep:t.prepareStep,onStepFinish:t.onStepFinish,passthroughClient:t.passthroughClient,connectionsData:t.connectionsData,extraTools:t.extraTools,additionalSystemMessages:t.additionalSystemMessages,stepLimit:t.stepLimit});return{result:f.result,error:f.error,span:f.span,assembledSystemMessages:f.assembledSystemMessages}}function Mut(i){let{ctx:u,organization:t,modelRuntime:f,sideChannel:l,cleanup:E}=i,c=but(u,l.writer),w=Rut(u);return{toolRuntime:{buildEnvironmentTools:async({input:v,onChildUsage:d})=>{let D=bn(v),_=new Map,N=[],{resolveArgs:Z,onToolCalled:B,onPrOpened:F}=kUi(u,v.threadId),g=await Sut(v,u,{writer:l.writer,toolOutputMap:_,pendingImages:N,threadId:v.threadId,resolveArgs:Z,onToolCalled:B,onPrOpened:F,mcpForAgent:async(U,A)=>{let G=D.virtualMcp,k=null;if(G.id&&v.user.id&&o1(G.metadata)[v.user.id])k=await NY(u,G.id,v.user.id,D.branch??void 0).catch(()=>null);return K2(G,u,"passthrough",A?.superUser??!1,{listTimeoutMs:A?.listTimeoutMs,includeSkillsCatalog:!0,additionalConnections:k?[k]:[]})},provider:f.thinking.provider,imageProvider:f.image?.provider??f.thinking.provider,webSearchProvider:f.webSearch?.provider??f.thinking.provider,deepResearchProvider:f.deepResearch?.provider??f.thinking.provider,backgroundDispatcher:WUi({threadId:v.threadId,orgId:v.organizationId,userId:v.user.id,agentId:v.agent.id,temperature:v.temperature,toolApprovalLevel:v.toolApprovalLevel,branch:D.branch??null}),htmlArtifactBuffer:w,onChildUsage:d}),T={tools:g.tools,passthroughTools:g.passthroughTools,builtInTools:g.builtInTools,connectionsBlockTools:g.connectionsBlockTools,toolAnnotations:g.toolAnnotations,connectionTitleMap:g.connectionTitleMap,serverInstructions:g.serverInstructions,passthroughClient:g.passthroughClient,writer:l.writer,pendingImages:N,sideChunks:l.stream,closeSideChunks:l.close,onStepFinish:async()=>{await w.flush(),await c.sweep()},close:g.close};return E.close=g.close,T},runEngine:(v)=>vP4(u,t,v)},telemetry:{recordLlmCall:(v)=>Yut({ctx:u,...v}),monitorLlmCall:(v)=>Jut({ctx:u,...v,requestId:u.metadata.requestId,userAgent:u.metadata.userAgent??null})}}}var qut=O(()=>{Kut();Wut();zz();bUi();G$();Lut();bEu();nut();Cut();BUi();YR();Cn()});function HGi(i){if(i.providerId==="openai-compatible")try{let u=JSON.parse(i.apiKey);return{kind:"secret",providerId:i.providerId,apiKey:u.apiKey??"",modelId:i.modelId,...u.baseUrl?{baseUrl:u.baseUrl}:{}}}catch{return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}var Vut=O(()=>{Qd();nQ()});var rut=O(()=>{Vut()});var mut=O(()=>{Bit();Jit();Xut();qut();_vu();Ovu();rut();jit((i)=>{let u=i.ctx;return Mut({...i,ctx:u,organization:u.organization})});ZGi(Xit);ZGi(Zit);ZGi(jut)});function idu(i){if(i==="codex")return"codex";if(i==="claude-code")return"claude-code";return}function eut(i){return idu(i)!==void 0}class aut{thread;organization_id;storage;defaultWindowSize;constructor(i){this.thread=i.thread,this.organization_id=i.thread.organization_id,this.storage=i.storage,this.defaultWindowSize=i.defaultWindowSize??50}async loadHistory(i){let u=i??this.defaultWindowSize,{chronological:t,isWindowed:f}=this.thread.message_storage_version===2?await this.loadWindowedFromParts(u):await this.loadWindowedFromMessages(u),l=t.find(($)=>$.role!=="system");if(!l||l.role==="user")return t;let E=l,c=f?"[Context: earlier turns in this conversation were truncated. The messages below continue the thread \u2014 pick up from there.]":"[Context: this thread opens with your message \u2014 you spoke first to greet the user, and the user has not spoken before it. Their reply follows.]";return[{id:`${this.thread.id}-msg-prefix`,thread_id:this.thread.id,role:"user",parts:[{type:"text",text:c}],metadata:void 0,created_at:E.created_at,updated_at:E.updated_at},...t]}async loadWindowedFromMessages(i){let{messages:u,total:t}=await this.storage.listMessages(this.thread.id,{limit:i,sort:"desc"});return{chronological:[...u].reverse(),isWindowed:t>u.length}}async loadWindowedFromParts(i){let{messages:u,total:t}=await this.storage.messageParts().loadWindow(this.thread.id,{limit:i});return{chronological:u.map((l)=>({id:l.id,thread_id:this.thread.id,role:l.role,parts:l.parts,metadata:l.metadata??void 0,created_at:l.created_at,updated_at:l.created_at})),isWindowed:t>u.length}}}async function zGi(i,u){let{thread_id:t,defaultWindowSize:f}=u;if(!t)throw Error("createMemory: thread_id is required");let l=await i.get(t);if(!l)throw Error(`Thread not found: ${t}`);return new aut({thread:l,storage:i,defaultWindowSize:f})}function dP4(i,u){let t=i.filter((E)=>E.parts&&E.parts.length>0),f=t.findIndex((E)=>E.id===u.id);return f>=0?[...t.slice(0,f),u]:[...t,u]}async function DP4(i){return[...i.systemMessages,...dP4(i.history,i.userMessage)]}async function out(i){let u=i.isSubagent?[]:await(await zGi(i.ctx.storage.threads,{thread_id:i.threadId,organization_id:i.ctx.organization?.id??"",userId:i.ctx.auth.user?.id??"",defaultWindowSize:i.windowSize??y5})).loadHistory(i.windowSize??y5),t=await DP4({history:u,userMessage:i.userMessage,systemMessages:i.systemMessages});return xUi(t,i.ctx)}var sut=O(()=>{m9();KR()});function put(i,u){let t=i.thinking.capabilities;if(!((t?.vision??!1)||(t?.file??!1))){if(u.some((E)=>E.parts?.some((c)=>c.type==="file")))throw new G0(400,{message:"This model does not support file uploads. Please change the model and try again."})}}var i0t=O(()=>{bh()});function _P4(i=Date.now){return eli(i)}async function*u0t(i,u={}){let t=()=>_P4(u.now),f=null,l=new Zq({intervalMs:u.intervalMs,sleepFn:u.sleepFn,emit:()=>f?.()}),E=i[Symbol.asyncIterator](),c=E.next();try{l.arm();while(!0){let w=new Promise((h)=>{f=()=>h("heartbeat")}),$=await Promise.race([c.then((h)=>({kind:"chunk",r:h})),w.then((h)=>({kind:h}))]);if(f=null,$.kind==="heartbeat"){yield t();continue}if(l.arm(),$.r.done)return;yield $.r.value,c=E.next()}}finally{l.stop(),await E.return?.(void 0).catch(()=>{})}}var t0t=O(()=>{wbi()});function Vn(i,u){let t=i.capabilities?{...i.capabilities.vision!==void 0?{vision:i.capabilities.vision}:{},...i.capabilities.text!==void 0?{text:i.capabilities.text}:{},...i.capabilities.reasoning!==void 0?{reasoning:i.capabilities.reasoning}:{}}:void 0;return{id:i.id,...i.title!==void 0?{title:i.title}:{},...i.provider!==void 0?{provider:i.provider}:{},credentialId:u,...i.limits?{limits:i.limits}:{},...t&&Object.keys(t).length>0?{capabilities:t}:{}}}function f0t(i){let u=i.credentialId,t=Vn(i.thinking,u);return{thinking:{...t,title:t.title??t.id},...i.fast?{fast:Vn(i.fast,u)}:{},...i.smart?{smart:Vn(i.smart,u)}:{},...i.image?{image:Vn(i.image,i.image.credentialId??u)}:{},...i.webSearch?{webSearch:Vn(i.webSearch,i.webSearch.credentialId??u)}:{},...i.deepResearch?{deepResearch:Vn(i.deepResearch,i.deepResearch.credentialId??u)}:{}}}function NP4(i,u){for(let t=i.length-1;t>=0;t--){let f=i[t],l=f?.metadata;if(f?.role==="assistant"&&l?.codingAgentSessionId&&l?.codingAgentProvider===u)return t}return-1}function l0t(i,u){let t=idu(u);if(!t)return;let f=NP4(i,t);if(f===-1)return;return i[f]?.metadata?.codingAgentSessionId}var E0t=()=>{};function udu(){return vu().podName}var c0t=O(()=>{R0()});function OP4(i){let u=null;return new ReadableStream({async pull(t){try{u??=i().getReader();let{done:f,value:l}=await u.read();if(f)t.close();else t.enqueue(l)}catch(f){t.error(f)}},async cancel(t){await u?.cancel(t)}},{highWaterMark:0})}function ZP4(i){let u=0;async function*t(){for await(let f of i.chunks)yield{seq:++u,chunk:f}}return new ReadableStream({async start(f){try{let l=await i.loadOriginalMessages?.();await XUi({runId:i.runId,fenceToken:i.fenceToken,chunks:t(),errorMessageId:i.errorMessageId,originalMessages:l},{streamBuffer:i.streamBuffer,hooks:i.hooks,title:i.title}),f.close()}catch(l){f.error(l)}}})}function tdu(i){if(i==="claude-code")return"claude-code";if(i==="codex")return"codex";return"decopilot"}function BP4(i){let u=i.virtualMcp?.metadata?.githubRepo,t=u&&typeof u.owner==="string"&&typeof u.name==="string"?{owner:u.owner,name:u.name,connectedGithub:Boolean(u.connectionId)}:void 0;if(!t)return{cwd:null};if(i.cwd!==aY)return{cwd:null};return{cwd:aY,repo:t,branch:i.branch??null}}async function FP4(i,u,t,f){let{keyInfo:l,apiKey:E}=await i.storage.aiProviderKeys.resolve(t,u),c=HGi({providerId:l.providerId,apiKey:E,modelId:f});if(c.providerId==="openrouter"||c.providerId==="deco"){let w=i.organization?.name??i.organization?.slug??u,$=c.providerId==="deco"?"deco AI Gateway":"Studio";return{...c,extraHeaders:{...c.extraHeaders,"X-Title":`${$} - ${w}`}}}return c}function h0t(i){return!("messages"in i)}function v0t(i,u){if(!i.taskId)throw Error("buildDurableDispatchInput: taskId is required");let t=i.messages.filter((f)=>f.role==="system").flatMap((f)=>f.parts).filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join(`
|
|
86814
|
+
`):void 0}var jut;var Xut=O(()=>{Nf();mm();kut();xvu();UGi();Ivu();jvu();xGi();kGi();jut={id:"codex",create(i){return{id:"codex",async*stream(u){let t=ovu(u.models.thinking.id),f=gGi(u.workspace.cwd),l=py4({workspace:u.workspace,agentInstructions:u.agent.instructions});console.log(`[codex] stream start model=${t} cwd=${f??"(default)"} mcpUrl=${u.mcp.url} mode=${u.mode}`);let{model:E,provider:c}=avu(t,sy4(u,f,l));try{let w=await TGi([u.userMessage]),h=Rn({currentThreadTitle:u.currentThreadTitle})?(()=>{let{model:N,provider:Z}=avu(ovu("codex:gpt-5.6-luna"),{toolApprovalLevel:"readonly",isPlanMode:!0,cwd:f}),B=nn({abortSignal:u.signal,models:[()=>N],userMessage:Hn(w)}),F=B.promise.finally(()=>Z.close().catch(()=>{}));return{handle:B,closed:F}})():null,v=h?.handle??null,d=R5({model:E,messages:w,abortSignal:u.signal,allowSystemInMessages:!0}),D=yGi({input:u,providerName:"codex",providerMetadataKey:"codex-app-server",extractSessionId:(N)=>typeof N?.threadId==="string"?N.threadId:void 0}),_=d.toUIMessageStream({generateMessageId:U2,messageMetadata:D});try{let N=v?IGi(_,v):_;for await(let Z of N)yield Z}catch(N){if(u.harness.sessionId&&jGi(N))throw new kp(N);throw N}finally{v?.finish(),await h?.closed.catch(()=>{})}}finally{await c.close().catch(()=>{})}}}}}});import{context as iP4,trace as uP4}from"@opentelemetry/api";function Jut(i){tP4({...i,tracer:i.ctx.tracer})}function tP4(i){try{if(!i.organizationId)return;let u=i.tracer.startSpan(Xzi),t=uP4.setSpan(iP4.active(),u),f=i.totalUsage??i.usage;ka({type:pS,organizationId:i.organizationId,connectionId:J1i,toolName:i.modelId,toolArguments:{model:i.modelId,credentialId:i.credentialId,threadId:i.taskId,...i.request?.body!==void 0?{requestBody:i.request.body}:{}},result:{...i.usage??{},...i.totalUsage?{totalUsage:i.totalUsage}:{},...i.cost!==void 0?{cost:i.cost}:{},...i.finishReason?{finishReason:i.finishReason}:{},...i.response?{responseId:i.response.id,responseModelId:i.response.modelId,responseTimestamp:i.response.timestamp,messages:i.response.messages}:{},logType:pS},duration:i.durationMs,isError:i.isError,errorMessage:i.errorMessage??null,userId:i.userId,requestId:i.requestId,userAgent:i.userAgent??null,virtualMcpId:i.agentId??null,properties:{model_title:i.modelTitle,credential_id:i.credentialId,thread_id:i.taskId,log_type:pS,...i.response?{response_id:i.response.id}:{},...f?{input_tokens:String(f.inputTokens),output_tokens:String(f.outputTokens),total_tokens:String(f.totalTokens)}:{},...i.cost!==void 0?{cost:String(i.cost)}:{}}},t),u.end()}catch{}}var Kut=O(()=>{z5i();qw()});function Yut(i){let{ctx:u,organizationId:t,modelId:f,durationMs:l,isError:E,inputTokens:c,outputTokens:w,cacheReadTokens:$,cacheWriteTokens:h}=i;if(!t||!f)return;let v={"connection.id":J1i,"tool.name":f,"organization.id":t,status:E?"error":"success","error.type":E?i.errorType||"Error":""};if(u.meter.createHistogram("tool.execution.duration",{description:"Duration of tool executions in milliseconds",unit:"ms"}).record(l,v),u.meter.createCounter("tool.execution.count",{description:"Number of tool executions"}).add(1,v),c!=null||w!=null)u.meter.createCounter("tool.execution.tokens",{description:"Number of tokens used by LLM calls"}).add((c??0)+(w??0),v);if(($??0)>0)u.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add($,{...v,kind:"read"});if((h??0)>0)u.meter.createCounter("tool.execution.cache_tokens",{description:"LLM cache tokens by kind (read/write)"}).add(h,{...v,kind:"write"})}var Wut=O(()=>{qw()});function lP4(i,u,t){if(!t)return i;let f=new Set;for(let[l,E]of u)if(t.has(l)||t.has(E))f.add(E);return Object.fromEntries(Object.entries(i).filter(([l])=>f.has(l)))}function EP4(i,u){if(!u)return i;return Object.fromEntries(Object.entries(i).filter(([t])=>fP4.has(t)||u.has(t)))}async function Sut(i,u,t){let f=bn(i),l=u.organization,E=i.mode==="plan",c=i.toolAllowlist&&i.toolAllowlist.length>0?new Set(i.toolAllowlist):null,w=await t.mcpForAgent(i.agent.id,{superUser:!0,listTimeoutMs:1000});try{let{tools:$,nameMap:h,rawTools:v}=await NUi(w,t.toolOutputMap,t.writer,i.toolApprovalLevel,{isPlanMode:E,timeoutMs:kvi,resolveArgs:t.resolveArgs,onToolCalled:t.onToolCalled,onPrOpened:t.onPrOpened}),d=lP4($,h,c),D=f.virtualMcp.metadata,_=await oo(u,t.threadId),Z=!(_??D.githubRepo),B=i.user.id?{virtualMcpId:i.agent.id,branch:_?lUi(t.threadId,_.connectionId):Z?"ephemeral":f.branch??`thread:${t.threadId}`,userId:i.user.id,threadId:t.threadId,syncTools:!0}:null,F=await yUi(t.writer,{provider:t.provider,imageProvider:t.imageProvider,webSearchProvider:t.webSearchProvider,deepResearchProvider:t.deepResearchProvider,organization:l,models:i.models,toolApprovalLevel:i.toolApprovalLevel,isPlanMode:E,toolOutputMap:t.toolOutputMap,pendingImages:t.pendingImages,passthroughClient:w,vmContext:B,htmlArtifactBuffer:t.htmlArtifactBuffer,taskId:t.threadId,agentId:i.agent.id,onChildUsage:t.onChildUsage,backgroundDispatcher:t.backgroundDispatcher},u),g=EP4(F,c),T=[],U=new Map;for(let I of v){let j=h.get(I.name);if(!j)continue;if(c&&!c.has(I.name)&&!c.has(j))continue;let C=typeof I._meta?.gatewayClientId==="string"?I._meta.gatewayClientId:"unknown";if(T.push({rawName:I.name,safeName:j,connectionId:C}),E)U.set(j,{readOnlyHint:I.annotations?.readOnlyHint})}let A=w.getConnectionTitleMap(),G=w.getInstructions();return{tools:{...d,...g},nameMap:h,passthroughTools:d,builtInTools:g,passthroughToolList:v,connectionsBlockTools:T,toolAnnotations:U,vmContext:B,connectionTitleMap:A,serverInstructions:G,passthroughClient:w,close:async()=>{await w.close().catch(()=>{})}}}catch($){throw await w.close().catch(()=>{}),$}}var fP4;var Lut=O(()=>{EO();HEu();OUi();Cn();fP4=new Set(["read_tool_output","enable_tool","open_in_agent","todo_write","update_interests"])});function Qut(i){let u=cP4.exec(i);if(!u)return null;return{path:i,name:u[2],kind:u[1].toLowerCase()==="decks"?"deck":"page"}}function Hut(i,u){if(i.kind!=="file"||i.deletedAt)return null;let t=u.threadId!=null&&i.threadId===u.threadId,f=i.threadId==null&&i.updatedBy===u.ownerId;if(!t&&!f)return null;return Qut(i.path)}function zut(i,u){if(!u)return null;let t=i.replace(/^\.\//,""),f=`org/${u}/`,l=t.indexOf(f);if(l!==0&&(l<0||t[l-1]!=="/"))return null;return Qut(t.slice(l+f.length))}var cP4;var svu=O(()=>{cP4=/^(decks|pages)\/([a-z0-9][a-z0-9._-]*)\.html$/i});function Rut(i){let u=i.orgFs,t=i.organization?.slug??null,f=i.auth?.user?.id??null;if(!u||!t||!f)return $P4;let l=Eg,E=i.metadata?.threadId??null,c=new Map;return{enqueue(w,$){let h=zut(w,l);if(!h)return;c.set(h.path,$)},async flush(){if(c.size===0)return;let w=[...c.entries()];c.clear(),await Promise.allSettled(w.map(async([$,h])=>{try{await u.write(wP4,$,h,{actor:f,contentType:"text/html; charset=utf-8",threadId:E})}catch(v){console.error("[deck-buffer] org-fs write failed",{path:$},v)}}))}}}var wP4="home",$P4;var nut=O(()=>{M5i();svu();$P4={enqueue:()=>{},flush:async()=>{}}});function but(i,u){let t=i.orgFs,f=i.organization?.slug??null,l=i.auth?.user?.id??null;if(!t||!f||!l)return{sweep:async()=>{}};let E=Eg,c={threadId:i.metadata?.threadId??null,ownerId:l},w=t.latestSeq(pvu).catch((_)=>{return console.error("[deck-watcher] cursor snapshot failed",_),null}),$=null,h=!1,v=!1,d=new Map;return{sweep:async()=>{if(v)return;v=!0;try{if(!h)$=await w,h=!0;if($===null)return;let _=new Map;for(let N=0;N<20;N++){let Z=await t.changes(pvu,$,hP4);for(let B of Z.entries){let F=Hut(B,c);if(!F)continue;if(B.contentHash){if(d.get(F.path)===B.contentHash)continue;d.set(F.path,B.contentHash)}_.set(F.path,{volume:pvu,path:F.path,name:F.name,kind:F.kind,mountPath:`org/${E}/${F.path}`})}if($=Z.cursor,!Z.hasMore)break}for(let N of _.values())u.write({type:"data-deck-updated",id:N.path,data:N})}catch(_){console.error("[deck-watcher] sweep failed",_)}finally{v=!1}}}}var pvu="home",hP4=200;var Cut=O(()=>{M5i();svu()});async function vP4(i,u,t){let f=await XR({kind:t.kind,ctx:i,organization:u,virtualMcp:t.virtualMcp,mcpClient:t.mcpClient,provider:t.provider,models:t.models,messages:t.messages,abortSignal:t.abortSignal,temperature:t.temperature,planMode:t.planMode,isDecopilot:t.isDecopilot,systemAgentInstructions:t.systemAgentInstructions,currentThreadId:t.currentThreadId,user:t.user,userContext:t.userContext,codingWorkspace:t.codingWorkspace,writer:t.writer,subtaskParams:{provider:t.provider,organization:u,models:t.models,codingWorkspace:t.codingWorkspace},prepareStep:t.prepareStep,onStepFinish:t.onStepFinish,passthroughClient:t.passthroughClient,connectionsData:t.connectionsData,extraTools:t.extraTools,additionalSystemMessages:t.additionalSystemMessages,stepLimit:t.stepLimit});return{result:f.result,error:f.error,span:f.span,assembledSystemMessages:f.assembledSystemMessages}}function Mut(i){let{ctx:u,organization:t,modelRuntime:f,sideChannel:l,cleanup:E}=i,c=but(u,l.writer),w=Rut(u);return{toolRuntime:{buildEnvironmentTools:async({input:v,onChildUsage:d})=>{let D=bn(v),_=new Map,N=[],{resolveArgs:Z,onToolCalled:B,onPrOpened:F}=kUi(u,v.threadId),g=await Sut(v,u,{writer:l.writer,toolOutputMap:_,pendingImages:N,threadId:v.threadId,resolveArgs:Z,onToolCalled:B,onPrOpened:F,mcpForAgent:async(U,A)=>{let G=D.virtualMcp,k=null;if(G.id&&v.user.id&&o1(G.metadata)[v.user.id])k=await NY(u,G.id,v.user.id,D.branch??void 0).catch(()=>null);return K2(G,u,"passthrough",A?.superUser??!1,{listTimeoutMs:A?.listTimeoutMs,includeSkillsCatalog:!0,additionalConnections:k?[k]:[]})},provider:f.thinking.provider,imageProvider:f.image?.provider??f.thinking.provider,webSearchProvider:f.webSearch?.provider??f.thinking.provider,deepResearchProvider:f.deepResearch?.provider??f.thinking.provider,backgroundDispatcher:WUi({threadId:v.threadId,orgId:v.organizationId,userId:v.user.id,agentId:v.agent.id,temperature:v.temperature,toolApprovalLevel:v.toolApprovalLevel,branch:D.branch??null}),htmlArtifactBuffer:w,onChildUsage:d}),T={tools:g.tools,passthroughTools:g.passthroughTools,builtInTools:g.builtInTools,connectionsBlockTools:g.connectionsBlockTools,toolAnnotations:g.toolAnnotations,connectionTitleMap:g.connectionTitleMap,serverInstructions:g.serverInstructions,passthroughClient:g.passthroughClient,writer:l.writer,pendingImages:N,sideChunks:l.stream,closeSideChunks:l.close,onStepFinish:async()=>{await w.flush(),await c.sweep()},close:g.close};return E.close=g.close,T},runEngine:(v)=>vP4(u,t,v)},telemetry:{recordLlmCall:(v)=>Yut({ctx:u,...v}),monitorLlmCall:(v)=>Jut({ctx:u,...v,requestId:u.metadata.requestId,userAgent:u.metadata.userAgent??null})}}}var qut=O(()=>{Kut();Wut();zz();bUi();G$();Lut();bEu();nut();Cut();BUi();YR();Cn()});function HGi(i){if(i.providerId==="openai-compatible")try{let u=JSON.parse(i.apiKey);return{kind:"secret",providerId:i.providerId,apiKey:u.apiKey??"",modelId:i.modelId,...u.baseUrl?{baseUrl:u.baseUrl}:{}}}catch{return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}return{kind:"secret",providerId:i.providerId,apiKey:i.apiKey,modelId:i.modelId}}var Vut=O(()=>{Qd();nQ()});var rut=O(()=>{Vut()});var mut=O(()=>{Bit();Jit();Xut();qut();_vu();Ovu();rut();jit((i)=>{let u=i.ctx;return Mut({...i,ctx:u,organization:u.organization})});ZGi(Xit);ZGi(Zit);ZGi(jut)});function idu(i){if(i==="codex")return"codex";if(i==="claude-code")return"claude-code";return}function eut(i){return idu(i)!==void 0}class aut{thread;organization_id;storage;defaultWindowSize;constructor(i){this.thread=i.thread,this.organization_id=i.thread.organization_id,this.storage=i.storage,this.defaultWindowSize=i.defaultWindowSize??50}async loadHistory(i){let u=i??this.defaultWindowSize,{chronological:t,isWindowed:f}=this.thread.message_storage_version===2?await this.loadWindowedFromParts(u):await this.loadWindowedFromMessages(u),l=t.find(($)=>$.role!=="system");if(!l||l.role==="user")return t;let E=l,c=f?"[Context: earlier turns in this conversation were truncated. The messages below continue the thread \u2014 pick up from there.]":"[Context: this thread opens with your message \u2014 you spoke first to greet the user, and the user has not spoken before it. Their reply follows.]";return[{id:`${this.thread.id}-msg-prefix`,thread_id:this.thread.id,role:"user",parts:[{type:"text",text:c}],metadata:void 0,created_at:E.created_at,updated_at:E.updated_at},...t]}async loadWindowedFromMessages(i){let{messages:u,total:t}=await this.storage.listMessages(this.thread.id,{limit:i,sort:"desc"});return{chronological:[...u].reverse(),isWindowed:t>u.length}}async loadWindowedFromParts(i){let{messages:u,total:t}=await this.storage.messageParts().loadWindow(this.thread.id,{limit:i});return{chronological:u.map((l)=>({id:l.id,thread_id:this.thread.id,role:l.role,parts:l.parts,metadata:l.metadata??void 0,created_at:l.created_at,updated_at:l.created_at})),isWindowed:t>u.length}}}async function zGi(i,u){let{thread_id:t,defaultWindowSize:f}=u;if(!t)throw Error("createMemory: thread_id is required");let l=await i.get(t);if(!l)throw Error(`Thread not found: ${t}`);return new aut({thread:l,storage:i,defaultWindowSize:f})}function dP4(i,u){let t=i.filter((E)=>E.parts&&E.parts.length>0),f=t.findIndex((E)=>E.id===u.id);return f>=0?[...t.slice(0,f),u]:[...t,u]}async function DP4(i){return[...i.systemMessages,...dP4(i.history,i.userMessage)]}async function out(i){let u=i.isSubagent?[]:await(await zGi(i.ctx.storage.threads,{thread_id:i.threadId,organization_id:i.ctx.organization?.id??"",userId:i.ctx.auth.user?.id??"",defaultWindowSize:i.windowSize??y5})).loadHistory(i.windowSize??y5),t=await DP4({history:u,userMessage:i.userMessage,systemMessages:i.systemMessages});return xUi(t,i.ctx)}var sut=O(()=>{m9();KR()});function put(i,u){let t=i.thinking.capabilities;if(!((t?.vision??!1)||(t?.file??!1))){if(u.some((E)=>E.parts?.some((c)=>c.type==="file")))throw new G0(400,{message:"This model does not support file uploads. Please change the model and try again."})}}var i0t=O(()=>{bh()});function _P4(i=Date.now){return eli(i)}async function*u0t(i,u={}){let t=()=>_P4(u.now),f=null,l=new Zq({intervalMs:u.intervalMs,sleepFn:u.sleepFn,emit:()=>f?.()}),E=i[Symbol.asyncIterator](),c=E.next();try{l.arm();while(!0){let w=new Promise((h)=>{f=()=>h("heartbeat")}),$=await Promise.race([c.then((h)=>({kind:"chunk",r:h})),w.then((h)=>({kind:h}))]);if(f=null,$.kind==="heartbeat"){yield t();continue}if(l.arm(),$.r.done)return;yield $.r.value,c=E.next()}}finally{l.stop(),await E.return?.(void 0).catch(()=>{})}}var t0t=O(()=>{wbi()});function Vn(i,u){let t=i.capabilities?{...i.capabilities.vision!==void 0?{vision:i.capabilities.vision}:{},...i.capabilities.text!==void 0?{text:i.capabilities.text}:{},...i.capabilities.reasoning!==void 0?{reasoning:i.capabilities.reasoning}:{}}:void 0;return{id:i.id,...i.title!==void 0?{title:i.title}:{},...i.provider!==void 0?{provider:i.provider}:{},credentialId:u,...i.limits?{limits:i.limits}:{},...t&&Object.keys(t).length>0?{capabilities:t}:{}}}function f0t(i){let u=i.credentialId,t=Vn(i.thinking,u);return{thinking:{...t,title:t.title??t.id},...i.fast?{fast:Vn(i.fast,u)}:{},...i.smart?{smart:Vn(i.smart,u)}:{},...i.image?{image:Vn(i.image,i.image.credentialId??u)}:{},...i.webSearch?{webSearch:Vn(i.webSearch,i.webSearch.credentialId??u)}:{},...i.deepResearch?{deepResearch:Vn(i.deepResearch,i.deepResearch.credentialId??u)}:{}}}function NP4(i,u){for(let t=i.length-1;t>=0;t--){let f=i[t],l=f?.metadata;if(f?.role==="assistant"&&l?.codingAgentSessionId&&l?.codingAgentProvider===u)return t}return-1}function l0t(i,u){let t=idu(u);if(!t)return;let f=NP4(i,t);if(f===-1)return;return i[f]?.metadata?.codingAgentSessionId}var E0t=()=>{};function udu(){return vu().podName}var c0t=O(()=>{R0()});function OP4(i){let u=null;return new ReadableStream({async pull(t){try{u??=i().getReader();let{done:f,value:l}=await u.read();if(f)t.close();else t.enqueue(l)}catch(f){t.error(f)}},async cancel(t){await u?.cancel(t)}},{highWaterMark:0})}function ZP4(i){let u=0;async function*t(){for await(let f of i.chunks)yield{seq:++u,chunk:f}}return new ReadableStream({async start(f){try{let l=await i.loadOriginalMessages?.();await XUi({runId:i.runId,fenceToken:i.fenceToken,chunks:t(),errorMessageId:i.errorMessageId,originalMessages:l},{streamBuffer:i.streamBuffer,hooks:i.hooks,title:i.title}),f.close()}catch(l){f.error(l)}}})}function tdu(i){if(i==="claude-code")return"claude-code";if(i==="codex")return"codex";return"decopilot"}function BP4(i){let u=i.virtualMcp?.metadata?.githubRepo,t=u&&typeof u.owner==="string"&&typeof u.name==="string"?{owner:u.owner,name:u.name,connectedGithub:Boolean(u.connectionId)}:void 0;if(!t)return{cwd:null};if(i.cwd!==aY)return{cwd:null};return{cwd:aY,repo:t,branch:i.branch??null}}async function FP4(i,u,t,f){let{keyInfo:l,apiKey:E}=await i.storage.aiProviderKeys.resolve(t,u),c=HGi({providerId:l.providerId,apiKey:E,modelId:f});if(c.providerId==="openrouter"||c.providerId==="deco"){let w=i.organization?.name??i.organization?.slug??u,$=c.providerId==="deco"?"deco AI Gateway":"Studio";return{...c,extraHeaders:{...c.extraHeaders,"HTTP-Referer":"https://studio.decocms.com","X-Title":`${$} - ${w}`}}}return c}function h0t(i){return!("messages"in i)}function v0t(i,u){if(!i.taskId)throw Error("buildDurableDispatchInput: taskId is required");let t=i.messages.filter((f)=>f.role==="system").flatMap((f)=>f.parts).filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join(`
|
|
86807
86815
|
|
|
86808
86816
|
`).trim();return{models:i.models,agent:i.agent,temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,...i.toolAllowlist!==void 0?{toolAllowlist:i.toolAllowlist}:{},...i.maxAgentSteps!==void 0?{maxAgentSteps:i.maxAgentSteps}:{},...i.isSubagent!==void 0?{isSubagent:i.isSubagent}:{},...i.subtaskJobId!==void 0?{subtaskJobId:i.subtaskJobId}:{},...i.resumedFromBackground!==void 0?{resumedFromBackground:i.resumedFromBackground}:{},mode:i.mode,...i.windowSize!==void 0?{windowSize:i.windowSize}:{},...i.triggerId!==void 0?{triggerId:i.triggerId}:{},...i.runMetadata!==void 0?{runMetadata:i.runMetadata}:{},branch:u.branch??i.branch??null,sandboxProviderKind:u.sandboxProviderKind??i.sandboxProviderKind??null,harnessId:u.harnessId??i.harnessId??null,...u.target?{target:u.target}:{},organizationId:i.organizationId,userId:i.userId,taskId:i.taskId,messageId:u.messageId,...u.runFenceToken!==void 0?{runFenceToken:u.runFenceToken}:{},...i.isResume!==void 0?{isResume:i.isResume}:{},...t?{systemContext:t}:{}}}function gP4(i,u){let t=i.find((f)=>f.id===u);if(!t)throw new vO("empty_request",`Persisted request message missing for messageId=${u}`);if(t.role==="system")throw new vO("empty_request",`Persisted message ${u} has role=system; expected non-system request message`);return t}function d0t(i){let u=i.models;return{"decopilot.agent.id":i.agent.id,"decopilot.model.id":u.thinking.id,"decopilot.credential.id":u.credentialId,"decopilot.organization.id":i.organizationId,"decopilot.user.id":i.userId,"decopilot.thread.id":i.taskId??""}}async function D0t(i,u,t){return Vzi("decopilot.dispatchRunAndWait",async(f)=>{let{taskId:l,uiStream:E,registrySignal:c}=await _0t(i,u,t,f),w=t.streamBuffer,$=w?await w.createTailStream(l,i.abortSignal,{deliverPolicy:"new",closeOnDone:!0}):null;if(w&&$){let h=w.pump(E,l,c,i.organizationId);h.catch(()=>{});let v=$.getReader();try{while(!0){let{done:d}=await v.read();if(d)break}}finally{v.releaseLock()}await h}else{if(w)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"producer-fallback-no-pump",taskId:l,hasTail:!!$,note:"createTailStream returned null \u2014 draining producer stream directly; projector persistence depends on streamBuffer publish health"}));let h=E.getReader();try{while(!0){let{done:v}=await h.read();if(v)break}}finally{h.releaseLock()}}return{taskId:l}},d0t(i))}async function TP4(i,u,t,f){let[l,E,c]=await Promise.all([i.storage.threads.list(f,{limit:9,agentId:t}).catch(()=>null),i.storage.interests.getForAgent(u,t,f).catch(()=>null),i.storage.virtualMcps.list(u).catch(()=>null)]),w={};if(l&&l.total>0)w.recentThreads={total:l.total,threads:l.threads.map(($)=>({id:$.id,title:$.title,updated_at:$.updated_at}))};if(E&&E.interests.length>0)w.interests=E.interests.map(($)=>({title:$.title,summary:$.summary}));if(c)w.agents=c.map(($)=>({id:$.id,name:$.title,description:$.description,status:$.status}));return w}async function UP4({virtualMcp:i,agentId:u,organizationId:t,ctx:f}){return W3i({virtualMcp:i,agentId:u,organizationId:t,ctx:f})}async function _0t(i,u,t,f){let{runRegistry:l,streamBuffer:E}=t;if(!h0t(i))i={...i,messages:i.messages.map(($)=>$.id?$:{...$,id:U2()})};let c=!1,w;try{let $=i.models,h=await u.storage.aiProviderKeys.findById($.credentialId,i.organizationId).catch(()=>null),v=i.harnessId??tdu(h?.providerId);f.setAttribute("decopilot.harnessId",v);let d=i.target??{sandboxProviderKind:"agent-sandbox"};if(d.sandboxProviderKind==="agent-sandbox")u.sandboxPreference="agent-sandbox";else u.sandboxPreference="user-desktop";f.setAttribute("decopilot.dispatchTarget.sandboxProviderKind",d.sandboxProviderKind);let D=Phi({harnessId:v,sandboxProviderKind:d.sandboxProviderKind}),_=f0t($);if(v==="decopilot"){let ji=await Lv(u.db,i.organizationId,u.organization?.role??u.auth.user?.role);if(!Sv(ji,_.thinking.credentialId,_.thinking.id))throw Error("Model not allowed for your role");_=pUi(ji,_)}let N=i.windowSize??y5;if(!i.taskId)throw Error("dispatchRunAndWait: taskId is required");if(D)await z2(E,i.taskId,pa[0]);let Z=(ji)=>v==="decopilot"&&ji?FP4(u,i.organizationId,ji.credentialId,ji.id):Promise.resolve(void 0),[B,F,g,T,U,A,G,k,I]=await Promise.all([u.storage.virtualMcps.findById(i.agent.id,i.organizationId),Z(_.thinking),Z(_.fast),Z(_.smart),Z(_.image),Z(_.webSearch),Z(_.deepResearch),zGi(u.storage.threads,{organization_id:i.organizationId,thread_id:i.taskId,userId:i.userId,defaultWindowSize:N}),v==="decopilot"?TP4(u,i.organizationId,i.agent.id,i.userId):Promise.resolve(void 0)]);if(D)await z2(E,i.taskId,pa[1]);let j=F?{thinking:F,...g?{fast:g}:{},...T?{smart:T}:{},...U?{image:U}:{},...A?{webSearch:A}:{},...G?{deepResearch:G}:{}}:void 0,C=F?JGi(F):null;if(w=k.thread.id,u.metadata.threadId=k.thread.id,f.setAttribute("decopilot.thread.id",k.thread.id),k.thread.created_by!==i.userId)throw Error("You are not allowed to write to this thread because you are not the owner");if(C?.asyncResearch){let ji=[["thinking",_.thinking.id]];if(_.fast)ji.push(["fast",_.fast.id]);if(_.smart)ji.push(["smart",_.smart.id]);if(_.image)ji.push(["image",_.image.id]);for(let[R,_i]of ji)if(C.asyncResearch.canHandle(_i))throw Error(`Model "${_i}" can only be used as a Deep Research model. It is not usable as the ${R} model \u2014 set it in the Deep Research slot instead.`)}let L=k.thread.message_storage_version===2?new WE({storage:u.storage.threads.messageParts(),orgId:i.organizationId,threadId:k.thread.id,runId:k.thread.id}):null;if(!B)throw new vO("agent_not_found","Agent not found");let r=await UP4({virtualMcp:B,agentId:i.agent.id,organizationId:i.organizationId,ctx:u});if(i.isResume)await l.execute({type:"RESUME",taskId:k.thread.id,orgId:i.organizationId,userId:i.userId,abortController:new AbortController,podId:udu()});else await l.execute({type:"START",taskId:k.thread.id,orgId:i.organizationId,userId:i.userId,abortController:new AbortController,podId:udu(),runConfig:{models:i.models,agent:i.agent,temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,mode:i.mode,windowSize:i.windowSize,triggerId:i.triggerId},messageId:i.messageId});c=!0,await u.storage.threads.clearCancelRequested(k.thread.id);let Q;if(i.runFenceToken)Q=i.runFenceToken;else Q=Ghi(),await u.storage.threads.setRunFence(k.thread.id,Q);let ui=l.getAbortSignal(k.thread.id);if(!ui)throw await l.execute({type:"FINISH",taskId:k.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if(i.abortSignal){let ji=i.abortSignal;if(ji.aborted)await l.execute({type:"CANCEL",taskId:k.thread.id});else ji.addEventListener("abort",()=>{l.execute({type:"CANCEL",taskId:k.thread.id}).catch(()=>{})},{once:!0})}if(!i.isResume)E?.purge(k.thread.id);let hi=[],li,ii;if(h0t(i)){if(ii=await k.loadHistory(N),li=gP4(ii,i.messageId),i.systemContext)hi=[{id:`system-${i.messageId}`,role:"system",parts:[{type:"text",text:i.systemContext}]}]}else{hi=i.messages.filter((R)=>R.role==="system");let ji=i.messages.find((R)=>R.role!=="system");if(li=ji?(await IUi([ji],u,{threadId:k.thread.id})).find((R)=>R.role!=="system"):void 0,!i.isResume){if(!li)throw new vO("empty_request","No user message found in input \u2014 expected at least one non-system message");if(L)await L.emitUserMessage(li).catch((R)=>{console.error("[decopilot:stream] v2 user-message emit failed",R)})}}if(li)await OP0(E,k.thread.id,li);let a=[],Zi=eut(v)&&d.sandboxProviderKind==="user-desktop",Ei=Zi?ii??await k.loadHistory(N):void 0,Ji=Zi?l0t(Ei??[],v):void 0,Vi=u.organization,ri=Date.now(),Ci=li?(await xUi([li],u))[0]:void 0;if(!Ci||!li)throw new vO("empty_request","No user message found in input \u2014 expected at least one non-system message");put(i.models,[Ci]);let Di=v==="decopilot"?await out({ctx:u,threadId:k.thread.id,userMessage:li,windowSize:N,isSubagent:i.isSubagent===!0,systemMessages:hi}):void 0,Ii=v==="decopilot"?{url:"",headers:{},expiresAt:0}:await Jvi(u,i.agent.id,Vi,v==="claude-code"?"claude-code-session":"codex-session",d.sandboxProviderKind),Bi=Ii.expiresAt>0?{kind:"http",url:Ii.url,headers:Ii.headers,expiresAt:Ii.expiresAt}:void 0,$i=v!=="decopilot"&&d.sandboxProviderKind==="user-desktop"&&Vi.slug?{kind:"http",baseUrl:`${FE()}/api/${encodeURIComponent(Vi.slug)}/object-storage`,headers:Ii.headers,expiresAt:Ii.expiresAt}:void 0,ci=BP4({virtualMcp:r,branch:i.branch,cwd:d.sandboxProviderKind==="user-desktop"?aY:null}),Yi=typeof r.metadata?.instructions==="string"?r.metadata.instructions:void 0,m={taskId:i.taskId,isSubagent:i.isSubagent,subtaskJobId:i.subtaskJobId,resumedFromBackground:i.resumedFromBackground,virtualMcp:r,branch:i.branch,messages:Di,modelSources:j,mcpSource:Bi,objectStorageSource:$i,userContext:I},fi={harnessId:v,threadId:k.thread.id,userMessage:Ci,harness:{sessionId:Ji},workspace:ci,models:_,mcp:Ii,mode:i.mode,temperature:i.temperature,toolApprovalLevel:i.toolApprovalLevel,toolAllowlist:i.toolAllowlist??null,maxAgentSteps:i.maxAgentSteps,user:{id:i.userId,email:u.auth.user?.email??""},organizationId:i.organizationId,organizationSlug:Vi.slug,agent:{id:i.agent.id,instructions:Yi},triggerId:i.triggerId,currentThreadTitle:k.thread.title,runFenceToken:Q};if(D)await z2(E,i.taskId,pa[2]);let oi=async function*(){if(v!=="decopilot")throw Error(`dispatchRunAndWait runs cluster-hosted decopilot only; got "${v}" \u2014 CLI harnesses use the link transport or are rejected at the gate`);let ji={...fi,signal:ui};if(Kvu(ji,m),D)await z2(E,k.thread.id,pa[3]);yield*new Zvu({ctx:u,harnessId:v}).dispatch(ji)},ki=OP4(()=>ZP4({runId:k.thread.id,fenceToken:Q,streamBuffer:E??{publishRawChunk:async()=>!1,publishDone:async()=>!1},chunks:u0t(oi()),errorMessageId:SN(k.thread.id,Q),loadOriginalMessages:L?async()=>(await u.storage.threads.messageParts().loadWindow(k.thread.id,{limit:1})).messages.map(tvi):void 0,title:{currentThreadTitle:k.thread.title,threadId:k.thread.id,persistTitle:async(ji,R)=>{await u.storage.threads.update(ji,{title:R})}},hooks:{onStep:()=>{let ji=l.dispatch({type:"STEP_DONE",taskId:k.thread.id});a.push(l.react(ji).catch((R)=>{console.error("[decopilot:stream] onStepFinish reactor failed",R)}))},onFinish:async(ji,R)=>{let _i=a.length,Qi=performance.now();if(await Promise.allSettled(a),w0t.record(performance.now()-Qi,{phase:"settle"}),ui.aborted)return;await P0(0);let uu=$0t?oZ():null,bi=performance.now(),Gu=uvi(R,ji?.parts);await l.execute({type:"FINISH",taskId:k.thread.id,threadStatus:Gu});let t0=performance.now()-bi;if(w0t.record(t0,{phase:"save"}),$0t&&uu){let Gf=oZ()??uu,N4=-1;try{N4=JSON.stringify(ji)?.length??-1}catch{}console.warn(JSON.stringify({msg:"decopilot-finish-trace",threadId:k.thread.id,pendingOps:_i,saveMs:Math.round(t0),parts:ji?.parts?.length??0,messageBytes:N4,rssDelta:Gf.rss-uu.rss,heapUsedDelta:Gf.heapUsed-uu.heapUsed,externalDelta:Gf.external-uu.external}))}},onError:(ji)=>{if(ui.aborted){mu.capture({distinctId:i.userId,event:"chat_message_aborted",groups:{organization:i.organizationId},properties:{organization_id:i.organizationId,thread_id:k.thread.id,agent_id:i.agent.id,model_id:_.thinking.id,mode:i.mode,duration_ms:Date.now()-ri,is_resume:i.isResume??!1}});return}console.error("[decopilot] stream error:",P$(ji)),l.execute({type:"FINISH",taskId:k.thread.id,threadStatus:"failed"}).catch((R)=>{console.error("[decopilot:stream] onError reactor failed",R)})}}}));return{taskId:k.thread.id,uiStream:ki,registrySignal:ui,runFenceToken:Q,wireHarnessInput:fi}}catch($){if(c&&w)l.execute({type:"FINISH",taskId:w,threadStatus:"failed"}).catch((h)=>{console.error("[decopilot:stream] catch-block reactor failed",h)});throw $}}async function AP4(i,u,t){if(i.target?.sandboxProviderKind!=="user-desktop")return null;let f=await u.storage.virtualMcps.findById(i.agent.id,i.organizationId).catch(()=>null);if(!f)return null;let l=f.metadata??{},E=l.githubRepo??null,c;if(E)try{let Z=E.connectionId,{cloneUrl:B,gitUserName:F,gitUserEmail:g}=Z?await(async()=>{return await $R({ctx:u,connectionId:Z,organizationId:i.organizationId,forceRefresh:!0,onLegacyMintError:(T)=>{console.warn("[prepareLinkWorkDispatch] repo-scoped legacy token mint failed",{connectionId:Z,error:T instanceof Error?T.message:String(T)})}}),CN(Z,E.owner,E.name,u.db,u.vault)})():Yvi(E.owner,E.name);c={cloneUrl:B,branch:i.branch??void 0,userName:F,userEmail:g}}catch(Z){console.warn(`[prepareLinkWorkDispatch] failed to resolve clone info for agent=${i.agent.id}:`,Z instanceof Error?Z.message:String(Z))}let{runtime:w,packageManager:$,packageManagerPath:h}=wUi(l),v;if(w&&$&&(w==="node"||w==="bun"||w==="deno")&&($==="npm"||$==="pnpm"||$==="yarn"||$==="bun"||$==="deno"))v={runtime:w,packageManager:$,...h?{packageManagerPath:h}:{}};let d,D;try{if(u.objectStorage){let Z=await hUi(u.objectStorage,{isProduction:vu().nodeEnv==="production"});d=Z.hosts,D=Z.allowSameHostDev}}catch(Z){console.warn(`[prepareLinkWorkDispatch] failed to derive offload allowlist for agent=${i.agent.id}:`,Z instanceof Error?Z.message:String(Z))}let _=u.organization?.slug?await q5i(u,{orgSlug:u.organization.slug,orgId:i.organizationId,baseUrl:FE()}):void 0,N=gh({userName:u.auth.user?.name,userEmail:u.auth.user?.email});return{handle:t,...c?{repo:c}:{},...v?{workload:v}:{},...N?{operator:N}:{},...d!==void 0?{offloadAllowedHosts:d}:{},...D!==void 0?{offloadAllowSameHostDev:D}:{},..._?{orgFsConfigJson:_}:{}}}async function N0t(i,u,t){return Vzi("decopilot.prepareLinkWorkDispatch",async(f)=>{let{taskId:l,runFenceToken:E,wireHarnessInput:c}=await _0t(i,u,t,f),w=async(N)=>{throw await t.runRegistry.execute({type:"FINISH",taskId:l,threadStatus:"failed"}),Error(N)},$=c,h=null,v=Buffer.byteLength(JSON.stringify(c),"utf8");if(Jeu(v))await w("prepareLinkWorkDispatch: harnessInput exceeds the link payload limit and v3 userMessage offload is not implemented");let d=null;if(i.target?.sandboxProviderKind==="user-desktop")try{let N=i.branch??"ephemeral",Z=yP4({agentId:i.agent.id,userId:await u7(u,N,i.userId),organizationId:i.organizationId,branch:N});d=await AP4(i,u,Z)}catch(N){console.warn(`[prepareLinkWorkDispatch] failed to resolve sandbox config agent=${i.agent.id}:`,N instanceof Error?N.message:String(N))}let D=u.organization?.slug??null;if(!D)D=(await u.db.selectFrom("organization").select("slug").where("id","=",i.organizationId).executeTakeFirst())?.slug??null;let _=D;if(!_)return await w(`prepareLinkWorkDispatch: could not resolve org slug for organization ${i.organizationId}`);return{taskId:l,runFenceToken:E,harnessInput:$,messagesRef:null,sandboxConfig:d,orgSlug:_}},d0t(i))}function yP4(i){let u=Xg({orgId:i.organizationId,virtualMcpId:i.agentId,branch:i.branch});return BGi({userId:i.userId,projectRef:u},i.branch)}var w0t,$0t;var fdu=O(()=>{sEu();z4();Vp0();CQ();Bvu();M5();CM();Go();IR();EO();gEu();R0();mut();Cn();Xvu();m9();sut();WN();s4u();KR();i0t();io();MEu();t0t();nR();E0t();Ml();p1u();Hz();J1();c0t();Z4();w0t=At.createHistogram("decopilot.finish.duration",{description:"Wall time of onFinish flush segments, tagged by phase",unit:"ms"}),$0t=process.env.DECOPILOT_FINISH_TRACE==="1"});function ldu(i,u=1e4){if(!i.body)return i;let t=IP4(i.body,u);return new Response(t,{status:i.status,statusText:i.statusText,headers:i.headers})}function IP4(i,u=1e4,t=GP4){let f=null,l=null,E=!1,c=!1,w=()=>{if(l!==null)t.clearInterval(l),l=null};return new ReadableStream({async start($){f=i.getReader();let h=()=>{if(E||c)return;try{$.enqueue(PP4)}catch{E=!0,w()}};l=t.setInterval(h,u);try{while(!0){let{done:v,value:d}=await f.read();if(v){E=!0,w(),$.close();return}let D=d.byteLength;if(D>0)c=!(D>=2&&d[D-2]===10&&d[D-1]===10);$.enqueue(d)}}catch(v){E=!0,w();try{$.error(v)}catch{}}finally{E=!0,w();try{f.releaseLock()}catch{}}},cancel($){E=!0,w(),(f??i).cancel($).catch(()=>{})}})}var PP4,GP4;var O0t=O(()=>{PP4=new TextEncoder().encode(`: keepalive
|
|
86809
86817
|
|