decocms 4.427.1 → 4.427.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-EXoit0VR.js → AlertCircle-_ysSKvWK.js} +1 -1
- package/dist/client/assets/{AreaChart-C_bMPVRT.js → AreaChart-D1rpxsQn.js} +1 -1
- package/dist/client/assets/{ArrowLeft-CZl4IG9d.js → ArrowLeft-BtkoJaRw.js} +1 -1
- package/dist/client/assets/{ArrowRight-ynx7Kk3Y.js → ArrowRight-Drnoafqd.js} +1 -1
- package/dist/client/assets/{ArrowUp-C967LTO3.js → ArrowUp-DlghQnFg.js} +1 -1
- package/dist/client/assets/{CartesianChart-9y--2ln6.js → CartesianChart-BddQ8XWd.js} +1 -1
- package/dist/client/assets/{Check-DYU0cqH0.js → Check-BpkyZ-0B.js} +1 -1
- package/dist/client/assets/{CheckCircle-DaRFB58k.js → CheckCircle-D2JcHult.js} +1 -1
- package/dist/client/assets/{ChevronUp-1BtsnnGR.js → ChevronUp-CPVeLGjP.js} +1 -1
- package/dist/client/assets/{Copy01-7axZOkp2.js → Copy01-D_qB-aWF.js} +1 -1
- package/dist/client/assets/{CreditCard01-DLskf0lZ.js → CreditCard01-CED-CBbW.js} +1 -1
- package/dist/client/assets/{DotsVertical-R7Lhs1jB.js → DotsVertical-O4vKpzjV.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-DiRacoR7.js → ErrorBarContext-CJvUvYre.js} +1 -1
- package/dist/client/assets/{Image01-BzYK7BAk.js → Image01-D3akayY_.js} +1 -1
- package/dist/client/assets/{Key01-CuXQeehV.js → Key01-HC-Dxx__.js} +1 -1
- package/dist/client/assets/{Line-SqNbS1ac.js → Line-CC3huG_H.js} +1 -1
- package/dist/client/assets/{Link01-Ccb6VRjZ.js → Link01-DR9mffi6.js} +1 -1
- package/dist/client/assets/{LinkExternal01-C1vI2I8q.js → LinkExternal01-B8H4PJQf.js} +1 -1
- package/dist/client/assets/{Monitor01-C-XDlS46.js → Monitor01-Bc38jFCe.js} +1 -1
- package/dist/client/assets/{Palette-DVtaHs6g.js → Palette-DEcbD8HU.js} +1 -1
- package/dist/client/assets/{Plus-B3NzzZDC.js → Plus-CFlYG0wj.js} +1 -1
- package/dist/client/assets/{SearchMd-CfYmU1q5.js → SearchMd-DJsE98p-.js} +1 -1
- package/dist/client/assets/{Sector-CvwaHUom.js → Sector-Dtf1tyRV.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-7RPyjKc9.js → ShoppingBag01-FR_PKM_f.js} +1 -1
- package/dist/client/assets/{Sun-BpfGbo0d.js → Sun-DMfLEgmQ.js} +1 -1
- package/dist/client/assets/{Tool01-D5XZ3j_h.js → Tool01-DkdAo9sn.js} +1 -1
- package/dist/client/assets/{Trash01-n9X6BTAG.js → Trash01-Flur6WBS.js} +1 -1
- package/dist/client/assets/{Upload01-B-kPkCX8.js → Upload01-fnfbe6if.js} +1 -1
- package/dist/client/assets/{User01-BOdIl4BK.js → User01-8jUmBf6q.js} +1 -1
- package/dist/client/assets/{UserSquare-BhfPuhhW.js → UserSquare-B1gLCUOC.js} +1 -1
- package/dist/client/assets/{Users01-B3tJxARW.js → Users01-B4oiyRxp.js} +1 -1
- package/dist/client/assets/{X-ZnDhoeTC.js → X-BhmLL9Bh.js} +1 -1
- package/dist/client/assets/{XAxis-DbgIsSzD.js → XAxis-BUMG3rkR.js} +1 -1
- package/dist/client/assets/{XClose-m1oHe8Ei.js → XClose-BVN9dcVT.js} +1 -1
- package/dist/client/assets/{ZoomOut-C2mSV77i.js → ZoomOut-BjO3sbEw.js} +1 -1
- package/dist/client/assets/{access-gate-CJ1aadXH.js → access-gate-7scvPq-z.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-Dd1NdT62.js → add-connection-dialog-DIbZ_GxT.js} +1 -1
- package/dist/client/assets/{agent-analytics-C1M3pul5.js → agent-analytics-IkERIufs.js} +1 -1
- package/dist/client/assets/agent-app-yBUn0Yit.js +1 -0
- package/dist/client/assets/{agent-assets-R0aZs03Y.js → agent-assets-BZ9oU56a.js} +1 -1
- package/dist/client/assets/{agent-automation-Cv2be-jU.js → agent-automation-C1gjwEu-.js} +1 -1
- package/dist/client/assets/{agent-automations-BJ77uqJc.js → agent-automations-BY5u3fk1.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-mhx8i2Pm.js → agent-connect-sources-WcuhFlun.js} +1 -1
- package/dist/client/assets/agent-deck-U8S7jltp.js +1 -0
- package/dist/client/assets/{agent-e2e-h6QzzSvm.js → agent-e2e-iDsLZWWe.js} +1 -1
- package/dist/client/assets/{agent-experiments-CJjCOEQC.js → agent-experiments-Dm92lP8X.js} +1 -1
- package/dist/client/assets/{agent-file-BkCe4TOR.js → agent-file-CNX-gfHY.js} +1 -1
- package/dist/client/assets/{agent-git-6KcQ_8Ov.js → agent-git-Bb63plHK.js} +1 -1
- package/dist/client/assets/{agent-hosting-Df_migul.js → agent-hosting-C3thCzve.js} +1 -1
- package/dist/client/assets/{agent-icon-gqPHPB4Y.js → agent-icon-CuJ9_YaA.js} +1 -1
- package/dist/client/assets/agent-library-CRWHCXaA.js +1 -0
- package/dist/client/assets/agent-library-file-CrtclsT0.js +1 -0
- package/dist/client/assets/{agent-monitor-CcRDsJeM.js → agent-monitor-BB4RT0sv.js} +1 -1
- package/dist/client/assets/{agent-overview-D4dnuOG2.js → agent-overview-m1pgvSB6.js} +1 -1
- package/dist/client/assets/agent-settings-Dfg6Agpc.js +1 -0
- package/dist/client/assets/{agent-site-editor-C69zndsa.js → agent-site-editor-B_4h6Eub.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-DwJZteHm.js +2 -0
- package/dist/client/assets/agent-site-editor-content-Bo4Ss9Xo.js +9 -0
- package/dist/client/assets/{agent-site-editor-preview-MLDK4Pzv.js → agent-site-editor-preview-CH365WrH.js} +3 -3
- package/dist/client/assets/agent-view-Bk0Bktlz.js +1 -0
- package/dist/client/assets/{agent-view-guard-DZbz_n2Q.js → agent-view-guard-CODhtM2X.js} +1 -1
- package/dist/client/assets/{agents-list-D6YAFby5.js → agents-list-BB_iS2CT.js} +1 -1
- package/dist/client/assets/{ai-providers-DCmScdVt.js → ai-providers-BJeGolOR.js} +1 -1
- package/dist/client/assets/{alert-CdtALc31.js → alert-DS-i7ox5.js} +1 -1
- package/dist/client/assets/{alert-dialog-BZKVH7PJ.js → alert-dialog-BgzbqkCW.js} +1 -1
- package/dist/client/assets/{analytics-sections-CeL8_P9_.js → analytics-sections-BA2nufQ_.js} +1 -1
- package/dist/client/assets/{api-keys-DhDWG-K_.js → api-keys-Cag-8fol.js} +1 -1
- package/dist/client/assets/api-keys-u8rfb0kx.js +1 -0
- package/dist/client/assets/{app-editor-DG811_hl.js → app-editor-CsstrQm6.js} +1 -1
- package/dist/client/assets/{asset-utils-3VwXlDbZ.js → asset-utils-DZ0zYRY5.js} +1 -1
- package/dist/client/assets/{auth-DGx4b0iv.js → auth-DY7FBN1g.js} +1 -1
- package/dist/client/assets/{auth-catchall-DJs4mXvg.js → auth-catchall-6usu6MRe.js} +1 -1
- package/dist/client/assets/{auth-entry-BFw3mx8g.js → auth-entry-CXZbqGSU.js} +1 -1
- package/dist/client/assets/{auth-split-layout-B1NBTur4.js → auth-split-layout-B3wm_DRp.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-8lXocrhm.js → authenticate-and-persist-oauth-CV-r6wcD.js} +1 -1
- package/dist/client/assets/{automation-list-row-D8UlvqQe.js → automation-list-row-CyCEgWej.js} +1 -1
- package/dist/client/assets/{automation-runs-B5sxn_2J.js → automation-runs-CfE2i0tA.js} +1 -1
- package/dist/client/assets/{automations-CjbLaOH7.js → automations-BlqaBzu-.js} +1 -1
- package/dist/client/assets/{autosend-DvQ5TJDu.js → autosend-BCPrXgh0.js} +1 -1
- package/dist/client/assets/{avatar-DnOjLJQx.js → avatar-D-q-AoBB.js} +1 -1
- package/dist/client/assets/{badge-D50CHyIl.js → badge-DyOOSHoR.js} +1 -1
- package/dist/client/assets/{block-document-D9pt2Ka5.js → block-document-BqnF8eIy.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-BiG8Gllu.js → blocks-preview-workspace-context-tQcJ3kXx.js} +1 -1
- package/dist/client/assets/{buckets-Dnkrp_M7.js → buckets-ELzZ22lc.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-CtdxxlGK.js → build-improve-prompt-doc-BKo_VrD0.js} +1 -1
- package/dist/client/assets/{calendar-nkvEx-sQ.js → calendar-DgXummCv.js} +1 -1
- package/dist/client/assets/{capability-load-error-DRQym684.js → capability-load-error-CYG5dD7c.js} +1 -1
- package/dist/client/assets/{category-editor-1_jYv5xI.js → category-editor-BjlsZMl0.js} +1 -1
- package/dist/client/assets/{chart-D1jYdnVp.js → chart-BHhhWFuL.js} +1 -1
- package/dist/client/assets/{chat-context-cBuev8Ym.js → chat-context-DccZHdvO.js} +1 -1
- package/dist/client/assets/{chat-draft-cS46Fo-_.js → chat-draft-DT_laLoL.js} +1 -1
- package/dist/client/assets/{checkbox-K92GWElu.js → checkbox-aQ9S-dOl.js} +1 -1
- package/dist/client/assets/{choose-editor-LQyk1k0G.js → choose-editor-BTjQioID.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-373KO6yw.js → claim-phase-copy-hRzsLwRO.js} +1 -1
- package/dist/client/assets/{cli-auth-success-ncM1s5lW.js → cli-auth-success-DB3d7d_3.js} +1 -1
- package/dist/client/assets/{client-icons-C6THH_Yh.js → client-icons-Ddzb5IEw.js} +1 -1
- package/dist/client/assets/{collapsible-kUqPeJPO.js → collapsible-B_EN-JWy.js} +1 -1
- package/dist/client/assets/{collection-detail-DjTMOQAo.js → collection-detail-wadhmYPm.js} +1 -1
- package/dist/client/assets/{collection-display-button-DJiG9gWn.js → collection-display-button-B6N-e0-x.js} +1 -1
- package/dist/client/assets/{collection-search-BDDQTeDK.js → collection-search-CjB1LvvM.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-BilMYgeT.js → collection-table-wrapper-jerGwTNa.js} +1 -1
- package/dist/client/assets/{collection-tabs-c86gAdo-.js → collection-tabs-Dp_OWskq.js} +1 -1
- package/dist/client/assets/{combobox-9rh0tShj.js → combobox-JXmPRucg.js} +1 -1
- package/dist/client/assets/{command-Diwimg3L.js → command-BO5TZ0QF.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-BP2FezUw.js → companion-mcps-section-CKJFeAxE.js} +1 -1
- package/dist/client/assets/{config-rIOLq5bl.js → config-DT05fB-w.js} +1 -1
- package/dist/client/assets/{connect-layout-BNYr_I5D.js → connect-layout-MkBnX60Y.js} +1 -1
- package/dist/client/assets/{connect-CReuPFPQ.js → connect-olGd-QJr.js} +1 -1
- package/dist/client/assets/{connection-DogH4gFE.js → connection-BaixLnB8.js} +1 -1
- package/dist/client/assets/{connection-card-BLmZ5J-R.js → connection-card-jeWcU7MB.js} +1 -1
- package/dist/client/assets/{connection-detail-CPeMFkEy.js → connection-detail-DK6FYnSz.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BuFWC6YW.js → connection-form-helpers-jS1Ia4nM.js} +1 -1
- package/dist/client/assets/{connections-Dnzok0MB.js → connections-B7YyFQYD.js} +1 -1
- package/dist/client/assets/{context-DFcf_jBJ.js → context-CDEBeQGD.js} +1 -1
- package/dist/client/assets/{context-menu-knbv1Lp5.js → context-menu-d6bT9cos.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-DskPNA3o.js → create-organization-dialog-BEpBbnD_.js} +1 -1
- package/dist/client/assets/{daily-pulse-BE4whbxW.js → daily-pulse-D9x_90B5.js} +1 -1
- package/dist/client/assets/{decopilot-BGYYAJaC.js → decopilot-D3sqjPEu.js} +1 -1
- package/dist/client/assets/{dialog-BfsKopkQ.js → dialog-Duh5265G.js} +1 -1
- package/dist/client/assets/{discover-CdjTszEA.js → discover-D2MKgiBc.js} +1 -1
- package/dist/client/assets/{domain-settings-DqAhA27H.js → domain-settings-B4cmRFyu.js} +1 -1
- package/dist/client/assets/{download-app-dialog-YvteZiq_.js → download-app-dialog-BkZxgsHD.js} +1 -1
- package/dist/client/assets/{drawer-N4Q9uPuE.js → drawer-D7qd84E0.js} +1 -1
- package/dist/client/assets/{editor-BtXZHuG_.js → editor-edXz5bvb.js} +1 -1
- package/dist/client/assets/{empty-state-DlVX-_8Z.js → empty-state-CQZe3nns.js} +1 -1
- package/dist/client/assets/{empty-state-DrGS4sd9.js → empty-state-Wc5vf2Jk.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BD6fCKZu.js → extract-connection-data-FSRndusd.js} +1 -1
- package/dist/client/assets/{feature-gate-DVjHrkyT.js → feature-gate-C4lR8tRK.js} +1 -1
- package/dist/client/assets/{feature-paywall-D-QX-371.js → feature-paywall-Dj75fCqa.js} +1 -1
- package/dist/client/assets/{file-explorer-CgDO5HIu.js → file-explorer-RmWusXAA.js} +1 -1
- package/dist/client/assets/{file-preview-B2Cuzcwj.js → file-preview-7kPGHJzq.js} +1 -1
- package/dist/client/assets/{file-share-button-BC3jgYqR.js → file-share-button-gy58ZJfV.js} +1 -1
- package/dist/client/assets/{file-type-icon-B3qTAR6-.js → file-type-icon-ClxiDGyr.js} +1 -1
- package/dist/client/assets/flat-project-C-osdDxz.js +1 -0
- package/dist/client/assets/{folder-icon-p36chBGp.js → folder-icon-UuJd8mlI.js} +1 -1
- package/dist/client/assets/{form-DUIAtLX6.js → form-DH1wyGKo.js} +1 -1
- package/dist/client/assets/{gateway-client-C26GEwb-.js → gateway-client-HUbB87Ri.js} +1 -1
- package/dist/client/assets/{general-BhxiNhxz.js → general-QPdlUkGd.js} +1 -1
- package/dist/client/assets/{home-ByKBg0At.js → home-DrVLcrJ-.js} +1 -1
- package/dist/client/assets/{icon-button-DgiQbLhR.js → icon-button-BtITvm8o.js} +1 -1
- package/dist/client/assets/{index-CqWakSDG.js → index-0XLo4bxs.js} +1 -1
- package/dist/client/assets/{index-q3kxufaz.js → index-BBBUcpIo.js} +1 -1
- package/dist/client/assets/{index-D6qHJ1Mu.js → index-BaOPetje.js} +1 -1
- package/dist/client/assets/{index-DBkCcw2p.js → index-Bn1cGzw0.js} +3 -3
- package/dist/client/assets/{index-CzCQiH3M.js → index-Bn6S8v14.js} +1 -1
- package/dist/client/assets/{index-D7vpkNpx.js → index-BpT76SSu.js} +2 -2
- package/dist/client/assets/{index-BixUKOGI.js → index-C1JJS7XE.js} +1 -1
- package/dist/client/assets/{index-C7oBnaWy.js → index-CCcBFOPt.js} +1 -1
- package/dist/client/assets/{index-BAfP_v3T.js → index-CDf64qDx.js} +1 -1
- package/dist/client/assets/{index-DSWkpMw4.js → index-CIDUeMra.js} +1 -1
- package/dist/client/assets/{index-DahmuFQG.js → index-CM1smpHt.js} +1 -1
- package/dist/client/assets/{index-Sv7oqr-J.js → index-Cvr-5x1d.js} +1 -1
- package/dist/client/assets/{index-JwMOyEaf.js → index-CztSLYoM.js} +1 -1
- package/dist/client/assets/{index-CvdSY3Za.js → index-DDMISayf.js} +1 -1
- package/dist/client/assets/{index-aQJEduDK.js → index-DplRc-iX.js} +1 -1
- package/dist/client/assets/{index-redirect-raqG5gJd.js → index-redirect-BygbfhXL.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-Bwwsills.js → infiniteQueryObserver-DS1nVq0o.js} +1 -1
- package/dist/client/assets/{infra-billing-DKvobMRM.js → infra-billing-DRqZnco2.js} +1 -1
- package/dist/client/assets/{input-C56jDUs4.js → input-DFgx9Qp7.js} +1 -1
- package/dist/client/assets/{input-BnrLXT6a.js → input-KxloLQGC.js} +1 -1
- package/dist/client/assets/{input-CJC6IwE0.js → input-L58m8dXT.js} +3 -3
- package/dist/client/assets/{integration-icon-Bya4vY55.js → integration-icon-vqHbJjns.js} +1 -1
- package/dist/client/assets/{label-xqYZ8A4v.js → label-CDPK6kSb.js} +1 -1
- package/dist/client/assets/{last-preview-page-B8j4V9Bs.js → last-preview-page-BSD3q4T4.js} +1 -1
- package/dist/client/assets/{layout-D_VSjFUt.js → layout-Ddc0DwNj.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-BzSj6WDo.js → legacy-agents-deep-CeR-tdl8.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-v42wG9BH.js → legacy-main-redirect-Co5MQKpK.js} +1 -1
- package/dist/client/assets/library-CHXZhcjw.js +1 -0
- package/dist/client/assets/{library-tab-RHIAvHyD.js → library-tab-CX5i3sIy.js} +1 -1
- package/dist/client/assets/{login-CuxzQEZ4.js → login-Zz_WDEwT.js} +1 -1
- package/dist/client/assets/{markdown-FK75_ZkN.js → markdown-CgVkK6g1.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-IbOTFGMv.js → mcp-app-renderer-84Nx2JbB.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CZYvLNEt.js → mcp-oauth-fMhpwRvp.js} +1 -1
- package/dist/client/assets/{members-DJ9a4_N3.js → members-BwcYz-ke.js} +1 -1
- package/dist/client/assets/{message-templates-Cd0dj-Pp.js → message-templates-DWO1_DvS.js} +1 -1
- package/dist/client/assets/{mini-report-page-V1mdrgp5.js → mini-report-page-DzJZk90Y.js} +1 -1
- package/dist/client/assets/{mock-board-Vz08UAtJ.js → mock-board-BEMYT6vc.js} +1 -1
- package/dist/client/assets/{monaco-editor-BilOGHGJ.js → monaco-editor-RksN5MVY.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Dk5ADnxR.js → monitoring-stats-row-Dqj35gDG.js} +1 -1
- package/dist/client/assets/{multi-select-C5n5ZAXS.js → multi-select-DLz0-ea2.js} +1 -1
- package/dist/client/assets/mustache-abJezpCF.js +4 -0
- package/dist/client/assets/{new-project-dialog-BW0HFxjr.js → new-project-dialog-DQ9jkBfl.js} +1 -1
- package/dist/client/assets/{oauth-callback-x0OIjFyl.js → oauth-callback-2FfDNNyI.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CzgSkZHR.js → oauth-callback-ai-provider-CRu_th1G.js} +1 -1
- package/dist/client/assets/{onboarding-0vVgXvn-.js → onboarding-0f-znn7e.js} +1 -1
- package/dist/client/assets/{openai-conversation-DsDLD92E.js → openai-conversation-D5-mGHkG.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-CpDBKkjl.js → optimistic-project-sidebar-views-wKOxinwS.js} +1 -1
- package/dist/client/assets/{org-file-open-context-BxJKqWxk.js → org-file-open-context-Gqmg0Avz.js} +1 -1
- package/dist/client/assets/{organization-choice-Br4mWj-d.js → organization-choice-BrUBKbHO.js} +1 -1
- package/dist/client/assets/{orgs-YupE5ESY.js → orgs-CfibHnvI.js} +1 -1
- package/dist/client/assets/{page-seo-form-CsNdAvBW.js → page-seo-form-BopV5RXh.js} +1 -1
- package/dist/client/assets/{pair-Z3ooP1Cp.js → pair-CUMVLrR5.js} +1 -1
- package/dist/client/assets/{plan-ladder-D_-YxSTS.js → plan-ladder-B4a_lJD4.js} +1 -1
- package/dist/client/assets/{popover-EnACPYBz.js → popover-DQwZ7vTb.js} +1 -1
- package/dist/client/assets/{post-calendar-Cr05ocmR.js → post-calendar-_Seyq2p3.js} +1 -1
- package/dist/client/assets/{post-editor-ycqZEa3p.js → post-editor-CyVne7TY.js} +1 -1
- package/dist/client/assets/{preview-content-CjSvHCVo.js → preview-content-8s772kqA.js} +1 -1
- package/dist/client/assets/{preview-dialog-DRfno71Z.js → preview-dialog-QI3WSNrM.js} +1 -1
- package/dist/client/assets/{profile-D2-DU2Zj.js → profile-BYcITgqm.js} +1 -1
- package/dist/client/assets/{project-app-view-BjIguUrX.js → project-app-view-C1In9zm2.js} +1 -1
- package/dist/client/assets/{project-feed-RwQKrd0a.js → project-feed-B7lrI5fj.js} +1 -1
- package/dist/client/assets/{project-icon-O4-f50YH.js → project-icon-DuPQymst.js} +1 -1
- package/dist/client/assets/project-reports-twHSWr43.js +1 -0
- package/dist/client/assets/project-tasks-C1AcDLmQ.js +1 -0
- package/dist/client/assets/{projects-CjlRYyPN.js → projects-CUae8ABM.js} +1 -1
- package/dist/client/assets/{projects-empty-state-CljIvwqc.js → projects-empty-state-BEN4b1Gw.js} +1 -1
- package/dist/client/assets/{prompts-BGVQvv_D.js → prompts-Dg936dmQ.js} +1 -1
- package/dist/client/assets/record-editor-DvuHHhwf.js +1 -0
- package/dist/client/assets/{redirect-editor-Bc6ROjNS.js → redirect-editor-697pxB46.js} +1 -1
- package/dist/client/assets/reports-CIicrEqc.js +1 -0
- package/dist/client/assets/{reports-Cu8emHsO.js → reports-D46PYB9v.js} +1 -1
- package/dist/client/assets/{reports-onboarding-CHf3640a.js → reports-onboarding-WV2NUWQD.js} +1 -1
- package/dist/client/assets/{reports-tab-DvaWWU9z.js → reports-tab-x2RyZh7l.js} +2 -2
- package/dist/client/assets/{repositories-CmVzdb2j.js → repositories-SsnGre1x.js} +1 -1
- package/dist/client/assets/{repository-binding-BRzMyNd-.js → repository-binding-DvpOGS4u.js} +1 -1
- package/dist/client/assets/{repository-import-picker-Bd451_6b.js → repository-import-picker-CnhrjNVX.js} +1 -1
- package/dist/client/assets/{repository-picker-CKP58omn.js → repository-picker-3ozk3FCl.js} +1 -1
- package/dist/client/assets/{require-capability-Bt4l_oED.js → require-capability-Be38aIEO.js} +1 -1
- package/dist/client/assets/{required-auth-layout-wWodfoje.js → required-auth-layout-BGPZ6A74.js} +1 -1
- package/dist/client/assets/{reset-password-BHOI8J2a.js → reset-password-6R_Y76X2.js} +1 -1
- package/dist/client/assets/{resizable-BG66xZMy.js → resizable-DKFcq7b3.js} +1 -1
- package/dist/client/assets/{resolve-tab-icon-CRz1iFt2.js → resolve-tab-icon-UFWMZnrq.js} +1 -1
- package/dist/client/assets/{review-settings-BrDRatO9.js → review-settings-CQzZuSet.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-DNbbrI0X.js → rich-text-link-control-eaZolcn_.js} +1 -1
- package/dist/client/assets/{roles-Cu1_H0NB.js → roles-lxyvW2vm.js} +1 -1
- package/dist/client/assets/route-B7xh3vDY.js +1 -0
- package/dist/client/assets/{route-DjjBD4B_.js → route-BwRWM6-L.js} +1 -1
- package/dist/client/assets/{route-BV08AUVy.js → route-gQmfYzmW.js} +1 -1
- package/dist/client/assets/{runnable-block-editor-4cvnSVB2.js → runnable-block-editor-B2sRLczz.js} +4 -4
- package/dist/client/assets/{sandbox-lifecycle-context-NylSGOpD.js → sandbox-lifecycle-context-DTMY9J8N.js} +1 -1
- package/dist/client/assets/{schema-DjOOHE-s.js → schema-BDo4IA2a.js} +1 -1
- package/dist/client/assets/{scroll-area-CTvnPqyG.js → scroll-area-BRTy6JvT.js} +1 -1
- package/dist/client/assets/{search-input-Bwsoqqen.js → search-input-DZ11c6J4.js} +1 -1
- package/dist/client/assets/{search-toggle-CvwX3E9G.js → search-toggle-CWSiisjJ.js} +1 -1
- package/dist/client/assets/{secret-picker-BkVHiJ7f.js → secret-picker-Cdpe-RlS.js} +1 -1
- package/dist/client/assets/{secrets-DRI9y4rP.js → secrets-CdIBU6XA.js} +1 -1
- package/dist/client/assets/{sections-editor-HCb9ZA0Y.js → sections-editor-D-8gEq7-.js} +1 -1
- package/dist/client/assets/{select-B_NxxTsf.js → select-CtLVXMza.js} +1 -1
- package/dist/client/assets/{select-model-DD3ah335.js → select-model-C01rFfHc.js} +1 -1
- package/dist/client/assets/{seo-editor-CRe72EZZ.js → seo-editor-D-E5p7cg.js} +1 -1
- package/dist/client/assets/{separator-4npQ9YBU.js → separator-C1yhuPi7.js} +1 -1
- package/dist/client/assets/{settings-tab-D5m6mOZQ.js → settings-tab-zYSxtL1x.js} +1 -1
- package/dist/client/assets/{sheet-CUYh9oXG.js → sheet-wZQ7q9Ps.js} +1 -1
- package/dist/client/assets/{shell-layout-DGeKADCV.js → shell-layout-CTFIM5_v.js} +1 -1
- package/dist/client/assets/{skills-BDgMLzRq.js → skills-DLkIaSPg.js} +1 -1
- package/dist/client/assets/{sso-B7-jvO-E.js → sso-DKs0bc8Z.js} +1 -1
- package/dist/client/assets/{suggestion-Mi3-bwTS.js → suggestion-B9Mtom8T.js} +1 -1
- package/dist/client/assets/{switch-BEU_Kfwz.js → switch-CBRpr4z2.js} +1 -1
- package/dist/client/assets/{synced-repos-Cr2NbU3r.js → synced-repos-BJp526Ch.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph-BcA3-Sxg.js → tab-icon-glyph-am7JcMSb.js} +1 -1
- package/dist/client/assets/{table-B0XqrBUe.js → table-Bi2jWlr7.js} +1 -1
- package/dist/client/assets/{tabs-BGJNxvFQ.js → tabs-WLjWXXl5.js} +1 -1
- package/dist/client/assets/{task-board-vZO_MuJI.js → task-board-mxpT1Hok.js} +1 -1
- package/dist/client/assets/{task-route-CLqz_VFU.js → task-route-CHC2I4-H.js} +1 -1
- package/dist/client/assets/{task-status-BRjj4y_R.js → task-status-B-uCqioC.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-HJuOAOMS.js → taskboard-analytics-1r3-MsBb.js} +1 -1
- package/dist/client/assets/tasks-ugkD4n3L.js +1 -0
- package/dist/client/assets/{tasks-CeOm92QB.js → tasks-zqCRih2f.js} +1 -1
- package/dist/client/assets/{textarea-D867RzQ_.js → textarea-JA2MhbsA.js} +1 -1
- package/dist/client/assets/{thread-analytics-2Dive-nt.js → thread-analytics-Dkp2b8dX.js} +1 -1
- package/dist/client/assets/{thread-intent-Ca_Yoh38.js → thread-intent-BDP7My_k.js} +1 -1
- package/dist/client/assets/{thread-route-D_i9DoPp.js → thread-route-CzC4x4XM.js} +1 -1
- package/dist/client/assets/{thread-route-B1i-YF05.js → thread-route-DV8byzZC.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-EADJFqQW.js → thread-sheet-body-DpJBJdm5.js} +1 -1
- package/dist/client/assets/{toggle-group-BS9R2pLp.js → toggle-group-CIVwTuwo.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-BBSogeWq.js → toolbar-icon-button-Bl_VqRl4.js} +1 -1
- package/dist/client/assets/{tooltip-BLCC5qTC.js → tooltip-TrBJu4sI.js} +1 -1
- package/dist/client/assets/{track-C6v2T03V.js → track-CrELeDDn.js} +1 -1
- package/dist/client/assets/{types-SAm6Uxda.js → types-DS9_g4Mv.js} +1 -1
- package/dist/client/assets/{usage-stats-MjDYqSJs.js → usage-stats-Cv8X88zW.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CQYRYuSe.js → use-ai-providers-D9-JRcMw.js} +1 -1
- package/dist/client/assets/{use-automations-CiMe7TIO.js → use-automations-CJsHKuiX.js} +1 -1
- package/dist/client/assets/{use-autosave-B9zi_4mw.js → use-autosave-CxPQq7tb.js} +1 -1
- package/dist/client/assets/{use-chat-layout-state-DzjVmKrJ.js → use-chat-layout-state-CptyLydw.js} +1 -1
- package/dist/client/assets/{use-connect-companion-B2tqkA11.js → use-connect-companion-BMWGNuwq.js} +1 -1
- package/dist/client/assets/{use-connection-qMM8KOYF.js → use-connection-D6eYhOmh.js} +1 -1
- package/dist/client/assets/{use-copy-5OcecPZM.js → use-copy-BfrdA8Jv.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CdRnOQb_.js → use-create-virtual-mcp-iJmndnAo.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-CtFYi5Xr.js → use-date-fns-locale-B14lD27G.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Bzv6MvqP.js → use-debounced-autosave-B2-ENEOa.js} +1 -1
- package/dist/client/assets/{use-debounced-value-LHTQw9fR.js → use-debounced-value-D_h4A2wL.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BzzMQ_2r.js → use-deco-credits-BYYZSnFZ.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-HL-8aRpe.js → use-decopilot-events-ClI6aAAl.js} +1 -1
- package/dist/client/assets/{use-delete-connection-C1CcO6S7.js → use-delete-connection-DKBJN1u1.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-NuJANmL4.js → use-deployment-admin-BxdDPV2G.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-yydEgDBy.js → use-fast-preview-draft-url-BE14g6lq.js} +1 -1
- package/dist/client/assets/{use-file-configs-BKA73bkX.js → use-file-configs-CUiAaE82.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DFEtI2cR.js → use-infinite-scroll-z2QoBe4R.js} +1 -1
- package/dist/client/assets/{use-join-requests-hHJ8Odg-.js → use-join-requests-CVDnhpxj.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-CQfx46fl.js → use-main-panel-tabs-CyZM_Fcm.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-CvqvKA13.js → use-mcp-auth-status-BdDQJLAF.js} +1 -1
- package/dist/client/assets/{use-mcp-client-E0dYIETF.js → use-mcp-client-C--1Hv7z.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-BpDuk1qB.js → use-mcp-prompts-ITpbt1Wx.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-B3I9B-6A.js → use-mcp-tools-CvTrUnWa.js} +1 -1
- package/dist/client/assets/{use-members-DYYP9AGP.js → use-members-BTFxeUSf.js} +1 -1
- package/dist/client/assets/{use-mobile-BpF9Jrqb.js → use-mobile-CkpqLZNy.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-1dFtFdvX.js → use-navigate-to-agent-BdUWrPvv.js} +1 -1
- package/dist/client/assets/use-new-blocks-editor-DtYB58Q_.js +1 -0
- package/dist/client/assets/{use-open-billing-url-D1GZ4_kz.js → use-open-billing-url-By5xt9JG.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CcYiZinw.js → use-org-auth-client-yajsmptq.js} +1 -1
- package/dist/client/assets/{use-org-fs-B_tMae1z.js → use-org-fs-BG-Z_m1m.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-Cq4i78UD.js → use-org-repo-syncs-Bk__d0O0.js} +1 -1
- package/dist/client/assets/{use-org-sso-DFexOZO2.js → use-org-sso-BMv-GAvt.js} +1 -1
- package/dist/client/assets/{use-organization-roles-lJsbNWJG.js → use-organization-roles-CQ4eQ0vz.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DDTth-SD.js → use-organization-settings-9Jyjf4cz.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-CLA2TL_H.js → use-panel-navigate-BWz32Stv.js} +1 -1
- package/dist/client/assets/{use-project-scope-MJo-GqZk.js → use-project-scope-C9Qgyz7d.js} +1 -1
- package/dist/client/assets/{use-releases-DfL0ESL4.js → use-releases-Dz4Zi74s.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-DcBPVAWl.js → use-reports-diagnostic-CYAsUJFY.js} +1 -1
- package/dist/client/assets/{use-secrets-hVsAVNKD.js → use-secrets-DqhPZo66.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-DtD9BJ3-.js → use-section-preview-base-DOkZ3msR.js} +1 -1
- package/dist/client/assets/{use-session-runtime-DokzL7ga.js → use-session-runtime-PuyNc4II.js} +1 -1
- package/dist/client/assets/{use-tags-CJsqGsVY.js → use-tags-DZDHrDkJ.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-Bhqj7R5C.js → use-task-board-analytics-CfT7nZGG.js} +1 -1
- package/dist/client/assets/{use-task-board-events-BW8-hcYT.js → use-task-board-events-BeDonhy9.js} +1 -1
- package/dist/client/assets/{use-task-metadata-Cv3dpO4A.js → use-task-metadata-DqNmsTTS.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-C8krPyLX.js → use-thread-analytics-BXrR5k3i.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-DXZqkrT3.js → use-thread-outputs-Dc6p2yBb.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-CAsYVAxt.js +1 -0
- package/dist/client/assets/{useQueries-C6gZY9Lz.js → useQueries-DQeHFNTz.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DEfKUGwu.js +1 -0
- package/dist/client/assets/{users-P44rfcKH.js → users-DaIH9RC4.js} +1 -1
- package/dist/client/assets/{utils-D2Tojcb4.js → utils-D340Z5db.js} +1 -1
- package/dist/client/assets/{variant-calendar-itx6yk6j.js → variant-calendar-D-Bfjr5d.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-CXV1orkm.js → variant-matcher-override-Dqlw115A.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-XZYX59Z2.js → view-mode-toggle-nkKU6aZu.js} +1 -1
- package/dist/client/assets/{virtual-mcp-C0AibqX1.js → virtual-mcp-DzpwymBB.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/agent-app-BTae50zr.js +0 -1
- package/dist/client/assets/agent-deck-B9BsON3x.js +0 -1
- package/dist/client/assets/agent-library-1E1B-YuD.js +0 -1
- package/dist/client/assets/agent-library-file-B0kvJ8XK.js +0 -1
- package/dist/client/assets/agent-settings-MiIJ3psW.js +0 -1
- package/dist/client/assets/agent-site-editor-code-BJB6PnpC.js +0 -2
- package/dist/client/assets/agent-site-editor-content-DRrNlGyR.js +0 -9
- package/dist/client/assets/agent-view-BGeo99st.js +0 -1
- package/dist/client/assets/api-keys-DKl7tF-Y.js +0 -1
- package/dist/client/assets/flat-project-BdkQfyYz.js +0 -1
- package/dist/client/assets/library-BaH40Nyt.js +0 -1
- package/dist/client/assets/mustache-CaFC-fr2.js +0 -4
- package/dist/client/assets/project-reports-LL37eXqr.js +0 -1
- package/dist/client/assets/project-tasks-BU0Y5o9g.js +0 -1
- package/dist/client/assets/record-editor-UNeanzeO.js +0 -1
- package/dist/client/assets/reports-DSaFdFjP.js +0 -1
- package/dist/client/assets/route-BC0Xh1kq.js +0 -1
- package/dist/client/assets/tasks-BL4cH88s.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-GT4keNoz.js +0 -1
- package/dist/client/assets/useInfiniteQuery-BtvRekid.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Dc0JdGoj.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3731,7 +3731,7 @@ ${J.join(`
|
|
|
3731
3731
|
`)}`:X}function zt6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3732
3732
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var sQ8=200,Ft6=12,Nt6,Dt6=300,dC0=3;var MD1=D(()=>{Z7();a$();mC0();Nt6={aheadBy:0,behindBy:0,files:[]}});function At6($){if(!$||$.includes(".."))return!1;return Pt6.test($)}function eQ8($){return Tt6.includes($)}function ID1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!At6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function VD1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Pt6,Tt6;var $Y8=D(()=>{Pt6=/^[\w./@-]+$/;Tt6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function f60($,Z){let Q=$?.repository;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function QY8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new $z(k7);let J=await Cj($.storage,X,Y);if(J&&await UD($.storage,J)){let F=await zU($,J,{forceRefresh:!0}).catch((U)=>{throw new $z(U instanceof Error?U.message:k7)});await ZY8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new $z("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Fm({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:k7;throw new $z(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await AU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=eO$(F instanceof Error?F.message:String(F));throw U?new $z(N):F});await ZY8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function ZY8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Tp($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await YE(K,Rt6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Rt6=10485760,$z;var kD1=D(()=>{TW();bC0();F$0();qH0();g00();Z7();$z=class $z extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Mt6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!qt6.test(Z))throw Error(`Invalid branch name: ${$}`)}function py($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(It6)])}async function kt6($,Z){let Q=$.var.studioContext,Y=CU(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=zf(G?.metadata?.runtime);if(W)return W;let K=MR0(Z.virtualMcpMetadata),H=K==="cms"?await GD1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)U$0(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function St6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await gX($.var.studioContext)}catch{return null}}function ny($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Vp($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=f60(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=J0(Y);return Wm(Y,J.id,X)}function CD1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=DD$(Z);if(Y!==void 0)return $.json({error:Q},429,{...G9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof s6)return $.json({error:Q},409,G9);let X=IW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,G9)}return $.json({error:Q},502,G9)}async function SD1($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function GY8($){try{let Z=await Vp($),Q=await iC0(Z,$.get("vmClaim").branch);return $.json(Q,200,G9)}catch(Z){return CD1($,Z)}}function y60($,Z){let Y=(tC0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return tC0.set($,X),X.finally(()=>{if(tC0.get($)===X)tC0.delete($)}),Y}async function NQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,G9);let Y=Q?.runner??ny($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);if(B.status===404){try{await B.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",...G9}})}}let O=await B.text(),L=Q?.redactRepoDir?Ct6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...G9}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function Ct6($){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 oC0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function _t6($){return WY8.includes($)}var qt6,YY8=524288,XY8=65536,It6=1e4,JY8=2000,Vt6,tC0,G9,WY8,KY8=()=>{let $=new Z1;$.use("/:virtualMcpId/:branch/*",Vt6),$.post("/:virtualMcpId/:branch/write",(Q)=>NQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>NQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>NQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>NQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>NQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>NQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>NQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:py(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return NQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return NQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!_t6(Y))return Q.json({error:`step must be one of: ${WY8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await GD1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await St6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,G9);if(Y==="start"){let G=J0(Q.var.studioContext),W=Xd(X.virtualMcpMetadata);try{await AR0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return NQ(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return FO(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return JQ8(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return GY8(Q);return Z(Q)});let Z=(Q)=>NQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(JY8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return GY8(Q);return NQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(JY8)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await Vp(Q),G=await pC0(J,Y.branch,X.base);return Q.json(G,200,G9)}catch(X){return CD1(Q,X)}return NQ(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,G9);let Y=ny(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return y60(X,async()=>{try{await WD1(W,Y,X);let K=f60(J,G);if(K)await QY8(W,Y,X,K)}catch(K){if(K instanceof $z)return Q.json({error:K.message},403,G9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,G9)}return NQ(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return y60(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,G9);try{let G=await Vp(Q);return await aQ8(G,Y.branch,J),Q.json({ok:!0},200,G9)}catch(G){let W=IW(G)===409||G instanceof s6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,G9)}});return y60(Y.claimName,()=>NQ(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return y60(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await Vp(Q),H=W.base??await K.getDefaultBranch();return await nC0(K,Y.branch,H),Q.json({ok:!0},200,G9)}catch(W){return CD1(Q,W)}});let X=ny(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return y60(J,async()=>{try{await WD1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,G9)}return NQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",x5({maxSize:YY8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ny(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=FD1(F)&&N?[F,U]:X?await Promise.all([oC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),oC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Vp(Q);return Promise.all([iC0(w,Y.branch),pC0(w,Y.branch)])})();await oG(K,J0(K).id,"suggesting a commit message");let L=await FQ8(K,B,O);return Q.json(L,200,G9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,G9);return Q.json({error:F},502,G9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",x5({maxSize:YY8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ny(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=FD1(F)&&N?[F,U]:X?await Promise.all([oC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),oC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Vp(Q);return Promise.all([iC0(w,Y.branch),pC0(w,Y.branch)])})();await oG(K,J0(K).id,"judging whether a change needs review");let L=await NQ8(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,G9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,G9);return Q.json({error:F},502,G9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=ny(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return SD1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",x5({maxSize:XY8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=ny(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=ID1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=VD1(J,W.resolveType);return SD1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",x5({maxSize:XY8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let{runner:Y,claimName:X,virtualMcpMetadata:J}=Q.get("vmClaim"),G;try{G=Y?await Y.getPreviewUrl(X):Jd(J)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W;try{W=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!W||typeof W!=="object"||Array.isArray(W))return Q.json({error:"Invalid JSON body"},400);let K=ID1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!eQ8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=VD1(G,K.resolveType);return SD1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var HY8=D(()=>{J8();eW();Ap();JD1();Yd();QQ8();xW();Gd();YQ8();vW();JH();XQ8();GQ8();U71();H$0();BD1();BQ8();Z7();T5();MD1();$Y8();qR0();kD1();qt6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Vt6=vC0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=p0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=J0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{Mt6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=B10({orgId:X.id,virtualMcpId:J,branch:G}),H=await x91(Q,G),F=f91(H,Y),U=ZQ8({userId:F,projectRef:K}),N=W.metadata??null,B=await kt6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await gX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});tC0=new Map;G9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};WY8=["clone","install","start"]});function FY8($,Z,Q){let Y=_D1.get($);if(!Y)Y={pending:null,running:!1},_D1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)bt6($,Y);return J}async function bt6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await xt6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)_D1.delete($)}}async function xt6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Ip(Z,Q),W=await Z.listDecofileEntries(G,Y),K=TD1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=RD1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3733
3733
|
`;await nQ8(Z.repo,L);let w=O[0]??`${cC0(Y)}/${LD1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of RD1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await tQ8(Z,F.values(),X),{decofile:B,skipped:O}=k60(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:GH(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:ft6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof s6)||J>=vt6-1)throw N;await z$(U7(2000,200,J,2,0.5))}}}function ft6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return D51(Y,$.deps.coAuthor)}var vt6=3,_D1;var UY8=D(()=>{pA0();fC0();i4();a$();Z7();mC0();_D1=new Map});import{createHmac as NY8,randomBytes as yt6,timingSafeEqual as gt6}from"crypto";function BY8(){if(rC0)return rC0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return rC0=$?Buffer.from($):yt6(32),rC0}function vD1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+ht6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=NY8("sha256",BY8()).update(Y).digest("base64url");return`${Y}.${X}`}function DY8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(NY8("sha256",BY8()).update(Y).digest("base64url"));if(X.length!==J.length||!gt6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var ht6=21600000,rC0=null;var OY8=D(()=>{X$()});function sC0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function ut6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=sC0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function LY8($){let Z;try{Z=sC0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=ut6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=sC0(G),K=W&&sC0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as kp}from"zod";function ct6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&<6.test($)}function PY8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function g60($){let Z=$.get("decofileScope");return Wm($.var.studioContext,Z.organizationId,Z.repository)}function h60($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof s6)return $.json({error:Q},409);let Y=IW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function AY8(){let $=new Z1;return $.use("/:virtualMcpId/:branch",zY8),$.use("/:virtualMcpId/:branch/*",zY8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await g60(Z),X=await oQ8(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(LY8(X.decofile),200,{...J,"content-type":"application/json"});let G=vD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(PY8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return h60(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await g60(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return h60(Z,X)}}),$.patch("/:virtualMcpId/:branch",dt6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=it6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=S60(X.data)}catch(G){if(G instanceof C60)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{xC0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(OD1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await g60(Z),W=await FY8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Tp(Y)},J),K=vD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:PY8(Z)})}catch(G){return h60(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await g60(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(IW(W)!==409)throw W;await nC0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(IW(G)===409)return Z.json({error:"merge-conflict"},409);if(IW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return h60(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await g60(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(IW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return h60(Z,Y)}}),$}var lt6,wY8=500,jY8=1048576,EY8=1024,mt6=8388608,dt6,it6,zY8;var TY8=D(()=>{qR0();fC0();J8();eW();JD1();bC0();kD1();Z7();UY8();OY8();MD1();mC0();JH();lt6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;dt6=x5({maxSize:mt6,onError:($)=>$.json({error:"Payload too large"},413)}),it6=kp.object({set:kp.record(kp.string(),kp.unknown()).optional(),delete:kp.array(kp.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=wY8,{message:`Patch cannot touch more than ${wY8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=jY8),{message:`Each block must be at most ${jY8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=EY8),{message:`Each block key must be at most ${EY8} characters`}),zY8=vC0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!ct6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!DY8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await IJ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Jd(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=f60(K,F);if(!U)return $.json({error:"Project has no repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,repository:U,userId:G}),Z()})});var RY8=($)=>{let Z=new Z1;if(Z.use("*",$p),Z.use("*",o68),Z.route("/",n68($.voiceSessions)),Z.route("/",cS0()),Z.route("/",C58()),Z.route("/",w58()),Z.route("/",u78()),Z.route("/",c78()),Z.route("/",_78()),Z.route("/",g78()),Z.route("/",b78()),Z.route("/",SC0()),Z.route("/tools",o78()),Z.route("/",p78()),Z.route("/",F78({kvStorage:$.kvStorage})),Z.route("/",K78()),Z.route("/fs",T78({getConnection:$.getNatsConnection})),Z.route("/sandbox",KY8()),Z.route("/decofile",AY8()),Z.route("/",k78()),Z.route("/",q78()),Z.route("/deco-sites",dS0()),Z.route("/hosting",G58()),Z.route("/monitor",B58()),Z.route("/sso",yS0()),Z.route("/",CC0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Z58()),$.mountDevAssets)Z.route("/dev-assets",tS0({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("/",$88()),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",I78()),Z.route("/mcp",xM0()),Z.route("/mcp/self",MC0()),Z.route("/mcp",gM0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var qY8=D(()=>{J8();t68();r68();qS0();Q58();MN1();W58();D58();oS0();tE();PN1();CN1();H78();U78();R78();M78();j80();BN1();hM0();rB1();V78();S78();v78();x78();eB1();l78();m78();n78();$D1();r78();ZD1();fM0();HY8();TY8()});import{z as ty}from"zod";class bD1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new VY8.Kvm(aC0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:aC0.StorageType.Memory,ttl:kY8.nanos(RD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}async conversationAgent($){let Z=await this.kv(),Q=`agent.${$.conversationKey}`,Y=Date.now()+45000;while(Date.now()<Y){let X=await Z.get(Q),J=X?.operation==="PUT"?IY8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await z$(200);continue}let G=MY8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await z$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,MY8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new q1(503,{message:"Voice conversation is starting; try again"})}async createSession($){let Z=this.adapter.forConversationModel($.model),Q=await this.conversationAgent(Z);try{return{provider:"elevenlabs",conversationToken:await Z.createConversationToken(Q)}}catch(Y){let X=await this.kv(),J=`agent.${Z.conversationKey}`,G=await X.get(J),W=G?.operation==="PUT"?IY8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var aC0,VY8,kY8,MY8,IY8;var SY8=D(()=>{OJ();vU();a$();aC0=C(BK(),1),VY8=C($A(),1),kY8=C(zz(),1),MY8=new TextEncoder,IY8=ty.discriminatedUnion("state",[ty.object({state:ty.literal("ready"),agentId:ty.string()}),ty.object({state:ty.literal("creating"),expiresAt:ty.number()})])});import{z as Sp}from"zod";function pt6($){return{model:$.model,instructions:`${dR$}
|
|
3734
|
-
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class xD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:pt6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:Sp.object({session:Sp.object({id:Sp.string().min(1)}),transport:Sp.object({type:Sp.literal("webrtc"),sdp:Sp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var CY8=D(()=>{vU()});var _Y8;var vY8=D(()=>{_Y8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function fD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:cR$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:_Y8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:RD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var bY8=D(()=>{vU();vY8()});import{z as nX}from"zod";import{createHash as nt6,createHmac as tt6}from"crypto";class eC0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=nt6("sha256").update(JSON.stringify(fD1($))).digest("hex"),this.conversationKey=tt6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new eC0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=nX.object({agents:nX.array(nX.object({agent_id:nX.string(),name:nX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return nX.object({platform_settings:nX.object({auth:nX.object({enable_auth:nX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...fD1(this.config)},AbortSignal.timeout(15000));return nX.object({agent_id:nX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var xY8=D(()=>{bY8()});import{createHmac as ot6,timingSafeEqual as rt6}from"crypto";import{z as Cp}from"zod";function yY8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return ot6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function gY8($,Z){let Q=Buffer.from(JSON.stringify(fY8.parse($))).toString("base64url");return`${Q}.${yY8(Q,Z)}`}function hY8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(yY8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!rt6(W,G))return null;try{let K=fY8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+RD)return null;return K.data}catch{return null}}var fY8;var uY8=D(()=>{vU();fY8=Cp.object({sessionId:Cp.string().uuid(),organizationId:Cp.string().min(1).max(256),userId:Cp.string().min(1).max(256),threadId:Cp.string().min(1).max(256),expiresAt:Cp.number().int().positive()})});import{z as yD1}from"zod";function lY8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return gD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var gD1;var cY8=D(()=>{gD1=yD1.object({provider:yD1.enum(["elevenlabs","openai"]),model:yD1.string().trim().min(1).max(128)})});import{createHash as st6}from"crypto";import{z as _p}from"zod";function vp($){return`user.${st6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class uD1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new mY8.Kvm(Z_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Z_0.StorageType.Memory,ttl:dY8.nanos(RD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=lY8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+RD},W=gY8(G,this.deps.secret),K=await this.kv(),H=vp(G),F=await K.get(H),U=F?.operation==="PUT"?$_0.parse(F.json()):null,N=hD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:vp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=hY8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=vp(Q),J=await Y.get(X),G=J?.operation==="PUT"?$_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,hD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=vp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?$_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,hD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(vp($));if(Q?.operation==="PUT"&&$_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(vp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Z_0,mY8,dY8,$_0,hD1;var iY8=D(()=>{OJ();vU();uY8();cY8();Z_0=C(BK(),1),mY8=C($A(),1),dY8=C(zz(),1),$_0=_p.object({sessionId:_p.string().uuid(),expiresAt:_p.number(),connected:_p.boolean().optional(),conversation:gD1.optional(),characters:_p.number().int().nonnegative(),requests:_p.number().int().nonnegative()}),hD1=new TextEncoder});function at6($){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}}))}var et6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},pY8=()=>{let $=new Z1;return $.use("*",et6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await QG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:at6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var nY8=D(()=>{J8();X$();Ck0()});import{z as y1}from"zod";function wN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Ho6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Fo6($,Z,Q){try{return JSON.parse($)}catch{throw new rY8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Uo6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Fo6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function No6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?mF(Q.function.parameters):mF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Bo6($){if(!$)return;return{openai:{response_format:$}}}function Do6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function tY8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function oY8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var $o6=256,Zo6,Qo6,Yo6,Xo6,Jo6,Go6,Wo6,Ko6,rY8,sY8,aY8;var eY8=D(()=>{y4();J8();Ap();CH();Zo6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Qo6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Yo6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Qo6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Xo6=y1.object({type:y1.literal("text")}),Jo6=y1.object({type:y1.literal("json_object")}),Go6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),Wo6=y1.union([Xo6,Jo6,Go6]),Ko6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Yo6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Zo6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:Wo6.optional(),user:y1.string().optional()});rY8=class rY8 extends Error{constructor($){super($);this.name="MessageConversionError"}};sY8=new Z1;sY8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(wN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(wN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(wN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Ko6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(wN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Ho6(J.model);if(!G)return $.json(wN("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}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>LP(E.providerId));if(!j)return $.json(wN("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=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(wN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Uo6(J.messages),N=J.tools?No6(J.tools):void 0,B=Bo6(J.response_format),O=Do6(),L=Math.floor(Date.now()/1000);if(J.stream)return FO($,async(w)=>{let j=tY8(F,U,N,J,B,$.req.raw.signal);try{let E=Qd(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=$o6)await P()}else if(q.type==="tool-call"){await P();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:oY8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=tY8(F,U,N,J,B,$.req.raw.signal),j=await xU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:oY8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(wN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(wN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(wN(X.message,"server_error"),500)}});aY8=sY8});function Oo6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function $X8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(NA(U)!==J)continue;if(!Oo6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var ZX8=D(()=>{J8();aG()});var YX8;var QX8=D(()=>{YX8={name:"decocms",version:"4.427.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","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.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":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@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":"^4.0.17","@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","@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:"^7.0.107","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 jo6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??wo6}}var XX8,wo6="https://ph.studio.decocms.com",JX8;var GX8=D(()=>{J8();Ps();gf();I9();X$();eU1();QX8();XX8=new Z1;XX8.get("/",($)=>{let Z={version:YX8.version,theme:e6$(),...dK().logo&&{logo:dK().logo},...xD()&&{internalUrl:Rp1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:i48(),posthog:jo6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:AO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});JX8=XX8});function oy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function lD1($){return(oy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function WX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(oy($))}&sz=${Z}`}function Eo6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function KX8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=Eo6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as E$}from"zod";var zo6,HX8;var FX8=D(()=>{zo6=E$.object({check_id:E$.string(),title:E$.string(),description:E$.string().optional(),impact:E$.string().optional(),why:E$.string().optional(),category:E$.string(),severity:E$.string(),value_band:E$.string().optional(),value_driver:E$.string().optional(),controllability:E$.string().optional(),pages:E$.array(E$.string()),tasks:E$.array(E$.string()),evidence:E$.string(),sample_scope:E$.string().optional(),sources:E$.array(E$.string())}),HX8=E$.object({domain:E$.string(),brand:E$.string(),favicon:E$.string().optional(),scanned_at:E$.string().nullable(),lang:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),totals:E$.object({measured:E$.number(),registry_total:E$.number(),passed:E$.number(),failed:E$.number(),blocked:E$.number()}),buckets:E$.array(E$.object({id:E$.enum(["critical","important","worth"]),label:E$.string(),items:E$.array(zo6)})),passing:E$.object({count:E$.number(),items:E$.array(E$.object({check_id:E$.string(),title:E$.string()}))}),not_measured:E$.object({count:E$.number(),groups:E$.array(E$.object({reason:E$.string(),label:E$.string(),count:E$.number(),checks:E$.array(E$.string())}))}),categories:E$.array(E$.object({key:E$.string(),label:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),pass:E$.number(),fail:E$.number()})),screenshots:E$.array(E$.object({url:E$.string(),page_type:E$.string().optional(),viewport:E$.enum(["desktop","mobile"]),image_url:E$.string()}))})});function UX8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Q_0($,Z={}){let Q=await fetch(UX8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return HX8.parse(await Q.json())}async function NX8($,Z={}){let Q=await fetch(UX8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var cD1=D(()=>{FX8();iB()});import{join as BX8}from"path";async function Ao6($){try{let Z=await Q_0($,{signal:AbortSignal.timeout(Po6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||lD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function GG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function To6($,Z){let Q=oy($),Y=Z?.brand?.trim()||lD1(Q),X=WX8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=KX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(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="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(G)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${GG(G)}.md" />`,`<link rel="icon" href="${GG(X)}" sizes="any" />`].join(`
|
|
3734
|
+
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class xD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:pt6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:Sp.object({session:Sp.object({id:Sp.string().min(1)}),transport:Sp.object({type:Sp.literal("webrtc"),sdp:Sp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var CY8=D(()=>{vU()});var _Y8;var vY8=D(()=>{_Y8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function fD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:cR$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:_Y8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:RD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var bY8=D(()=>{vU();vY8()});import{z as nX}from"zod";import{createHash as nt6,createHmac as tt6}from"crypto";class eC0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=nt6("sha256").update(JSON.stringify(fD1($))).digest("hex"),this.conversationKey=tt6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new eC0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=nX.object({agents:nX.array(nX.object({agent_id:nX.string(),name:nX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return nX.object({platform_settings:nX.object({auth:nX.object({enable_auth:nX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...fD1(this.config)},AbortSignal.timeout(15000));return nX.object({agent_id:nX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var xY8=D(()=>{bY8()});import{createHmac as ot6,timingSafeEqual as rt6}from"crypto";import{z as Cp}from"zod";function yY8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return ot6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function gY8($,Z){let Q=Buffer.from(JSON.stringify(fY8.parse($))).toString("base64url");return`${Q}.${yY8(Q,Z)}`}function hY8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(yY8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!rt6(W,G))return null;try{let K=fY8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+RD)return null;return K.data}catch{return null}}var fY8;var uY8=D(()=>{vU();fY8=Cp.object({sessionId:Cp.string().uuid(),organizationId:Cp.string().min(1).max(256),userId:Cp.string().min(1).max(256),threadId:Cp.string().min(1).max(256),expiresAt:Cp.number().int().positive()})});import{z as yD1}from"zod";function lY8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return gD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var gD1;var cY8=D(()=>{gD1=yD1.object({provider:yD1.enum(["elevenlabs","openai"]),model:yD1.string().trim().min(1).max(128)})});import{createHash as st6}from"crypto";import{z as _p}from"zod";function vp($){return`user.${st6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class uD1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new mY8.Kvm(Z_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Z_0.StorageType.Memory,ttl:dY8.nanos(RD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=lY8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+RD},W=gY8(G,this.deps.secret),K=await this.kv(),H=vp(G),F=await K.get(H),U=F?.operation==="PUT"?$_0.parse(F.json()):null,N=hD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:vp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=hY8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=vp(Q),J=await Y.get(X),G=J?.operation==="PUT"?$_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,hD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=vp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?$_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,hD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(vp($));if(Q?.operation==="PUT"&&$_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(vp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Z_0,mY8,dY8,$_0,hD1;var iY8=D(()=>{OJ();vU();uY8();cY8();Z_0=C(BK(),1),mY8=C($A(),1),dY8=C(zz(),1),$_0=_p.object({sessionId:_p.string().uuid(),expiresAt:_p.number(),connected:_p.boolean().optional(),conversation:gD1.optional(),characters:_p.number().int().nonnegative(),requests:_p.number().int().nonnegative()}),hD1=new TextEncoder});function at6($){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}}))}var et6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},pY8=()=>{let $=new Z1;return $.use("*",et6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await QG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:at6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var nY8=D(()=>{J8();X$();Ck0()});import{z as y1}from"zod";function wN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Ho6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Fo6($,Z,Q){try{return JSON.parse($)}catch{throw new rY8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Uo6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Fo6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function No6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?mF(Q.function.parameters):mF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Bo6($){if(!$)return;return{openai:{response_format:$}}}function Do6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function tY8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function oY8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var $o6=256,Zo6,Qo6,Yo6,Xo6,Jo6,Go6,Wo6,Ko6,rY8,sY8,aY8;var eY8=D(()=>{y4();J8();Ap();CH();Zo6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Qo6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Yo6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Qo6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Xo6=y1.object({type:y1.literal("text")}),Jo6=y1.object({type:y1.literal("json_object")}),Go6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),Wo6=y1.union([Xo6,Jo6,Go6]),Ko6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Yo6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Zo6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:Wo6.optional(),user:y1.string().optional()});rY8=class rY8 extends Error{constructor($){super($);this.name="MessageConversionError"}};sY8=new Z1;sY8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(wN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(wN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(wN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Ko6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(wN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Ho6(J.model);if(!G)return $.json(wN("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}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>LP(E.providerId));if(!j)return $.json(wN("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=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(wN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Uo6(J.messages),N=J.tools?No6(J.tools):void 0,B=Bo6(J.response_format),O=Do6(),L=Math.floor(Date.now()/1000);if(J.stream)return FO($,async(w)=>{let j=tY8(F,U,N,J,B,$.req.raw.signal);try{let E=Qd(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=$o6)await P()}else if(q.type==="tool-call"){await P();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:oY8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=tY8(F,U,N,J,B,$.req.raw.signal),j=await xU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:oY8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(wN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(wN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(wN(X.message,"server_error"),500)}});aY8=sY8});function Oo6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function $X8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(NA(U)!==J)continue;if(!Oo6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var ZX8=D(()=>{J8();aG()});var YX8;var QX8=D(()=>{YX8={name:"decocms",version:"4.427.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.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":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@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":"^4.0.17","@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","@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:"^7.0.107","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 jo6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??wo6}}var XX8,wo6="https://ph.studio.decocms.com",JX8;var GX8=D(()=>{J8();Ps();gf();I9();X$();eU1();QX8();XX8=new Z1;XX8.get("/",($)=>{let Z={version:YX8.version,theme:e6$(),...dK().logo&&{logo:dK().logo},...xD()&&{internalUrl:Rp1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:i48(),posthog:jo6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:AO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});JX8=XX8});function oy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function lD1($){return(oy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function WX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(oy($))}&sz=${Z}`}function Eo6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function KX8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=Eo6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as E$}from"zod";var zo6,HX8;var FX8=D(()=>{zo6=E$.object({check_id:E$.string(),title:E$.string(),description:E$.string().optional(),impact:E$.string().optional(),why:E$.string().optional(),category:E$.string(),severity:E$.string(),value_band:E$.string().optional(),value_driver:E$.string().optional(),controllability:E$.string().optional(),pages:E$.array(E$.string()),tasks:E$.array(E$.string()),evidence:E$.string(),sample_scope:E$.string().optional(),sources:E$.array(E$.string())}),HX8=E$.object({domain:E$.string(),brand:E$.string(),favicon:E$.string().optional(),scanned_at:E$.string().nullable(),lang:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),totals:E$.object({measured:E$.number(),registry_total:E$.number(),passed:E$.number(),failed:E$.number(),blocked:E$.number()}),buckets:E$.array(E$.object({id:E$.enum(["critical","important","worth"]),label:E$.string(),items:E$.array(zo6)})),passing:E$.object({count:E$.number(),items:E$.array(E$.object({check_id:E$.string(),title:E$.string()}))}),not_measured:E$.object({count:E$.number(),groups:E$.array(E$.object({reason:E$.string(),label:E$.string(),count:E$.number(),checks:E$.array(E$.string())}))}),categories:E$.array(E$.object({key:E$.string(),label:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),pass:E$.number(),fail:E$.number()})),screenshots:E$.array(E$.object({url:E$.string(),page_type:E$.string().optional(),viewport:E$.enum(["desktop","mobile"]),image_url:E$.string()}))})});function UX8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Q_0($,Z={}){let Q=await fetch(UX8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return HX8.parse(await Q.json())}async function NX8($,Z={}){let Q=await fetch(UX8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var cD1=D(()=>{FX8();iB()});import{join as BX8}from"path";async function Ao6($){try{let Z=await Q_0($,{signal:AbortSignal.timeout(Po6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||lD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function GG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function To6($,Z){let Q=oy($),Y=Z?.brand?.trim()||lD1(Q),X=WX8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=KX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(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="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(G)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${GG(G)}.md" />`,`<link rel="icon" href="${GG(X)}" sizes="any" />`].join(`
|
|
3735
3735
|
`)}function Ro6($,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}
|
|
3736
3736
|
</head>`)}function DX8($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=oy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(BX8($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(qo6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let Y=oy(Q.req.param("file").replace(/\.md$/,""));try{let X=await NX8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(Mo6)});if(X===null)return Q.text("Deco Score not found",404);return Q.body(X,200,{"Content-Type":"text/markdown; charset=utf-8","Cache-Control":"public, max-age=600, stale-while-revalidate=3600","Access-Control-Allow-Origin":"*"})}catch{return Q.text("Deco Score unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?BX8($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await Ao6(oy(Y)),K=To6(Y,W);return Q.html(Ro6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Po6=2500,qo6=1e4,Mo6=1e4;var OX8=D(()=>{J8();iB();cD1();X$()});function Y_0($,Z){return fetch(`${jW({})}${$}`,Z)}async function Io6($,Z){let Q=await Q_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function ko6($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",Y=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:Y}}var Vo6,NO,LX8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},wX8;var jX8=D(()=>{J8();Z3();iB();cD1();Vo6=new Set(["complete","errored","terminated","unknown"]);NO=new Z1;NO.use("*",async($,Z)=>{let Q=await x8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});NO.use("/link-token/*",LX8);NO.use("/suggest",LX8);NO.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.req.query("lang")?.trim()||void 0;try{return $.json(await Io6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});NO.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=ko6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await Y_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${nw({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.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)}});NO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await Y_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${nw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Vo6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});NO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await Y_0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});NO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await Y_0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});wX8=NO});var So6=1048576,mD1;var EX8=D(()=>{J8();eW();X$();gU1();mD1=new Z1;mD1.post("/webhook",x5({maxSize:So6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!X48(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=J48(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await G48(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as Co6}from"crypto";function bo6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return Co6(Buffer.from(X),Buffer.from(Y))}function xo6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function zX8($){let Z=new Z1;return Z.post("/webhook",x5({maxSize:_o6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!bo6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!vo6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});return I10().then((U)=>U?.markTenantPoolsDirty(`https://github.com/${F}`,H)).catch((U)=>console.warn(`[github-webhook] tenant pool refresh for ${F}@${H} failed: ${U instanceof Error?U.message:String(U)}`)),Q.json({ok:!0})}let W=xo6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await fo6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function fo6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await vb$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var _o6=5242880,vo6;var PX8=D(()=>{J8();eW();vW();C7();vo6=new Set(["check_suite","issue_comment"])});import{DBOS as iD1,SchedulerMode as yo6}from"@dbos-inc/dbos-sdk";async function ho6(){try{return await uo6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function uo6(){if(!M10())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (q91(),R91)),Promise.resolve().then(() => (T91(),A91))]),Q=await I10(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=D8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=eA$({sandboxes:J,pools:G,records:await $T$(X,J,G),legacyPools:JT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await ZT$(K,MH0(X,new UX(E0().encryptionKey)),{now:W,orgFsLifetimeMs:KT0}),U=0,N=0;for(let B of H){let O=await Y.pushCredentials(B);U+=O.stored,N+=O.kept}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F}}async function lo6($,Z){let Q=await iD1.runStep(ho6,{name:"pushSandboxCredentials"});if(Q&&(Q.refused>0||Q.failed>0))console.warn(`[sandbox-credential-push] ${Q.sandboxes} sandboxes: pushed ${Q.pushed}, kept ${Q.kept}, refused ${Q.refused}, failed ${Q.failed}`)}function AX8(){if(dD1)return;if(!E0().agentSandboxEnabled||!M10())return;dD1=iD1.registerWorkflow(lo6,{name:"sandboxCredentialPushWorkflow"}),iD1.registerScheduled(dD1,{name:"sandboxCredentialPushWorkflow",crontab:go6,mode:yo6.ExactlyOncePerIntervalWhenActive})}var go6="1-59/10 * * * *",dD1=null;var TX8=D(()=>{SG();HL();B41();HT0();GT0();vW();X$()});function RX8($){let Z=new eD($.db,new UX($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=t_$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new lQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var qX8=D(()=>{J8();HL();y71();KE();c40()});import{DBOS as Zz,SchedulerMode as co6}from"@dbos-inc/dbos-sdk";function MX8($){nD1=$}function oD1(){if(!nD1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return nD1}function rD1(){let $=oD1();return new eD($.db,new UX($.encryptionKey))}async function no6($){try{let Z=await rD1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await MH(oD1().db,Z.organizationId);if(!Q)return{integrationId:$,started:0};if((await Q.storage.jiraIntegrations.listAutomations(Z.organizationId)).length===0)return{integrationId:$,started:0};let X=new lQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${do6}m"`,W=0,K;for(let H=0;H<io6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await nH1(Q,Z,{issueId:U.id,now:Date.now()})==="started")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,started:W}}catch(Z){return{integrationId:$,started:0,error:Z instanceof Error?Z.message:String(Z)}}}async function to6($,Z){let Q=await Zz.runStep(()=>rD1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>Zz.runStep(()=>no6(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.started>0)console.log(`[jira-trigger] integration ${X.integrationId} started ${X.started} run(s) the webhook missed`)}async function oo6($,Z){try{let Q=await rD1().getById($);if(!Q?.enabled)return"disabled";let Y=await MH(oD1().db,Q.organizationId);if(!Y)return"disabled";let X=await nH1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="started")console.log(`[jira-trigger] started a run for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no run`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function ro6($,Z){await Zz.sleep(bk0()+po6),await Zz.runStep(()=>oo6($,Z),{name:"settleJiraMove"})}async function IX8($,Z){if(!tD1)throw Error("[jira-trigger] settle workflow is not registered");await Zz.startWorkflow(tD1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function VX8(){if(pD1)return;tD1=Zz.registerWorkflow(ro6,{name:"jiraSettleWorkflow"}),pD1=Zz.registerWorkflow(to6,{name:"jiraTriggerSweepWorkflow"}),Zz.registerScheduled(pD1,{name:"jiraTriggerSweepWorkflow",crontab:mo6,mode:co6.ExactlyOncePerIntervalWhenActive})}var mo6="7-59/10 * * * *",do6=35,io6=5,po6=5000,nD1=null,tD1=null,pD1=null;var sD1=D(()=>{HL();c40();Pd();KE();iH1();xk0()});function kX8($){let Z=new eD($.db,new UX($.encryptionKey));async function Q(X,J){let G=ke$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await IX8(W.id,G)}let Y=new Z1;return Y.post("/webhook/:secret",x5({maxSize:so6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var so6=1048576;var SX8=D(()=>{J8();eW();HL();sD1();xk0();c40()});function CX8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var _X8,ao6,eo6,vX8;var bX8=D(()=>{J8();OJ();kd();lc();_X8=new Z1,ao6=["range","if-none-match","if-modified-since"],eo6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];_X8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(ei($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q1(401,{message:"Authentication required"})}if(!Q)throw new q1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new q1(400,{message:"Missing file key"});let X=await s$0(Y,Z);if(!X)throw new q1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&PW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new q1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return CX8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of ao6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new q1(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new q1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of eo6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),CX8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});vX8=_X8});var u60=b((ry)=>{var $r6=ry&&ry.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),Zr6=ry&&ry.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))$r6(Z,$,Q)};Object.defineProperty(ry,"__esModule",{value:!0});Zr6(OG(),ry)});var yX8=b((xX8)=>{Object.defineProperty(xX8,"__esModule",{value:!0});xX8.version=void 0;xX8.version="3.4.0"});var uX8=b((jN)=>{var Qr6=jN&&jN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(jN,"__esModule",{value:!0});jN.NodeTransport=jN.VERSION=void 0;jN.nodeResolveHost=Kr6;var s5=u60(),Yr6=M0("net"),aD1=M0("tls"),Xr6=M0("path"),gX8=M0("fs"),Jr6=Qr6(M0("dns")),Gr6=yX8();jN.VERSION=Gr6.version;var Wr6="nats.js";class hX8{socket;version;lang;yields=[];signal=(0,s5.deferred)();closedNotification=(0,s5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=Wr6,this.version=jN.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,s5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw s5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new s5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new s5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,s5.deferred)(),Q,Y=(0,Yr6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,s5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=s5.DataBuffer.concat(...this.yields),X=(0,s5.extractProtocolMessage)(Y);if(X!=="")try{let J=s5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,s5.deferred)();try{if($=(0,Xr6.resolve)($),!(0,gX8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,gX8.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,s5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new s5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,s5.deferred)();try{let X=(0,aD1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new s5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,s5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new s5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s5.deferred)();try{let Y=(0,aD1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new s5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}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,s5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s5.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 aD1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s5.render)($)}`);let Z=(0,s5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,s5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,s5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}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(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}jN.NodeTransport=hX8;function Kr6($){let Z=(0,s5.deferred)();return Jr6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var iX8=b((dX8)=>{Object.defineProperty(dX8,"__esModule",{value:!0});dX8.connect=Hr6;var lX8=uX8(),cX8=u60(),mX8=u60();function Hr6($={}){if((0,mX8.hasWsProtocol)($))return Promise.reject(mX8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,cX8.setTransportFactory)({factory:()=>{return new lX8.NodeTransport},dnsResolveFn:lX8.nodeResolveHost}),cX8.NatsConnectionImpl.connect($)}});var pX8=b((BO)=>{var Ur6=BO&&BO.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),Nr6=BO&&BO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Ur6(Z,$,Q)};Object.defineProperty(BO,"__esModule",{value:!0});BO.connect=void 0;var Br6=iX8();Object.defineProperty(BO,"connect",{enumerable:!0,get:function(){return Br6.connect}});Nr6(u60(),BO)});function rX8($){let Z=$?.connectFn??wr6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:Lr6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{O++;let L=U7(Or6,Dr6,O-1,2,0.5);await z$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?nX8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=oX8.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function wr6($){return tX8.connect($)}var nX8,tX8,oX8,Dr6=100,Or6=3000,Lr6=3000;var sX8=D(()=>{a$();nX8=C(zz(),1),tX8=C(pX8(),1),oX8=C(BK(),1)});function X_0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,Y=$?.updateRecencyOnGet??!1,X=new Map;function J(){if(X.size<=Q)return;let G=Date.now();for(let[W,K]of X)if(K.expiresAt<=G)X.delete(W);while(X.size>Q){let W=X.keys().next().value;if(W===void 0)break;X.delete(W)}}return{get(G){let W=X.get(G);if(!W)return;if(W.expiresAt<=Date.now()){X.delete(G);return}if(Y)X.delete(G),X.set(G,W);return W.value},set(G,W){X.delete(G),X.set(G,{value:W,expiresAt:Date.now()+Z}),J()},delete(G){X.delete(G)},clear(){X.clear()},size(){return X.size}}}function J_0($,Z){return`${$}.${Z}`}class eD1{cache;constructor($){this.cache=X_0({ttlMs:$?.ttlMs??jr6,maxSize:$?.maxSize??Er6})}async get($,Z){return this.cache.get(J_0($,Z))??null}async set($,Z,Q){this.cache.set(J_0($,Z),Q)}async invalidate($,Z){this.cache.delete(J_0($,Z)),this.cache.delete(J_0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var jr6=600000,Er6=5000;var aX8=()=>{};function G_0($,Z){return`${$}:${Z}`}function $O1($){let Z=X_0({ttlMs:$?.ttlMs??zr6,maxSize:$?.maxSize??Pr6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(eX8,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(G_0(K,H))},set(K,H,F){Z.set(G_0(K,H),F)},invalidate(K,H){Z.delete(G_0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(eX8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(G_0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var eX8="studio.ai-provider-keys.invalidate",zr6=30000,Pr6=5000;var $J8=()=>{};class ZO1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.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 Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var ZJ8=($)=>{let Z;return()=>Z??=$()},QO1,YO1;var QJ8=D(()=>{k6();QO1=ZJ8(()=>e1.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),YO1=ZJ8(()=>e1.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function Vr6($=JJ8){return{name:iU,subjects:[`${mY1}.>`],storage:iH.StorageType.File,max_age:Rr6,max_bytes:Mr6,max_msgs_per_subject:Ir6,discard:iH.DiscardPolicy.Old,retention:iH.RetentionPolicy.Limits,duplicate_window:qr6,num_replicas:$}}class GJ8{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 YJ8($){let Z=XJ8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function _r6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Tr6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function vr6($,Z){return $.info?.cluster?Z:1}function br6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class XO1{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=async(Y,X)=>{let J=Vr6(X);try{await Y.streams.info(iU),await Y.streams.update(iU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(iU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(iU),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await iH.jetstreamManager($),X=vr6($,JJ8);try{await Z(Y,X)}catch(J){if(X<=1||!br6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:gd});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=_r6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=wy$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=iY1(H,{runId:Z}),N=performance.now()-F;QO1().record(N),YO1().add(1,{"org.id":Y??"unknown"}),Cr6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?YJ8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),Sr6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await E8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:YJ8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:gd}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=iY1(Z,{runId:$,dedup:Q});QO1().record(performance.now()-X),YO1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=Ly$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?iH.DeliverPolicy.New:iH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=LE($),W;try{W=await E8(async()=>{return(await Y.consumers.get(iU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:gd})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=QM0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(aq0()).pipeThrough(eq0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){O(),L.close();return}let E=j;if(E.kind==="done"){if(J){O(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(iU,{filter:LE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var iH,XJ8,Ar6=($)=>{let Z;return()=>Z??=$()},Tr6,Rr6=86400000000000,qr6=120000000000,Mr6=4294967296,JJ8,Ir6=500000,kr6,Sr6,Cr6;var WJ8=D(()=>{a$();pY1();YM0();$M0();k6();QJ8();iH=C(BK(),1),XJ8=C(zz(),1),Tr6=Ar6(()=>e1.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),JJ8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);kr6=process.env.STREAM_ENCODE_TRACE==="1",Sr6=process.env.DECOPILOT_STREAM_TRACE==="1";Cr6=kr6?new GJ8:null});function W_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,NF(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var KJ8=D(()=>{p8()});class JO1{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 xr6($,Z,Q={}){let Y=$.startsWith("thread:")?AH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function GO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await _U($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await um($,{threadId:X,runBranch:G?.branch}),K=await b00($,Q,H41(J)).catch(()=>null);if(!K){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}let H=xr6(W,await TT0($,X),{flat:Uf(K.repo.provider)});for(let F of H){let U=await K.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:K.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await O3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var HJ8=D(()=>{Z7();xW();C7()});async function FJ8($,Z,Q){let Y=Z.organizationId;if(!uX(Z))return!1;if(!vf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=LU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await $5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),L8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var UJ8=D(()=>{x4();cY();Td();IH();P9()});function cr6($){return $ instanceof kX}function NJ8($,Z){return Z-$>=ur6}class WO1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??fr6;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??gr6,Q=this.options.itemIntervalMs??yr6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,Y)}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()-C71),aQ1);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-lr6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await oQ1(this.taskBoard,X,Y),await rQ1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==R$.progress||uX(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await GO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!NJ8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:R$.progress,to:R$.review,reason:H}}).catch(()=>{}),L8(J,F),await VH(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==R$.progress||G.assigneeId!==R8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await kH(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),cr6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+hr6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==R$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),L8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!NJ8(XD(Q,Z.reviewCycleStartedAt),Date.now()))return;await VH($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!uX(Y))return!1;let X=Y.assigneeId===R8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await GO1(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await Md(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await FJ8(G,Y,W))return!0;if(await zg$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!iQ1(W))return!1;return await Rd(G,Y,{previewMatchesHead:pQ1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await NE($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var fr6=60000,yr6=300000,gr6=50,hr6=60000,ur6=900000,lr6=120000;var BJ8=D(()=>{x4();Dq0();HJ8();mU();K80();IH();UJ8();P9();MW();eQ1();C7();b$0();qd()});import{readdir as mr6,rm as K_0}from"fs/promises";import{join as H_0}from"path";async function F_0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-dr6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await sy($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await DJ8($,X,Z);else if(!X.startsWith(".")){let J=H_0($,X),G=await sy(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await DJ8(J,K,Z)}if((await sy(J)).length===0)await K_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function DJ8($,Z,Q){let Y=0,X=H_0($,Z),J=await sy(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=H_0(X,W),H=await sy(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=H_0(K,U);await K_0(B,{recursive:!0,force:!0}),Y++}}if((await sy(K)).length===0)await K_0(K,{recursive:!0,force:!0})}if((await sy(X)).length===0)await K_0(X,{recursive:!0,force:!0});return Y}async function sy($){try{return(await mr6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var dr6=30;var KO1=()=>{};import{DBOS as HO1,SchedulerMode as ir6}from"@dbos-inc/dbos-sdk";async function nr6(){let $=[JK(),Gg(),qN()],Z=0;for(let Q of $)try{Z+=await F_0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function tr6($,Z){await HO1.runStep(()=>nr6(),{name:"monitoringRetention"})}function LJ8(){if(OJ8)return;OJ8=!0;let $=HO1.registerWorkflow(tr6,{name:"monitoringRetentionWorkflow"});HO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:pr6,mode:ir6.ExactlyOncePerIntervalWhenActive})}var pr6="23 4 * * *",OJ8=!1;var wJ8=D(()=>{_3();KO1()});function jJ8($){return async(Z,Q)=>{let Y=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","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await cQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await HA($.db,Z,Y.role);return X.boundAuth=SU1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new oP(Q,void 0,X.boundAuth,Y.role,"self"),UE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var EJ8=D(()=>{bK();BU()});function or6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function rr6(){return{services:or6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function ar6(){for(let $ of sr6)$()}function zJ8($){let Z=[...FO1.logs,$];FO1={...FO1,logs:Z.length>500?Z.slice(-500):Z},ar6()}function UO1(){return er6}var FO1,sr6,er6=!1;var NO1=D(()=>{FO1=rr6(),sr6=new Set});import{EventEmitter as $s6}from"events";var BO1;var PJ8=D(()=>{NO1();BO1=new $s6;BO1.on("request",($)=>{zJ8($)})});function AJ8(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=bp(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>bp(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${W9.tool}${B}${W9.dim}(${w})${W9.reset}`}else if(N.method)J=`${W9.dim}${bp(N.method)}${W9.reset}`}}catch{}}let W=bp(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${W9.mcp}${bp(F.slice(0,12))}\u2026${W9.reset}`}else if(X==="/mcp")W=`${W9.mcp}/mcp${W9.reset}`;else if(X==="/mcp/registry")W=`${W9.mcp}/mcp/registry${W9.reset}`;let K=Qs6(Y),H=G?"\u25C0":"\u2190";if(!UO1())console.log(`${W9.dim}${H}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=Zs6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!UO1())console.log(`${W9.dim}${O}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""} ${N}${U}${W9.reset} ${W9.duration}${B}${W9.reset}`);BO1.emit("request",{method:Y,path:bp(X),status:U,duration:F,timestamp:new Date})}}}var W9,Zs6=($)=>{if($>=500)return W9.serverError;if($>=400)return W9.clientError;if($>=300)return W9.redirect;return W9.ok},Qs6=($)=>{return W9[$]||W9.reset},bp=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var TJ8=D(()=>{NO1();PJ8();W9={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 IJ8}from"crypto";import{mkdir as Ys6,readdir as Xs6,rm as RJ8,stat as VJ8}from"fs/promises";import{join as OO1,relative as Js6}from"path";import{z as Q8}from"zod";function SJ8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return OO1(Gs6,Z)}function CJ8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function DO1($,Z){let Q=SJ8($),Y=CJ8(Z);return OO1(Q,Y)}function Ws6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return IJ8("sha256",X).update(J).digest("hex")}function MJ8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=Ws6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${CJ8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function _J8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${IJ8("md5","etag").update(Y).digest("hex")}"`}async function vJ8($,Z,Q,Y,X){try{let J=await Xs6($,{withFileTypes:!0});for(let G of J){let W=OO1($,G.name),H=Js6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await vJ8(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await VJ8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:_J8(W,F.mtime,F.size)})}catch{}}}}catch{}}function bJ8($,Z){let Y=J0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Q8.object({prefix:Q8.string().optional(),maxKeys:Q8.number().optional().default(1000),continuationToken:Q8.string().optional(),delimiter:Q8.string().optional()}),outputSchema:Q8.object({objects:Q8.array(Q8.object({key:Q8.string(),size:Q8.number(),lastModified:Q8.string(),etag:Q8.string()})),nextContinuationToken:Q8.string().optional(),isTruncated:Q8.boolean(),commonPrefixes:Q8.array(Q8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=SJ8(Y);await Ys6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await vJ8(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),O=N+W<U.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({contentType:Q8.string().optional(),contentLength:Q8.number(),lastModified:Q8.string(),etag:Q8.string(),metadata:Q8.record(Q8.string(),Q8.string()).optional()}),handler:async(X)=>{let J=X,G=DO1(Y,J.key),W=await VJ8(G);return{contentType:kN1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:_J8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=tD(J.expiresIn,qJ8);return{url:MJ8(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional(),contentType:Q8.string().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=tD(J.expiresIn,qJ8);return{url:MJ8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({success:Q8.boolean(),key:Q8.string()}),handler:async(X)=>{let J=X,G=DO1(Y,J.key);try{return await RJ8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Q8.object({keys:Q8.array(Q8.string()).max(1000)}),outputSchema:Q8.object({deleted:Q8.array(Q8.string()),errors:Q8.array(Q8.object({key:Q8.string(),message:Q8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=DO1(Y,K);try{await RJ8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function LO1($,Z,Q){let Y=bJ8(Z,Q),X=new Yw({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:vZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:Q8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Q8.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new z3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),mW(X,J,$,"mcp:dev-assets")}async function xJ8($,Z,Q,Y){let J=bJ8(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var Gs6="./data/assets",qJ8=3600,kJ8,fJ8;var yJ8=D(()=>{X$();id();J8();IJ0();dd();NJ();oD();oS0();kJ8=new Z1;kJ8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return LO1($.req.raw,Z,Y)});fJ8=kJ8});var gJ8={};$6(gJ8,{mountDevRoutes:()=>Ks6});function Ks6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return LO1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await xJ8(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",fJ8);let Q=new Z1;Q.use("*",mH({mountPath:"/api/dev-assets"})),Q.route("/",tS0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var hJ8=D(()=>{J8();AN1();oS0();yJ8()});var oJ8={};$6(oJ8,{watchHandler:()=>tJ8,resolveCorsOrigin:()=>pJ8,isSsoExemptPath:()=>dJ8,isAllowedOAuthRedirectUri:()=>nJ8,createApp:()=>js6});import{readFileSync as Hs6}from"fs";import{PrometheusSerializer as Fs6}from"@opentelemetry/exporter-prometheus";import{DBOS as DO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Bs6,oAuthProtectedResourceMetadata as Ds6}from"better-auth/plugins";async function Us6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,lJ8(uJ8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),lJ8(uJ8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function lJ8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function dJ8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${bS0}/`)||$.startsWith(`${VS0}/`)}function iJ8($){return $==="local.studio.decocms.com"}function pJ8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(iJ8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function nJ8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||iJ8($.hostname)}async function js6($={}){let Z=$.database??D8(),Q=!1;_5.stop().catch((K0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",K0)});let Y,X,J,G,W=new eD1,K,H,F,U=null;if($.disableNats)K=$O1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new w80,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(K0)=>{return(async()=>{let H0=K0.getReader();try{while(!0){let{done:R0}=await H0.read();if(R0)break}}catch{}finally{H0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=rX8();let K0=E0().natsCredsPath,H0;if(K0)try{H0=Hs6(K0,"utf8")}catch(w8){console.error(`[app] failed to read NATS_CREDS at ${K0}; connecting anonymously`,w8)}U.init(E0().natsUrls,H0?{creds:H0}:void 0);let R0=e11()?new f11({getJetStream:()=>U.getJetStream()}):null;R0?.init().catch(()=>{}),Y=R0;let A0=new n91({getJetStream:()=>U.getJetStream()});A0.init().catch(()=>{}),X=A0;let D1=new xf(hQ1,{getJetStream:()=>U.getJetStream()}),x$=new xf(x$0,{getJetStream:()=>U.getJetStream()});D1.init().catch(()=>{}),x$.init().catch(()=>{}),J={reads:D1,cards:x$};let i$=new VJ1({getJetStream:()=>U.getJetStream()});i$.init().catch(()=>{}),G=i$,K=$O1({getConnection:()=>U.getConnection()}),H=new ZO1({getConnection:()=>U.getConnection()}),F=new XO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),M48(U),U.onReady(()=>{R0?.init().catch((w8)=>{console.error("[McpListCache] Deferred init failed:",w8)}),A0.init().catch((w8)=>{console.error("[SkillCatalogCache] Deferred init failed:",w8)}),D1.init().catch((w8)=>{console.error("[PrReadCache] Deferred init failed:",w8)}),x$.init().catch((w8)=>{console.error("[PrCardCache] Deferred init failed:",w8)}),i$.init().catch((w8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",w8)}),K.start(),SN$(()=>U.getConnection()),F.init().catch((w8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",w8)})})}if(Qz)await Qz();y11(Y),o91(X),uQ1(J),kJ1(G);let B={storage:new ph(Z.db),sseHub:_5,onThreadFinished:async(K0,H0)=>Vd(new D3(Z.db),K0,H0,new kG(Z.db))},O=new aY1(B),L=new h40(Z.db),w=new JO1(L);w.start(),jg$(H),H.start((K0)=>{lq0(K0),O.execute({type:"CANCEL",taskId:K0}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",H0)})}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast start failed:",K0)}),U?.onReady(()=>{H.start().catch((K0)=>{console.error("[CancelBroadcast] Deferred start failed:",K0)})});let j=()=>U?.getConnection()??null;wN1(j),U?.onReady(()=>wN1(j)),FG1(j),U?.onReady(()=>FG1(j)),F.init().catch((K0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",K0)}),Qz=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),l68(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),CN$(),G.teardown(),y11(null),o91(null),uQ1(null),kJ1(null)};let E=new Z1;if(E.use("*",qJ1({enabled:(K0)=>ai(K0,"debug")==="1"})),E.use("*",__0),E.use("/*",P48({origin:(K0,H0)=>pJ8(K0,{baseUrl:E0().baseUrl,requestOrigin:new URL(H0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(K0,H0)=>{if(await H0(),K0.req.path.includes("/files/"))return;if(K0.req.path.includes("/fs/")&&K0.req.path.endsWith("/read"))return;K0.header("X-Frame-Options","DENY"),K0.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",AJ8());E.use("*",async(K0,H0)=>{if(await H0(),dp(K0.req.path))return;if(K0.res.status>=500){let A0=await K0.res.clone().text();console.error(`[5xx Response] ${K0.req.method} ${K0.req.path} - ${K0.res.status}:`,A0)}}),E.get(aY.HEALTH,(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);return K0.json({status:"ok"})}),E.get(aY.HEALTH_LIVE,(K0)=>{return K0.json({status:"ok"})}),E.get(aY.HEALTH_READY,async(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);let H0={};if(H0.postgres={status:await Us6(Z.pool)?"up":"down"},U)H0.nats=U.isConnected()?{status:"up"}:{status:"down"};else H0.nats={status:"down"};let R0=H0.postgres.status==="up",A0=R0?200:503;return K0.json({status:R0?"ready":"not_ready",services:H0},A0)}),E.get(aY.METRICS,async(K0)=>{try{let H0=await f_0.collect(),R0=Ns6.serialize(H0.resourceMetrics);return K0.text(R0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(H0){return console.error("Failed to collect metrics:",H0),K0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${aY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(K0)=>{let H0=K0.req.param("queueName");if(!Os6.has(H0))return K0.json({error:`Unknown queue: ${H0}`},404);let[R0,A0]=await Promise.all([DO.listQueuedWorkflows({queueName:H0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),DO.listQueuedWorkflows({queueName:H0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return K0.json({queue_length:R0.length,in_flight:A0.length})}),E.route("/api/config",JX8),E.route("/api/_reports",wX8),E.route("/api/_stripe",mD1),E.route("/api/_github",zX8({taskBoard:()=>i,contextFactory:()=>g})),E.route("/api/_git",Gp);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",kX8(T)),E.route("/api/_jira",RX8(T)),E.route("/report",DX8($.clientDir)),E.route("/api/auth/custom",p48),E.route("/api/auth/desktop",r48),E.all("/api/auth/admin/*",V68),E.all("/api/auth/*",async(K0)=>{return await x8.handler(K0.req.raw)});let A=e$8();A.use("/.well-known/oauth-protected-resource/mcp/:connectionId",a40),A.use("/mcp/:connectionId/.well-known/oauth-protected-resource",a40),E.route("/",A),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",x40),E.route("/",X88()),E.use("/oauth-proxy/:connectionId/*",a40),E.all("/oauth-proxy/:connectionId/*",cJ8);let P=async(K0)=>{let R0=await Ls6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",a40),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",P);let q=async(K0)=>{let R0=await ws6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=T48({ttlMs:120000}),_=await t88({db:Z.db,auth:x8,encryption:{key:E0().encryptionKey},observability:{tracer:TO,meter:e1},modelListCache:W,providerKeyCache:K,memberRoleCache:x});cQ.set(_),Bp1({db:Z.db,baseUrl:m5()}),o88({db:Z.db}),e88({db:Z.db}),W48({db:Z.db}),MX8({db:Z.db,encryptionKey:E0().encryptionKey}),rv$({db:Z.db}),B48({db:Z.db}),Eb$({db:Z.db});let V=DX0(Z.db),y=new Rr(Z.db),g=jJ8({db:Z.db});PJ1({storage:V,studioContextFactory:g}),KX1({systemDatabaseUrl:Xs0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:_5}}),ZX1({dispatchRunFn:Hy$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:_5}});let l=new ph(Z.db),i=new D3(Z.db),p=new kG(Z.db),U0=new WO1(i,g,p);if(E0().taskBoardReviewSweeperEnabled){U0.start();let K0=Qz;Qz=async()=>{await K0?.(),U0.dispose()}}Sy$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let K0=U?.getConnection();return K0?await mJ8.jetstreamManager(K0):null},messageParts:l.messageParts(),resolveRun:async(K0)=>{let H0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",K0).executeTakeFirst();return H0?{orgId:H0.organization_id,createdBy:H0.created_by,version:H0.message_storage_version??1,status:H0.status,runFenceToken:H0.run_fence_token,title:H0.title??null}:null},completeRunIfNotCompleted:async(K0,H0)=>{let R0=await l.completeRunIfNotCompleted(K0,H0);if(W_0(_5,H0,K0,R0),R0)await Vd(i,K0,H0,p);return R0},markRunRequiresAction:async(K0,H0)=>{let R0=await l.requiresActionIfInProgress(K0,H0);return W_0(_5,H0,K0,R0),R0},markRunFailed:async(K0,H0,R0,A0)=>{let D1=await l.markRunFailed(K0,H0,R0,A0);if(W_0(_5,H0,K0,D1),D1)await Vd(i,K0,H0,p);return D1},clearSynthesizedError:async(K0,H0)=>{await l.messageParts().replaceMessageParts(K0,OE(K0,H0),[])},persistTitle:(K0,H0,R0)=>l.update(K0,H0,{title:R0}),onTitleUpdated:async({runId:K0,orgId:H0,title:R0})=>{let A0=await l.get(K0,H0).catch(()=>null);_5.emit(H0,NF(K0,A0?.status??"in_progress",{title:R0,virtualMcpId:A0?.virtual_mcp_id??void 0,createdBy:A0?.created_by,triggerId:A0?.trigger_id,branch:A0?.branch??null,harnessId:A0?.harness_id??void 0,createdAt:A0?.created_at,updatedAt:A0?.updated_at}))},bumpProgress:async({runId:K0,orgId:H0})=>{await l.bumpProgress(K0,H0)},recordCompleted:async({runId:K0,orgId:H0,distinctId:R0,usage:A0})=>{f1.capture({distinctId:R0,event:"chat_message_completed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",input_tokens:A0.inputTokens,output_tokens:A0.outputTokens,total_tokens:A0.totalTokens}})},recordFailed:async({runId:K0,orgId:H0,distinctId:R0,reason:A0,kind:D1})=>{f1.capture({distinctId:R0,event:"chat_message_failed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",error_category:D1,error_message:A0}})},purgeRun:async(K0)=>{F.purge(K0)}}),xf$({studioContextFactory:g,systemDatabaseUrl:Xs0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),LJ8(),Dp1(),s88(),Z48(),H48(),VX8(),Zb$(),O48(),zb$(),AX8();let v0=async(K0,H0,R0)=>{let A0=await V.findById(K0,H0);if(!A0)throw Error("Automation not found");return RJ1({automationId:A0.id,organizationId:A0.organization_id,triggerId:null})},G0=new Xp(V,({automation:K0,trigger:H0,contextMessages:R0,idempotencyKey:A0})=>L80({automationId:K0.id,organizationId:K0.organization_id,triggerId:H0.id,contextMessages:R0},{idempotencyKey:A0})),N0=[JK(),Gg(),qN()];for(let K0 of N0)F_0(K0).then(()=>{}).catch((H0)=>console.error("[monitoring] Retention cleanup failed:",H0));let o=()=>x8.api.deleteAllExpiredApiKeys().catch((K0)=>console.error("[auth] Expired API key cleanup failed:",K0));o(),setInterval(o,86400000).unref(),E.use("*",async(K0,H0)=>{if(S_0(K0.req.path))return H0();let R0={measure:async(D1,x$)=>{cW(K0,D1);try{return await x$()}finally{P3(K0,D1)}}},A0=await cQ.create(K0.req.raw,{timings:R0});A0.automationRunner=v0,K0.set("studioContext",A0);try{await H0()}finally{let D1=A0.pendingRevalidations;if(D1.length>0)Promise.race([Promise.allSettled(D1),z$(30000)]).catch((i$)=>console.error("[studio] revalidation cleanup error:",i$))}}),E.use("/api/:org/decopilot/*",$p),E.use("/api/:org/v1/*",$p),E.use("/api/:org/files/*",$p),E.use("*",async(K0,H0)=>{if(dJ8(K0.req.path))return H0();let R0=K0.get("studioContext");if(!R0?.organization?.id||!R0?.auth?.user?.id)return H0();if(!(await R0.storage.orgSsoConfig.getByOrgId(R0.organization.id))?.enforced)return H0();if(!await R0.storage.orgSsoSessions.isValid(R0.auth.user.id,R0.organization.id))return K0.json({error:"SSO authentication required for this organization"},403);return H0()});let $0=new Z1;$0.use("*",mH({mountPath:"/api/org-sso"})),$0.route("/",yS0()),E.route("/api/org-sso",$0),E.get("/api/tools/management",(K0)=>{return K0.json({tools:hn0,grouped:tP()})}),E.use("/mcp/*",async(K0,H0)=>{cW(K0,"mcp");try{return await H0()}finally{P3(K0,"mcp")}});let Z0=async(K0,H0)=>{let R0=K0.var.studioContext;if(!R0.auth.user?.id&&!R0.auth.apiKey?.id){let A0=new URL(K0.req.url),D1=K0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),x$=D1?`${D1}://${A0.host}`:A0.origin;return K0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${x$}${A0.pathname}/.well-known/oauth-protected-resource"`}})}return await H0()};if(E.use("/mcp/:connectionId?",Z0),E.use("/mcp/gateway/:virtualMcpId?",Z0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Z0),E.use("/mcp/self",Z0),PW()){let{mountDevRoutes:K0}=(hJ8(),j_0(gJ8));K0(E,Z0)}let r=new Z1;r.use("*",mH({mountPath:"/mcp"})),r.route("/",xM0()),E.route("/mcp",r);let Y0=new Z1;Y0.use("*",mH({mountPath:"/mcp/self"})),Y0.route("/",MC0()),E.route("/mcp/self",Y0);let d0=new Z1;d0.use("*",mH({mountPath:"/mcp"})),d0.route("/",gM0()),E.route("/mcp",d0),E.use("/api/:org/models/*",async(K0,H0)=>{cW(K0,"llm_models");try{return await H0()}finally{P3(K0,"llm_models")}});let S0=m68({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",S0),E.route("/api",vX8);let W1=new Z1;W1.use("*",mH({mountPath:"/api"})),W1.route("/",SC0()),E.route("/api",W1),E.route("/api",aY8);let u0=new Z1;u0.use("*",mH({mountPath:"/api"})),u0.route("/",CC0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",u0);let L0=new Mr(Z.db),j0=new Z1;j0.use("*",mH({mountPath:"/api"})),j0.route("/",cS0()),E.route("/api",j0),E.route("/api/deco-sites",X58()),E.route("/api/deco-apps",pY8());let l0=new Z1;l0.use("*",mH({mountPath:"/api/deco-sites"})),l0.route("/",dS0()),E.route("/api/deco-sites",l0),E.route(bS0,k68()),E.route(f78,h78()),E.route("/api/_editor-resolve",$X8()),E.route(a48,e48()),E.route(VS0,H68());let O1=E0(),Q1=O1.elevenlabsApiKey?new eC0({apiKey:O1.elevenlabsApiKey,model:O1.elevenlabsVoiceModel,conversationModel:O1.elevenlabsConversationModel,voiceId:O1.elevenlabsVoiceId}):null,_0={openai:O1.openaiLiveApiKey?new xD1({apiKey:O1.openaiLiveApiKey,voice:O1.openaiLiveVoice}):null,elevenlabs:Q1?new bD1(Q1,()=>U?.getConnection()??null):null},m0=new uD1({adapter:Q1,conversationAdapters:_0,defaults:O1,secret:O1.studioJwtSecret??O1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),i0=RY8({voiceSessions:m0,kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:_5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:PW(),mcpAuth:Z0,oauthProxyHandler:cJ8,watchHandler:tJ8,betterAuthProtectedResourceHandler:P,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((K0)=>{return K0.json({error:"Not Found",path:K0.req.path},404)}),E.onError(i68),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([_5.stop(),Qz?Promise.resolve(Qz()).finally(()=>{Qz=null}):Promise.resolve()]),U)await U.drain().catch((K0)=>console.error("[shutdown] NATS drain error:",K0));console.log("[shutdown] Flushing telemetry..."),await oX().catch((K0)=>console.error("[shutdown] Telemetry flush error:",K0)),console.log("[shutdown] Closing database..."),await OZ$(Z).catch((K0)=>console.error("[shutdown] Database close error:",K0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await DO.registerQueue(C3,{partitionQueue:!0,concurrency:jJ1,minPollingIntervalMs:EJ1}),await DO.registerQueue(S3,{partitionQueue:!0,concurrency:GX1,priorityEnabled:!0}),await DO.registerQueue(TN,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await DO.registerQueue(RN,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await DO.registerQueue(PO,{partitionQueue:!0,concurrency:bf$}),await DO.registerQueue(Wz,jb$),await TN1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((K0)=>DO.deleteQueue(K0))),await zJ1(Z.pool),fY$().catch((K0)=>{console.error("[studio-pack-backfill] failed:",K0)}),Op1().catch((K0)=>{console.error("[org-fs] public-sets boot sync kick failed:",K0)})}})}var mJ8,uJ8=5000,Qz=null,cJ8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),Y=Q[Q.length-1],X=$.get("studioContext");if(!X)X=await cQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await ti(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=H.origin;let N=await f40(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(Y==="authorize")O=B.authorization_endpoint;else if(Y==="token")O=B.token_endpoint;else if(Y==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=Y88(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!nJ8(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(w48(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let T=$.req.header("Authorization");if(T)E.Authorization=T;let A,P=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let p=atob(T.slice(6).trim()),U0=p.indexOf(":");if(U0!==-1){let v0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.slice(U0+1));P=v0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)P=g;if(typeof l==="string"&&l)q=l;let i=new URLSearchParams;for(let[p,U0]of y.entries())i.append(p,U0.toString());A=i.toString()}else if(Y==="register"&&z?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),l={};try{l=g?JSON.parse(g):{}}catch{A=g}let i=typeof l==="object"&&l!==null&&!Array.isArray(l);if(A===void 0&&!i)A=g;if(A===void 0){let p=l,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},A=JSON.stringify(p),E["Content-Type"]="application/json"}}else A=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:A,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,i=null;try{i=await oi(G.connection_url)??O}catch{i=O}let p={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:l,clientId:P,clientSecret:q,tokenEndpoint:i};await new w9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},tJ8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let Y=Z.organization?.id;if(!Y)return $.json({error:"organization id missing"},400);let X=$.req.query("types"),J=X?X.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!lU(Y)||!await cU(Z)))return $.json({error:"forbidden"},403);let W=G?aR0:Y;if(G)_D({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return FO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!_5.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{_5.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),_5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),_5.remove(W,K),N()})})})},Ns6,Os6,Ls6=()=>Ds6(x8),ws6=()=>Bs6(x8);var rJ8=D(()=>{a$();X$();Lp1();a88();Q48();F48();A80();AQ1();L48();b$0();I9();lc();p8();J8();TS0();A48();MJ1();Z3();BU();pU1();SG();k6();G6();eU1();s48();$68();F68();JN1();S68();BN1();zN1();PN1();HH();WS0();AN1();p68();qS0();qY8();SY8();CY8();xY8();iY8();MN1();nY8();fM0();j80();eY8();hM0();ZD1();ZX8();eB1();GX8();OX8();jX8();EX8();PX8();TX8();qX8();SX8();sD1();CN1();bX8();$D1();rB1();Q50();sX8();SJ();fT0();cQ1();ne();oe();CJ1();aX8();$J8();jN1();WJ8();eY1();KJ8();Go();kr();CD();P9();BU1();BJ8();wJ8();$30();KO1();_3();RN1();SD();rY1();$30();sq0();qn0();Mn0();EJ8();nu();TJ8();Ap();pU1();zd();fd();cq0();mJ8=C(BK(),1);Ns6=new Fs6,Os6=new Set([C3,S3,TN,RN,PO,Wz])});var $G8={};$6($G8,{resolveClientDir:()=>qs6,resolveAssetPathWithTraversalCheck:()=>eJ8,isPathWithinDirectory:()=>aJ8,createAssetHandler:()=>Ms6});import{resolve as l60,dirname as Es6,join as zs6,extname as Ps6,basename as As6,sep as sJ8}from"path";function Ts6($,Z){if($===Z||As6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${sJ8}assets${sJ8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function aJ8($,Z){let Q=l60(Z),Y=l60($);return Y===Q||Y.startsWith(Q+"/")}function eJ8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=l60(Z,Q);if(!aJ8(Y,Z))return null;return Y}function qs6($,Z="../client"){let Q=new URL($),Y=Es6(Q.pathname);return l60(Y,Z)}function Ms6($={}){let{env:Z="production",clientDir:Q=Rs6,isServerPath:Y=()=>!1}=$;if(Z==="development")return async function(J){return null};return async function(J){if(J.method!=="GET")return null;let G=new URL(J.url),W;try{W=decodeURIComponent(G.pathname)}catch{return null}if(Y(W))return null;let K=eJ8({requestPath:W,clientDir:Q});if(!K)return null;let H=zs6(K,"index.html"),F=l60(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Ps6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:Ts6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var Rs6="./dist/client";var ZG8=()=>{};var QG8={};$6(QG8,{tryUpgradePreviewWs:()=>vs6,tryHandlePreviewHttp:()=>_s6,previewWebSocketHandler:()=>bs6,parsePreviewBaseDomain:()=>Cs6,isPreviewWsData:()=>U_0,extractHandleFromHost:()=>wO1});function ks6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function Ss6(){return new Response(Vs6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function Cs6($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let Y=Q.hostname;if($.includes("{handle}")){let X=Y.indexOf(".");if(X<=0||X===Y.length-1)return null;return Y.slice(X+1)}return Y}function wO1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),Y=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!Y.endsWith(J))return null;let G=Y.slice(0,Y.length-J.length);if(!G||G.includes("."))return null;return G}async function _s6($,Z){let Q=wO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return m60(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(_m)&&ks6($))return Ss6();return X.headers.delete(_m),X}function m60($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function U_0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function vs6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=wO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return m60(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return m60(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return m60(404,"not found");let W=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,K=$.headers.get("sec-websocket-protocol"),H=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return m60(426,"upgrade failed");return}function c60($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var Is6=256,Vs6='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',bs6;var YG8=D(()=>{j10();bs6={open($){let Z=$.data;if(!U_0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),c60($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let Y=Z.pending.shift();if(Y!==void 0)Q.send(Y)}}),Q.addEventListener("message",(Y)=>{if(Z.closed)return;$.send(Y.data)}),Q.addEventListener("close",(Y)=>{c60($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{c60($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!U_0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=Is6){c60($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!U_0(Z))return;c60($,Z,1000,"")}}});var WG8={};$6(WG8,{printBanner:()=>fs6,bannerLines:()=>GG8,BANNER_LINES:()=>XG8,BANNER_GRADIENT:()=>JG8});function xs6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function GG8($){let Z=XG8.map((Q,Y)=>{let[X,J,G]=xs6(JG8[Y]);return`\x1B[38;2;${X};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function fs6($){console.log("");for(let Z of GG8($))console.log(Z);console.log("")}var XG8,JG8;var KG8=D(()=>{XG8=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],JG8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});a$();var SO1="13";function CO1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:SO1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}a$();import MG8 from"pg";var _O1=8314027461559302n,IG8=600000,VG8=500;async function vO1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=IG8}=$,X=$.log??((K)=>console.log(K)),J=new MG8.Client({connectionString:Q});await J.connect();let G=Date.now(),W=!1;try{while(!W){if(W=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[_O1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=Y)throw Error(`Timed out after ${Y}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await z$(VG8)}let K=Date.now()-G;if(K>1000)X(`[dbos] waited ${K}ms for the migration lock; another process migrated first`);return await Z()}finally{if(W)try{await J.query("SELECT pg_advisory_unlock($1)",[_O1.toString()])}catch{}await J.end().catch(()=>{})}}X$();A_0();k6();function M38(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function h_0($,Z){for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Y===void 0)continue;if(Y===Z)return $[Q+1];if(Y.startsWith(`${Z}=`))return Y.slice(Z.length+1)}return}function LL1(){let $=M38();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:h_0($,"--cpu-prof-dir")??process.cwd(),name:h_0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(h_0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}c_0();var J50;function qL1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Fz();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...Y}))};return Z().catch(()=>{}),J50=setInterval(()=>void Z().catch(()=>{}),$),J50.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),Y=typeof Q==="string"?Q:JSON.stringify(Q),X=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(X,Y),console.log(JSON.stringify({msg:"heap-snapshot-written",path:X}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(J50)clearInterval(J50)}}import*as k38 from"bun:jsc";var{startSamplingProfiler:S38,samplingProfilerStackTraces:C38}=k38;function ML1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{S38()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,Y=performance.now()+Z,X=()=>{let J=performance.now(),G=J-Y;Y=J+Z;let W=[];try{W=C38()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function IL1(){LL1();let $=[qL1(),RL1(),ML1()];return()=>{for(let Z of $)Z()}}import{existsSync as ds6}from"fs";var WG=E0();BL1();var{DBOS:d60,DBOSClient:ys6}=await import("@dbos-inc/dbos-sdk");function TO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var gs6=[C3,S3,TN,RN,PO,Wz],hs6=WG.dispatchRole==="worker"?gs6:WG.dispatchRole==="api"?[]:void 0;d60.setConfig(CO1({systemDatabaseUrl:TO1(WG.databaseUrl,WG.databasePgSsl),poolSize:WG.dbosPoolSize,executorID:WG.podName,listenQueues:hs6}));var{createApp:us6}=await Promise.resolve().then(() => (rJ8(),oJ8)),{isServerPath:ls6}=await Promise.resolve().then(() => (Q50(),rO1)),{createAssetHandler:cs6,resolveClientDir:BG8}=await Promise.resolve().then(() => (ZG8(),$G8)),ms6=WG.port,HG8=BG8(import.meta.url,"../client"),DG8=ds6(HG8)?HG8:BG8(import.meta.url,"../dist/client"),is6=cs6({clientDir:DG8,isServerPath:ls6}),ps6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function ns6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(ps6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:ts6,tryHandlePreviewHttp:os6,tryUpgradePreviewWs:rs6,previewWebSocketHandler:jO1,isPreviewWsData:EO1}=await Promise.resolve().then(() => (YG8(),QG8)),{getOrInitSharedRunner:OG8}=await Promise.resolve().then(() => (vW(),DR$)),LG8=ts6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),FG8={baseDomain:LG8??"",getRunner:OG8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())OG8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var N_0=await us6({clientDir:DG8}),zO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),UG8=process.env.DBOS_CONDUCTOR_URL?.trim();await vO1({databaseUrl:TO1(WG.databaseUrl,WG.databasePgSsl)},()=>d60.launch({...zO1?{conductorKey:zO1}:{},...zO1&&UG8?{conductorURL:UG8}:{}}));console.log(`[dbos] application version: ${d60.applicationVersion}`);var PO1=5,AO1=0;await E8(async()=>{AO1++;try{return await N_0.initDbos()}catch($){let Z=AO1>=PO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${AO1}/${PO1} failed, ${Z}`,$),$}},{maxAttempts:PO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!WG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (KG8(),WG8));console.log("");for(let Z of $())console.log(Z)}var ss6=Bun.serve({idleTimeout:0,port:ms6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(LG8){let Y=await rs6($,Z,FG8);if(Y===void 0)return;if(Y)return Y;let X=await os6($,FG8);if(X)return X}let Q=await is6($);if(Q)return ns6(Q);return N_0.fetch($,{server:Z})},websocket:{open($){if(EO1($.data))jO1.open($)},message($,Z){if(EO1($.data))jO1.message($,Z)},close($){if(EO1($.data))jO1.close($)}},development:!1}),as6=IL1();if(WG.localMode)Promise.resolve().then(() => (gf(),kq0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let Y=await Q();if(Y>0)console.log(`[local-mode] cleared ${Y} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let X=await $()}catch(Y){console.error("Failed to seed local mode:",Y)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (gf(),kq0));Z()}catch{}});var NG8=!1;async function es6($){let Z;try{Z=await ys6.create({systemDatabaseUrl:TO1(WG.databaseUrl,WG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:S3,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let Y=Q.map((X)=>X.workflowID);await Z.resumeWorkflows(Y,{queueName:S3}),console.log(`[shutdown] re-enqueued ${Y.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,Y)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function B_0($){if(NG8)return;NG8=!0,console.log(`
|
|
3737
3737
|
[shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),Y=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);Y.unref?.();let X=0;try{as6(),N_0.markShuttingDown();let J=xO1(WG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await z$(J),await ss6.stop(!0);let G=d60.executorID;await d60.shutdown(),await es6(G),await N_0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>B_0("SIGTERM"));process.on("SIGINT",()=>B_0("SIGINT"));process.on("SIGHUP",()=>B_0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),B_0("uncaughtException")});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as s,M as u}from"./index-D7vpkNpx.js";import{C as f}from"./index-CqWakSDG.js";import{a as x}from"./thread-route-B1i-YF05.js";import{u as g}from"./use-task-metadata-Cv3dpO4A.js";import{AppViewContent as h}from"./project-app-view-BjIguUrX.js";import"./use-mobile-BpF9Jrqb.js";import"./icon-button-DgiQbLhR.js";import"./agent-icon-gqPHPB4Y.js";import"./AlertCircle-EXoit0VR.js";import"./Tool01-D5XZ3j_h.js";import"./ArrowUp-C967LTO3.js";import"./ArrowLeft-CZl4IG9d.js";import"./ArrowRight-ynx7Kk3Y.js";import"./ShoppingBag01-7RPyjKc9.js";import"./ZoomOut-C2mSV77i.js";import"./Palette-DVtaHs6g.js";import"./CheckCircle-DaRFB58k.js";import"./Check-DYU0cqH0.js";import"./ChevronUp-1BtsnnGR.js";import"./UserSquare-BhfPuhhW.js";import"./Copy01-7axZOkp2.js";import"./CreditCard01-DLskf0lZ.js";import"./DotsVertical-R7Lhs1jB.js";import"./Image01-BzYK7BAk.js";import"./XClose-m1oHe8Ei.js";import"./Key01-CuXQeehV.js";import"./Link01-Ccb6VRjZ.js";import"./LinkExternal01-C1vI2I8q.js";import"./Monitor01-C-XDlS46.js";import"./Sun-BpfGbo0d.js";import"./Plus-B3NzzZDC.js";import"./SearchMd-CfYmU1q5.js";import"./Trash01-n9X6BTAG.js";import"./Upload01-B-kPkCX8.js";import"./User01-BOdIl4BK.js";import"./Users01-B3tJxARW.js";import"./X-ZnDhoeTC.js";import"./use-chat-layout-state-DzjVmKrJ.js";import"./use-file-configs-BKA73bkX.js";import"./use-organization-settings-DDTth-SD.js";import"./schema-DjOOHE-s.js";import"./task-board-vZO_MuJI.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-CLA2TL_H.js";import"./use-project-scope-MJo-GqZk.js";import"./repository-binding-BRzMyNd-.js";import"./use-mcp-client-E0dYIETF.js";import"./auth-DGx4b0iv.js";import"./thread-intent-Ca_Yoh38.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-CUYh9oXG.js";import"./tooltip-BLCC5qTC.js";import"./index-q3kxufaz.js";import"./toolbar-icon-button-BBSogeWq.js";import"./shell-layout-DGeKADCV.js";import"./avatar-DnOjLJQx.js";import"./download-app-dialog-YvteZiq_.js";import"./dialog-BfsKopkQ.js";import"./command-Diwimg3L.js";import"./index-aQJEduDK.js";import"./integration-icon-Bya4vY55.js";import"./project-icon-O4-f50YH.js";import"./new-project-dialog-BW0HFxjr.js";import"./input-BnrLXT6a.js";import"./label-xqYZ8A4v.js";import"./repository-import-picker-Bd451_6b.js";import"./use-navigate-to-agent-1dFtFdvX.js";import"./repository-picker-CKP58omn.js";import"./useInfiniteQuery-BtvRekid.js";import"./infiniteQueryObserver-Bwwsills.js";import"./collection-search-BDDQTeDK.js";import"./use-debounced-value-LHTQw9fR.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-wWodfoje.js";import"./autosend-DvQ5TJDu.js";import"./use-org-sso-DFexOZO2.js";import"./resizable-BG66xZMy.js";import"./gateway-client-C26GEwb-.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-B3I9B-6A.js";import"./sandbox-lifecycle-context-NylSGOpD.js";import"./use-session-runtime-DokzL7ga.js";import"./chat-context-cBuev8Ym.js";import"./use-decopilot-events-HL-8aRpe.js";import"./use-ai-providers-CQYRYuSe.js";import"./location-DBePU4bz.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-IbOTFGMv.js";import"./types-SAm6Uxda.js";import"./task-route-CLqz_VFU.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-B2tqkA11.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-DUIAtLX6.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-C6gZY9Lz.js";import"./authenticate-and-persist-oauth-8lXocrhm.js";import"./mcp-oauth-CZYvLNEt.js";import"./track-C6v2T03V.js";import"./extract-connection-data-BD6fCKZu.js";import"./connection-DogH4gFE.js";const $=u("/shell/$org/org-shell/agent-shell/projects/$agentId/apps/$connectionId/$toolName");function j(){const t=c.c(9),{connectionId:o,toolName:r}=$.useParams(),l=x(),i=g(l);let p;t[0]!==o||t[1]!==i?.expanded_tools||t[2]!==r?(p=i?.expanded_tools?.find(a=>a.appId===o&&a.toolName===r),t[0]=o,t[1]=i?.expanded_tools,t[2]=r,t[3]=p):p=t[3];const d=p,e=`${o}:${r}`,n=d?.args;let m;return t[4]!==o||t[5]!==e||t[6]!==n||t[7]!==r?(m=s.jsx(h,{connectionId:o,toolName:r,args:n},e),t[4]=o,t[5]=e,t[6]=n,t[7]=r,t[8]=m):m=t[8],m}function jo(){const t=c.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(f.Content,{children:s.jsx(j,{})}),t[0]=o):o=t[0],o}export{jo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as p,aS as b,u as g}from"./index-D7vpkNpx.js";import{C as j}from"./index-CqWakSDG.js";import{F as v,H as S}from"./file-share-button-BC3jgYqR.js";import{u as k,b as y,e as _}from"./use-org-fs-B_tMae1z.js";import{S as w}from"./settings-tab-D5m6mOZQ.js";import{b as M}from"./thread-route-B1i-YF05.js";import"./use-mobile-BpF9Jrqb.js";import"./icon-button-DgiQbLhR.js";import"./agent-icon-gqPHPB4Y.js";import"./AlertCircle-EXoit0VR.js";import"./Tool01-D5XZ3j_h.js";import"./ArrowUp-C967LTO3.js";import"./ArrowLeft-CZl4IG9d.js";import"./ArrowRight-ynx7Kk3Y.js";import"./ShoppingBag01-7RPyjKc9.js";import"./ZoomOut-C2mSV77i.js";import"./Palette-DVtaHs6g.js";import"./CheckCircle-DaRFB58k.js";import"./Check-DYU0cqH0.js";import"./ChevronUp-1BtsnnGR.js";import"./UserSquare-BhfPuhhW.js";import"./Copy01-7axZOkp2.js";import"./CreditCard01-DLskf0lZ.js";import"./DotsVertical-R7Lhs1jB.js";import"./Image01-BzYK7BAk.js";import"./XClose-m1oHe8Ei.js";import"./Key01-CuXQeehV.js";import"./Link01-Ccb6VRjZ.js";import"./LinkExternal01-C1vI2I8q.js";import"./Monitor01-C-XDlS46.js";import"./Sun-BpfGbo0d.js";import"./Plus-B3NzzZDC.js";import"./SearchMd-CfYmU1q5.js";import"./Trash01-n9X6BTAG.js";import"./Upload01-B-kPkCX8.js";import"./User01-BOdIl4BK.js";import"./Users01-B3tJxARW.js";import"./X-ZnDhoeTC.js";import"./use-chat-layout-state-DzjVmKrJ.js";import"./use-file-configs-BKA73bkX.js";import"./use-organization-settings-DDTth-SD.js";import"./schema-DjOOHE-s.js";import"./task-board-vZO_MuJI.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-CLA2TL_H.js";import"./use-project-scope-MJo-GqZk.js";import"./repository-binding-BRzMyNd-.js";import"./use-mcp-client-E0dYIETF.js";import"./auth-DGx4b0iv.js";import"./thread-intent-Ca_Yoh38.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-CUYh9oXG.js";import"./tooltip-BLCC5qTC.js";import"./index-q3kxufaz.js";import"./toolbar-icon-button-BBSogeWq.js";import"./shell-layout-DGeKADCV.js";import"./avatar-DnOjLJQx.js";import"./download-app-dialog-YvteZiq_.js";import"./dialog-BfsKopkQ.js";import"./command-Diwimg3L.js";import"./index-aQJEduDK.js";import"./integration-icon-Bya4vY55.js";import"./project-icon-O4-f50YH.js";import"./new-project-dialog-BW0HFxjr.js";import"./input-BnrLXT6a.js";import"./label-xqYZ8A4v.js";import"./repository-import-picker-Bd451_6b.js";import"./use-navigate-to-agent-1dFtFdvX.js";import"./repository-picker-CKP58omn.js";import"./useInfiniteQuery-BtvRekid.js";import"./infiniteQueryObserver-Bwwsills.js";import"./collection-search-BDDQTeDK.js";import"./use-debounced-value-LHTQw9fR.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-wWodfoje.js";import"./autosend-DvQ5TJDu.js";import"./use-org-sso-DFexOZO2.js";import"./resizable-BG66xZMy.js";import"./popover-EnACPYBz.js";import"./extract-connection-data-BD6fCKZu.js";import"./metadata-D72DunRR.js";import"./connection-DogH4gFE.js";import"./chat-context-cBuev8Ym.js";import"./use-decopilot-events-HL-8aRpe.js";import"./use-ai-providers-CQYRYuSe.js";import"./location-DBePU4bz.js";import"./build-improve-prompt-doc-CtdxxlGK.js";import"./empty-state-DrGS4sd9.js";import"./use-date-fns-locale-CtFYi5Xr.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-qMM8KOYF.js";import"./mcp-oauth-CZYvLNEt.js";import"./alert-dialog-BZKVH7PJ.js";import"./textarea-D867RzQ_.js";import"./use-debounced-autosave-Bzv6MvqP.js";import"./add-connection-dialog-Dd1NdT62.js";import"./connection-card-BLmZ5J-R.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-N4Q9uPuE.js";import"./form-DUIAtLX6.js";import"./select-B_NxxTsf.js";import"./connection-form-helpers-BuFWC6YW.js";import"./authenticate-and-persist-oauth-8lXocrhm.js";import"./collection-tabs-c86gAdo-.js";import"./badge-D50CHyIl.js";import"./use-infinite-scroll-DFEtI2cR.js";import"./useSuspenseInfiniteQuery-Dc0JdGoj.js";import"./file-type-icon-B3qTAR6-.js";import"./checkbox-K92GWElu.js";import"./search-input-Bwsoqqen.js";import"./use-mcp-auth-status-CvqvKA13.js";import"./types-SAm6Uxda.js";import"./use-mcp-tools-B3I9B-6A.js";import"./use-mcp-prompts-BpDuk1qB.js";import"./utils-CVEq3hMx.js";import"./switch-BEU_Kfwz.js";import"./scroll-area-CTvnPqyG.js";import"./optimistic-project-sidebar-views-CpDBKkjl.js";import"./virtual-mcp-C0AibqX1.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-BkVHiJ7f.js";import"./use-secrets-hVsAVNKD.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function P(i){const t=c.c(5),{label:r}=i;let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e=p.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=e):e=t[0];let o;t[1]!==r?(o=r&&p.jsx("p",{className:"text-xs text-muted-foreground",children:r}),t[1]=r,t[2]=o):o=t[2];let m;return t[3]!==o?(m=p.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[e,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let e;t[0]===Symbol.for("react.memo_cache_sentinel")?(e={refetchIntervalWhenAbsent:2e3},t[0]=e):e=t[0];const o=k(x,r,e),m=y(x)(r);if(o.isPending||!o.data){const h=!o.isPending&&!o.data?"Waiting for the deck to sync…":void 0;let l;return t[1]!==h?(l=p.jsx(P,{label:h}),t[1]=h,t[2]=l):l=t[2],l}let s;t[3]!==o.data?(s=_(o.data),t[3]=o.data,t[4]=s):s=t[4];const f=o.data.shareMode??"private",u=o.data.effectivePublic??!1,d=window.location.origin+m;let a;t[5]!==r||t[6]!==f||t[7]!==u||t[8]!==d?(a=p.jsx(v,{volume:x,path:r,shareMode:f,effectivePublic:u,url:d}),t[5]=r,t[6]=f,t[7]=u,t[8]=d,t[9]=a):a=t[9];let n;return t[10]!==r||t[11]!==m||t[12]!==s||t[13]!==a?(n=p.jsx(S,{readUrl:m,marker:s,title:r,savePath:r,trailing:a}),t[10]=r,t[11]=m,t[12]=s,t[13]=a,t[14]=n):n=t[14],n}function C(){const i=c.c(4);let t;i[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},i[0]=t):t=i[0];const r=g(t),e=M(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==e?(m=o?p.jsx(D,{path:o},o):p.jsx(w,{virtualMcpId:e}),i[1]=o,i[2]=e,i[3]=m):m=i[3],m}function Jo(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=p.jsx(j.Content,{children:p.jsx(C,{})}),i[0]=t):t=i[0],t}export{Jo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as s,j as e}from"./index-D7vpkNpx.js";import{C as a}from"./index-CqWakSDG.js";import{p as n,L as c}from"./library-tab-RHIAvHyD.js";import{u as l}from"./use-project-scope-MJo-GqZk.js";import"./use-mobile-BpF9Jrqb.js";import"./icon-button-DgiQbLhR.js";import"./agent-icon-gqPHPB4Y.js";import"./AlertCircle-EXoit0VR.js";import"./Tool01-D5XZ3j_h.js";import"./ArrowUp-C967LTO3.js";import"./ArrowLeft-CZl4IG9d.js";import"./ArrowRight-ynx7Kk3Y.js";import"./ShoppingBag01-7RPyjKc9.js";import"./ZoomOut-C2mSV77i.js";import"./Palette-DVtaHs6g.js";import"./CheckCircle-DaRFB58k.js";import"./Check-DYU0cqH0.js";import"./ChevronUp-1BtsnnGR.js";import"./UserSquare-BhfPuhhW.js";import"./Copy01-7axZOkp2.js";import"./CreditCard01-DLskf0lZ.js";import"./DotsVertical-R7Lhs1jB.js";import"./Image01-BzYK7BAk.js";import"./XClose-m1oHe8Ei.js";import"./Key01-CuXQeehV.js";import"./Link01-Ccb6VRjZ.js";import"./LinkExternal01-C1vI2I8q.js";import"./Monitor01-C-XDlS46.js";import"./Sun-BpfGbo0d.js";import"./Plus-B3NzzZDC.js";import"./SearchMd-CfYmU1q5.js";import"./Trash01-n9X6BTAG.js";import"./Upload01-B-kPkCX8.js";import"./User01-BOdIl4BK.js";import"./Users01-B3tJxARW.js";import"./X-ZnDhoeTC.js";import"./use-chat-layout-state-DzjVmKrJ.js";import"./use-file-configs-BKA73bkX.js";import"./use-organization-settings-DDTth-SD.js";import"./schema-DjOOHE-s.js";import"./task-board-vZO_MuJI.js";import"./site-slug-DebpOoQq.js";import"./thread-route-B1i-YF05.js";import"./use-panel-navigate-CLA2TL_H.js";import"./thread-intent-Ca_Yoh38.js";import"./use-mcp-client-E0dYIETF.js";import"./auth-DGx4b0iv.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-CUYh9oXG.js";import"./tooltip-BLCC5qTC.js";import"./index-q3kxufaz.js";import"./toolbar-icon-button-BBSogeWq.js";import"./shell-layout-DGeKADCV.js";import"./avatar-DnOjLJQx.js";import"./download-app-dialog-YvteZiq_.js";import"./dialog-BfsKopkQ.js";import"./command-Diwimg3L.js";import"./index-aQJEduDK.js";import"./integration-icon-Bya4vY55.js";import"./project-icon-O4-f50YH.js";import"./new-project-dialog-BW0HFxjr.js";import"./input-BnrLXT6a.js";import"./label-xqYZ8A4v.js";import"./repository-import-picker-Bd451_6b.js";import"./use-navigate-to-agent-1dFtFdvX.js";import"./repository-binding-BRzMyNd-.js";import"./repository-picker-CKP58omn.js";import"./useInfiniteQuery-BtvRekid.js";import"./infiniteQueryObserver-Bwwsills.js";import"./collection-search-BDDQTeDK.js";import"./use-debounced-value-LHTQw9fR.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-wWodfoje.js";import"./autosend-DvQ5TJDu.js";import"./use-org-sso-DFexOZO2.js";import"./resizable-BG66xZMy.js";import"./search-toggle-CvwX3E9G.js";import"./alert-dialog-BZKVH7PJ.js";import"./location-DBePU4bz.js";import"./use-org-fs-B_tMae1z.js";import"./use-org-repo-syncs-Cq4i78UD.js";import"./textarea-D867RzQ_.js";import"./markdown-FK75_ZkN.js";import"./org-file-open-context-BxJKqWxk.js";import"./file-share-button-BC3jgYqR.js";import"./popover-EnACPYBz.js";import"./preview-dialog-DRfno71Z.js";import"./preview-content-CjSvHCVo.js";import"./file-preview-B2Cuzcwj.js";import"./utils-D2Tojcb4.js";import"./editor-BtXZHuG_.js";import"./file-type-icon-B3qTAR6-.js";import"./folder-icon-p36chBGp.js";import"./skill-md-ChfVs4uF.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-B0XqrBUe.js";function ro(){const t=s.c(6),{project:o}=l(),p=o?.id??"pending";let r;t[0]!==o?(r=o?n(o):void 0,t[0]=o,t[1]=r):r=t[1];const m=o?.title??void 0;let i;return t[2]!==p||t[3]!==r||t[4]!==m?(i=e.jsx(a.Content,{children:e.jsx(c,{root:r,rootLabel:m},p)}),t[2]=p,t[3]=r,t[4]=m,t[5]=i):i=t[5],i}export{ro as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as a,j as s,u as n}from"./index-D7vpkNpx.js";import{C as l}from"./index-CqWakSDG.js";import{L as c}from"./preview-content-CjSvHCVo.js";import{a as f}from"./use-panel-navigate-CLA2TL_H.js";import{S as u}from"./settings-tab-D5m6mOZQ.js";import{b as h}from"./thread-route-B1i-YF05.js";import"./use-mobile-BpF9Jrqb.js";import"./icon-button-DgiQbLhR.js";import"./agent-icon-gqPHPB4Y.js";import"./AlertCircle-EXoit0VR.js";import"./Tool01-D5XZ3j_h.js";import"./ArrowUp-C967LTO3.js";import"./ArrowLeft-CZl4IG9d.js";import"./ArrowRight-ynx7Kk3Y.js";import"./ShoppingBag01-7RPyjKc9.js";import"./ZoomOut-C2mSV77i.js";import"./Palette-DVtaHs6g.js";import"./CheckCircle-DaRFB58k.js";import"./Check-DYU0cqH0.js";import"./ChevronUp-1BtsnnGR.js";import"./UserSquare-BhfPuhhW.js";import"./Copy01-7axZOkp2.js";import"./CreditCard01-DLskf0lZ.js";import"./DotsVertical-R7Lhs1jB.js";import"./Image01-BzYK7BAk.js";import"./XClose-m1oHe8Ei.js";import"./Key01-CuXQeehV.js";import"./Link01-Ccb6VRjZ.js";import"./LinkExternal01-C1vI2I8q.js";import"./Monitor01-C-XDlS46.js";import"./Sun-BpfGbo0d.js";import"./Plus-B3NzzZDC.js";import"./SearchMd-CfYmU1q5.js";import"./Trash01-n9X6BTAG.js";import"./Upload01-B-kPkCX8.js";import"./User01-BOdIl4BK.js";import"./Users01-B3tJxARW.js";import"./X-ZnDhoeTC.js";import"./use-chat-layout-state-DzjVmKrJ.js";import"./use-file-configs-BKA73bkX.js";import"./use-organization-settings-DDTth-SD.js";import"./schema-DjOOHE-s.js";import"./task-board-vZO_MuJI.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-Ca_Yoh38.js";import"./use-mcp-client-E0dYIETF.js";import"./auth-DGx4b0iv.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-MJo-GqZk.js";import"./repository-binding-BRzMyNd-.js";import"./sheet-CUYh9oXG.js";import"./tooltip-BLCC5qTC.js";import"./index-q3kxufaz.js";import"./toolbar-icon-button-BBSogeWq.js";import"./shell-layout-DGeKADCV.js";import"./avatar-DnOjLJQx.js";import"./download-app-dialog-YvteZiq_.js";import"./dialog-BfsKopkQ.js";import"./command-Diwimg3L.js";import"./index-aQJEduDK.js";import"./integration-icon-Bya4vY55.js";import"./project-icon-O4-f50YH.js";import"./new-project-dialog-BW0HFxjr.js";import"./input-BnrLXT6a.js";import"./label-xqYZ8A4v.js";import"./repository-import-picker-Bd451_6b.js";import"./use-navigate-to-agent-1dFtFdvX.js";import"./repository-picker-CKP58omn.js";import"./useInfiniteQuery-BtvRekid.js";import"./infiniteQueryObserver-Bwwsills.js";import"./collection-search-BDDQTeDK.js";import"./use-debounced-value-LHTQw9fR.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-wWodfoje.js";import"./autosend-DvQ5TJDu.js";import"./use-org-sso-DFexOZO2.js";import"./resizable-BG66xZMy.js";import"./file-preview-B2Cuzcwj.js";import"./use-org-fs-B_tMae1z.js";import"./utils-D2Tojcb4.js";import"./editor-BtXZHuG_.js";import"./file-type-icon-B3qTAR6-.js";import"./markdown-FK75_ZkN.js";import"./org-file-open-context-BxJKqWxk.js";import"./file-share-button-BC3jgYqR.js";import"./popover-EnACPYBz.js";import"./location-DBePU4bz.js";import"./extract-connection-data-BD6fCKZu.js";import"./metadata-D72DunRR.js";import"./connection-DogH4gFE.js";import"./chat-context-cBuev8Ym.js";import"./use-decopilot-events-HL-8aRpe.js";import"./use-ai-providers-CQYRYuSe.js";import"./build-improve-prompt-doc-CtdxxlGK.js";import"./empty-state-DrGS4sd9.js";import"./use-date-fns-locale-CtFYi5Xr.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-qMM8KOYF.js";import"./mcp-oauth-CZYvLNEt.js";import"./alert-dialog-BZKVH7PJ.js";import"./textarea-D867RzQ_.js";import"./use-debounced-autosave-Bzv6MvqP.js";import"./add-connection-dialog-Dd1NdT62.js";import"./connection-card-BLmZ5J-R.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-N4Q9uPuE.js";import"./form-DUIAtLX6.js";import"./select-B_NxxTsf.js";import"./connection-form-helpers-BuFWC6YW.js";import"./authenticate-and-persist-oauth-8lXocrhm.js";import"./collection-tabs-c86gAdo-.js";import"./badge-D50CHyIl.js";import"./use-infinite-scroll-DFEtI2cR.js";import"./useSuspenseInfiniteQuery-Dc0JdGoj.js";import"./checkbox-K92GWElu.js";import"./search-input-Bwsoqqen.js";import"./use-mcp-auth-status-CvqvKA13.js";import"./types-SAm6Uxda.js";import"./use-mcp-tools-B3I9B-6A.js";import"./use-mcp-prompts-BpDuk1qB.js";import"./utils-CVEq3hMx.js";import"./switch-BEU_Kfwz.js";import"./scroll-area-CTvnPqyG.js";import"./optimistic-project-sidebar-views-CpDBKkjl.js";import"./virtual-mcp-C0AibqX1.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-BkVHiJ7f.js";import"./use-secrets-hVsAVNKD.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=a.c(4),{previewPath:m,onClose:p,showSeeInLibrary:o}=r,i=o===void 0?!1:o;let e;return t[0]!==p||t[1]!==m||t[2]!==i?(e=s.jsx("div",{className:"flex h-full w-full flex-col bg-background",children:s.jsx(c,{previewPath:m,onClose:p,showSeeInLibrary:i,variant:"panel"})}),t[0]=p,t[1]=m,t[2]=i,t[3]=e):e=t[3],e}function x(r){const t=a.c(5),{path:m}=r,{closePanel:p}=f();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let e;return t[2]!==i||t[3]!==m?(e=s.jsx(b,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=e):e=t[4],e}function y(){const r=a.c(4);let t;r[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},r[0]=t):t=r[0];const m=n(t),p=h(),o="path"in m&&typeof m.path=="string"?m.path:void 0;let i;return r[1]!==o||r[2]!==p?(i=o?s.jsx(x,{path:o},o):s.jsx(u,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Br(){const r=a.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(l.Content,{children:s.jsx(y,{})}),r[0]=t):t=r[0],t}export{Br as default};
|