decocms 4.208.1 → 4.209.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-BZa7RLag.js → AlertCircle-DBupAx1C.js} +1 -1
- package/dist/client/assets/{AreaChart-BLTaGxhs.js → AreaChart-fkUGT7jL.js} +1 -1
- package/dist/client/assets/{ArrowLeft-CuTDqEBV.js → ArrowLeft-Yl402W8B.js} +1 -1
- package/dist/client/assets/{ArrowUp-CUcFqEF-.js → ArrowUp-DGmI5wXp.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-CskjaNaG.js → ArrowUpRight-DwLRupP4.js} +1 -1
- package/dist/client/assets/{Check-5mtf2-6K.js → Check-C3n1orL-.js} +1 -1
- package/dist/client/assets/{CheckCircle-DHndlkqI.js → CheckCircle-CZNK4VDw.js} +1 -1
- package/dist/client/assets/{ChevronDown-BQmgN5kG.js → ChevronDown-ohrPQu2h.js} +1 -1
- package/dist/client/assets/{ChevronRight-CHavPPlp.js → ChevronRight-BhmcXHGq.js} +1 -1
- package/dist/client/assets/{ChevronUp-BPOJ4w7-.js → ChevronUp-BubCOFl2.js} +1 -1
- package/dist/client/assets/{Copy01-JnjARK76.js → Copy01-Bn07cEMu.js} +1 -1
- package/dist/client/assets/{CpuChip01-5ufyvRyO.js → CpuChip01-BE7Du7kk.js} +1 -1
- package/dist/client/assets/{CreditCard01-pCJ6deuK.js → CreditCard01-DUjN3dQ0.js} +1 -1
- package/dist/client/assets/{DotsVertical-DWN0CExK.js → DotsVertical-sQWcvmix.js} +1 -1
- package/dist/client/assets/{Eye-DHqWnvyC.js → Eye-Dehbq3da.js} +1 -1
- package/dist/client/assets/{FilterLines-Cdv4b7oN.js → FilterLines-CIrpfxUx.js} +1 -1
- package/dist/client/assets/{Globe01-BTPId_8Z.js → Globe01-M4D4MIPi.js} +1 -1
- package/dist/client/assets/{Globe04-80C2-0pT.js → Globe04-CjEz4T6w.js} +1 -1
- package/dist/client/assets/{HardDrive-CnxgzLM1.js → HardDrive-Ctz8_AFs.js} +1 -1
- package/dist/client/assets/{Key01-BEi2zD1l.js → Key01-Dau9koFl.js} +1 -1
- package/dist/client/assets/{LayoutLeft-CjDycY_6.js → LayoutLeft-aIw3qwEI.js} +1 -1
- package/dist/client/assets/{LinkExternal01-v4cK8Hvg.js → LinkExternal01-C33WSbeB.js} +1 -1
- package/dist/client/assets/{LogOut01-BA1KOwky.js → LogOut01-BiWBQrZu.js} +1 -1
- package/dist/client/assets/{Monitor01-huXmvPSR.js → Monitor01-D9kyxB4r.js} +1 -1
- package/dist/client/assets/{Palette-CmKkccfC.js → Palette-B9PGVVcx.js} +1 -1
- package/dist/client/assets/{Play-B4rtrgnG.js → Play-C7RMx2tj.js} +1 -1
- package/dist/client/assets/{Plus-CZ9chxtQ.js → Plus-DzCiuKmK.js} +1 -1
- package/dist/client/assets/{SearchLg-C0WO2pgS.js → SearchLg-Lfmeotuk.js} +1 -1
- package/dist/client/assets/{SearchMd-DiYJAS_s.js → SearchMd-BEmLpPzD.js} +1 -1
- package/dist/client/assets/{Settings02-DDP4O0Cg.js → Settings02-CuvRiyjv.js} +1 -1
- package/dist/client/assets/{Share07-DXSkeNQ0.js → Share07-AEihKd1X.js} +1 -1
- package/dist/client/assets/{Shield01-B-gsKN2p.js → Shield01-rfDRWoIL.js} +1 -1
- package/dist/client/assets/{Star01-BtEtd3G2.js → Star01-Lgpwqp0I.js} +1 -1
- package/dist/client/assets/{Stars01-BXDc__57.js → Stars01-CZ7d8Q-r.js} +1 -1
- package/dist/client/assets/{Stars02-C5x_Gxkb.js → Stars02-BvzGafOS.js} +1 -1
- package/dist/client/assets/{Sun-CWz_ZHWE.js → Sun-D5tb1Pyz.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-DesBwAGO.js → SwitchHorizontal01-Sd5RLCSy.js} +1 -1
- package/dist/client/assets/{Tool01-BIxbvnNf.js → Tool01-B5l8IaUB.js} +1 -1
- package/dist/client/assets/{Tool02-BfrmkKYl.js → Tool02-CG3Fk1J5.js} +1 -1
- package/dist/client/assets/{Trash01-Bj-y-g6k.js → Trash01-CQ3Bd7Cm.js} +1 -1
- package/dist/client/assets/{TrendUp01-Dwh-3-Y4.js → TrendUp01-CaHFVWru.js} +1 -1
- package/dist/client/assets/{Upload01-CpTz0wII.js → Upload01-uTS82KaY.js} +1 -1
- package/dist/client/assets/{User01-CoV9PEEx.js → User01-Bo97Yq11.js} +1 -1
- package/dist/client/assets/{Users01-XiI-pMAg.js → Users01-DSM1au82.js} +1 -1
- package/dist/client/assets/{Users03-Df4iDfc_.js → Users03-brxibBG-.js} +1 -1
- package/dist/client/assets/{X-CLDwnYt1.js → X-Cft_rnhM.js} +1 -1
- package/dist/client/assets/{XCircle-BDRZIvTH.js → XCircle-CeGjmgpM.js} +1 -1
- package/dist/client/assets/{XClose-BW3VRoUL.js → XClose-FzBDOIZa.js} +1 -1
- package/dist/client/assets/{Zap-ql6JzgF3.js → Zap-KgYxCFL0.js} +1 -1
- package/dist/client/assets/{ZapSquare-CrMssKKk.js → ZapSquare-B6yIqxlt.js} +1 -1
- package/dist/client/assets/{access-gate-CleWgA1k.js → access-gate-DhUzhMAj.js} +1 -1
- package/dist/client/assets/{agent-icon-Ch08ZcX4.js → agent-icon-9Aig-NuT.js} +1 -1
- package/dist/client/assets/{agents-list-CaERg_nT.js → agents-list-Bk2Je2jh.js} +1 -1
- package/dist/client/assets/{ai-providers-CId4m4AI.js → ai-providers-CVx6fAhI.js} +1 -1
- package/dist/client/assets/{alert-C5R3ia79.js → alert-C6sdy4Ec.js} +1 -1
- package/dist/client/assets/{alert-dialog-CLvEaah7.js → alert-dialog-Cnrcl4PF.js} +1 -1
- package/dist/client/assets/{app-editor-9zlyY8OI.js → app-editor-D8u-Q3jP.js} +1 -1
- package/dist/client/assets/{auth-DxTGZLCD.js → auth-DVHmCJcl.js} +1 -1
- package/dist/client/assets/{auth-catchall-CVKJ_BGd.js → auth-catchall-DYqRACH-.js} +1 -1
- package/dist/client/assets/{auth-entry-CTS0HGCI.js → auth-entry-Dye2pma5.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CeXqLBTV.js → auth-split-layout-BzzNG8SU.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-yvIceozb.js → authenticate-and-persist-oauth-BYtWv5qw.js} +1 -1
- package/dist/client/assets/{automation-list-row-DufVfjuM.js → automation-list-row-BLZV9bXh.js} +1 -1
- package/dist/client/assets/{automation-runs-BFm_u4Q4.js → automation-runs-B3NkQBm1.js} +1 -1
- package/dist/client/assets/{automations-U9jCHILv.js → automations-CmAc5lEa.js} +1 -1
- package/dist/client/assets/{avatar-CLQxOd7w.js → avatar-C2U5Iv9F.js} +1 -1
- package/dist/client/assets/{badge-DjDfC8we.js → badge-Czuvmxy5.js} +1 -1
- package/dist/client/assets/{billing-Y72pxW14.js → billing-w1tqKqrA.js} +1 -1
- package/dist/client/assets/{block-document-B1AZsn--.js → block-document-BgZlPUjC.js} +1 -1
- package/dist/client/assets/{brand-context-VomC9gYi.js → brand-context-BdE-SLdf.js} +1 -1
- package/dist/client/assets/{buckets-B5IGb63c.js → buckets-D9LP3mr5.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-63qqWTl3.js → bulk-category-panel-PTrYFks_.js} +1 -1
- package/dist/client/assets/{capability-load-error-Ca6hySS5.js → capability-load-error-BFey4uwB.js} +1 -1
- package/dist/client/assets/{card-DtOCbdm3.js → card-DCuKlcCP.js} +1 -1
- package/dist/client/assets/{cards-BFkdj8Bj.js → cards-C1M26UXk.js} +1 -1
- package/dist/client/assets/{category-editor-COXUiTH1.js → category-editor-CiL7reUE.js} +1 -1
- package/dist/client/assets/{chat-context-BZKendXw.js → chat-context-DsA4pxem.js} +1 -1
- package/dist/client/assets/{checkbox-eEsCoi1A.js → checkbox-CgufvYNz.js} +1 -1
- package/dist/client/assets/{cli-auth-success-_awtunjs.js → cli-auth-success-CFGeRUqR.js} +1 -1
- package/dist/client/assets/{collection-detail-C5d78BN8.js → collection-detail-73LUiWQh.js} +1 -1
- package/dist/client/assets/{collection-display-button-Dd2rlFQo.js → collection-display-button-CsrfHqh5.js} +1 -1
- package/dist/client/assets/{collection-search-CFYIAxV6.js → collection-search-B49v9xw-.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-e2BLAKzE.js → collection-table-wrapper-qI7lLbda.js} +1 -1
- package/dist/client/assets/{collection-tabs-Bpo5zBeb.js → collection-tabs-CRI1eAXS.js} +1 -1
- package/dist/client/assets/{command-DrE_xJ0Y.js → command-C6wPIHqt.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-DoE7dSvX.js → commerce-onboarding-Cl3dQoyN.js} +1 -1
- package/dist/client/assets/{connect-DJJtl4rA.js → connect-O4u_w471.js} +1 -1
- package/dist/client/assets/{connection-BWemKQdI.js → connection-By4wkeDZ.js} +1 -1
- package/dist/client/assets/{connection-card-CA3V0yVe.js → connection-card-YRsfG6Ns.js} +1 -1
- package/dist/client/assets/{connection-detail-LuyK7jo0.js → connection-detail-CuUq2vKJ.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-cQbD0-_X.js → connection-form-helpers-CmMtV1Y1.js} +1 -1
- package/dist/client/assets/{connections-oul1JuEc.js → connections-aek6ZXVv.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-CsD9IFGE.js → decopilot-sse-pool-B54DtFDE.js} +1 -1
- package/dist/client/assets/{dialog-BWSheT4A.js → dialog-BE1algVt.js} +1 -1
- package/dist/client/assets/{domain-settings-DdZaa9Yw.js → domain-settings-BGD7sewh.js} +1 -1
- package/dist/client/assets/{drawer-Bk4BkIVJ.js → drawer-BcrxLjWs.js} +1 -1
- package/dist/client/assets/{dropdown-menu-LA2EuwJV.js → dropdown-menu-PBeB7b66.js} +1 -1
- package/dist/client/assets/{empty-state-C1qwHMHt.js → empty-state-DoNkOkx5.js} +1 -1
- package/dist/client/assets/{extract-connection-data--rDL-rY9.js → extract-connection-data-D24KKaUB.js} +1 -1
- package/dist/client/assets/{file-explorer-C5pfWUbS.js → file-explorer-PjA7qS9Z.js} +1 -1
- package/dist/client/assets/{file-type-icon-go61WhXq.js → file-type-icon-B-y2efBe.js} +1 -1
- package/dist/client/assets/{form-DG2E7ScW.js → form-BD1JpPnv.js} +1 -1
- package/dist/client/assets/{general-DxWcdAyz.js → general-DwiF_nH_.js} +1 -1
- package/dist/client/assets/{github-repo-picker-CDSse3SQ.js → github-repo-picker-UHsfxby7.js} +1 -1
- package/dist/client/assets/{hooks-sUnYWZ_1.js → hooks-CR-1X8Bk.js} +1 -1
- package/dist/client/assets/{index-CHUBswRT.js → index-B89vfcq8.js} +3 -3
- package/dist/client/assets/{index-f5XneBiE.js → index-BAOGkVYC.js} +1 -1
- package/dist/client/assets/{index-CrSC-mbr.js → index-BBpGLx1K.js} +1 -1
- package/dist/client/assets/{index-CRW7ZUmQ.js → index-BGBiNU-S.js} +1 -1
- package/dist/client/assets/{index-B0iw_VPL.js → index-CWLlAguF.js} +1 -1
- package/dist/client/assets/{index-DE7VZwOV.js → index-Cb5Od1eg.js} +1 -1
- package/dist/client/assets/{index-BsBWN6uA.js → index-DPQe0PIO.js} +22 -22
- package/dist/client/assets/{index-D-4pbGmC.js → index-DREMmPvs.js} +1 -1
- package/dist/client/assets/{index-CqnLmpv0.js → index-DaorDevH.js} +1 -1
- package/dist/client/assets/{index-Bg9jM8Aj.js → index-DlXf7dIp.js} +1 -1
- package/dist/client/assets/{index-redirect-BJWLVVvq.js → index-redirect-CQzABlr6.js} +1 -1
- package/dist/client/assets/{input-jisO1Vid.js → input-CCH9P2Nr.js} +1 -1
- package/dist/client/assets/{integration-icon-mbwK8iV2.js → integration-icon-CrMiVu9T.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-DzOS0bW4.js → invite-member-dialog-OJXzwu1G.js} +1 -1
- package/dist/client/assets/{label-Bpru1Fk3.js → label-C1WV0d-q.js} +1 -1
- package/dist/client/assets/{layout-NlBeCXZW.js → layout-CwBECPwL.js} +1 -1
- package/dist/client/assets/{login-DCnFQy2U.js → login-DyDG-xPH.js} +1 -1
- package/dist/client/assets/{mcp-oauth-ClQB2yZ4.js → mcp-oauth-BHhTrzyf.js} +1 -1
- package/dist/client/assets/{members-CmrsfRvd.js → members-DJflukak.js} +1 -1
- package/dist/client/assets/{monaco-editor-Cb7e2m1n.js → monaco-editor-eBg1_ekk.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Cn4IdDhN.js → monitoring-stats-row-CvFlnz6T.js} +1 -1
- package/dist/client/assets/{multi-select-BDIJlF57.js → multi-select-BMz4caVB.js} +1 -1
- package/dist/client/assets/{oauth-callback-CnV91XQd.js → oauth-callback-DuGf0REm.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-D03XVVeF.js → oauth-callback-ai-provider-GMAQBsp1.js} +1 -1
- package/dist/client/assets/{onboarding-BUNuM1_t.js → onboarding-Cp_D8Tn3.js} +1 -1
- package/dist/client/assets/{org-layout-ruRV4uj8.js → org-layout-DqAAtGQs.js} +1 -1
- package/dist/client/assets/{organization-choice-CnJyIx4u.js → organization-choice-DyMToUOo.js} +1 -1
- package/dist/client/assets/{orgs-BN-zIDW0.js → orgs-D3s1x6Kb.js} +1 -1
- package/dist/client/assets/{page-seo-form-45nCnjKs.js → page-seo-form-DSxdIN1j.js} +1 -1
- package/dist/client/assets/{popover-BDnU5HqY.js → popover-Cn5ooUAp.js} +1 -1
- package/dist/client/assets/{post-editor-C6WUG5Xc.js → post-editor-B2d0y9If.js} +1 -1
- package/dist/client/assets/{primitives-nSff_8-g.js → primitives-Dx7r3JTM.js} +1 -1
- package/dist/client/assets/{profile-CvP049Ya.js → profile-J5ZqqxR3.js} +1 -1
- package/dist/client/assets/{project-app-view-dPYxGuxE.js → project-app-view-C9F-yT_c.js} +1 -1
- package/dist/client/assets/record-editor-D71sChpW.js +1 -0
- package/dist/client/assets/{redirect-editor-Cu9EvFXR.js → redirect-editor-DRhFEoCW.js} +1 -1
- package/dist/client/assets/registry-D4pOgmSD.js +2 -0
- package/dist/client/assets/{registry-layout-Cj1l_q8m.js → registry-layout-C6A80Dj_.js} +1 -1
- package/dist/client/assets/{reports-Dh3yeGs_.js → reports-SORakUON.js} +1 -1
- package/dist/client/assets/{require-capability-ZgTB05Wz.js → require-capability-ytIYFOPr.js} +1 -1
- package/dist/client/assets/{required-auth-layout-D-pIxglz.js → required-auth-layout-CiipM_dD.js} +1 -1
- package/dist/client/assets/{reset-password-Cm4T2kPB.js → reset-password-B2W-Qp-I.js} +1 -1
- package/dist/client/assets/{roles-CfIX1RaQ.js → roles-DDRHKsyi.js} +1 -1
- package/dist/client/assets/{search-input-CLsZ1a5E.js → search-input-BMYKL-Pa.js} +1 -1
- package/dist/client/assets/{secrets-CpOGnu_C.js → secrets-9LJsi5RJ.js} +1 -1
- package/dist/client/assets/{sections-editor-BvzU3Ks3.js → sections-editor-BlOdL3LC.js} +1 -1
- package/dist/client/assets/{select-B0XGDBgm.js → select-BFSpKw_z.js} +1 -1
- package/dist/client/assets/{select-model-BQD-sjoN.js → select-model-Bk8Eibgr.js} +1 -1
- package/dist/client/assets/{self-tool-result-CHaujVnO.js → self-tool-result-B7kOCMr3.js} +1 -1
- package/dist/client/assets/{seo-editor-Z2-pzwaH.js → seo-editor-Cxabny2a.js} +1 -1
- package/dist/client/assets/{settings-layout-u_9G7S_l.js → settings-layout-CnafyW79.js} +1 -1
- package/dist/client/assets/{settings-section-DsGS_acj.js → settings-section-DssqvGXA.js} +1 -1
- package/dist/client/assets/{shell-controls-BUmLo7Ts.js → shell-controls-CZaDmvtA.js} +1 -1
- package/dist/client/assets/{shell-layout-DRjinrfN.js → shell-layout-G7yZr4IW.js} +1 -1
- package/dist/client/assets/{sidebar-Dzp4QT-i.js → sidebar-DPnFG9C5.js} +1 -1
- package/dist/client/assets/{skeleton-CoiU151n.js → skeleton-ClLvXe4I.js} +1 -1
- package/dist/client/assets/{spinner-D9CX9d5L.js → spinner-BHc3lImX.js} +1 -1
- package/dist/client/assets/{sso-2CUaSFYb.js → sso-vm47y1za.js} +1 -1
- package/dist/client/assets/{store-DqhbOcoF.js → store-DwmR5Q-J.js} +1 -1
- package/dist/client/assets/store-registry-2pd06lHG.js +2 -0
- package/dist/client/assets/{studio-tools-CpdJSCXB.js → studio-tools-DiZ_bbYI.js} +1 -1
- package/dist/client/assets/{switch-DJUp0sUF.js → switch-BJI5bIL0.js} +1 -1
- package/dist/client/assets/{synced-repos-Bdg0S59_.js → synced-repos-gC440RKr.js} +1 -1
- package/dist/client/assets/{tab-id-K8HXXexi.js → tab-id-CfdUb1Y9.js} +1 -1
- package/dist/client/assets/{table-DUAnivu4.js → table-CkV5nRsW.js} +1 -1
- package/dist/client/assets/{tabs-DuXRMFcG.js → tabs-DjVW_K7o.js} +1 -1
- package/dist/client/assets/{textarea-BOvhX53j.js → textarea-BFBGkiX1.js} +1 -1
- package/dist/client/assets/{toggle-group-Cr63fJGx.js → toggle-group-D3u0i0_i.js} +1 -1
- package/dist/client/assets/{toolbar-DfDfS-I-.js → toolbar-C7uhKX2A.js} +1 -1
- package/dist/client/assets/{tooltip-Ojbmo0_Z.js → tooltip-BCalMGKr.js} +1 -1
- package/dist/client/assets/{use-ai-providers-Dvs8D9Ix.js → use-ai-providers-DKoAaJz-.js} +1 -1
- package/dist/client/assets/{use-automations-B07s8dHe.js → use-automations-DtdnZ0sp.js} +1 -1
- package/dist/client/assets/{use-autosave-CtaXqso4.js → use-autosave-zgFULETJ.js} +1 -1
- package/dist/client/assets/{use-capability-D-cor-cv.js → use-capability-DrX-HJsl.js} +1 -1
- package/dist/client/assets/{use-clock-tick-BK-trw7a.js → use-clock-tick-AQ3jBoWo.js} +1 -1
- package/dist/client/assets/{use-connection-6zPneDTd.js → use-connection-BMF2khCd.js} +1 -1
- package/dist/client/assets/{use-copy-cGszSFB5.js → use-copy-BBaauSSR.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-LKcuyz_q.js → use-create-virtual-mcp-nTUDJxRO.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-CQ6zEpK_.js → use-debounced-autosave-DusAkTrH.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DI6iP-Hy.js → use-debounced-value-6HUlGIiQ.js} +1 -1
- package/dist/client/assets/{use-deco-credits-B26EuXjO.js → use-deco-credits-CsniXbSQ.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-YmSBI1WH.js → use-decopilot-events-BESgxqAi.js} +1 -1
- package/dist/client/assets/{use-delete-connection-HLAmlVQQ.js → use-delete-connection-DPTJ8drn.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DPFzTf0R.js → use-deployment-admin-BTwkM0Jg.js} +1 -1
- package/dist/client/assets/{use-file-configs-BlZRQU72.js → use-file-configs-BvMWhl1i.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DliG_tLC.js → use-infinite-scroll-BtTZDFek.js} +1 -1
- package/dist/client/assets/{use-join-requests-DR5rYKeA.js → use-join-requests-C4edgCT6.js} +1 -1
- package/dist/client/assets/{use-mcp-client-Br8rqOVT.js → use-mcp-client-DeZzEuSF.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BrZk4LKP.js → use-mcp-tools-Bzn1nfOB.js} +1 -1
- package/dist/client/assets/{use-members-t8fZ41d7.js → use-members-ugwlPlzT.js} +1 -1
- package/dist/client/assets/{use-mobile-Dx8h_T-f.js → use-mobile-Bv6scHfL.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-Cx3maI8h.js → use-navigate-to-agent-CSB4B9l7.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-BaYQgvnq.js → use-open-billing-url-BQmMjbUB.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DfCdT6sB.js → use-org-auth-client-Cjwb19qN.js} +1 -1
- package/dist/client/assets/{use-org-sso-C0oVZKz1.js → use-org-sso-DeiUD45j.js} +1 -1
- package/dist/client/assets/{use-organization-roles-Cxf_vcGq.js → use-organization-roles-B4d9nNTg.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CyLyZUIV.js → use-organization-settings-BudFdqtE.js} +1 -1
- package/dist/client/assets/{use-registry-connections-CGQOlUDE.js → use-registry-connections-pQdLVEN8.js} +1 -1
- package/dist/client/assets/{use-secrets-CRQ3D3UT.js → use-secrets-fztZbY4y.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-BRayOpPe.js → use-section-preview-base-Bsj7oD1T.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CdSRIw8s.js → use-status-sounds-C3VtPzBA.js} +1 -1
- package/dist/client/assets/{use-tags-BYXFRZWg.js → use-tags-B93F7cTZ.js} +1 -1
- package/dist/client/assets/{use-view-mode-BCwfV7S_.js → use-view-mode-Dsp1dU9r.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DcG1NT1B.js → use-virtual-mcp-BC3rQJvS.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-D1vpZ69I.js +1 -0
- package/dist/client/assets/{useRouterState-Bz_Zvmzb.js → useRouterState-CAwtXpMK.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-ONsANjZj.js +1 -0
- package/dist/client/assets/{users-DiccdLtE.js → users-D_wI_ZoI.js} +1 -1
- package/dist/client/assets/{variant-calendar-CgQrQ9Hi.js → variant-calendar-B8nn-yOH.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DvyfbpLI.js → view-mode-toggle-BKZ11ets.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/record-editor-BuiLSdnY.js +0 -1
- package/dist/client/assets/registry-DrlqHV3l.js +0 -2
- package/dist/client/assets/store-registry-Dqpkmhhx.js +0 -2
- package/dist/client/assets/useInfiniteQuery-bSPHZoi3.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-D8Aoasic.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2734,7 +2734,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2734
2734
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2735
2735
|
|
|
2736
2736
|
Respond with the structured verdict and a short reason.`,Df$;var Ef$=B(()=>{V4();rw();Z61();R56=X61.object({requiresReview:X61.boolean().describe("true if the changes should go through pull-request review"),reason:X61.string().describe("One short sentence explaining the decision (max ~120 chars)")});Df$={requiresReview:!1,reason:""}});function jf$($){let Z=$?.trim();if(!Z)return null;try{let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;return X.href}catch{return null}}function ej0($){return jf$($?.previewServerUrl)??jf$($?.productionUrl)}function zf$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function Pf$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function Af$($){let Z=Kh.get($);if(!Z)return;Kh.delete($),Q61-=Z.bytes}function V56($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(Af$($),Q>S56)return;Kh.set($,{etag:Z,body:X,bytes:Q}),Q61+=Q;while(Q61>k56||Kh.size>M56){let Y=Kh.keys().next().value;if(Y===void 0)break;Af$(Y)}}function Tf$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,N){let F=`${zf$()}${K}`,U=Pf$(W,K)?Kh.get(F):void 0,w=await fetch(F,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&w.status===304)return{status:200,json:U.body};if(!w.ok&&!N?.allow?.includes(w.status)){let D=await w.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new V6(w.status,W,K,L)}let O=w.status===204?void 0:await w.json();if(w.status===200&&Pf$(W,K)){let D=w.headers.get("etag");if(D)V56(F,D,O)}return{status:w.status,json:O}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${$_(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${$_(W)}`,H=await fetch(`${zf$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let N=await H.text().catch(()=>"");throw new V6(H.status,"GET",K,N.slice(0,300))}if(!H.body)throw new V6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new V6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new V6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:N}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return N.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${$_(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:N,json:F}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return N===204?null:F?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:N}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:N.number,html_url:N.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),N=H[0];return N?{number:N.number,html_url:N.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${$_(W)}...${$_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${$_(W)}...${$_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((N)=>({filename:N.filename,status:N.status,sha:N.sha,...N.previous_filename?{previousFilename:N.previous_filename}:{}}))}}}}function $_($){return $.split("/").map(encodeURIComponent).join("/")}var M56=512,k56=8388608,S56=262144,Kh,Q61=0,V6;var Z_=B(()=>{Kh=new Map;V6=class V6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function $z0($,Z,X){if(!X.connectionId)throw new V6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new V6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await C56($,Q);if(!Y)throw new V6(401,"AUTH","connection",VZ);return Tf$({owner:X.owner,repo:X.name,accessToken:Y})}async function C56($,Z){if(t5(Z)?.sourceConnectionId)return wx($,Z);return(await kY({connectionId:Z.id,connectionUrl:Z.connection_url,tokenStorage:new R6($.db,$.vault)})).accessToken}var Y61=B(()=>{AY();t50();ZK();PY();Z_()});function _56($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function Zz0($){if(_56($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function Qr($){let Z=$;for(;;){let X;try{X=decodeURIComponent(Z)}catch{return Z}if(X===Z)return Z;Z=X}}function G61($){return Zz0($),encodeURIComponent($)}function Yr($){let Z=[...$].sort((Y,G)=>{let J=`${Y.stem}.json`,W=`${G.stem}.json`;return J<W?-1:J>W?1:0}),X="{",Q=!0;for(let Y of Z){let G=Y.content.trim();if(G.length===0)continue;if(!Q)X+=",";Q=!1,X+=`${JSON.stringify(Qr(Y.stem))}:${G}`}return`${X}}`}var Rf$=()=>{};var Xz0=B(()=>{Rf$()});function v56($){return $.startsWith("merged/")?"merged":"blobs"}function J61($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=v56(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function If$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Hh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function qf$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),N=[],F=new Set;if(Y==="merged")for(let[U,w]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||w.area!=="merged")continue;N.push(U),F.add(U),H-=w.bytes,K-=w.bytes}for(let[U,w]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||F.has(U))continue;N.push(U),F.add(U),K-=w.bytes}for(let U of N)Hh($,U);return Hh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:N}}function Gr($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function W61($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as _f$}from"crypto";import{mkdir as Jr,readdir as f56,readFile as b56,rename as x56,rm as vf$,stat as ff$,statfs as y56,unlink as g56,writeFile as h56}from"fs/promises";import{tmpdir as u56}from"os";import{dirname as c56,join as T7}from"path";function Nh($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function m56(){if(Qz0)return Qz0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?T7(u56(),"studio-fast-preview-cache"):$;return Qz0={enabled:Z!=="",root:Z,index:{maxTotalBytes:Nh("FAST_PREVIEW_CACHE_MAX_BYTES",2*Mf$),maxMergedBytes:Nh("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*Yz0),maxEntryBytes:{blobs:Nh("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",Yz0),merged:Nh("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*Yz0)}},freeFloorBytes:Nh("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Mf$),sweepIntervalMs:Nh("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},Qz0}function i56(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function n56(){if(XB)return;XB={hits:k$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:k$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:k$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:k$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:k$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},k$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Fh)return;$.observe(Fh.index.areaBytes.blobs,{area:"blobs"}),$.observe(Fh.index.areaBytes.merged,{area:"merged"})}),k$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Fh)return;let Z={blobs:0,merged:0};for(let X of Fh.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function p56($){X_.hits[$]+=1,XB?.hits.add(1,{area:$})}function kf$($){X_.misses[$]+=1,XB?.misses.add(1,{area:$})}function K61(){X_.evictions+=1,XB?.evictions.add(1)}function KF($){X_.errors+=1,XB?.errors.add(1,{op:$})}function t56($){X_.invalidKeySkips+=1,XB?.errors.add(1,{op:`${$}_invalid_key`})}function H61(){return Sf$??=r56(),Sf$}async function r56(){let $=m56();if(!$.enabled)return null;n56();try{await Jr(T7($.root,"blobs"),{recursive:!0}),await Jr(T7($.root,"merged"),{recursive:!0}),await Jr(T7($.root,"tmp"),{recursive:!0})}catch{return KF("init"),null}let Z=[];try{Z=await bf$($.root)}catch{KF("scan"),Z=[]}let X={root:$.root,index:J61(Z,$.index),cfg:$};return Fh=X,e56(X),X}async function Gz0($){try{return await f56($)}catch{return[]}}async function bf$($){let Z=[];for(let X of["blobs","merged"]){let Q=T7($,X);for(let Y of await Gz0(Q)){let G=T7(Q,Y);for(let J of await Gz0(G)){let W=T7(G,J);for(let K of await Gz0(W))try{let H=await ff$(T7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function xf$($,Z,X){if(!W61(X))return null;try{return`blobs/${Gr($)}/${Gr(Z)}/${X}`}catch{return null}}function yf$($,Z,X){if(!W61(X))return null;try{return`merged/${Gr($)}/${Gr(Z)}/${X}.json`}catch{return null}}async function gf$($,Z){try{let X=await H61();if(!X)return null;if(Z===null)return kf$($),null;try{let Q=await b56(T7(X.root,Z),"utf8");return If$(X.index,Z),p56($),Q}catch{return kf$($),null}}catch{return KF(`get_${$}`),null}}function hf$($,Z,X){return gf$("blobs",xf$($,Z,X))}function uf$($,Z,X){return gf$("merged",yf$($,Z,X))}async function a56($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await y56($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function Jz0($){try{await g56($)}catch{}}async function s56($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Hh($.index,X.value),await Jz0(T7($.root,X.value)),K61()}}catch{KF("emergency_evict")}}async function cf$($,Z,X,Q){try{let Y=await H61();if(!Y)return;if(X===null){t56(Z);return}if(!await a56(Y)){X_.floorSkips+=1,XB?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=qf$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){X_.admissionRefusals+=1;return}for(let K of J.evict)await Jz0(T7(Y.root,K)),K61();let W=T7(Y.root,"tmp",`stage-${_f$()}`);try{await h56(W,Q,"utf8");let K=T7(Y.root,X);await Jr(c56(K),{recursive:!0}),await x56(W,K)}catch(K){if(Hh(Y.index,X),await Jz0(W),KF(Z),K?.code==="ENOSPC")await s56(Y)}}catch{KF(Z)}}function Wz0($,Z,X,Q){return cf$("blobs","put_blob",xf$($,Z,X),Q)}function lf$($,Z,X,Q){return cf$("merged","put_merged",yf$($,Z,X),Q)}async function df$(){try{let $=await H61();if(!$)return null;let Z=T7($.root,"tmp",_f$());return await Jr(Z,{recursive:!0}),Z}catch{return KF("make_scratch"),null}}async function mf$($){try{await vf$($,{recursive:!0,force:!0})}catch{KF("remove_scratch")}}function e56($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;Vf$=new AbortController,C$(Math.random()*Z,{signal:Vf$.signal}).then(()=>{Cf$($);let X=setInterval(()=>void Cf$($),Z);X.unref?.(),o56=X}).catch(()=>{})}async function Cf$($){try{let Z=J61(await bf$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;Hh(Z,G),await Jz0(T7($.root,G)),K61()}$.index=Z;let Q=T7($.root,"tmp"),Y=Date.now();for(let G of await Gz0(Q)){let J=T7(Q,G);try{let W=await ff$(J);if(Y-W.mtimeMs>d56)await vf$(J,{recursive:!0,force:!0})}catch{}}}catch{KF("sweep")}}var l56=1024,Yz0,Mf$,d56=3600000,Qz0=null,XB=null,X_,Sf$=null,Fh=null,o56=null,Vf$=null;var if$=B(()=>{$6();v6();Yz0=1024*l56,Mf$=1024*Yz0;X_=i56()});function nf$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as $96,stat as Z96}from"fs/promises";import{join as pf$}from"path";function X96($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function Q96(){return tf$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),tf$}async function of$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new Wr(`invalid blocks path prefix: ${X}`);let Y=await Q96(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...X96(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(F){throw new Wr("failed to spawn tar",{cause:F})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let F=(await K).trim().slice(0,500);throw new Wr(`tar exited with code ${H}${F?`: ${F}`:""}`)}let N=await Y96(Z,Q);if(N.length===0)throw new Wr(`tar extracted no ${G} members into ${Z}`);return N}async function Y96($,Z){let X=pf$($,...Z.split("/")),Q;try{Q=await $96(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=pf$(X,G);try{if(!(await Z96(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var Wr,tf$=null;var rf$=B(()=>{Wr=class Wr extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as G96}from"crypto";import{readFile as J96}from"fs/promises";async function Kr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof V6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof V6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function K96(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return sf$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):sf$}function H96($){ef$??=k$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),ef$.add(1,{path:$})}async function Kz0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function Hz0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function N61($,Z){let X=`${Hz0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function F61($,Z){return $.filter((X)=>Qr(X.stem)===Z).map((X)=>X.path).sort()}function $b$($,Z,X,Q){return Wz0($,Z,X,Q)}function N96($,Z){if(!Z)return $;return G96("sha1").update(`${$}:${Z}`).digest("hex")}async function Zb$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await Kr($,Z):await $.getHeadSha(Z);return F96.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>U96($,Y,X))}async function U96($,Z,X){let{owner:Q,repo:Y}=$,G=N96(Z,X),J=await uf$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=N61(K,X),N=new Map;if(await Kz0(H,af$,async(O)=>{let D=await hf$(Q,Y,O.sha);if(D!==null)N.set(O.path,D)}),H.length-N.size>W96){let O=await w96($,Z,X,H);if(H96(O!==null?"tarball":"blobs"),O!==null)for(let[D,L]of O)N.set(D,L)}let U=await Kz0(H,af$,async(O)=>{let D=N.get(O.path);if(D!==void 0)return{stem:O.stem,content:D};let L=await $.getBlobText(O.sha);return await Wz0(Q,Y,O.sha,L),{stem:O.stem,content:L}}),w=Yr(U);return await lf$(Q,Y,G,w),{sha:Z,decofile:w}}async function w96($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=K96(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await df$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await of$(K,W,Hz0(X)),N=new Map(Q.map((U)=>[U.path,U.sha])),F=new Map;for(let U of H){let w=N.get(U.path);if(w===void 0)continue;let O=await J96(U.diskPath,"utf8");await Wz0($.owner,$.repo,w,O),F.set(U.path,O)}return F}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await mf$(W)}}var af$=12,W96=50,sf$=134217728,ef$=null,F96;var Nz0=B(()=>{Xz0();v6();if$();Z_();rf$();F96=nf$()});async function Fz0($,Z){let X=await $.getDefaultBranch(),Q=await Kr($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function Uz0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,O96),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((N)=>N.type==="blob").map((N)=>[N.path,N.sha])),H=await Kz0(G,B96,async(N)=>{let F=N.previousFilename??N.filename,U=N.status==="added"?void 0:K.get(F),w=U?await $.getBlobText(U):null,O=N.status==="removed"?null:await $.getBlobText(N.sha);return[N.filename,{from:w,to:O}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function Xb$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof V6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new V6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await E96($,Z,X)}async function E96($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=D96)throw new V6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=[];for(let U of J){let w=K.get(U.filename);if(U.status==="removed"||!w)H.push({path:U.filename,mode:"100644",type:"blob",sha:null});else H.push({path:U.filename,mode:"100644",type:"blob",sha:w.sha});if(U.previousFilename&&U.previousFilename!==U.filename)H.push({path:U.previousFilename,mode:"100644",type:"blob",sha:null})}let N=await $.createTree(await $.getCommitTreeSha(G),H),F=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:N,parentShas:[Y,G]});try{await $.updateRef(Z,F);return}catch(U){if(U instanceof V6&&U.status===422&&Q<L96)continue;throw U}}}var O96=200,B96=12,D96=300,L96=3;var Qb$=B(()=>{Z_();Nz0()});function z96($){if(!$||$.includes(".."))return!1;return j96.test($)}function Yb$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!z96(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Gb$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var j96;var Jb$=B(()=>{j96=/^[\w./@-]+$/});function U61($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Hr($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Wb$($,Z,X,Q){if(!Q.connectionId)throw new Uh("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Uh(VZ);await Vw({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:VZ;throw new Uh(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await Cw(Q.connectionId,Q.owner,Q.name,$.db,$.vault),K=Wh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let N=await tw(H,P96).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var P96=10485760,Uh;var w61=B(()=>{ZK();sj0();$n();Ox();Uh=class Uh extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function T96($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!A96.test(Z))throw Error(`Invalid branch name: ${$}`)}function Q_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(I96)])}function Y_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Nr($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Hr(Z,X);if(!Y)throw new V6(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return $z0(Q,G.id,Y)}function O61($,Z){if(Z instanceof V6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,j9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,j9)}async function Nb$($){try{let Z=await Nr($),X=await Fz0(Z,$.get("vmClaim").branch);return $.json(X,200,j9)}catch(Z){return O61($,Z)}}function Oz0($,Z){let Q=(wz0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return wz0.set($,Y),Y.finally(()=>{if(wz0.get($)===Y)wz0.delete($)}),Q}async function gZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,j9);let Q=Y_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let w=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))w=await Q.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...j9}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?M96(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...j9}})};try{if(N){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function M96($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function Bz0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function k96($){return Fb$.includes($)}var A96,Kb$=524288,R96=65536,I96=1e4,Hb$=2000,q96,wz0,j9,Fb$,Ub$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",q96),$.post("/:virtualMcpId/:branch/write",(X)=>gZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>gZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>gZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>gZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>gZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>gZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>gZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Q_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return gZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return gZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>gZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>gZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!k96(Q))return X.json({error:`step must be one of: ${Fb$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=o(X.var.studioContext),J=Cx(Y.virtualMcpMetadata);try{await RU0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return gZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return WF(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Nf$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Nb$(X);return Z(X)});let Z=(X)=>gZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hb$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Nb$(X);return gZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Hb$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await Nr(X),J=await Uz0(G,Q.branch,Y.base);return X.json(J,200,j9)}catch(Y){return O61(X,Y)}return gZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,j9);let Q=Y_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Oz0(Y,async()=>{try{await o41(W,Q,Y);let K=Hr(G,J);if(K)await Wb$(W,Q,Y,K)}catch(K){if(K instanceof Uh)return X.json({error:K.message},403,j9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,j9)}return gZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,j9);return Oz0(Q,()=>gZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Oz0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Nr(X),H=W.base??await K.getDefaultBranch();return await Xb$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,j9)}catch(W){return O61(X,W)}});let Y=Y_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Oz0(G,async()=>{try{await o41(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,j9)}return gZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",FZ({maxSize:Kb$,onError:(X)=>X.json({error:"Payload too large"},413,j9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=Y_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=s41(N)&&U?[N,F]:Y?await Promise.all([Bz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Bz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Nr(X);return Promise.all([Fz0(L,Q.branch),Uz0(L,Q.branch)])})(),D=await Bf$(K,w,O);return X.json(D,200,j9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j9);return X.json({error:N},502,j9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",FZ({maxSize:Kb$,onError:(X)=>X.json({error:"Payload too large"},413,j9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=Y_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[w,O]=s41(N)&&U?[N,F]:Y?await Promise.all([Bz0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),Bz0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await Nr(X);return Promise.all([Fz0(L,Q.branch),Uz0(L,Q.branch)])})(),D=await Lf$(K,w,O,typeof H.language==="string"?H.language:void 0);return X.json(D,200,j9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j9);return X.json({error:N},502,j9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Y_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=U61(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",FZ({maxSize:R96,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Y_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Yb$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Gb$(G,W.resolveType),H=U61(K),N;try{N=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await N.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var wb$=B(()=>{C8();aO();Jh();t41();KN();Kf$();R3();mw();Hf$();Ff$();km0();si();Z61();Ef$();Y61();Z_();Qb$();Jb$();w61();A96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;q96=aj0(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{T96(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=zi({orgId:Y.id,virtualMcpId:G,branch:J}),H=await LN(X,J,Q),N=Wf$({userId:H,projectRef:K}),F=W.metadata??null;if(F?.fastPreview===!0&&ej0(F))return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await dX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});wz0=new Map;j9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Fb$=["clone","install","start"]});function Ob$($,Z,X){let Q=B61.get($);if(!Q)Q={pending:null,running:!1},B61.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)V96($,Q);return G}async function V96($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await C96(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)B61.delete($)}}async function C96($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Kr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=N61(W,Q),H=[],N=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,D]of $.set){let L=F61(K,O),E=`${JSON.stringify(D,null,2)}
|
|
2737
|
-
`,j=await Z.createBlob(E);await $b$(Z.owner,Z.repo,j,E);let z=L[0]??`${Hz0(Q)}/${G61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of F61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Yr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:_96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof V6&&O.status===422)||Y>=S96-1)throw O;await C$(cZ(2000,200,Y,2,0.5))}}}function _96($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return $l0(Q,$.deps.coAuthor)}var S96=3,B61;var Bb$=B(()=>{LU0();Xz0();$6();Z_();Nz0();B61=new Map});import{createHmac as Db$,randomBytes as v96,timingSafeEqual as f96}from"crypto";function Lb$(){if(Dz0)return Dz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Dz0=$?Buffer.from($):v96(32),Dz0}function D61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+b96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Db$("sha256",Lb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Eb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Db$("sha256",Lb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!f96(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var b96=21600000,Dz0=null;var jb$=B(()=>{M$()});import{z as wh}from"zod";function y96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&x96.test($)}function Pb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Lz0($){let Z=$.get("decofileScope");return $z0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ez0($,Z){if(Z instanceof V6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Ab$(){let $=new U1;return $.use("/:virtualMcpId/:branch",zb$),$.use("/:virtualMcpId/:branch/*",zb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Lz0(Z),Y=await Zb$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=D61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Pb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ez0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=g96.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{Zz0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Lz0(Z),W=await Ob$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Wh(Q)},G),K=D61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Pb$(Z)})}catch(J){return Ez0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Lz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof V6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof V6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return Ez0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Lz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof V6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Ez0(Z,Q)}}),$}var x96,g96,zb$;var Tb$=B(()=>{Xz0();C8();t41();sj0();w61();Y61();Bb$();jb$();Z_();Nz0();x96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;g96=wh.object({set:wh.record(wh.string(),wh.unknown()).optional(),delete:wh.array(wh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),zb$=aj0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!y96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Eb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!ej0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Hr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var Rb$=($)=>{let Z=new U1;if(Z.use("*",iC),Z.route("/",Oj0()),Z.route("/",iV$()),Z.route("/",tv$()),Z.route("/",iv$()),Z.route("/",tj0()),Z.route("/tools",Zf$()),Z.route("/",sv$()),Z.route("/",Mv$({kvStorage:$.kvStorage})),Z.route("/",Iv$()),Z.route("/fs",gv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ub$()),Z.route("/decofile",Ab$()),Z.route("/",lv$()),Z.route("/deco-sites",Dj0()),Z.route("/sso",Kj0()),Z.route("/",oj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",yV$()),$.mountDevAssets)Z.route("/dev-assets",Lj0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",kk$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",uv$()),Z.route("/mcp",VO0()),Z.route("/mcp/self",pj0()),Z.route("/mcp",vO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ib$=B(()=>{C8();B81();gV$();z81();Ej0();So();w81();qv$();kv$();hv$();cn();G81();fO0();c41();cv$();dv$();nv$();ov$();ev$();d41();Xf$();m41();CO0();wb$();Tb$()});function u96($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function c96($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(h96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var h96=1e4,l96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},qb$=()=>{let $=new U1;return $.use("*",l96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await c96(Q,Y);return Z.json({apps:u96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Mb$=B(()=>{C8();M$()});import{z as M1}from"zod";function mK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function s96($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function e96($,Z,X){try{return JSON.parse($)}catch{throw new Vb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function $Z6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:e96(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function ZZ6($){let Z=$.map((X)=>{let Q=X.function.parameters?qY(X.function.parameters):qY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function XZ6($){if(!$)return;return{openai:{response_format:$}}}function QZ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function kb$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Sb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var d96=256,m96,i96,n96,p96,t96,o96,r96,a96,Vb$,Cb$,_b$;var vb$=B(()=>{V4();C8();Jh();uN();m96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),i96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),n96=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(i96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),p96=M1.object({type:M1.literal("text")}),t96=M1.object({type:M1.literal("json_object")}),o96=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),r96=M1.union([p96,t96,o96]),a96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(n96),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(m96).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:r96.optional(),user:M1.string().optional()});Vb$=class Vb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Cb$=new U1;Cb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(mK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(mK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(mK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=a96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(mK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=s96(G.model);if(!J)return $.json(mK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>FD(j.providerId));if(!E)return $.json(mK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(mK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=$Z6(G.messages),U=G.tools?ZZ6(G.tools):void 0,w=XZ6(G.response_format),O=QZ6(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=kb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=d96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=kb$(N,F,U,G,w,$.req.raw.signal),E=await qw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sb$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(mK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(mK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(mK(Y.message,"server_error"),500)}});_b$=Cb$});var bb$;var fb$=B(()=>{bb$={name:"decocms",version:"4.208.1",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",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},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","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"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",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function JZ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??GZ6}}var xb$,GZ6="https://ph.studio.decocms.com",yb$;var gb$=B(()=>{C8();by0();yV();PZ();M$();$81();fb$();xb$=new U1;xb$.get("/",($)=>{let Z={version:bb$.version,theme:Oc1(),...ZL().logo&&{logo:ZL().logo},...DK()&&{internalUrl:dM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:ZV$(),posthog:JZ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!DK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});yb$=xb$});function Oh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function L61($){return(Oh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ub$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Oh($))}&sz=${Z}`}function hb$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function cb$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?hb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):hb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var G_,WZ6,KZ6,HZ6,NZ6,lb$;var db$=B(()=>{G_=c0.enum(["good","bad","neutral"]),WZ6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:G_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),KZ6=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(WZ6)),HZ6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},NZ6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:G_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:G_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:G_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:G_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(KZ6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:G_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:G_.optional()})).min(1)})]),lb$=c0.object({...HZ6,template:NZ6})});function jz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=lb$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var E61=B(()=>{db$()});import{join as mb$}from"path";async function UZ6($){try{let Z=await fetch(`${uW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(FZ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=jz0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||L61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function tY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function wZ6($,Z){let X=Oh($),Q=Z?.brand?.trim()||L61(X),Y=ub$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=cb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${tY(W)}</title>`,`<meta name="description" content="${tY(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${tY(W)}" />`,`<meta property="og:description" content="${tY(K)}" />`,`<meta property="og:url" content="${tY(J)}" />`,`<meta property="og:image" content="${tY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${tY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${tY(W)}" />`,`<meta name="twitter:description" content="${tY(K)}" />`,`<meta name="twitter:image" content="${tY(H)}" />`,`<meta name="twitter:image:alt" content="${tY(N)}" />`,`<link rel="canonical" href="${tY(J)}" />`,`<link rel="icon" href="${tY(Y)}" sizes="any" />`].join(`
|
|
2737
|
+
`,j=await Z.createBlob(E);await $b$(Z.owner,Z.repo,j,E);let z=L[0]??`${Hz0(Q)}/${G61(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let O of $.del)for(let D of F61(K,O))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===F)){let O=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(Yr(O));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),w=await Z.createCommit({message:_96($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,w),w}catch(O){if(!(O instanceof V6&&O.status===422)||Y>=S96-1)throw O;await C$(cZ(2000,200,Y,2,0.5))}}}function _96($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return $l0(Q,$.deps.coAuthor)}var S96=3,B61;var Bb$=B(()=>{LU0();Xz0();$6();Z_();Nz0();B61=new Map});import{createHmac as Db$,randomBytes as v96,timingSafeEqual as f96}from"crypto";function Lb$(){if(Dz0)return Dz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Dz0=$?Buffer.from($):v96(32),Dz0}function D61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+b96)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Db$("sha256",Lb$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Eb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Db$("sha256",Lb$()).update(Q).digest("base64url"));if(Y.length!==G.length||!f96(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var b96=21600000,Dz0=null;var jb$=B(()=>{M$()});import{z as wh}from"zod";function y96($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&x96.test($)}function Pb$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Lz0($){let Z=$.get("decofileScope");return $z0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ez0($,Z){if(Z instanceof V6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Ab$(){let $=new U1;return $.use("/:virtualMcpId/:branch",zb$),$.use("/:virtualMcpId/:branch/*",zb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Lz0(Z),Y=await Zb$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=D61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Pb$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ez0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=g96.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{Zz0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await Lz0(Z),W=await Ob$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Wh(Q)},G),K=D61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Pb$(Z)})}catch(J){return Ez0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Lz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof V6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof V6&&G.status===405){let W=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.html_url})}throw G}}catch(Q){return Ez0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Lz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof V6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return Ez0(Z,Q)}}),$}var x96,g96,zb$;var Tb$=B(()=>{Xz0();C8();t41();sj0();w61();Y61();Bb$();jb$();Z_();Nz0();x96=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;g96=wh.object({set:wh.record(wh.string(),wh.unknown()).optional(),delete:wh.array(wh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),zb$=aj0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!y96(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let w=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!w||!Eb$(w,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!ej0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((w)=>w.connection_id)??[],F=Hr(K,N);if(!F)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:F,userId:J}),Z()})});var Rb$=($)=>{let Z=new U1;if(Z.use("*",iC),Z.route("/",Oj0()),Z.route("/",iV$()),Z.route("/",tv$()),Z.route("/",iv$()),Z.route("/",tj0()),Z.route("/tools",Zf$()),Z.route("/",sv$()),Z.route("/",Mv$({kvStorage:$.kvStorage})),Z.route("/",Iv$()),Z.route("/fs",gv$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ub$()),Z.route("/decofile",Ab$()),Z.route("/",lv$()),Z.route("/deco-sites",Dj0()),Z.route("/sso",Kj0()),Z.route("/",oj0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",yV$()),$.mountDevAssets)Z.route("/dev-assets",Lj0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",kk$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",uv$()),Z.route("/mcp",VO0()),Z.route("/mcp/self",pj0()),Z.route("/mcp",vO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ib$=B(()=>{C8();B81();gV$();z81();Ej0();So();w81();qv$();kv$();hv$();cn();G81();fO0();c41();cv$();dv$();nv$();ov$();ev$();d41();Xf$();m41();CO0();wb$();Tb$()});function u96($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function c96($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(h96)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var h96=1e4,l96=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},qb$=()=>{let $=new U1;return $.use("*",l96),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await c96(Q,Y);return Z.json({apps:u96(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Mb$=B(()=>{C8();M$()});import{z as M1}from"zod";function mK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function s96($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function e96($,Z,X){try{return JSON.parse($)}catch{throw new Vb$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function $Z6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:e96(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function ZZ6($){let Z=$.map((X)=>{let Q=X.function.parameters?qY(X.function.parameters):qY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function XZ6($){if(!$)return;return{openai:{response_format:$}}}function QZ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function kb$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Sb$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var d96=256,m96,i96,n96,p96,t96,o96,r96,a96,Vb$,Cb$,_b$;var vb$=B(()=>{V4();C8();Jh();uN();m96=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),i96=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),n96=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(i96).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),p96=M1.object({type:M1.literal("text")}),t96=M1.object({type:M1.literal("json_object")}),o96=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),r96=M1.union([p96,t96,o96]),a96=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(n96),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(m96).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:r96.optional(),user:M1.string().optional()});Vb$=class Vb$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Cb$=new U1;Cb$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(mK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(mK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(mK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=a96.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(mK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=s96(G.model);if(!J)return $.json(mK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>FD(j.providerId));if(!E)return $.json(mK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(mK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=$Z6(G.messages),U=G.tools?ZZ6(G.tools):void 0,w=XZ6(G.response_format),O=QZ6(),D=Math.floor(Date.now()/1000);if(G.stream)return WF($,async(L)=>{let E=kb$(N,F,U,G,w,$.req.raw.signal);try{let j=kw(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of j.fullStream){if(!z&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=d96)await q()}else if(S.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Sb$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=kb$(N,F,U,G,w,$.req.raw.signal),E=await qw(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Sb$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(mK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(mK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(mK(Y.message,"server_error"),500)}});_b$=Cb$});var bb$;var fb$=B(()=>{bb$={name:"decocms",version:"4.209.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",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},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","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"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",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function JZ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??GZ6}}var xb$,GZ6="https://ph.studio.decocms.com",yb$;var gb$=B(()=>{C8();by0();yV();PZ();M$();$81();fb$();xb$=new U1;xb$.get("/",($)=>{let Z={version:bb$.version,theme:Oc1(),...ZL().logo&&{logo:ZL().logo},...DK()&&{internalUrl:dM1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:ZV$(),posthog:JZ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!DK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});yb$=xb$});function Oh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function L61($){return(Oh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ub$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Oh($))}&sz=${Z}`}function hb$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function cb$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?hb$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):hb$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var G_,WZ6,KZ6,HZ6,NZ6,lb$;var db$=B(()=>{G_=c0.enum(["good","bad","neutral"]),WZ6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:G_.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),KZ6=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(WZ6)),HZ6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},NZ6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:G_.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:G_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:G_.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:G_.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(KZ6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:G_.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:G_.optional()})).min(1)})]),lb$=c0.object({...HZ6,template:NZ6})});function jz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=lb$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var E61=B(()=>{db$()});import{join as mb$}from"path";async function UZ6($){try{let Z=await fetch(`${uW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(FZ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=jz0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||L61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function tY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function wZ6($,Z){let X=Oh($),Q=Z?.brand?.trim()||L61(X),Y=ub$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=cb$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${tY(W)}</title>`,`<meta name="description" content="${tY(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${tY(W)}" />`,`<meta property="og:description" content="${tY(K)}" />`,`<meta property="og:url" content="${tY(J)}" />`,`<meta property="og:image" content="${tY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${tY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${tY(W)}" />`,`<meta name="twitter:description" content="${tY(K)}" />`,`<meta name="twitter:image" content="${tY(H)}" />`,`<meta name="twitter:image:alt" content="${tY(N)}" />`,`<link rel="canonical" href="${tY(J)}" />`,`<link rel="icon" href="${tY(Y)}" sizes="any" />`].join(`
|
|
2738
2738
|
`)}function OZ6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2739
2739
|
</head>`)}function ib$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=Oh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(mb$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${uW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(BZ6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?mb$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await UZ6(Oh(Q)),K=wZ6(Q,W);return X.html(OZ6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var FZ6=2500,BZ6=1e4;var nb$=B(()=>{C8();E61();BL();M$()});function Fr($,Z){return fetch(`${uW({})}${$}`,Z)}async function DZ6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Fr(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=jz0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var LZ6,HF,pb$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},tb$;var ob$=B(()=>{C8();SG();BL();E61();LZ6=new Set(["complete","errored","terminated","unknown"]),HF=new U1;HF.use("*",async($,Z)=>{let X=await j8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});HF.use("/link-token/*",pb$);HF.use("/suggest",pb$);HF.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await DZ6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});HF.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Fr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${OL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});HF.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Fr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${OL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:LZ6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});HF.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Fr(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});HF.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Fr(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});tb$=HF});import{createHmac as EZ6,timingSafeEqual as jZ6}from"crypto";function ab$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")Y=U;else if(F==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>zZ6)return!1;let W=EZ6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&jZ6(K,N)})}function sb$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=NJ(Z),Q=NJ(NJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:iK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function eb$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function iK($){return typeof $==="string"?$:void 0}function NJ($){return typeof $==="object"&&$!==null?$:void 0}function zz0($){return typeof $==="number"?new Date($*1000):null}function P61($){return iK($)??iK(NJ($)?.id)}function PZ6($){return P61($.subscription)??iK(NJ(NJ($.parent)?.subscription_details)?.subscription)}function AZ6($){let Z=zz0($.current_period_end);if(Z)return Z;let X=NJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=NJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function j61($,Z){let X=zz0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function z61($,Z){let X=zz0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function TZ6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=iK(NJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(iK(NJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(iK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=iK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(NJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:NJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(iK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=P61(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(j61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:P61(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:z61(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=iK(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&j61(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":eb$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:AZ6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:z61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=PZ6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(j61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:zz0(X.period_end),lastStripeEventAt:z61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function RZ6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:eb$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function rb$($,Z){let X=RZ6($,Z);if(!X)return;eJ({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Ad1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function $x$($){let Z=new xW(m8().db),X=await TZ6(Z,$);if(!(X.handled&&X.topUp))rb$($,X);if(X.handled&&X.topUp)await vU$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),rb$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await yo1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof H3&&(Q.status===400||Q.status===404)))throw Q}return X}var zZ6=300;var Zx$=B(()=>{TG();y4();w40();rm();pr0()});var IZ6=1048576,A61;var Xx$=B(()=>{C8();aO();M$();Zx$();A61=new U1;A61.post("/webhook",FZ({maxSize:IZ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=y0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!ab$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=sb$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await $x$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as qZ6}from"crypto";function kZ6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return qZ6(Buffer.from(Y),Buffer.from(Q))}var MZ6=5242880,T61;var Qx$=B(()=>{C8();aO();oi();T61=new U1;T61.post("/webhook",FZ({maxSize:MZ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!kZ6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Am0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Yx$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Gx$,SZ6,VZ6,Jx$;var Wx$=B(()=>{C8();sJ();ix();ib();Gx$=new U1,SZ6=["range","if-none-match","if-modified-since"],VZ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Gx$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(cg($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new e1(401,{message:"Authentication required"})}if(!X)throw new e1(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new e1(400,{message:"Missing file key"});let Y=await In(Q,Z);if(!Y)throw new e1(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&Y3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new e1(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Yx$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of SZ6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new e1(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new e1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of VZ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Yx$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Jx$=Gx$});var Ur=C((J_)=>{var CZ6=J_&&J_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),_Z6=J_&&J_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))CZ6(Z,$,X)};Object.defineProperty(J_,"__esModule",{value:!0});_Z6(QY(),J_)});var Nx$=C((Kx$)=>{Object.defineProperty(Kx$,"__esModule",{value:!0});Kx$.version=void 0;Kx$.version="3.4.0"});var wx$=C((nK)=>{var vZ6=nK&&nK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(nK,"__esModule",{value:!0});nK.NodeTransport=nK.VERSION=void 0;nK.nodeResolveHost=hZ6;var n6=Ur(),fZ6=z0("net"),R61=z0("tls"),bZ6=z0("path"),Fx$=z0("fs"),xZ6=vZ6(z0("dns")),yZ6=Nx$();nK.VERSION=yZ6.version;var gZ6="nats.js";class Ux${socket;version;lang;yields=[];signal=(0,n6.deferred)();closedNotification=(0,n6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=gZ6,this.version=nK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,n6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw n6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new n6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new n6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,n6.deferred)(),X,Q=(0,fZ6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,n6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=n6.DataBuffer.concat(...this.yields),Y=(0,n6.extractProtocolMessage)(Q);if(Y!=="")try{let G=n6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,n6.deferred)();try{if($=(0,bZ6.resolve)($),!(0,Fx$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Fx$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,n6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new n6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,n6.deferred)();try{let Y=(0,R61.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new n6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,n6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new n6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,n6.deferred)();try{let Q=(0,R61.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new n6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,n6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,n6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof R61.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,n6.render)($)}`);let Z=(0,n6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,n6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,n6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}nK.NodeTransport=Ux$;function hZ6($){let Z=(0,n6.deferred)();return xZ6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Ex$=C((Lx$)=>{Object.defineProperty(Lx$,"__esModule",{value:!0});Lx$.connect=uZ6;var Ox$=wx$(),Bx$=Ur(),Dx$=Ur();function uZ6($={}){if((0,Dx$.hasWsProtocol)($))return Promise.reject(Dx$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Bx$.setTransportFactory)({factory:()=>{return new Ox$.NodeTransport},dnsResolveFn:Ox$.nodeResolveHost}),Bx$.NatsConnectionImpl.connect($)}});var jx$=C((NF)=>{var lZ6=NF&&NF.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),dZ6=NF&&NF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))lZ6(Z,$,X)};Object.defineProperty(NF,"__esModule",{value:!0});NF.connect=void 0;var mZ6=Ex$();Object.defineProperty(NF,"connect",{enumerable:!0,get:function(){return mZ6.connect}});dZ6(Ur(),NF)});function Tx$($){let Z=$?.connectFn??tZ6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function N(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,w){let O=0;while(!G)try{X=await Z({servers:U,timeout:pZ6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{O++;let D=cZ(nZ6,iZ6,O-1,2,0.5);await C$(D)}}return{init(U,w){if(Y)return;Y=!0,G=!1;let O=w?.creds?zx$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Ax$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function tZ6($){return Px$.connect($)}var zx$,Px$,Ax$,iZ6=100,nZ6=3000,pZ6=3000;var Rx$=B(()=>{$6();zx$=k(uh(),1),Px$=k(jx$(),1),Ax$=k(jB(),1)});function I61($,Z){return`${$}.${Z}`}class q61{cache;constructor($){this.cache=Sg({ttlMs:$?.ttlMs??oZ6,maxSize:$?.maxSize??rZ6})}async get($,Z){return this.cache.get(I61($,Z))??null}async set($,Z,X){this.cache.set(I61($,Z),X)}async invalidate($,Z){this.cache.delete(I61($,Z))}teardown(){this.cache.clear()}}var oZ6=600000,rZ6=5000;var Ix$=()=>{};function Pz0($,Z){return`${$}:${Z}`}function M61($){let Z=Sg({ttlMs:$?.ttlMs??aZ6,maxSize:$?.maxSize??sZ6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish(qx$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(Pz0(K,H))},set(K,H,N){Z.set(Pz0(K,H),N)},invalidate(K,H){Z.delete(Pz0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(qx$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(Pz0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var qx$="studio.ai-provider-keys.invalidate",aZ6=30000,sZ6=5000;var Mx$=()=>{};class k61{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=kx$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of kx$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var kx$;var Sx$=B(()=>{kx$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Vx$=($)=>{let Z;return()=>Z??=$()},S61,V61;var Cx$=B(()=>{v6();S61=Vx$(()=>k$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),V61=Vx$(()=>k$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function G76(){return{name:kN,subjects:[`${ow0}.>`],storage:r3.StorageType.File,max_age:Z76,max_bytes:Q76,max_msgs_per_subject:Y76,discard:r3.DiscardPolicy.Old,retention:r3.RetentionPolicy.Limits,duplicate_window:X76,num_replicas:1}}class fx${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function _x$($){let Z=vx$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function H76($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,$76().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function N76($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class C61{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=G76(),X=await lZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await r3.jetstreamManager($);try{await Q.streams.info(kN),await Q.streams.update(kN,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(kN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:N76});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=H76(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=EW$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=pn0(H,{runId:Z}),U=performance.now()-N;if(S61().record(U),V61().add(1,{"org.id":Q??"unknown"}),K76?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)G.publish(Y,w.subject,w.data,w.headers?_x$(w.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:w,value:O}=await H.read();if(w)break;if(K(O),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(H.releaseLock(),W(),W76)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=pn0(Z,{runId:$,dedup:X});if(S61().record(performance.now()-Y),V61().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:_x$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=LW$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?r3.DeliverPolicy.New:r3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=FO($),W;try{W=await(await Q.consumers.get(kN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=$O0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(rw0()).pipeThrough(aw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){O(),D.close();return}let j=E;if(j.kind==="done"){if(G){O(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(kN,{filter:FO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var r3,vx$,eZ6=($)=>{let Z;return()=>Z??=$()},$76,Z76=86400000000000,X76=120000000000,Q76=4294967296,Y76=500000,J76,W76,K76;var bx$=B(()=>{$6();tn0();ZO0();sw0();v6();Cx$();r3=k(jB(),1),vx$=k(uh(),1),$76=eZ6(()=>k$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));J76=process.env.STREAM_ENCODE_TRACE==="1",W76=process.env.DECOPILOT_STREAM_TRACE==="1";K76=J76?new fx$:null});function Az0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,jW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var xx$=B(()=>{L8()});class _61{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function L76($){return $ instanceof zQ}function E76($,Z){return Z-$>=B76}class v61{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??F76;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??w76,X=this.options.itemIntervalMs??U76,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),Y=Q.at(-1);this.cursor=Q.length===Z&&Y?{updatedAt:Y.updatedAt,id:Y.id}:null;for(let{id:G,organizationId:J}of Q)try{if(await this.reconcileItem(G,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-wJ$),qp0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-D76));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await Dn0(this.taskBoard,Y,Q),await Ln0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==L4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await SN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),L76(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+O76)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),z4(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!E76(RL(X),Date.now()))return;await JO($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review"||X.assigneeId!==L4)return!1;await this.taskBoard.markSwept($,Z);let Q=await this.taskBoard.listPrs($,Z),Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;if(Q.length===0)return await this.handOffReviewWithoutPr(Y,X),!1;if(await IK$(Y,X))return!0;let G=await Promise.all(Q.map(async(J)=>({...J,...await Tp0(Y,Z,J)})));if(G.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${G.length} PR(s)) \u2014 proceeding on unknown`);if(!Ap0(G))return!1;return await JO0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var F76=60000,U76=300000,w76=50,O76=60000,B76=900000,D76=120000;var yx$=B(()=>{kZ();Lp0();UO();LO0();v9();N3();Mp0();cV()});import{readdir as j76,rm as Tz0}from"fs/promises";import{join as Rz0}from"path";async function Iz0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-z76),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await W_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await gx$($,Y,Z);else if(!Y.startsWith(".")){let G=Rz0($,Y),J=await W_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await gx$(G,K,Z)}if((await W_(G)).length===0)await Tz0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function gx$($,Z,X){let Q=0,Y=Rz0($,Z),G=await W_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=Rz0(Y,W),H=await W_(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=Rz0(K,F);await Tz0(w,{recursive:!0,force:!0}),Q++}}if((await W_(K)).length===0)await Tz0(K,{recursive:!0,force:!0})}if((await W_(Y)).length===0)await Tz0(Y,{recursive:!0,force:!0});return Q}async function W_($){try{return(await j76($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var z76=30;var f61=()=>{};import{DBOS as b61,SchedulerMode as P76}from"@dbos-inc/dbos-sdk";async function T76(){let $=[BJ(),K_(),tK()],Z=0;for(let X of $)try{Z+=await Iz0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function R76($,Z){await b61.runStep(()=>T76(),{name:"monitoringRetention"})}function ux$(){if(hx$)return;hx$=!0;let $=b61.registerWorkflow(R76,{name:"monitoringRetentionWorkflow"});b61.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:A76,mode:P76.ExactlyOncePerIntervalWhenActive})}var A76="23 4 * * *",hx$=!1;var cx$=B(()=>{eQ();f61()});function lx$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await KJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await h$1($.db,Z,Q.role);return Y.boundAuth=g$1({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new aD(X,void 0,Y.boundAuth,Q.role,"self"),rO(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var dx$=B(()=>{sD();lC()});function I76(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function M76(){for(let $ of q76)$()}function mx$($){let Z=[...x61.logs,$];x61={...x61,logs:Z.length>500?Z.slice(-500):Z},M76()}function y61(){return k76}var x61,q76,k76=!1;var g61=B(()=>{x61=I76(),q76=new Set});import{EventEmitter as S76}from"events";var h61;var ix$=B(()=>{g61();h61=new S76;h61.on("request",($)=>{mx$($)})});function nx$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=Bh(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>Bh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Z5.tool}${w}${Z5.dim}(${L})${Z5.reset}`}else if(U.method)G=`${Z5.dim}${Bh(U.method)}${Z5.reset}`}}catch{}}let W=Bh(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${Z5.mcp}${Bh(N.slice(0,12))}\u2026${Z5.reset}`}else if(Y==="/mcp")W=`${Z5.mcp}/mcp${Z5.reset}`;else if(Y==="/mcp/registry")W=`${Z5.mcp}/mcp/registry${Z5.reset}`;let K=C76(Q),H=J?"\u25C0":"\u2190";if(!y61())console.log(`${Z5.dim}${H}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=V76(F),w=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!y61())console.log(`${Z5.dim}${O}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""} ${U}${F}${Z5.reset} ${Z5.duration}${w}${Z5.reset}`);h61.emit("request",{method:Q,path:Bh(Y),status:F,duration:N,timestamp:new Date})}}}var Z5,V76=($)=>{if($>=500)return Z5.serverError;if($>=400)return Z5.clientError;if($>=300)return Z5.redirect;return Z5.ok},C76=($)=>{return Z5[$]||Z5.reset},Bh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var px$=B(()=>{g61();ix$();Z5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as ax$}from"crypto";import{mkdir as _76,readdir as v76,rm as tx$,stat as sx$}from"fs/promises";import{join as c61,relative as f76}from"path";import{z as E$}from"zod";function $y$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return c61(b76,Z)}function Zy$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function u61($,Z){let X=$y$($),Q=Zy$(Z);return c61(X,Q)}function x76($,Z,X,Q){let Y=y0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ax$("sha256",Y).update(G).digest("hex")}function rx$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=x76(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Zy$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Xy$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ax$("md5","etag").update(Q).digest("hex")}"`}async function Qy$($,Z,X,Q,Y){try{let G=await v76($,{withFileTypes:!0});for(let J of G){let W=c61($,J.name),H=f76(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(N)}}else await Qy$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let N=await sx$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:Xy$(W,N.mtime,N.size)})}catch{}}}}catch{}}function Yy$($,Z){let Q=o($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,N=$y$(Q);await _76(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await Qy$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=u61(Q,G.key),W=await sx$(J);return{contentType:A81(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Xy$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ox$;return{url:rx$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ox$;return{url:rx$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(Y)=>{let G=Y,J=u61(Q,G.key);try{return await tx$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=u61(Q,K);try{await tx$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function l61($,Z,X){let Q=Yy$(Z,X),Y=new qW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let G=new iX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),tG(Y,G,$,"mcp:dev-assets")}async function Gy$($,Z,X,Q){let G=Yy$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var b76="./data/assets",ox$=3600,ex$,Jy$;var Wy$=B(()=>{M$();Jy();C8();Fl();iV();MX();Ej0();ex$=new U1;ex$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return l61($.req.raw,Z,Q)});Jy$=ex$});var Ky$={};N4(Ky$,{mountDevRoutes:()=>y76});function y76($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return l61(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Gy$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Jy$);let X=new U1;X.use("*",t3({mountPath:"/api/dev-assets"})),X.route("/",Lj0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Hy$=B(()=>{C8();O81();Ej0();Wy$()});import{sql as g76}from"kysely";import{randomUUID as Ny$}from"crypto";import{z as h76}from"zod";async function c76($){let Z=new Date().toISOString(),X=Ny$(),Q=u4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Ny$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await g76`SELECT
|
|
2740
2740
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as L,b as R,j as r}from"./index-CHUBswRT.js";import{I as A}from"./input-jisO1Vid.js";import{L as I}from"./label-Bpru1Fk3.js";import{S as z,a as J,b as O,c as V,d as $}from"./select-B0XGDBgm.js";import{T as D}from"./textarea-BOvhX53j.js";import{R as M,T as U,U as W,J as q,W as G,$ as H}from"./index-BsBWN6uA.js";import{s as F}from"./primitives-nSff_8-g.js";import{u as Q}from"./use-autosave-CtaXqso4.js";import"./tooltip-Ojbmo0_Z.js";import"./Check-5mtf2-6K.js";import"./ChevronDown-BQmgN5kG.js";import"./ChevronUp-BPOJ4w7-.js";import"./ArrowUp-CUcFqEF-.js";import"./chat-context-BZKendXw.js";import"./tab-id-K8HXXexi.js";import"./dialog-BWSheT4A.js";import"./X-CLDwnYt1.js";import"./Copy01-JnjARK76.js";import"./hooks-sUnYWZ_1.js";import"./use-mcp-client-Br8rqOVT.js";import"./auth-DxTGZLCD.js";import"./decopilot-sse-pool-CsD9IFGE.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-DcG1NT1B.js";import"./use-ai-providers-Dvs8D9Ix.js";import"./studio-tools-CpdJSCXB.js";import"./use-decopilot-events-YmSBI1WH.js";import"./use-organization-settings-CyLyZUIV.js";import"./automation-runs-BFm_u4Q4.js";import"./agent-icon-Ch08ZcX4.js";import"./AlertCircle-BZa7RLag.js";import"./Tool01-BIxbvnNf.js";import"./ArrowLeft-CuTDqEBV.js";import"./Tool02-BfrmkKYl.js";import"./XCircle-BDRZIvTH.js";import"./ArrowUpRight-CskjaNaG.js";import"./TrendUp01-Dwh-3-Y4.js";import"./ZapSquare-CrMssKKk.js";import"./Users03-Df4iDfc_.js";import"./CheckCircle-DHndlkqI.js";import"./ChevronRight-CHavPPlp.js";import"./DotsVertical-DWN0CExK.js";import"./Stars02-C5x_Gxkb.js";import"./CpuChip01-5ufyvRyO.js";import"./CreditCard01-pCJ6deuK.js";import"./Globe01-BTPId_8Z.js";import"./Settings02-DDP4O0Cg.js";import"./Eye-DHqWnvyC.js";import"./FilterLines-Cdv4b7oN.js";import"./Share07-DXSkeNQ0.js";import"./Star01-BtEtd3G2.js";import"./Globe04-80C2-0pT.js";import"./SwitchHorizontal01-DesBwAGO.js";import"./HardDrive-CnxgzLM1.js";import"./Key01-BEi2zD1l.js";import"./LayoutLeft-CjDycY_6.js";import"./LinkExternal01-v4cK8Hvg.js";import"./LogOut01-BA1KOwky.js";import"./Monitor01-huXmvPSR.js";import"./Sun-CWz_ZHWE.js";import"./Palette-CmKkccfC.js";import"./Play-B4rtrgnG.js";import"./Plus-CZ9chxtQ.js";import"./SearchLg-C0WO2pgS.js";import"./SearchMd-DiYJAS_s.js";import"./Shield01-B-gsKN2p.js";import"./Stars01-BXDc__57.js";import"./Trash01-Bj-y-g6k.js";import"./Upload01-CpTz0wII.js";import"./User01-CoV9PEEx.js";import"./Users01-XiI-pMAg.js";import"./XClose-BW3VRoUL.js";import"./Zap-ql6JzgF3.js";import"./useInfiniteQuery-bSPHZoi3.js";import"./use-infinite-scroll-DliG_tLC.js";import"./use-connection-6zPneDTd.js";import"./card-DtOCbdm3.js";import"./sidebar-Dzp4QT-i.js";import"./use-mobile-Dx8h_T-f.js";import"./table-DUAnivu4.js";import"./empty-state-C1qwHMHt.js";import"./use-members-t8fZ41d7.js";import"./use-org-auth-client-DfCdT6sB.js";import"./use-clock-tick-BK-trw7a.js";import"./use-automations-B07s8dHe.js";import"./useSuspenseInfiniteQuery-D8Aoasic.js";import"./avatar-CLQxOd7w.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-cGszSFB5.js";import"./monaco-editor-Cb7e2m1n.js";import"./spinner-D9CX9d5L.js";import"./index-DE7VZwOV.js";import"./shell-layout-DRjinrfN.js";import"./required-auth-layout-D-pIxglz.js";import"./use-org-sso-C0oVZKz1.js";import"./integration-icon-mbwK8iV2.js";import"./use-navigate-to-agent-Cx3maI8h.js";import"./reusable-new-chat-CouMjkYR.js";import"./AreaChart-BLTaGxhs.js";import"./form-DG2E7ScW.js";import"./file-type-icon-go61WhXq.js";import"./drawer-Bk4BkIVJ.js";import"./collection-search-CFYIAxV6.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-DuXRMFcG.js";import"./toggle-group-Cr63fJGx.js";import"./use-deco-credits-B26EuXjO.js";import"./popover-BDnU5HqY.js";import"./alert-dialog-CLvEaah7.js";import"./toolbar-DfDfS-I-.js";import"./skeleton-CoiU151n.js";import"./github-repo-picker-CDSse3SQ.js";import"./use-debounced-value-DI6iP-Hy.js";import"./authenticate-and-persist-oauth-yvIceozb.js";import"./mcp-oauth-ClQB2yZ4.js";import"./use-mcp-tools-BrZk4LKP.js";import"./extract-connection-data--rDL-rY9.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-C2HwF4Ce.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-CA3V0yVe.js";import"./use-registry-connections-CGQOlUDE.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-cQbD0-_X.js";import"./collection-tabs-Bpo5zBeb.js";import"./badge-DjDfC8we.js";import"./use-open-billing-url-BaYQgvnq.js";import"./select-model-BQD-sjoN.js";import"./checkbox-eEsCoi1A.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-DsGS_acj.js";import"./cards-BFkdj8Bj.js";import"./dropdown-menu-LA2EuwJV.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-CdSRIw8s.js";import"./use-capability-D-cor-cv.js";import"./pt-BR-CLy76QW2.js";import"./switch-DJUp0sUF.js";import"./use-debounced-autosave-CQ6zEpK_.js";import"./index-CrSC-mbr.js";import"./search-input-CLsZ1a5E.js";import"./index-D-4pbGmC.js";import"./use-secrets-CRQ3D3UT.js";import"./self-tool-result-CHaujVnO.js";import"./use-tags-BYXFRZWg.js";import"./get-initials-D-f_fDFw.js";import"./command-DrE_xJ0Y.js";import"./index-B0iw_VPL.js";import"./use-file-configs-BlZRQU72.js";import"./automation-list-row-DufVfjuM.js";const X={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},Y={authors:"sandbox.recordEditor.titleAuthor"};function Wr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=R(),P=M(h);let b;t[0]!==w||t[1]!==K||t[2]!==P||t[3]!==h?(b={orgSlug:K,virtualMcpId:h,branch:w,packagePath:P},t[0]=w,t[1]=K,t[2]=P,t[3]=h,t[4]=b):b=t[4];const p=U(b);let k;t[5]!==f||t[6]!==a?(k=W(f,a),t[5]=f,t[6]=a,t[7]=k):k=t[7];const B=k;let v;t[8]!==g||t[9]!==a||t[10]!==p?(v=l=>{p.mutate({blockKey:g,data:G(g,a,l)})},t[8]=g,t[9]=a,t[10]=p,t[11]=v):v=t[11];const[e,S]=Q(B,v);let j;t[12]!==e||t[13]!==S?(j=(l,o)=>S({...e,[l]:o}),t[12]=e,t[13]=S,t[14]=j):j=t[14];const s=j,T=Y[a];let n;t[15]!==i||t[16]!==T?(n=i(T),t[15]=i,t[16]=T,t[17]=n):n=t[17];let c;t[18]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[18]=n,t[19]=c):c=t[19];let d;t[20]!==p.isError||t[21]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[20]=p.isError,t[21]=p.isPending,t[22]=d):d=t[22];let y;t[23]!==c||t[24]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[23]=c,t[24]=d,t[25]=y):y=t[25];const N=X[a];let x;if(t[26]!==e||t[27]!==s||t[28]!==i||t[29]!==N){let l;t[31]!==e||t[32]!==s||t[33]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(z,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(J,{id:o.key,className:"h-10 w-full",children:r.jsx(O,{placeholder:i(o.labelKey)})}),r.jsx(V,{children:(o.options??[]).map(m=>r.jsx($,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:F(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[31]=e,t[32]=s,t[33]=i,t[34]=l):l=t[34],x=N.map(l),t[26]=e,t[27]=s,t[28]=i,t[29]=N,t[30]=x}else x=t[30];let u;t[35]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[35]=x,t[36]=u):u=t[36];let E;return t[37]!==y||t[38]!==u?(E=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[37]=y,t[38]=u,t[39]=E):E=t[39],E}export{Wr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-Cj1l_q8m.js","assets/index-CHUBswRT.js","assets/index-_zaWhzWP.css","assets/Tool02-BfrmkKYl.js","assets/CheckCircle-DHndlkqI.js","assets/Settings02-DDP4O0Cg.js","assets/use-mcp-client-Br8rqOVT.js","assets/auth-DxTGZLCD.js","assets/useInfiniteQuery-bSPHZoi3.js","assets/use-infinite-scroll-DliG_tLC.js","assets/studio-tools-CpdJSCXB.js","assets/badge-DjDfC8we.js","assets/input-jisO1Vid.js","assets/dropdown-menu-LA2EuwJV.js","assets/Check-5mtf2-6K.js","assets/ChevronRight-CHavPPlp.js","assets/DotsVertical-DWN0CExK.js","assets/table-DUAnivu4.js","assets/toggle-group-Cr63fJGx.js","assets/use-view-mode-BCwfV7S_.js","assets/use-mobile-Dx8h_T-f.js","assets/FilterLines-Cdv4b7oN.js","assets/Globe01-BTPId_8Z.js","assets/SearchMd-DiYJAS_s.js","assets/dialog-BWSheT4A.js","assets/X-CLDwnYt1.js","assets/AlertCircle-BZa7RLag.js","assets/Upload01-CpTz0wII.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-CLvEaah7.js","assets/card-DtOCbdm3.js","assets/Trash01-Bj-y-g6k.js","assets/label-Bpru1Fk3.js","assets/select-B0XGDBgm.js","assets/tooltip-Ojbmo0_Z.js","assets/ChevronDown-BQmgN5kG.js","assets/ChevronUp-BPOJ4w7-.js","assets/switch-DJUp0sUF.js","assets/textarea-BOvhX53j.js","assets/ArrowLeft-CuTDqEBV.js","assets/XCircle-BDRZIvTH.js","assets/checkbox-eEsCoi1A.js","assets/Eye-DHqWnvyC.js","assets/LinkExternal01-v4cK8Hvg.js","assets/use-copy-cGszSFB5.js","assets/Copy01-JnjARK76.js","assets/Key01-BEi2zD1l.js","assets/Plus-CZ9chxtQ.js","assets/mcp-oauth-ClQB2yZ4.js","assets/Play-B4rtrgnG.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,aG as o}from"./index-CHUBswRT.js";import{R as m}from"./require-capability-ZgTB05Wz.js";import"./use-capability-D-cor-cv.js";import"./access-gate-CleWgA1k.js";import"./capability-load-error-Ca6hySS5.js";const n=s.lazy(()=>o(()=>import("./registry-layout-Cj1l_q8m.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(n,{})})}),r[0]=t):t=r[0],t}export{f as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-Cj1l_q8m.js","assets/index-CHUBswRT.js","assets/index-_zaWhzWP.css","assets/Tool02-BfrmkKYl.js","assets/CheckCircle-DHndlkqI.js","assets/Settings02-DDP4O0Cg.js","assets/use-mcp-client-Br8rqOVT.js","assets/auth-DxTGZLCD.js","assets/useInfiniteQuery-bSPHZoi3.js","assets/use-infinite-scroll-DliG_tLC.js","assets/studio-tools-CpdJSCXB.js","assets/badge-DjDfC8we.js","assets/input-jisO1Vid.js","assets/dropdown-menu-LA2EuwJV.js","assets/Check-5mtf2-6K.js","assets/ChevronRight-CHavPPlp.js","assets/DotsVertical-DWN0CExK.js","assets/table-DUAnivu4.js","assets/toggle-group-Cr63fJGx.js","assets/use-view-mode-BCwfV7S_.js","assets/use-mobile-Dx8h_T-f.js","assets/FilterLines-Cdv4b7oN.js","assets/Globe01-BTPId_8Z.js","assets/SearchMd-DiYJAS_s.js","assets/dialog-BWSheT4A.js","assets/X-CLDwnYt1.js","assets/AlertCircle-BZa7RLag.js","assets/Upload01-CpTz0wII.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-CLvEaah7.js","assets/card-DtOCbdm3.js","assets/Trash01-Bj-y-g6k.js","assets/label-Bpru1Fk3.js","assets/select-B0XGDBgm.js","assets/tooltip-Ojbmo0_Z.js","assets/ChevronDown-BQmgN5kG.js","assets/ChevronUp-BPOJ4w7-.js","assets/switch-DJUp0sUF.js","assets/textarea-BOvhX53j.js","assets/ArrowLeft-CuTDqEBV.js","assets/XCircle-BDRZIvTH.js","assets/checkbox-eEsCoi1A.js","assets/Eye-DHqWnvyC.js","assets/LinkExternal01-v4cK8Hvg.js","assets/use-copy-cGszSFB5.js","assets/Copy01-JnjARK76.js","assets/Key01-BEi2zD1l.js","assets/Plus-CZ9chxtQ.js","assets/mcp-oauth-ClQB2yZ4.js","assets/Play-B4rtrgnG.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as m,d as n,f as c,j as t,k as f,r as l,aG as p}from"./index-CHUBswRT.js";import{R as u}from"./require-capability-ZgTB05Wz.js";import"./use-capability-D-cor-cv.js";import"./access-gate-CleWgA1k.js";import"./capability-load-error-Ca6hySS5.js";const g=l.lazy(()=>p(()=>import("./registry-layout-Cj1l_q8m.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49])));function j(){const e=m.c(5),i=n();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=c(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./use-infinite-scroll-DliG_tLC.js";import{e4 as i}from"./index-CHUBswRT.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-DliG_tLC.js";import{e4 as u,b2 as n}from"./index-CHUBswRT.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};
|