decocms 4.445.0 → 4.446.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-C5HVrLZe.js → AlertCircle-Ca-DA_Xo.js} +1 -1
- package/dist/client/assets/{AreaChart-D43Fw6gj.js → AreaChart-6J0SmH8g.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DJk4oPCQ.js → ArrowLeft-BGL-gkHz.js} +1 -1
- package/dist/client/assets/{ArrowUp-CWWobdUx.js → ArrowUp-DCJvUiXa.js} +1 -1
- package/dist/client/assets/{Building02-B3I4JJCN.js → Building02-BMj4gWpR.js} +1 -1
- package/dist/client/assets/{CartesianChart-D-BcWVv1.js → CartesianChart-wEL_dp30.js} +1 -1
- package/dist/client/assets/{Check-PcQs3M4o.js → Check-1kmjHGAt.js} +1 -1
- package/dist/client/assets/{CheckCircle-HgqCvHI2.js → CheckCircle-DZIvsuC9.js} +1 -1
- package/dist/client/assets/{ChevronUp-BkK36MsN.js → ChevronUp-BirkHko8.js} +1 -1
- package/dist/client/assets/{Copy01-CoysgpeW.js → Copy01-C0n9CnUc.js} +1 -1
- package/dist/client/assets/{CreditCard01-C6aogu2h.js → CreditCard01-CCCfodPa.js} +1 -1
- package/dist/client/assets/{DotsVertical-DPKr3IOx.js → DotsVertical-D9Sv34Vj.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-BGg7oCnZ.js → ErrorBarContext-BRRTTo5Y.js} +1 -1
- package/dist/client/assets/{Image01-DGPruqah.js → Image01-DSE2Qnmp.js} +1 -1
- package/dist/client/assets/{Key01-CDcSYqkq.js → Key01-Bc_kctWJ.js} +1 -1
- package/dist/client/assets/{Line-Crij-hKl.js → Line-C6YRqPoH.js} +1 -1
- package/dist/client/assets/{Link01-CLl6j_mc.js → Link01-DRqoYgr7.js} +1 -1
- package/dist/client/assets/{LinkBroken01-CoaVazaJ.js → LinkBroken01-Be5i7wiR.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BvS68qI_.js → LinkExternal01-CYu1u0V8.js} +1 -1
- package/dist/client/assets/{Monitor01-C_aGyUUc.js → Monitor01-B-mcTiTw.js} +1 -1
- package/dist/client/assets/{Palette-BcuggLpF.js → Palette-CfapkMIU.js} +1 -1
- package/dist/client/assets/{Plus-DvM_B5XA.js → Plus-DeJwCuZE.js} +1 -1
- package/dist/client/assets/{SearchMd-Zps5bO1E.js → SearchMd-B-uYGFsm.js} +1 -1
- package/dist/client/assets/{Sector-BktECt-T.js → Sector-CBXMKI9G.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-BWCkeQfV.js → ShoppingBag01-CZuerMtF.js} +1 -1
- package/dist/client/assets/{Sun-CSZHqwWX.js → Sun-Cxwg0J8z.js} +1 -1
- package/dist/client/assets/{Tool01-C3UQzTkW.js → Tool01-D9114OvH.js} +1 -1
- package/dist/client/assets/{Trash01-DNWhfTgH.js → Trash01-DPzDDdie.js} +1 -1
- package/dist/client/assets/{Upload01-Dp_vWLSf.js → Upload01-D29vOgD_.js} +1 -1
- package/dist/client/assets/{User01-C5XGpmJ9.js → User01-Cv1yYcPo.js} +1 -1
- package/dist/client/assets/{UserSquare-xl-CVK1W.js → UserSquare-DxiZzC-7.js} +1 -1
- package/dist/client/assets/{Users01-DZXc12n3.js → Users01-fxv639Iz.js} +1 -1
- package/dist/client/assets/{X-CdL2mAGV.js → X-DNUeDs_E.js} +1 -1
- package/dist/client/assets/{XAxis-BSjyzSv8.js → XAxis-DCqhZwzQ.js} +1 -1
- package/dist/client/assets/{XClose-B2h9zNaw.js → XClose-CQskEvfN.js} +1 -1
- package/dist/client/assets/{ZoomOut-DdAVIXWQ.js → ZoomOut-D9VvN_NP.js} +1 -1
- package/dist/client/assets/{access-gate-9NCpXLLW.js → access-gate-CjtXh2VQ.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-D0K7EFqJ.js → add-connection-dialog-DqHg8HcJ.js} +1 -1
- package/dist/client/assets/{agent-analytics-fm_KgOxT.js → agent-analytics-ZH1VnpyH.js} +1 -1
- package/dist/client/assets/agent-app-DhnERFci.js +1 -0
- package/dist/client/assets/{agent-assets-UZAZfpTO.js → agent-assets-DZ6oRbX0.js} +1 -1
- package/dist/client/assets/{agent-automation-CJ--1vlL.js → agent-automation-BRl8iL4T.js} +1 -1
- package/dist/client/assets/{agent-automations-CR-H6hc3.js → agent-automations-BN-GhuzT.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-CRwsSTEP.js → agent-connect-sources-ChbBGCxx.js} +1 -1
- package/dist/client/assets/agent-deck-C3wtWOT6.js +1 -0
- package/dist/client/assets/{agent-e2e-C2NjCqOM.js → agent-e2e-CcdlKXTV.js} +1 -1
- package/dist/client/assets/{agent-experiments-Ch3Qp9Rp.js → agent-experiments-CL-9SIpL.js} +1 -1
- package/dist/client/assets/{agent-file-C_uWBocy.js → agent-file-DWLgfdfw.js} +1 -1
- package/dist/client/assets/{agent-git-BHIqGIa0.js → agent-git-ZG2S1zYs.js} +1 -1
- package/dist/client/assets/{agent-hosting-DDbkzjIs.js → agent-hosting-BNhVEuQl.js} +1 -1
- package/dist/client/assets/{agent-icon-B4YwY0JM.js → agent-icon-txBWjErR.js} +1 -1
- package/dist/client/assets/agent-library-7tnae9bN.js +1 -0
- package/dist/client/assets/agent-library-file-BftkKwug.js +1 -0
- package/dist/client/assets/{agent-monitor-BLbfMhID.js → agent-monitor-Cxzo29vz.js} +1 -1
- package/dist/client/assets/{agent-overview-CfYzBY07.js → agent-overview-BWPew9Qs.js} +1 -1
- package/dist/client/assets/agent-settings-DpseRtaF.js +1 -0
- package/dist/client/assets/{agent-site-editor-bFWRhsPc.js → agent-site-editor-BvMNm3Hv.js} +14 -14
- package/dist/client/assets/agent-site-editor-code-D6mxO_RU.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-DKwHAIsT.js → agent-site-editor-content-CujQFdyP.js} +3 -3
- package/dist/client/assets/{agent-site-editor-preview-C0gXDXdn.js → agent-site-editor-preview-Dl9K62Z1.js} +3 -3
- package/dist/client/assets/agent-view-CiQLBw-t.js +1 -0
- package/dist/client/assets/{agent-view-guard-5QvPhq1h.js → agent-view-guard-BpmYIopx.js} +1 -1
- package/dist/client/assets/{agents-list-CnzJ37XA.js → agents-list-ckZNxQQT.js} +1 -1
- package/dist/client/assets/{ai-providers-q-_JYW8w.js → ai-providers-uZvFPpSM.js} +1 -1
- package/dist/client/assets/{alert-B16R0uts.js → alert-CCRJnMJX.js} +1 -1
- package/dist/client/assets/{alert-dialog-XGdjcU6k.js → alert-dialog-DPRkujUl.js} +1 -1
- package/dist/client/assets/{analytics-sections-Cz3G93_h.js → analytics-sections-BdxIURCl.js} +1 -1
- package/dist/client/assets/{api-keys-CO3fVZcr.js → api-keys-CNuRKTn5.js} +1 -1
- package/dist/client/assets/api-keys-DyJYVCRj.js +1 -0
- package/dist/client/assets/app-editor-8YXMt2hP.js +1 -0
- package/dist/client/assets/{asset-utils-CsHkjcx7.js → asset-utils-CB8QPgwX.js} +1 -1
- package/dist/client/assets/{auth-DAdApGdR.js → auth-D-ee-h5T.js} +1 -1
- package/dist/client/assets/{auth-catchall-C7s55TAd.js → auth-catchall-BK_PlEqR.js} +1 -1
- package/dist/client/assets/{auth-entry-Cop5n0XE.js → auth-entry-BEQZwL9l.js} +1 -1
- package/dist/client/assets/{auth-split-layout-o0lzMTvJ.js → auth-split-layout-Bu7yDS6Q.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-DclFzKA2.js → authenticate-and-persist-oauth-BRf4W3aC.js} +1 -1
- package/dist/client/assets/{automation-list-row-CzUhZzwb.js → automation-list-row-Dbc6Qt43.js} +1 -1
- package/dist/client/assets/{automation-runs-D00ea7ee.js → automation-runs-DUtF4sxB.js} +1 -1
- package/dist/client/assets/{automations-D35h3NYv.js → automations-ls3UR1Qr.js} +1 -1
- package/dist/client/assets/{autosend-iwmKuXuz.js → autosend-BSFtgKhn.js} +1 -1
- package/dist/client/assets/{avatar-82D6QSzb.js → avatar-D08cfTFl.js} +1 -1
- package/dist/client/assets/{badge-yAjkMzov.js → badge-BNBKCpa-.js} +1 -1
- package/dist/client/assets/{block-document-C9-Wek01.js → block-document-DCC9icxJ.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-Brv4RSE6.js → blocks-preview-workspace-context-BpqIiAnp.js} +1 -1
- package/dist/client/assets/{buckets-Bhi3gWLo.js → buckets-DB5wfGse.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-Dht5CUKH.js → build-improve-prompt-doc-BImrugKL.js} +1 -1
- package/dist/client/assets/{calendar-Bslu1_9K.js → calendar-CiBjQc6z.js} +1 -1
- package/dist/client/assets/{capability-load-error-ZZv-GJJq.js → capability-load-error-A3SpOKfq.js} +1 -1
- package/dist/client/assets/{category-editor-COibbmOK.js → category-editor-BevzDKjY.js} +1 -1
- package/dist/client/assets/{chart-CZVl22b4.js → chart-Chk4n-xD.js} +1 -1
- package/dist/client/assets/{chat-context-Nt6K5QHf.js → chat-context-PePawndm.js} +1 -1
- package/dist/client/assets/{chat-draft-BVvFy0MY.js → chat-draft-CXRkpBvJ.js} +1 -1
- package/dist/client/assets/{checkbox-Bj1FopWB.js → checkbox-ZK2ilOD4.js} +1 -1
- package/dist/client/assets/{choose-editor-1VN3atox.js → choose-editor-CCWi7bqZ.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-CBVsfXmG.js → claim-phase-copy-Cl0YDvy2.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DjXBMl0f.js → cli-auth-success-CTKb-X8W.js} +1 -1
- package/dist/client/assets/{client-icons-BBtapoe7.js → client-icons-BGNTW461.js} +1 -1
- package/dist/client/assets/{collapsible-BX9vPVyT.js → collapsible-CvSd253l.js} +1 -1
- package/dist/client/assets/{collection-detail-Diy45xZy.js → collection-detail-LBceg9p5.js} +1 -1
- package/dist/client/assets/{collection-display-button-DFXrobgX.js → collection-display-button-DNhdwaFL.js} +1 -1
- package/dist/client/assets/{collection-search-DeGickf-.js → collection-search-Da38LCFd.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-lmYLB3Hz.js → collection-table-wrapper-71xj9NS7.js} +1 -1
- package/dist/client/assets/{collection-tabs-B8LEhNUB.js → collection-tabs-POi61Yn-.js} +1 -1
- package/dist/client/assets/column-rules-upwy6dYa.js +3 -0
- package/dist/client/assets/{combobox-i_6XI5EO.js → combobox-rCJznWYq.js} +1 -1
- package/dist/client/assets/{command-qV-OCtKE.js → command-BuaN4gi6.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-Cmp_DmPB.js → companion-mcps-section-CdKGlriN.js} +1 -1
- package/dist/client/assets/{config-DHrAZEyH.js → config-B6Of24vm.js} +1 -1
- package/dist/client/assets/{connect-DUnStJuO.js → connect-B_C-UzWo.js} +1 -1
- package/dist/client/assets/{connect-layout-Crsbbsrh.js → connect-layout-DLkDQKSs.js} +1 -1
- package/dist/client/assets/{connection-sG3juRG0.js → connection-COorLhal.js} +1 -1
- package/dist/client/assets/{connection-card-BoE7Seb8.js → connection-card-DK1Wt7vU.js} +1 -1
- package/dist/client/assets/{connection-detail-C-ugCpSq.js → connection-detail-CjXJZq54.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-Buu9gdFE.js → connection-form-helpers-DwS96ZJh.js} +1 -1
- package/dist/client/assets/{connections-Dc4QDAgV.js → connections-G7lZjutX.js} +1 -1
- package/dist/client/assets/{context-DOEs1tS3.js → context-JWyIITVx.js} +1 -1
- package/dist/client/assets/{context-menu-BU4wtxmt.js → context-menu-2oGyK_uK.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-CFMgzqrq.js → create-organization-dialog-CWKQIKrZ.js} +1 -1
- package/dist/client/assets/{daily-pulse-q50TCtWr.js → daily-pulse-C9U2Ukv6.js} +1 -1
- package/dist/client/assets/{decopilot-BskuGSK2.js → decopilot-CTDgHPwq.js} +1 -1
- package/dist/client/assets/{device-hint-C396KJ6B.js → device-hint-CFvz22Pt.js} +1 -1
- package/dist/client/assets/{dialog-BtZaxAxx.js → dialog-BjdoPdxw.js} +1 -1
- package/dist/client/assets/{discover-DoaVYRY_.js → discover-Ctdwj82L.js} +1 -1
- package/dist/client/assets/{domain-settings-Cw9cjtvz.js → domain-settings-cUgfigqi.js} +1 -1
- package/dist/client/assets/{download-app-dialog-N2OFCrrJ.js → download-app-dialog-4RhgrbFN.js} +1 -1
- package/dist/client/assets/{drawer-DpbaHbt-.js → drawer-C0Z1wiOg.js} +1 -1
- package/dist/client/assets/{editor-BVZ6fWcH.js → editor-C4wBlSK3.js} +1 -1
- package/dist/client/assets/{empty-state-DUWhBADp.js → empty-state-Bp2gSnig.js} +1 -1
- package/dist/client/assets/{empty-state-D9bHVb4i.js → empty-state-CQl0XC4z.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Djd5qBcT.js → extract-connection-data-Db1CJiHn.js} +1 -1
- package/dist/client/assets/{feature-gate-ClITdlx9.js → feature-gate-DSzDIEDM.js} +1 -1
- package/dist/client/assets/{feature-paywall-ptu3pQbR.js → feature-paywall-AsO7--Ah.js} +1 -1
- package/dist/client/assets/{file-explorer-DFiyvWBm.js → file-explorer-B3JOw8iS.js} +1 -1
- package/dist/client/assets/{file-preview-j0XjXfca.js → file-preview-Cc6Eq9Sb.js} +1 -1
- package/dist/client/assets/{file-share-button-D-fjDHwq.js → file-share-button-Dm01y0go.js} +1 -1
- package/dist/client/assets/{file-type-icon-DlDIow-z.js → file-type-icon-d8qc1y0k.js} +1 -1
- package/dist/client/assets/flat-project-Bs35VopP.js +1 -0
- package/dist/client/assets/{folder-icon-CEo_DFJP.js → folder-icon-sunSnr-T.js} +1 -1
- package/dist/client/assets/{form-BfnsNCzB.js → form-CPwmIDgD.js} +1 -1
- package/dist/client/assets/{gateway-client-C8R1lemD.js → gateway-client-7b4dMSx0.js} +1 -1
- package/dist/client/assets/{general-CTpk5sBl.js → general-DCzYfIoO.js} +1 -1
- package/dist/client/assets/{home-CSgVYJ4O.js → home-CtOECS4J.js} +1 -1
- package/dist/client/assets/{icon-button-DWXuhPgX.js → icon-button-et2rWMzj.js} +1 -1
- package/dist/client/assets/index-6WjGaIcE.css +1 -0
- package/dist/client/assets/{index-CAwr_e5z.js → index-BFMaMVsZ.js} +1 -1
- package/dist/client/assets/{index-8ROcBeOM.js → index-BSnD4u1l.js} +4 -4
- package/dist/client/assets/{index-BPUrZQFm.js → index-BUvFUUVJ.js} +1 -1
- package/dist/client/assets/{index-C62hQl6G.js → index-BgN0Ps2M.js} +1 -1
- package/dist/client/assets/{index-DUPHFsCp.js → index-BnLxaCHY.js} +1 -1
- package/dist/client/assets/{index-Cl5vdSpu.js → index-CORMIa-A.js} +1 -1
- package/dist/client/assets/{index-CdAYzjgW.js → index-DK4f8rGT.js} +1 -1
- package/dist/client/assets/{index-gqQxV0Xj.js → index-Dno06lIj.js} +1 -1
- package/dist/client/assets/{index-DtTvwf7O.js → index-Dx_j0OqQ.js} +1 -1
- package/dist/client/assets/{index-CqSUHjzx.js → index-H5GJB4DI.js} +1 -1
- package/dist/client/assets/{index-CH-94t-p.js → index-QFZIPwT9.js} +1 -1
- package/dist/client/assets/index-ZqKo7Jtc.js +64 -0
- package/dist/client/assets/{index-rMmcW-9F.js → index-cUMtLdAb.js} +1 -1
- package/dist/client/assets/{index-Dciz6AyM.js → index-eGns4zSt.js} +1 -1
- package/dist/client/assets/{index-CXhpDAvB.js → index-fbhjQbzR.js} +1 -1
- package/dist/client/assets/{index-redirect-TBL_ANTt.js → index-redirect-Q2zzgk3k.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-ZauDjxfW.js → infiniteQueryObserver-3rOVnljf.js} +1 -1
- package/dist/client/assets/{infra-billing-BdvGRyl1.js → infra-billing-23cXn95a.js} +1 -1
- package/dist/client/assets/{input-BanC9Ucc.js → input-Cd0_CDVZ.js} +1 -1
- package/dist/client/assets/{input-7PISZA55.js → input-D_thObzv.js} +3 -3
- package/dist/client/assets/{input-CyCe0RY_.js → input-DyS6UqeB.js} +1 -1
- package/dist/client/assets/{integration-icon-DqSuxTpO.js → integration-icon-DdOqOzJh.js} +1 -1
- package/dist/client/assets/{label-Bn2z72pa.js → label-p4gAloMY.js} +1 -1
- package/dist/client/assets/{layout-CQg-WE66.js → layout-BJHFqT5z.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-BsbjzYaQ.js → legacy-agents-deep-Lz0arQ-r.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-F-upLWWY.js → legacy-main-redirect-C1cNgokY.js} +1 -1
- package/dist/client/assets/library-sa8Lb7lL.js +1 -0
- package/dist/client/assets/{library-tab-jDZ26_Yu.js → library-tab-DDHZvhED.js} +1 -1
- package/dist/client/assets/{login-DQ8kzAjg.js → login-Blgte4SI.js} +1 -1
- package/dist/client/assets/{markdown-5USBpPC8.js → markdown-wuJsczpE.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-DWHfNffK.js → mcp-app-renderer-CKOizQ1X.js} +1 -1
- package/dist/client/assets/{mcp-oauth-7vzmmq-a.js → mcp-oauth-JDHXDTjL.js} +1 -1
- package/dist/client/assets/{members-BRVmbtTs.js → members-or8i0XP3.js} +1 -1
- package/dist/client/assets/{memory-Q-1OkL9T.js → memory-BK3we-w-.js} +1 -1
- package/dist/client/assets/{message-templates-BFPVUU3A.js → message-templates-D4jjPBAh.js} +1 -1
- package/dist/client/assets/{mini-report-page-DKTvb5RA.js → mini-report-page-DqTavTdu.js} +1 -1
- package/dist/client/assets/{mock-board-CjbF2Fbe.js → mock-board-B4VrUtgj.js} +1 -1
- package/dist/client/assets/{monaco-editor-CbBCI2Xe.js → monaco-editor-D0ZnzEs4.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Bbu1vcmB.js → monitoring-stats-row-BcWN5gal.js} +1 -1
- package/dist/client/assets/{multi-select-DPwb6cpw.js → multi-select-C2iXVR_Q.js} +1 -1
- package/dist/client/assets/{mustache-Cn18e6sk.js → mustache-BBVwKX2z.js} +1 -1
- package/dist/client/assets/{new-project-dialog-CsWJZGWT.js → new-project-dialog-26KIGlBO.js} +1 -1
- package/dist/client/assets/{oauth-callback--47mw0EF.js → oauth-callback-D1fdfyWK.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-qrVV_p0w.js → oauth-callback-ai-provider-BIYcQ38C.js} +1 -1
- package/dist/client/assets/{onboarding-tXTIT-3D.js → onboarding-EkOK5nPV.js} +1 -1
- package/dist/client/assets/{openai-conversation-Fo01tpji.js → openai-conversation-DJI7J6XE.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-BBCMaD_P.js → optimistic-project-sidebar-views-DsSa3aGY.js} +1 -1
- package/dist/client/assets/{org-file-open-context-DjnDV-Wb.js → org-file-open-context-Bs96eliX.js} +1 -1
- package/dist/client/assets/{organization-choice-BjDAlCHw.js → organization-choice-7JG7Or6t.js} +1 -1
- package/dist/client/assets/{orgs-okkbii5K.js → orgs-BGS1DCoT.js} +1 -1
- package/dist/client/assets/{page-seo-form-BVIoMFkC.js → page-seo-form-BanWt_Wh.js} +1 -1
- package/dist/client/assets/{pair-Bjpxh-qi.js → pair-DWcQWh4a.js} +1 -1
- package/dist/client/assets/{plan-ladder-BUr0FQKD.js → plan-ladder-ZwA3rsoJ.js} +1 -1
- package/dist/client/assets/{popover-DgpjjzI9.js → popover-CRO_98-h.js} +1 -1
- package/dist/client/assets/{post-calendar-BeNh2iGP.js → post-calendar-BfaZZYX3.js} +1 -1
- package/dist/client/assets/{post-editor-w_9fT9Mi.js → post-editor-DJxjE37e.js} +1 -1
- package/dist/client/assets/{preview-content-VmyF6LSH.js → preview-content-DpW2PJ-b.js} +1 -1
- package/dist/client/assets/{preview-dialog-D7pg9eWa.js → preview-dialog-DW4Lqxwy.js} +1 -1
- package/dist/client/assets/{profile-BJrLSGim.js → profile-D4tGJTKv.js} +1 -1
- package/dist/client/assets/{project-app-view-FKoIV4Mp.js → project-app-view-BqbwakZm.js} +1 -1
- package/dist/client/assets/{project-feed-Bwh6N7aC.js → project-feed-CWfDh6KW.js} +1 -1
- package/dist/client/assets/{project-icon-BVmGHfAM.js → project-icon-mfRu-TVA.js} +1 -1
- package/dist/client/assets/project-reports-BCXIY49G.js +1 -0
- package/dist/client/assets/project-tasks-ByD_Cvnv.js +1 -0
- package/dist/client/assets/{projects-DJ-zePnr.js → projects-C3WEi1vK.js} +1 -1
- package/dist/client/assets/{projects-empty-state-7qBXU2I8.js → projects-empty-state-BBjuUsU8.js} +1 -1
- package/dist/client/assets/{prompts-CX0m-UtB.js → prompts-DjpaTlbB.js} +1 -1
- package/dist/client/assets/record-editor-Bnb7fDb6.js +1 -0
- package/dist/client/assets/{redirect-editor-Dn24GZiC.js → redirect-editor-D72JLPRT.js} +1 -1
- package/dist/client/assets/{reports-BzkkmOF8.js → reports-CMVZl1EA.js} +1 -1
- package/dist/client/assets/reports-D_IkwcBS.js +1 -0
- package/dist/client/assets/{reports-onboarding-BiJg13ox.js → reports-onboarding-xnTEnkQq.js} +1 -1
- package/dist/client/assets/{reports-tab-BJGnC0-5.js → reports-tab-vatp9Z9R.js} +2 -2
- package/dist/client/assets/{repositories-BAsigS3D.js → repositories-D282TLTf.js} +1 -1
- package/dist/client/assets/{repository-binding-Bqtv3z-W.js → repository-binding-Bldcduno.js} +1 -1
- package/dist/client/assets/{repository-import-picker-B_SeG55B.js → repository-import-picker-xEt1JTQh.js} +1 -1
- package/dist/client/assets/{repository-picker-w_v5XfDS.js → repository-picker-_wAGFCw8.js} +1 -1
- package/dist/client/assets/{require-capability-BRTV4cFL.js → require-capability-c2x-hAb2.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DST7pe03.js → required-auth-layout-9CaCzCmK.js} +1 -1
- package/dist/client/assets/{reset-password-DbwCoUc8.js → reset-password-D-Q7S-t6.js} +1 -1
- package/dist/client/assets/{resizable-YQ94bbPR.js → resizable-DUZ5Fp06.js} +1 -1
- package/dist/client/assets/{resolve-tab-icon-DBl8wZO4.js → resolve-tab-icon-N_z8a9nx.js} +1 -1
- package/dist/client/assets/{review-settings-Bhgi0To3.js → review-settings-DEkzpUQo.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-CJV5ImB9.js → rich-text-link-control-wgMfyyAb.js} +1 -1
- package/dist/client/assets/{roles-D--hRFLD.js → roles-DnLvCVQy.js} +1 -1
- package/dist/client/assets/route-B8sxpBnC.js +1 -0
- package/dist/client/assets/{route-DqqNAJgH.js → route-BdyjrrEO.js} +1 -1
- package/dist/client/assets/{route-mvw6bd2v.js → route-FqdfjqXW.js} +1 -1
- package/dist/client/assets/{runnable-block-editor-Ekx3VFu4.js → runnable-block-editor-xPDFVXlK.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-D3rqVZE7.js → sandbox-lifecycle-context-D3u8pX2X.js} +1 -1
- package/dist/client/assets/{schema-D_b4vZ7I.js → schema-Cd5rHvlU.js} +1 -1
- package/dist/client/assets/{scroll-area-Yj6MrDB0.js → scroll-area-DYG4mHMK.js} +1 -1
- package/dist/client/assets/{search-input-CHN_qcZt.js → search-input-CQflA5a-.js} +1 -1
- package/dist/client/assets/{search-toggle-gnOAnWxM.js → search-toggle-CiJmR843.js} +1 -1
- package/dist/client/assets/{secret-picker-RZRUxDQy.js → secret-picker-Ctn_wc4B.js} +1 -1
- package/dist/client/assets/{secrets-CmzOh8fV.js → secrets-0TS5KONk.js} +1 -1
- package/dist/client/assets/{sections-editor-92GssqzD.js → sections-editor-g25F6D1o.js} +1 -1
- package/dist/client/assets/{select-D_2Dtgab.js → select-CC-cBpVq.js} +1 -1
- package/dist/client/assets/{select-model-BdH19s4j.js → select-model-BgCrdVPU.js} +1 -1
- package/dist/client/assets/{seo-editor-CZcu9EB6.js → seo-editor-BZLOy3Ym.js} +1 -1
- package/dist/client/assets/{separator-DFLcyyJh.js → separator-CtiwlxcW.js} +1 -1
- package/dist/client/assets/{settings-tab-B1EwFFBD.js → settings-tab-BHVmz_vd.js} +1 -1
- package/dist/client/assets/{sheet-DplgMQgp.js → sheet-p7htr8B1.js} +1 -1
- package/dist/client/assets/{shell-layout-Bs4S55Ty.js → shell-layout-znU8dfLI.js} +1 -1
- package/dist/client/assets/{skills-wn8sgRwl.js → skills-CURPfnOL.js} +1 -1
- package/dist/client/assets/{sso-CBAmAJJ4.js → sso-DFLLgebl.js} +1 -1
- package/dist/client/assets/{suggestion-CzkXVd3G.js → suggestion-6yTYju-2.js} +1 -1
- package/dist/client/assets/{switch-CjmNMBI9.js → switch-By80PO40.js} +1 -1
- package/dist/client/assets/{synced-repos-DVq5FYNc.js → synced-repos-CHLq4I2m.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph-B_6Wp6kQ.js → tab-icon-glyph-B_pElI5g.js} +1 -1
- package/dist/client/assets/{table-Bxw1S3_7.js → table-ow3OPohb.js} +1 -1
- package/dist/client/assets/{tabs-BVF8ZK_0.js → tabs-B_NYHDVk.js} +1 -1
- package/dist/client/assets/{task-board-8eXLM5MN.js → task-board-BoCHCiHL.js} +1 -1
- package/dist/client/assets/{task-route-CUxAqAJa.js → task-route-C_aa_RPA.js} +1 -1
- package/dist/client/assets/{task-status-B-4DGiGH.js → task-status-Zk9JczKN.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-D2ysDEff.js → taskboard-analytics-Dhi-x4CE.js} +1 -1
- package/dist/client/assets/tasks-BL0HnY0N.js +1 -0
- package/dist/client/assets/{tasks-BU37mWt3.js → tasks-DG_jbzgd.js} +1 -1
- package/dist/client/assets/{textarea-RBexuEFS.js → textarea-Bc3Na4Zg.js} +1 -1
- package/dist/client/assets/{thread-analytics-BzY1zykD.js → thread-analytics-CkfYXVt1.js} +1 -1
- package/dist/client/assets/{thread-button-mkFGOpTO.js → thread-button-CgRw-DPB.js} +1 -1
- package/dist/client/assets/{thread-intent-CVPFp4dA.js → thread-intent-Bwo9Tb6y.js} +1 -1
- package/dist/client/assets/{thread-route-ClaMqMHW.js → thread-route-DscdrdSm.js} +1 -1
- package/dist/client/assets/{thread-route-2sTnJPJq.js → thread-route-tB6jN0L2.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-VP8BHNT1.js → thread-sheet-body-DhX54ssk.js} +1 -1
- package/dist/client/assets/{toggle-group-BeYYMXUj.js → toggle-group-BpqQyGcW.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-CX76xDXU.js → toolbar-icon-button-CIXTKMxv.js} +1 -1
- package/dist/client/assets/{tooltip-DAbDY_l5.js → tooltip-Bgl1fAxi.js} +1 -1
- package/dist/client/assets/{track-Bzm08tgF.js → track-zwiz_A6B.js} +1 -1
- package/dist/client/assets/{types-YnNmbSwq.js → types-DSz2eqpq.js} +1 -1
- package/dist/client/assets/{usage-stats-B6bxtnrk.js → usage-stats-B6WkCKsy.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CbRWts-V.js → use-ai-providers-b7R9al6L.js} +1 -1
- package/dist/client/assets/{use-automations-BIDh0kH1.js → use-automations-CihLtNm4.js} +1 -1
- package/dist/client/assets/{use-autosave-Cr35hYe8.js → use-autosave-CWemfCnn.js} +1 -1
- package/dist/client/assets/{use-chat-layout-state-CCZx3s6E.js → use-chat-layout-state-DvvrnpP7.js} +1 -1
- package/dist/client/assets/{use-clock-tick-OFx9mwiY.js → use-clock-tick-DAn9rhMX.js} +1 -1
- package/dist/client/assets/{use-connect-companion-BTDHfs4F.js → use-connect-companion-5QXTbLGP.js} +1 -1
- package/dist/client/assets/{use-connection-sMlbY4Ob.js → use-connection-T2ooNFOK.js} +1 -1
- package/dist/client/assets/{use-copy-CNBDs3f4.js → use-copy-Cer_DvZP.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BdtaKA6u.js → use-create-virtual-mcp-DTrLx8jD.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-DhWzsOW3.js → use-date-fns-locale-DeCPPd8H.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave--k-71QNg.js → use-debounced-autosave-CU1zxcd9.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BM_vV7du.js → use-debounced-value-CLZNPNYg.js} +1 -1
- package/dist/client/assets/{use-deco-credits-Hy6mri0W.js → use-deco-credits-BDrqLG89.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-Dij6ioRA.js → use-decopilot-events-N8vXq82D.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CFmFLBKQ.js → use-delete-connection-BAYuQDgc.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DKCGAkch.js → use-deployment-admin-CVUmuzmU.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-C5MWxWnZ.js → use-fast-preview-draft-url-C7Q5tlLs.js} +1 -1
- package/dist/client/assets/{use-file-configs-DDTbPPMv.js → use-file-configs-C9aM8lFc.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Wt2CKt13.js → use-infinite-scroll-DxRG3Odx.js} +1 -1
- package/dist/client/assets/{use-join-requests-DiaofhBo.js → use-join-requests-g3S1GBN0.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-WUfLMbrf.js → use-main-panel-tabs-BS1NCn62.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-CkxqQj4w.js → use-mcp-auth-status-CKNczGWj.js} +1 -1
- package/dist/client/assets/{use-mcp-client-BxmtH7zP.js → use-mcp-client-A77IVsxI.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-a00pKELA.js → use-mcp-prompts-Bzy_rF1l.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CNfjLzgY.js → use-mcp-tools-XgrSCkO3.js} +1 -1
- package/dist/client/assets/{use-members-Bl4FSDKS.js → use-members-CaS0Ntvk.js} +1 -1
- package/dist/client/assets/{use-mobile-CagO8PYO.js → use-mobile-DNxs9zx_.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-em4YGsFg.js → use-navigate-to-agent-B8Tw6lBD.js} +1 -1
- package/dist/client/assets/use-new-blocks-editor-BsKR7vcz.js +1 -0
- package/dist/client/assets/{use-open-billing-url-BTZG3vW5.js → use-open-billing-url-DrYGAlSe.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CIit8iEB.js → use-org-auth-client-BXfCP_SX.js} +1 -1
- package/dist/client/assets/{use-org-fs-CFvxeeh7.js → use-org-fs-Cjw8xggL.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-Cj7aQn-H.js → use-org-repo-syncs-4jj4z_0W.js} +1 -1
- package/dist/client/assets/{use-org-sso-M_x7fcvK.js → use-org-sso-v_RHC6Uu.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CwRNbeCp.js → use-organization-roles-DRvYOOs2.js} +1 -1
- package/dist/client/assets/{use-organization-settings-ZppCsdtK.js → use-organization-settings-1DGLdBJq.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-TAi8F8is.js → use-panel-navigate-DuMg6x_K.js} +1 -1
- package/dist/client/assets/{use-project-scope-KBJJqmug.js → use-project-scope-B50a346z.js} +1 -1
- package/dist/client/assets/{use-releases-DYn35oM8.js → use-releases-CjZBu-VF.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-C4_LO4Rm.js → use-reports-diagnostic-DCFHDN_E.js} +1 -1
- package/dist/client/assets/{use-secrets-xaNnxvsl.js → use-secrets-CjmTS2ob.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-D6UeNHec.js → use-section-preview-base-Dy7gMlm-.js} +1 -1
- package/dist/client/assets/{use-session-runtime-BxrwOJfg.js → use-session-runtime-CLmwqP43.js} +1 -1
- package/dist/client/assets/{use-tags-BKbXsHJG.js → use-tags-CTPlgA-X.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-DrqgRdO8.js → use-task-board-analytics-C0o7rS55.js} +1 -1
- package/dist/client/assets/{use-task-board-events-Dh89yIOj.js → use-task-board-events-CZLJRGSP.js} +1 -1
- package/dist/client/assets/{use-task-metadata-RgcBzN-v.js → use-task-metadata-yam0GxPA.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-B9BUAi40.js → use-thread-analytics-D8vlPsbf.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-6AAfyQOX.js → use-thread-outputs-8bOBGt9D.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-mK_7Bdd0.js +1 -0
- package/dist/client/assets/{useQueries-DjhTv0OA.js → useQueries-clqbDuaA.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DlwXuQ53.js +1 -0
- package/dist/client/assets/{users-ky9WmORJ.js → users-C6XUNB1S.js} +1 -1
- package/dist/client/assets/{utils-C8Vzgs09.js → utils-rxd5AcRF.js} +1 -1
- package/dist/client/assets/{variant-calendar-JCMp6ee_.js → variant-calendar-CaJ6M-lI.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-DsB1vp1F.js → variant-matcher-override-DvDmh02Q.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DFEa7QlE.js → view-mode-toggle-CeIqRFVf.js} +1 -1
- package/dist/client/assets/{virtual-mcp-CooEBSCr.js → virtual-mcp-CR_Xj7EJ.js} +1 -1
- package/dist/client/index.html +2 -2
- 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-BAG_ouA7.js +0 -1
- package/dist/client/assets/agent-deck-fBOeFJ_-.js +0 -1
- package/dist/client/assets/agent-library-BMJkRuS1.js +0 -1
- package/dist/client/assets/agent-library-file-WqkdWDaz.js +0 -1
- package/dist/client/assets/agent-settings-CjdxFKHZ.js +0 -1
- package/dist/client/assets/agent-site-editor-code-M5fw1hul.js +0 -2
- package/dist/client/assets/agent-view-BI2HF7oV.js +0 -1
- package/dist/client/assets/api-keys-CKTnq0Q2.js +0 -1
- package/dist/client/assets/app-editor-BK3gAGus.js +0 -1
- package/dist/client/assets/column-rules-BGGP1JYz.js +0 -3
- package/dist/client/assets/flat-project-Ox0-oqbL.js +0 -1
- package/dist/client/assets/index-DCQOb4XN.js +0 -64
- package/dist/client/assets/index-KD-5vkyh.css +0 -1
- package/dist/client/assets/library-Bc8E6zy4.js +0 -1
- package/dist/client/assets/project-reports-BtOkTh8W.js +0 -1
- package/dist/client/assets/project-tasks-CwQxy88m.js +0 -1
- package/dist/client/assets/record-editor-BDGhiB3U.js +0 -1
- package/dist/client/assets/reports-vyVNd-rV.js +0 -1
- package/dist/client/assets/route-D4ViebMv.js +0 -1
- package/dist/client/assets/tasks-BSgnRhRg.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-BFs6OxMh.js +0 -1
- package/dist/client/assets/useInfiniteQuery-BwK3MP2B.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DZ9_odwU.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3719,7 +3719,7 @@ ${J.join(`
|
|
|
3719
3719
|
`)}`:X}function So6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3720
3720
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var pY8=200,zo6=12,Ao6,Ro6=300,X_0=3;var dD1=D(()=>{X7();r$();Y_0();Ao6={aheadBy:0,behindBy:0,files:[]}});function _o6($){if(!$||$.includes(".."))return!1;return Co6.test($)}function tY8($){return vo6.includes($)}function iD1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!_o6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function pD1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Co6,vo6;var oY8=D(()=>{Co6=/^[\w./@-]+$/;vo6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function a60($,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 sY8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new Yz(v7);let J=await bj($.storage,X,Y);if(J&&await DD($.storage,J)){let F=await RU($,J,{forceRefresh:!0}).catch((U)=>{throw new Yz(U instanceof Error?U.message:v7)});await rY8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new Yz("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Pm({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:v7;throw new Yz(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await qU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=ML$(F instanceof Error?F.message:String(F));throw U?new Yz(N):F});await rY8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function rY8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=vp($),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 JE(K,bo6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var bo6=10485760,Yz;var nD1=D(()=>{IW();tC0();E$0();yH0();t00();X7();Yz=class Yz extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function fo6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!xo6.test(Z))throw Error(`Invalid branch name: ${$}`)}function sy($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(yo6)])}async function ho6($,Z){let Q=$.var.studioContext,Y=bU(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=Af(G?.metadata?.runtime);if(W)return W;let K=uR0(Z.virtualMcpMetadata),H=K==="cms"?await RD1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)z$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 uo6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await uX($.var.studioContext)}catch{return null}}function ay($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function gp($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=a60(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=J0(Y);return jm(Y,J.id,X)}function oD1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=lD$(Z);if(Y!==void 0)return $.json({error:Q},429,{...W9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof s6)return $.json({error:Q},409,W9);let X=CW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,W9)}return $.json({error:Q},502,W9)}async function tD1($,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 ZX8($){try{let Z=await gp($),Q=await J_0(Z,$.get("vmClaim").branch);return $.json(Q,200,W9)}catch(Z){return oD1($,Z)}}function e60($,Z){let Y=(K_0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return K_0.set($,X),X.finally(()=>{if(K_0.get($)===X)K_0.delete($)}),Y}async function OQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,W9);let Y=Q?.runner??ay($);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",...W9}})}}let O=await B.text(),L=Q?.redactRepoDir?lo6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...W9}})};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 lo6($){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 H_0($,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 co6($){return QX8.includes($)}var xo6,aY8=524288,eY8=65536,yo6=1e4,$X8=2000,go6,K_0,W9,QX8,YX8=()=>{let $=new $1;$.use("/:virtualMcpId/:branch/*",go6),$.post("/:virtualMcpId/:branch/write",(Q)=>OQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:sy(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>OQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:sy(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>OQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:sy(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>OQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:sy(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>OQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:sy(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>OQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:sy(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>OQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:sy(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 OQ(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 OQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>OQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>OQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!co6(Y))return Q.json({error:`step must be one of: ${QX8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await RD1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await uo6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,W9);if(Y==="start"){let G=J0(Q.var.studioContext),W=Ld(X.virtualMcpMetadata);try{await fR0({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 OQ(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 DO(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 $Y8(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 ZX8(Q);return Z(Q)});let Z=(Q)=>OQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout($X8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return ZX8(Q);return OQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout($X8)])})}),$.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 gp(Q),G=await G_0(J,Y.branch,X.base);return Q.json(G,200,W9)}catch(X){return oD1(Q,X)}return OQ(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,W9);let Y=ay(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return e60(X,async()=>{try{await qD1(W,Y,X);let K=a60(J,G);if(K)await sY8(W,Y,X,K)}catch(K){if(K instanceof Yz)return Q.json({error:K.message},403,W9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,W9)}return OQ(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 e60(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,W9);try{let G=await gp(Q);return await nY8(G,Y.branch,J),Q.json({ok:!0},200,W9)}catch(G){let W=CW(G)===409||G instanceof s6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,W9)}});return e60(Y.claimName,()=>OQ(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 e60(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await gp(Q),H=W.base??await K.getDefaultBranch();return await W_0(K,Y.branch,H),Q.json({ok:!0},200,W9)}catch(W){return oD1(Q,W)}});let X=ay(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return e60(J,async()=>{try{await qD1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,W9)}return OQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",x5({maxSize:aY8,onError:(Q)=>Q.json({error:"Payload too large"},413,W9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ay(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]=VD1(F)&&N?[F,U]:X?await Promise.all([H_0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),H_0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await gp(Q);return Promise.all([J_0(w,Y.branch),G_0(w,Y.branch)])})();await rG(K,J0(K).id,"suggesting a commit message");let L=await JY8(K,B,O);return Q.json(L,200,W9)}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,W9);return Q.json({error:F},502,W9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",x5({maxSize:aY8,onError:(Q)=>Q.json({error:"Payload too large"},413,W9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ay(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]=VD1(F)&&N?[F,U]:X?await Promise.all([H_0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),H_0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await gp(Q);return Promise.all([J_0(w,Y.branch),G_0(w,Y.branch)])})();await rG(K,J0(K).id,"judging whether a change needs review");let L=await WY8(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,W9)}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,W9);return Q.json({error:F},502,W9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=ay(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 tD1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",x5({maxSize:eY8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=ay(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=pD1(J,W.resolveType);return tD1(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:eY8,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):wd(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(!tY8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=pD1(G,K.resolveType);return tD1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var XX8=D(()=>{J8();QK();_p();TD1();Od();sQ8();hW();jd();aQ8();yW();WH();eQ8();ZY8();I71();j$0();CD1();KY8();X7();q5();dD1();oY8();hR0();nD1();xo6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;go6=nC0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=d0(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{fo6(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=T10({orgId:X.id,virtualMcpId:J,branch:G}),H=await r91(Q,G),F=s91(H,Y),U=rQ8({userId:F,projectRef:K}),N=W.metadata??null,B=await ho6($,{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 uX(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()});K_0=new Map;W9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};QX8=["clone","install","start"]});function JX8($,Z,Q){let Y=rD1.get($);if(!Y)Y={pending:null,running:!1},rD1.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)do6($,Y);return J}async function do6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await io6(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)rD1.delete($)}}async function io6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await yp(Z,Q),W=await Z.listDecofileEntries(G,Y),K=lD1(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=cD1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3721
3721
|
`;await cY8(Z.repo,L);let w=O[0]??`${Q_0(Y)}/${bD1(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 cD1(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 mY8(Z,F.values(),X),{decofile:B,skipped:O}=i60(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:KH(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:po6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof s6)||J>=mo6-1)throw N;await L$(D7(2000,200,J,2,0.5))}}}function po6($){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 k51(Y,$.deps.coAuthor)}var mo6=3,rD1;var GX8=D(()=>{XT0();rC0();p4();r$();X7();Y_0();rD1=new Map});import{createHmac as WX8,randomBytes as no6,timingSafeEqual as to6}from"crypto";function KX8(){if(F_0)return F_0;let $;try{let Z=j0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return F_0=$?Buffer.from($):no6(32),F_0}function sD1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+oo6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=WX8("sha256",KX8()).update(Y).digest("base64url");return`${Y}.${X}`}function HX8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(WX8("sha256",KX8()).update(Y).digest("base64url"));if(X.length!==J.length||!to6(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 oo6=21600000,F_0=null;var FX8=D(()=>{$$()});function U_0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function ro6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=U_0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function UX8($){let Z;try{Z=U_0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=ro6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=U_0(G),K=W&&U_0(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 hp}from"zod";function ao6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&so6.test($)}function LX8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $50($){let Z=$.get("decofileScope");return jm($.var.studioContext,Z.organizationId,Z.repository)}function Z50($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof s6)return $.json({error:Q},409);let Y=CW(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 wX8(){let $=new $1;return $.use("/:virtualMcpId/:branch",OX8),$.use("/:virtualMcpId/:branch/*",OX8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $50(Z),X=await dY8(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(UX8(X.decofile),200,{...J,"content-type":"application/json"});let G=sD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(LX8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return Z50(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 $50(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 Z50(Z,X)}}),$.patch("/:virtualMcpId/:branch",$r6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Zr6.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=p60(X.data)}catch(G){if(G instanceof n60)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{oC0(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(vD1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $50(Z),W=await JX8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:vp(Y)},J),K=sD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:LX8(Z)})}catch(G){return Z50(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $50(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(CW(W)!==409)throw W;await W_0(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(CW(G)===409)return Z.json({error:"merge-conflict"},409);if(CW(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 Z50(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $50(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(CW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return Z50(Z,Y)}}),$}var so6,NX8=500,BX8=1048576,DX8=1024,eo6=8388608,$r6,Zr6,OX8;var jX8=D(()=>{hR0();rC0();J8();QK();TD1();tC0();nD1();X7();GX8();FX8();dD1();Y_0();WH();so6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$r6=x5({maxSize:eo6,onError:($)=>$.json({error:"Payload too large"},413)}),Zr6=hp.object({set:hp.record(hp.string(),hp.unknown()).optional(),delete:hp.array(hp.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)<=NX8,{message:`Patch cannot touch more than ${NX8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=BX8),{message:`Each block must be at most ${BX8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=DX8),{message:`Each block key must be at most ${DX8} characters`}),OX8=nC0(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(!ao6(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||!HX8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await kJ(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(!wd(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=a60(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 EX8=($)=>{let Z=new $1;if(Z.use("*",Fp),Z.use("*",l58),Z.route("/",h58($.voiceSessions)),Z.route("/",QC0()),Z.route("/",T98()),Z.route("/",H98()),Z.route("/",xQ8()),Z.route("/",yQ8()),Z.route("/",IQ8()),Z.route("/",vQ8()),Z.route("/",kQ8()),Z.route("/",dC0()),Z.route("/tools",dQ8()),Z.route("/",lQ8()),Z.route("/",QQ8({kvStorage:$.kvStorage})),Z.route("/",$Q8()),Z.route("/fs",jQ8({getConnection:$.getNatsConnection})),Z.route("/sandbox",YX8()),Z.route("/decofile",wX8()),Z.route("/",RQ8()),Z.route("/",zQ8()),Z.route("/deco-sites",XC0()),Z.route("/hosting",a58()),Z.route("/monitor",J98()),Z.route("/sso",sS0()),Z.route("/",iC0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",n58()),$.mountDevAssets)Z.route("/dev-assets",KC0({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("/",x88()),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",AQ8()),Z.route("/mcp",rM0()),Z.route("/mcp/self",uC0()),Z.route("/mcp",eM0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var zX8=D(()=>{J8();u58();c58();uS0();t58();dN1();e58();G98();HC0();sE();hN1();oN1();ZQ8();YQ8();EQ8();PQ8();v80();CN1();$I0();DD1();TQ8();qQ8();VQ8();SQ8();wD1();fQ8();gQ8();cQ8();jD1();iQ8();ED1();sM0();XX8();jX8()});import{z as ey}from"zod";class aD1{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 TX8.Kvm(N_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:N_0.StorageType.Memory,ttl:RX8.nanos(VD),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"?AX8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await L$(200);continue}let G=PX8.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 L$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,PX8.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"?AX8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var N_0,TX8,RX8,PX8,AX8;var qX8=D(()=>{wJ();fU();r$();N_0=C(LK(),1),TX8=C(YA(),1),RX8=C(Tz(),1),PX8=new TextEncoder,AX8=ey.discriminatedUnion("state",[ey.object({state:ey.literal("ready"),agentId:ey.string()}),ey.object({state:ey.literal("creating"),expiresAt:ey.number()})])});import{z as up}from"zod";function Qr6($){return{model:$.model,instructions:`${jq$}
|
|
3722
|
-
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class eD1{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:Qr6({...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:up.object({session:up.object({id:up.string().min(1)}),transport:up.object({type:up.literal("webrtc"),sdp:up.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var MX8=D(()=>{fU()});var IX8;var VX8=D(()=>{IX8=[{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 $O1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:Lq$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:IX8.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:VD/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 kX8=D(()=>{fU();VX8()});import{z as oX}from"zod";import{createHash as Yr6,createHmac as Xr6}from"crypto";class B_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Yr6("sha256").update(JSON.stringify($O1($))).digest("hex"),this.conversationKey=Xr6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new B_0({...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}=oX.object({agents:oX.array(oX.object({agent_id:oX.string(),name:oX.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 oX.object({platform_settings:oX.object({auth:oX.object({enable_auth:oX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...$O1(this.config)},AbortSignal.timeout(15000));return oX.object({agent_id:oX.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 oX.object({token:oX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return oX.object({token:oX.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 SX8=D(()=>{kX8()});import{createHmac as Jr6,timingSafeEqual as Gr6}from"crypto";import{z as lp}from"zod";function _X8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Jr6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function vX8($,Z){let Q=Buffer.from(JSON.stringify(CX8.parse($))).toString("base64url");return`${Q}.${_X8(Q,Z)}`}function bX8($,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(_X8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Gr6(W,G))return null;try{let K=CX8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+VD)return null;return K.data}catch{return null}}var CX8;var xX8=D(()=>{fU();CX8=lp.object({sessionId:lp.string().uuid(),organizationId:lp.string().min(1).max(256),userId:lp.string().min(1).max(256),threadId:lp.string().min(1).max(256),expiresAt:lp.number().int().positive()})});import{z as ZO1}from"zod";function fX8($,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 QO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var QO1;var yX8=D(()=>{QO1=ZO1.object({provider:ZO1.enum(["elevenlabs","openai"]),model:ZO1.string().trim().min(1).max(128)})});import{createHash as Wr6}from"crypto";import{z as cp}from"zod";function mp($){return`user.${Wr6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class XO1{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 gX8.Kvm(O_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:O_0.StorageType.Memory,ttl:hX8.nanos(VD),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=fX8(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()+VD},W=vX8(G,this.deps.secret),K=await this.kv(),H=mp(G),F=await K.get(H),U=F?.operation==="PUT"?D_0.parse(F.json()):null,N=YO1.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:mp($)});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=bX8(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=mp(Q),J=await Y.get(X),G=J?.operation==="PUT"?D_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,YO1.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=mp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?D_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,YO1.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(mp($));if(Q?.operation==="PUT"&&D_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(mp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var O_0,gX8,hX8,D_0,YO1;var uX8=D(()=>{wJ();fU();xX8();yX8();O_0=C(LK(),1),gX8=C(YA(),1),hX8=C(Tz(),1),D_0=cp.object({sessionId:cp.string().uuid(),expiresAt:cp.number(),connected:cp.boolean().optional(),conversation:QO1.optional(),characters:cp.number().int().nonnegative(),requests:cp.number().int().nonnegative()}),YO1=new TextEncoder});function Kr6($){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 Hr6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},lX8=()=>{let $=new $1;return $.use("*",Hr6),$.get("/",async(Z)=>{let Q=j0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await YG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Kr6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var cX8=D(()=>{J8();$$();dk0()});import{z as y1}from"zod";function EN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Er6($){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 zr6($,Z,Q){try{return JSON.parse($)}catch{throw new iX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Pr6($){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:zr6(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 Ar6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?tF(Q.function.parameters):tF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Tr6($){if(!$)return;return{openai:{response_format:$}}}function Rr6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function mX8($,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 dX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Fr6=256,Ur6,Nr6,Br6,Dr6,Or6,Lr6,wr6,jr6,iX8,pX8,nX8;var tX8=D(()=>{y4();J8();_p();vH();Ur6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Nr6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Br6=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(Nr6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Dr6=y1.object({type:y1.literal("text")}),Or6=y1.object({type:y1.literal("json_object")}),Lr6=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()})}),wr6=y1.union([Dr6,Or6,Lr6]),jr6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Br6),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(Ur6).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:wr6.optional(),user:y1.string().optional()});iX8=class iX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};pX8=new $1;pX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(EN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(EN("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(EN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=jr6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(EN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Er6(J.model);if(!G)return $.json(EN("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)=>jP(E.providerId));if(!j)return $.json(EN("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(EN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Pr6(J.messages),N=J.tools?Ar6(J.tools):void 0,B=Tr6(J.response_format),O=Rr6(),L=Math.floor(Date.now()/1000);if(J.stream)return DO($,async(w)=>{let j=mX8(F,U,N,J,B,$.req.raw.signal);try{let E=Dd(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",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(P+=q.text,P.length>=Fr6)await A()}else if(q.type==="tool-call"){await A();let f=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:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:dX8(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 A(),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=mX8(F,U,N,J,B,$.req.raw.signal),j=await gU(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:dX8(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(EN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(EN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(EN(X.message,"server_error"),500)}});nX8=pX8});function qr6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function oX8(){let $=new $1;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=d0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!EZ(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||S9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(OA(U)!==J)continue;if(!qr6(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 rX8=D(()=>{J8();eG()});var aX8;var sX8=D(()=>{aX8={name:"decocms",version:"4.445.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","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 Vr6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Ir6}}var eX8,Ir6="https://ph.studio.decocms.com",$J8;var ZJ8=D(()=>{J8();Cs();lf();V9();$$();LN1();sX8();eX8=new $1;eX8.get("/",($)=>{let Z={version:aX8.version,theme:R5$(),...pK().logo&&{logo:pK().logo},...hD()&&{internalUrl:pp1()},...j0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!j0().firecrawlApiKey,hostingEnabled:!!j0().controlplaneRestUrl&&!!j0().controlplaneServiceToken,hostingControlPlaneGa:j0().hostingControlPlaneGa,monitorEnabled:!!j0().clickhouseAnalyticsUrl&&!!j0().clickhouseAnalyticsPassword,monitorGa:j0().monitorGa,plansEnabled:j0().plansEnabled,auth:S68(),posthog:Vr6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});$J8=eX8});function $g($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function JO1($){return($g($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function QJ8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent($g($))}&sz=${Z}`}function kr6($,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 YJ8($){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=kr6(`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 P$}from"zod";var Sr6,XJ8;var JJ8=D(()=>{Sr6=P$.object({check_id:P$.string(),title:P$.string(),description:P$.string().optional(),impact:P$.string().optional(),why:P$.string().optional(),category:P$.string(),severity:P$.string(),value_band:P$.string().optional(),value_driver:P$.string().optional(),controllability:P$.string().optional(),pages:P$.array(P$.string()),tasks:P$.array(P$.string()),evidence:P$.string(),sample_scope:P$.string().optional(),sources:P$.array(P$.string())}),XJ8=P$.object({domain:P$.string(),brand:P$.string(),favicon:P$.string().optional(),scanned_at:P$.string().nullable(),lang:P$.string(),score:P$.number().nullable(),band:P$.string().nullable(),totals:P$.object({measured:P$.number(),registry_total:P$.number(),passed:P$.number(),failed:P$.number(),blocked:P$.number()}),buckets:P$.array(P$.object({id:P$.enum(["critical","important","worth"]),label:P$.string(),items:P$.array(Sr6)})),passing:P$.object({count:P$.number(),items:P$.array(P$.object({check_id:P$.string(),title:P$.string()}))}),not_measured:P$.object({count:P$.number(),groups:P$.array(P$.object({reason:P$.string(),label:P$.string(),count:P$.number(),checks:P$.array(P$.string())}))}),categories:P$.array(P$.object({key:P$.string(),label:P$.string(),score:P$.number().nullable(),band:P$.string().nullable(),pass:P$.number(),fail:P$.number()})),screenshots:P$.array(P$.object({url:P$.string(),page_type:P$.string().optional(),viewport:P$.enum(["desktop","mobile"]),image_url:P$.string()}))})});function GJ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${AW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function L_0($,Z={}){let Q=await fetch(GJ8($,"",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 XJ8.parse(await Q.json())}async function WJ8($,Z={}){let Q=await fetch(GJ8($,".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 GO1=D(()=>{JJ8();nB()});import{join as KJ8}from"path";async function _r6($){try{let Z=await L_0($,{signal:AbortSignal.timeout(Cr6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||JO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function WG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function vr6($,Z){let Q=$g($),Y=Z?.brand?.trim()||JO1(Q),X=QJ8(Q,128),G=`${(j0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=YJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(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="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(G)}" />`,`<meta property="og:image" content="${WG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(H)}" />`,`<meta name="twitter:image:alt" content="${WG(F)}" />`,`<link rel="canonical" href="${WG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${WG(G)}.md" />`,`<link rel="icon" href="${WG(X)}" sizes="any" />`].join(`
|
|
3722
|
+
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class eD1{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:Qr6({...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:up.object({session:up.object({id:up.string().min(1)}),transport:up.object({type:up.literal("webrtc"),sdp:up.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var MX8=D(()=>{fU()});var IX8;var VX8=D(()=>{IX8=[{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 $O1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:Lq$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:IX8.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:VD/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 kX8=D(()=>{fU();VX8()});import{z as oX}from"zod";import{createHash as Yr6,createHmac as Xr6}from"crypto";class B_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Yr6("sha256").update(JSON.stringify($O1($))).digest("hex"),this.conversationKey=Xr6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new B_0({...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}=oX.object({agents:oX.array(oX.object({agent_id:oX.string(),name:oX.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 oX.object({platform_settings:oX.object({auth:oX.object({enable_auth:oX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...$O1(this.config)},AbortSignal.timeout(15000));return oX.object({agent_id:oX.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 oX.object({token:oX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return oX.object({token:oX.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 SX8=D(()=>{kX8()});import{createHmac as Jr6,timingSafeEqual as Gr6}from"crypto";import{z as lp}from"zod";function _X8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Jr6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function vX8($,Z){let Q=Buffer.from(JSON.stringify(CX8.parse($))).toString("base64url");return`${Q}.${_X8(Q,Z)}`}function bX8($,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(_X8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Gr6(W,G))return null;try{let K=CX8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+VD)return null;return K.data}catch{return null}}var CX8;var xX8=D(()=>{fU();CX8=lp.object({sessionId:lp.string().uuid(),organizationId:lp.string().min(1).max(256),userId:lp.string().min(1).max(256),threadId:lp.string().min(1).max(256),expiresAt:lp.number().int().positive()})});import{z as ZO1}from"zod";function fX8($,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 QO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var QO1;var yX8=D(()=>{QO1=ZO1.object({provider:ZO1.enum(["elevenlabs","openai"]),model:ZO1.string().trim().min(1).max(128)})});import{createHash as Wr6}from"crypto";import{z as cp}from"zod";function mp($){return`user.${Wr6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class XO1{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 gX8.Kvm(O_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:O_0.StorageType.Memory,ttl:hX8.nanos(VD),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=fX8(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()+VD},W=vX8(G,this.deps.secret),K=await this.kv(),H=mp(G),F=await K.get(H),U=F?.operation==="PUT"?D_0.parse(F.json()):null,N=YO1.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:mp($)});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=bX8(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=mp(Q),J=await Y.get(X),G=J?.operation==="PUT"?D_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,YO1.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=mp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?D_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,YO1.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(mp($));if(Q?.operation==="PUT"&&D_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(mp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var O_0,gX8,hX8,D_0,YO1;var uX8=D(()=>{wJ();fU();xX8();yX8();O_0=C(LK(),1),gX8=C(YA(),1),hX8=C(Tz(),1),D_0=cp.object({sessionId:cp.string().uuid(),expiresAt:cp.number(),connected:cp.boolean().optional(),conversation:QO1.optional(),characters:cp.number().int().nonnegative(),requests:cp.number().int().nonnegative()}),YO1=new TextEncoder});function Kr6($){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 Hr6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},lX8=()=>{let $=new $1;return $.use("*",Hr6),$.get("/",async(Z)=>{let Q=j0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await YG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Kr6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var cX8=D(()=>{J8();$$();dk0()});import{z as y1}from"zod";function EN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Er6($){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 zr6($,Z,Q){try{return JSON.parse($)}catch{throw new iX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Pr6($){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:zr6(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 Ar6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?tF(Q.function.parameters):tF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Tr6($){if(!$)return;return{openai:{response_format:$}}}function Rr6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function mX8($,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 dX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Fr6=256,Ur6,Nr6,Br6,Dr6,Or6,Lr6,wr6,jr6,iX8,pX8,nX8;var tX8=D(()=>{y4();J8();_p();vH();Ur6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Nr6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Br6=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(Nr6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Dr6=y1.object({type:y1.literal("text")}),Or6=y1.object({type:y1.literal("json_object")}),Lr6=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()})}),wr6=y1.union([Dr6,Or6,Lr6]),jr6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Br6),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(Ur6).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:wr6.optional(),user:y1.string().optional()});iX8=class iX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};pX8=new $1;pX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(EN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(EN("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(EN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=jr6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(EN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Er6(J.model);if(!G)return $.json(EN("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)=>jP(E.providerId));if(!j)return $.json(EN("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(EN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Pr6(J.messages),N=J.tools?Ar6(J.tools):void 0,B=Tr6(J.response_format),O=Rr6(),L=Math.floor(Date.now()/1000);if(J.stream)return DO($,async(w)=>{let j=mX8(F,U,N,J,B,$.req.raw.signal);try{let E=Dd(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",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(P+=q.text,P.length>=Fr6)await A()}else if(q.type==="tool-call"){await A();let f=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:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:dX8(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 A(),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=mX8(F,U,N,J,B,$.req.raw.signal),j=await gU(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:dX8(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(EN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(EN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(EN(X.message,"server_error"),500)}});nX8=pX8});function qr6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function oX8(){let $=new $1;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=d0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!EZ(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||S9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(OA(U)!==J)continue;if(!qr6(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 rX8=D(()=>{J8();eG()});var aX8;var sX8=D(()=>{aX8={name:"decocms",version:"4.446.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","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 Vr6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Ir6}}var eX8,Ir6="https://ph.studio.decocms.com",$J8;var ZJ8=D(()=>{J8();Cs();lf();V9();$$();LN1();sX8();eX8=new $1;eX8.get("/",($)=>{let Z={version:aX8.version,theme:R5$(),...pK().logo&&{logo:pK().logo},...hD()&&{internalUrl:pp1()},...j0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!j0().firecrawlApiKey,hostingEnabled:!!j0().controlplaneRestUrl&&!!j0().controlplaneServiceToken,hostingControlPlaneGa:j0().hostingControlPlaneGa,monitorEnabled:!!j0().clickhouseAnalyticsUrl&&!!j0().clickhouseAnalyticsPassword,monitorGa:j0().monitorGa,plansEnabled:j0().plansEnabled,auth:S68(),posthog:Vr6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});$J8=eX8});function $g($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function JO1($){return($g($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function QJ8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent($g($))}&sz=${Z}`}function kr6($,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 YJ8($){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=kr6(`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 P$}from"zod";var Sr6,XJ8;var JJ8=D(()=>{Sr6=P$.object({check_id:P$.string(),title:P$.string(),description:P$.string().optional(),impact:P$.string().optional(),why:P$.string().optional(),category:P$.string(),severity:P$.string(),value_band:P$.string().optional(),value_driver:P$.string().optional(),controllability:P$.string().optional(),pages:P$.array(P$.string()),tasks:P$.array(P$.string()),evidence:P$.string(),sample_scope:P$.string().optional(),sources:P$.array(P$.string())}),XJ8=P$.object({domain:P$.string(),brand:P$.string(),favicon:P$.string().optional(),scanned_at:P$.string().nullable(),lang:P$.string(),score:P$.number().nullable(),band:P$.string().nullable(),totals:P$.object({measured:P$.number(),registry_total:P$.number(),passed:P$.number(),failed:P$.number(),blocked:P$.number()}),buckets:P$.array(P$.object({id:P$.enum(["critical","important","worth"]),label:P$.string(),items:P$.array(Sr6)})),passing:P$.object({count:P$.number(),items:P$.array(P$.object({check_id:P$.string(),title:P$.string()}))}),not_measured:P$.object({count:P$.number(),groups:P$.array(P$.object({reason:P$.string(),label:P$.string(),count:P$.number(),checks:P$.array(P$.string())}))}),categories:P$.array(P$.object({key:P$.string(),label:P$.string(),score:P$.number().nullable(),band:P$.string().nullable(),pass:P$.number(),fail:P$.number()})),screenshots:P$.array(P$.object({url:P$.string(),page_type:P$.string().optional(),viewport:P$.enum(["desktop","mobile"]),image_url:P$.string()}))})});function GJ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${AW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function L_0($,Z={}){let Q=await fetch(GJ8($,"",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 XJ8.parse(await Q.json())}async function WJ8($,Z={}){let Q=await fetch(GJ8($,".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 GO1=D(()=>{JJ8();nB()});import{join as KJ8}from"path";async function _r6($){try{let Z=await L_0($,{signal:AbortSignal.timeout(Cr6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||JO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function WG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function vr6($,Z){let Q=$g($),Y=Z?.brand?.trim()||JO1(Q),X=QJ8(Q,128),G=`${(j0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=YJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(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="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(G)}" />`,`<meta property="og:image" content="${WG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(H)}" />`,`<meta name="twitter:image:alt" content="${WG(F)}" />`,`<link rel="canonical" href="${WG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${WG(G)}.md" />`,`<link rel="icon" href="${WG(X)}" sizes="any" />`].join(`
|
|
3723
3723
|
`)}function br6($,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}
|
|
3724
3724
|
</head>`)}function HJ8($){let Z=new $1;return Z.get("/:domain/og.png",async(Q)=>{let Y=$g(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(KJ8($,"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(`${AW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(xr6)}),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=$g(Q.req.param("file").replace(/\.md$/,""));try{let X=await WJ8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(fr6)});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=$?KJ8($,"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 _r6($g(Y)),K=vr6(Y,W);return Q.html(br6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Cr6=2500,xr6=1e4,fr6=1e4;var FJ8=D(()=>{J8();nB();GO1();$$()});function w_0($,Z){return fetch(`${AW({})}${$}`,Z)}async function yr6($,Z){let Q=await L_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function hr6($){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 gr6,LO,UJ8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},NJ8;var BJ8=D(()=>{J8();Q3();nB();GO1();gr6=new Set(["complete","errored","terminated","unknown"]);LO=new $1;LO.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});LO.use("/link-token/*",UJ8);LO.use("/suggest",UJ8);LO.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 yr6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});LO.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}=hr6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await w_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${rw({})}`},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)}});LO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await w_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${rw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:gr6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});LO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await w_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)}});LO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await w_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:[]})}});NJ8=LO});var ur6=1048576,WO1;var DJ8=D(()=>{J8();QK();$$();ZN1();WO1=new $1;WO1.post("/webhook",x5({maxSize:ur6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=j0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!m48(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=d48(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await i48(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as lr6}from"crypto";function dr6($,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 lr6(Buffer.from(X),Buffer.from(Y))}function ir6($,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 OJ8($){let Z=new $1;return Z.post("/webhook",x5({maxSize:cr6,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(!dr6(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"&&!mr6.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 y10().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=ir6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await pr6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function pr6($,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 Dx$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var cr6=5242880,mr6;var LJ8=D(()=>{J8();QK();yW();x7();mr6=new Set(["check_suite","issue_comment"])});import{DBOS as HO1,SchedulerMode as nr6}from"@dbos-inc/dbos-sdk";async function or6(){try{return await rr6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function rr6(){if(!f10())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (u91(),h91)),Promise.resolve().then(() => (g91(),y91))]),Q=await y10(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=O8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=MT$({sandboxes:J,pools:G,records:await IT$(X,J,G),legacyPools:wT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await VT$(K,gH0(X,new BX(j0().encryptionKey)),{now:W,orgFsLifetimeMs:zT0}),U=0,N=0,B=0;for(let O of H)try{let L=await Y.pushCredentials(O);U+=L.stored,N+=L.kept}catch(L){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${L instanceof Error?L.message:String(L)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function sr6($,Z){let Q=await HO1.runStep(or6,{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 wJ8(){if(KO1)return;if(!j0().agentSandboxEnabled||!f10())return;KO1=HO1.registerWorkflow(sr6,{name:"sandboxCredentialPushWorkflow"}),HO1.registerScheduled(KO1,{name:"sandboxCredentialPushWorkflow",crontab:tr6,mode:nr6.ExactlyOncePerIntervalWhenActive})}var tr6="1-59/10 * * * *",KO1=null;var jJ8=D(()=>{CG();BL();V41();PT0();jT0();yW();$$()});function EJ8($){let Z=new YO($.db,new BX($.encryptionKey)),Q=new $1;return Q.get("/attachments/:token",async(Y)=>{let X=Av$(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 dQ(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 zJ8=D(()=>{J8();BL();ZQ1();FE();Y60()});import{DBOS as Xz,SchedulerMode as ar6}from"@dbos-inc/dbos-sdk";function PJ8($){UO1=$}function BO1(){if(!UO1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return UO1}function DO1(){let $=BO1();return new YO($.db,new BX($.encryptionKey))}async function Ys6($){try{let Z=await DO1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await VH(BO1().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 dQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${$s6}m"`,W=0,K;for(let H=0;H<Zs6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await HF1(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 Xs6($,Z){let Q=await Xz.runStep(()=>DO1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>Xz.runStep(()=>Ys6(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 Js6($,Z){try{let Q=await DO1().getById($);if(!Q?.enabled)return"disabled";let Y=await VH(BO1().db,Q.organizationId);if(!Y)return"disabled";let X=await HF1(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 Gs6($,Z){await Xz.sleep(nk0()+Qs6),await Xz.runStep(()=>Js6($,Z),{name:"settleJiraMove"})}async function AJ8($,Z){if(!NO1)throw Error("[jira-trigger] settle workflow is not registered");await Xz.startWorkflow(NO1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function TJ8(){if(FO1)return;NO1=Xz.registerWorkflow(Gs6,{name:"jiraSettleWorkflow"}),FO1=Xz.registerWorkflow(Xs6,{name:"jiraTriggerSweepWorkflow"}),Xz.registerScheduled(FO1,{name:"jiraTriggerSweepWorkflow",crontab:er6,mode:ar6.ExactlyOncePerIntervalWhenActive})}var er6="7-59/10 * * * *",$s6=35,Zs6=5,Qs6=5000,UO1=null,NO1=null,FO1=null;var OO1=D(()=>{BL();Y60();_d();FE();WF1();tk0()});function RJ8($){let Z=new YO($.db,new BX($.encryptionKey));async function Q(X,J){let G=F08(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await AJ8(W.id,G)}let Y=new $1;return Y.post("/webhook/:secret",x5({maxSize:Ws6}),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 Ws6=1048576;var qJ8=D(()=>{J8();QK();BL();OO1();tk0();Y60()});function MJ8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var IJ8,Ks6,Hs6,VJ8;var kJ8=D(()=>{J8();wJ();ud();ac();IJ8=new $1,Ks6=["range","if-none-match","if-modified-since"],Hs6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];IJ8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Hp($))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 N80(Y,Z);if(!X)throw new q1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&qW()){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 MJ8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of Ks6){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 Hs6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),MJ8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});VJ8=IJ8});var Q50=b((Zg)=>{var Fs6=Zg&&Zg.__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]}),Us6=Zg&&Zg.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Fs6(Z,$,Q)};Object.defineProperty(Zg,"__esModule",{value:!0});Us6(LG(),Zg)});var _J8=b((SJ8)=>{Object.defineProperty(SJ8,"__esModule",{value:!0});SJ8.version=void 0;SJ8.version="3.4.0"});var xJ8=b((zN)=>{var Ns6=zN&&zN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(zN,"__esModule",{value:!0});zN.NodeTransport=zN.VERSION=void 0;zN.nodeResolveHost=js6;var a5=Q50(),Bs6=M0("net"),LO1=M0("tls"),Ds6=M0("path"),vJ8=M0("fs"),Os6=Ns6(M0("dns")),Ls6=_J8();zN.VERSION=Ls6.version;var ws6="nats.js";class bJ8{socket;version;lang;yields=[];signal=(0,a5.deferred)();closedNotification=(0,a5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=ws6,this.version=zN.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,a5.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 a5.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 a5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new a5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,a5.deferred)(),Q,Y=(0,Bs6.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,a5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=a5.DataBuffer.concat(...this.yields),X=(0,a5.extractProtocolMessage)(Y);if(X!=="")try{let J=a5.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,a5.deferred)();try{if($=(0,Ds6.resolve)($),!(0,vJ8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,vJ8.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,a5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new a5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,a5.deferred)();try{let X=(0,LO1.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 a5.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,a5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new a5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,a5.deferred)();try{let Y=(0,LO1.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 a5.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,a5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,a5.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 LO1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,a5.render)($)}`);let Z=(0,a5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,a5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,a5.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}}zN.NodeTransport=bJ8;function js6($){let Z=(0,a5.deferred)();return Os6.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 uJ8=b((hJ8)=>{Object.defineProperty(hJ8,"__esModule",{value:!0});hJ8.connect=Es6;var fJ8=xJ8(),yJ8=Q50(),gJ8=Q50();function Es6($={}){if((0,gJ8.hasWsProtocol)($))return Promise.reject(gJ8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,yJ8.setTransportFactory)({factory:()=>{return new fJ8.NodeTransport},dnsResolveFn:fJ8.nodeResolveHost}),yJ8.NatsConnectionImpl.connect($)}});var lJ8=b((wO)=>{var Ps6=wO&&wO.__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]}),As6=wO&&wO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Ps6(Z,$,Q)};Object.defineProperty(wO,"__esModule",{value:!0});wO.connect=void 0;var Ts6=uJ8();Object.defineProperty(wO,"connect",{enumerable:!0,get:function(){return Ts6.connect}});As6(Q50(),wO)});function iJ8($){let Z=$?.connectFn??Is6,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:Ms6,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=D7(qs6,Rs6,O-1,2,0.5);await L$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?cJ8.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=dJ8.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 Is6($){return mJ8.connect($)}var cJ8,mJ8,dJ8,Rs6=100,qs6=3000,Ms6=3000;var pJ8=D(()=>{r$();cJ8=C(Tz(),1),mJ8=C(lJ8(),1),dJ8=C(LK(),1)});function j_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 E_0($,Z){return`${$}.${Z}`}class wO1{cache;constructor($){this.cache=j_0({ttlMs:$?.ttlMs??Vs6,maxSize:$?.maxSize??ks6})}async get($,Z){return this.cache.get(E_0($,Z))??null}async set($,Z,Q){this.cache.set(E_0($,Z),Q)}async invalidate($,Z){this.cache.delete(E_0($,Z)),this.cache.delete(E_0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Vs6=600000,ks6=5000;var nJ8=()=>{};function z_0($,Z){return`${$}:${Z}`}function jO1($){let Z=j_0({ttlMs:$?.ttlMs??Ss6,maxSize:$?.maxSize??Cs6}),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(tJ8,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(z_0(K,H))},set(K,H,F){Z.set(z_0(K,H),F)},invalidate(K,H){Z.delete(z_0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(tJ8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(z_0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var tJ8="studio.ai-provider-keys.invalidate",Ss6=30000,Cs6=5000;var oJ8=()=>{};class EO1{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 rJ8=($)=>{let Z;return()=>Z??=$()},zO1,PO1;var sJ8=D(()=>{S6();zO1=rJ8(()=>Z$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),PO1=rJ8(()=>Z$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function gs6($=$G8){return{name:tU,subjects:[`${NX1}.>`],storage:nH.StorageType.File,max_age:bs6,max_bytes:fs6,max_msgs_per_subject:ys6,discard:nH.DiscardPolicy.Old,retention:nH.RetentionPolicy.Limits,duplicate_window:xs6,num_replicas:$}}class ZG8{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 aJ8($){let Z=eJ8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function cs6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,vs6().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 ms6($,Z){return $.info?.cluster?Z:1}function ds6($){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 AO1{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=gs6(X);try{await Y.streams.info(tU),await Y.streams.update(tU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(tU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(tU),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await nH.jetstreamManager($),X=ms6($,$G8);try{await Z(Y,X)}catch(J){if(X<=1||!ds6(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:td});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=cs6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=$g$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=DX1(H,{runId:Z}),N=performance.now()-F;zO1().record(N),PO1().add(1,{"org.id":Y??"unknown"}),ls6?.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?aJ8(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(),us6)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:aJ8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:td}),!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=DX1(Z,{runId:$,dedup:Q});zO1().record(performance.now()-X),PO1().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=ey$({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"?nH.DeliverPolicy.New:nH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=jE($),W;try{W=await E8(async()=>{return(await Y.consumers.get(tU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:td})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=wM0({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(BM0()).pipeThrough(DM0()).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(tU,{filter:jE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var nH,eJ8,_s6=($)=>{let Z;return()=>Z??=$()},vs6,bs6=86400000000000,xs6=120000000000,fs6=4294967296,$G8,ys6=500000,hs6,us6,ls6;var QG8=D(()=>{r$();OX1();jM0();OM0();S6();sJ8();nH=C(LK(),1),eJ8=C(Tz(),1),vs6=_s6(()=>Z$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),$G8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);hs6=process.env.STREAM_ENCODE_TRACE==="1",us6=process.env.DECOPILOT_STREAM_TRACE==="1";ls6=hs6?new ZG8:null});function P_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,OF(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 YG8=D(()=>{p8()});class TO1{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 is6($,Z,Q={}){let Y=$.startsWith("thread:")?RH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function RO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await xU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await sm($,{threadId:X,runBranch:G?.branch}),K=await d00($,Q,R41(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=is6(W,await xT0($,X),{flat:Bf(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 L3(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 XG8=D(()=>{X7();hW();x7()});async function JG8($,Z,Q){let Y=Z.organizationId;if(!cX(Z))return!1;if(!ff(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=zU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await Z5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),w8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var GG8=D(()=>{I4();dY();bd();kH();A9()});function as6($){return $ instanceof CX}function WG8($,Z){return Z-$>=rs6}class qO1{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??ps6;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??ts6,Q=this.options.itemIntervalMs??ns6,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()-o71),jY1);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()-ss6));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 OY1(this.taskBoard,X,Y),await LY1(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!==e1.progress||cX(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await RO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!WG8(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:e1.progress,to:e1.review,reason:H}}).catch(()=>{}),w8(J,F),await SH(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!==e1.progress||G.assigneeId!==R8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await CH(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),as6(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()+os6)).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!==e1.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(()=>{}),w8(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(!WG8(WD(Q,Z.reviewCycleStartedAt),Date.now()))return;await SH($,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(!cX(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 RO1(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 yd(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 JG8(G,Y,W))return!0;if(await eg$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!UY1(W))return!1;return await xd(G,Y,{previewMatchesHead:NY1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await DE($,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 ps6=60000,ns6=300000,ts6=50,os6=60000,rs6=900000,ss6=120000;var KG8=D(()=>{I4();Iq0();XG8();pU();T80();kH();GG8();A9();SW();EY1();x7();c$0();fd()});import{readdir as es6,rm as A_0}from"fs/promises";import{join as T_0}from"path";async function R_0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-$a6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Qg($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await HG8($,X,Z);else if(!X.startsWith(".")){let J=T_0($,X),G=await Qg(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await HG8(J,K,Z)}if((await Qg(J)).length===0)await A_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function HG8($,Z,Q){let Y=0,X=T_0($,Z),J=await Qg(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=T_0(X,W),H=await Qg(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=T_0(K,U);await A_0(B,{recursive:!0,force:!0}),Y++}}if((await Qg(K)).length===0)await A_0(K,{recursive:!0,force:!0})}if((await Qg(X)).length===0)await A_0(X,{recursive:!0,force:!0});return Y}async function Qg($){try{return(await es6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var $a6=30;var MO1=()=>{};import{DBOS as IO1,SchedulerMode as Za6}from"@dbos-inc/dbos-sdk";async function Ya6(){let $=[KK(),Ug(),IN()],Z=0;for(let Q of $)try{Z+=await R_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 Xa6($,Z){await IO1.runStep(()=>Ya6(),{name:"monitoringRetention"})}function UG8(){if(FG8)return;FG8=!0;let $=IO1.registerWorkflow(Xa6,{name:"monitoringRetentionWorkflow"});IO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Qa6,mode:Za6.ExactlyOncePerIntervalWhenActive})}var Qa6="23 4 * * *",FG8=!1;var NG8=D(()=>{b3();MO1()});function BG8($){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 iQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await NA($.db,Z,Y.role);return X.boundAuth=nU1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new aP(Q,void 0,X.boundAuth,Y.role,"self"),BE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var DG8=D(()=>{XW();jU()});function Ja6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Ga6(){return{services:Ja6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Ka6(){for(let $ of Wa6)$()}function OG8($){let Z=[...VO1.logs,$];VO1={...VO1,logs:Z.length>500?Z.slice(-500):Z},Ka6()}function kO1(){return Ha6}var VO1,Wa6,Ha6=!1;var SO1=D(()=>{VO1=Ga6(),Wa6=new Set});import{EventEmitter as Fa6}from"events";var CO1;var LG8=D(()=>{SO1();CO1=new Fa6;CO1.on("request",($)=>{OG8($)})});function wG8(){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=dp(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>dp(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${K9.tool}${B}${K9.dim}(${w})${K9.reset}`}else if(N.method)J=`${K9.dim}${dp(N.method)}${K9.reset}`}}catch{}}let W=dp(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${K9.mcp}${dp(F.slice(0,12))}\u2026${K9.reset}`}else if(X==="/mcp")W=`${K9.mcp}/mcp${K9.reset}`;else if(X==="/mcp/registry")W=`${K9.mcp}/mcp/registry${K9.reset}`;let K=Na6(Y),H=G?"\u25C0":"\u2190";if(!kO1())console.log(`${K9.dim}${H}${K9.reset} ${K}${Y}${K9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=Ua6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!kO1())console.log(`${K9.dim}${O}${K9.reset} ${K}${Y}${K9.reset} ${W}${J?` ${J}`:""} ${N}${U}${K9.reset} ${K9.duration}${B}${K9.reset}`);CO1.emit("request",{method:Y,path:dp(X),status:U,duration:F,timestamp:new Date})}}}var K9,Ua6=($)=>{if($>=500)return K9.serverError;if($>=400)return K9.clientError;if($>=300)return K9.redirect;return K9.ok},Na6=($)=>{return K9[$]||K9.reset},dp=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var jG8=D(()=>{SO1();LG8();K9={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 AG8}from"crypto";import{mkdir as Ba6,readdir as Da6,rm as EG8,stat as TG8}from"fs/promises";import{join as vO1,relative as Oa6}from"path";import{z as Q8}from"zod";function qG8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return vO1(La6,Z)}function MG8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function _O1($,Z){let Q=qG8($),Y=MG8(Z);return vO1(Q,Y)}function wa6($,Z,Q,Y){let X=j0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return AG8("sha256",X).update(J).digest("hex")}function PG8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=wa6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${MG8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function IG8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${AG8("md5","etag").update(Y).digest("hex")}"`}async function VG8($,Z,Q,Y,X){try{let J=await Da6($,{withFileTypes:!0});for(let G of J){let W=vO1($,G.name),H=Oa6(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 VG8(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 TG8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:IG8(W,F.mtime,F.size)})}catch{}}}}catch{}}function kG8($,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=qG8(Y);await Ba6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await VG8(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=_O1(Y,J.key),W=await TG8(G);return{contentType:nN1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:IG8(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=aD(J.expiresIn,zG8);return{url:PG8(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=aD(J.expiresIn,zG8);return{url:PG8(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=_O1(Y,J.key);try{return await EG8(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=_O1(Y,K);try{await EG8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function bO1($,Z,Q){let Y=kG8(Z,Q),X=new Ww({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:xZ});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 P3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),nW(X,J,$,"mcp:dev-assets")}async function SG8($,Z,Q,Y){let J=kG8(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 La6="./data/assets",zG8=3600,RG8,CG8;var _G8=D(()=>{$$();Zi();J8();mJ0();$i();DJ();eD();HC0();RG8=new $1;RG8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return bO1($.req.raw,Z,Y)});CG8=RG8});var vG8={};Q6(vG8,{mountDevRoutes:()=>ja6});function ja6($,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 bO1(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 SG8(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",CG8);let Q=new $1;Q.use("*",iH({mountPath:"/api/dev-assets"})),Q.route("/",KC0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var bG8=D(()=>{J8();uN1();HC0();_G8()});var dG8={};Q6(dG8,{watchHandler:()=>mG8,resolveCorsOrigin:()=>lG8,isSsoExemptPath:()=>hG8,isAllowedOAuthRedirectUri:()=>cG8,createApp:()=>Va6});import{readFileSync as Ea6}from"fs";import{PrometheusSerializer as za6}from"@opentelemetry/exporter-prometheus";import{DBOS as jO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Ta6,oAuthProtectedResourceMetadata as Ra6}from"better-auth/plugins";async function Pa6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,fG8(xG8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),fG8(xG8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function fG8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function hG8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${tS0}/`)||$.startsWith(`${cS0}/`)}function uG8($){return $==="local.studio.decocms.com"}function lG8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(uG8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function cG8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||uG8($.hostname)}async function Va6($={}){let Z=$.database??O8(),Q=!1;$5.stop().catch((K0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",K0)});let Y,X,J,G,W=new wO1,K,H,F,U=null;if($.disableNats)K=jO1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new _80,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(K0)=>{return(async()=>{let H0=K0.getReader();try{while(!0){let{done:T0}=await H0.read();if(T0)break}}catch{}finally{H0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=iJ8();let K0=j0().natsCredsPath,H0;if(K0)try{H0=Ea6(K0,"utf8")}catch(K8){console.error(`[app] failed to read NATS_CREDS at ${K0}; connecting anonymously`,K8)}U.init(j0().natsUrls,H0?{creds:H0}:void 0);let T0=B$1()?new r11({getJetStream:()=>U.getJetStream()}):null;T0?.init().catch(()=>{}),Y=T0;let A0=new FZ1({getJetStream:()=>U.getJetStream()});A0.init().catch(()=>{}),X=A0;let D1=new gf(JY1,{getJetStream:()=>U.getJetStream()}),g$=new gf(m$0,{getJetStream:()=>U.getJetStream()});D1.init().catch(()=>{}),g$.init().catch(()=>{}),J={reads:D1,cards:g$};let m$=new dJ1({getJetStream:()=>U.getJetStream()});m$.init().catch(()=>{}),G=m$,K=jO1({getConnection:()=>U.getConnection()}),H=new EO1({getConnection:()=>U.getConnection()}),F=new AO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),U68(U),U.onReady(()=>{T0?.init().catch((K8)=>{console.error("[McpListCache] Deferred init failed:",K8)}),A0.init().catch((K8)=>{console.error("[SkillCatalogCache] Deferred init failed:",K8)}),D1.init().catch((K8)=>{console.error("[PrReadCache] Deferred init failed:",K8)}),g$.init().catch((K8)=>{console.error("[PrCardCache] Deferred init failed:",K8)}),m$.init().catch((K8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",K8)}),K.start(),ZB$(()=>U.getConnection()),F.init().catch((K8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",K8)})})}if(Jz)await Jz();s11(Y),NZ1(X),GY1(J),iJ1(G);let B={storage:new ah(Z.db),sseHub:$5,onThreadFinished:async(K0,H0)=>hd(new O3(Z.db),K0,H0,new SG(Z.db))},O=new PX1(B),L=new $60(Z.db),w=new TO1(L);w.start(),sg$(H),H.start((K0)=>{QM0(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;xN1(j),U?.onReady(()=>xN1(j)),qG1(j),U?.onReady(()=>qG1(j)),F.init().catch((K0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",K0)}),Jz=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),v58(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),QB$(),G.teardown(),s11(null),NZ1(null),GY1(null),iJ1(null)};let E=new $1;if(E.use("*",lJ1({enabled:(K0)=>Kp(K0,"debug")==="1"})),E.use("*",p_0),E.use("/*",G68({origin:(K0,H0)=>lG8(K0,{baseUrl:j0().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'")}),!j0().noTui)E.use("*",wG8());E.use("*",async(K0,H0)=>{if(await H0(),$n(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($X.HEALTH,(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);return K0.json({status:"ok"})}),E.get($X.HEALTH_LIVE,(K0)=>{return K0.json({status:"ok"})}),E.get($X.HEALTH_READY,async(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);let H0={};if(H0.postgres={status:await Pa6(Z.pool)?"up":"down"},U)H0.nats=U.isConnected()?{status:"up"}:{status:"down"};else H0.nats={status:"down"};let T0=H0.postgres.status==="up",A0=T0?200:503;return K0.json({status:T0?"ready":"not_ready",services:H0},A0)}),E.get($X.METRICS,async(K0)=>{try{let H0=await r_0.collect(),T0=Aa6.serialize(H0.resourceMetrics);return K0.text(T0,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(`${$X.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(K0)=>{let H0=K0.req.param("queueName");if(!qa6.has(H0))return K0.json({error:`Unknown queue: ${H0}`},404);let[T0,A0]=await Promise.all([jO.listQueuedWorkflows({queueName:H0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),jO.listQueuedWorkflows({queueName:H0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return K0.json({queue_length:T0.length,in_flight:A0.length})}),E.route("/api/config",$J8),E.route("/api/_reports",NJ8),E.route("/api/_stripe",WO1),E.route("/api/_github",OJ8({taskBoard:()=>i,contextFactory:()=>g})),E.route("/api/_git",Lp);let T={db:Z.db,encryptionKey:j0().encryptionKey};E.route("/api/_jira",RJ8(T)),E.route("/api/_jira",EJ8(T)),E.route("/report",HJ8($.clientDir)),E.route("/api/auth/custom",C68),E.route("/api/auth/desktop",x68),E.all("/api/auth/admin/*",z58),E.all("/api/auth/*",async(K0)=>{return await x8.handler(K0.req.raw)});let P=b88();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",D60),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",D60),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",a40),E.route("/",h88()),E.use("/oauth-proxy/:connectionId/*",D60),E.all("/oauth-proxy/:connectionId/*",yG8);let A=async(K0)=>{let T0=await Ma6()(K0.req.raw),A0=await T0.json();return Response.json(A0,T0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",D60),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(K0)=>{let T0=await Ia6()(K0.req.raw),A0=await T0.json();return Response.json(A0,T0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let f=K68({ttlMs:120000}),_=await v48({db:Z.db,auth:x8,encryption:{key:j0().encryptionKey},observability:{tracer:IO,meter:Z$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});iQ.set(_),xp1({db:Z.db,baseUrl:d5()}),b48({db:Z.db}),g48({db:Z.db}),p48({db:Z.db}),PJ8({db:Z.db,encryptionKey:j0().encryptionKey}),Rb$({db:Z.db}),a48({db:Z.db}),$x$({db:Z.db});let V=CX0(Z.db),y=new br(Z.db),g=BG8({db:Z.db});yJ1({storage:V,studioContextFactory:g}),CX1({systemDatabaseUrl:js0(j0().databaseUrl,j0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$5}}),RX1({dispatchRunFn:py$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$5}});let l=new ah(Z.db),i=new O3(Z.db),p=new SG(Z.db),U0=new qO1(i,g,p);if(j0().taskBoardReviewSweeperEnabled){U0.start();let K0=Jz;Jz=async()=>{await K0?.(),U0.dispose()}}Bg$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let K0=U?.getConnection();return K0?await gG8.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 T0=await l.completeRunIfNotCompleted(K0,H0);if(P_0($5,H0,K0,T0),T0)await hd(i,K0,H0,p);return T0},markRunRequiresAction:async(K0,H0)=>{let T0=await l.requiresActionIfInProgress(K0,H0);return P_0($5,H0,K0,T0),T0},markRunFailed:async(K0,H0,T0,A0)=>{let D1=await l.markRunFailed(K0,H0,T0,A0);if(P_0($5,H0,K0,D1),D1)await hd(i,K0,H0,p);return D1},clearSynthesizedError:async(K0,H0)=>{await l.messageParts().replaceMessageParts(K0,wE(K0,H0),[])},persistTitle:(K0,H0,T0)=>l.update(K0,H0,{title:T0}),onTitleUpdated:async({runId:K0,orgId:H0,title:T0})=>{let A0=await l.get(K0,H0).catch(()=>null);$5.emit(H0,OF(K0,A0?.status??"in_progress",{title:T0,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:T0,usage:A0})=>{f1.capture({distinctId:T0,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:T0,reason:A0,kind:D1})=>{f1.capture({distinctId:T0,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)}}),jy$({studioContextFactory:g,systemDatabaseUrl:js0(j0().databaseUrl,j0().databasePgSsl),streamBuffer:F}),UG8(),fp1(),f48(),u48(),t48(),TJ8(),kb$(),$68(),Zx$(),wJ8();let _0=async(K0,H0,T0)=>{let A0=await V.findById(K0,H0);if(!A0)throw Error("Automation not found");return uJ1({automationId:A0.id,organizationId:A0.organization_id,triggerId:null})},G0=new Dp(V,({automation:K0,trigger:H0,contextMessages:T0,idempotencyKey:A0})=>C80({automationId:K0.id,organizationId:K0.organization_id,triggerId:H0.id,contextMessages:T0},{idempotencyKey:A0})),N0=[KK(),Ug(),IN()];for(let K0 of N0)R_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(d_0(K0.req.path))return H0();let T0={measure:async(D1,g$)=>{pW(K0,D1);try{return await g$()}finally{A3(K0,D1)}}},A0=await iQ.create(K0.req.raw,{timings:T0});A0.automationRunner=_0,K0.set("studioContext",A0);try{await H0()}finally{let D1=A0.pendingRevalidations;if(D1.length>0)Promise.race([Promise.allSettled(D1),L$(30000)]).catch((m$)=>console.error("[studio] revalidation cleanup error:",m$))}}),E.use("/api/:org/decopilot/*",Fp),E.use("/api/:org/v1/*",Fp),E.use("/api/:org/files/*",Fp),E.use("*",async(K0,H0)=>{if(hG8(K0.req.path))return H0();let T0=K0.get("studioContext");if(!T0?.organization?.id||!T0?.auth?.user?.id)return H0();if(!(await T0.storage.orgSsoConfig.getByOrgId(T0.organization.id))?.enforced)return H0();if(!await T0.storage.orgSsoSessions.isValid(T0.auth.user.id,T0.organization.id))return K0.json({error:"SSO authentication required for this organization"},403);return H0()});let Z0=new $1;Z0.use("*",iH({mountPath:"/api/org-sso"})),Z0.route("/",sS0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(K0)=>{return K0.json({tools:en0,grouped:sP()})}),E.use("/mcp/*",async(K0,H0)=>{pW(K0,"mcp");try{return await H0()}finally{A3(K0,"mcp")}});let Q0=async(K0,H0)=>{let T0=K0.var.studioContext;if(!T0.auth.user?.id&&!T0.auth.apiKey?.id){let A0=new URL(K0.req.url),D1=K0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),g$=D1?`${D1}://${A0.host}`:A0.origin;return K0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${g$}${A0.pathname}/.well-known/oauth-protected-resource"`}})}return await H0()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),qW()){let{mountDevRoutes:K0}=(bG8(),__0(vG8));K0(E,Q0)}let s=new $1;s.use("*",iH({mountPath:"/mcp"})),s.route("/",rM0()),E.route("/mcp",s);let Y0=new $1;Y0.use("*",iH({mountPath:"/mcp/self"})),Y0.route("/",uC0()),E.route("/mcp/self",Y0);let i0=new $1;i0.use("*",iH({mountPath:"/mcp"})),i0.route("/",eM0()),E.route("/mcp",i0),E.use("/api/:org/models/*",async(K0,H0)=>{pW(K0,"llm_models");try{return await H0()}finally{A3(K0,"llm_models")}});let C0=x58({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",C0),E.route("/api",VJ8);let G1=new $1;G1.use("*",iH({mountPath:"/api"})),G1.route("/",dC0()),E.route("/api",G1),E.route("/api",nX8);let l0=new $1;l0.use("*",iH({mountPath:"/api"})),l0.route("/",iC0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",l0);let L0=new fr(Z.db),E0=new $1;E0.use("*",iH({mountPath:"/api"})),E0.route("/",QC0()),E.route("/api",E0),E.route("/api/deco-sites",r58()),E.route("/api/deco-apps",lX8());let u0=new $1;u0.use("*",iH({mountPath:"/api/deco-sites"})),u0.route("/",XC0()),E.route("/api/deco-sites",u0),E.route(tS0,P58()),E.route(CQ8,bQ8()),E.route("/api/_editor-resolve",oX8()),E.route(h68,u68()),E.route(cS0,Z58());let B1=j0(),Z1=B1.elevenlabsApiKey?new B_0({apiKey:B1.elevenlabsApiKey,model:B1.elevenlabsVoiceModel,conversationModel:B1.elevenlabsConversationModel,voiceId:B1.elevenlabsVoiceId}):null,v0={openai:B1.openaiLiveApiKey?new eD1({apiKey:B1.openaiLiveApiKey,voice:B1.openaiLiveVoice}):null,elevenlabs:Z1?new aD1(Z1,()=>U?.getConnection()??null):null},c0=new XO1({adapter:Z1,conversationAdapters:v0,defaults:B1,secret:B1.studioJwtSecret??B1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),p0=EX8({voiceSessions:c0,kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:$5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:qW(),mcpAuth:Q0,oauthProxyHandler:yG8,watchHandler:mG8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",p0),E.notFound((K0)=>{return K0.json({error:"Not Found",path:K0.req.path},404)}),E.onError(y58),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([$5.stop(),Jz?Promise.resolve(Jz()).finally(()=>{Jz=null}):Promise.resolve()]),U)await U.drain().catch((K0)=>console.error("[shutdown] NATS drain error:",K0));console.log("[shutdown] Flushing telemetry..."),await sX().catch((K0)=>console.error("[shutdown] Telemetry flush error:",K0)),console.log("[shutdown] Closing database..."),await uZ$(Z).catch((K0)=>console.error("[shutdown] Database close error:",K0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await jO.registerQueue(v3,{partitionQueue:!0,concurrency:bJ1,minPollingIntervalMs:xJ1}),await jO.registerQueue(_3,{partitionQueue:!0,concurrency:kX1,priorityEnabled:!0}),await jO.registerQueue(qN,{workerConcurrency:j0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(MN,{workerConcurrency:j0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(qO,{partitionQueue:!0,concurrency:wy$}),await jO.registerQueue(Fz,eb$),await lN1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((K0)=>jO.deleteQueue(K0))),await fJ1(Z.pool),WX$().catch((K0)=>{console.error("[studio-pack-backfill] failed:",K0)}),yp1().catch((K0)=>{console.error("[org-fs] public-sets boot sync kick failed:",K0)})}})}var gG8,xG8=5000,Jz=null,yG8=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 iQ.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 Xp(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 e40(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=g88(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=j0().baseUrl??j.origin;try{if(!cG8(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(Q68(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 P,A=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 _0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.slice(U0+1));A=_0||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)A=g;if(typeof l==="string"&&l)q=l;let i=new URLSearchParams;for(let[p,U0]of y.entries())i.append(p,U0.toString());P=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{P=g}let i=typeof l==="object"&&l!==null&&!Array.isArray(l);if(P===void 0&&!i)P=g;if(P===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}:{}},P=JSON.stringify(p),E["Content-Type"]="application/json"}}else P=$.req.raw.body??void 0;let f=await fetch(w.toString(),{method:$.req.method,headers:E,body:P,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of f.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&f.ok){let y=await f.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 Jp(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:A,clientSecret:q,tokenEndpoint:i};await new j9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:f.status,statusText:f.statusText,headers:_})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:_})},mG8=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&&(!dU(Y)||!await iU(Z)))return $.json({error:"forbidden"},403);let W=G?Nq0:Y;if(G)fD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return DO($,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()})})})},Aa6,qa6,Ma6=()=>Ra6(x8),Ia6=()=>Ta6(x8);var iG8=D(()=>{r$();$$();gp1();y48();l48();o48();h80();cQ1();Z68();c$0();V9();ac();p8();J8();gS0();W68();cJ1();Q3();jU();HN1();CG();S6();$6();LN1();f68();l68();Q58();AN1();A58();CN1();gN1();hN1();UH();zS0();uN1();g58();uS0();zX8();qX8();MX8();SX8();uX8();dN1();cX8();sM0();v80();tX8();$I0();ED1();rX8();wD1();ZJ8();FJ8();BJ8();DJ8();LJ8();jJ8();zJ8();qJ8();OO1();oN1();kJ8();jD1();DD1();j50();pJ8();_J();rT0();KY1();Y00();J00();nJ1();nJ8();oJ8();fN1();QG8();AX1();YG8();Lo();hr();xD();A9();kU1();KG8();NG8();O30();MO1();b3();cN1();bD();EX1();O30();NM0();hn0();un0();DG8();Zl();jG8();_p();HN1();Cd();pd();YM0();gG8=C(LK(),1);Aa6=new za6,qa6=new Set([v3,_3,qN,MN,qO,Fz])});var oG8={};Q6(oG8,{resolveClientDir:()=>xa6,resolveAssetPathWithTraversalCheck:()=>tG8,isPathWithinDirectory:()=>nG8,createAssetHandler:()=>fa6});import{resolve as Y50,dirname as ka6,join as Sa6,extname as Ca6,basename as _a6,sep as pG8}from"path";function va6($,Z){if($===Z||_a6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${pG8}assets${pG8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function nG8($,Z){let Q=Y50(Z),Y=Y50($);return Y===Q||Y.startsWith(Q+"/")}function tG8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=Y50(Z,Q);if(!nG8(Y,Z))return null;return Y}function xa6($,Z="../client"){let Q=new URL($),Y=ka6(Q.pathname);return Y50(Y,Z)}function fa6($={}){let{env:Z="production",clientDir:Q=ba6,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=tG8({requestPath:W,clientDir:Q});if(!K)return null;let H=Sa6(K,"index.html"),F=Y50(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Ca6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:va6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var ba6="./dist/client";var rG8=()=>{};var sG8={};Q6(sG8,{tryUpgradePreviewWs:()=>ma6,tryHandlePreviewHttp:()=>ca6,previewWebSocketHandler:()=>da6,parsePreviewBaseDomain:()=>la6,isPreviewWsData:()=>q_0,extractHandleFromHost:()=>xO1});function ha6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function ua6(){return new Response(ga6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function la6($){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 xO1($,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 ca6($,Z){let Q=xO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return J50(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(mm)&&ha6($))return ua6();return X.headers.delete(mm),X}function J50($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function q_0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function ma6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=xO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return J50(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return J50(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return J50(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 J50(426,"upgrade failed");return}function X50($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var ya6=256,ga6='<!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>',da6;var aG8=D(()=>{V10();da6={open($){let Z=$.data;if(!q_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)}`),X50($,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)=>{X50($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{X50($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!q_0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=ya6){X50($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!q_0(Z))return;X50($,Z,1000,"")}}});var Q38={};Q6(Q38,{printBanner:()=>pa6,bannerLines:()=>Z38,BANNER_LINES:()=>eG8,BANNER_GRADIENT:()=>$38});function ia6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function Z38($){let Z=eG8.map((Q,Y)=>{let[X,J,G]=ia6($38[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 pa6($){console.log("");for(let Z of Z38($))console.log(Z);console.log("")}var eG8,$38;var Y38=D(()=>{eG8=[" \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 "],$38=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});r$();var tO1="13";function oO1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:tO1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}r$();import P38 from"pg";var rO1=8314027461559302n,A38=600000,T38=500;async function sO1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=A38}=$,X=$.log??((K)=>console.log(K)),J=new P38.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",[rO1.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 L$(T38)}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)",[rO1.toString()])}catch{}await J.end().catch(()=>{})}}$$();f_0();S6();function PW8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function e_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 bL1(){let $=PW8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:e_0($,"--cpu-prof-dir")??process.cwd(),name:e_0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(e_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.'}))}Qv0();var P50;function mL1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Bz();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(()=>{}),P50=setInterval(()=>void Z().catch(()=>{}),$),P50.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(P50)clearInterval(P50)}}import*as RW8 from"bun:jsc";var{startSamplingProfiler:qW8,samplingProfilerStackTraces:MW8}=RW8;function dL1(){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{qW8()}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=MW8()?.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(){bL1();let $=[mL1(),cL1(),dL1()];return()=>{for(let Z of $)Z()}}import{existsSync as $e6}from"fs";var KG=j0();CL1();var{DBOS:G50,DBOSClient:na6}=await import("@dbos-inc/dbos-sdk");function lO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var ta6=[v3,_3,qN,MN,qO,Fz],oa6=KG.dispatchRole==="worker"?ta6:KG.dispatchRole==="api"?[]:void 0;G50.setConfig(oO1({systemDatabaseUrl:lO1(KG.databaseUrl,KG.databasePgSsl),poolSize:KG.dbosPoolSize,executorID:KG.podName,listenQueues:oa6}));var{createApp:ra6}=await Promise.resolve().then(() => (iG8(),dG8)),{isServerPath:sa6}=await Promise.resolve().then(() => (j50(),DL1)),{createAssetHandler:aa6,resolveClientDir:K38}=await Promise.resolve().then(() => (rG8(),oG8)),ea6=KG.port,X38=K38(import.meta.url,"../client"),H38=$e6(X38)?X38:K38(import.meta.url,"../dist/client"),Ze6=aa6({clientDir:H38,isServerPath:sa6}),Qe6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function Ye6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Qe6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:Xe6,tryHandlePreviewHttp:Je6,tryUpgradePreviewWs:Ge6,previewWebSocketHandler:fO1,isPreviewWsData:yO1}=await Promise.resolve().then(() => (aG8(),sG8)),{getOrInitSharedRunner:F38}=await Promise.resolve().then(() => (yW(),lR$)),U38=Xe6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),J38={baseDomain:U38??"",getRunner:F38};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())F38().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var M_0=await ra6({clientDir:H38}),gO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),G38=process.env.DBOS_CONDUCTOR_URL?.trim();await sO1({databaseUrl:lO1(KG.databaseUrl,KG.databasePgSsl)},()=>G50.launch({...gO1?{conductorKey:gO1}:{},...gO1&&G38?{conductorURL:G38}:{}}));console.log(`[dbos] application version: ${G50.applicationVersion}`);var hO1=5,uO1=0;await E8(async()=>{uO1++;try{return await M_0.initDbos()}catch($){let Z=uO1>=hO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${uO1}/${hO1} failed, ${Z}`,$),$}},{maxAttempts:hO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!KG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (Y38(),Q38));console.log("");for(let Z of $())console.log(Z)}var We6=Bun.serve({idleTimeout:0,port:ea6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(U38){let Y=await Ge6($,Z,J38);if(Y===void 0)return;if(Y)return Y;let X=await Je6($,J38);if(X)return X}let Q=await Ze6($);if(Q)return Ye6(Q);return M_0.fetch($,{server:Z})},websocket:{open($){if(yO1($.data))fO1.open($)},message($,Z){if(yO1($.data))fO1.message($,Z)},close($){if(yO1($.data))fO1.close($)}},development:!1}),Ke6=iL1();if(KG.localMode)Promise.resolve().then(() => (lf(),dq0)).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(() => (lf(),dq0));Z()}catch{}});var W38=!1;async function He6($){let Z;try{Z=await na6.create({systemDatabaseUrl:lO1(KG.databaseUrl,KG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:_3,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:_3}),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 I_0($){if(W38)return;W38=!0,console.log(`
|
|
3725
3725
|
[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{Ke6(),M_0.markShuttingDown();let J=eO1(KG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await L$(J),await We6.stop(!0);let G=G50.executorID;await G50.shutdown(),await He6(G),await M_0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>I_0("SIGTERM"));process.on("SIGINT",()=>I_0("SIGINT"));process.on("SIGHUP",()=>I_0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),I_0("uncaughtException")});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as s,M as u}from"./index-8ROcBeOM.js";import{C as f}from"./index-CAwr_e5z.js";import{a as x}from"./thread-route-ClaMqMHW.js";import{u as g}from"./use-task-metadata-RgcBzN-v.js";import{AppViewContent as h}from"./project-app-view-FKoIV4Mp.js";import"./use-mobile-CagO8PYO.js";import"./thread-button-mkFGOpTO.js";import"./agent-icon-B4YwY0JM.js";import"./AlertCircle-C5HVrLZe.js";import"./Tool01-C3UQzTkW.js";import"./ArrowUp-CWWobdUx.js";import"./ArrowLeft-DJk4oPCQ.js";import"./LinkBroken01-CoaVazaJ.js";import"./ShoppingBag01-BWCkeQfV.js";import"./ZoomOut-DdAVIXWQ.js";import"./Building02-B3I4JJCN.js";import"./CheckCircle-HgqCvHI2.js";import"./Check-PcQs3M4o.js";import"./ChevronUp-BkK36MsN.js";import"./UserSquare-xl-CVK1W.js";import"./Copy01-CoysgpeW.js";import"./CreditCard01-C6aogu2h.js";import"./DotsVertical-DPKr3IOx.js";import"./Image01-DGPruqah.js";import"./Palette-BcuggLpF.js";import"./XClose-B2h9zNaw.js";import"./Key01-CDcSYqkq.js";import"./Link01-CLl6j_mc.js";import"./LinkExternal01-BvS68qI_.js";import"./Monitor01-C_aGyUUc.js";import"./Sun-CSZHqwWX.js";import"./Plus-DvM_B5XA.js";import"./SearchMd-Zps5bO1E.js";import"./Trash01-DNWhfTgH.js";import"./Upload01-Dp_vWLSf.js";import"./User01-C5XGpmJ9.js";import"./Users01-DZXc12n3.js";import"./X-CdL2mAGV.js";import"./use-chat-layout-state-CCZx3s6E.js";import"./use-file-configs-DDTbPPMv.js";import"./use-organization-settings-ZppCsdtK.js";import"./schema-D_b4vZ7I.js";import"./task-board-8eXLM5MN.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-TAi8F8is.js";import"./use-project-scope-KBJJqmug.js";import"./repository-binding-Bqtv3z-W.js";import"./use-mcp-client-BxmtH7zP.js";import"./auth-DAdApGdR.js";import"./thread-intent-CVPFp4dA.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DplgMQgp.js";import"./tooltip-DAbDY_l5.js";import"./index-Dciz6AyM.js";import"./toolbar-icon-button-CX76xDXU.js";import"./shell-layout-Bs4S55Ty.js";import"./avatar-82D6QSzb.js";import"./download-app-dialog-N2OFCrrJ.js";import"./dialog-BtZaxAxx.js";import"./use-clock-tick-OFx9mwiY.js";import"./command-qV-OCtKE.js";import"./index-CdAYzjgW.js";import"./integration-icon-DqSuxTpO.js";import"./project-icon-BVmGHfAM.js";import"./new-project-dialog-CsWJZGWT.js";import"./input-BanC9Ucc.js";import"./label-Bn2z72pa.js";import"./repository-import-picker-B_SeG55B.js";import"./use-navigate-to-agent-em4YGsFg.js";import"./repository-picker-w_v5XfDS.js";import"./useInfiniteQuery-BwK3MP2B.js";import"./infiniteQueryObserver-ZauDjxfW.js";import"./collection-search-DeGickf-.js";import"./use-debounced-value-BM_vV7du.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DST7pe03.js";import"./autosend-iwmKuXuz.js";import"./use-org-sso-M_x7fcvK.js";import"./resizable-YQ94bbPR.js";import"./icon-button-DWXuhPgX.js";import"./gateway-client-C8R1lemD.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-CNfjLzgY.js";import"./sandbox-lifecycle-context-D3rqVZE7.js";import"./use-session-runtime-BxrwOJfg.js";import"./chat-context-Nt6K5QHf.js";import"./use-decopilot-events-Dij6ioRA.js";import"./use-ai-providers-CbRWts-V.js";import"./location-DPIrGNp7.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-DWHfNffK.js";import"./types-YnNmbSwq.js";import"./task-route-CUxAqAJa.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-BTDHfs4F.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-BfnsNCzB.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-DjhTv0OA.js";import"./authenticate-and-persist-oauth-DclFzKA2.js";import"./mcp-oauth-7vzmmq-a.js";import"./track-Bzm08tgF.js";import"./extract-connection-data-Djd5qBcT.js";import"./connection-sG3juRG0.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 Co(){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{Co as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as e,aS as b,u as g}from"./index-8ROcBeOM.js";import{C as j}from"./index-CAwr_e5z.js";import{F as v,H as S}from"./file-share-button-D-fjDHwq.js";import{u as k,b as y,e as _}from"./use-org-fs-CFvxeeh7.js";import{S as w}from"./settings-tab-B1EwFFBD.js";import{b as M}from"./thread-route-ClaMqMHW.js";import"./use-mobile-CagO8PYO.js";import"./thread-button-mkFGOpTO.js";import"./agent-icon-B4YwY0JM.js";import"./AlertCircle-C5HVrLZe.js";import"./Tool01-C3UQzTkW.js";import"./ArrowUp-CWWobdUx.js";import"./ArrowLeft-DJk4oPCQ.js";import"./LinkBroken01-CoaVazaJ.js";import"./ShoppingBag01-BWCkeQfV.js";import"./ZoomOut-DdAVIXWQ.js";import"./Building02-B3I4JJCN.js";import"./CheckCircle-HgqCvHI2.js";import"./Check-PcQs3M4o.js";import"./ChevronUp-BkK36MsN.js";import"./UserSquare-xl-CVK1W.js";import"./Copy01-CoysgpeW.js";import"./CreditCard01-C6aogu2h.js";import"./DotsVertical-DPKr3IOx.js";import"./Image01-DGPruqah.js";import"./Palette-BcuggLpF.js";import"./XClose-B2h9zNaw.js";import"./Key01-CDcSYqkq.js";import"./Link01-CLl6j_mc.js";import"./LinkExternal01-BvS68qI_.js";import"./Monitor01-C_aGyUUc.js";import"./Sun-CSZHqwWX.js";import"./Plus-DvM_B5XA.js";import"./SearchMd-Zps5bO1E.js";import"./Trash01-DNWhfTgH.js";import"./Upload01-Dp_vWLSf.js";import"./User01-C5XGpmJ9.js";import"./Users01-DZXc12n3.js";import"./X-CdL2mAGV.js";import"./use-chat-layout-state-CCZx3s6E.js";import"./use-file-configs-DDTbPPMv.js";import"./use-organization-settings-ZppCsdtK.js";import"./schema-D_b4vZ7I.js";import"./task-board-8eXLM5MN.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-TAi8F8is.js";import"./use-project-scope-KBJJqmug.js";import"./repository-binding-Bqtv3z-W.js";import"./use-mcp-client-BxmtH7zP.js";import"./auth-DAdApGdR.js";import"./thread-intent-CVPFp4dA.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DplgMQgp.js";import"./tooltip-DAbDY_l5.js";import"./index-Dciz6AyM.js";import"./toolbar-icon-button-CX76xDXU.js";import"./shell-layout-Bs4S55Ty.js";import"./avatar-82D6QSzb.js";import"./download-app-dialog-N2OFCrrJ.js";import"./dialog-BtZaxAxx.js";import"./use-clock-tick-OFx9mwiY.js";import"./command-qV-OCtKE.js";import"./index-CdAYzjgW.js";import"./integration-icon-DqSuxTpO.js";import"./project-icon-BVmGHfAM.js";import"./new-project-dialog-CsWJZGWT.js";import"./input-BanC9Ucc.js";import"./label-Bn2z72pa.js";import"./repository-import-picker-B_SeG55B.js";import"./use-navigate-to-agent-em4YGsFg.js";import"./repository-picker-w_v5XfDS.js";import"./useInfiniteQuery-BwK3MP2B.js";import"./infiniteQueryObserver-ZauDjxfW.js";import"./collection-search-DeGickf-.js";import"./use-debounced-value-BM_vV7du.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DST7pe03.js";import"./autosend-iwmKuXuz.js";import"./use-org-sso-M_x7fcvK.js";import"./resizable-YQ94bbPR.js";import"./icon-button-DWXuhPgX.js";import"./popover-DgpjjzI9.js";import"./extract-connection-data-Djd5qBcT.js";import"./metadata-D72DunRR.js";import"./connection-sG3juRG0.js";import"./chat-context-Nt6K5QHf.js";import"./use-decopilot-events-Dij6ioRA.js";import"./use-ai-providers-CbRWts-V.js";import"./location-DPIrGNp7.js";import"./build-improve-prompt-doc-Dht5CUKH.js";import"./empty-state-DUWhBADp.js";import"./use-date-fns-locale-DhWzsOW3.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-sMlbY4Ob.js";import"./mcp-oauth-7vzmmq-a.js";import"./alert-dialog-XGdjcU6k.js";import"./textarea-RBexuEFS.js";import"./use-debounced-autosave--k-71QNg.js";import"./add-connection-dialog-D0K7EFqJ.js";import"./connection-card-BoE7Seb8.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-DpbaHbt-.js";import"./form-BfnsNCzB.js";import"./select-D_2Dtgab.js";import"./connection-form-helpers-Buu9gdFE.js";import"./authenticate-and-persist-oauth-DclFzKA2.js";import"./collection-tabs-B8LEhNUB.js";import"./badge-yAjkMzov.js";import"./use-infinite-scroll-Wt2CKt13.js";import"./useSuspenseInfiniteQuery-DZ9_odwU.js";import"./file-type-icon-DlDIow-z.js";import"./checkbox-Bj1FopWB.js";import"./search-input-CHN_qcZt.js";import"./use-mcp-auth-status-CkxqQj4w.js";import"./types-YnNmbSwq.js";import"./use-mcp-tools-CNfjLzgY.js";import"./use-mcp-prompts-a00pKELA.js";import"./utils-CVEq3hMx.js";import"./switch-CjmNMBI9.js";import"./scroll-area-Yj6MrDB0.js";import"./optimistic-project-sidebar-views-BBCMaD_P.js";import"./virtual-mcp-CooEBSCr.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-RZRUxDQy.js";import"./use-secrets-xaNnxvsl.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 p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p=e.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=p):p=t[0];let o;t[1]!==r?(o=r&&e.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=e.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[p,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p={refetchIntervalWhenAbsent:2e3},t[0]=p):p=t[0];const o=k(x,r,p),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=e.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=e.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=e.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),p=M(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==p?(m=o?e.jsx(D,{path:o},o):e.jsx(w,{virtualMcpId:p}),i[1]=o,i[2]=p,i[3]=m):m=i[3],m}function Xo(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(j.Content,{children:e.jsx(C,{})}),i[0]=t):t=i[0],t}export{Xo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as s,j as e}from"./index-8ROcBeOM.js";import{C as a}from"./index-CAwr_e5z.js";import{p as n,L as c}from"./library-tab-jDZ26_Yu.js";import{u as l}from"./use-project-scope-KBJJqmug.js";import"./use-mobile-CagO8PYO.js";import"./thread-button-mkFGOpTO.js";import"./agent-icon-B4YwY0JM.js";import"./AlertCircle-C5HVrLZe.js";import"./Tool01-C3UQzTkW.js";import"./ArrowUp-CWWobdUx.js";import"./ArrowLeft-DJk4oPCQ.js";import"./LinkBroken01-CoaVazaJ.js";import"./ShoppingBag01-BWCkeQfV.js";import"./ZoomOut-DdAVIXWQ.js";import"./Building02-B3I4JJCN.js";import"./CheckCircle-HgqCvHI2.js";import"./Check-PcQs3M4o.js";import"./ChevronUp-BkK36MsN.js";import"./UserSquare-xl-CVK1W.js";import"./Copy01-CoysgpeW.js";import"./CreditCard01-C6aogu2h.js";import"./DotsVertical-DPKr3IOx.js";import"./Image01-DGPruqah.js";import"./Palette-BcuggLpF.js";import"./XClose-B2h9zNaw.js";import"./Key01-CDcSYqkq.js";import"./Link01-CLl6j_mc.js";import"./LinkExternal01-BvS68qI_.js";import"./Monitor01-C_aGyUUc.js";import"./Sun-CSZHqwWX.js";import"./Plus-DvM_B5XA.js";import"./SearchMd-Zps5bO1E.js";import"./Trash01-DNWhfTgH.js";import"./Upload01-Dp_vWLSf.js";import"./User01-C5XGpmJ9.js";import"./Users01-DZXc12n3.js";import"./X-CdL2mAGV.js";import"./use-chat-layout-state-CCZx3s6E.js";import"./use-file-configs-DDTbPPMv.js";import"./use-organization-settings-ZppCsdtK.js";import"./schema-D_b4vZ7I.js";import"./task-board-8eXLM5MN.js";import"./site-slug-DebpOoQq.js";import"./thread-route-ClaMqMHW.js";import"./use-panel-navigate-TAi8F8is.js";import"./thread-intent-CVPFp4dA.js";import"./use-mcp-client-BxmtH7zP.js";import"./auth-DAdApGdR.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DplgMQgp.js";import"./tooltip-DAbDY_l5.js";import"./index-Dciz6AyM.js";import"./toolbar-icon-button-CX76xDXU.js";import"./shell-layout-Bs4S55Ty.js";import"./avatar-82D6QSzb.js";import"./download-app-dialog-N2OFCrrJ.js";import"./dialog-BtZaxAxx.js";import"./use-clock-tick-OFx9mwiY.js";import"./command-qV-OCtKE.js";import"./index-CdAYzjgW.js";import"./integration-icon-DqSuxTpO.js";import"./project-icon-BVmGHfAM.js";import"./new-project-dialog-CsWJZGWT.js";import"./input-BanC9Ucc.js";import"./label-Bn2z72pa.js";import"./repository-import-picker-B_SeG55B.js";import"./use-navigate-to-agent-em4YGsFg.js";import"./repository-binding-Bqtv3z-W.js";import"./repository-picker-w_v5XfDS.js";import"./useInfiniteQuery-BwK3MP2B.js";import"./infiniteQueryObserver-ZauDjxfW.js";import"./collection-search-DeGickf-.js";import"./use-debounced-value-BM_vV7du.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DST7pe03.js";import"./autosend-iwmKuXuz.js";import"./use-org-sso-M_x7fcvK.js";import"./resizable-YQ94bbPR.js";import"./icon-button-DWXuhPgX.js";import"./search-toggle-gnOAnWxM.js";import"./alert-dialog-XGdjcU6k.js";import"./location-DPIrGNp7.js";import"./use-org-fs-CFvxeeh7.js";import"./use-org-repo-syncs-Cj7aQn-H.js";import"./textarea-RBexuEFS.js";import"./markdown-5USBpPC8.js";import"./org-file-open-context-DjnDV-Wb.js";import"./file-share-button-D-fjDHwq.js";import"./popover-DgpjjzI9.js";import"./preview-dialog-D7pg9eWa.js";import"./preview-content-VmyF6LSH.js";import"./file-preview-j0XjXfca.js";import"./utils-C8Vzgs09.js";import"./editor-BVZ6fWcH.js";import"./file-type-icon-DlDIow-z.js";import"./folder-icon-CEo_DFJP.js";import"./skill-md-ChfVs4uF.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-Bxw1S3_7.js";function mo(){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{mo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as a,j as s,u as n}from"./index-8ROcBeOM.js";import{C as l}from"./index-CAwr_e5z.js";import{L as c}from"./preview-content-VmyF6LSH.js";import{a as f}from"./use-panel-navigate-TAi8F8is.js";import{S as u}from"./settings-tab-B1EwFFBD.js";import{b as h}from"./thread-route-ClaMqMHW.js";import"./use-mobile-CagO8PYO.js";import"./thread-button-mkFGOpTO.js";import"./agent-icon-B4YwY0JM.js";import"./AlertCircle-C5HVrLZe.js";import"./Tool01-C3UQzTkW.js";import"./ArrowUp-CWWobdUx.js";import"./ArrowLeft-DJk4oPCQ.js";import"./LinkBroken01-CoaVazaJ.js";import"./ShoppingBag01-BWCkeQfV.js";import"./ZoomOut-DdAVIXWQ.js";import"./Building02-B3I4JJCN.js";import"./CheckCircle-HgqCvHI2.js";import"./Check-PcQs3M4o.js";import"./ChevronUp-BkK36MsN.js";import"./UserSquare-xl-CVK1W.js";import"./Copy01-CoysgpeW.js";import"./CreditCard01-C6aogu2h.js";import"./DotsVertical-DPKr3IOx.js";import"./Image01-DGPruqah.js";import"./Palette-BcuggLpF.js";import"./XClose-B2h9zNaw.js";import"./Key01-CDcSYqkq.js";import"./Link01-CLl6j_mc.js";import"./LinkExternal01-BvS68qI_.js";import"./Monitor01-C_aGyUUc.js";import"./Sun-CSZHqwWX.js";import"./Plus-DvM_B5XA.js";import"./SearchMd-Zps5bO1E.js";import"./Trash01-DNWhfTgH.js";import"./Upload01-Dp_vWLSf.js";import"./User01-C5XGpmJ9.js";import"./Users01-DZXc12n3.js";import"./X-CdL2mAGV.js";import"./use-chat-layout-state-CCZx3s6E.js";import"./use-file-configs-DDTbPPMv.js";import"./use-organization-settings-ZppCsdtK.js";import"./schema-D_b4vZ7I.js";import"./task-board-8eXLM5MN.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-CVPFp4dA.js";import"./use-mcp-client-BxmtH7zP.js";import"./auth-DAdApGdR.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-KBJJqmug.js";import"./repository-binding-Bqtv3z-W.js";import"./sheet-DplgMQgp.js";import"./tooltip-DAbDY_l5.js";import"./index-Dciz6AyM.js";import"./toolbar-icon-button-CX76xDXU.js";import"./shell-layout-Bs4S55Ty.js";import"./avatar-82D6QSzb.js";import"./download-app-dialog-N2OFCrrJ.js";import"./dialog-BtZaxAxx.js";import"./use-clock-tick-OFx9mwiY.js";import"./command-qV-OCtKE.js";import"./index-CdAYzjgW.js";import"./integration-icon-DqSuxTpO.js";import"./project-icon-BVmGHfAM.js";import"./new-project-dialog-CsWJZGWT.js";import"./input-BanC9Ucc.js";import"./label-Bn2z72pa.js";import"./repository-import-picker-B_SeG55B.js";import"./use-navigate-to-agent-em4YGsFg.js";import"./repository-picker-w_v5XfDS.js";import"./useInfiniteQuery-BwK3MP2B.js";import"./infiniteQueryObserver-ZauDjxfW.js";import"./collection-search-DeGickf-.js";import"./use-debounced-value-BM_vV7du.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DST7pe03.js";import"./autosend-iwmKuXuz.js";import"./use-org-sso-M_x7fcvK.js";import"./resizable-YQ94bbPR.js";import"./icon-button-DWXuhPgX.js";import"./file-preview-j0XjXfca.js";import"./use-org-fs-CFvxeeh7.js";import"./utils-C8Vzgs09.js";import"./editor-BVZ6fWcH.js";import"./file-type-icon-DlDIow-z.js";import"./markdown-5USBpPC8.js";import"./location-DPIrGNp7.js";import"./org-file-open-context-DjnDV-Wb.js";import"./file-share-button-D-fjDHwq.js";import"./popover-DgpjjzI9.js";import"./extract-connection-data-Djd5qBcT.js";import"./metadata-D72DunRR.js";import"./connection-sG3juRG0.js";import"./chat-context-Nt6K5QHf.js";import"./use-decopilot-events-Dij6ioRA.js";import"./use-ai-providers-CbRWts-V.js";import"./build-improve-prompt-doc-Dht5CUKH.js";import"./empty-state-DUWhBADp.js";import"./use-date-fns-locale-DhWzsOW3.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-sMlbY4Ob.js";import"./mcp-oauth-7vzmmq-a.js";import"./alert-dialog-XGdjcU6k.js";import"./textarea-RBexuEFS.js";import"./use-debounced-autosave--k-71QNg.js";import"./add-connection-dialog-D0K7EFqJ.js";import"./connection-card-BoE7Seb8.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-DpbaHbt-.js";import"./form-BfnsNCzB.js";import"./select-D_2Dtgab.js";import"./connection-form-helpers-Buu9gdFE.js";import"./authenticate-and-persist-oauth-DclFzKA2.js";import"./collection-tabs-B8LEhNUB.js";import"./badge-yAjkMzov.js";import"./use-infinite-scroll-Wt2CKt13.js";import"./useSuspenseInfiniteQuery-DZ9_odwU.js";import"./checkbox-Bj1FopWB.js";import"./search-input-CHN_qcZt.js";import"./use-mcp-auth-status-CkxqQj4w.js";import"./types-YnNmbSwq.js";import"./use-mcp-tools-CNfjLzgY.js";import"./use-mcp-prompts-a00pKELA.js";import"./utils-CVEq3hMx.js";import"./switch-CjmNMBI9.js";import"./scroll-area-Yj6MrDB0.js";import"./optimistic-project-sidebar-views-BBCMaD_P.js";import"./virtual-mcp-CooEBSCr.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-RZRUxDQy.js";import"./use-secrets-xaNnxvsl.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 Hr(){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{Hr as default};
|