decocms 4.464.0 → 4.464.1
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-DQV9Mc17.js → AlertCircle-CL-Ba0_Q.js} +1 -1
- package/dist/client/assets/{AreaChart-CzwL_0OC.js → AreaChart-BR3vo-tb.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BIML-f0i.js → ArrowLeft-ZcdIkYz0.js} +1 -1
- package/dist/client/assets/{ArrowUp-CmgvSWvg.js → ArrowUp-CvjiUaVx.js} +1 -1
- package/dist/client/assets/{Building02-DGed7X87.js → Building02-FvnfPLK2.js} +1 -1
- package/dist/client/assets/{CartesianChart-D2XReMlE.js → CartesianChart-BX61N6Vt.js} +1 -1
- package/dist/client/assets/{Check-DmssFQIB.js → Check-m_9M3llp.js} +1 -1
- package/dist/client/assets/{CheckCircle-CGt4I_97.js → CheckCircle-BnDcHqrT.js} +1 -1
- package/dist/client/assets/{ChevronUp-CVGAY_3s.js → ChevronUp-ZFMh5ExZ.js} +1 -1
- package/dist/client/assets/{Copy01-Bv3jpVlA.js → Copy01-C06SX2Rt.js} +1 -1
- package/dist/client/assets/{CreditCard01-CsLyF3kp.js → CreditCard01-CjlTPFuS.js} +1 -1
- package/dist/client/assets/{DotsVertical-CiM8md1y.js → DotsVertical-8IP4yxP4.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-C-Br6GDZ.js → ErrorBarContext-DdXeAmkz.js} +1 -1
- package/dist/client/assets/{Globe04-5mRZfz3d.js → Globe04-Dg-78cI8.js} +1 -1
- package/dist/client/assets/{Image01-DxzRuuii.js → Image01-D9Kt40Xt.js} +1 -1
- package/dist/client/assets/{Key01-4ZMPLPba.js → Key01-CY_jgU1B.js} +1 -1
- package/dist/client/assets/{Line-CDL5qmk5.js → Line-dSLV618t.js} +1 -1
- package/dist/client/assets/{Link01-M6drdXoX.js → Link01-CUs37Sc0.js} +1 -1
- package/dist/client/assets/{LinkBroken01-W0guIiTp.js → LinkBroken01-Bu7OL2cL.js} +1 -1
- package/dist/client/assets/{LinkExternal01-ClcRo1x1.js → LinkExternal01-K_EoOXaI.js} +1 -1
- package/dist/client/assets/{Monitor01-Dk1HgiBj.js → Monitor01-BK0yoFL7.js} +1 -1
- package/dist/client/assets/{Plus-Bq5ZeuHM.js → Plus-D36CJbju.js} +1 -1
- package/dist/client/assets/{SearchMd-tAwrJP3u.js → SearchMd-CWTPI1P9.js} +1 -1
- package/dist/client/assets/{Sector-JvAmi2ld.js → Sector-CBva21QI.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-CQ0azIkw.js → ShoppingBag01-d2G89AZS.js} +1 -1
- package/dist/client/assets/{Sun-k0O1HcgT.js → Sun-rNt0Rjt9.js} +1 -1
- package/dist/client/assets/{Tool01-rcwjZJWt.js → Tool01-BR_2GJVQ.js} +1 -1
- package/dist/client/assets/{Trash01-yUMH9377.js → Trash01-DU_Ipkqh.js} +1 -1
- package/dist/client/assets/{Upload01-BPuydd_6.js → Upload01-BiQc81e2.js} +1 -1
- package/dist/client/assets/{User01-9b4OuT4C.js → User01-YC00nqD8.js} +1 -1
- package/dist/client/assets/{UserSquare-weua4atg.js → UserSquare-CkpWY_Ql.js} +1 -1
- package/dist/client/assets/{Users01-CldLEl2f.js → Users01-BSwysKui.js} +1 -1
- package/dist/client/assets/{X-CSlg1sd1.js → X-DmvkVyms.js} +1 -1
- package/dist/client/assets/{XAxis-B6QoWNgI.js → XAxis-DvKYyO7z.js} +1 -1
- package/dist/client/assets/{XClose-C0S6AMzF.js → XClose-JbZeJDvi.js} +1 -1
- package/dist/client/assets/{ZoomOut-B5ON1ruo.js → ZoomOut-Bz0zUi4W.js} +1 -1
- package/dist/client/assets/{access-gate-wsITlSLv.js → access-gate-CzNiWJFS.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-DmB5Tp1t.js → add-connection-dialog-Ca2dzrIE.js} +1 -1
- package/dist/client/assets/{agent-analytics-COWh3k0y.js → agent-analytics-BgBuzy8G.js} +1 -1
- package/dist/client/assets/agent-app-BFYx_Aa3.js +1 -0
- package/dist/client/assets/{agent-assets-vxaygUwM.js → agent-assets-Ap27_lPr.js} +1 -1
- package/dist/client/assets/{agent-automation-Bql0c9tj.js → agent-automation-C0pchO8T.js} +1 -1
- package/dist/client/assets/{agent-automations-_X1sp0GW.js → agent-automations-BwX355S0.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-CPv0fITp.js → agent-connect-sources-DmOS6diu.js} +1 -1
- package/dist/client/assets/agent-deck-Bbe9Zmh2.js +1 -0
- package/dist/client/assets/{agent-e2e-CMHIR015.js → agent-e2e-BJcOm3zP.js} +1 -1
- package/dist/client/assets/{agent-experiments-CHj6csUz.js → agent-experiments-C-tYLyEj.js} +1 -1
- package/dist/client/assets/{agent-file-CxDhiG4P.js → agent-file-BSkoRDrz.js} +1 -1
- package/dist/client/assets/{agent-hosting-gFRKRolp.js → agent-hosting-u-U2HQrW.js} +1 -1
- package/dist/client/assets/{agent-icon-D8yc3w6R.js → agent-icon-CeBKZuCK.js} +1 -1
- package/dist/client/assets/agent-library-KQo5LOWk.js +1 -0
- package/dist/client/assets/agent-library-file-DQPsK1BN.js +1 -0
- package/dist/client/assets/{agent-monitor-BjVDNyvC.js → agent-monitor-ByTdLN1l.js} +1 -1
- package/dist/client/assets/{agent-overview-J7pfgPo-.js → agent-overview-CVKrU9ZU.js} +1 -1
- package/dist/client/assets/agent-settings-DelSTWSJ.js +1 -0
- package/dist/client/assets/agent-site-editor-code-BsifW_AO.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-D4Uvng3A.js → agent-site-editor-content-BJLTGDqY.js} +3 -3
- package/dist/client/assets/{agent-site-editor-BbsHETjh.js → agent-site-editor-mO5OTUnC.js} +1 -1
- package/dist/client/assets/{agent-site-editor-preview-DlXIF9M4.js → agent-site-editor-preview-C-PksdIY.js} +3 -3
- package/dist/client/assets/agent-view-DY-MrYRj.js +1 -0
- package/dist/client/assets/{agent-view-guard-TDUYhJq5.js → agent-view-guard-BzFZHvtR.js} +1 -1
- package/dist/client/assets/{agents-list-C5OkLPTK.js → agents-list-Dcfx8lEb.js} +1 -1
- package/dist/client/assets/{ai-providers-Bacz0fJf.js → ai-providers-vW5-x0ZF.js} +1 -1
- package/dist/client/assets/{alert-J_b2yVvo.js → alert-C9cUaQVz.js} +1 -1
- package/dist/client/assets/{alert-dialog-CKYS0LsF.js → alert-dialog-CPYvhc00.js} +1 -1
- package/dist/client/assets/{analytics-sections-ZsK7uq3f.js → analytics-sections-DLc9rhby.js} +1 -1
- package/dist/client/assets/api-keys-CgrsI75a.js +1 -0
- package/dist/client/assets/{api-keys-C431U9eo.js → api-keys-CjyoQ8rO.js} +1 -1
- package/dist/client/assets/app-editor-Du9KNJfL.js +1 -0
- package/dist/client/assets/{asset-utils-D5QKKx4Y.js → asset-utils-akMm4V-D.js} +1 -1
- package/dist/client/assets/{auth-X1Z9onOC.js → auth-DHJlUSSu.js} +1 -1
- package/dist/client/assets/{auth-catchall-CR9-8FfT.js → auth-catchall-D3CbNfmH.js} +1 -1
- package/dist/client/assets/{auth-entry-L4bAWuSf.js → auth-entry-qJfVpp8E.js} +1 -1
- package/dist/client/assets/{auth-split-layout-_jdkkrAk.js → auth-split-layout-BfGNogfh.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BcuXsDL9.js → authenticate-and-persist-oauth-DJj3JB6r.js} +1 -1
- package/dist/client/assets/{automation-list-row-MuL7roXA.js → automation-list-row-4SQR-TkL.js} +1 -1
- package/dist/client/assets/{automation-runs-DwoUyiIm.js → automation-runs-CUNhfO09.js} +1 -1
- package/dist/client/assets/{automations-BbgH8-CD.js → automations-KOD2qegd.js} +1 -1
- package/dist/client/assets/{autosend-DkkevtpV.js → autosend-CswL-6qr.js} +1 -1
- package/dist/client/assets/{avatar-C9IBeU_l.js → avatar-CmavCmK6.js} +1 -1
- package/dist/client/assets/{badge-DnZUOPBJ.js → badge-CZ2-73B_.js} +1 -1
- package/dist/client/assets/{block-document-DF5TRNns.js → block-document-C2FGKeT3.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-CJJUwJec.js → blocks-preview-workspace-context-B93N-0TD.js} +1 -1
- package/dist/client/assets/{blog-schema-DWZAnIQ1.js → blog-schema-CRGWl1rA.js} +1 -1
- package/dist/client/assets/{buckets-Dl9hB7GO.js → buckets-BwiKC7Ad.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-B9VDt7kz.js → build-improve-prompt-doc-sUwADRIV.js} +1 -1
- package/dist/client/assets/{calendar-EePJktQb.js → calendar-CS1amNmI.js} +1 -1
- package/dist/client/assets/{capability-load-error-BXtQ4mcH.js → capability-load-error-I_NPeWs3.js} +1 -1
- package/dist/client/assets/{category-editor-B2ITIbFS.js → category-editor-Cw3He2Uc.js} +1 -1
- package/dist/client/assets/{chart-C517W9OG.js → chart-BsM6mnjI.js} +1 -1
- package/dist/client/assets/{chat-context-BBq6hHFG.js → chat-context-DN6LIhMA.js} +1 -1
- package/dist/client/assets/{chat-draft-CKTALvc8.js → chat-draft-BKdDCS9w.js} +1 -1
- package/dist/client/assets/{checkbox-BVp3RnTH.js → checkbox-DyYQ00vF.js} +1 -1
- package/dist/client/assets/{choose-editor-D6RbpQUd.js → choose-editor-Dqftf-Ai.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-kAK6lKjq.js → claim-phase-copy-Bt2uA5Kj.js} +1 -1
- package/dist/client/assets/{cli-auth-success-B6fw81Mk.js → cli-auth-success-DaSUuxiU.js} +1 -1
- package/dist/client/assets/{client-icons-CZZeWA6p.js → client-icons-CCYwuAhm.js} +1 -1
- package/dist/client/assets/{collapsible-A7bkzZzr.js → collapsible-BD7GNbG6.js} +1 -1
- package/dist/client/assets/{collection-detail-qwuQrEV2.js → collection-detail-CwddTDhY.js} +1 -1
- package/dist/client/assets/{collection-display-button-CSj3XI8l.js → collection-display-button-FBM4jvqv.js} +1 -1
- package/dist/client/assets/{collection-search-B9IMZJsF.js → collection-search-CAzSXhAd.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-pNeiHPqf.js → collection-table-wrapper-BdI2XJ8w.js} +1 -1
- package/dist/client/assets/{collection-tabs-BzgezmYW.js → collection-tabs-DsMUdRBj.js} +1 -1
- package/dist/client/assets/{column-rules-C9tvlrM1.js → column-rules-BsMnsicg.js} +1 -1
- package/dist/client/assets/{combobox-DegZE00E.js → combobox-CMrlh6Sl.js} +1 -1
- package/dist/client/assets/{command-DePL1KHf.js → command-DxTFTkQb.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-CN_sCpjp.js → companion-mcps-section-MUKpyoKt.js} +1 -1
- package/dist/client/assets/{config-7uBrtNMv.js → config-Dwx6d49U.js} +1 -1
- package/dist/client/assets/{connect-p0fOlsLZ.js → connect-BdEJj_nG.js} +1 -1
- package/dist/client/assets/{connect-layout-Cwjckis6.js → connect-layout-BvqZLGvn.js} +1 -1
- package/dist/client/assets/{connection-DCVuC0Zx.js → connection-B-m26Rla.js} +1 -1
- package/dist/client/assets/{connection-card-Btw9Ejzr.js → connection-card-DHnRaoKh.js} +1 -1
- package/dist/client/assets/{connection-detail-CF8jfL8Y.js → connection-detail-CYJj6q1N.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BQlKyorY.js → connection-form-helpers-CPaxGC2N.js} +1 -1
- package/dist/client/assets/{connections-CJy_kWpN.js → connections-DkmW5KMF.js} +1 -1
- package/dist/client/assets/{context-ChwglEu1.js → context-m53QPYnY.js} +1 -1
- package/dist/client/assets/{context-menu-FQl0AMt3.js → context-menu-DVuJNrS1.js} +1 -1
- package/dist/client/assets/{core.esm-mpmypmP_.js → core.esm-CGkAy4XA.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-gzutvP47.js → create-organization-dialog-Cy6x15Id.js} +1 -1
- package/dist/client/assets/{daily-pulse-BDgY94Bx.js → daily-pulse-CVZ8heo9.js} +1 -1
- package/dist/client/assets/{decopilot-B7t1igaZ.js → decopilot-DSOYunrX.js} +1 -1
- package/dist/client/assets/{device-hint-BSbproDJ.js → device-hint-CcPOM7YJ.js} +1 -1
- package/dist/client/assets/{dialog-l0pufTcv.js → dialog-DbnuA-yG.js} +1 -1
- package/dist/client/assets/{discover-D1melSDb.js → discover-WM0c1VJV.js} +1 -1
- package/dist/client/assets/{domain-settings-BZjTA4JT.js → domain-settings-CDY7Y0PH.js} +1 -1
- package/dist/client/assets/{download-app-dialog-aNLwMPvt.js → download-app-dialog-C1LaJ0G_.js} +1 -1
- package/dist/client/assets/{drawer-O3qcVpDl.js → drawer-B4uZvLI-.js} +1 -1
- package/dist/client/assets/{editor-BIWtbhSE.js → editor-DPmSCsWV.js} +1 -1
- package/dist/client/assets/{empty-state-5G-3M3tz.js → empty-state-BRi_xhPZ.js} +1 -1
- package/dist/client/assets/{empty-state-CnyX2qZd.js → empty-state-CqTPlMA7.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Ou6b9boP.js → extract-connection-data-_hTvOl5A.js} +1 -1
- package/dist/client/assets/{feature-gate-0YtGKR_-.js → feature-gate-C-HGVngx.js} +1 -1
- package/dist/client/assets/{feature-paywall-D8WPGLf9.js → feature-paywall-DuCZdgLh.js} +1 -1
- package/dist/client/assets/{file-explorer-g9d9yH9T.js → file-explorer-hgIFjGGn.js} +1 -1
- package/dist/client/assets/{file-preview-DMt8pvXn.js → file-preview-CgG7dBvK.js} +1 -1
- package/dist/client/assets/{file-share-button-BVh37pd9.js → file-share-button-Dg4CQWtF.js} +1 -1
- package/dist/client/assets/{file-type-icon-hpzbwXLS.js → file-type-icon-DVNIWDia.js} +1 -1
- package/dist/client/assets/flat-project-Bgmg-9nL.js +1 -0
- package/dist/client/assets/{folder-icon-BDmQmtS4.js → folder-icon-C7O8neOR.js} +1 -1
- package/dist/client/assets/{form-DWldHPd_.js → form-KuqtFClp.js} +1 -1
- package/dist/client/assets/{gateway-client-F47a4lAO.js → gateway-client-BBi5nsR6.js} +1 -1
- package/dist/client/assets/{general-D7v_Aq_7.js → general-Coca58ym.js} +1 -1
- package/dist/client/assets/{home-BG1eZNoA.js → home-Dh3UcOln.js} +1 -1
- package/dist/client/assets/{icon-button-DznlvwEZ.js → icon-button-DL2Gkfyl.js} +1 -1
- package/dist/client/assets/{index-CbdGjCTT.js → index-0xzWKuce.js} +1 -1
- package/dist/client/assets/{index-BKCduH1k.js → index-BEPEGJ7j.js} +1 -1
- package/dist/client/assets/{index-BfpLxh6F.js → index-BGXkNlsg.js} +1 -1
- package/dist/client/assets/{index-Dv_pP_8t.js → index-BNL4laDa.js} +1 -1
- package/dist/client/assets/{index-CG2TCOgB.js → index-BVptlPQI.js} +1 -1
- package/dist/client/assets/{index-Cz35IBPv.js → index-BZ6ixhdn.js} +1 -1
- package/dist/client/assets/{index-DR_zH_im.js → index-CEyVx804.js} +1 -1
- package/dist/client/assets/{index-DLbiJWsU.js → index-CGyM_y8a.js} +1 -1
- package/dist/client/assets/{index-Dncdnplw.js → index-Cen25M9q.js} +1 -1
- package/dist/client/assets/{index-VNSzHC97.js → index-D3lMfBVp.js} +1 -1
- package/dist/client/assets/{index-C6yXfhc9.js → index-DBoHOKjw.js} +2 -2
- package/dist/client/assets/{index-D8A1zhxX.js → index-DdwIN7G-.js} +1 -1
- package/dist/client/assets/{index-C7rfJP0V.js → index-DmVG3v82.js} +1 -1
- package/dist/client/assets/{index-ConwWJ1X.js → index-ESo9CHKF.js} +1 -1
- package/dist/client/assets/{index-DPiOtvZ-.js → index-de9CNyc8.js} +3 -3
- package/dist/client/assets/{index-redirect-D9moqplU.js → index-redirect-DORjFJIO.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-Bs8aLdDs.js → infiniteQueryObserver-qgWv5yw5.js} +1 -1
- package/dist/client/assets/{infra-billing-jIDwnAPk.js → infra-billing-CO_qY1tP.js} +1 -1
- package/dist/client/assets/{input-6-0u-Xnr.js → input-CBs_iLvz.js} +3 -3
- package/dist/client/assets/{input-N6YgtZtv.js → input-Djn_KHtM.js} +1 -1
- package/dist/client/assets/{input-Dgrf_P4M.js → input-Mb2meh2H.js} +1 -1
- package/dist/client/assets/{integration-icon-BUQcDswF.js → integration-icon-CP02T0S9.js} +1 -1
- package/dist/client/assets/{label-Ccn3ZfwY.js → label-Bls3Ztde.js} +1 -1
- package/dist/client/assets/{layout-CA0vSGPy.js → layout-CSoc3vwE.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-CMLX5lnO.js → legacy-agents-deep-DdGDpUYi.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-CD-VnYY1.js → legacy-main-redirect-CZ83DKx_.js} +1 -1
- package/dist/client/assets/library-e7DQrG87.js +1 -0
- package/dist/client/assets/{library-tab-DBOv_vFI.js → library-tab-BHkTgcLY.js} +1 -1
- package/dist/client/assets/{login--Au7Agvr.js → login-DVQm32OI.js} +1 -1
- package/dist/client/assets/{markdown-BX8FMyIV.js → markdown-5GYJnvw8.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-NdZTHRTE.js → mcp-app-renderer-CqG6luLG.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DmWr-lw_.js → mcp-oauth-DCwIQfTE.js} +1 -1
- package/dist/client/assets/{members-BYrrt_AB.js → members-D8ZB6rDE.js} +1 -1
- package/dist/client/assets/{memory-AEBksrRq.js → memory-CsD07g6d.js} +1 -1
- package/dist/client/assets/{mini-report-page-B4q5NRJH.js → mini-report-page-ySjBSLSN.js} +1 -1
- package/dist/client/assets/{mock-board-DLS6WsKv.js → mock-board-DCIIgmCI.js} +1 -1
- package/dist/client/assets/{monaco-editor-CL7Ar-yE.js → monaco-editor-CprjM_mH.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CGiwUMyi.js → monitoring-stats-row-D6ZkTm9Y.js} +1 -1
- package/dist/client/assets/{multi-select-EdnQj9js.js → multi-select-BhBC37m9.js} +1 -1
- package/dist/client/assets/{mustache-BK4wbMc2.js → mustache-CO_KMjdn.js} +1 -1
- package/dist/client/assets/{new-project-dialog-Bk9ESA8g.js → new-project-dialog--kJEKHlL.js} +1 -1
- package/dist/client/assets/{oauth-callback-DIwVH3Uw.js → oauth-callback-Bj1q3tKg.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CAoyiStn.js → oauth-callback-ai-provider-BmPKDLB3.js} +1 -1
- package/dist/client/assets/{onboarding-CQYgAqHT.js → onboarding-DMNBmvav.js} +1 -1
- package/dist/client/assets/{openai-conversation-iF2kou5K.js → openai-conversation-9ikVcwfz.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-C_sD1ykF.js → optimistic-project-sidebar-views-CScYoFZg.js} +1 -1
- package/dist/client/assets/{org-file-open-context-DcBRlv30.js → org-file-open-context-DB3pye_n.js} +1 -1
- package/dist/client/assets/{organization-choice-veZx-Rz4.js → organization-choice-CRURY2uu.js} +1 -1
- package/dist/client/assets/{orgs-CIc9k45k.js → orgs-Cr1lXFl_.js} +1 -1
- package/dist/client/assets/{page-seo-form-CcIjbE82.js → page-seo-form-Bbey7Ce4.js} +1 -1
- package/dist/client/assets/{pair-BBstx80k.js → pair-DWk_DpxI.js} +1 -1
- package/dist/client/assets/{plan-ladder-DrvNerIK.js → plan-ladder-CNwvQsR1.js} +1 -1
- package/dist/client/assets/{popover-C8xX_Eza.js → popover-DukrbQ3U.js} +1 -1
- package/dist/client/assets/{post-calendar-CRkqaAN3.js → post-calendar-wmye0XdL.js} +1 -1
- package/dist/client/assets/{post-editor-CLQnWrDH.js → post-editor-4zJCCws-.js} +1 -1
- package/dist/client/assets/{preview-content-CPvumstz.js → preview-content-BZ3FF_S-.js} +1 -1
- package/dist/client/assets/{preview-dialog-B9j7S7qG.js → preview-dialog-BjaBwmxD.js} +1 -1
- package/dist/client/assets/{preview-panel-BaneJ62d.js → preview-panel-Dcx0-xiF.js} +1 -1
- package/dist/client/assets/{profile-DIopFBCc.js → profile-DNN30GXV.js} +1 -1
- package/dist/client/assets/{project-app-view-BriIYKSD.js → project-app-view-B9P4C-XK.js} +1 -1
- package/dist/client/assets/{project-feed-D9n28Qy2.js → project-feed-B5NNXlM6.js} +1 -1
- package/dist/client/assets/{project-icon-CrF2bM0B.js → project-icon-YmedO-IS.js} +1 -1
- package/dist/client/assets/project-reports-dRwCamLS.js +1 -0
- package/dist/client/assets/project-tasks-CBXLPROs.js +1 -0
- package/dist/client/assets/{projects-CEsPC-Y6.js → projects-DM5wHRGa.js} +1 -1
- package/dist/client/assets/{projects-empty-state-CHmHBILJ.js → projects-empty-state-xrJ1tYAY.js} +1 -1
- package/dist/client/assets/{prompts-Nu6vt7bw.js → prompts-wY1QeQiv.js} +1 -1
- package/dist/client/assets/record-editor-ny5TkOs1.js +1 -0
- package/dist/client/assets/{redirect-editor-BQvtVD4Q.js → redirect-editor-oXqph8fe.js} +1 -1
- package/dist/client/assets/reports-BHzscsUC.js +1 -0
- package/dist/client/assets/{reports-BVes2qUT.js → reports-O6EsRQxj.js} +1 -1
- package/dist/client/assets/{reports-onboarding-CAdtQjSU.js → reports-onboarding-CvVm35L8.js} +1 -1
- package/dist/client/assets/{reports-tab-CdXXfCkk.js → reports-tab-CuBaSw3e.js} +2 -2
- package/dist/client/assets/{repositories-CeCe9l9R.js → repositories-BXQ1mf1s.js} +1 -1
- package/dist/client/assets/{repository-binding-DgXYHOdO.js → repository-binding-DXQMz8tF.js} +1 -1
- package/dist/client/assets/{repository-import-picker-BTlCavvI.js → repository-import-picker-DPZPijA9.js} +1 -1
- package/dist/client/assets/{repository-picker-DMsQBK4M.js → repository-picker-BWrox8LY.js} +1 -1
- package/dist/client/assets/{require-capability-UaYV_k-8.js → require-capability-HPXJ2_ev.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DG_ssul7.js → required-auth-layout-BDbL7Gbw.js} +1 -1
- package/dist/client/assets/{reset-password-DGch1XH7.js → reset-password-C4R-il0X.js} +1 -1
- package/dist/client/assets/{resizable-B6j59zX8.js → resizable-DS7CYkFv.js} +1 -1
- package/dist/client/assets/{resolve-tab-icon-_x8T2L6O.js → resolve-tab-icon-Cola5K3B.js} +1 -1
- package/dist/client/assets/{review-settings-CZ-nYFGq.js → review-settings-CQsh0tPe.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-DV-QGhD4.js → rich-text-link-control-BtuZ_L2U.js} +1 -1
- package/dist/client/assets/{roles-DcdB1xj5.js → roles-D9flL_Yp.js} +1 -1
- package/dist/client/assets/{route-aAVGiY4i.js → route-B4ZiBOgz.js} +1 -1
- package/dist/client/assets/{route-C5HVG4KP.js → route-DL7Rx5it.js} +1 -1
- package/dist/client/assets/route-shsfyNd1.js +1 -0
- package/dist/client/assets/{runnable-block-editor-BHrs2bmd.js → runnable-block-editor-CzDs-bTJ.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-B6h2V6qW.js → sandbox-lifecycle-context-B5MWBdbR.js} +1 -1
- package/dist/client/assets/{schema-Dj8UASRG.js → schema-CE2zpNxo.js} +1 -1
- package/dist/client/assets/{scroll-area-BOatS-pA.js → scroll-area-BQJVDtPp.js} +1 -1
- package/dist/client/assets/{search-input-DZS7SKx0.js → search-input-CNz_66oL.js} +1 -1
- package/dist/client/assets/{search-toggle-B4xKT69H.js → search-toggle-B091-fPr.js} +1 -1
- package/dist/client/assets/{secret-picker-BLO3RbxE.js → secret-picker-CGt4uYbJ.js} +1 -1
- package/dist/client/assets/{secrets-qfecTQ8U.js → secrets-BvOVhzzQ.js} +1 -1
- package/dist/client/assets/{sections-editor-CI_9FmcP.js → sections-editor-Cxr8b5JF.js} +1 -1
- package/dist/client/assets/{select-Bo2QWO2w.js → select-XfsKg17-.js} +1 -1
- package/dist/client/assets/{select-model-BdLOITCD.js → select-model-9rGuQ9nl.js} +1 -1
- package/dist/client/assets/{seo-editor-B4lNoeES.js → seo-editor-BdfvzLAV.js} +1 -1
- package/dist/client/assets/{separator-FTvTuPez.js → separator-Cl1CPKLD.js} +1 -1
- package/dist/client/assets/{settings-tab-BHXpuYUk.js → settings-tab-DJhhqyI2.js} +1 -1
- package/dist/client/assets/{sheet-DY1Ixr3e.js → sheet-CZDkfSKo.js} +1 -1
- package/dist/client/assets/{shell-layout-C91CLPqD.js → shell-layout-CKWKtHmx.js} +1 -1
- package/dist/client/assets/{skills-1nbzg48p.js → skills-CeIax7VH.js} +1 -1
- package/dist/client/assets/{sso-D3CHVXy1.js → sso-CG0dd6UI.js} +1 -1
- package/dist/client/assets/{suggestion-CCY_KFRa.js → suggestion-DfQ8OcsT.js} +1 -1
- package/dist/client/assets/{switch-BcWYdoK-.js → switch-CRBzAnDt.js} +1 -1
- package/dist/client/assets/{synced-repos-B686sh1O.js → synced-repos-5SdJlM-x.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph-Bg6ILWDR.js → tab-icon-glyph-D4dYhkmk.js} +1 -1
- package/dist/client/assets/{table-3Ha7m5P3.js → table-DrvAOyO1.js} +1 -1
- package/dist/client/assets/{tabs-1jbcwYzu.js → tabs-e-pd68cf.js} +1 -1
- package/dist/client/assets/{task-board-zQvtvYuz.js → task-board-Crg-IxL1.js} +1 -1
- package/dist/client/assets/{task-route-BRHRnN0K.js → task-route-CV3K0LLg.js} +1 -1
- package/dist/client/assets/{task-status-kHPK4kaa.js → task-status-KkdWXXAC.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-B9W5oi66.js → taskboard-analytics-DwSPghto.js} +1 -1
- package/dist/client/assets/{tasks-Dk0o5vCp.js → tasks-BMvMAQFp.js} +1 -1
- package/dist/client/assets/tasks-CF1HadSm.js +1 -0
- package/dist/client/assets/{textarea-BIXsIYxt.js → textarea-ChUQ9lFy.js} +1 -1
- package/dist/client/assets/{thread-analytics-C_2RxStk.js → thread-analytics-BU8UE37H.js} +1 -1
- package/dist/client/assets/{thread-button-6bHksN1n.js → thread-button-A4ZMbsSJ.js} +1 -1
- package/dist/client/assets/{thread-intent-u_umdxEV.js → thread-intent-DG1RmuFS.js} +1 -1
- package/dist/client/assets/{thread-route-CcA9rsjD.js → thread-route-6l9iNUiH.js} +1 -1
- package/dist/client/assets/{thread-route-Yov0DB_e.js → thread-route-HSca1Egs.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-R93Orwrl.js → thread-sheet-body-DLCAs5ZH.js} +1 -1
- package/dist/client/assets/{toggle-group-Cn1yrmXY.js → toggle-group-BdEeEbYC.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-BqvnfOpl.js → toolbar-icon-button-ClRorWaN.js} +1 -1
- package/dist/client/assets/{tooltip-C1UnC7LD.js → tooltip-B8csev2n.js} +1 -1
- package/dist/client/assets/{track-CeJEG8Ne.js → track-BiOin1MF.js} +1 -1
- package/dist/client/assets/{types-BizZdPTP.js → types-DjyhSdRh.js} +1 -1
- package/dist/client/assets/{usage-stats-hxbQ0K96.js → usage-stats-CgSJBeeW.js} +1 -1
- package/dist/client/assets/{use-ai-providers-C6FUgl61.js → use-ai-providers-D26ARZHw.js} +1 -1
- package/dist/client/assets/{use-automations-BpxeL2MI.js → use-automations-Brb0aSme.js} +1 -1
- package/dist/client/assets/{use-autosave-D--FTllc.js → use-autosave-Bstfr3kU.js} +1 -1
- package/dist/client/assets/{use-chat-layout-state-CWQdZ4Jo.js → use-chat-layout-state-Bixj6ACc.js} +1 -1
- package/dist/client/assets/{use-chat-navigation-BYGGlCTj.js → use-chat-navigation-B6dWmK-d.js} +1 -1
- package/dist/client/assets/{use-clock-tick-DFlnhXpf.js → use-clock-tick-DIsIbH9y.js} +1 -1
- package/dist/client/assets/{use-connect-companion-bsu4z5QT.js → use-connect-companion-CDZLecPR.js} +1 -1
- package/dist/client/assets/{use-connection-BF23bC-4.js → use-connection-BC_H18ml.js} +1 -1
- package/dist/client/assets/{use-copy-CRNOjveD.js → use-copy-tACXwvrN.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Xevf0e71.js → use-create-virtual-mcp-BvGFoApX.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-BkK3C06N.js → use-date-fns-locale-ne3wBKn3.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-CBc2-HbA.js → use-debounced-autosave-BfKLfZwg.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BSX5d21S.js → use-debounced-value-Db-8HwQf.js} +1 -1
- package/dist/client/assets/{use-deco-credits-D07bG0At.js → use-deco-credits-CJiuJ6L1.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-3jnJN_zB.js → use-decopilot-events-CDXR1Ci3.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DsQLhNm_.js → use-delete-connection-CKL2Cu3m.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-CCHBn7EG.js → use-deployment-admin-CWp-rb-5.js} +1 -1
- package/dist/client/assets/{use-ensure-project-folder-C07lXmh3.js → use-ensure-project-folder-D_QyoUEz.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-Dm9fycKD.js → use-fast-preview-draft-url-BYQ8S4UW.js} +1 -1
- package/dist/client/assets/{use-file-configs-DfsKofS5.js → use-file-configs-BGlASHUP.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-B5kOmcNg.js → use-infinite-scroll-DOdc_fz4.js} +1 -1
- package/dist/client/assets/{use-join-requests-64HL1KDb.js → use-join-requests-HgdBsp9J.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-Bb-TGY0e.js → use-main-panel-tabs-cLroLTa4.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-Cdslu5lD.js → use-mcp-auth-status-Dv9c1L--.js} +1 -1
- package/dist/client/assets/{use-mcp-client-BWdbS58t.js → use-mcp-client-Dr2ieErM.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-BkoAHxEV.js → use-mcp-prompts-BGGFNZKf.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BPGCmIU7.js → use-mcp-tools-Bv-MgYmZ.js} +1 -1
- package/dist/client/assets/{use-members-DhmaxjpN.js → use-members-GEOPW_Wr.js} +1 -1
- package/dist/client/assets/{use-mobile-BptJ2ig7.js → use-mobile-BIaUANZL.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CWXwxagr.js → use-navigate-to-agent-CPq0QEyI.js} +1 -1
- package/dist/client/assets/use-new-blocks-editor-BbMlFHjB.js +1 -0
- package/dist/client/assets/{use-open-billing-url-BI5VQ742.js → use-open-billing-url-DYLHVe4s.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-nzWS7Iq-.js → use-org-auth-client-0iE2kOoY.js} +1 -1
- package/dist/client/assets/{use-org-fs-B22En0tH.js → use-org-fs-D0vtotA_.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-BwY7caQP.js → use-org-repo-syncs-DE71GlMs.js} +1 -1
- package/dist/client/assets/{use-org-sso-76vbZ6oa.js → use-org-sso-BDrus71J.js} +1 -1
- package/dist/client/assets/{use-organization-roles-dWcQZzgf.js → use-organization-roles-Bqn1gUt9.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CAFBLWVk.js → use-organization-settings-Dyzll_Gy.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-BM9PNlaW.js → use-panel-navigate-CrpC4hC1.js} +1 -1
- package/dist/client/assets/{use-project-scope-CwEflcY9.js → use-project-scope-DlEsf0bK.js} +1 -1
- package/dist/client/assets/{use-releases-Q6IYliCz.js → use-releases-CIJPIV5m.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-BuSjsvMT.js → use-reports-diagnostic-BompAfFs.js} +1 -1
- package/dist/client/assets/{use-secrets-C-0e_lfK.js → use-secrets-BZLI6rKQ.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-C_voPGNI.js → use-section-preview-base-DRCFji2p.js} +1 -1
- package/dist/client/assets/{use-session-runtime-D2A369zj.js → use-session-runtime-DsOEmnud.js} +1 -1
- package/dist/client/assets/{use-tags-hn2eWZHG.js → use-tags-Ccnnq5Vz.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-DomsBO9-.js → use-task-board-analytics-C1nndHn2.js} +1 -1
- package/dist/client/assets/{use-task-board-events-C3xun5V7.js → use-task-board-events-D2817eXn.js} +1 -1
- package/dist/client/assets/{use-task-metadata-BDjXNlZ6.js → use-task-metadata-MXuQ3G8s.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-Cx9KlOv7.js → use-thread-analytics-Ck12YraO.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-BYXmN7CM.js → use-thread-outputs-wPpOc2oH.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-C7HvpSpg.js +1 -0
- package/dist/client/assets/{useQueries-B13pACFJ.js → useQueries-BsW-wQrg.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BymU4lPH.js +1 -0
- package/dist/client/assets/{users-CWOZu_g0.js → users-mCf7b6Ao.js} +1 -1
- package/dist/client/assets/{utils-BNDdsgmu.js → utils-juZ4A9qu.js} +1 -1
- package/dist/client/assets/{variant-calendar-C9yanec4.js → variant-calendar-89eTCWxO.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-zadyshex.js → variant-matcher-override-BiyuXuoT.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DWieeNQo.js → view-mode-toggle-D46Y8GJM.js} +1 -1
- package/dist/client/assets/{virtual-mcp-BRj1Z0ns.js → virtual-mcp-GnrvXTzw.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/agent-app-BMiZhYH8.js +0 -1
- package/dist/client/assets/agent-deck-FGeLoxV6.js +0 -1
- package/dist/client/assets/agent-library-LrrHuS7D.js +0 -1
- package/dist/client/assets/agent-library-file-BLw9efSo.js +0 -1
- package/dist/client/assets/agent-settings-CDE-pry8.js +0 -1
- package/dist/client/assets/agent-site-editor-code-BcJo1Q0k.js +0 -2
- package/dist/client/assets/agent-view-R-jvAhEj.js +0 -1
- package/dist/client/assets/api-keys-BgBgaYGy.js +0 -1
- package/dist/client/assets/app-editor-DcmuCwYc.js +0 -1
- package/dist/client/assets/flat-project-C5XVxOtg.js +0 -1
- package/dist/client/assets/library-B0RdJJFZ.js +0 -1
- package/dist/client/assets/project-reports-CoPS9tDg.js +0 -1
- package/dist/client/assets/project-tasks-Ciblt931.js +0 -1
- package/dist/client/assets/record-editor-CE5H19k2.js +0 -1
- package/dist/client/assets/reports-BBzfttIZ.js +0 -1
- package/dist/client/assets/route-BaBwF0jd.js +0 -1
- package/dist/client/assets/tasks-Bb13pLGm.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-DD4ZkAQi.js +0 -1
- package/dist/client/assets/useInfiniteQuery-BIeREFXd.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BWkrsDSs.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3648,7 +3648,7 @@ ${J.join(`
|
|
|
3648
3648
|
`)}`:X}function Ss6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3649
3649
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var wJ8=200,zs6=12,As6,Rs6=300,y_0=3;var ZO1=D(()=>{J7();o$();f_0();As6={aheadBy:0,behindBy:0,files:[]}});function _s6($){if(!$||$.includes(".."))return!1;return Cs6.test($)}function EJ8($){return vs6.includes($)}function QO1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!_s6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function YO1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Cs6,vs6;var zJ8=D(()=>{Cs6=/^[\w./@-]+$/;vs6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function I50($,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 AJ8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new wz(b7);let J=await dj($.storage,X,Y);if(J&&await qD($.storage,J)){let F=await hU($,J,{forceRefresh:!0}).catch((U)=>{throw new wz(U instanceof Error?U.message:b7)});await PJ8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new wz("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await ym({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:b7;throw new wz(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await lU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=dw$(F instanceof Error?F.message:String(F));throw U?new wz(N):F});await PJ8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function PJ8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Yn($),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 GE(K,bs6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var bs6=10485760,wz;var XO1=D(()=>{xW();I_0();j$0();JF0();z10();J7();wz=class wz extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function fs6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!xs6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Og($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(gs6)])}async function us6($,Z){let Q=$.var.studioContext,Y=rY(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=Cf(G?.metadata?.runtime);if(W)return W;let K=KR0(Z.virtualMcpMetadata),H=K==="cms"?await yL1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)E$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 ls6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await f7($.var.studioContext)}catch{return null}}function Kn($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function k50($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=I50(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=X0(Y);return bm(Y,J.id,X)}function GO1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=JO$(Z);if(Y!==void 0)return $.json({error:Q},429,{...kZ,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof e6)return $.json({error:Q},409,kZ);let X=lW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,kZ)}return $.json({error:Q},502,kZ)}async function JO1($,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 qJ8($){try{let Z=await k50($),Q=await eL1(Z,$.get("vmClaim").branch);return $.json(Q,200,kZ)}catch(Z){return GO1($,Z)}}function V50($,Z){let Y=(h_0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return h_0.set($,X),X.finally(()=>{if(h_0.get($)===X)h_0.delete($)}),Y}async function EQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,kZ);let Y=Q?.runner??Kn($);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",...kZ}})}}let L=await B.text(),O=Q?.redactRepoDir?cs6(L):L,w=B.headers.get("content-type")??"application/json";return new Response(O,{status:B.status,headers:{"content-type":w,...kZ}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((O,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let L=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${L}`},502)}}function cs6($){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 MJ8($,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 ms6($){return IJ8.includes($)}var xs6,ys6=524288,TJ8=65536,gs6=1e4,RJ8=2000,hs6,h_0,kZ,IJ8,VJ8=()=>{let $=new Z1;$.use("/:virtualMcpId/:branch/*",hs6),$.post("/:virtualMcpId/:branch/write",(Q)=>EQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Og(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>EQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Og(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>EQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Og(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>EQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Og(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>EQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Og(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>EQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Og(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>EQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Og(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 EQ(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 EQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>EQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>EQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!ms6(Y))return Q.json({error:`step must be one of: ${IJ8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await yL1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await ls6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,kZ);if(Y==="start"){let G=X0(Q.var.studioContext),W=Ld(X.virtualMcpMetadata);try{await XR0({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 EQ(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 RL(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 MX8(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 qJ8(Q);return Z(Q)});let Z=(Q)=>EQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(RJ8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return qJ8(Q);return EQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(RJ8)])})}),$.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 k50(Q),G=await $O1(J,Y.branch,X.base);return Q.json(G,200,kZ)}catch(X){return GO1(Q,X)}return EQ(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,kZ);let Y=Kn(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return V50(X,async()=>{try{await gL1(W,Y,X);let K=I50(J,G);if(K)await AJ8(W,Y,X,K)}catch(K){if(K instanceof wz)return Q.json({error:K.message},403,kZ);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,kZ)}return EQ(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 V50(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,kZ);try{let G=await k50(Q);return await jJ8(G,Y.branch,J),Q.json({ok:!0},200,kZ)}catch(G){let W=lW(G)===409||G instanceof e6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,kZ)}});return V50(Y.claimName,()=>EQ(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 V50(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await k50(Q),H=W.base??await K.getDefaultBranch();return await g_0(K,Y.branch,H),Q.json({ok:!0},200,kZ)}catch(W){return GO1(Q,W)}});let X=Kn(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return V50(J,async()=>{try{await gL1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,kZ)}return EQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/judge-review",s5({maxSize:ys6,onError:(Q)=>Q.json({error:"Payload too large"},413,kZ)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Kn(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,L]=kX8(F)&&N?[F,U]:X?await Promise.all([MJ8(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),MJ8(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await k50(Q);return Promise.all([eL1(w,Y.branch),$O1(w,Y.branch)])})();await kW(K,X0(K).id,"judging whether a change needs review");let O=await _X8(K,B,L,typeof H.language==="string"?H.language:void 0);return Q.json(O,200,kZ)}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,kZ);return Q.json({error:F},502,kZ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=Kn(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 JO1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",s5({maxSize:TJ8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=Kn(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=QO1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=YO1(J,W.resolveType);return JO1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",s5({maxSize:TJ8,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):Od(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=QO1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!EJ8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=YO1(G,K.resolveType);return JO1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var kJ8=D(()=>{J8();NK();Qn();fL1();Dd();TX8();oY();wd();RX8();JG();jH();qX8();IX8();xZ1();w$0();vX8();J7();R5();ZO1();zJ8();WR0();XO1();xs6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;hs6=M_0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=g0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=X0(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{fs6(G)}catch(O){let w=O instanceof Error?O.message:String(O);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=o10({orgId:X.id,virtualMcpId:J,branch:G}),H=await lZ1(Q,G),F=cZ1(H,Y),U=AX8({userId:F,projectRef:K}),N=W.metadata??null,B=await us6($,{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((O)=>O.connection_id)??[],runtime:B}),Z();let L;try{L=await f7(Q)}catch{L=null}if(!L)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:L,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],runtime:B}),Z()});h_0=new Map;kZ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};IJ8=["clone","install","start"]});function SJ8($,Z,Q){let Y=WO1.get($);if(!Y)Y={pending:null,running:!1},WO1.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)is6($,Y);return J}async function is6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await ps6(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)WO1.delete($)}}async function ps6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Wn(Z,Q),W=await Z.listDecofileEntries(G,Y),K=rL1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let L=sL1(K,N),O=`${JSON.stringify(B,null,2)}
|
|
3650
3650
|
`;await BJ8(Z.repo,O);let w=L[0]??`${x_0(Y)}/${mL1(N)}.json`;H.push({path:w,content:O});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:O});for(let E of L.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of sL1(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 DJ8(Z,F.values(),X),{decofile:B,skipped:L}=z50(N);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:EH(Z.repo),branch:Q,packagePath:Y,blocks:L.map((O)=>O.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:ns6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof e6)||J>=ds6-1)throw N;await F$(L7(2000,200,J,2,0.5))}}}function ns6($){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 F91(Y,$.deps.coAuthor)}var ds6=3,WO1;var CJ8=D(()=>{MT0();k_0();i4();o$();J7();f_0();WO1=new Map});import{createHmac as _J8,randomBytes as ts6,timingSafeEqual as os6}from"crypto";function vJ8(){if(u_0)return u_0;let $;try{let Z=j0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return u_0=$?Buffer.from($):ts6(32),u_0}function KO1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+rs6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=_J8("sha256",vJ8()).update(Y).digest("base64url");return`${Y}.${X}`}function bJ8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(_J8("sha256",vJ8()).update(Y).digest("base64url"));if(X.length!==J.length||!os6(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 rs6=21600000,u_0=null;var xJ8=D(()=>{s1()});function l_0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function ss6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=l_0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function fJ8($){let Z;try{Z=l_0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=ss6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=l_0(G),K=W&&l_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 Hn}from"zod";function es6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&as6.test($)}function lJ8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function S50($){let Z=$.get("decofileScope");return bm($.var.studioContext,Z.organizationId,Z.repository)}function C50($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof e6)return $.json({error:Q},409);let Y=lW(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 cJ8(){let $=new Z1;return $.use("/:virtualMcpId/:branch",uJ8),$.use("/:virtualMcpId/:branch/*",uJ8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await S50(Z),X=await LJ8(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(fJ8(X.decofile),200,{...J,"content-type":"application/json"});let G=KO1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(lJ8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return C50(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 S50(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 C50(Z,X)}}),$.patch("/:virtualMcpId/:branch",Za6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Qa6.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=P50(X.data)}catch(G){if(G instanceof A50)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{V_0(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(cL1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await S50(Z),W=await SJ8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Yn(Y)},J),K=KO1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:lJ8(Z)})}catch(G){return C50(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await S50(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(lW(W)!==409)throw W;await g_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(lW(G)===409)return Z.json({error:"merge-conflict"},409);if(lW(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 C50(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await S50(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(lW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return C50(Z,Y)}}),$}var as6,yJ8=500,gJ8=1048576,hJ8=1024,$a6=8388608,Za6,Qa6,uJ8;var mJ8=D(()=>{WR0();k_0();J8();NK();fL1();I_0();XO1();J7();CJ8();xJ8();ZO1();f_0();jH();as6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Za6=s5({maxSize:$a6,onError:($)=>$.json({error:"Payload too large"},413)}),Qa6=Hn.object({set:Hn.record(Hn.string(),Hn.unknown()).optional(),delete:Hn.array(Hn.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)<=yJ8,{message:`Patch cannot touch more than ${yJ8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=gJ8),{message:`Each block must be at most ${gJ8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=hJ8),{message:`Each block key must be at most ${hJ8} characters`}),uJ8=M_0(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(!es6(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||!bJ8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await iJ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Od(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=I50(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 dJ8=($)=>{let Z=new Z1;if(Z.use("*",vp),Z.use("*",OZ8),Z.route("/",DZ8($.voiceSessions)),Z.route("/",xC0()),Z.route("/",aZ8()),Z.route("/",gZ8()),Z.route("/",WX8()),Z.route("/",HX8()),Z.route("/",eY8()),Z.route("/",JX8()),Z.route("/",ZX8()),Z.route("/",T_0()),Z.route("/tools",OX8()),Z.route("/",BX8()),Z.route("/",CY8({kvStorage:$.kvStorage})),Z.route("/",kY8()),Z.route("/fs",dY8({getConnection:$.getNatsConnection})),Z.route("/sandbox",VJ8()),Z.route("/decofile",cJ8()),Z.route("/",rY8()),Z.route("/",pY8()),Z.route("/deco-sites",yC0()),Z.route("/hosting",IZ8()),Z.route("/monitor",bZ8()),Z.route("/sso",kC0()),Z.route("/",R_0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",AZ8()),$.mountDevAssets)Z.route("/dev-assets",lC0({orgFromPath:!0}));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);for(let Q of IL1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",J68()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of IL1)Z.route(Q,tY8());return Z.route("/mcp",VI0()),Z.route("/mcp/self",E_0()),Z.route("/mcp",CI0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var iJ8=D(()=>{J8();LZ8();wZ8();jC0();TZ8();ZD1();VZ8();xZ8();cC0();Fz();rB1();GD1();SY8();_Y8();iY8();nY8();H40();lB1();_I0();ML1();oY8();sY8();$X8();QX8();SL1();KX8();FX8();DX8();CL1();wX8();_L1();kI0();kJ8();mJ8()});import{z as wg}from"zod";class HO1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new tJ8.Kvm(c_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:c_0.StorageType.Memory,ttl:oJ8.nanos(gD),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"?nJ8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await F$(200);continue}let G=pJ8.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 F$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,pJ8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new R1(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"?nJ8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var c_0,tJ8,oJ8,pJ8,nJ8;var rJ8=D(()=>{vJ();sU();o$();c_0=C(MK(),1),tJ8=C(EA(),1),oJ8=C(yz(),1),pJ8=new TextEncoder,nJ8=wg.discriminatedUnion("state",[wg.object({state:wg.literal("ready"),agentId:wg.string()}),wg.object({state:wg.literal("creating"),expiresAt:wg.number()})])});import{z as Fn}from"zod";function Ya6($){return{model:$.model,instructions:`${YI$}
|
|
3651
|
-
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class FO1{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:Ya6({...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:Fn.object({session:Fn.object({id:Fn.string().min(1)}),transport:Fn.object({type:Fn.literal("webrtc"),sdp:Fn.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var sJ8=D(()=>{sU()});var aJ8;var eJ8=D(()=>{aJ8=[{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 UO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:ZI$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:aJ8.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:gD/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 $G8=D(()=>{sU();eJ8()});import{z as UJ}from"zod";import{createHash as Xa6,createHmac as Ja6}from"crypto";class m_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Xa6("sha256").update(JSON.stringify(UO1($))).digest("hex"),this.conversationKey=Ja6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new m_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}=UJ.object({agents:UJ.array(UJ.object({agent_id:UJ.string(),name:UJ.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 UJ.object({platform_settings:UJ.object({auth:UJ.object({enable_auth:UJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...UO1(this.config)},AbortSignal.timeout(15000));return UJ.object({agent_id:UJ.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 UJ.object({token:UJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return UJ.object({token:UJ.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 ZG8=D(()=>{$G8()});import{createHmac as Ga6,timingSafeEqual as Wa6}from"crypto";import{z as Un}from"zod";function YG8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Ga6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function XG8($,Z){let Q=Buffer.from(JSON.stringify(QG8.parse($))).toString("base64url");return`${Q}.${YG8(Q,Z)}`}function JG8($,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(YG8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Wa6(W,G))return null;try{let K=QG8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+gD)return null;return K.data}catch{return null}}var QG8;var GG8=D(()=>{sU();QG8=Un.object({sessionId:Un.string().uuid(),organizationId:Un.string().min(1).max(256),userId:Un.string().min(1).max(256),threadId:Un.string().min(1).max(256),expiresAt:Un.number().int().positive()})});import{z as NO1}from"zod";function WG8($,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 BO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var BO1;var KG8=D(()=>{BO1=NO1.object({provider:NO1.enum(["elevenlabs","openai"]),model:NO1.string().trim().min(1).max(128)})});import{createHash as Ka6}from"crypto";import{z as Nn}from"zod";function Bn($){return`user.${Ka6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class LO1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new HG8.Kvm(i_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:i_0.StorageType.Memory,ttl:FG8.nanos(gD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(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=WG8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+gD},W=XG8(G,this.deps.secret),K=await this.kv(),H=Bn(G),F=await K.get(H),U=F?.operation==="PUT"?d_0.parse(F.json()):null,N=DO1.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 R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let L=await J.createSession({language:Q,model:X.model,safetyIdentifier:Bn($)});return{token:W,...L,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=JG8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=Bn(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 R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,DO1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(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=Bn(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 R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,DO1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(Bn($));if(Q?.operation==="PUT"&&d_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Bn($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var i_0,HG8,FG8,d_0,DO1;var UG8=D(()=>{vJ();sU();GG8();KG8();i_0=C(MK(),1),HG8=C(EA(),1),FG8=C(yz(),1),d_0=Nn.object({sessionId:Nn.string().uuid(),expiresAt:Nn.number(),connected:Nn.boolean().optional(),conversation:BO1.optional(),characters:Nn.number().int().nonnegative(),requests:Nn.number().int().nonnegative()}),DO1=new TextEncoder});function Ha6($){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 Fa6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},NG8=()=>{let $=new Z1;return $.use("*",Fa6),$.get("/",async(Z)=>{let Q=j0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await wG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Ha6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var BG8=D(()=>{J8();s1();AS0()});import{z as y1}from"zod";function _N($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function za6($){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 Pa6($,Z,Q){try{return JSON.parse($)}catch{throw new OG8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Aa6($){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:Pa6(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 Ta6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?HU(Q.function.parameters):HU({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Ra6($){if(!$)return;return{openai:{response_format:$}}}function qa6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function DG8($,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 LG8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Ua6=256,Na6,Ba6,Da6,La6,Oa6,wa6,ja6,Ea6,OG8,wG8,jG8;var EG8=D(()=>{n4();J8();Qn();dH();Na6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Ba6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Da6=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(Ba6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),La6=y1.object({type:y1.literal("text")}),Oa6=y1.object({type:y1.literal("json_object")}),wa6=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()})}),ja6=y1.union([La6,Oa6,wa6]),Ea6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Da6),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(Na6).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:ja6.optional(),user:y1.string().optional()});OG8=class OG8 extends Error{constructor($){super($);this.name="MessageConversionError"}};wG8=new Z1;wG8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(_N("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(_N("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(_N("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Ea6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(_N(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=za6(J.model);if(!G)return $.json(_N("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)=>CP(E.providerId));if(!j)return $.json(_N("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(_N(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Aa6(J.messages),N=J.tools?Ta6(J.tools):void 0,B=Ra6(J.response_format),L=qa6(),O=Math.floor(Date.now()/1000);if(J.stream)return RL($,async(w)=>{let j=DG8(F,U,N,J,B,$.req.raw.signal);try{let E=fd(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,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:L,object:"chat.completion.chunk",created:O,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>=Ua6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,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:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:LG8(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=DG8(F,U,N,J,B,$.req.raw.signal),j=await OE(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:L,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:LG8(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(_N("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(_N(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(_N(X.message,"server_error"),500)}});jG8=wG8});function Ma6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function zG8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=g0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!PZ(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||C9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(bA(U)!==J)continue;if(!Ma6(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 PG8=D(()=>{J8();H3()});var p_0;var OO1=D(()=>{p_0={name:"decocms",version:"4.464.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 ka6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Va6}}var AG8,Va6="https://ph.studio.decocms.com",TG8;var RG8=D(()=>{J8();Za();Hy();k9();s1();MB1();OO1();AG8=new Z1;AG8.get("/",($)=>{let Z={version:p_0.version,theme:g9$(),...QH().logo&&{logo:QH().logo},...oD()&&{internalUrl:Xt1()},...j0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!j0().controlplaneRestUrl&&!!j0().controlplaneServiceToken,hostingControlPlaneGa:j0().hostingControlPlaneGa,monitorEnabled:!!j0().clickhouseAnalyticsUrl&&!!j0().clickhouseAnalyticsPassword,monitorGa:j0().monitorGa,plansEnabled:j0().plansEnabled,auth:$98(),posthog:ka6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:WF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});TG8=AG8});function jg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function wO1($){return(jg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function qG8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(jg($))}&sz=${Z}`}function Sa6($,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 MG8($){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=Sa6(`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 Ca6,IG8;var VG8=D(()=>{Ca6=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())}),IG8=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(Ca6)})),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 kG8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${SW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function n_0($,Z={}){let Q=await fetch(kG8($,"",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 IG8.parse(await Q.json())}async function SG8($,Z={}){let Q=await fetch(kG8($,".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 jO1=D(()=>{VG8();XD()});import{join as CG8}from"path";async function va6($){try{let Z=await n_0($,{signal:AbortSignal.timeout(_a6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||wO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function PG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ba6($,Z){let Q=jg($),Y=Z?.brand?.trim()||wO1(Q),X=qG8(Q,128),G=`${(j0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=MG8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${PG(W)}</title>`,`<meta name="description" content="${PG(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="${PG(W)}" />`,`<meta property="og:description" content="${PG(K)}" />`,`<meta property="og:url" content="${PG(G)}" />`,`<meta property="og:image" content="${PG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${PG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${PG(W)}" />`,`<meta name="twitter:description" content="${PG(K)}" />`,`<meta name="twitter:image" content="${PG(H)}" />`,`<meta name="twitter:image:alt" content="${PG(F)}" />`,`<link rel="canonical" href="${PG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${PG(G)}.md" />`,`<link rel="icon" href="${PG(X)}" sizes="any" />`].join(`
|
|
3651
|
+
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class FO1{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:Ya6({...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:Fn.object({session:Fn.object({id:Fn.string().min(1)}),transport:Fn.object({type:Fn.literal("webrtc"),sdp:Fn.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var sJ8=D(()=>{sU()});var aJ8;var eJ8=D(()=>{aJ8=[{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 UO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:ZI$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:aJ8.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:gD/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 $G8=D(()=>{sU();eJ8()});import{z as UJ}from"zod";import{createHash as Xa6,createHmac as Ja6}from"crypto";class m_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Xa6("sha256").update(JSON.stringify(UO1($))).digest("hex"),this.conversationKey=Ja6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new m_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}=UJ.object({agents:UJ.array(UJ.object({agent_id:UJ.string(),name:UJ.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 UJ.object({platform_settings:UJ.object({auth:UJ.object({enable_auth:UJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...UO1(this.config)},AbortSignal.timeout(15000));return UJ.object({agent_id:UJ.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 UJ.object({token:UJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return UJ.object({token:UJ.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 ZG8=D(()=>{$G8()});import{createHmac as Ga6,timingSafeEqual as Wa6}from"crypto";import{z as Un}from"zod";function YG8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Ga6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function XG8($,Z){let Q=Buffer.from(JSON.stringify(QG8.parse($))).toString("base64url");return`${Q}.${YG8(Q,Z)}`}function JG8($,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(YG8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Wa6(W,G))return null;try{let K=QG8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+gD)return null;return K.data}catch{return null}}var QG8;var GG8=D(()=>{sU();QG8=Un.object({sessionId:Un.string().uuid(),organizationId:Un.string().min(1).max(256),userId:Un.string().min(1).max(256),threadId:Un.string().min(1).max(256),expiresAt:Un.number().int().positive()})});import{z as NO1}from"zod";function WG8($,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 BO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var BO1;var KG8=D(()=>{BO1=NO1.object({provider:NO1.enum(["elevenlabs","openai"]),model:NO1.string().trim().min(1).max(128)})});import{createHash as Ka6}from"crypto";import{z as Nn}from"zod";function Bn($){return`user.${Ka6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class LO1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new HG8.Kvm(i_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:i_0.StorageType.Memory,ttl:FG8.nanos(gD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(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=WG8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+gD},W=XG8(G,this.deps.secret),K=await this.kv(),H=Bn(G),F=await K.get(H),U=F?.operation==="PUT"?d_0.parse(F.json()):null,N=DO1.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 R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let L=await J.createSession({language:Q,model:X.model,safetyIdentifier:Bn($)});return{token:W,...L,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=JG8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=Bn(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 R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,DO1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(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=Bn(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 R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,DO1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(Bn($));if(Q?.operation==="PUT"&&d_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Bn($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var i_0,HG8,FG8,d_0,DO1;var UG8=D(()=>{vJ();sU();GG8();KG8();i_0=C(MK(),1),HG8=C(EA(),1),FG8=C(yz(),1),d_0=Nn.object({sessionId:Nn.string().uuid(),expiresAt:Nn.number(),connected:Nn.boolean().optional(),conversation:BO1.optional(),characters:Nn.number().int().nonnegative(),requests:Nn.number().int().nonnegative()}),DO1=new TextEncoder});function Ha6($){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 Fa6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},NG8=()=>{let $=new Z1;return $.use("*",Fa6),$.get("/",async(Z)=>{let Q=j0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await wG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Ha6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var BG8=D(()=>{J8();s1();AS0()});import{z as y1}from"zod";function _N($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function za6($){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 Pa6($,Z,Q){try{return JSON.parse($)}catch{throw new OG8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Aa6($){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:Pa6(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 Ta6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?HU(Q.function.parameters):HU({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Ra6($){if(!$)return;return{openai:{response_format:$}}}function qa6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function DG8($,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 LG8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Ua6=256,Na6,Ba6,Da6,La6,Oa6,wa6,ja6,Ea6,OG8,wG8,jG8;var EG8=D(()=>{n4();J8();Qn();dH();Na6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Ba6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Da6=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(Ba6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),La6=y1.object({type:y1.literal("text")}),Oa6=y1.object({type:y1.literal("json_object")}),wa6=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()})}),ja6=y1.union([La6,Oa6,wa6]),Ea6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Da6),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(Na6).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:ja6.optional(),user:y1.string().optional()});OG8=class OG8 extends Error{constructor($){super($);this.name="MessageConversionError"}};wG8=new Z1;wG8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(_N("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(_N("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(_N("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Ea6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(_N(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=za6(J.model);if(!G)return $.json(_N("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)=>CP(E.providerId));if(!j)return $.json(_N("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(_N(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Aa6(J.messages),N=J.tools?Ta6(J.tools):void 0,B=Ra6(J.response_format),L=qa6(),O=Math.floor(Date.now()/1000);if(J.stream)return RL($,async(w)=>{let j=DG8(F,U,N,J,B,$.req.raw.signal);try{let E=fd(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,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:L,object:"chat.completion.chunk",created:O,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>=Ua6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,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:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:LG8(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=DG8(F,U,N,J,B,$.req.raw.signal),j=await OE(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:L,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:LG8(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(_N("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(_N(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(_N(X.message,"server_error"),500)}});jG8=wG8});function Ma6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function zG8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=g0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!PZ(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||C9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(bA(U)!==J)continue;if(!Ma6(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 PG8=D(()=>{J8();H3()});var p_0;var OO1=D(()=>{p_0={name:"decocms",version:"4.464.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function ka6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Va6}}var AG8,Va6="https://ph.studio.decocms.com",TG8;var RG8=D(()=>{J8();Za();Hy();k9();s1();MB1();OO1();AG8=new Z1;AG8.get("/",($)=>{let Z={version:p_0.version,theme:g9$(),...QH().logo&&{logo:QH().logo},...oD()&&{internalUrl:Xt1()},...j0().enableDecoImport&&{enableDecoImport:!0},hostingEnabled:!!j0().controlplaneRestUrl&&!!j0().controlplaneServiceToken,hostingControlPlaneGa:j0().hostingControlPlaneGa,monitorEnabled:!!j0().clickhouseAnalyticsUrl&&!!j0().clickhouseAnalyticsPassword,monitorGa:j0().monitorGa,plansEnabled:j0().plansEnabled,auth:$98(),posthog:ka6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:WF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});TG8=AG8});function jg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function wO1($){return(jg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function qG8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(jg($))}&sz=${Z}`}function Sa6($,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 MG8($){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=Sa6(`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 Ca6,IG8;var VG8=D(()=>{Ca6=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())}),IG8=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(Ca6)})),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 kG8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${SW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function n_0($,Z={}){let Q=await fetch(kG8($,"",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 IG8.parse(await Q.json())}async function SG8($,Z={}){let Q=await fetch(kG8($,".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 jO1=D(()=>{VG8();XD()});import{join as CG8}from"path";async function va6($){try{let Z=await n_0($,{signal:AbortSignal.timeout(_a6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||wO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function PG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ba6($,Z){let Q=jg($),Y=Z?.brand?.trim()||wO1(Q),X=qG8(Q,128),G=`${(j0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=MG8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${PG(W)}</title>`,`<meta name="description" content="${PG(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="${PG(W)}" />`,`<meta property="og:description" content="${PG(K)}" />`,`<meta property="og:url" content="${PG(G)}" />`,`<meta property="og:image" content="${PG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${PG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${PG(W)}" />`,`<meta name="twitter:description" content="${PG(K)}" />`,`<meta name="twitter:image" content="${PG(H)}" />`,`<meta name="twitter:image:alt" content="${PG(F)}" />`,`<link rel="canonical" href="${PG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${PG(G)}.md" />`,`<link rel="icon" href="${PG(X)}" sizes="any" />`].join(`
|
|
3652
3652
|
`)}function xa6($,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}
|
|
3653
3653
|
</head>`)}function _G8($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=jg(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(CG8($,"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(`${SW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(fa6)}),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=jg(Q.req.param("file").replace(/\.md$/,""));try{let X=await SG8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(ya6)});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=$?CG8($,"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 va6(jg(Y)),K=ba6(Y,W);return Q.html(xa6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var _a6=2500,fa6=1e4,ya6=1e4;var vG8=D(()=>{J8();XD();jO1();s1()});function t_0($,Z){return fetch(`${SW({})}${$}`,Z)}async function ga6($,Z){let Q=await n_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function ua6($){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 ha6,ML,bG8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},xG8;var fG8=D(()=>{J8();U3();XD();jO1();ha6=new Set(["complete","errored","terminated","unknown"]);ML=new Z1;ML.use("*",async($,Z)=>{let Q=await b8.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});ML.use("/link-token/*",bG8);ML.use("/suggest",bG8);ML.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 ga6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});ML.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}=ua6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await t_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Hj({})}`},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)}});ML.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await t_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${Hj({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:ha6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});ML.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await t_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)}});ML.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await t_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:[]})}});xG8=ML});var la6=1048576,EO1;var yG8=D(()=>{J8();NK();s1();UB1();EO1=new Z1;EO1.post("/webhook",s5({maxSize:la6,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(!B58(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=D58(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await L58(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as ca6}from"crypto";function ia6($,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 ca6(Buffer.from(X),Buffer.from(Y))}function pa6($,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 gG8($){let Z=new Z1;return Z.post("/webhook",s5({maxSize:ma6,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(!ia6(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"&&!da6.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 U$0().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=pa6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await na6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function na6($,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 Mf$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var ma6=5242880,da6;var hG8=D(()=>{J8();NK();JG();g7();da6=new Set(["check_suite","issue_comment"])});import{DBOS as PO1,SchedulerMode as ta6}from"@dbos-inc/dbos-sdk";async function ra6(){try{return await sa6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function sa6(){if(!F$0())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (TZ1(),AZ1)),Promise.resolve().then(() => (PZ1(),zZ1))]),Q=await U$0(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=j8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=dR$({sandboxes:J,pools:G,records:await iR$(X,J,G),legacyPools:hT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await pR$(K,GF0(X,new MX(j0().encryptionKey)),{now:W,orgFsLifetimeMs:cT0}),U=0,N=0,B=0;for(let L of H)try{let O=await Y.pushCredentials(L);U+=O.stored,N+=O.kept}catch(O){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${O instanceof Error?O.message:String(O)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function aa6($,Z){let Q=await PO1.runStep(ra6,{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 uG8(){if(zO1)return;if(!j0().agentSandboxEnabled||!F$0())return;zO1=PO1.registerWorkflow(aa6,{name:"sandboxCredentialPushWorkflow"}),PO1.registerScheduled(zO1,{name:"sandboxCredentialPushWorkflow",crontab:oa6,mode:ta6.ExactlyOncePerIntervalWhenActive})}var oa6="1-59/10 * * * *",zO1=null;var lG8=D(()=>{dG();TO();H61();mT0();uT0();JG();s1()});function cG8($){let Z=new BL($.db,new MX($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=bb$(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 rQ(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 mG8=D(()=>{J8();TO();cQ1();AE();v60()});import{DBOS as jz,SchedulerMode as ea6}from"@dbos-inc/dbos-sdk";function dG8($){TO1=$}function qO1(){if(!TO1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return TO1}function MO1(){let $=qO1();return new BL($.db,new MX($.encryptionKey))}async function Xe6($){try{let Z=await MO1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await hH(qO1().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 rQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${Ze6}m"`,W=0,K;for(let H=0;H<Qe6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await LU1(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 Je6($,Z){let Q=await jz.runStep(()=>MO1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>jz.runStep(()=>Xe6(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 Ge6($,Z){try{let Q=await MO1().getById($);if(!Q?.enabled)return"disabled";let Y=await hH(qO1().db,Q.organizationId);if(!Y)return"disabled";let X=await LU1(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 We6($,Z){await jz.sleep(qS0()+Ye6),await jz.runStep(()=>Ge6($,Z),{name:"settleJiraMove"})}async function iG8($,Z){if(!RO1)throw Error("[jira-trigger] settle workflow is not registered");await jz.startWorkflow(RO1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function pG8(){if(AO1)return;RO1=jz.registerWorkflow(We6,{name:"jiraSettleWorkflow"}),AO1=jz.registerWorkflow(Je6,{name:"jiraTriggerSweepWorkflow"}),jz.registerScheduled(AO1,{name:"jiraTriggerSweepWorkflow",crontab:$e6,mode:ea6.ExactlyOncePerIntervalWhenActive})}var $e6="*/5 * * * *",Ze6=20,Qe6=5,Ye6=5000,TO1=null,RO1=null,AO1=null;var IO1=D(()=>{TO();v60();sd();AE();BU1();MS0()});function nG8($){let Z=new BL($.db,new MX($.encryptionKey));async function Q(X,J){let G=I18(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await iG8(W.id,G)}let Y=new Z1;return Y.post("/webhook/:secret",s5({maxSize:Ke6}),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 Ke6=1048576;var tG8=D(()=>{J8();NK();TO();IO1();MS0();v60()});function oG8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var rG8,He6,Fe6,sG8;var aG8=D(()=>{J8();vJ();Gi();Bm();rG8=new Z1,He6=["range","if-none-match","if-modified-since"],Fe6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];rG8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(_p($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new R1(401,{message:"Authentication required"})}if(!Q)throw new R1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new R1(400,{message:"Missing file key"});let X=await l80(Y,Z);if(!X)throw new R1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&vW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new R1(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 oG8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of He6){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 R1(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 R1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Fe6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),oG8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});sG8=rG8});var _50=b((Eg)=>{var Ue6=Eg&&Eg.__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]}),Ne6=Eg&&Eg.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Ue6(Z,$,Q)};Object.defineProperty(Eg,"__esModule",{value:!0});Ne6(kG(),Eg)});var Z38=b((eG8)=>{Object.defineProperty(eG8,"__esModule",{value:!0});eG8.version=void 0;eG8.version="3.4.0"});var X38=b((vN)=>{var Be6=vN&&vN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(vN,"__esModule",{value:!0});vN.NodeTransport=vN.VERSION=void 0;vN.nodeResolveHost=Ee6;var a5=_50(),De6=M0("net"),VO1=M0("tls"),Le6=M0("path"),Q38=M0("fs"),Oe6=Be6(M0("dns")),we6=Z38();vN.VERSION=we6.version;var je6="nats.js";class Y38{socket;version;lang;yields=[];signal=(0,a5.deferred)();closedNotification=(0,a5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=je6,this.version=vN.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,De6.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,Le6.resolve)($),!(0,Q38.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Q38.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,VO1.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,VO1.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 VO1.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}}vN.NodeTransport=Y38;function Ee6($){let Z=(0,a5.deferred)();return Oe6.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 H38=b((K38)=>{Object.defineProperty(K38,"__esModule",{value:!0});K38.connect=ze6;var J38=X38(),G38=_50(),W38=_50();function ze6($={}){if((0,W38.hasWsProtocol)($))return Promise.reject(W38.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,G38.setTransportFactory)({factory:()=>{return new J38.NodeTransport},dnsResolveFn:J38.nodeResolveHost}),G38.NatsConnectionImpl.connect($)}});var F38=b((IL)=>{var Ae6=IL&&IL.__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]}),Te6=IL&&IL.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Ae6(Z,$,Q)};Object.defineProperty(IL,"__esModule",{value:!0});IL.connect=void 0;var Re6=H38();Object.defineProperty(IL,"connect",{enumerable:!0,get:function(){return Re6.connect}});Te6(_50(),IL)});function D38($){let Z=$?.connectFn??Ve6,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 L=0;while(!J)try{Q=await Z({servers:N,timeout:Ie6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${L} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{L++;let O=L7(Me6,qe6,L-1,2,0.5);await F$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let L=B?.creds?U38.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,L).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=B38.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 Ve6($){return N38.connect($)}var U38,N38,B38,qe6=100,Me6=3000,Ie6=3000;var L38=D(()=>{o$();U38=C(yz(),1),N38=C(F38(),1),B38=C(MK(),1)});function o_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 r_0($,Z){return`${$}.${Z}`}class kO1{cache;constructor($){this.cache=o_0({ttlMs:$?.ttlMs??ke6,maxSize:$?.maxSize??Se6})}async get($,Z){return this.cache.get(r_0($,Z))??null}async set($,Z,Q){this.cache.set(r_0($,Z),Q)}async invalidate($,Z){this.cache.delete(r_0($,Z)),this.cache.delete(r_0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var ke6=600000,Se6=5000;var O38=()=>{};function s_0($,Z){return`${$}:${Z}`}function SO1($){let Z=o_0({ttlMs:$?.ttlMs??Ce6,maxSize:$?.maxSize??_e6}),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(w38,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(s_0(K,H))},set(K,H,F){Z.set(s_0(K,H),F)},invalidate(K,H){Z.delete(s_0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(w38),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(s_0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var w38="studio.ai-provider-keys.invalidate",Ce6=30000,_e6=5000;var j38=()=>{};class CO1{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 E38=($)=>{let Z;return()=>Z??=$()},_O1,vO1;var z38=D(()=>{S6();_O1=E38(()=>Z$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),vO1=E38(()=>Z$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function he6($=T38){return{name:WN,subjects:[`${EJ1}.>`],storage:XF.StorageType.File,max_age:xe6,max_bytes:ye6,max_msgs_per_subject:ge6,discard:XF.DiscardPolicy.Old,retention:XF.RetentionPolicy.Limits,duplicate_window:fe6,num_replicas:$}}class R38{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 P38($){let Z=A38.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function me6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,be6().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 de6($,Z){return $.info?.cluster?Z:1}function ie6($){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 bO1{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=he6(X);try{await Y.streams.info(WN),await Y.streams.update(WN,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(WN,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(WN),await Y.streams.add(J);else throw G}},Q=await w8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await XF.jetstreamManager($),X=de6($,T38);try{await Z(Y,X)}catch(J){if(X<=1||!ie6(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:wi});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=me6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=Ih$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=PJ1(H,{runId:Z}),N=performance.now()-F;_O1().record(N),vO1().add(1,{"org.id":Y??"unknown"}),ce6?.record(N,U.reduce((B,L)=>B+L.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?P38(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:L}=await H.read();if(B)break;if(K(L),U++,++F>=64)F=0,await new Promise((O)=>setImmediate(O))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),le6)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 w8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:P38(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:wi}),!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=PJ1(Z,{runId:$,dedup:Q});_O1().record(performance.now()-X),vO1().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=Mh$({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"?XF.DeliverPolicy.New:XF.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=CE($),W;try{W=await w8(async()=>{return(await Y.consumers.get(WN,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:wi})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=rM0({messages:async function*(){try{for await(let O of W)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(pM0()).pipeThrough(nM0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,L=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",L,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:w,value:j}=await F.read();if(w){L(),O.close();return}let E=j;if(E.kind==="done"){if(J){L(),O.close();return}continue}O.enqueue(E.chunk);return}},cancel(){L()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(WN,{filter:CE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var XF,A38,ve6=($)=>{let Z;return()=>Z??=$()},be6,xe6=86400000000000,fe6=120000000000,ye6=4294967296,T38,ge6=500000,ue6,le6,ce6;var q38=D(()=>{o$();AJ1();sM0();tM0();S6();z38();XF=C(MK(),1),A38=C(yz(),1),be6=ve6(()=>Z$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),T38=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);ue6=process.env.STREAM_ENCODE_TRACE==="1",le6=process.env.DECOPILOT_STREAM_TRACE==="1";ce6=ue6?new R38:null});function a_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,kF(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 M38=D(()=>{n8()});class xO1{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 pe6($,Z,Q={}){let Y=$.startsWith("thread:")?vH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function fO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await rU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await KE($,{threadId:X,runBranch:G?.branch}),K=await O10($,Q,J61(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=pe6(W,await HR0($,X),{flat:_f(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 q3(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 I38=D(()=>{J7();oY();g7()});async function V38($,Z,Q){let Y=Z.organizationId;if(!JJ(Z))return!1;if(!Xy(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=xU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await Q5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),L8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var k38=D(()=>{z4();aQ();ed();uH();A9()});function ee6($){return $ instanceof pX}function S38($,Z){return Z-$>=se6}class yO1{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??ne6;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??oe6,Q=this.options.itemIntervalMs??te6,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()-fQ1),GX1);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()-ae6));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 YX1(this.taskBoard,X,Y),await XX1(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!==$$.progress||JJ(W)||W.assigneeId!==T8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await fO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!S38(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:$$.progress,to:$$.review,reason:H}}).catch(()=>{}),L8(J,F),await lH(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!==$$.progress||G.assigneeId!==T8)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),ee6(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()+re6)).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!==$$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),L8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!S38(jD(Q,Z.reviewCycleStartedAt),Date.now()))return;await lH($,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(!JJ(Y))return!1;let X=Y.assigneeId===T8,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 fO1(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 Qi(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 V38(G,Y,W))return!0;if(await Lu$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!eY1(W))return!1;return await $i(G,Y,{previewMatchesHead:$X1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await IE($,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 ne6=60000,te6=300000,oe6=50,re6=60000,se6=900000,ae6=120000;var C38=D(()=>{z4();$M0();I38();JN();e80();uH();k38();A9();uW();WX1();g7();O80();Zi()});import{readdir as $05,rm as e_0}from"fs/promises";import{join as $v0}from"path";async function Zv0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Z05),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await zg($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await _38($,X,Z);else if(!X.startsWith(".")){let J=$v0($,X),G=await zg(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await _38(J,K,Z)}if((await zg(J)).length===0)await e_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function _38($,Z,Q){let Y=0,X=$v0($,Z),J=await zg(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=$v0(X,W),H=await zg(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=$v0(K,U);await e_0(B,{recursive:!0,force:!0}),Y++}}if((await zg(K)).length===0)await e_0(K,{recursive:!0,force:!0})}if((await zg(X)).length===0)await e_0(X,{recursive:!0,force:!0});return Y}async function zg($){try{return(await $05($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var Z05=30;var gO1=()=>{};import{DBOS as hO1,SchedulerMode as Q05}from"@dbos-inc/dbos-sdk";async function X05(){let $=[jK(),kg(),uN()],Z=0;for(let Q of $)try{Z+=await Zv0(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 J05($,Z){await hO1.runStep(()=>X05(),{name:"monitoringRetention"})}function b38(){if(v38)return;v38=!0;let $=hO1.registerWorkflow(J05,{name:"monitoringRetentionWorkflow"});hO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Y05,mode:Q05.ExactlyOncePerIntervalWhenActive})}var Y05="23 4 * * *",v38=!1;var x38=D(()=>{d3();gO1()});function f38($){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 sQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await SA($.db,Z,Y.role);return X.boundAuth=YB1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new U2(Q,void 0,X.boundAuth,Y.role,"self"),ME(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var y38=D(()=>{UW();vU()});function G05(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function W05(){return{services:G05(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function H05(){for(let $ of K05)$()}function g38($){let Z=[...uO1.logs,$];uO1={...uO1,logs:Z.length>500?Z.slice(-500):Z},H05()}function lO1(){return F05}var uO1,K05,F05=!1;var cO1=D(()=>{uO1=W05(),K05=new Set});import{EventEmitter as U05}from"events";var mO1;var h38=D(()=>{cO1();mO1=new U05;mO1.on("request",($)=>{g38($)})});function u38(){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=Dn(N.params.name),L=N.params.arguments||{},O=Object.keys(L).map((j)=>Dn(j)),w=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${W9.tool}${B}${W9.dim}(${w})${W9.reset}`}else if(N.method)J=`${W9.dim}${Dn(N.method)}${W9.reset}`}}catch{}}let W=Dn(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${W9.mcp}${Dn(F.slice(0,12))}\u2026${W9.reset}`}else if(X==="/mcp")W=`${W9.mcp}/mcp${W9.reset}`;else if(X==="/mcp/registry")W=`${W9.mcp}/mcp/registry${W9.reset}`;let K=B05(Y),H=G?"\u25C0":"\u2190";if(!lO1())console.log(`${W9.dim}${H}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=N05(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,L=G?"\u25B6":"\u2192";if(!lO1())console.log(`${W9.dim}${L}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""} ${N}${U}${W9.reset} ${W9.duration}${B}${W9.reset}`);mO1.emit("request",{method:Y,path:Dn(X),status:U,duration:F,timestamp:new Date})}}}var W9,N05=($)=>{if($>=500)return W9.serverError;if($>=400)return W9.clientError;if($>=300)return W9.redirect;return W9.ok},B05=($)=>{return W9[$]||W9.reset},Dn=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var l38=D(()=>{cO1();h38();W9={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as i38}from"crypto";import{mkdir as D05,readdir as L05,rm as c38,stat as p38}from"fs/promises";import{join as iO1,relative as O05}from"path";import{z as Q8}from"zod";function t38($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return iO1(w05,Z)}function o38($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function dO1($,Z){let Q=t38($),Y=o38(Z);return iO1(Q,Y)}function j05($,Z,Q,Y){let X=j0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return i38("sha256",X).update(J).digest("hex")}function d38($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=j05(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${o38(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function r38($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${i38("md5","etag").update(Y).digest("hex")}"`}async function s38($,Z,Q,Y,X){try{let J=await L05($,{withFileTypes:!0});for(let G of J){let W=iO1($,G.name),H=O05(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 s38(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 p38(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:r38(W,F.mtime,F.size)})}catch{}}}}catch{}}function a38($,Z){let Y=X0($).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=t38(Y);await D05(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await s38(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),L=N+W<U.objects.length,O=L?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:L,nextContinuationToken:O,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({contentType:Q8.string().optional(),contentLength:Q8.number(),lastModified:Q8.string(),etag:Q8.string(),metadata:Q8.record(Q8.string(),Q8.string()).optional()}),handler:async(X)=>{let J=X,G=dO1(Y,J.key),W=await p38(G);return{contentType:XD1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:r38(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=KL(J.expiresIn,m38);return{url:d38(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=KL(J.expiresIn,m38);return{url:d38(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({success:Q8.boolean(),key:Q8.string()}),handler:async(X)=>{let J=X,G=dO1(Y,J.key);try{return await c38(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Q8.object({keys:Q8.array(Q8.string()).max(1000)}),outputSchema:Q8.object({deleted:Q8.array(Q8.string()),errors:Q8.array(Q8.object({key:Q8.string(),message:Q8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=dO1(Y,K);try{await c38(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function pO1($,Z,Q){let Y=a38(Z,Q),X=new zw({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:fZ});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 S3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),QK(X,J,$,"mcp:dev-assets")}async function e38($,Z,Q,Y){let J=a38(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 w05="./data/assets",m38=3600,n38,$W8;var ZW8=D(()=>{s1();qi();J8();wG0();Ri();SJ();HL();cC0();n38=new Z1;n38.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return pO1($.req.raw,Z,Y)});$W8=n38});var QW8={};Q6(QW8,{mountDevRoutes:()=>E05});function E05($,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 pO1(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 e38(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",$W8);let Q=new Z1;Q.use("*",QF({mountPath:"/api/dev-assets"})),Q.route("/",lC0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var YW8=D(()=>{J8();sB1();cC0();ZW8()});var BW8={};Q6(BW8,{watchHandler:()=>NW8,resolveCorsOrigin:()=>FW8,isSsoExemptPath:()=>KW8,isAllowedOAuthRedirectUri:()=>UW8,createApp:()=>k05});import{readFileSync as z05}from"fs";import{PrometheusSerializer as P05}from"@opentelemetry/exporter-prometheus";import{DBOS as VL}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as R05,oAuthProtectedResourceMetadata as q05}from"better-auth/plugins";async function A05($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,JW8(XW8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),JW8(XW8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function JW8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function KW8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${MC0}/`)||$.startsWith(`${zC0}/`)}function HW8($){return $==="local.studio.decocms.com"}function FW8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(HW8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function UW8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||HW8($.hostname)}async function k05($={}){let Z=$.database??j8(),Q=!1;x6.stop().catch((J0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",J0)});let Y,X,J,G,W=new kO1,K,H,F,U=null;if($.disableNats)K=SO1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new K40,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(J0)=>{return(async()=>{let K0=J0.getReader();try{while(!0){let{done:A0}=await K0.read();if(A0)break}}catch{}finally{K0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=D38();let J0=j0().natsCredsPath,K0;if(J0)try{K0=z05(J0,"utf8")}catch(K8){console.error(`[app] failed to read NATS_CREDS at ${J0}; connecting anonymously`,K8)}U.init(j0().natsUrls,K0?{creds:K0}:void 0);let A0=d$1()?new V$1({getJetStream:()=>U.getJetStream(),selfListVersion:p_0.version}):null;A0?.init().catch(()=>{}),Y=A0;let T0=new K81({getJetStream:()=>U.getJetStream()});T0.init().catch(()=>{}),X=T0;let H1=new Gy(nY1,{getJetStream:()=>U.getJetStream()}),l$=new Gy(w80,{getJetStream:()=>U.getJetStream()});H1.init().catch(()=>{}),l$.init().catch(()=>{}),J={reads:H1,cards:l$};let n$=new rG1({getJetStream:()=>U.getJetStream()});n$.init().catch(()=>{}),G=n$,K=SO1({getConnection:()=>U.getConnection()}),H=new CO1({getConnection:()=>U.getConnection()}),F=new bO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),x58(U),U.onReady(()=>{A0?.init().catch((K8)=>{console.error("[McpListCache] Deferred init failed:",K8)}),T0.init().catch((K8)=>{console.error("[SkillCatalogCache] Deferred init failed:",K8)}),H1.init().catch((K8)=>{console.error("[PrReadCache] Deferred init failed:",K8)}),l$.init().catch((K8)=>{console.error("[PrCardCache] Deferred init failed:",K8)}),n$.init().catch((K8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",K8)}),K.start(),WD$(()=>U.getConnection()),F.init().catch((K8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",K8)})})}if(Ez)await Ez();k$1(Y),F81(X),N81(()=>U?.getConnection()??null),tY1(J),sG1(G);let B={storage:new Ou(Z.db),sseHub:x6,onThreadFinished:async(J0,K0)=>Xi(new R3(Z.db),J0,K0,new mG(Z.db))},L=new mX1(B),O=new S60(Z.db),w=new xO1(O);w.start(),Bu$(H),H.start((J0)=>{fM0(J0),L.execute({type:"CANCEL",taskId:J0}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",K0)})}).catch((J0)=>{console.error("[Decopilot] CancelBroadcast start failed:",J0)}),U?.onReady(()=>{H.start().catch((J0)=>{console.error("[CancelBroadcast] Deferred start failed:",J0)})});let j=()=>U?.getConnection()??null;iB1(j),U?.onReady(()=>iB1(j)),C31(j),U?.onReady(()=>C31(j)),F.init().catch((J0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",J0)}),Ez=async()=>{await L.stopAll(),L.dispose(),w.dispose(),H.stop().catch(()=>{}),YZ8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),KD$(),G.teardown(),k$1(null),F81(null),N81(null),tY1(null),sG1(null)};let E=new Z1;if(E.use("*",nG1({enabled:(J0)=>Cp(J0,"debug")==="1"})),E.use("*",Tv0),E.use("/*",S58({origin:(J0,K0)=>FW8(J0,{baseUrl:j0().baseUrl,requestOrigin:new URL(K0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(J0,K0)=>{if(await K0(),J0.req.path.includes("/files/"))return;if(J0.req.path.includes("/fs/")&&J0.req.path.endsWith("/read"))return;J0.header("X-Frame-Options","DENY"),J0.header("Content-Security-Policy","frame-ancestors 'none'")}),!j0().noTui)E.use("*",u38());E.use("*",async(J0,K0)=>{if(await K0(),Rn(J0.req.path))return;if(J0.res.status>=500){let T0=await J0.res.clone().text();console.error(`[5xx Response] ${J0.req.method} ${J0.req.path} - ${J0.res.status}:`,T0)}}),E.get(BX.HEALTH,(J0)=>{if(Q)return J0.json({status:"shutting_down"},503);return J0.json({status:"ok"})}),E.get(BX.HEALTH_LIVE,(J0)=>{return J0.json({status:"ok"})}),E.get(BX.HEALTH_READY,async(J0)=>{if(Q)return J0.json({status:"shutting_down"},503);let K0={};if(K0.postgres={status:await A05(Z.pool)?"up":"down"},U)K0.nats=U.isConnected()?{status:"up"}:{status:"down"};else K0.nats={status:"down"};let A0=K0.postgres.status==="up",T0=A0?200:503;return J0.json({status:A0?"ready":"not_ready",services:K0},T0)}),E.get(BX.METRICS,async(J0)=>{try{let K0=await Iv0.collect(),A0=T05.serialize(K0.resourceMetrics);return J0.text(A0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(K0){return console.error("Failed to collect metrics:",K0),J0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${BX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(J0)=>{let K0=J0.req.param("queueName");if(!M05.has(K0))return J0.json({error:`Unknown queue: ${K0}`},404);let[A0,T0]=await Promise.all([VL.listQueuedWorkflows({queueName:K0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),VL.listQueuedWorkflows({queueName:K0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return J0.json({queue_length:A0.length,in_flight:T0.length})}),E.route("/api/config",TG8),E.route("/api/_reports",xG8),E.route("/api/_stripe",EO1),E.route("/api/_github",gG8({taskBoard:()=>i,contextFactory:()=>y})),E.route("/api/_git",hp);let T={db:Z.db,encryptionKey:j0().encryptionKey};E.route("/api/_jira",nG8(T)),E.route("/api/_jira",cG8(T)),E.route("/report",_G8($.clientDir)),E.route("/api/auth/custom",Z98),E.route("/api/auth/desktop",J98),E.all("/api/auth/admin/*",d98),E.all("/api/auth/*",async(J0)=>{return await b8.handler(J0.req.raw)});let P=X68();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",V60),E.route("/",H68()),E.use("/oauth-proxy/:connectionId/*",d60),E.all("/oauth-proxy/:connectionId/*",GW8);let A=async(J0)=>{let A0=await I05()(J0.req.raw),T0=await A0.json();return Response.json(T0,A0)};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(J0)=>{let A0=await V05()(J0.req.raw),T0=await A0.json();return Response.json(T0,A0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let f=_58({ttlMs:120000}),_=await Y58({db:Z.db,auth:b8,encryption:{key:j0().encryptionKey},observability:{tracer:fL,meter:Z$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});sQ.set(_),nn1({db:Z.db,baseUrl:c5()}),X58({db:Z.db}),K58({db:Z.db}),O58({db:Z.db}),dG8({db:Z.db,encryptionKey:j0().encryptionKey}),yx$({db:Z.db}),A58({db:Z.db}),Nf$({db:Z.db});let V=GJ0(Z.db),g=new Xs(Z.db),y=f38({db:Z.db});mG1({storage:V,studioContextFactory:y}),xJ1({systemDatabaseUrl:rs0(j0().databaseUrl,j0().databasePgSsl),studioContextFactory:y,deps:{runRegistry:L,cancelBroadcast:H,streamBuffer:F,sseHub:x6}}),VJ1({dispatchRunFn:Eh$,studioContextFactory:y,deps:{runRegistry:L,cancelBroadcast:H,streamBuffer:F,sseHub:x6}});let h=new Ou(Z.db),i=new R3(Z.db),p=new mG(Z.db),U0=new yO1(i,y,p);if(j0().taskBoardReviewSweeperEnabled){U0.start();let J0=Ez;Ez=async()=>{await J0?.(),U0.dispose()}}uh$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let J0=U?.getConnection();return J0?await WW8.jetstreamManager(J0):null},messageParts:h.messageParts(),resolveRun:async(J0)=>{let K0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",J0).executeTakeFirst();return K0?{orgId:K0.organization_id,createdBy:K0.created_by,version:K0.message_storage_version??1,status:K0.status,runFenceToken:K0.run_fence_token,title:K0.title??null}:null},completeRunIfNotCompleted:async(J0,K0)=>{let A0=await h.completeRunIfNotCompleted(J0,K0);if(a_0(x6,K0,J0,A0),A0)await Xi(i,J0,K0,p);return A0},markRunRequiresAction:async(J0,K0)=>{let A0=await h.requiresActionIfInProgress(J0,K0);return a_0(x6,K0,J0,A0),A0},markRunFailed:async(J0,K0,A0,T0)=>{let H1=await h.markRunFailed(J0,K0,A0,T0);if(a_0(x6,K0,J0,H1),H1)await Xi(i,J0,K0,p);return H1},clearSynthesizedError:async(J0,K0)=>{await h.messageParts().replaceMessageParts(J0,SE(J0,K0),[])},persistTitle:(J0,K0,A0)=>h.update(J0,K0,{title:A0}),onTitleUpdated:async({runId:J0,orgId:K0,title:A0})=>{let T0=await h.get(J0,K0).catch(()=>null);x6.emit(K0,kF(J0,T0?.status??"in_progress",{title:A0,virtualMcpId:T0?.virtual_mcp_id??void 0,createdBy:T0?.created_by,triggerId:T0?.trigger_id,branch:T0?.branch??null,harnessId:T0?.harness_id??void 0,createdAt:T0?.created_at,updatedAt:T0?.updated_at}))},bumpProgress:async({runId:J0,orgId:K0})=>{await h.bumpProgress(J0,K0)},recordCompleted:async({runId:J0,orgId:K0,distinctId:A0,usage:T0})=>{f1.capture({distinctId:A0,event:"chat_message_completed",groups:{organization:K0},properties:{organization_id:K0,thread_id:J0,transport:"projector",input_tokens:T0.inputTokens,output_tokens:T0.outputTokens,total_tokens:T0.totalTokens}})},recordFailed:async({runId:J0,orgId:K0,distinctId:A0,reason:T0,kind:H1})=>{f1.capture({distinctId:A0,event:"chat_message_failed",groups:{organization:K0},properties:{organization_id:K0,thread_id:J0,transport:"projector",error_category:H1,error_message:T0}})},purgeRun:async(J0)=>{F.purge(J0)}}),ig$({studioContextFactory:y,systemDatabaseUrl:rs0(j0().databaseUrl,j0().databasePgSsl),streamBuffer:F}),b38(),tn1(),G58(),F58(),j58(),pG8(),cx$(),R58(),Bf$(),uG8();let v0=async(J0,K0,A0)=>{let T0=await V.findById(J0,K0);if(!T0)throw Error("Automation not found");return pG1({automationId:T0.id,organizationId:T0.organization_id,triggerId:null})},G0=new yp(V,({automation:J0,trigger:K0,contextMessages:A0,idempotencyKey:T0})=>W40({automationId:J0.id,organizationId:J0.organization_id,triggerId:K0.id,contextMessages:A0},{idempotencyKey:T0})),N0=[jK(),kg(),uN()];for(let J0 of N0)Zv0(J0).then(()=>{}).catch((K0)=>console.error("[monitoring] Retention cleanup failed:",K0));let o=()=>b8.api.deleteAllExpiredApiKeys().catch((J0)=>console.error("[auth] Expired API key cleanup failed:",J0));o(),setInterval(o,86400000).unref(),E.use("*",async(J0,K0)=>{if(Pv0(J0.req.path))return K0();let A0={measure:async(H1,l$)=>{ZK(J0,H1);try{return await l$()}finally{C3(J0,H1)}}},T0=await sQ.create(J0.req.raw,{timings:A0});T0.automationRunner=v0,J0.set("studioContext",T0);try{await K0()}finally{let H1=T0.pendingRevalidations;if(H1.length>0)Promise.race([Promise.allSettled(H1),F$(30000)]).catch((n$)=>console.error("[studio] revalidation cleanup error:",n$))}}),E.use("/api/:org/decopilot/*",vp),E.use("/api/:org/v1/*",vp),E.use("/api/:org/files/*",vp),E.use("*",async(J0,K0)=>{if(KW8(J0.req.path))return K0();let A0=J0.get("studioContext");if(!A0?.organization?.id||!A0?.auth?.user?.id)return K0();if(!(await A0.storage.orgSsoConfig.getByOrgId(A0.organization.id))?.enforced)return K0();if(!await A0.storage.orgSsoSessions.isValid(A0.auth.user.id,A0.organization.id))return J0.json({error:"SSO authentication required for this organization"},403);return K0()});let e=new Z1;e.use("*",QF({mountPath:"/api/org-sso"})),e.route("/",kC0()),E.route("/api/org-sso",e),E.get("/api/tools/management",(J0)=>{return J0.json({tools:Hs,grouped:F2()})}),E.use("/mcp/*",async(J0,K0)=>{ZK(J0,"mcp");try{return await K0()}finally{C3(J0,"mcp")}});let Q0=async(J0,K0)=>{let A0=J0.var.studioContext;if(!A0.auth.user?.id&&!A0.auth.apiKey?.id){let T0=new URL(J0.req.url),H1=J0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),l$=H1?`${H1}://${T0.host}`:T0.origin;return J0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${l$}${T0.pathname}/.well-known/oauth-protected-resource"`}})}return await K0()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),vW()){let{mountDevRoutes:J0}=(YW8(),Hv0(QW8));J0(E,Q0)}let $0=new Z1;$0.use("*",QF({mountPath:"/mcp"})),$0.route("/",VI0()),E.route("/mcp",$0);let Y0=new Z1;Y0.use("*",QF({mountPath:"/mcp/self"})),Y0.route("/",E_0()),E.route("/mcp/self",Y0);let h0=new Z1;h0.use("*",QF({mountPath:"/mcp"})),h0.route("/",CI0()),E.route("/mcp",h0),E.use("/api/:org/models/*",async(J0,K0)=>{ZK(J0,"llm_models");try{return await K0()}finally{C3(J0,"llm_models")}});let V0=FZ8({cancelBroadcast:H,streamBuffer:F,runRegistry:L});E.route("/api",V0),E.route("/api",sG8);let G1=new Z1;G1.use("*",QF({mountPath:"/api"})),G1.route("/",T_0()),E.route("/api",G1),E.route("/api",jG8);let c0=new Z1;c0.use("*",QF({mountPath:"/api"})),c0.route("/",R_0({tokenStorage:g,automationEventDispatcher:G0})),E.route("/api",c0);let O0=new Js(Z.db),E0=new Z1;E0.use("*",QF({mountPath:"/api"})),E0.route("/",xC0()),E.route("/api",E0),E.route("/api/deco-sites",qZ8()),E.route("/api/deco-apps",NG8());let n0=new Z1;n0.use("*",QF({mountPath:"/api/deco-sites"})),n0.route("/",yC0()),E.route("/api/deco-sites",n0),E.route(MC0,i98()),E.route(YX8,GX8()),E.route("/api/_editor-resolve",zG8()),E.route(H98,F98()),E.route(zC0,q98());let N1=j0(),o0=N1.elevenlabsApiKey?new m_0({apiKey:N1.elevenlabsApiKey,model:N1.elevenlabsVoiceModel,conversationModel:N1.elevenlabsConversationModel,voiceId:N1.elevenlabsVoiceId}):null,_0={openai:N1.openaiLiveApiKey?new FO1({apiKey:N1.openaiLiveApiKey,voice:N1.openaiLiveVoice}):null,elevenlabs:o0?new HO1(o0,()=>U?.getConnection()??null):null},d0=new LO1({adapter:o0,conversationAdapters:_0,defaults:N1,secret:N1.studioJwtSecret??N1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),i0=dJ8({voiceSessions:d0,kvStorage:O0,runRegistry:L,streamBuffer:F,sseHub:x6,cancelBroadcast:H,tokenStorage:g,automationEventDispatcher:G0,mountDevAssets:vW(),mcpAuth:Q0,oauthProxyHandler:GW8,watchHandler:NW8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((J0)=>{return J0.json({error:"Not Found",path:J0.req.path},404)}),E.onError(NZ8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([x6.stop(),Ez?Promise.resolve(Ez()).finally(()=>{Ez=null}):Promise.resolve()]),U)await U.drain().catch((J0)=>console.error("[shutdown] NATS drain error:",J0));console.log("[shutdown] Flushing telemetry..."),await BJ().catch((J0)=>console.error("[shutdown] Telemetry flush error:",J0)),console.log("[shutdown] Closing database..."),await $Q$(Z).catch((J0)=>console.error("[shutdown] Database close error:",J0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await VL.registerQueue(m3,{partitionQueue:!0,concurrency:uG1,minPollingIntervalMs:lG1}),await VL.registerQueue(c3,{partitionQueue:!0,concurrency:vJ1,priorityEnabled:!0}),await VL.registerQueue(gN,{workerConcurrency:j0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await VL.registerQueue(hN,{workerConcurrency:j0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await VL.registerQueue(xL,{partitionQueue:!0,concurrency:dg$}),await VL.registerQueue(Rz,Uf$),await aB1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((J0)=>VL.deleteQueue(J0))),await cG1(Z.pool),OJ$().catch((J0)=>{console.error("[studio-pack-backfill] failed:",J0)}),on1().catch((J0)=>{console.error("[org-fs] public-sets boot sync kick failed:",J0)})}})}var WW8,XW8=5000,Ez=null,GW8=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 sQ.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 g=await $.req.json().catch(()=>({}));return $.json({...typeof g==="object"&&g!==null?g:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await Ip(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 k60(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),L;if(Y==="authorize")L=B.authorization_endpoint;else if(Y==="token")L=B.token_endpoint;else if(Y==="register")L=B.registration_endpoint;if(!L)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let O=K68(L);if(O)return O;let w=new URL(L),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let g=w.searchParams.get("redirect_uri");if(g){let y=j0().baseUrl??j.origin;try{if(!UW8(new URL(g),y))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",g)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(M58(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 v0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.slice(U0+1));A=v0||null,q=G0||null}}catch{}let g=await $.req.formData();if(g.has("resource"))g.set("resource",U);let y=g.get("client_id"),h=g.get("client_secret");if(typeof y==="string"&&y)A=y;if(typeof h==="string"&&h)q=h;let i=new URLSearchParams;for(let[p,U0]of g.entries())i.append(p,U0.toString());P=i.toString()}else if(Y==="register"&&z?.toLowerCase().includes("application/json")){let g=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),y=await $.req.text(),h={};try{h=y?JSON.parse(y):{}}catch{P=y}let i=typeof h==="object"&&h!==null&&!Array.isArray(h);if(P===void 0&&!i)P=y;if(P===void 0){let p=h,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...g?.slug?{organization_slug:g.slug}:{},...g?.name?{organization_name:g.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[g,y]of f.headers.entries())if(!V.includes(g.toLowerCase()))_.set(g,y);if(Y==="token"&&f.ok){let g=await f.text();try{let y=JSON.parse(g);if(typeof y.access_token==="string"&&y.access_token){let h=typeof y.expires_in==="number"?new Date(Date.now()+y.expires_in*1000):null,i=null;try{i=await Vp(G.connection_url)??L}catch{i=L}let p={connectionId:Z,accessToken:y.access_token,refreshToken:typeof y.refresh_token==="string"?y.refresh_token:null,scope:typeof y.scope==="string"?y.scope:null,expiresAt:h,clientId:A,clientSecret:q,tokenEndpoint:i};await new w9(X.db,X.vault).upsert(p)}}catch(y){console.error("[oauth-proxy] failed to persist downstream token:",y)}return new Response(g,{status:f.status,statusText:f.statusText,headers:_})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:_})},NW8=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&&(!YN(Y)||!await XN(Z)))return $.json({error:"forbidden"},403);let W=G?gq0:Y;if(G)pD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return RL($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!x6.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(()=>{x6.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),x6.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),x6.remove(W,K),N()})})})},T05,M05,I05=()=>q05(b8),V05=()=>R05(b8);var DW8=D(()=>{o$();s1();rn1();W58();U58();E58();L40();SY1();q58();O80();k9();Bm();n8();J8();OC0();C58();tG1();U3();vU();EB1();dG();S6();$6();MB1();G98();U98();M98();_B1();p98();lB1();oB1();rB1();AH();aS0();sB1();BZ8();jC0();iJ8();rJ8();sJ8();ZG8();UG8();ZD1();BG8();kI0();H40();EG8();_I0();_L1();PG8();SL1();RG8();vG8();fG8();yG8();hG8();lG8();mG8();tG8();IO1();GD1();aG8();CL1();ML1();t50();L38();OO1();mX();LH0();OH0();rY1();I00();k00();eG1();O38();j38();pB1();q38();MM0();M38();uo();Ks();iD();A9();hN1();C38();x38();c30();gO1();d3();eB1();dD();MJ1();c30();iM0();jt0();Et0();y38();Hw();l38();Qn();EB1();rd();Li();yM0();WW8=C(MK(),1);T05=new P05,M05=new Set([m3,c3,gN,hN,xL,Rz])});var jW8={};Q6(jW8,{resolveClientDir:()=>f05,resolveAssetPathWithTraversalCheck:()=>wW8,isPathWithinDirectory:()=>OW8,createAssetHandler:()=>y05});import{resolve as v50,dirname as S05,join as C05,extname as _05,basename as v05,sep as LW8}from"path";function b05($,Z){if($===Z||v05($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${LW8}assets${LW8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function OW8($,Z){let Q=v50(Z),Y=v50($);return Y===Q||Y.startsWith(Q+"/")}function wW8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=v50(Z,Q);if(!OW8(Y,Z))return null;return Y}function f05($,Z="../client"){let Q=new URL($),Y=S05(Q.pathname);return v50(Y,Z)}function y05($={}){let{env:Z="production",clientDir:Q=x05,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=wW8({requestPath:W,clientDir:Q});if(!K)return null;let H=C05(K,"index.html"),F=v50(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(_05(K))?[H,F]:[];for(let L of[K,...B])try{let O=Bun.file(L);if(await O.exists())return new Response(O,{headers:b05(L,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var x05="./dist/client";var EW8=()=>{};var zW8={};Q6(zW8,{tryUpgradePreviewWs:()=>d05,tryHandlePreviewHttp:()=>m05,previewWebSocketHandler:()=>i05,parsePreviewBaseDomain:()=>c05,isPreviewWsData:()=>Qv0,extractHandleFromHost:()=>nO1});function u05($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function l05(){return new Response(h05,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function c05($){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 nO1($,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 m05($,Z){let Q=nO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return x50(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Jd)&&u05($))return l05();return X.headers.delete(Jd),X}function x50($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Qv0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function d05($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=nO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return x50(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return x50(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return x50(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 x50(426,"upgrade failed");return}function b50($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var g05=256,h05='<!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>',i05;var PW8=D(()=>{$$0();i05={open($){let Z=$.data;if(!Qv0(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)}`),b50($,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)=>{b50($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{b50($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!Qv0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=g05){b50($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!Qv0(Z))return;b50($,Z,1000,"")}}});var qW8={};Q6(qW8,{printBanner:()=>n05,bannerLines:()=>RW8,BANNER_LINES:()=>AW8,BANNER_GRADIENT:()=>TW8});function p05($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function RW8($){let Z=AW8.map((Q,Y)=>{let[X,J,G]=p05(TW8[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 n05($){console.log("");for(let Z of RW8($))console.log(Z);console.log("")}var AW8,TW8;var MW8=D(()=>{AW8=[" \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 "],TW8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});o$();var Gw1="13";function Ww1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Gw1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}o$();import dW8 from"pg";var Kw1=8314027461559302n,iW8=600000,pW8=500;async function Hw1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=iW8}=$,X=$.log??((K)=>console.log(K)),J=new dW8.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",[Kw1.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 F$(pW8)}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)",[Kw1.toString()])}catch{}await J.end().catch(()=>{})}}s1();Bv0();S6();function dK8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Sv0($,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 pw1(){let $=dK8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Sv0($,"--cpu-prof-dir")??process.cwd(),name:Sv0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Sv0($,"--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.'}))}vv0();var s50;function Zj1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Iz();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(()=>{}),s50=setInterval(()=>void Z().catch(()=>{}),$),s50.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(s50)clearInterval(s50)}}import*as nK8 from"bun:jsc";var{startSamplingProfiler:tK8,samplingProfilerStackTraces:oK8}=nK8;function Qj1(){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{tK8()}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=oK8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((L)=>L.sourceURL&&!/Unknown Executable/.test(L.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 Yj1(){pw1();let $=[Zj1(),$j1(),Qj1()];return()=>{for(let Z of $)Z()}}import{existsSync as Z15}from"fs";var AG=j0();mw1();var{DBOS:f50,DBOSClient:t05}=await import("@dbos-inc/dbos-sdk");function eO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var o05=[m3,c3,gN,hN,xL,Rz],r05=AG.dispatchRole==="worker"?o05:AG.dispatchRole==="api"?[]:void 0;f50.setConfig(Ww1({systemDatabaseUrl:eO1(AG.databaseUrl,AG.databasePgSsl),poolSize:AG.dbosPoolSize,executorID:AG.podName,listenQueues:r05}));var{createApp:s05}=await Promise.resolve().then(() => (DW8(),BW8)),{isServerPath:a05}=await Promise.resolve().then(() => (t50(),Mw1)),{createAssetHandler:e05,resolveClientDir:CW8}=await Promise.resolve().then(() => (EW8(),jW8)),$15=AG.port,IW8=CW8(import.meta.url,"../client"),_W8=Z15(IW8)?IW8:CW8(import.meta.url,"../dist/client"),Q15=e05({clientDir:_W8,isServerPath:a05}),Y15={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function X15($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Y15))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:J15,tryHandlePreviewHttp:G15,tryUpgradePreviewWs:W15,previewWebSocketHandler:tO1,isPreviewWsData:oO1}=await Promise.resolve().then(() => (PW8(),zW8)),{getOrInitSharedRunner:vW8}=await Promise.resolve().then(() => (JG(),YM$)),bW8=J15(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),VW8={baseDomain:bW8??"",getRunner:vW8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())vW8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var Yv0=await s05({clientDir:_W8}),rO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),kW8=process.env.DBOS_CONDUCTOR_URL?.trim();await Hw1({databaseUrl:eO1(AG.databaseUrl,AG.databasePgSsl)},()=>f50.launch({...rO1?{conductorKey:rO1}:{},...rO1&&kW8?{conductorURL:kW8}:{}}));console.log(`[dbos] application version: ${f50.applicationVersion}`);var sO1=5,aO1=0;await w8(async()=>{aO1++;try{return await Yv0.initDbos()}catch($){let Z=aO1>=sO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${aO1}/${sO1} failed, ${Z}`,$),$}},{maxAttempts:sO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!AG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (MW8(),qW8));console.log("");for(let Z of $())console.log(Z)}var K15=Bun.serve({idleTimeout:0,port:$15,hostname:"0.0.0.0",fetch:async($,Z)=>{if(bW8){let Y=await W15($,Z,VW8);if(Y===void 0)return;if(Y)return Y;let X=await G15($,VW8);if(X)return X}let Q=await Q15($);if(Q)return X15(Q);return Yv0.fetch($,{server:Z})},websocket:{open($){if(oO1($.data))tO1.open($)},message($,Z){if(oO1($.data))tO1.message($,Z)},close($){if(oO1($.data))tO1.close($)}},development:!1}),H15=Yj1();if(AG.localMode)Promise.resolve().then(() => (Hy(),zM0)).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(() => (Hy(),zM0));Z()}catch{}});var SW8=!1;async function F15($){let Z;try{Z=await t05.create({systemDatabaseUrl:eO1(AG.databaseUrl,AG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:c3,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:c3}),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 Xv0($){if(SW8)return;SW8=!0,console.log(`
|
|
3654
3654
|
[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{H15(),Yv0.markShuttingDown();let J=Uw1(AG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await F$(J),await K15.stop(!0);let G=f50.executorID;await f50.shutdown(),await F15(G),await Yv0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>Xv0("SIGTERM"));process.on("SIGINT",()=>Xv0("SIGINT"));process.on("SIGHUP",()=>Xv0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),Xv0("uncaughtException")});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as s,M as u}from"./index-C6yXfhc9.js";import{C as f}from"./index-C7rfJP0V.js";import{a as x}from"./thread-route-CcA9rsjD.js";import{u as g}from"./use-task-metadata-BDjXNlZ6.js";import{AppViewContent as h}from"./project-app-view-BriIYKSD.js";import"./use-mobile-BptJ2ig7.js";import"./thread-button-6bHksN1n.js";import"./agent-icon-D8yc3w6R.js";import"./AlertCircle-DQV9Mc17.js";import"./Tool01-rcwjZJWt.js";import"./ArrowUp-CmgvSWvg.js";import"./ArrowLeft-BIML-f0i.js";import"./LinkBroken01-W0guIiTp.js";import"./ShoppingBag01-CQ0azIkw.js";import"./ZoomOut-B5ON1ruo.js";import"./Building02-DGed7X87.js";import"./CheckCircle-CGt4I_97.js";import"./Check-DmssFQIB.js";import"./ChevronUp-CVGAY_3s.js";import"./UserSquare-weua4atg.js";import"./Copy01-Bv3jpVlA.js";import"./CreditCard01-CsLyF3kp.js";import"./DotsVertical-CiM8md1y.js";import"./Image01-DxzRuuii.js";import"./Globe04-5mRZfz3d.js";import"./XClose-C0S6AMzF.js";import"./Key01-4ZMPLPba.js";import"./Link01-M6drdXoX.js";import"./LinkExternal01-ClcRo1x1.js";import"./Monitor01-Dk1HgiBj.js";import"./Sun-k0O1HcgT.js";import"./Plus-Bq5ZeuHM.js";import"./SearchMd-tAwrJP3u.js";import"./Trash01-yUMH9377.js";import"./Upload01-BPuydd_6.js";import"./User01-9b4OuT4C.js";import"./Users01-CldLEl2f.js";import"./X-CSlg1sd1.js";import"./use-chat-layout-state-CWQdZ4Jo.js";import"./use-file-configs-DfsKofS5.js";import"./use-organization-settings-CAFBLWVk.js";import"./schema-Dj8UASRG.js";import"./task-board-zQvtvYuz.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-BM9PNlaW.js";import"./use-project-scope-CwEflcY9.js";import"./repository-binding-DgXYHOdO.js";import"./use-mcp-client-BWdbS58t.js";import"./auth-X1Z9onOC.js";import"./thread-intent-u_umdxEV.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DY1Ixr3e.js";import"./tooltip-C1UnC7LD.js";import"./index-BfpLxh6F.js";import"./toolbar-icon-button-BqvnfOpl.js";import"./shell-layout-C91CLPqD.js";import"./avatar-C9IBeU_l.js";import"./download-app-dialog-aNLwMPvt.js";import"./dialog-l0pufTcv.js";import"./use-clock-tick-DFlnhXpf.js";import"./command-DePL1KHf.js";import"./index-BKCduH1k.js";import"./integration-icon-BUQcDswF.js";import"./project-icon-CrF2bM0B.js";import"./new-project-dialog-Bk9ESA8g.js";import"./input-Dgrf_P4M.js";import"./label-Ccn3ZfwY.js";import"./repository-import-picker-BTlCavvI.js";import"./use-navigate-to-agent-CWXwxagr.js";import"./repository-picker-DMsQBK4M.js";import"./useInfiniteQuery-BIeREFXd.js";import"./infiniteQueryObserver-Bs8aLdDs.js";import"./collection-search-B9IMZJsF.js";import"./use-debounced-value-BSX5d21S.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DG_ssul7.js";import"./autosend-DkkevtpV.js";import"./use-org-sso-76vbZ6oa.js";import"./resizable-B6j59zX8.js";import"./icon-button-DznlvwEZ.js";import"./gateway-client-F47a4lAO.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-BPGCmIU7.js";import"./sandbox-lifecycle-context-B6h2V6qW.js";import"./use-session-runtime-D2A369zj.js";import"./chat-context-BBq6hHFG.js";import"./use-decopilot-events-3jnJN_zB.js";import"./use-ai-providers-C6FUgl61.js";import"./use-chat-navigation-BYGGlCTj.js";import"./location-zK0I9Ia6.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-NdZTHRTE.js";import"./types-BizZdPTP.js";import"./task-route-BRHRnN0K.js";import"./core.esm-mpmypmP_.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-bsu4z5QT.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-DWldHPd_.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-B13pACFJ.js";import"./authenticate-and-persist-oauth-BcuXsDL9.js";import"./mcp-oauth-DmWr-lw_.js";import"./track-CeJEG8Ne.js";import"./extract-connection-data-Ou6b9boP.js";import"./connection-DCVuC0Zx.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 _o(){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{_o as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as e,aS as b,u as g}from"./index-C6yXfhc9.js";import{C as j}from"./index-C7rfJP0V.js";import{F as v,H as S}from"./file-share-button-BVh37pd9.js";import{u as k,b as y,e as _}from"./use-org-fs-B22En0tH.js";import{S as w}from"./settings-tab-BHXpuYUk.js";import{b as M}from"./thread-route-CcA9rsjD.js";import"./use-mobile-BptJ2ig7.js";import"./thread-button-6bHksN1n.js";import"./agent-icon-D8yc3w6R.js";import"./AlertCircle-DQV9Mc17.js";import"./Tool01-rcwjZJWt.js";import"./ArrowUp-CmgvSWvg.js";import"./ArrowLeft-BIML-f0i.js";import"./LinkBroken01-W0guIiTp.js";import"./ShoppingBag01-CQ0azIkw.js";import"./ZoomOut-B5ON1ruo.js";import"./Building02-DGed7X87.js";import"./CheckCircle-CGt4I_97.js";import"./Check-DmssFQIB.js";import"./ChevronUp-CVGAY_3s.js";import"./UserSquare-weua4atg.js";import"./Copy01-Bv3jpVlA.js";import"./CreditCard01-CsLyF3kp.js";import"./DotsVertical-CiM8md1y.js";import"./Image01-DxzRuuii.js";import"./Globe04-5mRZfz3d.js";import"./XClose-C0S6AMzF.js";import"./Key01-4ZMPLPba.js";import"./Link01-M6drdXoX.js";import"./LinkExternal01-ClcRo1x1.js";import"./Monitor01-Dk1HgiBj.js";import"./Sun-k0O1HcgT.js";import"./Plus-Bq5ZeuHM.js";import"./SearchMd-tAwrJP3u.js";import"./Trash01-yUMH9377.js";import"./Upload01-BPuydd_6.js";import"./User01-9b4OuT4C.js";import"./Users01-CldLEl2f.js";import"./X-CSlg1sd1.js";import"./use-chat-layout-state-CWQdZ4Jo.js";import"./use-file-configs-DfsKofS5.js";import"./use-organization-settings-CAFBLWVk.js";import"./schema-Dj8UASRG.js";import"./task-board-zQvtvYuz.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-BM9PNlaW.js";import"./use-project-scope-CwEflcY9.js";import"./repository-binding-DgXYHOdO.js";import"./use-mcp-client-BWdbS58t.js";import"./auth-X1Z9onOC.js";import"./thread-intent-u_umdxEV.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DY1Ixr3e.js";import"./tooltip-C1UnC7LD.js";import"./index-BfpLxh6F.js";import"./toolbar-icon-button-BqvnfOpl.js";import"./shell-layout-C91CLPqD.js";import"./avatar-C9IBeU_l.js";import"./download-app-dialog-aNLwMPvt.js";import"./dialog-l0pufTcv.js";import"./use-clock-tick-DFlnhXpf.js";import"./command-DePL1KHf.js";import"./index-BKCduH1k.js";import"./integration-icon-BUQcDswF.js";import"./project-icon-CrF2bM0B.js";import"./new-project-dialog-Bk9ESA8g.js";import"./input-Dgrf_P4M.js";import"./label-Ccn3ZfwY.js";import"./repository-import-picker-BTlCavvI.js";import"./use-navigate-to-agent-CWXwxagr.js";import"./repository-picker-DMsQBK4M.js";import"./useInfiniteQuery-BIeREFXd.js";import"./infiniteQueryObserver-Bs8aLdDs.js";import"./collection-search-B9IMZJsF.js";import"./use-debounced-value-BSX5d21S.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DG_ssul7.js";import"./autosend-DkkevtpV.js";import"./use-org-sso-76vbZ6oa.js";import"./resizable-B6j59zX8.js";import"./icon-button-DznlvwEZ.js";import"./popover-C8xX_Eza.js";import"./extract-connection-data-Ou6b9boP.js";import"./metadata-D72DunRR.js";import"./connection-DCVuC0Zx.js";import"./chat-context-BBq6hHFG.js";import"./use-decopilot-events-3jnJN_zB.js";import"./use-ai-providers-C6FUgl61.js";import"./use-chat-navigation-BYGGlCTj.js";import"./location-zK0I9Ia6.js";import"./build-improve-prompt-doc-B9VDt7kz.js";import"./empty-state-5G-3M3tz.js";import"./use-date-fns-locale-BkK3C06N.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BF23bC-4.js";import"./mcp-oauth-DmWr-lw_.js";import"./alert-dialog-CKYS0LsF.js";import"./textarea-BIXsIYxt.js";import"./use-debounced-autosave-CBc2-HbA.js";import"./add-connection-dialog-DmB5Tp1t.js";import"./connection-card-Btw9Ejzr.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-O3qcVpDl.js";import"./form-DWldHPd_.js";import"./select-Bo2QWO2w.js";import"./connection-form-helpers-BQlKyorY.js";import"./authenticate-and-persist-oauth-BcuXsDL9.js";import"./collection-tabs-BzgezmYW.js";import"./badge-DnZUOPBJ.js";import"./use-infinite-scroll-B5kOmcNg.js";import"./useSuspenseInfiniteQuery-BWkrsDSs.js";import"./file-type-icon-hpzbwXLS.js";import"./checkbox-BVp3RnTH.js";import"./search-input-DZS7SKx0.js";import"./use-mcp-auth-status-Cdslu5lD.js";import"./types-BizZdPTP.js";import"./use-mcp-tools-BPGCmIU7.js";import"./use-mcp-prompts-BkoAHxEV.js";import"./utils-CVEq3hMx.js";import"./switch-BcWYdoK-.js";import"./scroll-area-BOatS-pA.js";import"./optimistic-project-sidebar-views-C_sD1ykF.js";import"./virtual-mcp-BRj1Z0ns.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-BLO3RbxE.js";import"./use-secrets-C-0e_lfK.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 Yo(){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{Yo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as s,j as e}from"./index-C6yXfhc9.js";import{C as a}from"./index-C7rfJP0V.js";import{L as n}from"./library-tab-DBOv_vFI.js";import{u as c}from"./use-ensure-project-folder-C07lXmh3.js";import{u}from"./use-project-scope-CwEflcY9.js";import{p as l}from"./location-zK0I9Ia6.js";import"./use-mobile-BptJ2ig7.js";import"./thread-button-6bHksN1n.js";import"./agent-icon-D8yc3w6R.js";import"./AlertCircle-DQV9Mc17.js";import"./Tool01-rcwjZJWt.js";import"./ArrowUp-CmgvSWvg.js";import"./ArrowLeft-BIML-f0i.js";import"./LinkBroken01-W0guIiTp.js";import"./ShoppingBag01-CQ0azIkw.js";import"./ZoomOut-B5ON1ruo.js";import"./Building02-DGed7X87.js";import"./CheckCircle-CGt4I_97.js";import"./Check-DmssFQIB.js";import"./ChevronUp-CVGAY_3s.js";import"./UserSquare-weua4atg.js";import"./Copy01-Bv3jpVlA.js";import"./CreditCard01-CsLyF3kp.js";import"./DotsVertical-CiM8md1y.js";import"./Image01-DxzRuuii.js";import"./Globe04-5mRZfz3d.js";import"./XClose-C0S6AMzF.js";import"./Key01-4ZMPLPba.js";import"./Link01-M6drdXoX.js";import"./LinkExternal01-ClcRo1x1.js";import"./Monitor01-Dk1HgiBj.js";import"./Sun-k0O1HcgT.js";import"./Plus-Bq5ZeuHM.js";import"./SearchMd-tAwrJP3u.js";import"./Trash01-yUMH9377.js";import"./Upload01-BPuydd_6.js";import"./User01-9b4OuT4C.js";import"./Users01-CldLEl2f.js";import"./X-CSlg1sd1.js";import"./use-chat-layout-state-CWQdZ4Jo.js";import"./use-file-configs-DfsKofS5.js";import"./use-organization-settings-CAFBLWVk.js";import"./schema-Dj8UASRG.js";import"./task-board-zQvtvYuz.js";import"./site-slug-DebpOoQq.js";import"./thread-route-CcA9rsjD.js";import"./use-panel-navigate-BM9PNlaW.js";import"./thread-intent-u_umdxEV.js";import"./use-mcp-client-BWdbS58t.js";import"./auth-X1Z9onOC.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-DY1Ixr3e.js";import"./tooltip-C1UnC7LD.js";import"./index-BfpLxh6F.js";import"./toolbar-icon-button-BqvnfOpl.js";import"./shell-layout-C91CLPqD.js";import"./avatar-C9IBeU_l.js";import"./download-app-dialog-aNLwMPvt.js";import"./dialog-l0pufTcv.js";import"./use-clock-tick-DFlnhXpf.js";import"./command-DePL1KHf.js";import"./index-BKCduH1k.js";import"./integration-icon-BUQcDswF.js";import"./project-icon-CrF2bM0B.js";import"./new-project-dialog-Bk9ESA8g.js";import"./input-Dgrf_P4M.js";import"./label-Ccn3ZfwY.js";import"./repository-import-picker-BTlCavvI.js";import"./use-navigate-to-agent-CWXwxagr.js";import"./repository-binding-DgXYHOdO.js";import"./repository-picker-DMsQBK4M.js";import"./useInfiniteQuery-BIeREFXd.js";import"./infiniteQueryObserver-Bs8aLdDs.js";import"./collection-search-B9IMZJsF.js";import"./use-debounced-value-BSX5d21S.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DG_ssul7.js";import"./autosend-DkkevtpV.js";import"./use-org-sso-76vbZ6oa.js";import"./resizable-B6j59zX8.js";import"./icon-button-DznlvwEZ.js";import"./search-toggle-B4xKT69H.js";import"./alert-dialog-CKYS0LsF.js";import"./use-chat-navigation-BYGGlCTj.js";import"./use-org-fs-B22En0tH.js";import"./use-org-repo-syncs-BwY7caQP.js";import"./textarea-BIXsIYxt.js";import"./markdown-BX8FMyIV.js";import"./org-file-open-context-DcBRlv30.js";import"./file-share-button-BVh37pd9.js";import"./popover-C8xX_Eza.js";import"./preview-dialog-B9j7S7qG.js";import"./preview-content-CPvumstz.js";import"./file-preview-DMt8pvXn.js";import"./utils-BNDdsgmu.js";import"./editor-BIWtbhSE.js";import"./file-type-icon-hpzbwXLS.js";import"./folder-icon-BDmQmtS4.js";import"./skill-md-ChfVs4uF.js";import"./empty-state-CnyX2qZd.js";import"./view-mode-toggle-DWieeNQo.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-3Ha7m5P3.js";import"./use-members-DhmaxjpN.js";import"./use-org-auth-client-nzWS7Iq-.js";function lo(){const t=s.c(6),{project:o}=u();c(o);const m=o?.id??"pending";let r;t[0]!==o?(r=o?l(o):void 0,t[0]=o,t[1]=r):r=t[1];const p=o?.title??void 0;let i;return t[2]!==m||t[3]!==r||t[4]!==p?(i=e.jsx(a.Content,{children:e.jsx(n,{root:r,rootLabel:p},m)}),t[2]=m,t[3]=r,t[4]=p,t[5]=i):i=t[5],i}export{lo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as a,j as e,u as n}from"./index-C6yXfhc9.js";import{C as c}from"./index-C7rfJP0V.js";import{L as l}from"./preview-panel-BaneJ62d.js";import{a as u}from"./use-panel-navigate-BM9PNlaW.js";import{S as f}from"./settings-tab-BHXpuYUk.js";import{b as h}from"./thread-route-CcA9rsjD.js";import"./use-mobile-BptJ2ig7.js";import"./thread-button-6bHksN1n.js";import"./agent-icon-D8yc3w6R.js";import"./AlertCircle-DQV9Mc17.js";import"./Tool01-rcwjZJWt.js";import"./ArrowUp-CmgvSWvg.js";import"./ArrowLeft-BIML-f0i.js";import"./LinkBroken01-W0guIiTp.js";import"./ShoppingBag01-CQ0azIkw.js";import"./ZoomOut-B5ON1ruo.js";import"./Building02-DGed7X87.js";import"./CheckCircle-CGt4I_97.js";import"./Check-DmssFQIB.js";import"./ChevronUp-CVGAY_3s.js";import"./UserSquare-weua4atg.js";import"./Copy01-Bv3jpVlA.js";import"./CreditCard01-CsLyF3kp.js";import"./DotsVertical-CiM8md1y.js";import"./Image01-DxzRuuii.js";import"./Globe04-5mRZfz3d.js";import"./XClose-C0S6AMzF.js";import"./Key01-4ZMPLPba.js";import"./Link01-M6drdXoX.js";import"./LinkExternal01-ClcRo1x1.js";import"./Monitor01-Dk1HgiBj.js";import"./Sun-k0O1HcgT.js";import"./Plus-Bq5ZeuHM.js";import"./SearchMd-tAwrJP3u.js";import"./Trash01-yUMH9377.js";import"./Upload01-BPuydd_6.js";import"./User01-9b4OuT4C.js";import"./Users01-CldLEl2f.js";import"./X-CSlg1sd1.js";import"./use-chat-layout-state-CWQdZ4Jo.js";import"./use-file-configs-DfsKofS5.js";import"./use-organization-settings-CAFBLWVk.js";import"./schema-Dj8UASRG.js";import"./task-board-zQvtvYuz.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-u_umdxEV.js";import"./use-mcp-client-BWdbS58t.js";import"./auth-X1Z9onOC.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-CwEflcY9.js";import"./repository-binding-DgXYHOdO.js";import"./sheet-DY1Ixr3e.js";import"./tooltip-C1UnC7LD.js";import"./index-BfpLxh6F.js";import"./toolbar-icon-button-BqvnfOpl.js";import"./shell-layout-C91CLPqD.js";import"./avatar-C9IBeU_l.js";import"./download-app-dialog-aNLwMPvt.js";import"./dialog-l0pufTcv.js";import"./use-clock-tick-DFlnhXpf.js";import"./command-DePL1KHf.js";import"./index-BKCduH1k.js";import"./integration-icon-BUQcDswF.js";import"./project-icon-CrF2bM0B.js";import"./new-project-dialog-Bk9ESA8g.js";import"./input-Dgrf_P4M.js";import"./label-Ccn3ZfwY.js";import"./repository-import-picker-BTlCavvI.js";import"./use-navigate-to-agent-CWXwxagr.js";import"./repository-picker-DMsQBK4M.js";import"./useInfiniteQuery-BIeREFXd.js";import"./infiniteQueryObserver-Bs8aLdDs.js";import"./collection-search-B9IMZJsF.js";import"./use-debounced-value-BSX5d21S.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DG_ssul7.js";import"./autosend-DkkevtpV.js";import"./use-org-sso-76vbZ6oa.js";import"./resizable-B6j59zX8.js";import"./icon-button-DznlvwEZ.js";import"./preview-content-CPvumstz.js";import"./file-share-button-BVh37pd9.js";import"./use-org-fs-B22En0tH.js";import"./popover-C8xX_Eza.js";import"./file-preview-DMt8pvXn.js";import"./utils-BNDdsgmu.js";import"./editor-BIWtbhSE.js";import"./file-type-icon-hpzbwXLS.js";import"./markdown-BX8FMyIV.js";import"./location-zK0I9Ia6.js";import"./org-file-open-context-DcBRlv30.js";import"./extract-connection-data-Ou6b9boP.js";import"./metadata-D72DunRR.js";import"./connection-DCVuC0Zx.js";import"./chat-context-BBq6hHFG.js";import"./use-decopilot-events-3jnJN_zB.js";import"./use-ai-providers-C6FUgl61.js";import"./use-chat-navigation-BYGGlCTj.js";import"./build-improve-prompt-doc-B9VDt7kz.js";import"./empty-state-5G-3M3tz.js";import"./use-date-fns-locale-BkK3C06N.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BF23bC-4.js";import"./mcp-oauth-DmWr-lw_.js";import"./alert-dialog-CKYS0LsF.js";import"./textarea-BIXsIYxt.js";import"./use-debounced-autosave-CBc2-HbA.js";import"./add-connection-dialog-DmB5Tp1t.js";import"./connection-card-Btw9Ejzr.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-O3qcVpDl.js";import"./form-DWldHPd_.js";import"./select-Bo2QWO2w.js";import"./connection-form-helpers-BQlKyorY.js";import"./authenticate-and-persist-oauth-BcuXsDL9.js";import"./collection-tabs-BzgezmYW.js";import"./badge-DnZUOPBJ.js";import"./use-infinite-scroll-B5kOmcNg.js";import"./useSuspenseInfiniteQuery-BWkrsDSs.js";import"./checkbox-BVp3RnTH.js";import"./search-input-DZS7SKx0.js";import"./use-mcp-auth-status-Cdslu5lD.js";import"./types-BizZdPTP.js";import"./use-mcp-tools-BPGCmIU7.js";import"./use-mcp-prompts-BkoAHxEV.js";import"./utils-CVEq3hMx.js";import"./switch-BcWYdoK-.js";import"./scroll-area-BOatS-pA.js";import"./optimistic-project-sidebar-views-C_sD1ykF.js";import"./virtual-mcp-BRj1Z0ns.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-BLO3RbxE.js";import"./use-secrets-C-0e_lfK.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=a.c(5),{path:m}=r,{closePanel:p}=u();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let s;return t[2]!==i||t[3]!==m?(s=e.jsx(l,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=s):s=t[4],s}function x(){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?e.jsx(b,{path:o},o):e.jsx(f,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Jr(){const r=a.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(c.Content,{children:e.jsx(x,{})}),r[0]=t):t=r[0],t}export{Jr as default};
|