decocms 4.454.1 → 4.455.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-3t4CitpU.js → AlertCircle-BOPAUEgU.js} +1 -1
- package/dist/client/assets/{AreaChart-B9ltWb3N.js → AreaChart-CJHdSsRl.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BbJmgkdx.js → ArrowLeft-DGlO1CKr.js} +1 -1
- package/dist/client/assets/{ArrowUp-DQk9lIXC.js → ArrowUp-Duh-8Vv0.js} +1 -1
- package/dist/client/assets/{Building02-FDWlk2dX.js → Building02-D_rXBsfQ.js} +1 -1
- package/dist/client/assets/{CartesianChart-BJJpA_Vw.js → CartesianChart-DIS9sPOp.js} +1 -1
- package/dist/client/assets/{Check-BhlN5Gfa.js → Check-CcPSzxsY.js} +1 -1
- package/dist/client/assets/{CheckCircle-DP_Yeb-b.js → CheckCircle-CxJ9MBI3.js} +1 -1
- package/dist/client/assets/{ChevronUp-BUjD5px7.js → ChevronUp-C9klasvw.js} +1 -1
- package/dist/client/assets/{Copy01-B7ecNUq1.js → Copy01-ByHdq7k3.js} +1 -1
- package/dist/client/assets/{CreditCard01-DylNWQDW.js → CreditCard01-D7Ll8vXp.js} +1 -1
- package/dist/client/assets/{DotsVertical-CMBMcjBX.js → DotsVertical-CXVrXTYw.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-DYl-NvRS.js → ErrorBarContext-D4SFBJLe.js} +1 -1
- package/dist/client/assets/{Image01-jyAhhinO.js → Image01-DAe5wd3u.js} +1 -1
- package/dist/client/assets/{Key01-DwEPbnXb.js → Key01-Dje7twgn.js} +1 -1
- package/dist/client/assets/{Line-98LUvvSk.js → Line-p8cNw9wz.js} +1 -1
- package/dist/client/assets/{Link01-D8H87QlU.js → Link01-BFa5_pnw.js} +1 -1
- package/dist/client/assets/{LinkBroken01-FGx4hlpz.js → LinkBroken01-BQ3rvf4O.js} +1 -1
- package/dist/client/assets/{LinkExternal01-Chk3wQjH.js → LinkExternal01-ChFFafWR.js} +1 -1
- package/dist/client/assets/{Monitor01-C4DfOzWo.js → Monitor01-tvCvi4o_.js} +1 -1
- package/dist/client/assets/{Palette-92eAR3c0.js → Palette-BFtTwWPg.js} +1 -1
- package/dist/client/assets/{Plus-CLQei2e6.js → Plus-Dk5G0eGJ.js} +1 -1
- package/dist/client/assets/{SearchMd-B4g7zoIg.js → SearchMd-DJptVqPP.js} +1 -1
- package/dist/client/assets/{Sector-D4jvfeB8.js → Sector-CoYmht1l.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-DJPwdB_I.js → ShoppingBag01-mUPmqGRd.js} +1 -1
- package/dist/client/assets/{Sun-D28dVpFO.js → Sun-Bl8Ky_if.js} +1 -1
- package/dist/client/assets/{Tool01-DyzplouF.js → Tool01-CGCC9pfF.js} +1 -1
- package/dist/client/assets/{Trash01-B2AvA9FK.js → Trash01-BA-bFjuS.js} +1 -1
- package/dist/client/assets/{Upload01-_iBVm55R.js → Upload01-C13aB89v.js} +1 -1
- package/dist/client/assets/{User01-DuKYzVz8.js → User01-B42bcRzQ.js} +1 -1
- package/dist/client/assets/{UserSquare-CI-KdVX2.js → UserSquare-B6-k4uk5.js} +1 -1
- package/dist/client/assets/{Users01-utuHNJ9R.js → Users01-BmXeKAri.js} +1 -1
- package/dist/client/assets/{X-BQXAAYgl.js → X-BdtW9stL.js} +1 -1
- package/dist/client/assets/{XAxis-OsjV83Ou.js → XAxis-G213xRid.js} +1 -1
- package/dist/client/assets/{XClose-KUaLXy6Q.js → XClose-Bsj_jKUE.js} +1 -1
- package/dist/client/assets/{ZoomOut-B0FMI__D.js → ZoomOut-BQf_lYpX.js} +1 -1
- package/dist/client/assets/{access-gate-DHNHQ9zE.js → access-gate-BtTwTt-9.js} +1 -1
- package/dist/client/assets/{add-connection-dialog--aaGSX_P.js → add-connection-dialog-CwnC8yt-.js} +1 -1
- package/dist/client/assets/{agent-analytics-HWaoA2oR.js → agent-analytics-CPj4bxgs.js} +1 -1
- package/dist/client/assets/agent-app-CjNO2lXq.js +1 -0
- package/dist/client/assets/{agent-assets-Cr-W811X.js → agent-assets-D5PkhLx3.js} +1 -1
- package/dist/client/assets/{agent-automation-l2cgkKU7.js → agent-automation-Cd6QYcZt.js} +1 -1
- package/dist/client/assets/{agent-automations-CHAZrKqa.js → agent-automations-WUChl97S.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-CWEmNdK2.js → agent-connect-sources-BTKe88uu.js} +1 -1
- package/dist/client/assets/agent-deck-BBsYONOP.js +1 -0
- package/dist/client/assets/{agent-e2e-NYmfDbZa.js → agent-e2e-D92Tz-G3.js} +1 -1
- package/dist/client/assets/{agent-experiments-CLCcfrbN.js → agent-experiments-B5NLiDa9.js} +1 -1
- package/dist/client/assets/{agent-file-BIEk1dmU.js → agent-file-BlaR5see.js} +1 -1
- package/dist/client/assets/{agent-hosting-CO_rhibd.js → agent-hosting-CoW01d6P.js} +1 -1
- package/dist/client/assets/{agent-icon-1OqzsUAE.js → agent-icon-QobcC4y1.js} +1 -1
- package/dist/client/assets/agent-library-DJDlIAqS.js +1 -0
- package/dist/client/assets/agent-library-file-CZjl7KSc.js +1 -0
- package/dist/client/assets/{agent-monitor-BmsHZAPv.js → agent-monitor-B-qOXS0c.js} +1 -1
- package/dist/client/assets/{agent-overview-Ct3DWuXE.js → agent-overview-CLWCQeaZ.js} +1 -1
- package/dist/client/assets/agent-settings-DhGEY9it.js +1 -0
- package/dist/client/assets/{agent-site-editor-CRZzqyQE.js → agent-site-editor-DFNItXi0.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-D1HLX1NJ.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-DSBHbBbR.js → agent-site-editor-content-DeSoO3Vu.js} +3 -3
- package/dist/client/assets/{agent-site-editor-preview-BxrT5UM7.js → agent-site-editor-preview-BQKa6vcQ.js} +3 -3
- package/dist/client/assets/agent-view-YbbJ0c-k.js +1 -0
- package/dist/client/assets/{agent-view-guard-mRjTZUSW.js → agent-view-guard-BggSlJ4I.js} +1 -1
- package/dist/client/assets/{agents-list-BK_MtQHd.js → agents-list-Ckh7S6i4.js} +1 -1
- package/dist/client/assets/{ai-providers-wWFphB_9.js → ai-providers-KNbVRi9R.js} +2 -2
- package/dist/client/assets/{alert-BDcbHG2K.js → alert-BZ6uRdL8.js} +1 -1
- package/dist/client/assets/{alert-dialog-BfxfbeRo.js → alert-dialog-13GPwGkk.js} +1 -1
- package/dist/client/assets/{analytics-sections-CCrJWAzF.js → analytics-sections-C4iGKBOV.js} +1 -1
- package/dist/client/assets/{api-keys-44_etvo0.js → api-keys-Btl9HmTY.js} +1 -1
- package/dist/client/assets/api-keys-C1C00ELj.js +1 -0
- package/dist/client/assets/app-editor-Cr-wsjho.js +1 -0
- package/dist/client/assets/{asset-utils-zoNZYT_Y.js → asset-utils-B4wnf4gp.js} +1 -1
- package/dist/client/assets/{auth-Be85fS22.js → auth-BMIwdKU8.js} +1 -1
- package/dist/client/assets/{auth-catchall-CTdxuzGz.js → auth-catchall-CsvXshlN.js} +1 -1
- package/dist/client/assets/{auth-entry-9WVbDTgn.js → auth-entry-BuNH69Nv.js} +1 -1
- package/dist/client/assets/{auth-split-layout-Bd3Wv1Ul.js → auth-split-layout-rkoJUdAV.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-DZ9TfDha.js → authenticate-and-persist-oauth-DWogyy0B.js} +1 -1
- package/dist/client/assets/{automation-list-row-BbKXgF-R.js → automation-list-row-db5LJ5pV.js} +1 -1
- package/dist/client/assets/{automation-runs-YorECl9g.js → automation-runs-_74LLZTB.js} +1 -1
- package/dist/client/assets/automations-qyXzvoeZ.js +1 -0
- package/dist/client/assets/{autosend-CRAaDm47.js → autosend-B5Obavo-.js} +1 -1
- package/dist/client/assets/{avatar-DPiZM9JI.js → avatar-Bpp_lL_f.js} +1 -1
- package/dist/client/assets/{badge-C70X12A9.js → badge-DTNkOzY0.js} +1 -1
- package/dist/client/assets/{block-document-Bb13K9Xx.js → block-document-BLOu51_T.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-tiBiDTnV.js → blocks-preview-workspace-context-BmjkHogK.js} +1 -1
- package/dist/client/assets/{blog-schema-CrmLbu-L.js → blog-schema-B4_qQgjF.js} +1 -1
- package/dist/client/assets/{buckets-BakoSY5F.js → buckets-CCNSYAgt.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-BdY8sMUa.js → build-improve-prompt-doc-oJt1CVIT.js} +1 -1
- package/dist/client/assets/{calendar-Xr0_X-dJ.js → calendar-BRUBvVES.js} +1 -1
- package/dist/client/assets/{capability-load-error-DEOoZYRD.js → capability-load-error-th8zEGOp.js} +1 -1
- package/dist/client/assets/{category-editor-CUD3lDBR.js → category-editor-CRqB5ots.js} +1 -1
- package/dist/client/assets/{chart-CdkOOcwe.js → chart-DBFqaeAD.js} +1 -1
- package/dist/client/assets/{chat-context-SQR_HnrV.js → chat-context-BHWxNMFT.js} +6 -6
- package/dist/client/assets/{chat-draft-ClSxrs12.js → chat-draft-SnGEiSWm.js} +1 -1
- package/dist/client/assets/{checkbox-dRd9g2H5.js → checkbox-DuccoC4e.js} +1 -1
- package/dist/client/assets/{choose-editor-YVWzNcML.js → choose-editor-Blu_E7S8.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-CiHmryra.js → claim-phase-copy-J9IiJiw_.js} +1 -1
- package/dist/client/assets/{cli-auth-success-zKCh9sGG.js → cli-auth-success-g5vIj6jD.js} +1 -1
- package/dist/client/assets/{client-icons-wzblqipX.js → client-icons-ByIvBqps.js} +1 -1
- package/dist/client/assets/{collapsible-CgYSDpXy.js → collapsible-qdaAxaaw.js} +1 -1
- package/dist/client/assets/{collection-detail-DImjCLH0.js → collection-detail-CRpVPceB.js} +1 -1
- package/dist/client/assets/{collection-display-button-ySPfNWKF.js → collection-display-button-CAE4H1Z5.js} +1 -1
- package/dist/client/assets/{collection-search-Daq9kKuN.js → collection-search-BG7vK4NS.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CP9uIvN_.js → collection-table-wrapper-C-F_T5Eb.js} +1 -1
- package/dist/client/assets/{collection-tabs-DtjUs1A5.js → collection-tabs-DrZNeSEC.js} +1 -1
- package/dist/client/assets/{column-rules-Bo9Qbi1T.js → column-rules-C1VVvSzv.js} +1 -1
- package/dist/client/assets/{combobox-Ccd0xh39.js → combobox-B0tRCuGZ.js} +1 -1
- package/dist/client/assets/{command-a4IN63yc.js → command-D4xFqyr9.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-BS-i6Wh4.js → companion-mcps-section-Cz5vCHft.js} +1 -1
- package/dist/client/assets/{config-BQQbHVQ7.js → config-DPczwNxh.js} +1 -1
- package/dist/client/assets/{connect-layout-BOuFTHKB.js → connect-layout-B5AnMnce.js} +1 -1
- package/dist/client/assets/{connect-vvgWKwgp.js → connect-pk9RQf7E.js} +1 -1
- package/dist/client/assets/{connection-CAG14zGZ.js → connection-BBVDOaSM.js} +1 -1
- package/dist/client/assets/{connection-card-ACWoimrM.js → connection-card-D1TMmLIT.js} +1 -1
- package/dist/client/assets/{connection-detail-B8Xtv2Ww.js → connection-detail-DQ776dHS.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BxVe0XvV.js → connection-form-helpers-CFQwZ1sv.js} +1 -1
- package/dist/client/assets/{connections-BX7Kd5-m.js → connections-D5_-1i7h.js} +1 -1
- package/dist/client/assets/{context-DuwSYB-v.js → context-BzZmRn5A.js} +1 -1
- package/dist/client/assets/{context-menu-Db5SVKVy.js → context-menu-Dt0_Wi5C.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-zyq81keC.js → create-organization-dialog-SVvYPMqI.js} +1 -1
- package/dist/client/assets/{daily-pulse-BLOj9QcX.js → daily-pulse-Dy2ScJNC.js} +1 -1
- package/dist/client/assets/{decopilot-DboBD55M.js → decopilot-Bh5nOuj8.js} +1 -1
- package/dist/client/assets/{device-hint-Czp4quXE.js → device-hint-BWrI1ZAV.js} +1 -1
- package/dist/client/assets/{dialog--2DE59f4.js → dialog-CwJ0Tacd.js} +1 -1
- package/dist/client/assets/{discover-Bh29hObV.js → discover-BN5fZmxX.js} +1 -1
- package/dist/client/assets/{domain-settings-ComV0r-h.js → domain-settings-C0ggYD-b.js} +1 -1
- package/dist/client/assets/{download-app-dialog-C3Ji56be.js → download-app-dialog-BlTQi4L1.js} +1 -1
- package/dist/client/assets/{drawer-CmCYRv71.js → drawer-LGekY388.js} +1 -1
- package/dist/client/assets/{editor-Q8fTwJVK.js → editor-DIJFF-Rn.js} +3 -3
- package/dist/client/assets/{empty-state-iV41QFUB.js → empty-state-Db66egMr.js} +1 -1
- package/dist/client/assets/{empty-state-Ba4Lmj53.js → empty-state-DdDKihxt.js} +1 -1
- package/dist/client/assets/{extract-connection-data-zlkqkzoy.js → extract-connection-data-BZKTCWVm.js} +1 -1
- package/dist/client/assets/{feature-gate-Bc3gv9R6.js → feature-gate-DIpT85T7.js} +1 -1
- package/dist/client/assets/{feature-paywall-COlGAU5V.js → feature-paywall--RganMza.js} +1 -1
- package/dist/client/assets/{file-explorer-D0NYENQh.js → file-explorer-B0caqImY.js} +1 -1
- package/dist/client/assets/{file-preview-BK6HWgQz.js → file-preview-BVUwkvqy.js} +1 -1
- package/dist/client/assets/{file-share-button-BSE3y3HH.js → file-share-button-Dfx-yCi-.js} +1 -1
- package/dist/client/assets/{file-type-icon-Hh_qpvql.js → file-type-icon-CYHSeMg9.js} +1 -1
- package/dist/client/assets/flat-project-CXofx1Tp.js +1 -0
- package/dist/client/assets/{folder-icon-CKdtOEi8.js → folder-icon-Bz05bjxQ.js} +1 -1
- package/dist/client/assets/{form-es3qsNvx.js → form-DXEENu_8.js} +1 -1
- package/dist/client/assets/{gateway-client-BI4FJ_tT.js → gateway-client-DafKkh5Q.js} +1 -1
- package/dist/client/assets/{general-B-jSci0b.js → general-P5nYRAWt.js} +1 -1
- package/dist/client/assets/{home-DQoJZrnn.js → home-C9qFKdi5.js} +1 -1
- package/dist/client/assets/{icon-button-BRiA9kiV.js → icon-button-c-SlONOU.js} +1 -1
- package/dist/client/assets/{index-0zdxHEgU.js → index-0glLJTM3.js} +1 -1
- package/dist/client/assets/{index-D7hYEfbN.js → index-BOGZM7Pw.js} +3 -3
- package/dist/client/assets/{index-DtMNfpk7.js → index-CaP5SDB2.js} +1 -1
- package/dist/client/assets/{index-CYlLocPz.js → index-Ccz5AaI_.js} +1 -1
- package/dist/client/assets/{index-DjtXLy0g.js → index-D9bgHbh-.js} +1 -1
- package/dist/client/assets/{index-CFDmgtf-.js → index-DGWe6sla.js} +1 -1
- package/dist/client/assets/{index-BabIEbYv.js → index-DK7oXPIL.js} +1 -1
- package/dist/client/assets/{index-BsC6xORW.js → index-Dl3JXElC.js} +1 -1
- package/dist/client/assets/{index-BX4WRpMk.js → index-DlDzsxeJ.js} +1 -1
- package/dist/client/assets/{index-C69CS_86.js → index-DuKSozhT.js} +1 -1
- package/dist/client/assets/{index-DsvD9a73.js → index-KD5FDUeP.js} +1 -1
- package/dist/client/assets/{index-DC6klush.js → index-ZDbB-PVr.js} +1 -1
- package/dist/client/assets/{index-B8VGzyyA.js → index-ehY3MQSN.js} +3 -3
- package/dist/client/assets/{index-nwj1WYdQ.js → index-mRG9os_M.js} +1 -1
- package/dist/client/assets/{index-redirect-DsGrdHfc.js → index-redirect-zukIYzlP.js} +1 -1
- package/dist/client/assets/{index-Bie3Yt7i.js → index-txkdKzZ6.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-rN5E5eR_.js → infiniteQueryObserver-CHVbl4Al.js} +1 -1
- package/dist/client/assets/{infra-billing-STGTbKqw.js → infra-billing-D94tvu0v.js} +1 -1
- package/dist/client/assets/{input-B5SM5NFH.js → input-C0ZWiiGy.js} +1 -1
- package/dist/client/assets/{input-BhyogJV0.js → input-Cbyu0LGy.js} +1 -1
- package/dist/client/assets/{input-C3UtPyeS.js → input-qBVmxar0.js} +3 -3
- package/dist/client/assets/{integration-icon-51EB-LjE.js → integration-icon-DUuPtqFs.js} +1 -1
- package/dist/client/assets/{label-BkKmAPrZ.js → label-CKukDnnz.js} +1 -1
- package/dist/client/assets/{layout-DIdrXHfY.js → layout-DZr1Z4Vi.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-CuL-w8Ck.js → legacy-agents-deep-O_a0ihqp.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-CIckQwOA.js → legacy-main-redirect-B6sO18wU.js} +1 -1
- package/dist/client/assets/library-DOnOZswk.js +1 -0
- package/dist/client/assets/{library-tab-ayplxw28.js → library-tab-CGsiOX6E.js} +1 -1
- package/dist/client/assets/{login-Dh7dGGrt.js → login-hdkcuXfq.js} +1 -1
- package/dist/client/assets/{markdown-DI9weIuO.js → markdown-DNk_PyOf.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-B-h9M4vf.js → mcp-app-renderer-CJ5u3TPG.js} +1 -1
- package/dist/client/assets/{mcp-oauth-q_WDhaFd.js → mcp-oauth-cSH4PfZY.js} +1 -1
- package/dist/client/assets/{members-Duvbhxmd.js → members-C-_zRkLX.js} +1 -1
- package/dist/client/assets/{memory-B3Yr64no.js → memory-DLRzHb1w.js} +2 -2
- package/dist/client/assets/{mini-report-page-BYBUcf9i.js → mini-report-page-CFzUUmyT.js} +1 -1
- package/dist/client/assets/{mock-board-DkM9WLsL.js → mock-board-Si0mPE9y.js} +1 -1
- package/dist/client/assets/{monaco-editor-BlkFUb0T.js → monaco-editor-C4uDUO_q.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-D91cPMXx.js → monitoring-stats-row-CllZiW9E.js} +1 -1
- package/dist/client/assets/{multi-select-CljFfUTQ.js → multi-select-DiHVOPXR.js} +1 -1
- package/dist/client/assets/{mustache-Bit9MGJY.js → mustache-C7f92o5k.js} +1 -1
- package/dist/client/assets/{new-project-dialog-i2AjdXpL.js → new-project-dialog-CiCMTA1C.js} +1 -1
- package/dist/client/assets/{oauth-callback-Manl7zcf.js → oauth-callback-Cb4S9fwE.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BuFa1JC9.js → oauth-callback-ai-provider-CD_A5mvP.js} +1 -1
- package/dist/client/assets/{onboarding-Cw4aLFQT.js → onboarding-B2wyTbOl.js} +1 -1
- package/dist/client/assets/{openai-conversation-BiyOmfLa.js → openai-conversation-WSjKAhvH.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-C5dOi8KI.js → optimistic-project-sidebar-views-BBFtzDV4.js} +1 -1
- package/dist/client/assets/{org-file-open-context-CjL3Ry7C.js → org-file-open-context--_UQSpdl.js} +1 -1
- package/dist/client/assets/{organization-choice-CcPvavKF.js → organization-choice-Bs4XFXgS.js} +1 -1
- package/dist/client/assets/{orgs-5BU6BjBI.js → orgs-DzdQslwf.js} +1 -1
- package/dist/client/assets/{page-seo-form-BImxCgsk.js → page-seo-form-vON-l1GZ.js} +1 -1
- package/dist/client/assets/{pair-DULI5So-.js → pair-IorbWgZn.js} +1 -1
- package/dist/client/assets/{plan-ladder-Ct95x7_d.js → plan-ladder-DSodyL3Q.js} +1 -1
- package/dist/client/assets/{popover-Ddsbw8vr.js → popover-DvKxqM1r.js} +1 -1
- package/dist/client/assets/{post-calendar-Gh6FGDL8.js → post-calendar-DiEfiKrj.js} +1 -1
- package/dist/client/assets/{post-editor-CcE1K4mb.js → post-editor-HV3DNHNH.js} +1 -1
- package/dist/client/assets/{preview-content-CsmLbvef.js → preview-content-Bd42BahA.js} +1 -1
- package/dist/client/assets/{preview-dialog-Db2IsUqO.js → preview-dialog-DBXVi9mo.js} +1 -1
- package/dist/client/assets/{profile-gQCg01Pg.js → profile-C62VIFSL.js} +1 -1
- package/dist/client/assets/{project-app-view-D5z0m56j.js → project-app-view-DYaaNrnC.js} +1 -1
- package/dist/client/assets/{project-feed-CectffXQ.js → project-feed-DDiBGrsP.js} +1 -1
- package/dist/client/assets/{project-icon-zUFSPGzx.js → project-icon-DQrOXeEW.js} +1 -1
- package/dist/client/assets/project-reports-HuiRnlkO.js +1 -0
- package/dist/client/assets/project-tasks-Ck5F7vye.js +1 -0
- package/dist/client/assets/{projects-09qVLtvI.js → projects-C-62vsjh.js} +1 -1
- package/dist/client/assets/{projects-empty-state-DSuG10IT.js → projects-empty-state-DllkKglW.js} +1 -1
- package/dist/client/assets/{prompts-BlWGK9gm.js → prompts-53mGvQlZ.js} +1 -1
- package/dist/client/assets/record-editor-BAdOwM42.js +1 -0
- package/dist/client/assets/{redirect-editor-Dy4B9zEa.js → redirect-editor-C2CflIXw.js} +1 -1
- package/dist/client/assets/{reports-DwZ09kdh.js → reports-DQcmX2XK.js} +1 -1
- package/dist/client/assets/reports-Dyr-R6yJ.js +1 -0
- package/dist/client/assets/{reports-onboarding-BbuiybIk.js → reports-onboarding-DRfSptAM.js} +1 -1
- package/dist/client/assets/{reports-tab-CSSCOCZm.js → reports-tab-BGRnmmWF.js} +2 -2
- package/dist/client/assets/{repositories-DsV9QIrS.js → repositories-ltvP9f3v.js} +1 -1
- package/dist/client/assets/{repository-binding-BPtbugRj.js → repository-binding-CEDkA6og.js} +1 -1
- package/dist/client/assets/{repository-import-picker-DY8NkFcl.js → repository-import-picker-BT060hhl.js} +1 -1
- package/dist/client/assets/{repository-picker-Bu_60yv3.js → repository-picker-Bowb7b9f.js} +1 -1
- package/dist/client/assets/{require-capability-BO2WrDZB.js → require-capability-DN9BJlNM.js} +1 -1
- package/dist/client/assets/{required-auth-layout-BgvVX7TS.js → required-auth-layout-CKgEUo-z.js} +1 -1
- package/dist/client/assets/{reset-password-BoH3BEyI.js → reset-password-B6iTpX4u.js} +1 -1
- package/dist/client/assets/{resizable-DMRcTvG9.js → resizable-Cd8jDRB7.js} +1 -1
- package/dist/client/assets/{resolve-tab-icon-CXAXH1c6.js → resolve-tab-icon-X0M-w-vv.js} +1 -1
- package/dist/client/assets/{review-settings-p3dyFLfh.js → review-settings-CsnvQ-Qq.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-CKnN__KM.js → rich-text-link-control-ClsuTwdo.js} +1 -1
- package/dist/client/assets/{roles-DO1mdKqZ.js → roles-CU8q7gVb.js} +1 -1
- package/dist/client/assets/{route-ChNMAp77.js → route-CIn0WnXQ.js} +1 -1
- package/dist/client/assets/route-NLnkR9WP.js +1 -0
- package/dist/client/assets/route-qm6cYbsf.js +1 -0
- package/dist/client/assets/{runnable-block-editor-BT8tgJo5.js → runnable-block-editor-2ItVAsl7.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-BJunzywm.js → sandbox-lifecycle-context-C0vkuH66.js} +1 -1
- package/dist/client/assets/{schema-gvXoFVGC.js → schema-W3hqtN1B.js} +1 -1
- package/dist/client/assets/{scroll-area-BGXFjpgk.js → scroll-area-BN7R6f0c.js} +1 -1
- package/dist/client/assets/{search-input-C9kf2QzG.js → search-input-dP8TWy_f.js} +1 -1
- package/dist/client/assets/{search-toggle-DxL1CEhR.js → search-toggle-BY33vUyT.js} +1 -1
- package/dist/client/assets/{secret-picker-CXDBfcj0.js → secret-picker-Bw0HhGwk.js} +1 -1
- package/dist/client/assets/{secrets-Bcm3gb-7.js → secrets-D3WU-wHx.js} +1 -1
- package/dist/client/assets/{sections-editor-7SLVjemW.js → sections-editor-Bnb_Ii_2.js} +1 -1
- package/dist/client/assets/{select-Bo385QnQ.js → select-CGC5E9nf.js} +1 -1
- package/dist/client/assets/{select-model-BtUoVLeN.js → select-model-B24PK9T9.js} +1 -1
- package/dist/client/assets/{seo-editor-Bws3I75q.js → seo-editor-C0eExFGM.js} +1 -1
- package/dist/client/assets/{separator-Bpa9Zb6K.js → separator-CJCi7EK2.js} +1 -1
- package/dist/client/assets/settings-tab-6YGWJaPP.js +5 -0
- package/dist/client/assets/{sheet-Bp0OaYM9.js → sheet-DOIzAtMq.js} +1 -1
- package/dist/client/assets/{shell-layout-DMqLVaPa.js → shell-layout-B9OaioSj.js} +1 -1
- package/dist/client/assets/{skills-CHvIydZj.js → skills-DdHXbE4c.js} +1 -1
- package/dist/client/assets/{sso-DzY1sSiB.js → sso-WAQdj9Pk.js} +1 -1
- package/dist/client/assets/{suggestion-jBsEBvox.js → suggestion-CotdwSyy.js} +2 -2
- package/dist/client/assets/{switch-O2yDEU3w.js → switch-Ctdc8it1.js} +1 -1
- package/dist/client/assets/{synced-repos-5PjWHzPH.js → synced-repos-DFq2CK-H.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph--RZwkrwS.js → tab-icon-glyph-CXhMb9aF.js} +1 -1
- package/dist/client/assets/{table-cs-obaRn.js → table-BCWfTyhH.js} +1 -1
- package/dist/client/assets/{tabs-PK9QS4Is.js → tabs-BCc9oqWy.js} +1 -1
- package/dist/client/assets/{task-board-B1uWZU9K.js → task-board-Dh6sWb9t.js} +1 -1
- package/dist/client/assets/{task-route-DRf0NxDf.js → task-route-BGcHuycG.js} +1 -1
- package/dist/client/assets/{task-status-UjMHpR3_.js → task-status-CjAgmdGY.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-DG49CdbS.js → taskboard-analytics-CgboMqfv.js} +1 -1
- package/dist/client/assets/{tasks-B5AEZlSg.js → tasks-CQrn-rBP.js} +1 -1
- package/dist/client/assets/tasks-L9jj-kWQ.js +1 -0
- package/dist/client/assets/{textarea-C8e48cUD.js → textarea-e3h0PKfc.js} +1 -1
- package/dist/client/assets/{thread-analytics-CfDkMr69.js → thread-analytics-u-mhBpUO.js} +1 -1
- package/dist/client/assets/{thread-button-RXmpO_s6.js → thread-button-D5H005fQ.js} +1 -1
- package/dist/client/assets/{thread-intent-DD3seycr.js → thread-intent-CNOpHUCE.js} +1 -1
- package/dist/client/assets/{thread-route-D5UsJN7V.js → thread-route-DU2TTrlu.js} +1 -1
- package/dist/client/assets/{thread-route-BurLlqRF.js → thread-route-esGiDSRu.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-CYr9C8k-.js → thread-sheet-body-Bn55RhIb.js} +1 -1
- package/dist/client/assets/{toggle-group-CWajsWIH.js → toggle-group-BUS82Kqf.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-ClIJFPkR.js → toolbar-icon-button-B8tRovqj.js} +1 -1
- package/dist/client/assets/{tooltip-Ch7JwSjZ.js → tooltip-DoWVDYxv.js} +1 -1
- package/dist/client/assets/{track-yFV_-KUI.js → track-slrdEZ2N.js} +1 -1
- package/dist/client/assets/{types-DCK-IvKM.js → types-BlCCVKMl.js} +3 -3
- package/dist/client/assets/{usage-stats-DHCINwxo.js → usage-stats-ELYwp3GN.js} +1 -1
- package/dist/client/assets/{use-ai-providers-shWbOxLc.js → use-ai-providers-BuwFLwdC.js} +1 -1
- package/dist/client/assets/{use-automations-BuTfAhMt.js → use-automations-B8HKsWEy.js} +1 -1
- package/dist/client/assets/{use-autosave-BPE7QfwG.js → use-autosave-77sC71ka.js} +1 -1
- package/dist/client/assets/{use-chat-layout-state-CNWV4oOZ.js → use-chat-layout-state-Cd1SDWUO.js} +1 -1
- package/dist/client/assets/{use-clock-tick-CBfGh-8T.js → use-clock-tick-DkYE6iX2.js} +1 -1
- package/dist/client/assets/{use-connect-companion-DBuhvmdP.js → use-connect-companion-sjR8VGIZ.js} +1 -1
- package/dist/client/assets/{use-connection-Roi-SyxA.js → use-connection-C4j2pJbz.js} +1 -1
- package/dist/client/assets/{use-copy-DNeNHO02.js → use-copy-BiyQhtNG.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-ylON-lmG.js → use-create-virtual-mcp-C0a_KTOz.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale--kApxv3j.js → use-date-fns-locale-dFt0Hwsj.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-BGrGYaC5.js → use-debounced-autosave-D58XDw_5.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DtOEJwy7.js → use-debounced-value-C1TKx6na.js} +1 -1
- package/dist/client/assets/{use-deco-credits-CxB_Tg6p.js → use-deco-credits--by3KJXE.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-Dz93drkG.js → use-decopilot-events-DL6Ppxgb.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BHS_Ab_3.js → use-delete-connection-Cc8dNIWp.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-xqgTl_RK.js → use-deployment-admin-D0_O_QSr.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-D8zoxDMW.js → use-fast-preview-draft-url-KJgu2gHZ.js} +1 -1
- package/dist/client/assets/{use-file-configs-BHKDkTjC.js → use-file-configs-j21JL3yE.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CIbeXSaG.js → use-infinite-scroll-BAQqTty_.js} +1 -1
- package/dist/client/assets/{use-join-requests-Cs8YUxtJ.js → use-join-requests-B2449AYt.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-B2ztRrej.js → use-main-panel-tabs-NhZJRbOq.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-BtDthgG6.js → use-mcp-auth-status-CG-b2BD1.js} +1 -1
- package/dist/client/assets/{use-mcp-client-Dv0wmo61.js → use-mcp-client-9jF2B0Tz.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-DaqWVfi5.js → use-mcp-prompts-DNAsQeJA.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DjBYc1XK.js → use-mcp-tools-Dbm0kb0W.js} +1 -1
- package/dist/client/assets/{use-members-CBbGro39.js → use-members-CmQfPBAn.js} +1 -1
- package/dist/client/assets/{use-mobile-DrPHToxA.js → use-mobile-9GiVme_1.js} +1 -1
- package/dist/client/assets/use-navigate-to-agent-CSgL519X.js +1 -0
- package/dist/client/assets/use-new-blocks-editor-CQ_89Cdt.js +1 -0
- package/dist/client/assets/{use-open-billing-url-Bk3SlqL_.js → use-open-billing-url-CIF0WByS.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CwT9KERJ.js → use-org-auth-client-BBAyh5Tz.js} +1 -1
- package/dist/client/assets/{use-org-fs-BONY9uyR.js → use-org-fs-DF_BlZtj.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-W4ado92l.js → use-org-repo-syncs-kX31P2gW.js} +1 -1
- package/dist/client/assets/{use-org-sso-B7-QiCKC.js → use-org-sso-BmivjhbI.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DGag2mZt.js → use-organization-roles-DEPf_2N_.js} +1 -1
- package/dist/client/assets/{use-organization-settings-C3-_kI_g.js → use-organization-settings-BgEtBsl7.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-Ck4N-ZB8.js → use-panel-navigate-4MoLzTpw.js} +1 -1
- package/dist/client/assets/{use-project-scope-Dy6ai4MQ.js → use-project-scope-CUYDg9gO.js} +1 -1
- package/dist/client/assets/{use-releases-_59HzI08.js → use-releases-Dgq67fk3.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-BMuHEtbE.js → use-reports-diagnostic-D9eBWCCe.js} +1 -1
- package/dist/client/assets/{use-secrets-B6JGnS88.js → use-secrets-D-qkpxrJ.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-DJojO_0E.js → use-section-preview-base-LT3afhUQ.js} +1 -1
- package/dist/client/assets/{use-session-runtime-DdeuwCmv.js → use-session-runtime-C1jT9-WF.js} +1 -1
- package/dist/client/assets/{use-tags-WETmD8h-.js → use-tags-D0iZ2cgD.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-BjPzwnMF.js → use-task-board-analytics-B0Mv4i0Z.js} +1 -1
- package/dist/client/assets/{use-task-board-events-UvXF0OvU.js → use-task-board-events-Q5BqAnUD.js} +1 -1
- package/dist/client/assets/{use-task-metadata-DQimkwOj.js → use-task-metadata-B9tqJ9GP.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-DdFSZ4lk.js → use-thread-analytics-D5tK9O4P.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-ByokR1-M.js → use-thread-outputs-CDQWo15F.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-pxyjNhep.js +1 -0
- package/dist/client/assets/{useQueries-B78AFarR.js → useQueries-DvMDA4qD.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Cf0qcKEf.js +1 -0
- package/dist/client/assets/{users-DBjWYDrd.js → users-BE1CJVdF.js} +1 -1
- package/dist/client/assets/{utils-rWt92hWs.js → utils-CZW3O45l.js} +1 -1
- package/dist/client/assets/{variant-calendar-7i4pMUsf.js → variant-calendar-C_oSHjpD.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-BPuvqb9t.js → variant-matcher-override-B9Dx0Ujt.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-Chs9e6xz.js → view-mode-toggle-BjrOeE_u.js} +1 -1
- package/dist/client/assets/{virtual-mcp-Dd7G1yTs.js → virtual-mcp-DkCjKqhT.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-CFW3XJJ3.js +0 -1
- package/dist/client/assets/agent-deck-DIqTNfuK.js +0 -1
- package/dist/client/assets/agent-library-CmW5qoRR.js +0 -1
- package/dist/client/assets/agent-library-file-BQ1asGOw.js +0 -1
- package/dist/client/assets/agent-settings-5O8PNLg6.js +0 -1
- package/dist/client/assets/agent-site-editor-code-DuPdAn6O.js +0 -2
- package/dist/client/assets/agent-view-DmLqbwZt.js +0 -1
- package/dist/client/assets/api-keys-UL1ho-y-.js +0 -1
- package/dist/client/assets/app-editor-BzUJsQbn.js +0 -1
- package/dist/client/assets/automations-CT6RAEzt.js +0 -1
- package/dist/client/assets/flat-project-BHnqWyb1.js +0 -1
- package/dist/client/assets/library-omm_OeKO.js +0 -1
- package/dist/client/assets/project-reports-DHC_HSC0.js +0 -1
- package/dist/client/assets/project-tasks-DzL0VTL5.js +0 -1
- package/dist/client/assets/record-editor-kiS_ZZYd.js +0 -1
- package/dist/client/assets/reports-DqySdKN5.js +0 -1
- package/dist/client/assets/route-6cBqBEib.js +0 -1
- package/dist/client/assets/route-CkWpASRI.js +0 -1
- package/dist/client/assets/settings-tab-CrMl0HQX.js +0 -5
- package/dist/client/assets/tasks-B8F8Dqa0.js +0 -1
- package/dist/client/assets/use-navigate-to-agent-B6Jnpp7k.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-BQYMR1qS.js +0 -1
- package/dist/client/assets/useInfiniteQuery-CApTsxJ0.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery--aIXJiP3.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3713,7 +3713,7 @@ ${J.join(`
|
|
|
3713
3713
|
`)}`:X}function Io6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3714
3714
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var lY8=200,wo6=12,Eo6,Po6=300,J_0=3;var uD1=D(()=>{X7();r$();X_0();Eo6={aheadBy:0,behindBy:0,files:[]}});function ko6($){if(!$||$.includes(".."))return!1;return Vo6.test($)}function mY8($){return So6.includes($)}function lD1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!ko6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function cD1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Vo6,So6;var dY8=D(()=>{Vo6=/^[\w./@-]+$/;So6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function s60($,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 pY8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new Xz(v7);let J=await xj($.storage,X,Y);if(J&&await DD($.storage,J)){let F=await qU($,J,{forceRefresh:!0}).catch((U)=>{throw new Xz(U instanceof Error?U.message:v7)});await iY8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new Xz("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await zm({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:v7;throw new Xz(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await IU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=AL$(F instanceof Error?F.message:String(F));throw U?new Xz(N):F});await iY8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function iY8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=_p($),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,Co6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Co6=10485760,Xz;var mD1=D(()=>{SW();oC0();j$0();yH0();n00();X7();Xz=class Xz extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function vo6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!_o6.test(Z))throw Error(`Invalid branch name: ${$}`)}function ay($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(xo6)])}async function yo6($,Z){let Q=$.var.studioContext,Y=cW(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=Tf(G?.metadata?.runtime);if(W)return W;let K=lR0(Z.virtualMcpMetadata),H=K==="cms"?await AD1(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 go6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await lX($.var.studioContext)}catch{return null}}function yp($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function e60($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=s60(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=J0(Y);return wm(Y,J.id,X)}function iD1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=yD$(Z);if(Y!==void 0)return $.json({error:Q},429,{...IZ,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof s6)return $.json({error:Q},409,IZ);let X=bW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,IZ)}return $.json({error:Q},502,IZ)}async function dD1($,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 oY8($){try{let Z=await e60($),Q=await gD1(Z,$.get("vmClaim").branch);return $.json(Q,200,IZ)}catch(Z){return iD1($,Z)}}function a60($,Z){let Y=(W_0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return W_0.set($,X),X.finally(()=>{if(W_0.get($)===X)W_0.delete($)}),Y}async function OQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,IZ);let Y=Q?.runner??yp($);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",...IZ}})}}let O=await B.text(),L=Q?.redactRepoDir?ho6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...IZ}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function ho6($){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 rY8($,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 uo6($){return sY8.includes($)}var _o6,bo6=524288,nY8=65536,xo6=1e4,tY8=2000,fo6,W_0,IZ,sY8,aY8=()=>{let $=new $1;$.use("/:virtualMcpId/:branch/*",fo6),$.post("/:virtualMcpId/:branch/write",(Q)=>OQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>OQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>OQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>OQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>OQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>OQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>OQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return OQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return OQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>OQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>OQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!uo6(Y))return Q.json({error:`step must be one of: ${sY8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await AD1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await go6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,IZ);if(Y==="start"){let G=J0(Q.var.studioContext),W=Od(X.virtualMcpMetadata);try{await yR0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return OQ(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return DO(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return rQ8(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 oY8(Q);return Z(Q)});let Z=(Q)=>OQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(tY8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return oY8(Q);return OQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(tY8)])})}),$.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 e60(Q),G=await hD1(J,Y.branch,X.base);return Q.json(G,200,IZ)}catch(X){return iD1(Q,X)}return OQ(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,IZ);let Y=yp(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return a60(X,async()=>{try{await TD1(W,Y,X);let K=s60(J,G);if(K)await pY8(W,Y,X,K)}catch(K){if(K instanceof Xz)return Q.json({error:K.message},403,IZ);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,IZ)}return OQ(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return a60(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,IZ);try{let G=await e60(Q);return await cY8(G,Y.branch,J),Q.json({ok:!0},200,IZ)}catch(G){let W=bW(G)===409||G instanceof s6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,IZ)}});return a60(Y.claimName,()=>OQ(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return a60(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await e60(Q),H=W.base??await K.getDefaultBranch();return await G_0(K,Y.branch,H),Q.json({ok:!0},200,IZ)}catch(W){return iD1(Q,W)}});let X=yp(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return a60(J,async()=>{try{await TD1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,IZ)}return OQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/judge-review",s5({maxSize:bo6,onError:(Q)=>Q.json({error:"Payload too large"},413,IZ)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=yp(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=eQ8(F)&&N?[F,U]:X?await Promise.all([rY8(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),rY8(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await e60(Q);return Promise.all([gD1(w,Y.branch),hD1(w,Y.branch)])})();await RW(K,J0(K).id,"judging whether a change needs review");let L=await QY8(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,IZ)}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,IZ);return Q.json({error:F},502,IZ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=yp(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 dD1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",s5({maxSize:nY8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=yp(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=lD1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=cD1(J,W.resolveType);return dD1(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:nY8,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):Ld(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=lD1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!mY8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=cD1(G,K.resolveType);return dD1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var eY8=D(()=>{J8();JK();Cp();PD1();Dd();nQ8();D3();wd();tQ8();uW();FH();oQ8();sQ8();R71();w$0();YY8();X7();q5();uD1();dY8();uR0();mD1();_o6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;fo6=tC0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=c0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=J0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{vo6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=A10({orgId:X.id,virtualMcpId:J,branch:G}),H=await n91(Q,G),F=t91(H,Y),U=pQ8({userId:F,projectRef:K}),N=W.metadata??null,B=await yo6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await lX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});W_0=new Map;IZ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};sY8=["clone","install","start"]});function $X8($,Z,Q){let Y=pD1.get($);if(!Y)Y={pending:null,running:!1},pD1.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)co6($,Y);return J}async function co6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await mo6(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)pD1.delete($)}}async function mo6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await fp(Z,Q),W=await Z.listDecofileEntries(G,Y),K=xD1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=fD1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3715
3715
|
`;await yY8(Z.repo,L);let w=O[0]??`${Y_0(Y)}/${VD1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of fD1(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 gY8(Z,F.values(),X),{decofile:B,skipped:O}=d60(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:UH(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:do6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof s6)||J>=lo6-1)throw N;await L$(D7(2000,200,J,2,0.5))}}}function do6($){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 I51(Y,$.deps.coAuthor)}var lo6=3,pD1;var ZX8=D(()=>{XT0();sC0();i4();r$();X7();X_0();pD1=new Map});import{createHmac as QX8,randomBytes as io6,timingSafeEqual as po6}from"crypto";function YX8(){if(K_0)return K_0;let $;try{let Z=j0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return K_0=$?Buffer.from($):io6(32),K_0}function nD1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+no6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=QX8("sha256",YX8()).update(Y).digest("base64url");return`${Y}.${X}`}function XX8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(QX8("sha256",YX8()).update(Y).digest("base64url"));if(X.length!==J.length||!po6(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 no6=21600000,K_0=null;var JX8=D(()=>{$$()});function H_0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function to6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=H_0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function GX8($){let Z;try{Z=H_0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=to6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=H_0(G),K=W&&H_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 gp}from"zod";function ro6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&oo6.test($)}function UX8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $50($){let Z=$.get("decofileScope");return wm($.var.studioContext,Z.organizationId,Z.repository)}function Z50($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof s6)return $.json({error:Q},409);let Y=bW(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 NX8(){let $=new $1;return $.use("/:virtualMcpId/:branch",FX8),$.use("/:virtualMcpId/:branch/*",FX8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $50(Z),X=await hY8(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(GX8(X.decofile),200,{...J,"content-type":"application/json"});let G=nD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(UX8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return Z50(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await $50(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return Z50(Z,X)}}),$.patch("/:virtualMcpId/:branch",ao6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=eo6.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=i60(X.data)}catch(G){if(G instanceof p60)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{rC0(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(ID1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $50(Z),W=await $X8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:_p(Y)},J),K=nD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:UX8(Z)})}catch(G){return Z50(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $50(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(bW(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(bW(G)===409)return Z.json({error:"merge-conflict"},409);if(bW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return Z50(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $50(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(bW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return Z50(Z,Y)}}),$}var oo6,WX8=500,KX8=1048576,HX8=1024,so6=8388608,ao6,eo6,FX8;var BX8=D(()=>{uR0();sC0();J8();JK();PD1();oC0();mD1();X7();ZX8();JX8();uD1();X_0();FH();oo6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;ao6=s5({maxSize:so6,onError:($)=>$.json({error:"Payload too large"},413)}),eo6=gp.object({set:gp.record(gp.string(),gp.unknown()).optional(),delete:gp.array(gp.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)<=WX8,{message:`Patch cannot touch more than ${WX8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=KX8),{message:`Each block must be at most ${KX8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=HX8),{message:`Each block key must be at most ${HX8} characters`}),FX8=tC0(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(!ro6(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||!XX8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await CJ(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(!Ld(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=s60(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 DX8=($)=>{let Z=new $1;if(Z.use("*",Hp),Z.use("*",y58),Z.route("/",x58($.voiceSessions)),Z.route("/",YC0()),Z.route("/",E98()),Z.route("/",J98()),Z.route("/",CQ8()),Z.route("/",vQ8()),Z.route("/",TQ8()),Z.route("/",kQ8()),Z.route("/",qQ8()),Z.route("/",iC0()),Z.route("/tools",uQ8()),Z.route("/",yQ8()),Z.route("/",a78({kvStorage:$.kvStorage})),Z.route("/",r78()),Z.route("/fs",DQ8({getConnection:$.getNatsConnection})),Z.route("/sandbox",aY8()),Z.route("/decofile",NX8()),Z.route("/",zQ8()),Z.route("/",LQ8()),Z.route("/deco-sites",JC0()),Z.route("/hosting",t58()),Z.route("/monitor",Z98()),Z.route("/sso",aS0()),Z.route("/",pC0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",m58()),$.mountDevAssets)Z.route("/dev-assets",HC0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",C88()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",jQ8()),Z.route("/mcp",sM0()),Z.route("/mcp/self",lC0()),Z.route("/mcp",$I0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var OX8=D(()=>{J8();f58();g58();lS0();d58();cN1();o58();Q98();FC0();aE();yN1();nN1();s78();e78();OQ8();wQ8();_80();kN1();ZI0();ND1();EQ8();PQ8();RQ8();MQ8();OD1();_Q8();bQ8();gQ8();LD1();lQ8();wD1();aM0();eY8();BX8()});import{z as ey}from"zod";class tD1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new jX8.Kvm(F_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:F_0.StorageType.Memory,ttl:EX8.nanos(VD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}async conversationAgent($){let Z=await this.kv(),Q=`agent.${$.conversationKey}`,Y=Date.now()+45000;while(Date.now()<Y){let X=await Z.get(Q),J=X?.operation==="PUT"?wX8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await L$(200);continue}let G=LX8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await L$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,LX8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new q1(503,{message:"Voice conversation is starting; try again"})}async createSession($){let Z=this.adapter.forConversationModel($.model),Q=await this.conversationAgent(Z);try{return{provider:"elevenlabs",conversationToken:await Z.createConversationToken(Q)}}catch(Y){let X=await this.kv(),J=`agent.${Z.conversationKey}`,G=await X.get(J),W=G?.operation==="PUT"?wX8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var F_0,jX8,EX8,LX8,wX8;var zX8=D(()=>{EJ();yU();r$();F_0=C(EK(),1),jX8=C(XA(),1),EX8=C(Rz(),1),LX8=new TextEncoder,wX8=ey.discriminatedUnion("state",[ey.object({state:ey.literal("ready"),agentId:ey.string()}),ey.object({state:ey.literal("creating"),expiresAt:ey.number()})])});import{z as hp}from"zod";function $r6($){return{model:$.model,instructions:`${Dq$}
|
|
3716
|
-
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class oD1{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:$r6({...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:hp.object({session:hp.object({id:hp.string().min(1)}),transport:hp.object({type:hp.literal("webrtc"),sdp:hp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var PX8=D(()=>{yU()});var AX8;var TX8=D(()=>{AX8=[{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 rD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:Nq$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:AX8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:VD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var RX8=D(()=>{yU();TX8()});import{z as sX}from"zod";import{createHash as Zr6,createHmac as Qr6}from"crypto";class U_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Zr6("sha256").update(JSON.stringify(rD1($))).digest("hex"),this.conversationKey=Qr6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new U_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}=sX.object({agents:sX.array(sX.object({agent_id:sX.string(),name:sX.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 sX.object({platform_settings:sX.object({auth:sX.object({enable_auth:sX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...rD1(this.config)},AbortSignal.timeout(15000));return sX.object({agent_id:sX.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 sX.object({token:sX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return sX.object({token:sX.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 qX8=D(()=>{RX8()});import{createHmac as Yr6,timingSafeEqual as Xr6}from"crypto";import{z as up}from"zod";function IX8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Yr6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function VX8($,Z){let Q=Buffer.from(JSON.stringify(MX8.parse($))).toString("base64url");return`${Q}.${IX8(Q,Z)}`}function kX8($,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(IX8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Xr6(W,G))return null;try{let K=MX8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+VD)return null;return K.data}catch{return null}}var MX8;var SX8=D(()=>{yU();MX8=up.object({sessionId:up.string().uuid(),organizationId:up.string().min(1).max(256),userId:up.string().min(1).max(256),threadId:up.string().min(1).max(256),expiresAt:up.number().int().positive()})});import{z as sD1}from"zod";function CX8($,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 aD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var aD1;var _X8=D(()=>{aD1=sD1.object({provider:sD1.enum(["elevenlabs","openai"]),model:sD1.string().trim().min(1).max(128)})});import{createHash as Jr6}from"crypto";import{z as lp}from"zod";function cp($){return`user.${Jr6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class $O1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new vX8.Kvm(B_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:B_0.StorageType.Memory,ttl:bX8.nanos(VD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=CX8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+VD},W=VX8(G,this.deps.secret),K=await this.kv(),H=cp(G),F=await K.get(H),U=F?.operation==="PUT"?N_0.parse(F.json()):null,N=eD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:cp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=kX8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=cp(Q),J=await Y.get(X),G=J?.operation==="PUT"?N_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,eD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=cp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?N_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,eD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(cp($));if(Q?.operation==="PUT"&&N_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(cp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var B_0,vX8,bX8,N_0,eD1;var xX8=D(()=>{EJ();yU();SX8();_X8();B_0=C(EK(),1),vX8=C(XA(),1),bX8=C(Rz(),1),N_0=lp.object({sessionId:lp.string().uuid(),expiresAt:lp.number(),connected:lp.boolean().optional(),conversation:aD1.optional(),characters:lp.number().int().nonnegative(),requests:lp.number().int().nonnegative()}),eD1=new TextEncoder});function Gr6($){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 Wr6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},fX8=()=>{let $=new $1;return $.use("*",Wr6),$.get("/",async(Z)=>{let Q=j0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await JG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Gr6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var yX8=D(()=>{J8();$$();ik0()});import{z as y1}from"zod";function EN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function wr6($){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 jr6($,Z,Q){try{return JSON.parse($)}catch{throw new uX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Er6($){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:jr6(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 zr6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?oF(Q.function.parameters):oF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Pr6($){if(!$)return;return{openai:{response_format:$}}}function Ar6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function gX8($,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 hX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Kr6=256,Hr6,Fr6,Ur6,Nr6,Br6,Dr6,Or6,Lr6,uX8,lX8,cX8;var mX8=D(()=>{n4();J8();Cp();xH();Hr6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Fr6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Ur6=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(Fr6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Nr6=y1.object({type:y1.literal("text")}),Br6=y1.object({type:y1.literal("json_object")}),Dr6=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()})}),Or6=y1.union([Nr6,Br6,Dr6]),Lr6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Ur6),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(Hr6).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:Or6.optional(),user:y1.string().optional()});uX8=class uX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};lX8=new $1;lX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(EN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(EN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(EN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Lr6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(EN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=wr6(J.model);if(!G)return $.json(EN("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>EP(E.providerId));if(!j)return $.json(EN("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(EN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Er6(J.messages),N=J.tools?zr6(J.tools):void 0,B=Pr6(J.response_format),O=Ar6(),L=Math.floor(Date.now()/1000);if(J.stream)return DO($,async(w)=>{let j=gX8(F,U,N,J,B,$.req.raw.signal);try{let E=Bd(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=Kr6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:hX8(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=gX8(F,U,N,J,B,$.req.raw.signal),j=await YE(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:hX8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(EN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(EN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(EN(X.message,"server_error"),500)}});cX8=lX8});function Tr6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function dX8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!jZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||S9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(LA(U)!==J)continue;if(!Tr6(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 iX8=D(()=>{J8();$3()});var nX8;var pX8=D(()=>{nX8={name:"decocms",version:"4.454.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 Mr6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??qr6}}var tX8,qr6="https://ph.studio.decocms.com",oX8;var rX8=D(()=>{J8();Ss();cf();V9();$$();DN1();pX8();tX8=new $1;tX8.get("/",($)=>{let Z={version:nX8.version,theme:z5$(),...oK().logo&&{logo:oK().logo},...hD()&&{internalUrl:cp1()},...j0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!j0().firecrawlApiKey,hostingEnabled:!!j0().controlplaneRestUrl&&!!j0().controlplaneServiceToken,hostingControlPlaneGa:j0().hostingControlPlaneGa,monitorEnabled:!!j0().clickhouseAnalyticsUrl&&!!j0().clickhouseAnalyticsPassword,monitorGa:j0().monitorGa,plansEnabled:j0().plansEnabled,auth:M68(),posthog:Mr6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});oX8=tX8});function $g($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function ZO1($){return($g($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function sX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent($g($))}&sz=${Z}`}function Ir6($,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 aX8($){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=Ir6(`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 Vr6,eX8;var $J8=D(()=>{Vr6=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())}),eX8=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(Vr6)})),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 ZJ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${qW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function D_0($,Z={}){let Q=await fetch(ZJ8($,"",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 eX8.parse(await Q.json())}async function QJ8($,Z={}){let Q=await fetch(ZJ8($,".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 QO1=D(()=>{$J8();nB()});import{join as YJ8}from"path";async function Sr6($){try{let Z=await D_0($,{signal:AbortSignal.timeout(kr6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||ZO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function HG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function Cr6($,Z){let Q=$g($),Y=Z?.brand?.trim()||ZO1(Q),X=sX8(Q,128),G=`${(j0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=aX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${HG(W)}</title>`,`<meta name="description" content="${HG(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="${HG(W)}" />`,`<meta property="og:description" content="${HG(K)}" />`,`<meta property="og:url" content="${HG(G)}" />`,`<meta property="og:image" content="${HG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${HG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${HG(W)}" />`,`<meta name="twitter:description" content="${HG(K)}" />`,`<meta name="twitter:image" content="${HG(H)}" />`,`<meta name="twitter:image:alt" content="${HG(F)}" />`,`<link rel="canonical" href="${HG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${HG(G)}.md" />`,`<link rel="icon" href="${HG(X)}" sizes="any" />`].join(`
|
|
3716
|
+
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class oD1{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:$r6({...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:hp.object({session:hp.object({id:hp.string().min(1)}),transport:hp.object({type:hp.literal("webrtc"),sdp:hp.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var PX8=D(()=>{yU()});var AX8;var TX8=D(()=>{AX8=[{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 rD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:Nq$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:AX8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:VD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var RX8=D(()=>{yU();TX8()});import{z as sX}from"zod";import{createHash as Zr6,createHmac as Qr6}from"crypto";class U_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Zr6("sha256").update(JSON.stringify(rD1($))).digest("hex"),this.conversationKey=Qr6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new U_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}=sX.object({agents:sX.array(sX.object({agent_id:sX.string(),name:sX.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 sX.object({platform_settings:sX.object({auth:sX.object({enable_auth:sX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...rD1(this.config)},AbortSignal.timeout(15000));return sX.object({agent_id:sX.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 sX.object({token:sX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return sX.object({token:sX.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 qX8=D(()=>{RX8()});import{createHmac as Yr6,timingSafeEqual as Xr6}from"crypto";import{z as up}from"zod";function IX8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Yr6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function VX8($,Z){let Q=Buffer.from(JSON.stringify(MX8.parse($))).toString("base64url");return`${Q}.${IX8(Q,Z)}`}function kX8($,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(IX8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Xr6(W,G))return null;try{let K=MX8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+VD)return null;return K.data}catch{return null}}var MX8;var SX8=D(()=>{yU();MX8=up.object({sessionId:up.string().uuid(),organizationId:up.string().min(1).max(256),userId:up.string().min(1).max(256),threadId:up.string().min(1).max(256),expiresAt:up.number().int().positive()})});import{z as sD1}from"zod";function CX8($,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 aD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var aD1;var _X8=D(()=>{aD1=sD1.object({provider:sD1.enum(["elevenlabs","openai"]),model:sD1.string().trim().min(1).max(128)})});import{createHash as Jr6}from"crypto";import{z as lp}from"zod";function cp($){return`user.${Jr6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class $O1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new vX8.Kvm(B_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:B_0.StorageType.Memory,ttl:bX8.nanos(VD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=CX8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+VD},W=VX8(G,this.deps.secret),K=await this.kv(),H=cp(G),F=await K.get(H),U=F?.operation==="PUT"?N_0.parse(F.json()):null,N=eD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:cp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=kX8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=cp(Q),J=await Y.get(X),G=J?.operation==="PUT"?N_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,eD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=cp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?N_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,eD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(cp($));if(Q?.operation==="PUT"&&N_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(cp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var B_0,vX8,bX8,N_0,eD1;var xX8=D(()=>{EJ();yU();SX8();_X8();B_0=C(EK(),1),vX8=C(XA(),1),bX8=C(Rz(),1),N_0=lp.object({sessionId:lp.string().uuid(),expiresAt:lp.number(),connected:lp.boolean().optional(),conversation:aD1.optional(),characters:lp.number().int().nonnegative(),requests:lp.number().int().nonnegative()}),eD1=new TextEncoder});function Gr6($){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 Wr6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},fX8=()=>{let $=new $1;return $.use("*",Wr6),$.get("/",async(Z)=>{let Q=j0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await JG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Gr6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var yX8=D(()=>{J8();$$();ik0()});import{z as y1}from"zod";function EN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function wr6($){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 jr6($,Z,Q){try{return JSON.parse($)}catch{throw new uX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Er6($){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:jr6(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 zr6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?oF(Q.function.parameters):oF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Pr6($){if(!$)return;return{openai:{response_format:$}}}function Ar6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function gX8($,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 hX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Kr6=256,Hr6,Fr6,Ur6,Nr6,Br6,Dr6,Or6,Lr6,uX8,lX8,cX8;var mX8=D(()=>{n4();J8();Cp();xH();Hr6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Fr6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Ur6=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(Fr6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Nr6=y1.object({type:y1.literal("text")}),Br6=y1.object({type:y1.literal("json_object")}),Dr6=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()})}),Or6=y1.union([Nr6,Br6,Dr6]),Lr6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Ur6),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(Hr6).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:Or6.optional(),user:y1.string().optional()});uX8=class uX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};lX8=new $1;lX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(EN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(EN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(EN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Lr6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(EN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=wr6(J.model);if(!G)return $.json(EN("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>EP(E.providerId));if(!j)return $.json(EN("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(EN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Er6(J.messages),N=J.tools?zr6(J.tools):void 0,B=Pr6(J.response_format),O=Ar6(),L=Math.floor(Date.now()/1000);if(J.stream)return DO($,async(w)=>{let j=gX8(F,U,N,J,B,$.req.raw.signal);try{let E=Bd(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=Kr6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:hX8(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=gX8(F,U,N,J,B,$.req.raw.signal),j=await YE(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:hX8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(EN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(EN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(EN(X.message,"server_error"),500)}});cX8=lX8});function Tr6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function dX8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!jZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||S9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(LA(U)!==J)continue;if(!Tr6(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 iX8=D(()=>{J8();$3()});var nX8;var pX8=D(()=>{nX8={name:"decocms",version:"4.455.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 Mr6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??qr6}}var tX8,qr6="https://ph.studio.decocms.com",oX8;var rX8=D(()=>{J8();Ss();cf();V9();$$();DN1();pX8();tX8=new $1;tX8.get("/",($)=>{let Z={version:nX8.version,theme:z5$(),...oK().logo&&{logo:oK().logo},...hD()&&{internalUrl:cp1()},...j0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!j0().firecrawlApiKey,hostingEnabled:!!j0().controlplaneRestUrl&&!!j0().controlplaneServiceToken,hostingControlPlaneGa:j0().hostingControlPlaneGa,monitorEnabled:!!j0().clickhouseAnalyticsUrl&&!!j0().clickhouseAnalyticsPassword,monitorGa:j0().monitorGa,plansEnabled:j0().plansEnabled,auth:M68(),posthog:Mr6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:MO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});oX8=tX8});function $g($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function ZO1($){return($g($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function sX8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent($g($))}&sz=${Z}`}function Ir6($,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 aX8($){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=Ir6(`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 Vr6,eX8;var $J8=D(()=>{Vr6=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())}),eX8=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(Vr6)})),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 ZJ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${qW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function D_0($,Z={}){let Q=await fetch(ZJ8($,"",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 eX8.parse(await Q.json())}async function QJ8($,Z={}){let Q=await fetch(ZJ8($,".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 QO1=D(()=>{$J8();nB()});import{join as YJ8}from"path";async function Sr6($){try{let Z=await D_0($,{signal:AbortSignal.timeout(kr6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||ZO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function HG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function Cr6($,Z){let Q=$g($),Y=Z?.brand?.trim()||ZO1(Q),X=sX8(Q,128),G=`${(j0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=aX8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${HG(W)}</title>`,`<meta name="description" content="${HG(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="${HG(W)}" />`,`<meta property="og:description" content="${HG(K)}" />`,`<meta property="og:url" content="${HG(G)}" />`,`<meta property="og:image" content="${HG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${HG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${HG(W)}" />`,`<meta name="twitter:description" content="${HG(K)}" />`,`<meta name="twitter:image" content="${HG(H)}" />`,`<meta name="twitter:image:alt" content="${HG(F)}" />`,`<link rel="canonical" href="${HG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${HG(G)}.md" />`,`<link rel="icon" href="${HG(X)}" sizes="any" />`].join(`
|
|
3717
3717
|
`)}function _r6($,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}
|
|
3718
3718
|
</head>`)}function XJ8($){let Z=new $1;return Z.get("/:domain/og.png",async(Q)=>{let Y=$g(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(YJ8($,"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(`${qW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(vr6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let Y=$g(Q.req.param("file").replace(/\.md$/,""));try{let X=await QJ8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(br6)});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=$?YJ8($,"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 Sr6($g(Y)),K=Cr6(Y,W);return Q.html(_r6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var kr6=2500,vr6=1e4,br6=1e4;var JJ8=D(()=>{J8();nB();QO1();$$()});function O_0($,Z){return fetch(`${qW({})}${$}`,Z)}async function xr6($,Z){let Q=await D_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function yr6($){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 fr6,LO,GJ8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},WJ8;var KJ8=D(()=>{J8();Y3();nB();QO1();fr6=new Set(["complete","errored","terminated","unknown"]);LO=new $1;LO.use("*",async($,Z)=>{let Q=await x8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});LO.use("/link-token/*",GJ8);LO.use("/suggest",GJ8);LO.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.req.query("lang")?.trim()||void 0;try{return $.json(await xr6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});LO.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=yr6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await O_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${sw({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});LO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await O_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${sw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:fr6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});LO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await O_0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});LO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await O_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:[]})}});WJ8=LO});var gr6=1048576,YO1;var HJ8=D(()=>{J8();JK();$$();eU1();YO1=new $1;YO1.post("/webhook",s5({maxSize:gr6,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(!h48(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=u48(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await l48(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as hr6}from"crypto";function cr6($,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 hr6(Buffer.from(X),Buffer.from(Y))}function mr6($,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 FJ8($){let Z=new $1;return Z.post("/webhook",s5({maxSize:ur6,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(!cr6(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"&&!lr6.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 f10().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=mr6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await dr6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function dr6($,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 Fx$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var ur6=5242880,lr6;var UJ8=D(()=>{J8();JK();uW();x7();lr6=new Set(["check_suite","issue_comment"])});import{DBOS as JO1,SchedulerMode as ir6}from"@dbos-inc/dbos-sdk";async function nr6(){try{return await tr6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function tr6(){if(!x10())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (g91(),y91)),Promise.resolve().then(() => (f91(),x91))]),Q=await f10(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=O8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=AT$({sandboxes:J,pools:G,records:await TT$(X,J,G),legacyPools:wT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await RT$(K,gH0(X,new DX(j0().encryptionKey)),{now:W,orgFsLifetimeMs:zT0}),U=0,N=0,B=0;for(let O of H)try{let L=await Y.pushCredentials(O);U+=L.stored,N+=L.kept}catch(L){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${L instanceof Error?L.message:String(L)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function or6($,Z){let Q=await JO1.runStep(nr6,{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 NJ8(){if(XO1)return;if(!j0().agentSandboxEnabled||!x10())return;XO1=JO1.registerWorkflow(or6,{name:"sandboxCredentialPushWorkflow"}),JO1.registerScheduled(XO1,{name:"sandboxCredentialPushWorkflow",crontab:pr6,mode:ir6.ExactlyOncePerIntervalWhenActive})}var pr6="1-59/10 * * * *",XO1=null;var BJ8=D(()=>{vG();BL();M41();PT0();jT0();uW();$$()});function DJ8($){let Z=new YO($.db,new DX($.encryptionKey)),Q=new $1;return Q.get("/attachments/:token",async(Y)=>{let X=jv$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new dQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var OJ8=D(()=>{J8();BL();a71();UE();Q60()});import{DBOS as Jz,SchedulerMode as rr6}from"@dbos-inc/dbos-sdk";function LJ8($){WO1=$}function HO1(){if(!WO1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return WO1}function FO1(){let $=HO1();return new YO($.db,new DX($.encryptionKey))}async function Zs6($){try{let Z=await FO1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await SH(HO1().db,Z.organizationId);if(!Q)return{integrationId:$,started:0};if((await Q.storage.jiraIntegrations.listAutomations(Z.organizationId)).length===0)return{integrationId:$,started:0};let X=new dQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${ar6}m"`,W=0,K;for(let H=0;H<er6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await KF1(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 Qs6($,Z){let Q=await Jz.runStep(()=>FO1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>Jz.runStep(()=>Zs6(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 Ys6($,Z){try{let Q=await FO1().getById($);if(!Q?.enabled)return"disabled";let Y=await SH(HO1().db,Q.organizationId);if(!Y)return"disabled";let X=await KF1(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 Xs6($,Z){await Jz.sleep(tk0()+$s6),await Jz.runStep(()=>Ys6($,Z),{name:"settleJiraMove"})}async function wJ8($,Z){if(!KO1)throw Error("[jira-trigger] settle workflow is not registered");await Jz.startWorkflow(KO1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function jJ8(){if(GO1)return;KO1=Jz.registerWorkflow(Xs6,{name:"jiraSettleWorkflow"}),GO1=Jz.registerWorkflow(Qs6,{name:"jiraTriggerSweepWorkflow"}),Jz.registerScheduled(GO1,{name:"jiraTriggerSweepWorkflow",crontab:sr6,mode:rr6.ExactlyOncePerIntervalWhenActive})}var sr6="7-59/10 * * * *",ar6=35,er6=5,$s6=5000,WO1=null,KO1=null,GO1=null;var UO1=D(()=>{BL();Q60();Cd();UE();GF1();ok0()});function EJ8($){let Z=new YO($.db,new DX($.encryptionKey));async function Q(X,J){let G=W08(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await wJ8(W.id,G)}let Y=new $1;return Y.post("/webhook/:secret",s5({maxSize:Js6}),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 Js6=1048576;var zJ8=D(()=>{J8();JK();BL();UO1();ok0();Q60()});function PJ8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var AJ8,Gs6,Ws6,TJ8;var RJ8=D(()=>{J8();EJ();hd();sc();AJ8=new $1,Gs6=["range","if-none-match","if-modified-since"],Ws6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];AJ8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Kp($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q1(401,{message:"Authentication required"})}if(!Q)throw new q1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new q1(400,{message:"Missing file key"});let X=await U80(Y,Z);if(!X)throw new q1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&VW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new q1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return PJ8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of Gs6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new q1(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new q1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Ws6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),PJ8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});TJ8=AJ8});var Q50=b((Zg)=>{var Ks6=Zg&&Zg.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),Hs6=Zg&&Zg.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Ks6(Z,$,Q)};Object.defineProperty(Zg,"__esModule",{value:!0});Hs6(jG(),Zg)});var IJ8=b((qJ8)=>{Object.defineProperty(qJ8,"__esModule",{value:!0});qJ8.version=void 0;qJ8.version="3.4.0"});var SJ8=b((zN)=>{var Fs6=zN&&zN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(zN,"__esModule",{value:!0});zN.NodeTransport=zN.VERSION=void 0;zN.nodeResolveHost=Ls6;var a5=Q50(),Us6=M0("net"),NO1=M0("tls"),Ns6=M0("path"),VJ8=M0("fs"),Bs6=Fs6(M0("dns")),Ds6=IJ8();zN.VERSION=Ds6.version;var Os6="nats.js";class kJ8{socket;version;lang;yields=[];signal=(0,a5.deferred)();closedNotification=(0,a5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=Os6,this.version=zN.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,a5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw a5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new a5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new a5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,a5.deferred)(),Q,Y=(0,Us6.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,Ns6.resolve)($),!(0,VJ8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,VJ8.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,a5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new a5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,a5.deferred)();try{let X=(0,NO1.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,NO1.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 NO1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,a5.render)($)}`);let Z=(0,a5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,a5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,a5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}zN.NodeTransport=kJ8;function Ls6($){let Z=(0,a5.deferred)();return Bs6.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 xJ8=b((bJ8)=>{Object.defineProperty(bJ8,"__esModule",{value:!0});bJ8.connect=ws6;var CJ8=SJ8(),_J8=Q50(),vJ8=Q50();function ws6($={}){if((0,vJ8.hasWsProtocol)($))return Promise.reject(vJ8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,_J8.setTransportFactory)({factory:()=>{return new CJ8.NodeTransport},dnsResolveFn:CJ8.nodeResolveHost}),_J8.NatsConnectionImpl.connect($)}});var fJ8=b((wO)=>{var Es6=wO&&wO.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),zs6=wO&&wO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Es6(Z,$,Q)};Object.defineProperty(wO,"__esModule",{value:!0});wO.connect=void 0;var Ps6=xJ8();Object.defineProperty(wO,"connect",{enumerable:!0,get:function(){return Ps6.connect}});zs6(Q50(),wO)});function uJ8($){let Z=$?.connectFn??qs6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:Rs6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{O++;let L=D7(Ts6,As6,O-1,2,0.5);await L$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?yJ8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=hJ8.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 qs6($){return gJ8.connect($)}var yJ8,gJ8,hJ8,As6=100,Ts6=3000,Rs6=3000;var lJ8=D(()=>{r$();yJ8=C(Rz(),1),gJ8=C(fJ8(),1),hJ8=C(EK(),1)});function L_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 w_0($,Z){return`${$}.${Z}`}class BO1{cache;constructor($){this.cache=L_0({ttlMs:$?.ttlMs??Ms6,maxSize:$?.maxSize??Is6})}async get($,Z){return this.cache.get(w_0($,Z))??null}async set($,Z,Q){this.cache.set(w_0($,Z),Q)}async invalidate($,Z){this.cache.delete(w_0($,Z)),this.cache.delete(w_0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Ms6=600000,Is6=5000;var cJ8=()=>{};function j_0($,Z){return`${$}:${Z}`}function DO1($){let Z=L_0({ttlMs:$?.ttlMs??Vs6,maxSize:$?.maxSize??ks6}),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(mJ8,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(j_0(K,H))},set(K,H,F){Z.set(j_0(K,H),F)},invalidate(K,H){Z.delete(j_0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(mJ8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(j_0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var mJ8="studio.ai-provider-keys.invalidate",Vs6=30000,ks6=5000;var dJ8=()=>{};class OO1{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 iJ8=($)=>{let Z;return()=>Z??=$()},LO1,wO1;var pJ8=D(()=>{k6();LO1=iJ8(()=>Z$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),wO1=iJ8(()=>Z$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function fs6($=oJ8){return{name:tU,subjects:[`${HX1}.>`],storage:oH.StorageType.File,max_age:_s6,max_bytes:bs6,max_msgs_per_subject:xs6,discard:oH.DiscardPolicy.Old,retention:oH.RetentionPolicy.Limits,duplicate_window:vs6,num_replicas:$}}class rJ8{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 nJ8($){let Z=tJ8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function us6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Cs6().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 ls6($,Z){return $.info?.cluster?Z:1}function cs6($){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 jO1{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=fs6(X);try{await Y.streams.info(tU),await Y.streams.update(tU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(tU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(tU),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await oH.jetstreamManager($),X=ls6($,oJ8);try{await Z(Y,X)}catch(J){if(X<=1||!cs6(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:nd});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=us6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=ry$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=UX1(H,{runId:Z}),N=performance.now()-F;LO1().record(N),wO1().add(1,{"org.id":Y??"unknown"}),hs6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?nJ8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),gs6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await E8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:nJ8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:nd}),!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=UX1(Z,{runId:$,dedup:Q});LO1().record(performance.now()-X),wO1().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=oy$({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"?oH.DeliverPolicy.New:oH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=EE($),W;try{W=await E8(async()=>{return(await Y.consumers.get(tU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:nd})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=jM0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(DM0()).pipeThrough(OM0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){O(),L.close();return}let E=j;if(E.kind==="done"){if(J){O(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(tU,{filter:EE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var oH,tJ8,Ss6=($)=>{let Z;return()=>Z??=$()},Cs6,_s6=86400000000000,vs6=120000000000,bs6=4294967296,oJ8,xs6=500000,ys6,gs6,hs6;var sJ8=D(()=>{r$();NX1();EM0();LM0();k6();pJ8();oH=C(EK(),1),tJ8=C(Rz(),1),Cs6=Ss6(()=>Z$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),oJ8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);ys6=process.env.STREAM_ENCODE_TRACE==="1",gs6=process.env.DECOPILOT_STREAM_TRACE==="1";hs6=ys6?new rJ8:null});function E_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,wF(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 aJ8=D(()=>{p8()});class EO1{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 ms6($,Z,Q={}){let Y=$.startsWith("thread:")?MH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function zO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await fU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await rm($,{threadId:X,runBranch:G?.branch}),K=await m00($,Q,A41(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=ms6(W,await fT0($,X),{flat:Df(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 j3(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 eJ8=D(()=>{X7();D3();x7()});async function $G8($,Z,Q){let Y=Z.organizationId;if(!dX(Z))return!1;if(!yf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=PU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await Z5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),w8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var ZG8=D(()=>{I4();iY();vd();CH();A9()});function rs6($){return $ instanceof _X}function QG8($,Z){return Z-$>=ts6}class PO1{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??ds6;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??ps6,Q=this.options.itemIntervalMs??is6,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()-p71),OY1);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()-os6));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 NY1(this.taskBoard,X,Y),await BY1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==e1.progress||dX(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await zO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!QG8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:e1.progress,to:e1.review,reason:H}}).catch(()=>{}),w8(J,F),await _H(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==e1.progress||G.assigneeId!==R8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await vH(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),rs6(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()+ns6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==e1.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),w8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!QG8(WD(Q,Z.reviewCycleStartedAt),Date.now()))return;await _H($,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(!dX(Y))return!1;let X=Y.assigneeId===R8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await zO1(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 fd(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 $G8(G,Y,W))return!0;if(await og$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!KY1(W))return!1;return await bd(G,Y,{previewMatchesHead:HY1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await OE($,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 ds6=60000,is6=300000,ps6=50,ns6=60000,ts6=900000,os6=120000;var YG8=D(()=>{I4();Vq0();eJ8();pU();A80();CH();ZG8();A9();vW();LY1();x7();l$0();xd()});import{readdir as ss6,rm as z_0}from"fs/promises";import{join as P_0}from"path";async function A_0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-as6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Qg($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await XG8($,X,Z);else if(!X.startsWith(".")){let J=P_0($,X),G=await Qg(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await XG8(J,K,Z)}if((await Qg(J)).length===0)await z_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function XG8($,Z,Q){let Y=0,X=P_0($,Z),J=await Qg(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=P_0(X,W),H=await Qg(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=P_0(K,U);await z_0(B,{recursive:!0,force:!0}),Y++}}if((await Qg(K)).length===0)await z_0(K,{recursive:!0,force:!0})}if((await Qg(X)).length===0)await z_0(X,{recursive:!0,force:!0});return Y}async function Qg($){try{return(await ss6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var as6=30;var AO1=()=>{};import{DBOS as TO1,SchedulerMode as es6}from"@dbos-inc/dbos-sdk";async function Za6(){let $=[UK(),Ug(),IN()],Z=0;for(let Q of $)try{Z+=await A_0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function Qa6($,Z){await TO1.runStep(()=>Za6(),{name:"monitoringRetention"})}function GG8(){if(JG8)return;JG8=!0;let $=TO1.registerWorkflow(Qa6,{name:"monitoringRetentionWorkflow"});TO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:$a6,mode:es6.ExactlyOncePerIntervalWhenActive})}var $a6="23 4 * * *",JG8=!1;var WG8=D(()=>{f3();AO1()});function KG8($){return async(Z,Q)=>{let Y=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await iQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await BA($.db,Z,Y.role);return X.boundAuth=iU1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new eP(Q,void 0,X.boundAuth,Y.role,"self"),DE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var HG8=D(()=>{GW();EU()});function Ya6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Xa6(){return{services:Ya6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Ga6(){for(let $ of Ja6)$()}function FG8($){let Z=[...RO1.logs,$];RO1={...RO1,logs:Z.length>500?Z.slice(-500):Z},Ga6()}function qO1(){return Wa6}var RO1,Ja6,Wa6=!1;var MO1=D(()=>{RO1=Xa6(),Ja6=new Set});import{EventEmitter as Ka6}from"events";var IO1;var UG8=D(()=>{MO1();IO1=new Ka6;IO1.on("request",($)=>{FG8($)})});function NG8(){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=mp(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>mp(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${W9.tool}${B}${W9.dim}(${w})${W9.reset}`}else if(N.method)J=`${W9.dim}${mp(N.method)}${W9.reset}`}}catch{}}let W=mp(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${W9.mcp}${mp(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=Fa6(Y),H=G?"\u25C0":"\u2190";if(!qO1())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=Ha6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!qO1())console.log(`${W9.dim}${O}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""} ${N}${U}${W9.reset} ${W9.duration}${B}${W9.reset}`);IO1.emit("request",{method:Y,path:mp(X),status:U,duration:F,timestamp:new Date})}}}var W9,Ha6=($)=>{if($>=500)return W9.serverError;if($>=400)return W9.clientError;if($>=300)return W9.redirect;return W9.ok},Fa6=($)=>{return W9[$]||W9.reset},mp=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var BG8=D(()=>{MO1();UG8();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 wG8}from"crypto";import{mkdir as Ua6,readdir as Na6,rm as DG8,stat as jG8}from"fs/promises";import{join as kO1,relative as Ba6}from"path";import{z as Q8}from"zod";function zG8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return kO1(Da6,Z)}function PG8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function VO1($,Z){let Q=zG8($),Y=PG8(Z);return kO1(Q,Y)}function Oa6($,Z,Q,Y){let X=j0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return wG8("sha256",X).update(J).digest("hex")}function LG8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=Oa6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${PG8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function AG8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${wG8("md5","etag").update(Y).digest("hex")}"`}async function TG8($,Z,Q,Y,X){try{let J=await Na6($,{withFileTypes:!0});for(let G of J){let W=kO1($,G.name),H=Ba6(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 TG8(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 jG8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:AG8(W,F.mtime,F.size)})}catch{}}}}catch{}}function RG8($,Z){let Y=J0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Q8.object({prefix:Q8.string().optional(),maxKeys:Q8.number().optional().default(1000),continuationToken:Q8.string().optional(),delimiter:Q8.string().optional()}),outputSchema:Q8.object({objects:Q8.array(Q8.object({key:Q8.string(),size:Q8.number(),lastModified:Q8.string(),etag:Q8.string()})),nextContinuationToken:Q8.string().optional(),isTruncated:Q8.boolean(),commonPrefixes:Q8.array(Q8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=zG8(Y);await Ua6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await TG8(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),O=N+W<U.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({contentType:Q8.string().optional(),contentLength:Q8.number(),lastModified:Q8.string(),etag:Q8.string(),metadata:Q8.record(Q8.string(),Q8.string()).optional()}),handler:async(X)=>{let J=X,G=VO1(Y,J.key),W=await jG8(G);return{contentType:iN1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:AG8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=aD(J.expiresIn,OG8);return{url:LG8(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional(),contentType:Q8.string().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=aD(J.expiresIn,OG8);return{url:LG8(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=VO1(Y,J.key);try{return await DG8(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=VO1(Y,K);try{await DG8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function SO1($,Z,Q){let Y=RG8(Z,Q),X=new Kw({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:xZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:Q8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Q8.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new T3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),rW(X,J,$,"mcp:dev-assets")}async function qG8($,Z,Q,Y){let J=RG8(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 Da6="./data/assets",OG8=3600,EG8,MG8;var IG8=D(()=>{$$();Zi();J8();mJ0();$i();LJ();eD();FC0();EG8=new $1;EG8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return SO1($.req.raw,Z,Y)});MG8=EG8});var VG8={};Q6(VG8,{mountDevRoutes:()=>La6});function La6($,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 SO1(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 qG8(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",MG8);let Q=new $1;Q.use("*",nH({mountPath:"/api/dev-assets"})),Q.route("/",HC0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var kG8=D(()=>{J8();gN1();FC0();IG8()});var hG8={};Q6(hG8,{watchHandler:()=>gG8,resolveCorsOrigin:()=>fG8,isSsoExemptPath:()=>bG8,isAllowedOAuthRedirectUri:()=>yG8,createApp:()=>Ma6});import{readFileSync as wa6}from"fs";import{PrometheusSerializer as ja6}from"@opentelemetry/exporter-prometheus";import{DBOS as jO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Pa6,oAuthProtectedResourceMetadata as Aa6}from"better-auth/plugins";async function Ea6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,CG8(SG8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),CG8(SG8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function CG8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function bG8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${oS0}/`)||$.startsWith(`${mS0}/`)}function xG8($){return $==="local.studio.decocms.com"}function fG8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(xG8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function yG8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||xG8($.hostname)}async function Ma6($={}){let Z=$.database??O8(),Q=!1;$5.stop().catch((K0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",K0)});let Y,X,J,G,W=new BO1,K,H,F,U=null;if($.disableNats)K=DO1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new C80,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(K0)=>{return(async()=>{let H0=K0.getReader();try{while(!0){let{done:T0}=await H0.read();if(T0)break}}catch{}finally{H0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=uJ8();let K0=j0().natsCredsPath,H0;if(K0)try{H0=wa6(K0,"utf8")}catch(K8){console.error(`[app] failed to read NATS_CREDS at ${K0}; connecting anonymously`,K8)}U.init(j0().natsUrls,H0?{creds:H0}:void 0);let T0=U$1()?new t11({getJetStream:()=>U.getJetStream()}):null;T0?.init().catch(()=>{}),Y=T0;let A0=new WZ1({getJetStream:()=>U.getJetStream()});A0.init().catch(()=>{}),X=A0;let D1=new hf(QY1,{getJetStream:()=>U.getJetStream()}),g$=new hf(c$0,{getJetStream:()=>U.getJetStream()});D1.init().catch(()=>{}),g$.init().catch(()=>{}),J={reads:D1,cards:g$};let m$=new mJ1({getJetStream:()=>U.getJetStream()});m$.init().catch(()=>{}),G=m$,K=DO1({getConnection:()=>U.getConnection()}),H=new OO1({getConnection:()=>U.getConnection()}),F=new jO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),W68(U),U.onReady(()=>{T0?.init().catch((K8)=>{console.error("[McpListCache] Deferred init failed:",K8)}),A0.init().catch((K8)=>{console.error("[SkillCatalogCache] Deferred init failed:",K8)}),D1.init().catch((K8)=>{console.error("[PrReadCache] Deferred init failed:",K8)}),g$.init().catch((K8)=>{console.error("[PrCardCache] Deferred init failed:",K8)}),m$.init().catch((K8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",K8)}),K.start(),sN$(()=>U.getConnection()),F.init().catch((K8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",K8)})})}if(Gz)await Gz();o11(Y),HZ1(X),YY1(J),dJ1(G);let B={storage:new sh(Z.db),sseHub:$5,onThreadFinished:async(K0,H0)=>gd(new w3(Z.db),K0,H0,new _G(Z.db))},O=new jX1(B),L=new e40(Z.db),w=new EO1(L);w.start(),ng$(H),H.start((K0)=>{YM0(K0),O.execute({type:"CANCEL",taskId:K0}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",H0)})}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast start failed:",K0)}),U?.onReady(()=>{H.start().catch((K0)=>{console.error("[CancelBroadcast] Deferred start failed:",K0)})});let j=()=>U?.getConnection()??null;vN1(j),U?.onReady(()=>vN1(j)),RG1(j),U?.onReady(()=>RG1(j)),F.init().catch((K0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",K0)}),Gz=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),k58(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),aN$(),G.teardown(),o11(null),HZ1(null),YY1(null),dJ1(null)};let E=new $1;if(E.use("*",uJ1({enabled:(K0)=>Wp(K0,"debug")==="1"})),E.use("*",d_0),E.use("/*",Q68({origin:(K0,H0)=>fG8(K0,{baseUrl:j0().baseUrl,requestOrigin:new URL(H0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(K0,H0)=>{if(await H0(),K0.req.path.includes("/files/"))return;if(K0.req.path.includes("/fs/")&&K0.req.path.endsWith("/read"))return;K0.header("X-Frame-Options","DENY"),K0.header("Content-Security-Policy","frame-ancestors 'none'")}),!j0().noTui)E.use("*",NG8());E.use("*",async(K0,H0)=>{if(await H0(),ep(K0.req.path))return;if(K0.res.status>=500){let A0=await K0.res.clone().text();console.error(`[5xx Response] ${K0.req.method} ${K0.req.path} - ${K0.res.status}:`,A0)}}),E.get(ZX.HEALTH,(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);return K0.json({status:"ok"})}),E.get(ZX.HEALTH_LIVE,(K0)=>{return K0.json({status:"ok"})}),E.get(ZX.HEALTH_READY,async(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);let H0={};if(H0.postgres={status:await Ea6(Z.pool)?"up":"down"},U)H0.nats=U.isConnected()?{status:"up"}:{status:"down"};else H0.nats={status:"down"};let T0=H0.postgres.status==="up",A0=T0?200:503;return K0.json({status:T0?"ready":"not_ready",services:H0},A0)}),E.get(ZX.METRICS,async(K0)=>{try{let H0=await t_0.collect(),T0=za6.serialize(H0.resourceMetrics);return K0.text(T0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(H0){return console.error("Failed to collect metrics:",H0),K0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${ZX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(K0)=>{let H0=K0.req.param("queueName");if(!Ta6.has(H0))return K0.json({error:`Unknown queue: ${H0}`},404);let[T0,A0]=await Promise.all([jO.listQueuedWorkflows({queueName:H0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),jO.listQueuedWorkflows({queueName:H0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return K0.json({queue_length:T0.length,in_flight:A0.length})}),E.route("/api/config",oX8),E.route("/api/_reports",WJ8),E.route("/api/_stripe",YO1),E.route("/api/_github",FJ8({taskBoard:()=>i,contextFactory:()=>g})),E.route("/api/_git",Op);let T={db:Z.db,encryptionKey:j0().encryptionKey};E.route("/api/_jira",EJ8(T)),E.route("/api/_jira",DJ8(T)),E.route("/report",XJ8($.clientDir)),E.route("/api/auth/custom",I68),E.route("/api/auth/desktop",C68),E.all("/api/auth/admin/*",L58),E.all("/api/auth/*",async(K0)=>{return await x8.handler(K0.req.raw)});let P=S88();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",B60),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",B60),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",s40),E.route("/",x88()),E.use("/oauth-proxy/:connectionId/*",B60),E.all("/oauth-proxy/:connectionId/*",_G8);let A=async(K0)=>{let T0=await Ra6()(K0.req.raw),A0=await T0.json();return Response.json(A0,T0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",B60),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(K0)=>{let T0=await qa6()(K0.req.raw),A0=await T0.json();return Response.json(A0,T0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let f=X68({ttlMs:120000}),_=await k48({db:Z.db,auth:x8,encryption:{key:j0().encryptionKey},observability:{tracer:IO,meter:Z$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});iQ.set(_),Cp1({db:Z.db,baseUrl:m5()}),S48({db:Z.db}),b48({db:Z.db}),c48({db:Z.db}),LJ8({db:Z.db,encryptionKey:j0().encryptionKey}),zb$({db:Z.db}),t48({db:Z.db}),rb$({db:Z.db});let V=CX0(Z.db),y=new vr(Z.db),g=KG8({db:Z.db});fJ1({storage:V,studioContextFactory:g}),VX1({systemDatabaseUrl:Ls0(j0().databaseUrl,j0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$5}}),PX1({dispatchRunFn:cy$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$5}});let l=new sh(Z.db),i=new w3(Z.db),p=new _G(Z.db),U0=new PO1(i,g,p);if(j0().taskBoardReviewSweeperEnabled){U0.start();let K0=Gz;Gz=async()=>{await K0?.(),U0.dispose()}}Hg$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let K0=U?.getConnection();return K0?await vG8.jetstreamManager(K0):null},messageParts:l.messageParts(),resolveRun:async(K0)=>{let H0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",K0).executeTakeFirst();return H0?{orgId:H0.organization_id,createdBy:H0.created_by,version:H0.message_storage_version??1,status:H0.status,runFenceToken:H0.run_fence_token,title:H0.title??null}:null},completeRunIfNotCompleted:async(K0,H0)=>{let T0=await l.completeRunIfNotCompleted(K0,H0);if(E_0($5,H0,K0,T0),T0)await gd(i,K0,H0,p);return T0},markRunRequiresAction:async(K0,H0)=>{let T0=await l.requiresActionIfInProgress(K0,H0);return E_0($5,H0,K0,T0),T0},markRunFailed:async(K0,H0,T0,A0)=>{let D1=await l.markRunFailed(K0,H0,T0,A0);if(E_0($5,H0,K0,D1),D1)await gd(i,K0,H0,p);return D1},clearSynthesizedError:async(K0,H0)=>{await l.messageParts().replaceMessageParts(K0,jE(K0,H0),[])},persistTitle:(K0,H0,T0)=>l.update(K0,H0,{title:T0}),onTitleUpdated:async({runId:K0,orgId:H0,title:T0})=>{let A0=await l.get(K0,H0).catch(()=>null);$5.emit(H0,wF(K0,A0?.status??"in_progress",{title:T0,virtualMcpId:A0?.virtual_mcp_id??void 0,createdBy:A0?.created_by,triggerId:A0?.trigger_id,branch:A0?.branch??null,harnessId:A0?.harness_id??void 0,createdAt:A0?.created_at,updatedAt:A0?.updated_at}))},bumpProgress:async({runId:K0,orgId:H0})=>{await l.bumpProgress(K0,H0)},recordCompleted:async({runId:K0,orgId:H0,distinctId:T0,usage:A0})=>{f1.capture({distinctId:T0,event:"chat_message_completed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",input_tokens:A0.inputTokens,output_tokens:A0.outputTokens,total_tokens:A0.totalTokens}})},recordFailed:async({runId:K0,orgId:H0,distinctId:T0,reason:A0,kind:D1})=>{f1.capture({distinctId:T0,event:"chat_message_failed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",error_category:D1,error_message:A0}})},purgeRun:async(K0)=>{F.purge(K0)}}),Dy$({studioContextFactory:g,systemDatabaseUrl:Ls0(j0().databaseUrl,j0().databasePgSsl),streamBuffer:F}),GG8(),_p1(),_48(),f48(),d48(),jJ8(),qb$(),r48(),sb$(),NJ8();let _0=async(K0,H0,T0)=>{let A0=await V.findById(K0,H0);if(!A0)throw Error("Automation not found");return hJ1({automationId:A0.id,organizationId:A0.organization_id,triggerId:null})},G0=new Bp(V,({automation:K0,trigger:H0,contextMessages:T0,idempotencyKey:A0})=>S80({automationId:K0.id,organizationId:K0.organization_id,triggerId:H0.id,contextMessages:T0},{idempotencyKey:A0})),N0=[UK(),Ug(),IN()];for(let K0 of N0)A_0(K0).then(()=>{}).catch((H0)=>console.error("[monitoring] Retention cleanup failed:",H0));let o=()=>x8.api.deleteAllExpiredApiKeys().catch((K0)=>console.error("[auth] Expired API key cleanup failed:",K0));o(),setInterval(o,86400000).unref(),E.use("*",async(K0,H0)=>{if(c_0(K0.req.path))return H0();let T0={measure:async(D1,g$)=>{oW(K0,D1);try{return await g$()}finally{R3(K0,D1)}}},A0=await iQ.create(K0.req.raw,{timings:T0});A0.automationRunner=_0,K0.set("studioContext",A0);try{await H0()}finally{let D1=A0.pendingRevalidations;if(D1.length>0)Promise.race([Promise.allSettled(D1),L$(30000)]).catch((m$)=>console.error("[studio] revalidation cleanup error:",m$))}}),E.use("/api/:org/decopilot/*",Hp),E.use("/api/:org/v1/*",Hp),E.use("/api/:org/files/*",Hp),E.use("*",async(K0,H0)=>{if(bG8(K0.req.path))return H0();let T0=K0.get("studioContext");if(!T0?.organization?.id||!T0?.auth?.user?.id)return H0();if(!(await T0.storage.orgSsoConfig.getByOrgId(T0.organization.id))?.enforced)return H0();if(!await T0.storage.orgSsoSessions.isValid(T0.auth.user.id,T0.organization.id))return K0.json({error:"SSO authentication required for this organization"},403);return H0()});let Z0=new $1;Z0.use("*",nH({mountPath:"/api/org-sso"})),Z0.route("/",aS0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(K0)=>{return K0.json({tools:sn0,grouped:aP()})}),E.use("/mcp/*",async(K0,H0)=>{oW(K0,"mcp");try{return await H0()}finally{R3(K0,"mcp")}});let Q0=async(K0,H0)=>{let T0=K0.var.studioContext;if(!T0.auth.user?.id&&!T0.auth.apiKey?.id){let A0=new URL(K0.req.url),D1=K0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),g$=D1?`${D1}://${A0.host}`:A0.origin;return K0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${g$}${A0.pathname}/.well-known/oauth-protected-resource"`}})}return await H0()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),VW()){let{mountDevRoutes:K0}=(kG8(),S_0(VG8));K0(E,Q0)}let s=new $1;s.use("*",nH({mountPath:"/mcp"})),s.route("/",sM0()),E.route("/mcp",s);let Y0=new $1;Y0.use("*",nH({mountPath:"/mcp/self"})),Y0.route("/",lC0()),E.route("/mcp/self",Y0);let i0=new $1;i0.use("*",nH({mountPath:"/mcp"})),i0.route("/",$I0()),E.route("/mcp",i0),E.use("/api/:org/models/*",async(K0,H0)=>{oW(K0,"llm_models");try{return await H0()}finally{R3(K0,"llm_models")}});let S0=C58({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",S0),E.route("/api",TJ8);let G1=new $1;G1.use("*",nH({mountPath:"/api"})),G1.route("/",iC0()),E.route("/api",G1),E.route("/api",cX8);let l0=new $1;l0.use("*",nH({mountPath:"/api"})),l0.route("/",pC0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",l0);let L0=new xr(Z.db),E0=new $1;E0.use("*",nH({mountPath:"/api"})),E0.route("/",YC0()),E.route("/api",E0),E.route("/api/deco-sites",p58()),E.route("/api/deco-apps",fX8());let u0=new $1;u0.use("*",nH({mountPath:"/api/deco-sites"})),u0.route("/",JC0()),E.route("/api/deco-sites",u0),E.route(oS0,w58()),E.route(IQ8,SQ8()),E.route("/api/_editor-resolve",dX8()),E.route(x68,f68()),E.route(mS0,s68());let B1=j0(),Z1=B1.elevenlabsApiKey?new U_0({apiKey:B1.elevenlabsApiKey,model:B1.elevenlabsVoiceModel,conversationModel:B1.elevenlabsConversationModel,voiceId:B1.elevenlabsVoiceId}):null,v0={openai:B1.openaiLiveApiKey?new oD1({apiKey:B1.openaiLiveApiKey,voice:B1.openaiLiveVoice}):null,elevenlabs:Z1?new tD1(Z1,()=>U?.getConnection()??null):null},m0=new $O1({adapter:Z1,conversationAdapters:v0,defaults:B1,secret:B1.studioJwtSecret??B1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),p0=DX8({voiceSessions:m0,kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:$5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:VW(),mcpAuth:Q0,oauthProxyHandler:_G8,watchHandler:gG8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",p0),E.notFound((K0)=>{return K0.json({error:"Not Found",path:K0.req.path},404)}),E.onError(v58),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([$5.stop(),Gz?Promise.resolve(Gz()).finally(()=>{Gz=null}):Promise.resolve()]),U)await U.drain().catch((K0)=>console.error("[shutdown] NATS drain error:",K0));console.log("[shutdown] Flushing telemetry..."),await eX().catch((K0)=>console.error("[shutdown] Telemetry flush error:",K0)),console.log("[shutdown] Closing database..."),await fZ$(Z).catch((K0)=>console.error("[shutdown] Database close error:",K0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await jO.registerQueue(x3,{partitionQueue:!0,concurrency:vJ1,minPollingIntervalMs:bJ1}),await jO.registerQueue(b3,{partitionQueue:!0,concurrency:MX1,priorityEnabled:!0}),await jO.registerQueue(qN,{workerConcurrency:j0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(MN,{workerConcurrency:j0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await jO.registerQueue(qO,{partitionQueue:!0,concurrency:By$}),await jO.registerQueue(Uz,ob$),await hN1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((K0)=>jO.deleteQueue(K0))),await xJ1(Z.pool),YX$().catch((K0)=>{console.error("[studio-pack-backfill] failed:",K0)}),vp1().catch((K0)=>{console.error("[org-fs] public-sets boot sync kick failed:",K0)})}})}var vG8,SG8=5000,Gz=null,_G8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),Y=Q[Q.length-1],X=$.get("studioContext");if(!X)X=await iQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await Yp(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 a40(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(Y==="authorize")O=B.authorization_endpoint;else if(Y==="token")O=B.token_endpoint;else if(Y==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=b88(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=j0().baseUrl??j.origin;try{if(!yG8(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(a48(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let T=$.req.header("Authorization");if(T)E.Authorization=T;let P,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let p=atob(T.slice(6).trim()),U0=p.indexOf(":");if(U0!==-1){let _0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.slice(U0+1));A=_0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof l==="string"&&l)q=l;let i=new URLSearchParams;for(let[p,U0]of y.entries())i.append(p,U0.toString());P=i.toString()}else if(Y==="register"&&z?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),l={};try{l=g?JSON.parse(g):{}}catch{P=g}let i=typeof l==="object"&&l!==null&&!Array.isArray(l);if(P===void 0&&!i)P=g;if(P===void 0){let p=l,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},P=JSON.stringify(p),E["Content-Type"]="application/json"}}else P=$.req.raw.body??void 0;let f=await fetch(w.toString(),{method:$.req.method,headers:E,body:P,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of f.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&f.ok){let y=await f.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,i=null;try{i=await Xp(G.connection_url)??O}catch{i=O}let p={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:l,clientId:A,clientSecret:q,tokenEndpoint:i};await new w9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:f.status,statusText:f.statusText,headers:_})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:_})},gG8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let Y=Z.organization?.id;if(!Y)return $.json({error:"organization id missing"},400);let X=$.req.query("types"),J=X?X.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!dU(Y)||!await iU(Z)))return $.json({error:"forbidden"},403);let W=G?Bq0:Y;if(G)fD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return DO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!$5.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{$5.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),$5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),$5.remove(W,K),N()})})})},za6,Ta6,Ra6=()=>Aa6(x8),qa6=()=>Pa6(x8);var uG8=D(()=>{r$();$$();bp1();v48();y48();i48();g80();hQ1();s48();l$0();V9();sc();p8();J8();hS0();Y68();lJ1();Y3();EU();WN1();vG();k6();$6();DN1();_68();y68();a68();zN1();j58();kN1();fN1();yN1();DH();PS0();gN1();b58();lS0();OX8();zX8();PX8();qX8();xX8();cN1();yX8();aM0();_80();mX8();ZI0();wD1();iX8();OD1();rX8();JJ8();KJ8();HJ8();UJ8();BJ8();OJ8();zJ8();UO1();nN1();RJ8();LD1();ND1();j50();lJ8();bJ();sT0();JY1();Q00();X00();pJ1();cJ8();dJ8();bN1();sJ8();EX1();aJ8();Oo();gr();xD();A9();IU1();YG8();WG8();O30();AO1();f3();uN1();bD();LX1();O30();BM0();yn0();gn0();HG8();$l();BG8();Cp();WN1();Sd();id();XM0();vG8=C(EK(),1);za6=new ja6,Ta6=new Set([x3,b3,qN,MN,qO,Uz])});var dG8={};Q6(dG8,{resolveClientDir:()=>va6,resolveAssetPathWithTraversalCheck:()=>mG8,isPathWithinDirectory:()=>cG8,createAssetHandler:()=>ba6});import{resolve as Y50,dirname as Ia6,join as Va6,extname as ka6,basename as Sa6,sep as lG8}from"path";function Ca6($,Z){if($===Z||Sa6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${lG8}assets${lG8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function cG8($,Z){let Q=Y50(Z),Y=Y50($);return Y===Q||Y.startsWith(Q+"/")}function mG8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=Y50(Z,Q);if(!cG8(Y,Z))return null;return Y}function va6($,Z="../client"){let Q=new URL($),Y=Ia6(Q.pathname);return Y50(Y,Z)}function ba6($={}){let{env:Z="production",clientDir:Q=_a6,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=mG8({requestPath:W,clientDir:Q});if(!K)return null;let H=Va6(K,"index.html"),F=Y50(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(ka6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:Ca6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var _a6="./dist/client";var iG8=()=>{};var pG8={};Q6(pG8,{tryUpgradePreviewWs:()=>la6,tryHandlePreviewHttp:()=>ua6,previewWebSocketHandler:()=>ca6,parsePreviewBaseDomain:()=>ha6,isPreviewWsData:()=>T_0,extractHandleFromHost:()=>CO1});function ya6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function ga6(){return new Response(fa6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function ha6($){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 CO1($,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 ua6($,Z){let Q=CO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return J50(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(cm)&&ya6($))return ga6();return X.headers.delete(cm),X}function J50($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function T_0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function la6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=CO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return J50(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return J50(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return J50(404,"not found");let W=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,K=$.headers.get("sec-websocket-protocol"),H=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return J50(426,"upgrade failed");return}function X50($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var xa6=256,fa6='<!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>',ca6;var nG8=D(()=>{I10();ca6={open($){let Z=$.data;if(!T_0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),X50($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let Y=Z.pending.shift();if(Y!==void 0)Q.send(Y)}}),Q.addEventListener("message",(Y)=>{if(Z.closed)return;$.send(Y.data)}),Q.addEventListener("close",(Y)=>{X50($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{X50($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!T_0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=xa6){X50($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!T_0(Z))return;X50($,Z,1000,"")}}});var sG8={};Q6(sG8,{printBanner:()=>da6,bannerLines:()=>rG8,BANNER_LINES:()=>tG8,BANNER_GRADIENT:()=>oG8});function ma6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function rG8($){let Z=tG8.map((Q,Y)=>{let[X,J,G]=ma6(oG8[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 da6($){console.log("");for(let Z of rG8($))console.log(Z);console.log("")}var tG8,oG8;var aG8=D(()=>{tG8=[" \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 "],oG8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});r$();var dO1="13";function iO1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:dO1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}r$();import L38 from"pg";var pO1=8314027461559302n,w38=600000,j38=500;async function nO1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=w38}=$,X=$.log??((K)=>console.log(K)),J=new L38.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",[pO1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=Y)throw Error(`Timed out after ${Y}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await L$(j38)}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)",[pO1.toString()])}catch{}await J.end().catch(()=>{})}}$$();b_0();k6();function LW8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function s_0($,Z){for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Y===void 0)continue;if(Y===Z)return $[Q+1];if(Y.startsWith(`${Z}=`))return Y.slice(Z.length+1)}return}function SL1(){let $=LW8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:s_0($,"--cpu-prof-dir")??process.cwd(),name:s_0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(s_0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}$v0();var P50;function hL1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Dz();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...Y}))};return Z().catch(()=>{}),P50=setInterval(()=>void Z().catch(()=>{}),$),P50.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),Y=typeof Q==="string"?Q:JSON.stringify(Q),X=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(X,Y),console.log(JSON.stringify({msg:"heap-snapshot-written",path:X}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(P50)clearInterval(P50)}}import*as EW8 from"bun:jsc";var{startSamplingProfiler:zW8,samplingProfilerStackTraces:PW8}=EW8;function uL1(){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{zW8()}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=PW8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function lL1(){SL1();let $=[hL1(),gL1(),uL1()];return()=>{for(let Z of $)Z()}}import{existsSync as aa6}from"fs";var FG=j0();IL1();var{DBOS:G50,DBOSClient:ia6}=await import("@dbos-inc/dbos-sdk");function yO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var pa6=[x3,b3,qN,MN,qO,Uz],na6=FG.dispatchRole==="worker"?pa6:FG.dispatchRole==="api"?[]:void 0;G50.setConfig(iO1({systemDatabaseUrl:yO1(FG.databaseUrl,FG.databasePgSsl),poolSize:FG.dbosPoolSize,executorID:FG.podName,listenQueues:na6}));var{createApp:ta6}=await Promise.resolve().then(() => (uG8(),hG8)),{isServerPath:oa6}=await Promise.resolve().then(() => (j50(),FL1)),{createAssetHandler:ra6,resolveClientDir:Y38}=await Promise.resolve().then(() => (iG8(),dG8)),sa6=FG.port,eG8=Y38(import.meta.url,"../client"),X38=aa6(eG8)?eG8:Y38(import.meta.url,"../dist/client"),ea6=ra6({clientDir:X38,isServerPath:oa6}),$e6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function Ze6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries($e6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:Qe6,tryHandlePreviewHttp:Ye6,tryUpgradePreviewWs:Xe6,previewWebSocketHandler:_O1,isPreviewWsData:vO1}=await Promise.resolve().then(() => (nG8(),pG8)),{getOrInitSharedRunner:J38}=await Promise.resolve().then(() => (uW(),yR$)),G38=Qe6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),$38={baseDomain:G38??"",getRunner:J38};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())J38().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var R_0=await ta6({clientDir:X38}),bO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),Z38=process.env.DBOS_CONDUCTOR_URL?.trim();await nO1({databaseUrl:yO1(FG.databaseUrl,FG.databasePgSsl)},()=>G50.launch({...bO1?{conductorKey:bO1}:{},...bO1&&Z38?{conductorURL:Z38}:{}}));console.log(`[dbos] application version: ${G50.applicationVersion}`);var xO1=5,fO1=0;await E8(async()=>{fO1++;try{return await R_0.initDbos()}catch($){let Z=fO1>=xO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${fO1}/${xO1} failed, ${Z}`,$),$}},{maxAttempts:xO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!FG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (aG8(),sG8));console.log("");for(let Z of $())console.log(Z)}var Je6=Bun.serve({idleTimeout:0,port:sa6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(G38){let Y=await Xe6($,Z,$38);if(Y===void 0)return;if(Y)return Y;let X=await Ye6($,$38);if(X)return X}let Q=await ea6($);if(Q)return Ze6(Q);return R_0.fetch($,{server:Z})},websocket:{open($){if(vO1($.data))_O1.open($)},message($,Z){if(vO1($.data))_O1.message($,Z)},close($){if(vO1($.data))_O1.close($)}},development:!1}),Ge6=lL1();if(FG.localMode)Promise.resolve().then(() => (cf(),iq0)).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(() => (cf(),iq0));Z()}catch{}});var Q38=!1;async function We6($){let Z;try{Z=await ia6.create({systemDatabaseUrl:yO1(FG.databaseUrl,FG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:b3,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:b3}),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 q_0($){if(Q38)return;Q38=!0,console.log(`
|
|
3719
3719
|
[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{Ge6(),R_0.markShuttingDown();let J=oO1(FG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await L$(J),await Je6.stop(!0);let G=G50.executorID;await G50.shutdown(),await We6(G),await R_0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>q_0("SIGTERM"));process.on("SIGINT",()=>q_0("SIGINT"));process.on("SIGHUP",()=>q_0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),q_0("uncaughtException")});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as s,M as u}from"./index-D7hYEfbN.js";import{C as f}from"./index-Bie3Yt7i.js";import{a as x}from"./thread-route-BurLlqRF.js";import{u as g}from"./use-task-metadata-DQimkwOj.js";import{AppViewContent as h}from"./project-app-view-D5z0m56j.js";import"./use-mobile-DrPHToxA.js";import"./thread-button-RXmpO_s6.js";import"./agent-icon-1OqzsUAE.js";import"./AlertCircle-3t4CitpU.js";import"./Tool01-DyzplouF.js";import"./ArrowUp-DQk9lIXC.js";import"./ArrowLeft-BbJmgkdx.js";import"./LinkBroken01-FGx4hlpz.js";import"./ShoppingBag01-DJPwdB_I.js";import"./ZoomOut-B0FMI__D.js";import"./Building02-FDWlk2dX.js";import"./CheckCircle-DP_Yeb-b.js";import"./Check-BhlN5Gfa.js";import"./ChevronUp-BUjD5px7.js";import"./UserSquare-CI-KdVX2.js";import"./Copy01-B7ecNUq1.js";import"./CreditCard01-DylNWQDW.js";import"./DotsVertical-CMBMcjBX.js";import"./Image01-jyAhhinO.js";import"./Palette-92eAR3c0.js";import"./XClose-KUaLXy6Q.js";import"./Key01-DwEPbnXb.js";import"./Link01-D8H87QlU.js";import"./LinkExternal01-Chk3wQjH.js";import"./Monitor01-C4DfOzWo.js";import"./Sun-D28dVpFO.js";import"./Plus-CLQei2e6.js";import"./SearchMd-B4g7zoIg.js";import"./Trash01-B2AvA9FK.js";import"./Upload01-_iBVm55R.js";import"./User01-DuKYzVz8.js";import"./Users01-utuHNJ9R.js";import"./X-BQXAAYgl.js";import"./use-chat-layout-state-CNWV4oOZ.js";import"./use-file-configs-BHKDkTjC.js";import"./use-organization-settings-C3-_kI_g.js";import"./schema-gvXoFVGC.js";import"./task-board-B1uWZU9K.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-Ck4N-ZB8.js";import"./use-project-scope-Dy6ai4MQ.js";import"./repository-binding-BPtbugRj.js";import"./use-mcp-client-Dv0wmo61.js";import"./auth-Be85fS22.js";import"./thread-intent-DD3seycr.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-Bp0OaYM9.js";import"./tooltip-Ch7JwSjZ.js";import"./index-0zdxHEgU.js";import"./toolbar-icon-button-ClIJFPkR.js";import"./shell-layout-DMqLVaPa.js";import"./avatar-DPiZM9JI.js";import"./download-app-dialog-C3Ji56be.js";import"./dialog--2DE59f4.js";import"./use-clock-tick-CBfGh-8T.js";import"./command-a4IN63yc.js";import"./index-CYlLocPz.js";import"./integration-icon-51EB-LjE.js";import"./project-icon-zUFSPGzx.js";import"./new-project-dialog-i2AjdXpL.js";import"./input-B5SM5NFH.js";import"./label-BkKmAPrZ.js";import"./repository-import-picker-DY8NkFcl.js";import"./use-navigate-to-agent-B6Jnpp7k.js";import"./repository-picker-Bu_60yv3.js";import"./useInfiniteQuery-CApTsxJ0.js";import"./infiniteQueryObserver-rN5E5eR_.js";import"./collection-search-Daq9kKuN.js";import"./use-debounced-value-DtOEJwy7.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-BgvVX7TS.js";import"./autosend-CRAaDm47.js";import"./use-org-sso-B7-QiCKC.js";import"./resizable-DMRcTvG9.js";import"./icon-button-BRiA9kiV.js";import"./gateway-client-BI4FJ_tT.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-DjBYc1XK.js";import"./sandbox-lifecycle-context-BJunzywm.js";import"./use-session-runtime-DdeuwCmv.js";import"./chat-context-SQR_HnrV.js";import"./use-decopilot-events-Dz93drkG.js";import"./use-ai-providers-shWbOxLc.js";import"./location-DPIrGNp7.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-B-h9M4vf.js";import"./types-DCK-IvKM.js";import"./task-route-DRf0NxDf.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-DBuhvmdP.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-es3qsNvx.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-B78AFarR.js";import"./authenticate-and-persist-oauth-DZ9TfDha.js";import"./mcp-oauth-q_WDhaFd.js";import"./track-yFV_-KUI.js";import"./extract-connection-data-zlkqkzoy.js";import"./connection-CAG14zGZ.js";const $=u("/shell/$org/org-shell/agent-shell/projects/$agentId/apps/$connectionId/$toolName");function j(){const t=c.c(9),{connectionId:o,toolName:r}=$.useParams(),l=x(),i=g(l);let p;t[0]!==o||t[1]!==i?.expanded_tools||t[2]!==r?(p=i?.expanded_tools?.find(a=>a.appId===o&&a.toolName===r),t[0]=o,t[1]=i?.expanded_tools,t[2]=r,t[3]=p):p=t[3];const d=p,e=`${o}:${r}`,n=d?.args;let m;return t[4]!==o||t[5]!==e||t[6]!==n||t[7]!==r?(m=s.jsx(h,{connectionId:o,toolName:r,args:n},e),t[4]=o,t[5]=e,t[6]=n,t[7]=r,t[8]=m):m=t[8],m}function Co(){const t=c.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(f.Content,{children:s.jsx(j,{})}),t[0]=o):o=t[0],o}export{Co as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as e,aS as b,u as g}from"./index-D7hYEfbN.js";import{C as j}from"./index-Bie3Yt7i.js";import{F as v,H as S}from"./file-share-button-BSE3y3HH.js";import{u as k,b as y,e as _}from"./use-org-fs-BONY9uyR.js";import{S as w}from"./settings-tab-CrMl0HQX.js";import{b as M}from"./thread-route-BurLlqRF.js";import"./use-mobile-DrPHToxA.js";import"./thread-button-RXmpO_s6.js";import"./agent-icon-1OqzsUAE.js";import"./AlertCircle-3t4CitpU.js";import"./Tool01-DyzplouF.js";import"./ArrowUp-DQk9lIXC.js";import"./ArrowLeft-BbJmgkdx.js";import"./LinkBroken01-FGx4hlpz.js";import"./ShoppingBag01-DJPwdB_I.js";import"./ZoomOut-B0FMI__D.js";import"./Building02-FDWlk2dX.js";import"./CheckCircle-DP_Yeb-b.js";import"./Check-BhlN5Gfa.js";import"./ChevronUp-BUjD5px7.js";import"./UserSquare-CI-KdVX2.js";import"./Copy01-B7ecNUq1.js";import"./CreditCard01-DylNWQDW.js";import"./DotsVertical-CMBMcjBX.js";import"./Image01-jyAhhinO.js";import"./Palette-92eAR3c0.js";import"./XClose-KUaLXy6Q.js";import"./Key01-DwEPbnXb.js";import"./Link01-D8H87QlU.js";import"./LinkExternal01-Chk3wQjH.js";import"./Monitor01-C4DfOzWo.js";import"./Sun-D28dVpFO.js";import"./Plus-CLQei2e6.js";import"./SearchMd-B4g7zoIg.js";import"./Trash01-B2AvA9FK.js";import"./Upload01-_iBVm55R.js";import"./User01-DuKYzVz8.js";import"./Users01-utuHNJ9R.js";import"./X-BQXAAYgl.js";import"./use-chat-layout-state-CNWV4oOZ.js";import"./use-file-configs-BHKDkTjC.js";import"./use-organization-settings-C3-_kI_g.js";import"./schema-gvXoFVGC.js";import"./task-board-B1uWZU9K.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-Ck4N-ZB8.js";import"./use-project-scope-Dy6ai4MQ.js";import"./repository-binding-BPtbugRj.js";import"./use-mcp-client-Dv0wmo61.js";import"./auth-Be85fS22.js";import"./thread-intent-DD3seycr.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-Bp0OaYM9.js";import"./tooltip-Ch7JwSjZ.js";import"./index-0zdxHEgU.js";import"./toolbar-icon-button-ClIJFPkR.js";import"./shell-layout-DMqLVaPa.js";import"./avatar-DPiZM9JI.js";import"./download-app-dialog-C3Ji56be.js";import"./dialog--2DE59f4.js";import"./use-clock-tick-CBfGh-8T.js";import"./command-a4IN63yc.js";import"./index-CYlLocPz.js";import"./integration-icon-51EB-LjE.js";import"./project-icon-zUFSPGzx.js";import"./new-project-dialog-i2AjdXpL.js";import"./input-B5SM5NFH.js";import"./label-BkKmAPrZ.js";import"./repository-import-picker-DY8NkFcl.js";import"./use-navigate-to-agent-B6Jnpp7k.js";import"./repository-picker-Bu_60yv3.js";import"./useInfiniteQuery-CApTsxJ0.js";import"./infiniteQueryObserver-rN5E5eR_.js";import"./collection-search-Daq9kKuN.js";import"./use-debounced-value-DtOEJwy7.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-BgvVX7TS.js";import"./autosend-CRAaDm47.js";import"./use-org-sso-B7-QiCKC.js";import"./resizable-DMRcTvG9.js";import"./icon-button-BRiA9kiV.js";import"./popover-Ddsbw8vr.js";import"./extract-connection-data-zlkqkzoy.js";import"./metadata-D72DunRR.js";import"./connection-CAG14zGZ.js";import"./chat-context-SQR_HnrV.js";import"./use-decopilot-events-Dz93drkG.js";import"./use-ai-providers-shWbOxLc.js";import"./location-DPIrGNp7.js";import"./build-improve-prompt-doc-BdY8sMUa.js";import"./empty-state-Ba4Lmj53.js";import"./use-date-fns-locale--kApxv3j.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-Roi-SyxA.js";import"./mcp-oauth-q_WDhaFd.js";import"./alert-dialog-BfxfbeRo.js";import"./textarea-C8e48cUD.js";import"./use-debounced-autosave-BGrGYaC5.js";import"./add-connection-dialog--aaGSX_P.js";import"./connection-card-ACWoimrM.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-CmCYRv71.js";import"./form-es3qsNvx.js";import"./select-Bo385QnQ.js";import"./connection-form-helpers-BxVe0XvV.js";import"./authenticate-and-persist-oauth-DZ9TfDha.js";import"./collection-tabs-DtjUs1A5.js";import"./badge-C70X12A9.js";import"./use-infinite-scroll-CIbeXSaG.js";import"./useSuspenseInfiniteQuery--aIXJiP3.js";import"./file-type-icon-Hh_qpvql.js";import"./checkbox-dRd9g2H5.js";import"./search-input-C9kf2QzG.js";import"./use-mcp-auth-status-BtDthgG6.js";import"./types-DCK-IvKM.js";import"./use-mcp-tools-DjBYc1XK.js";import"./use-mcp-prompts-DaqWVfi5.js";import"./utils-CVEq3hMx.js";import"./switch-O2yDEU3w.js";import"./scroll-area-BGXFjpgk.js";import"./optimistic-project-sidebar-views-C5dOi8KI.js";import"./virtual-mcp-Dd7G1yTs.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-CXDBfcj0.js";import"./use-secrets-B6JGnS88.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function P(i){const t=c.c(5),{label:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p=e.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=p):p=t[0];let o;t[1]!==r?(o=r&&e.jsx("p",{className:"text-xs text-muted-foreground",children:r}),t[1]=r,t[2]=o):o=t[2];let m;return t[3]!==o?(m=e.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[p,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p={refetchIntervalWhenAbsent:2e3},t[0]=p):p=t[0];const o=k(x,r,p),m=y(x)(r);if(o.isPending||!o.data){const h=!o.isPending&&!o.data?"Waiting for the deck to sync…":void 0;let l;return t[1]!==h?(l=e.jsx(P,{label:h}),t[1]=h,t[2]=l):l=t[2],l}let s;t[3]!==o.data?(s=_(o.data),t[3]=o.data,t[4]=s):s=t[4];const f=o.data.shareMode??"private",u=o.data.effectivePublic??!1,d=window.location.origin+m;let a;t[5]!==r||t[6]!==f||t[7]!==u||t[8]!==d?(a=e.jsx(v,{volume:x,path:r,shareMode:f,effectivePublic:u,url:d}),t[5]=r,t[6]=f,t[7]=u,t[8]=d,t[9]=a):a=t[9];let n;return t[10]!==r||t[11]!==m||t[12]!==s||t[13]!==a?(n=e.jsx(S,{readUrl:m,marker:s,title:r,savePath:r,trailing:a}),t[10]=r,t[11]=m,t[12]=s,t[13]=a,t[14]=n):n=t[14],n}function C(){const i=c.c(4);let t;i[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},i[0]=t):t=i[0];const r=g(t),p=M(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==p?(m=o?e.jsx(D,{path:o},o):e.jsx(w,{virtualMcpId:p}),i[1]=o,i[2]=p,i[3]=m):m=i[3],m}function Xo(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(j.Content,{children:e.jsx(C,{})}),i[0]=t):t=i[0],t}export{Xo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as s,j as e}from"./index-D7hYEfbN.js";import{C as a}from"./index-Bie3Yt7i.js";import{p as n,L as c}from"./library-tab-ayplxw28.js";import{u as l}from"./use-project-scope-Dy6ai4MQ.js";import"./use-mobile-DrPHToxA.js";import"./thread-button-RXmpO_s6.js";import"./agent-icon-1OqzsUAE.js";import"./AlertCircle-3t4CitpU.js";import"./Tool01-DyzplouF.js";import"./ArrowUp-DQk9lIXC.js";import"./ArrowLeft-BbJmgkdx.js";import"./LinkBroken01-FGx4hlpz.js";import"./ShoppingBag01-DJPwdB_I.js";import"./ZoomOut-B0FMI__D.js";import"./Building02-FDWlk2dX.js";import"./CheckCircle-DP_Yeb-b.js";import"./Check-BhlN5Gfa.js";import"./ChevronUp-BUjD5px7.js";import"./UserSquare-CI-KdVX2.js";import"./Copy01-B7ecNUq1.js";import"./CreditCard01-DylNWQDW.js";import"./DotsVertical-CMBMcjBX.js";import"./Image01-jyAhhinO.js";import"./Palette-92eAR3c0.js";import"./XClose-KUaLXy6Q.js";import"./Key01-DwEPbnXb.js";import"./Link01-D8H87QlU.js";import"./LinkExternal01-Chk3wQjH.js";import"./Monitor01-C4DfOzWo.js";import"./Sun-D28dVpFO.js";import"./Plus-CLQei2e6.js";import"./SearchMd-B4g7zoIg.js";import"./Trash01-B2AvA9FK.js";import"./Upload01-_iBVm55R.js";import"./User01-DuKYzVz8.js";import"./Users01-utuHNJ9R.js";import"./X-BQXAAYgl.js";import"./use-chat-layout-state-CNWV4oOZ.js";import"./use-file-configs-BHKDkTjC.js";import"./use-organization-settings-C3-_kI_g.js";import"./schema-gvXoFVGC.js";import"./task-board-B1uWZU9K.js";import"./site-slug-DebpOoQq.js";import"./thread-route-BurLlqRF.js";import"./use-panel-navigate-Ck4N-ZB8.js";import"./thread-intent-DD3seycr.js";import"./use-mcp-client-Dv0wmo61.js";import"./auth-Be85fS22.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-Bp0OaYM9.js";import"./tooltip-Ch7JwSjZ.js";import"./index-0zdxHEgU.js";import"./toolbar-icon-button-ClIJFPkR.js";import"./shell-layout-DMqLVaPa.js";import"./avatar-DPiZM9JI.js";import"./download-app-dialog-C3Ji56be.js";import"./dialog--2DE59f4.js";import"./use-clock-tick-CBfGh-8T.js";import"./command-a4IN63yc.js";import"./index-CYlLocPz.js";import"./integration-icon-51EB-LjE.js";import"./project-icon-zUFSPGzx.js";import"./new-project-dialog-i2AjdXpL.js";import"./input-B5SM5NFH.js";import"./label-BkKmAPrZ.js";import"./repository-import-picker-DY8NkFcl.js";import"./use-navigate-to-agent-B6Jnpp7k.js";import"./repository-binding-BPtbugRj.js";import"./repository-picker-Bu_60yv3.js";import"./useInfiniteQuery-CApTsxJ0.js";import"./infiniteQueryObserver-rN5E5eR_.js";import"./collection-search-Daq9kKuN.js";import"./use-debounced-value-DtOEJwy7.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-BgvVX7TS.js";import"./autosend-CRAaDm47.js";import"./use-org-sso-B7-QiCKC.js";import"./resizable-DMRcTvG9.js";import"./icon-button-BRiA9kiV.js";import"./search-toggle-DxL1CEhR.js";import"./alert-dialog-BfxfbeRo.js";import"./location-DPIrGNp7.js";import"./use-org-fs-BONY9uyR.js";import"./use-org-repo-syncs-W4ado92l.js";import"./textarea-C8e48cUD.js";import"./markdown-DI9weIuO.js";import"./org-file-open-context-CjL3Ry7C.js";import"./file-share-button-BSE3y3HH.js";import"./popover-Ddsbw8vr.js";import"./preview-dialog-Db2IsUqO.js";import"./preview-content-CsmLbvef.js";import"./file-preview-BK6HWgQz.js";import"./utils-rWt92hWs.js";import"./editor-Q8fTwJVK.js";import"./file-type-icon-Hh_qpvql.js";import"./folder-icon-CKdtOEi8.js";import"./skill-md-ChfVs4uF.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-cs-obaRn.js";function mo(){const t=s.c(6),{project:o}=l(),p=o?.id??"pending";let r;t[0]!==o?(r=o?n(o):void 0,t[0]=o,t[1]=r):r=t[1];const m=o?.title??void 0;let i;return t[2]!==p||t[3]!==r||t[4]!==m?(i=e.jsx(a.Content,{children:e.jsx(c,{root:r,rootLabel:m},p)}),t[2]=p,t[3]=r,t[4]=m,t[5]=i):i=t[5],i}export{mo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as a,j as s,u as n}from"./index-D7hYEfbN.js";import{C as l}from"./index-Bie3Yt7i.js";import{L as c}from"./preview-content-CsmLbvef.js";import{a as f}from"./use-panel-navigate-Ck4N-ZB8.js";import{S as u}from"./settings-tab-CrMl0HQX.js";import{b as h}from"./thread-route-BurLlqRF.js";import"./use-mobile-DrPHToxA.js";import"./thread-button-RXmpO_s6.js";import"./agent-icon-1OqzsUAE.js";import"./AlertCircle-3t4CitpU.js";import"./Tool01-DyzplouF.js";import"./ArrowUp-DQk9lIXC.js";import"./ArrowLeft-BbJmgkdx.js";import"./LinkBroken01-FGx4hlpz.js";import"./ShoppingBag01-DJPwdB_I.js";import"./ZoomOut-B0FMI__D.js";import"./Building02-FDWlk2dX.js";import"./CheckCircle-DP_Yeb-b.js";import"./Check-BhlN5Gfa.js";import"./ChevronUp-BUjD5px7.js";import"./UserSquare-CI-KdVX2.js";import"./Copy01-B7ecNUq1.js";import"./CreditCard01-DylNWQDW.js";import"./DotsVertical-CMBMcjBX.js";import"./Image01-jyAhhinO.js";import"./Palette-92eAR3c0.js";import"./XClose-KUaLXy6Q.js";import"./Key01-DwEPbnXb.js";import"./Link01-D8H87QlU.js";import"./LinkExternal01-Chk3wQjH.js";import"./Monitor01-C4DfOzWo.js";import"./Sun-D28dVpFO.js";import"./Plus-CLQei2e6.js";import"./SearchMd-B4g7zoIg.js";import"./Trash01-B2AvA9FK.js";import"./Upload01-_iBVm55R.js";import"./User01-DuKYzVz8.js";import"./Users01-utuHNJ9R.js";import"./X-BQXAAYgl.js";import"./use-chat-layout-state-CNWV4oOZ.js";import"./use-file-configs-BHKDkTjC.js";import"./use-organization-settings-C3-_kI_g.js";import"./schema-gvXoFVGC.js";import"./task-board-B1uWZU9K.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-DD3seycr.js";import"./use-mcp-client-Dv0wmo61.js";import"./auth-Be85fS22.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-Dy6ai4MQ.js";import"./repository-binding-BPtbugRj.js";import"./sheet-Bp0OaYM9.js";import"./tooltip-Ch7JwSjZ.js";import"./index-0zdxHEgU.js";import"./toolbar-icon-button-ClIJFPkR.js";import"./shell-layout-DMqLVaPa.js";import"./avatar-DPiZM9JI.js";import"./download-app-dialog-C3Ji56be.js";import"./dialog--2DE59f4.js";import"./use-clock-tick-CBfGh-8T.js";import"./command-a4IN63yc.js";import"./index-CYlLocPz.js";import"./integration-icon-51EB-LjE.js";import"./project-icon-zUFSPGzx.js";import"./new-project-dialog-i2AjdXpL.js";import"./input-B5SM5NFH.js";import"./label-BkKmAPrZ.js";import"./repository-import-picker-DY8NkFcl.js";import"./use-navigate-to-agent-B6Jnpp7k.js";import"./repository-picker-Bu_60yv3.js";import"./useInfiniteQuery-CApTsxJ0.js";import"./infiniteQueryObserver-rN5E5eR_.js";import"./collection-search-Daq9kKuN.js";import"./use-debounced-value-DtOEJwy7.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-BgvVX7TS.js";import"./autosend-CRAaDm47.js";import"./use-org-sso-B7-QiCKC.js";import"./resizable-DMRcTvG9.js";import"./icon-button-BRiA9kiV.js";import"./file-preview-BK6HWgQz.js";import"./use-org-fs-BONY9uyR.js";import"./utils-rWt92hWs.js";import"./editor-Q8fTwJVK.js";import"./file-type-icon-Hh_qpvql.js";import"./markdown-DI9weIuO.js";import"./location-DPIrGNp7.js";import"./org-file-open-context-CjL3Ry7C.js";import"./file-share-button-BSE3y3HH.js";import"./popover-Ddsbw8vr.js";import"./extract-connection-data-zlkqkzoy.js";import"./metadata-D72DunRR.js";import"./connection-CAG14zGZ.js";import"./chat-context-SQR_HnrV.js";import"./use-decopilot-events-Dz93drkG.js";import"./use-ai-providers-shWbOxLc.js";import"./build-improve-prompt-doc-BdY8sMUa.js";import"./empty-state-Ba4Lmj53.js";import"./use-date-fns-locale--kApxv3j.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-Roi-SyxA.js";import"./mcp-oauth-q_WDhaFd.js";import"./alert-dialog-BfxfbeRo.js";import"./textarea-C8e48cUD.js";import"./use-debounced-autosave-BGrGYaC5.js";import"./add-connection-dialog--aaGSX_P.js";import"./connection-card-ACWoimrM.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-CmCYRv71.js";import"./form-es3qsNvx.js";import"./select-Bo385QnQ.js";import"./connection-form-helpers-BxVe0XvV.js";import"./authenticate-and-persist-oauth-DZ9TfDha.js";import"./collection-tabs-DtjUs1A5.js";import"./badge-C70X12A9.js";import"./use-infinite-scroll-CIbeXSaG.js";import"./useSuspenseInfiniteQuery--aIXJiP3.js";import"./checkbox-dRd9g2H5.js";import"./search-input-C9kf2QzG.js";import"./use-mcp-auth-status-BtDthgG6.js";import"./types-DCK-IvKM.js";import"./use-mcp-tools-DjBYc1XK.js";import"./use-mcp-prompts-DaqWVfi5.js";import"./utils-CVEq3hMx.js";import"./switch-O2yDEU3w.js";import"./scroll-area-BGXFjpgk.js";import"./optimistic-project-sidebar-views-C5dOi8KI.js";import"./virtual-mcp-Dd7G1yTs.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-CXDBfcj0.js";import"./use-secrets-B6JGnS88.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=a.c(4),{previewPath:m,onClose:p,showSeeInLibrary:o}=r,i=o===void 0?!1:o;let e;return t[0]!==p||t[1]!==m||t[2]!==i?(e=s.jsx("div",{className:"flex h-full w-full flex-col bg-background",children:s.jsx(c,{previewPath:m,onClose:p,showSeeInLibrary:i,variant:"panel"})}),t[0]=p,t[1]=m,t[2]=i,t[3]=e):e=t[3],e}function x(r){const t=a.c(5),{path:m}=r,{closePanel:p}=f();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let e;return t[2]!==i||t[3]!==m?(e=s.jsx(b,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=e):e=t[4],e}function y(){const r=a.c(4);let t;r[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},r[0]=t):t=r[0];const m=n(t),p=h(),o="path"in m&&typeof m.path=="string"?m.path:void 0;let i;return r[1]!==o||r[2]!==p?(i=o?s.jsx(x,{path:o},o):s.jsx(u,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Hr(){const r=a.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(l.Content,{children:s.jsx(y,{})}),r[0]=t):t=r[0],t}export{Hr as default};
|