decocms 4.400.6 → 4.401.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-CiIF9Yxb.js → AlertCircle-CPEr23R9.js} +1 -1
- package/dist/client/assets/{AreaChart-CiScmeLa.js → AreaChart-BRp3tfJa.js} +1 -1
- package/dist/client/assets/{ArrowLeft-Cw8zoASu.js → ArrowLeft-gHnXneZZ.js} +1 -1
- package/dist/client/assets/{ArrowRight-DXuJxv6z.js → ArrowRight-BRVmWkaB.js} +1 -1
- package/dist/client/assets/{ArrowUp-i7W4PLl8.js → ArrowUp-CNjJZghs.js} +1 -1
- package/dist/client/assets/{CartesianChart-CAtvwpDL.js → CartesianChart-D55BfjHL.js} +1 -1
- package/dist/client/assets/{Check-Cxn5ODoZ.js → Check-CVeTZNSw.js} +1 -1
- package/dist/client/assets/{CheckCircle-Cb0ohXc_.js → CheckCircle-B2OjIV2w.js} +1 -1
- package/dist/client/assets/{ChevronUp-B3Rmv2Rm.js → ChevronUp-BgbDGchl.js} +1 -1
- package/dist/client/assets/{Copy01-CDFMtB2-.js → Copy01-BrBAdqBW.js} +1 -1
- package/dist/client/assets/{CreditCard01-Bpp7DUE2.js → CreditCard01-BXJ6Scir.js} +1 -1
- package/dist/client/assets/{DotsVertical-CsphgVVa.js → DotsVertical-DgVfgwq5.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-Cmgr12jK.js → ErrorBarContext-XTxohn4s.js} +1 -1
- package/dist/client/assets/{Eye-BaKrr1k0.js → Eye-CRAkr59H.js} +1 -1
- package/dist/client/assets/{Globe04-BjYimuB_.js → Globe04-kjveQbT-.js} +1 -1
- package/dist/client/assets/{Image01-BokX_Ygh.js → Image01-BBSpdC7P.js} +1 -1
- package/dist/client/assets/{Key01--iK_92aj.js → Key01-B-c3zcwk.js} +1 -1
- package/dist/client/assets/{LayoutLeft-DbmxTpPW.js → LayoutLeft-Cy2wqUJU.js} +1 -1
- package/dist/client/assets/{Line-CkGSu-B6.js → Line-C-JVEX3h.js} +1 -1
- package/dist/client/assets/{Link01-CwRVjiFm.js → Link01-C907Gz0z.js} +1 -1
- package/dist/client/assets/{LinkExternal01-C1LIoQUC.js → LinkExternal01-BeOpv0ks.js} +1 -1
- package/dist/client/assets/{Monitor01-B-jx6SlO.js → Monitor01-rI1gjgbD.js} +1 -1
- package/dist/client/assets/{Palette-BZ8zPcQQ.js → Palette-wj6TPRrn.js} +1 -1
- package/dist/client/assets/{Plus-BeOCeSsu.js → Plus-DQ8YbhOD.js} +1 -1
- package/dist/client/assets/{SearchMd-CmoIwdFD.js → SearchMd-BXQRredV.js} +1 -1
- package/dist/client/assets/{Sector-L9R2CZ3j.js → Sector-D8IM05fH.js} +1 -1
- package/dist/client/assets/{Share07-BQpOEypi.js → Share07-CzZU-0lX.js} +1 -1
- package/dist/client/assets/{Sun-BwQeSpzv.js → Sun-CAOmTl7T.js} +1 -1
- package/dist/client/assets/{Tool01-CFPgtTUB.js → Tool01-DVAmF9a6.js} +1 -1
- package/dist/client/assets/{Trash01-yjy5Djos.js → Trash01-B12FEgzf.js} +1 -1
- package/dist/client/assets/{Upload01-C3YaZ92x.js → Upload01-H1MTk3aw.js} +1 -1
- package/dist/client/assets/{User01-CxY9-OxA.js → User01-Bkdfq1xc.js} +1 -1
- package/dist/client/assets/{UserSquare-D1SexGLq.js → UserSquare-DO-wgAkN.js} +1 -1
- package/dist/client/assets/{Users01-C234jzz1.js → Users01-MNFi-bbv.js} +1 -1
- package/dist/client/assets/{X-C49OUFcX.js → X-C154AObr.js} +1 -1
- package/dist/client/assets/{XClose-CKQjrGZS.js → XClose-DKzsyGKV.js} +1 -1
- package/dist/client/assets/{Zap-GTFewWZO.js → Zap-B8e9ezRB.js} +1 -1
- package/dist/client/assets/{ZoomOut-BCbY44Eu.js → ZoomOut-B317hRVZ.js} +1 -1
- package/dist/client/assets/{access-gate-BWJ5-fyg.js → access-gate-D5Bp1cjT.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-BRSOSKaa.js → add-connection-dialog-Bh5fO84W.js} +1 -1
- package/dist/client/assets/agent-analytics-BSYI19KE.js +2 -0
- package/dist/client/assets/agent-app-D_VI9cR9.js +1 -0
- package/dist/client/assets/agent-assets-BkLnegbg.js +1 -0
- package/dist/client/assets/agent-automation-D6GXdQU1.js +20 -0
- package/dist/client/assets/agent-automations-9cIkG6Ba.js +1 -0
- package/dist/client/assets/agent-connect-sources-B9UqZJBc.js +1 -0
- package/dist/client/assets/agent-deck-CqcGjdtS.js +1 -0
- package/dist/client/assets/agent-e2e-BOsArkL5.js +1 -0
- package/dist/client/assets/agent-experiments-ByDF_q1Q.js +1 -0
- package/dist/client/assets/agent-file-DofWWoQ4.js +1 -0
- package/dist/client/assets/{agent-git-CEsra0W5.js → agent-git-i-Gd50Vj.js} +2 -2
- package/dist/client/assets/agent-hosting-ByLf4mc1.js +1 -0
- package/dist/client/assets/{agent-icon-B4H17A-3.js → agent-icon-3at7GzsZ.js} +1 -1
- package/dist/client/assets/agent-library-file-Ca84W-pf.js +1 -0
- package/dist/client/assets/agent-monitor-CQI8uZzl.js +1 -0
- package/dist/client/assets/agent-overview-RCJH7JQG.js +1 -0
- package/dist/client/assets/agent-settings-BHLTTfW4.js +1 -0
- package/dist/client/assets/{agent-site-editor-DqHsR1Oa.js → agent-site-editor-CriokF3X.js} +13 -13
- package/dist/client/assets/agent-site-editor-code-BR_ncsV8.js +2 -0
- package/dist/client/assets/agent-site-editor-content-BEA7bjQD.js +9 -0
- package/dist/client/assets/agent-site-editor-preview-CMCL_dUV.js +518 -0
- package/dist/client/assets/agent-view-DS8QF4Ke.js +1 -0
- package/dist/client/assets/{agent-view-guard-AncI1H8B.js → agent-view-guard-D0ut5NAG.js} +1 -1
- package/dist/client/assets/agents-list-ChoQO1sp.js +1 -0
- package/dist/client/assets/{ai-providers-C91I1RIi.js → ai-providers-BkAsXdRd.js} +2 -2
- package/dist/client/assets/{alert-dialog-p_yxBHYu.js → alert-dialog-cqQYXzDf.js} +1 -1
- package/dist/client/assets/{alert-Vv8Gd72t.js → alert-x4X_GRO2.js} +1 -1
- package/dist/client/assets/{analytics-sections-CJlCPTTn.js → analytics-sections-EdibO0EZ.js} +1 -1
- package/dist/client/assets/api-keys-CHVawMec.js +1 -0
- package/dist/client/assets/api-keys-DD8G4v42.js +1 -0
- package/dist/client/assets/app-editor-Dd80JbK2.js +1 -0
- package/dist/client/assets/{asset-utils-brdDGay3.js → asset-utils-CC6F7-AZ.js} +1 -1
- package/dist/client/assets/{auth-DN1jUXQS.js → auth-CcjAo-4E.js} +1 -1
- package/dist/client/assets/{auth-catchall-B8jjuh3t.js → auth-catchall-0il6tXO-.js} +1 -1
- package/dist/client/assets/auth-entry-wG1k17iI.js +1 -0
- package/dist/client/assets/{auth-split-layout-9lXDS5uC.js → auth-split-layout-DivTJlRX.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BS0KLtdr.js → authenticate-and-persist-oauth-D1uu4uNq.js} +1 -1
- package/dist/client/assets/{automation-list-row-Z-oEG96S.js → automation-list-row-Bj1Utp6g.js} +1 -1
- package/dist/client/assets/{automation-runs-BfoVhm3K.js → automation-runs-C065C-Em.js} +1 -1
- package/dist/client/assets/{automations-BPxNxlY1.js → automations-DfIqHWlj.js} +1 -1
- package/dist/client/assets/{autosend-C9lP7MMD.js → autosend-CnLg4iyu.js} +1 -1
- package/dist/client/assets/{avatar-CaSFUaWf.js → avatar-CLzlzqg-.js} +1 -1
- package/dist/client/assets/{badge-DO3CQ_LV.js → badge-5H6-8M2L.js} +1 -1
- package/dist/client/assets/block-document-Dhdi7KP2.js +3 -0
- package/dist/client/assets/{blocks-preview-workspace-context-Bsh7P3Oa.js → blocks-preview-workspace-context-BdK175Nf.js} +1 -1
- package/dist/client/assets/{buckets-DAqePqsj.js → buckets-Cs1-INj9.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-DKmCIRM5.js → build-improve-prompt-doc-9lf62EUm.js} +1 -1
- package/dist/client/assets/{calendar-v3rFo_Cq.js → calendar-BQHoAsd6.js} +1 -1
- package/dist/client/assets/{capability-load-error-nzBIi4Tr.js → capability-load-error-0Uc737LL.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-BMiVfW6D.js → cards-DUvl76bf.js} +3 -3
- package/dist/client/assets/category-editor-DZ8v1VCJ.js +1 -0
- package/dist/client/assets/{chart-CXdIvQqa.js → chart-D2xGaBdH.js} +1 -1
- package/dist/client/assets/{chat-context-CypzFnUJ.js → chat-context-BNvT6rzW.js} +5 -5
- package/dist/client/assets/{chat-draft-bJa35Dyv.js → chat-draft-BXsvrA3U.js} +1 -1
- package/dist/client/assets/{checkbox-RuVP2KAD.js → checkbox-Dm-cOrC-.js} +1 -1
- package/dist/client/assets/{choose-editor-B6bnAbTO.js → choose-editor-K5zEI6gt.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-IBG3Spfs.js → claim-phase-copy-CltSQpgg.js} +1 -1
- package/dist/client/assets/{cli-auth-success-Gnusnqeq.js → cli-auth-success-BLMRYwDh.js} +1 -1
- package/dist/client/assets/{client-icons-DeH3wN29.js → client-icons-CyfLLJ0i.js} +1 -1
- package/dist/client/assets/{collapsible-Bx8hZ5vv.js → collapsible-BIjP_loq.js} +1 -1
- package/dist/client/assets/collection-detail-DX5rgQom.js +1 -0
- package/dist/client/assets/{collection-display-button-B4JQi_wC.js → collection-display-button-Cysz3Xm0.js} +1 -1
- package/dist/client/assets/{collection-search-CPwy4oTQ.js → collection-search-DverrpuC.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DzLC9Cad.js → collection-table-wrapper-DNg0nsQn.js} +1 -1
- package/dist/client/assets/collection-tabs-Uy6POvao.js +1 -0
- package/dist/client/assets/{combobox-bXWHxi5l.js → combobox-DypS57b1.js} +1 -1
- package/dist/client/assets/command-Dg2fnZVE.js +1 -0
- package/dist/client/assets/{companion-mcps-section-BiiIWMdJ.js → companion-mcps-section-BXh65CHH.js} +1 -1
- package/dist/client/assets/connect-MnY8n6nK.js +8 -0
- package/dist/client/assets/{connect-layout-C5m144rF.js → connect-layout-BmU4TTqG.js} +1 -1
- package/dist/client/assets/{connection-C1Cmv_sz.js → connection-C8bPFDEx.js} +1 -1
- package/dist/client/assets/{connection-card-lUin0zXZ.js → connection-card-CXVGIjkM.js} +1 -1
- package/dist/client/assets/connection-detail-xZF8BVF0.js +1 -0
- package/dist/client/assets/{connection-form-helpers-DiXUvzY1.js → connection-form-helpers-CEaaJsMg.js} +1 -1
- package/dist/client/assets/connections-CoxyeL-Q.js +1 -0
- package/dist/client/assets/{context-lYPc9MR3.js → context-CvdvtYuk.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-CVGvbMrB.js → create-organization-dialog-CVF9Pkh5.js} +1 -1
- package/dist/client/assets/{decofile-api-D2rDGWIR.js → decofile-api-DqVrJn1_.js} +1 -1
- package/dist/client/assets/{decopilot-DZa7cUdc.js → decopilot-B9jAytRs.js} +2 -2
- package/dist/client/assets/dialog-BOggtOpT.js +1 -0
- package/dist/client/assets/discover-C9zqRJNp.js +1 -0
- package/dist/client/assets/{domain-settings-BoCWiWyd.js → domain-settings-qd7-1lSE.js} +1 -1
- package/dist/client/assets/{download-app-dialog-B8fu6N4W.js → download-app-dialog-PPhwBTH9.js} +1 -1
- package/dist/client/assets/{drawer-Dj7i5SNu.js → drawer-BclOIYt1.js} +1 -1
- package/dist/client/assets/{editor-CStKuO5E.js → editor-TpzHa_gf.js} +1 -1
- package/dist/client/assets/{empty-state-DuOhKQcg.js → empty-state-CL8wHgVo.js} +1 -1
- package/dist/client/assets/{empty-state-C8J78MMg.js → empty-state-R3nLlu9z.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BN6Gn7S7.js → extract-connection-data-CmMVwBW2.js} +1 -1
- package/dist/client/assets/{feature-gate-BYtexfTr.js → feature-gate-DKNH_0kU.js} +1 -1
- package/dist/client/assets/{feature-paywall-Do9-TIse.js → feature-paywall-CPu4y-mi.js} +1 -1
- package/dist/client/assets/{file-explorer-sM87NUct.js → file-explorer-CleCPHx6.js} +2 -2
- package/dist/client/assets/{file-preview-Cctwbzua.js → file-preview-Mmi0KVgV.js} +1 -1
- package/dist/client/assets/file-share-button-DlQZmJHL.js +3 -0
- package/dist/client/assets/{file-type-icon-C--_TBMw.js → file-type-icon-BxC36yCu.js} +1 -1
- package/dist/client/assets/{folder-icon-Be-ry1Lo.js → folder-icon-BQsr0uf8.js} +1 -1
- package/dist/client/assets/{form-msoIoPH9.js → form-Bt-RSEHD.js} +1 -1
- package/dist/client/assets/{gateway-client-B7EtyAUZ.js → gateway-client-HEACnrX1.js} +1 -1
- package/dist/client/assets/{general-B5uAiOFe.js → general-ClcNIPBS.js} +1 -1
- package/dist/client/assets/{github-icon-Czf3JIe0.js → github-icon-O-IotW5p.js} +1 -1
- package/dist/client/assets/home-Bugw6f3C.js +1 -0
- package/dist/client/assets/{hooks-BunFzIMc.js → hooks-Bm1nlJeS.js} +4 -4
- package/dist/client/assets/{icon-button-TBoaqswf.js → icon-button-B5jy_lJx.js} +1 -1
- package/dist/client/assets/index---GpIbzw.js +26 -0
- package/dist/client/assets/index--RuMjVyN.js +5 -0
- package/dist/client/assets/{index-C4bcGTWO.js → index-0d4QXoG3.js} +27 -27
- package/dist/client/assets/{index-B4lO5kiB.js → index-BYL1evEv.js} +1 -1
- package/dist/client/assets/index-BeJdXzSv.css +1 -0
- package/dist/client/assets/index-BgP0qZnf.js +1 -0
- package/dist/client/assets/{index-Bv9cknRX.js → index-CPVB221H.js} +1 -1
- package/dist/client/assets/index-CoBWNh7w.js +1 -0
- package/dist/client/assets/{index-BO3WDGm0.js → index-D9L2r4MO.js} +1 -1
- package/dist/client/assets/{index-DNOKSPYL.js → index-DpYjANa-.js} +1 -1
- package/dist/client/assets/{index-DU8D4REs.js → index-beSzH801.js} +1 -1
- package/dist/client/assets/{index-B-RfjkQs.js → index-fVWt1lpr.js} +44 -44
- package/dist/client/assets/{index-CUoS9PHq.js → index-q1daWx8d.js} +1 -1
- package/dist/client/assets/index-redirect-CEIsML5U.js +1 -0
- package/dist/client/assets/{index-bU1o14-j.js → index-uJh8CcCU.js} +1 -1
- package/dist/client/assets/{index-haAT4fp-.js → index-yYa9zxlb.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-CFFZE0G7.js → infiniteQueryObserver-CKFKhFnQ.js} +1 -1
- package/dist/client/assets/{infra-billing-CI3pPi6s.js → infra-billing-DVAV6v8p.js} +1 -1
- package/dist/client/assets/{input-CkBBlArz.js → input-BkH_3_lh.js} +1 -1
- package/dist/client/assets/{input-DgwTyBrI.js → input-D2u13NjF.js} +1 -1
- package/dist/client/assets/input-DnsrsTkC.js +8 -0
- package/dist/client/assets/{integration-icon-DuRUAYQY.js → integration-icon-lkI0afUy.js} +1 -1
- package/dist/client/assets/{label-COhaglCI.js → label-DDXjSo5b.js} +1 -1
- package/dist/client/assets/{last-preview-page-C2BRWzsU.js → last-preview-page-T4cWlWCz.js} +1 -1
- package/dist/client/assets/{layout-ezpRdHMe.js → layout-DCGQK6TC.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-7Ua9_FGE.js → legacy-agents-deep-Dk4Qwm22.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-CoKgMaf6.js → legacy-main-redirect-F2zSp5tI.js} +1 -1
- package/dist/client/assets/library-BtGokA8R.js +161 -0
- package/dist/client/assets/{login-zL3v_Zks.js → login-DrzevGVQ.js} +1 -1
- package/dist/client/assets/{markdown-CL_7eJfo.js → markdown-B0l4rHOR.js} +2 -2
- package/dist/client/assets/{mcp-app-renderer-BF1xjUD_.js → mcp-app-renderer-13c0HciG.js} +2 -2
- package/dist/client/assets/{mcp-oauth-CYUMx6Lt.js → mcp-oauth-siG_cfmV.js} +1 -1
- package/dist/client/assets/members-CGdWgjNK.js +1 -0
- package/dist/client/assets/message-templates-BoFSW2CI.js +1 -0
- package/dist/client/assets/{mini-report-page-D2G_6nvn.js → mini-report-page-BK_Pf9fe.js} +1 -1
- package/dist/client/assets/mock-board-BuZmwDhY.js +10 -0
- package/dist/client/assets/{monaco-editor-B-WPLOla.js → monaco-editor-BVoYbb1f.js} +2 -2
- package/dist/client/assets/{monitoring-stats-row-IwXyXgpg.js → monitoring-stats-row-7DELRlYs.js} +1 -1
- package/dist/client/assets/multi-select-QUvu0uCK.js +1 -0
- package/dist/client/assets/{mustache-D5b2aALH.js → mustache-BmovsuOr.js} +1 -1
- package/dist/client/assets/{oauth-callback-XaDe1ZVU.js → oauth-callback-DchJhst_.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CG6P6aWc.js → oauth-callback-ai-provider-Y227Oftd.js} +1 -1
- package/dist/client/assets/{onboarding-C0P9leUg.js → onboarding-HozZLV2N.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-BULTvoQH.js → optimistic-project-sidebar-views-BX7ZIz6B.js} +1 -1
- package/dist/client/assets/org-file-open-context-C0hgS1Jo.js +1 -0
- package/dist/client/assets/{organization-choice-5mEr1aKE.js → organization-choice-CXZ6gkyl.js} +1 -1
- package/dist/client/assets/{orgs-3MZWLo-q.js → orgs-Dy8AnRAd.js} +1 -1
- package/dist/client/assets/page-seo-form-Bt-KyLUW.js +1 -0
- package/dist/client/assets/{pair-CSXFDEIQ.js → pair-Dwhp-QkI.js} +5 -5
- package/dist/client/assets/{plan-ladder-B7xKH1KD.js → plan-ladder-BgoCZoId.js} +1 -1
- package/dist/client/assets/{popover-DFY37Yvw.js → popover-Bm2g2dKA.js} +1 -1
- package/dist/client/assets/{post-calendar-Jvfo43V-.js → post-calendar-Sul5NCPi.js} +1 -1
- package/dist/client/assets/{post-editor-D0HMXnr-.js → post-editor-v0sVuMmM.js} +1 -1
- package/dist/client/assets/{preview-content-DyylZdej.js → preview-content-BaaIpGIX.js} +1 -1
- package/dist/client/assets/{preview-dialog-GxP1iGgN.js → preview-dialog-D6gkPU-v.js} +1 -1
- package/dist/client/assets/profile-CfF9emxx.js +1 -0
- package/dist/client/assets/{project-app-view-C-S_SBUQ.js → project-app-view-7ytayuSK.js} +1 -1
- package/dist/client/assets/project-feed-boavVsZo.js +1 -0
- package/dist/client/assets/{project-icon-CsZAOQy_.js → project-icon-Caze2c7Z.js} +1 -1
- package/dist/client/assets/project-reports-1ZKKeXQL.js +1 -0
- package/dist/client/assets/project-tasks-KKNu291m.js +1 -0
- package/dist/client/assets/{prompts-CvgNBkYO.js → prompts-D6EJy36O.js} +1 -1
- package/dist/client/assets/record-editor-CnFqh3Vp.js +1 -0
- package/dist/client/assets/{redirect-editor-D2NLj98m.js → redirect-editor-DWJ_FImu.js} +1 -1
- package/dist/client/assets/reports-CMBemuV-.js +1 -0
- package/dist/client/assets/{reports-BCYtzeDa.js → reports-CoGtI9j_.js} +2 -2
- package/dist/client/assets/{reports-BnLE7A3p.css → reports-aVRaDDaG.css} +1 -1
- package/dist/client/assets/{reports-onboarding-BG7_PC6g.js → reports-onboarding-DinC9B-6.js} +1 -1
- package/dist/client/assets/reports-tab-SGlpgHqf.js +2 -0
- package/dist/client/assets/{repositories-C5RyL_z1.js → repositories-BS-bWA5-.js} +1 -1
- package/dist/client/assets/{repository-import-picker-ByioO6uG.js → repository-import-picker-_pAlFkhi.js} +1 -1
- package/dist/client/assets/{repository-picker-BPuZL7HO.js → repository-picker-DpEVKEDq.js} +1 -1
- package/dist/client/assets/require-capability-CcHoyYNu.js +1 -0
- package/dist/client/assets/{required-auth-layout-Duev8t_N.js → required-auth-layout-Br8-tZC8.js} +1 -1
- package/dist/client/assets/{reset-password-JANPJ9Jd.js → reset-password-ndXl1h8v.js} +1 -1
- package/dist/client/assets/{resizable-yTD1tEOl.js → resizable-CmU1UFW5.js} +1 -1
- package/dist/client/assets/{review-settings-vW0-yRPH.js → review-settings-BQT2e44E.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-BUscMTY0.js → rich-text-link-control-BoRfGq9j.js} +1 -1
- package/dist/client/assets/roles-DZFiLJ9E.js +1 -0
- package/dist/client/assets/route-BGuagqOc.js +1 -0
- package/dist/client/assets/route-BeB47Wls.js +1 -0
- package/dist/client/assets/route-C9CtGxLX.js +1 -0
- package/dist/client/assets/route-page-header-sfG3hoJk.js +1 -0
- package/dist/client/assets/runnable-block-editor-D17D6ot6.js +17 -0
- package/dist/client/assets/{sandbox-lifecycle-context-BZ0OGbvt.js → sandbox-lifecycle-context-DbIoDfH_.js} +2 -2
- package/dist/client/assets/{schema-kN4UiUD7.js → schema-BSSNLZcx.js} +1 -1
- package/dist/client/assets/{scroll-area-DtmE_V3W.js → scroll-area-7yOUlGhi.js} +1 -1
- package/dist/client/assets/{search-input-5SNth6iW.js → search-input-BNaZ530e.js} +1 -1
- package/dist/client/assets/{search-toggle-BQLp0m3w.js → search-toggle-DFo2t2PR.js} +1 -1
- package/dist/client/assets/{secret-picker-CNRCwGgJ.js → secret-picker-wDs_PYaU.js} +1 -1
- package/dist/client/assets/secrets-CAUpWomS.js +1 -0
- package/dist/client/assets/sections-editor-DbtrkTJp.js +1 -0
- package/dist/client/assets/{select-lkzYgXdD.js → select-BVdY-oUw.js} +1 -1
- package/dist/client/assets/select-model-BG-np3eO.js +1 -0
- package/dist/client/assets/{seo-editor-C5sUOmWC.js → seo-editor-Dcu__lEc.js} +1 -1
- package/dist/client/assets/{separator-DIB2NY6d.js → separator-CEpsszRN.js} +1 -1
- package/dist/client/assets/settings-tab-CE-zP-s-.js +5 -0
- package/dist/client/assets/{sheet-B5VBlNbo.js → sheet-DF3R7FBJ.js} +1 -1
- package/dist/client/assets/shell-layout-2wAM2ksB.js +1 -0
- package/dist/client/assets/{skill-preview-_2hXoPIK.js → skill-preview-D6m4p1Wk.js} +1 -1
- package/dist/client/assets/skills-BTD2gZMF.js +1 -0
- package/dist/client/assets/{sso-kIq_TNP0.js → sso-DMLe81w3.js} +1 -1
- package/dist/client/assets/{suggestion-Bm5WiIMl.js → suggestion-D41p5Nlw.js} +1 -1
- package/dist/client/assets/{switch-C_Vj5_E0.js → switch-DsI_im2t.js} +1 -1
- package/dist/client/assets/synced-repos-Bgu2XcXF.js +1 -0
- package/dist/client/assets/{table-EewUoElk.js → table-C4hyTb2t.js} +1 -1
- package/dist/client/assets/{tabs-Dn00_KeP.js → tabs-VLV4jDm4.js} +1 -1
- package/dist/client/assets/{task-board-B1qWBX1A.js → task-board-BM0rSWlL.js} +1 -1
- package/dist/client/assets/{task-route-D--4JOl_.js → task-route-xwNk2dEf.js} +1 -1
- package/dist/client/assets/{task-status-Nj47Imo6.js → task-status-CnhcAbWB.js} +1 -1
- package/dist/client/assets/taskboard-analytics-BKvqd2Zb.js +1 -0
- package/dist/client/assets/{tasks-BKvSOVwi.js → tasks-B4NT7cCF.js} +2 -2
- package/dist/client/assets/tasks-DuaaDsqx.js +1 -0
- package/dist/client/assets/{textarea-BJstaU_4.js → textarea-6ExQYFkQ.js} +1 -1
- package/dist/client/assets/thread-analytics-3sSJIqAe.js +1 -0
- package/dist/client/assets/thread-button-DkmJxu_A.js +1 -0
- package/dist/client/assets/{thread-intent-Dv_ln6w2.js → thread-intent-g-PM5L5V.js} +1 -1
- package/dist/client/assets/{thread-route-C2QO3TRR.js → thread-route-Bjrbqzl8.js} +1 -1
- package/dist/client/assets/thread-route-DkC2CUZU.js +1 -0
- package/dist/client/assets/{thread-sheet-body-a-hPHT_-.js → thread-sheet-body-By3JPwYd.js} +1 -1
- package/dist/client/assets/toggle-group-CdX5yciZ.js +1 -0
- package/dist/client/assets/toolbar-icon-button-oAWnd74z.js +1 -0
- package/dist/client/assets/{tooltip-1YZ9_LEc.js → tooltip-ssFfyABz.js} +1 -1
- package/dist/client/assets/{track-BdOLl-rI.js → track-D3zn8u09.js} +1 -1
- package/dist/client/assets/{types-BcA15it5.js → types-BOURPUxt.js} +3 -3
- package/dist/client/assets/{usage-stats-BXm3jzMp.js → usage-stats-DSpOuTy_.js} +1 -1
- package/dist/client/assets/{use-ai-providers-OZaiJf_i.js → use-ai-providers-B4mNdfKq.js} +1 -1
- package/dist/client/assets/{use-automations-D-L8pJyH.js → use-automations-Bus3XZEG.js} +1 -1
- package/dist/client/assets/{use-autosave-WOg9IhGs.js → use-autosave-DBLXv5_D.js} +1 -1
- package/dist/client/assets/use-connect-companion-CGdWa7jz.js +1 -0
- package/dist/client/assets/{use-connection-B5_J2wP6.js → use-connection-CYJgCYqU.js} +1 -1
- package/dist/client/assets/{use-copy-B6plqh15.js → use-copy-CrB88O_V.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BHGrzRmt.js → use-create-virtual-mcp-BNC4mnlO.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-giBeaSOM.js → use-date-fns-locale-D0utOkHu.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-B9G4Lz7n.js → use-debounced-autosave-Dan7rsIv.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CUPne1nm.js → use-debounced-value-CH4MSTum.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BhBg4qYv.js → use-deco-credits-BqWAy8ZX.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CrYWYj1F.js → use-decopilot-events-RRjEeCHU.js} +1 -1
- package/dist/client/assets/{use-delete-connection-XgJ1tVSe.js → use-delete-connection-Du5O_WnR.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DhLAmeuE.js → use-deployment-admin-DkX6QZM3.js} +1 -1
- package/dist/client/assets/{use-entitlements-Bk0dyRQ2.js → use-entitlements-ClCAPn-1.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-BfzrR4he.js → use-fast-preview-draft-url-D5GFt7R1.js} +1 -1
- package/dist/client/assets/{use-file-configs-Q9mf6jQo.js → use-file-configs-DcspjE-T.js} +1 -1
- package/dist/client/assets/use-in-settings-D5UcgsST.js +1 -0
- package/dist/client/assets/{use-infinite-scroll-BAK1V_oQ.js → use-infinite-scroll-C9JuSLN2.js} +1 -1
- package/dist/client/assets/{use-join-requests-DbabBnEV.js → use-join-requests-D5hr7HFQ.js} +1 -1
- package/dist/client/assets/use-main-panel-tabs-6FUyPoV0.js +1 -0
- package/dist/client/assets/{use-mcp-auth-status-DetA28-g.js → use-mcp-auth-status-Ddw6PUoc.js} +1 -1
- package/dist/client/assets/{use-mcp-client-6HSoOGyN.js → use-mcp-client-C9kpna06.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-1aH_UXpe.js → use-mcp-prompts-BtGNVYiz.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-yAkOUoVS.js → use-mcp-tools-BpbNRSCE.js} +1 -1
- package/dist/client/assets/{use-members-CNAxK8NG.js → use-members-CJT-2YAL.js} +1 -1
- package/dist/client/assets/{use-mobile-BA2OXMES.js → use-mobile-VK58ppXT.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-B7J0geak.js → use-navigate-to-agent-BKGmkOVk.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-CdE8qyDV.js → use-open-billing-url-Bvnx0BOM.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DJC4lcTZ.js → use-org-auth-client-CKZ58VC5.js} +1 -1
- package/dist/client/assets/{use-org-fs-DxNvtETC.js → use-org-fs-DPzG-whZ.js} +1 -1
- package/dist/client/assets/{use-org-sso-D0y0H-Wd.js → use-org-sso-B04Mxuuf.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CTjyx7IB.js → use-organization-roles-DitLiCzh.js} +1 -1
- package/dist/client/assets/{use-organization-settings-fx1CniIO.js → use-organization-settings-BlcGUzK2.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-ZqAXzPy8.js → use-panel-navigate-dyxR-DTC.js} +1 -1
- package/dist/client/assets/{use-project-native-view-presence-DU2K0Eyd.js → use-project-native-view-presence-DW-vXW8q.js} +1 -1
- package/dist/client/assets/{use-project-scope-Hp7aDrht.js → use-project-scope-BodZ2Y-N.js} +1 -1
- package/dist/client/assets/{use-releases-BXIf7cF0.js → use-releases-B4Q4KNAy.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-D7jrD_HD.js → use-reports-diagnostic-D3WavNHe.js} +1 -1
- package/dist/client/assets/{use-route-default-main-DGbZPJrO.js → use-route-default-main-ZrMvaReT.js} +1 -1
- package/dist/client/assets/{use-secrets-C-Xp8b4K.js → use-secrets-CsokxVTz.js} +1 -1
- package/dist/client/assets/use-section-preview-base-_MEoft3G.js +1 -0
- package/dist/client/assets/{use-session-runtime-BGl1FWUp.js → use-session-runtime-Bt7lvBMi.js} +1 -1
- package/dist/client/assets/{use-tags-pwsJJDvy.js → use-tags-BDJReoHD.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-Dh7V7MPv.js → use-task-board-analytics-C3jMZU4N.js} +1 -1
- package/dist/client/assets/{use-task-metadata-DKjAQSZf.js → use-task-metadata-DZYdecWA.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-CusHOOmZ.js → use-thread-analytics-Bt8K0M9o.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-8akdlycY.js → use-thread-outputs-CyueLh5F.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CbHEuH0C.js → use-virtual-mcp-DqshZ0HH.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BFkml8d7.js +1 -0
- package/dist/client/assets/{useQueries-B5DxQ3Sp.js → useQueries-vjRkxTV6.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DtRGEtxl.js +1 -0
- package/dist/client/assets/{users-p9MUZzW1.js → users-8kGWPdIs.js} +1 -1
- package/dist/client/assets/{utils-BkPwCtYS.js → utils-BOGJ6QKf.js} +1 -1
- package/dist/client/assets/{variant-calendar-CcJNDqFN.js → variant-calendar-ZCqhGA5B.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-CexHfhU3.js → variant-matcher-override-YSkLazsC.js} +1 -1
- package/dist/client/assets/view-mode-toggle-BR6xW0ar.js +1 -0
- package/dist/client/assets/{virtual-mcp-Dd5g9b73.js → virtual-mcp-I4dedXQ8.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/agent-analytics-DvZELmro.js +0 -2
- package/dist/client/assets/agent-app-CR4dhbC3.js +0 -1
- package/dist/client/assets/agent-assets-CAIo2BGp.js +0 -1
- package/dist/client/assets/agent-automation-4_v-jQ62.js +0 -20
- package/dist/client/assets/agent-automations-DideyLR7.js +0 -1
- package/dist/client/assets/agent-connect-sources-C16mG4Vi.js +0 -1
- package/dist/client/assets/agent-deck-B2S-lir7.js +0 -1
- package/dist/client/assets/agent-e2e-CQ-lGjg-.js +0 -1
- package/dist/client/assets/agent-experiments-CXowDnMX.js +0 -1
- package/dist/client/assets/agent-file-DVtUKLrb.js +0 -1
- package/dist/client/assets/agent-hosting-B95vsATF.js +0 -1
- package/dist/client/assets/agent-library-file-c5FcaNLf.js +0 -1
- package/dist/client/assets/agent-monitor-DKyHOvd6.js +0 -1
- package/dist/client/assets/agent-overview-Dq7efx0u.js +0 -1
- package/dist/client/assets/agent-settings-tjDRwuVg.js +0 -1
- package/dist/client/assets/agent-site-editor-code-D1x0TO9d.js +0 -2
- package/dist/client/assets/agent-site-editor-content-C0C8gdKB.js +0 -9
- package/dist/client/assets/agent-site-editor-preview-BPAT7NTN.js +0 -518
- package/dist/client/assets/agent-view-DECRuUKv.js +0 -1
- package/dist/client/assets/agents-list-DdpIsQof.js +0 -1
- package/dist/client/assets/api-keys-CAMHVAF8.js +0 -1
- package/dist/client/assets/api-keys-Ct4yGdka.js +0 -1
- package/dist/client/assets/app-editor-BWuGvl0o.js +0 -1
- package/dist/client/assets/auth-entry-BZ-zlX-A.js +0 -1
- package/dist/client/assets/block-document-BQbcWy3F.js +0 -3
- package/dist/client/assets/breadcrumb-D3KLnh1b.js +0 -1
- package/dist/client/assets/category-editor-CLkY8j6x.js +0 -1
- package/dist/client/assets/collection-detail-Xqlt3OgU.js +0 -1
- package/dist/client/assets/collection-tabs-VZH79ort.js +0 -1
- package/dist/client/assets/command-C0IXiNme.js +0 -1
- package/dist/client/assets/connect-B9RtRyUW.js +0 -8
- package/dist/client/assets/connection-detail-Bgtg-egn.js +0 -1
- package/dist/client/assets/connections-CIFiKTz-.js +0 -1
- package/dist/client/assets/dialog-fTIcTyHb.js +0 -1
- package/dist/client/assets/discover-BZC8PmWN.js +0 -1
- package/dist/client/assets/file-share-button-Dcpl3tTi.js +0 -3
- package/dist/client/assets/home-nqrW03_D.js +0 -1
- package/dist/client/assets/index-B48I-F_s.js +0 -26
- package/dist/client/assets/index-CnM-XjMS.js +0 -1
- package/dist/client/assets/index-CnlnpiW9.js +0 -1
- package/dist/client/assets/index-Cnm8iPpl.js +0 -5
- package/dist/client/assets/index-DQQ8_5-n.css +0 -1
- package/dist/client/assets/index-redirect-lHlkLUpP.js +0 -1
- package/dist/client/assets/input-bCtnK_dS.js +0 -8
- package/dist/client/assets/library-nbbFy0YJ.js +0 -161
- package/dist/client/assets/members-Ci31aIzf.js +0 -1
- package/dist/client/assets/message-templates-Dievwyon.js +0 -1
- package/dist/client/assets/mock-board-MGFiZQqD.js +0 -10
- package/dist/client/assets/multi-select-B5cPO8Zc.js +0 -1
- package/dist/client/assets/org-file-open-context-C6mgZPAr.js +0 -1
- package/dist/client/assets/page-seo-form-BHc2C0F_.js +0 -1
- package/dist/client/assets/profile-Bl7SMbnv.js +0 -1
- package/dist/client/assets/project-feed-C9k9tVu9.js +0 -1
- package/dist/client/assets/project-reports-h9XKnGzZ.js +0 -1
- package/dist/client/assets/project-tasks-CvQsB5FR.js +0 -1
- package/dist/client/assets/record-editor-Dco1ladi.js +0 -1
- package/dist/client/assets/reports-KVVIwKGA.js +0 -1
- package/dist/client/assets/reports-tab-CZyY8SM6.js +0 -2
- package/dist/client/assets/require-capability-BlL45yDc.js +0 -1
- package/dist/client/assets/roles-B-T-wGt2.js +0 -1
- package/dist/client/assets/route-BoE0K809.js +0 -1
- package/dist/client/assets/route-Ciyyz2ig.js +0 -1
- package/dist/client/assets/route-X5r9RmD7.js +0 -1
- package/dist/client/assets/route-page-header-Ck32Z_z1.js +0 -1
- package/dist/client/assets/runnable-block-editor-DXtvF8jt.js +0 -17
- package/dist/client/assets/secrets-BUndq66A.js +0 -1
- package/dist/client/assets/sections-editor-BMGHgar4.js +0 -1
- package/dist/client/assets/select-model-L0RmAR5m.js +0 -1
- package/dist/client/assets/settings-tab-BQA673_Z.js +0 -5
- package/dist/client/assets/shell-layout-t1NP6lxk.js +0 -1
- package/dist/client/assets/sidebar-Bsj1oRm2.js +0 -1
- package/dist/client/assets/skills-D_mDF0TE.js +0 -1
- package/dist/client/assets/synced-repos-wPtrwk-M.js +0 -1
- package/dist/client/assets/taskboard-analytics-DlcZmFmP.js +0 -1
- package/dist/client/assets/tasks-DhBfoBLp.js +0 -1
- package/dist/client/assets/thread-analytics-CJvSEofm.js +0 -1
- package/dist/client/assets/thread-button-Dg0_8ATn.js +0 -1
- package/dist/client/assets/thread-route-BBwMAr4Q.js +0 -1
- package/dist/client/assets/toggle-group-n81OZ_Uu.js +0 -1
- package/dist/client/assets/toolbar-icon-button-G0ZB62BK.js +0 -1
- package/dist/client/assets/use-connect-companion-dh23z2e4.js +0 -1
- package/dist/client/assets/use-in-settings-_C3gW9Az.js +0 -1
- package/dist/client/assets/use-main-panel-tabs-rnsNQmUO.js +0 -1
- package/dist/client/assets/use-section-preview-base-BIeB_qzV.js +0 -1
- package/dist/client/assets/useInfiniteQuery-CEwPAAtp.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CC4BMd5I.js +0 -1
- package/dist/client/assets/view-mode-toggle-CJHrx4Q2.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3703,7 +3703,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
3703
3703
|
${J.join(`
|
|
3704
3704
|
`)}`:X}function zh6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3705
3705
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var z48=200,Fh6=12,Nh6,Oh6=300,gk0=3;var sF1=D(()=>{iZ();D8();yk0();Nh6={aheadBy:0,behindBy:0,files:[]}});function Ah6($){if(!$||$.includes(".."))return!1;return Ph6.test($)}function A48($){return Th6.includes($)}function eF1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Ah6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function $U1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Ph6,Th6;var T48=D(()=>{Ph6=/^[\w./@-]+$/;Th6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function s80($,Z){let Q=$?.githubRepo;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function q48($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new DE(j7);let J=await sw($.storage,X,Y);if(J&&await yB($.storage,J)){let F=await aF($,J,{forceRefresh:!0}).catch((U)=>{throw new DE(U instanceof Error?U.message:j7)});await R48($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new DE("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Pc({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:j7;throw new DE(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await sF(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=tU$(F instanceof Error?F.message:String(F));throw U?new DE(N):F});await R48($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function R48($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=wi($),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 Pj(K,Rh6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Rh6=10485760,DE;var ZU1=D(()=>{GW();Vk0();C00();bW0();Re();iZ();DE=class DE extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Mh6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!qh6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Hy($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Ih6)])}async function kh6($,Z){let Q=$.var.studioContext,Y=GU(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=Cx(G?.metadata?.runtime);if(W)return W;let K=A20(Z.virtualMcpMetadata),H=K==="cms"?await _F1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)_00(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 Sh6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await IX($.var.studioContext)}catch{return null}}function Fy($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Ai($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=s80(Z,Q);if(!X)throw new y0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=K0(Y);return jc(Y,J.id,X)}function YU1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=DF$(Z);if(Y!==void 0)return $.json({error:Q},429,{...$9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof t6)return $.json({error:Q},409,$9);let X=UW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,$9)}return $.json({error:Q},502,$9)}async function QU1($,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 k48($){try{let Z=await Ai($),Q=await hk0(Z,$.get("vmClaim").branch);return $.json(Q,200,$9)}catch(Z){return YU1($,Z)}}function e80($,Z){let Y=(ck0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return ck0.set($,X),X.finally(()=>{if(ck0.get($)===X)ck0.delete($)}),Y}async function $Q($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,$9);let Y=Q?.runner??Fy($);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",...$9}})}}let O=await B.text(),L=Q?.redactRepoDir?Ch6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...$9}})};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 Ch6($){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 mk0($,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 _h6($){return S48.includes($)}var qh6,M48=524288,I48=65536,Ih6=1e4,V48=2000,Vh6,ck0,$9,S48,C48=()=>{let $=new Q1;$.use("/:virtualMcpId/:branch/*",Vh6),$.post("/:virtualMcpId/:branch/write",(Q)=>$Q(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>$Q(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>$Q(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>$Q(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>$Q(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>$Q(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Hy(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>$Q(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Hy(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 $Q(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 $Q(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>$Q(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>$Q(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!_h6(Y))return Q.json({error:`step must be one of: ${S48.join(", ")}`},400);let X=Q.get("vmClaim"),J=await _F1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await Sh6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,$9);if(Y==="start"){let G=K0(Q.var.studioContext),W=Zm(X.virtualMcpMetadata);try{await j20({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 $Q(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 CO(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 C88(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 k48(Q);return Z(Q)});let Z=(Q)=>$Q(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(V48)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return k48(Q);return $Q(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(V48)])})}),$.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 Ai(Q),G=await uk0(J,Y.branch,X.base);return Q.json(G,200,$9)}catch(X){return YU1(Q,X)}return $Q(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,$9);let Y=Fy(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return e80(X,async()=>{try{await vF1(W,Y,X);let K=s80(J,G);if(K)await q48(W,Y,X,K)}catch(K){if(K instanceof DE)return Q.json({error:K.message},403,$9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,$9)}return $Q(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 e80(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,$9);try{let G=await Ai(Q);return await P48(G,Y.branch,J),Q.json({ok:!0},200,$9)}catch(G){let W=UW(G)===409||G instanceof t6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,$9)}});return e80(Y.claimName,()=>$Q(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 e80(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await Ai(Q),H=W.base??await K.getDefaultBranch();return await lk0(K,Y.branch,H),Q.json({ok:!0},200,$9)}catch(W){return YU1(Q,W)}});let X=Fy(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return e80(J,async()=>{try{await vF1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,$9)}return $Q(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",I5({maxSize:M48,onError:(Q)=>Q.json({error:"Payload too large"},413,$9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Fy(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]=fF1(F)&&N?[F,U]:X?await Promise.all([mk0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),mk0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Ai(Q);return Promise.all([hk0(w,Y.branch),uk0(w,Y.branch)])})();await hK(K,K0(K).id,"suggesting a commit message");let L=await f88(K,B,O);return Q.json(L,200,$9)}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,$9);return Q.json({error:F},502,$9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",I5({maxSize:M48,onError:(Q)=>Q.json({error:"Payload too large"},413,$9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Fy(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]=fF1(F)&&N?[F,U]:X?await Promise.all([mk0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),mk0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await Ai(Q);return Promise.all([hk0(w,Y.branch),uk0(w,Y.branch)])})();await hK(K,K0(K).id,"judging whether a change needs review");let L=await g88(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,$9)}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,$9);return Q.json({error:F},502,$9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=Fy(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 QU1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",I5({maxSize:I48,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=Fy(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=eF1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=$U1(J,W.resolveType);return QU1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",I5({maxSize:I48,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):Qm(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=eF1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!A48(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=$U1(G,K.resolveType);return QU1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var _48=D(()=>{G8();fW();Li();CF1();V00();V88();jW();Ym();k88();QH();yF();S88();_88();s61();S00();hF1();h88();iZ();w5();sF1();T48();P20();ZU1();qh6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Vh6=Ik0(async($,Z)=>{let Q=$.var.studioContext;try{s(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=p0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=K0(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{Mh6(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=oe({orgId:X.id,virtualMcpId:J,branch:G}),H=await R41(Q,G),F=q41(H,Y),U=I88({userId:F,projectRef:K}),N=W.metadata??null,B=await kh6($,{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 IX(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()});ck0=new Map;$9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};S48=["clone","install","start"]});function v48($,Z,Q){let Y=XU1.get($);if(!Y)Y={pending:null,running:!1},XU1.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)bh6($,Y);return J}async function bh6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await xh6(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)XU1.delete($)}}async function xh6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Pi(Z,Q),W=await Z.listDecofileEntries(G,Y),K=oF1(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=rF1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3706
|
-
`;await L48(Z.repo,L);let w=O[0]??`${fk0(Y)}/${cF1(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 rF1(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 w48(Z,F.values(),X),{decofile:B,skipped:O}=n80(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:cK(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:fh6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof t6)||J>=vh6-1)throw N;await i$(QQ(2000,200,J,2,0.5))}}}function fh6($){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 n81(Y,$.deps.coAuthor)}var vh6=3,XU1;var b48=D(()=>{GA0();Sk0();T6();D8();iZ();yk0();XU1=new Map});import{createHmac as x48,randomBytes as yh6,timingSafeEqual as gh6}from"crypto";function f48(){if(dk0)return dk0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return dk0=$?Buffer.from($):yh6(32),dk0}function JU1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+hh6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=x48("sha256",f48()).update(Y).digest("base64url");return`${Y}.${X}`}function y48($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(x48("sha256",f48()).update(Y).digest("base64url"));if(X.length!==J.length||!gh6(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 hh6=21600000,dk0=null;var g48=D(()=>{F$()});function ik0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function uh6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=ik0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function h48($){let Z;try{Z=ik0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=uh6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=ik0(G),K=W&&ik0(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 Ti}from"zod";function ch6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&lh6.test($)}function d48($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $40($){let Z=$.get("decofileScope");return jc($.var.studioContext,Z.organizationId,Z.githubRepo)}function Z40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof t6)return $.json({error:Q},409);let Y=UW(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 i48(){let $=new Q1;return $.use("/:virtualMcpId/:branch",m48),$.use("/:virtualMcpId/:branch/*",m48),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await j48(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(h48(X.decofile),200,{...J,"content-type":"application/json"});let G=JU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(d48(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return Z40(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 $40(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 Z40(Z,X)}}),$.patch("/:virtualMcpId/:branch",dh6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=ih6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{kk0(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(lF1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $40(Z),W=await v48(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:wi(Y)},J),K=JU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:d48(Z)})}catch(G){return Z40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(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(UW(W)!==409)throw W;await lk0(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(UW(G)===409)return Z.json({error:"merge-conflict"},409);if(UW(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 Z40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(UW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return Z40(Z,Y)}}),$}var lh6,u48=500,l48=1048576,c48=1024,mh6=8388608,dh6,ih6,m48;var p48=D(()=>{P20();Sk0();G8();fW();CF1();Vk0();ZU1();iZ();b48();g48();sF1();yk0();yF();lh6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;dh6=I5({maxSize:mh6,onError:($)=>$.json({error:"Payload too large"},413)}),ih6=Ti.object({set:Ti.record(Ti.string(),Ti.unknown()).optional(),delete:Ti.array(Ti.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)<=u48,{message:`Patch cannot touch more than ${u48} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=l48),{message:`Each block must be at most ${l48} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=c48),{message:`Each block key must be at most ${c48} characters`}),m48=Ik0(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(!ch6(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||!y48(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await ZW(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(!Qm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=s80(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var n48=($)=>{let Z=new Q1;if(Z.use("*",td),Z.use("*",Te$),Z.route("/",fV0()),Z.route("/",J08()),Z.route("/",ie$()),Z.route("/",O88()),Z.route("/",G88()),Z.route("/",N88()),Z.route("/",K88()),Z.route("/",Rk0()),Z.route("/tools",P88()),Z.route("/",j88()),Z.route("/",g$8({kvStorage:$.kvStorage})),Z.route("/",f$8()),Z.route("/fs",a$8({getConnection:$.getNatsConnection})),Z.route("/sandbox",C48()),Z.route("/decofile",i48()),Z.route("/",Y88()),Z.route("/",e$8()),Z.route("/deco-sites",gV0()),Z.route("/hosting",be$()),Z.route("/monitor",le$()),Z.route("/sso",CV0()),Z.route("/",qk0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ke$()),$.mountDevAssets)Z.route("/dev-assets",cV0({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("/",br$()),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",Z88()),Z.route("/mcp",kR0()),Z.route("/mcp/self",zk0()),Z.route("/mcp",_R0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var t48=D(()=>{G8();Re$();zV0();Se$();sK1();xe$();ce$();mV0();af();nK1();YH1();y$8();h$8();s$8();$88();h10();lK1();vR0();AF1();Q88();X88();W88();H88();qF1();D88();E88();MF1();A88();IF1();SR0();_48();p48()});function ph6($){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 nh6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},o48=()=>{let $=new Q1;return $.use("*",nh6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await lJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:ph6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var r48=D(()=>{G8();F$();qI0()});import{z as v1}from"zod";function dU($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Yu6($){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 Xu6($,Z,Q){try{return JSON.parse($)}catch{throw new e48(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Ju6($){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:Xu6(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 Gu6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?PF(Q.function.parameters):PF({type:"object",properties:{}});return[Q.function.name,c$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Wu6($){if(!$)return;return{openai:{response_format:$}}}function Ku6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function a48($,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 s48($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var th6=256,oh6,rh6,ah6,sh6,eh6,$u6,Zu6,Qu6,e48,$68,Z68;var Q68=D(()=>{v4();G8();Li();NH();oh6=v1.object({type:v1.literal("function"),function:v1.object({name:v1.string(),description:v1.string().optional(),parameters:v1.record(v1.string(),v1.unknown()).optional()})}),rh6=v1.object({id:v1.string(),type:v1.literal("function"),function:v1.object({name:v1.string(),arguments:v1.string()})}),ah6=v1.discriminatedUnion("role",[v1.object({role:v1.literal("system"),content:v1.string(),name:v1.string().optional()}),v1.object({role:v1.literal("user"),content:v1.union([v1.string(),v1.array(v1.union([v1.object({type:v1.literal("text"),text:v1.string()}),v1.object({type:v1.literal("image_url"),image_url:v1.object({url:v1.string(),detail:v1.string().optional()})})]))]),name:v1.string().optional()}),v1.object({role:v1.literal("assistant"),content:v1.string().nullable().optional(),name:v1.string().optional(),tool_calls:v1.array(rh6).optional()}),v1.object({role:v1.literal("tool"),content:v1.string(),tool_call_id:v1.string()})]),sh6=v1.object({type:v1.literal("text")}),eh6=v1.object({type:v1.literal("json_object")}),$u6=v1.object({type:v1.literal("json_schema"),json_schema:v1.object({name:v1.string(),description:v1.string().optional(),schema:v1.record(v1.string(),v1.unknown()),strict:v1.boolean().optional()})}),Zu6=v1.union([sh6,eh6,$u6]),Qu6=v1.object({model:v1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:v1.array(ah6),stream:v1.boolean().optional().default(!1),temperature:v1.number().min(0).max(2).optional(),max_tokens:v1.number().positive().optional(),top_p:v1.number().min(0).max(1).optional(),frequency_penalty:v1.number().min(-2).max(2).optional(),presence_penalty:v1.number().min(-2).max(2).optional(),stop:v1.union([v1.string(),v1.array(v1.string())]).optional(),tools:v1.array(oh6).optional(),tool_choice:v1.union([v1.literal("auto"),v1.literal("none"),v1.literal("required"),v1.object({type:v1.literal("function"),function:v1.object({name:v1.string()})})]).optional(),response_format:Zu6.optional(),user:v1.string().optional()});e48=class e48 extends Error{constructor($){super($);this.name="MessageConversionError"}};$68=new Q1;$68.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(dU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(dU("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(dU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Qu6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(dU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Yu6(J.model);if(!G)return $.json(dU("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)=>Sz(E.providerId));if(!j)return $.json(dU("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(dU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Ju6(J.messages),N=J.tools?Gu6(J.tools):void 0,B=Wu6(J.response_format),O=Ku6(),L=Math.floor(Date.now()/1000);if(J.stream)return CO($,async(w)=>{let j=a48(F,U,N,J,B,$.req.raw.signal);try{let E=$m(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>=th6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:s48(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=a48(F,U,N,J,B,$.req.raw.signal),j=await HU(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:s48(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(dU("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(dU(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(dU(X.message,"server_error"),500)}});Z68=$68});function Hu6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Y68(){let $=new Q1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!dZ(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||P9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(us(U)!==J)continue;if(!Hu6(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 X68=D(()=>{G8();WW()});var G68;var J68=D(()=>{G68={name:"decocms",version:"4.400.6",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 Nu6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Uu6}}var W68,Uu6="https://ph.studio.decocms.com",K68;var H68=D(()=>{G8();Hr();rx();E9();F$();IK1();J68();W68=new Q1;W68.get("/",($)=>{let Z={version:G68.version,theme:J$$(),...RK().logo&&{logo:RK().logo},...GO()&&{internalUrl:yc1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:Rs$(),posthog:Nu6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:mO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});K68=W68});function Uy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function GU1($){return(Uy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function F68($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Uy($))}&sz=${Z}`}function Bu6($,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 U68($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=Bu6(`How does ${Q} really perform? See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as L$}from"zod";var Ou6,N68;var B68=D(()=>{Ou6=L$.object({check_id:L$.string(),title:L$.string(),description:L$.string().optional(),impact:L$.string().optional(),why:L$.string().optional(),category:L$.string(),severity:L$.string(),value_band:L$.string().optional(),value_driver:L$.string().optional(),controllability:L$.string().optional(),pages:L$.array(L$.string()),tasks:L$.array(L$.string()),evidence:L$.string(),sample_scope:L$.string().optional(),sources:L$.array(L$.string())}),N68=L$.object({domain:L$.string(),brand:L$.string(),favicon:L$.string().optional(),scanned_at:L$.string().nullable(),lang:L$.string(),score:L$.number().nullable(),band:L$.string().nullable(),totals:L$.object({measured:L$.number(),registry_total:L$.number(),passed:L$.number(),failed:L$.number(),blocked:L$.number()}),buckets:L$.array(L$.object({id:L$.enum(["critical","important","worth"]),label:L$.string(),items:L$.array(Ou6)})),passing:L$.object({count:L$.number(),items:L$.array(L$.object({check_id:L$.string(),title:L$.string()}))}),not_measured:L$.object({count:L$.number(),groups:L$.array(L$.object({reason:L$.string(),label:L$.string(),count:L$.number(),checks:L$.array(L$.string())}))}),categories:L$.array(L$.object({key:L$.string(),label:L$.string(),score:L$.number().nullable(),band:L$.string().nullable(),pass:L$.number(),fail:L$.number()})),screenshots:L$.array(L$.object({url:L$.string(),page_type:L$.string().optional(),viewport:L$.enum(["desktop","mobile"]),image_url:L$.string()}))})});function O68($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${uK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function pk0($,Z={}){let Q=await fetch(O68($,"",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 N68.parse(await Q.json())}async function D68($,Z={}){let Q=await fetch(O68($,".md"),{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 WU1=D(()=>{B68();Ow()});import{join as L68}from"path";async function Lu6($){try{let Z=await pk0($,{signal:AbortSignal.timeout(Du6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||GU1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function iJ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function wu6($,Z){let Q=Uy($),Y=Z?.brand?.trim()||GU1(Q),X=F68(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=U68({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${iJ(W)}</title>`,`<meta name="description" content="${iJ(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="${iJ(W)}" />`,`<meta property="og:description" content="${iJ(K)}" />`,`<meta property="og:url" content="${iJ(G)}" />`,`<meta property="og:image" content="${iJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${iJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${iJ(W)}" />`,`<meta name="twitter:description" content="${iJ(K)}" />`,`<meta name="twitter:image" content="${iJ(H)}" />`,`<meta name="twitter:image:alt" content="${iJ(F)}" />`,`<link rel="canonical" href="${iJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${iJ(G)}.md" />`,`<link rel="icon" href="${iJ(X)}" sizes="any" />`].join(`
|
|
3706
|
+
`;await L48(Z.repo,L);let w=O[0]??`${fk0(Y)}/${cF1(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 rF1(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 w48(Z,F.values(),X),{decofile:B,skipped:O}=n80(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:cK(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:fh6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof t6)||J>=vh6-1)throw N;await i$(QQ(2000,200,J,2,0.5))}}}function fh6($){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 n81(Y,$.deps.coAuthor)}var vh6=3,XU1;var b48=D(()=>{GA0();Sk0();T6();D8();iZ();yk0();XU1=new Map});import{createHmac as x48,randomBytes as yh6,timingSafeEqual as gh6}from"crypto";function f48(){if(dk0)return dk0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return dk0=$?Buffer.from($):yh6(32),dk0}function JU1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+hh6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=x48("sha256",f48()).update(Y).digest("base64url");return`${Y}.${X}`}function y48($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(x48("sha256",f48()).update(Y).digest("base64url"));if(X.length!==J.length||!gh6(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 hh6=21600000,dk0=null;var g48=D(()=>{F$()});function ik0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function uh6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=ik0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function h48($){let Z;try{Z=ik0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=uh6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=ik0(G),K=W&&ik0(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 Ti}from"zod";function ch6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&lh6.test($)}function d48($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $40($){let Z=$.get("decofileScope");return jc($.var.studioContext,Z.organizationId,Z.githubRepo)}function Z40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof t6)return $.json({error:Q},409);let Y=UW(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 i48(){let $=new Q1;return $.use("/:virtualMcpId/:branch",m48),$.use("/:virtualMcpId/:branch/*",m48),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await j48(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(h48(X.decofile),200,{...J,"content-type":"application/json"});let G=JU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(d48(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return Z40(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 $40(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 Z40(Z,X)}}),$.patch("/:virtualMcpId/:branch",dh6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=ih6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{kk0(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(lF1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $40(Z),W=await v48(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:wi(Y)},J),K=JU1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:d48(Z)})}catch(G){return Z40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(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(UW(W)!==409)throw W;await lk0(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(UW(G)===409)return Z.json({error:"merge-conflict"},409);if(UW(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 Z40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(UW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return Z40(Z,Y)}}),$}var lh6,u48=500,l48=1048576,c48=1024,mh6=8388608,dh6,ih6,m48;var p48=D(()=>{P20();Sk0();G8();fW();CF1();Vk0();ZU1();iZ();b48();g48();sF1();yk0();yF();lh6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;dh6=I5({maxSize:mh6,onError:($)=>$.json({error:"Payload too large"},413)}),ih6=Ti.object({set:Ti.record(Ti.string(),Ti.unknown()).optional(),delete:Ti.array(Ti.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)<=u48,{message:`Patch cannot touch more than ${u48} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=l48),{message:`Each block must be at most ${l48} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=c48),{message:`Each block key must be at most ${c48} characters`}),m48=Ik0(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(!ch6(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||!y48(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await ZW(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(!Qm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=s80(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var n48=($)=>{let Z=new Q1;if(Z.use("*",td),Z.use("*",Te$),Z.route("/",fV0()),Z.route("/",J08()),Z.route("/",ie$()),Z.route("/",O88()),Z.route("/",G88()),Z.route("/",N88()),Z.route("/",K88()),Z.route("/",Rk0()),Z.route("/tools",P88()),Z.route("/",j88()),Z.route("/",g$8({kvStorage:$.kvStorage})),Z.route("/",f$8()),Z.route("/fs",a$8({getConnection:$.getNatsConnection})),Z.route("/sandbox",C48()),Z.route("/decofile",i48()),Z.route("/",Y88()),Z.route("/",e$8()),Z.route("/deco-sites",gV0()),Z.route("/hosting",be$()),Z.route("/monitor",le$()),Z.route("/sso",CV0()),Z.route("/",qk0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ke$()),$.mountDevAssets)Z.route("/dev-assets",cV0({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("/",br$()),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",Z88()),Z.route("/mcp",kR0()),Z.route("/mcp/self",zk0()),Z.route("/mcp",_R0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var t48=D(()=>{G8();Re$();zV0();Se$();sK1();xe$();ce$();mV0();af();nK1();YH1();y$8();h$8();s$8();$88();h10();lK1();vR0();AF1();Q88();X88();W88();H88();qF1();D88();E88();MF1();A88();IF1();SR0();_48();p48()});function ph6($){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 nh6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},o48=()=>{let $=new Q1;return $.use("*",nh6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await lJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:ph6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var r48=D(()=>{G8();F$();qI0()});import{z as v1}from"zod";function dU($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Yu6($){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 Xu6($,Z,Q){try{return JSON.parse($)}catch{throw new e48(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Ju6($){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:Xu6(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 Gu6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?PF(Q.function.parameters):PF({type:"object",properties:{}});return[Q.function.name,c$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Wu6($){if(!$)return;return{openai:{response_format:$}}}function Ku6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function a48($,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 s48($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var th6=256,oh6,rh6,ah6,sh6,eh6,$u6,Zu6,Qu6,e48,$68,Z68;var Q68=D(()=>{v4();G8();Li();NH();oh6=v1.object({type:v1.literal("function"),function:v1.object({name:v1.string(),description:v1.string().optional(),parameters:v1.record(v1.string(),v1.unknown()).optional()})}),rh6=v1.object({id:v1.string(),type:v1.literal("function"),function:v1.object({name:v1.string(),arguments:v1.string()})}),ah6=v1.discriminatedUnion("role",[v1.object({role:v1.literal("system"),content:v1.string(),name:v1.string().optional()}),v1.object({role:v1.literal("user"),content:v1.union([v1.string(),v1.array(v1.union([v1.object({type:v1.literal("text"),text:v1.string()}),v1.object({type:v1.literal("image_url"),image_url:v1.object({url:v1.string(),detail:v1.string().optional()})})]))]),name:v1.string().optional()}),v1.object({role:v1.literal("assistant"),content:v1.string().nullable().optional(),name:v1.string().optional(),tool_calls:v1.array(rh6).optional()}),v1.object({role:v1.literal("tool"),content:v1.string(),tool_call_id:v1.string()})]),sh6=v1.object({type:v1.literal("text")}),eh6=v1.object({type:v1.literal("json_object")}),$u6=v1.object({type:v1.literal("json_schema"),json_schema:v1.object({name:v1.string(),description:v1.string().optional(),schema:v1.record(v1.string(),v1.unknown()),strict:v1.boolean().optional()})}),Zu6=v1.union([sh6,eh6,$u6]),Qu6=v1.object({model:v1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:v1.array(ah6),stream:v1.boolean().optional().default(!1),temperature:v1.number().min(0).max(2).optional(),max_tokens:v1.number().positive().optional(),top_p:v1.number().min(0).max(1).optional(),frequency_penalty:v1.number().min(-2).max(2).optional(),presence_penalty:v1.number().min(-2).max(2).optional(),stop:v1.union([v1.string(),v1.array(v1.string())]).optional(),tools:v1.array(oh6).optional(),tool_choice:v1.union([v1.literal("auto"),v1.literal("none"),v1.literal("required"),v1.object({type:v1.literal("function"),function:v1.object({name:v1.string()})})]).optional(),response_format:Zu6.optional(),user:v1.string().optional()});e48=class e48 extends Error{constructor($){super($);this.name="MessageConversionError"}};$68=new Q1;$68.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(dU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(dU("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(dU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Qu6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(dU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Yu6(J.model);if(!G)return $.json(dU("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)=>Sz(E.providerId));if(!j)return $.json(dU("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(dU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Ju6(J.messages),N=J.tools?Gu6(J.tools):void 0,B=Wu6(J.response_format),O=Ku6(),L=Math.floor(Date.now()/1000);if(J.stream)return CO($,async(w)=>{let j=a48(F,U,N,J,B,$.req.raw.signal);try{let E=$m(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>=th6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:s48(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=a48(F,U,N,J,B,$.req.raw.signal),j=await HU(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:s48(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(dU("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(dU(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(dU(X.message,"server_error"),500)}});Z68=$68});function Hu6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Y68(){let $=new Q1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!dZ(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||P9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(us(U)!==J)continue;if(!Hu6(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 X68=D(()=>{G8();WW()});var G68;var J68=D(()=>{G68={name:"decocms",version:"4.401.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 Nu6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Uu6}}var W68,Uu6="https://ph.studio.decocms.com",K68;var H68=D(()=>{G8();Hr();rx();E9();F$();IK1();J68();W68=new Q1;W68.get("/",($)=>{let Z={version:G68.version,theme:J$$(),...RK().logo&&{logo:RK().logo},...GO()&&{internalUrl:yc1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:Rs$(),posthog:Nu6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:mO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});K68=W68});function Uy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function GU1($){return(Uy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function F68($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Uy($))}&sz=${Z}`}function Bu6($,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 U68($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=Bu6(`How does ${Q} really perform? See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as L$}from"zod";var Ou6,N68;var B68=D(()=>{Ou6=L$.object({check_id:L$.string(),title:L$.string(),description:L$.string().optional(),impact:L$.string().optional(),why:L$.string().optional(),category:L$.string(),severity:L$.string(),value_band:L$.string().optional(),value_driver:L$.string().optional(),controllability:L$.string().optional(),pages:L$.array(L$.string()),tasks:L$.array(L$.string()),evidence:L$.string(),sample_scope:L$.string().optional(),sources:L$.array(L$.string())}),N68=L$.object({domain:L$.string(),brand:L$.string(),favicon:L$.string().optional(),scanned_at:L$.string().nullable(),lang:L$.string(),score:L$.number().nullable(),band:L$.string().nullable(),totals:L$.object({measured:L$.number(),registry_total:L$.number(),passed:L$.number(),failed:L$.number(),blocked:L$.number()}),buckets:L$.array(L$.object({id:L$.enum(["critical","important","worth"]),label:L$.string(),items:L$.array(Ou6)})),passing:L$.object({count:L$.number(),items:L$.array(L$.object({check_id:L$.string(),title:L$.string()}))}),not_measured:L$.object({count:L$.number(),groups:L$.array(L$.object({reason:L$.string(),label:L$.string(),count:L$.number(),checks:L$.array(L$.string())}))}),categories:L$.array(L$.object({key:L$.string(),label:L$.string(),score:L$.number().nullable(),band:L$.string().nullable(),pass:L$.number(),fail:L$.number()})),screenshots:L$.array(L$.object({url:L$.string(),page_type:L$.string().optional(),viewport:L$.enum(["desktop","mobile"]),image_url:L$.string()}))})});function O68($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${uK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function pk0($,Z={}){let Q=await fetch(O68($,"",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 N68.parse(await Q.json())}async function D68($,Z={}){let Q=await fetch(O68($,".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 WU1=D(()=>{B68();Ow()});import{join as L68}from"path";async function Lu6($){try{let Z=await pk0($,{signal:AbortSignal.timeout(Du6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||GU1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function iJ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function wu6($,Z){let Q=Uy($),Y=Z?.brand?.trim()||GU1(Q),X=F68(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=U68({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${iJ(W)}</title>`,`<meta name="description" content="${iJ(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="${iJ(W)}" />`,`<meta property="og:description" content="${iJ(K)}" />`,`<meta property="og:url" content="${iJ(G)}" />`,`<meta property="og:image" content="${iJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${iJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${iJ(W)}" />`,`<meta name="twitter:description" content="${iJ(K)}" />`,`<meta name="twitter:image" content="${iJ(H)}" />`,`<meta name="twitter:image:alt" content="${iJ(F)}" />`,`<link rel="canonical" href="${iJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${iJ(G)}.md" />`,`<link rel="icon" href="${iJ(X)}" sizes="any" />`].join(`
|
|
3707
3707
|
`)}function ju6($,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}
|
|
3708
|
-
</head>`)}function w68($){let Z=new Q1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Uy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(L68($,"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(`${uK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(Eu6)}),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=Uy(Q.req.param("file").replace(/\.md$/,""));try{let X=await D68(Y,{signal:AbortSignal.timeout(zu6)});if(X===null)return Q.text("Report 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("Report unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?L68($,"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 Lu6(Uy(Y)),K=wu6(Y,W);return Q.html(ju6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Du6=2500,Eu6=1e4,zu6=1e4;var j68=D(()=>{G8();Ow();WU1();F$()});function nk0($,Z){return fetch(`${uK({})}${$}`,Z)}async function Pu6($,Z){let Q=await pk0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function Tu6($){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 Au6,vO,E68=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},z68;var P68=D(()=>{G8();gG();Ow();WU1();Au6=new Set(["complete","errored","terminated","unknown"]);vO=new Q1;vO.use("*",async($,Z)=>{let Q=await C8.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});vO.use("/link-token/*",E68);vO.use("/suggest",E68);vO.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 Pu6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});vO.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}=Tu6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await nk0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${OA({})}`},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)}});vO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await nk0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${OA({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Au6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});vO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await nk0(`/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)}});vO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await nk0(`/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:[]})}});z68=vO});var Ru6=1048576,KU1;var A68=D(()=>{G8();fW();F$();NK1();KU1=new Q1;KU1.post("/webhook",I5({maxSize:Ru6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!ya$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=ga$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await ha$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as qu6}from"crypto";function Vu6($,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 qu6(Buffer.from(X),Buffer.from(Y))}function ku6($,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 T68($){let Z=new Q1;return Z.post("/webhook",I5({maxSize:Mu6,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(!Vu6(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"&&!Iu6.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"});let N=(await E41())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=ku6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Su6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Su6($,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 kV$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Mu6=5242880,Iu6;var R68=D(()=>{G8();fW();QH();z7();Iu6=new Set(["check_suite","issue_comment"])});function q68($){let Z=new PO($.db,new FG($.encryptionKey)),Q=new Q1;return Q.get("/attachments/:token",async(Y)=>{let X=dM$(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 _Q(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 M68=D(()=>{G8();Vz();R51();qj()});function I68($){let Z=new PO($.db,new FG($.encryptionKey));async function Q(X,J){let G=Nn$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await PW($.db,W.organizationId);if(!K)return;if(await VI0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new Q1;return Y.post("/webhook/:secret",I5({maxSize:Cu6}),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 Cu6=1048576;var V68=D(()=>{G8();fW();Vz();kI0();dx()});import{DBOS as tk0,SchedulerMode as _u6}from"@dbos-inc/dbos-sdk";function S68($){FU1=$}function C68(){if(!FU1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return FU1}function _68(){let $=C68();return new PO($.db,new FG($.encryptionKey))}async function xu6($,Z){try{let Q=await _68().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await PW(C68().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new _Q(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${k68}m"`,K=0,H;for(let F=0;F<bu6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=Bn$(N,N.changelog?.histories??[],Z);for(let O of B)if(await VI0(Y,Q,O)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function fu6($,Z){let Q=new Date($.getTime()-k68*60000),Y=await tk0.runStep(()=>_68().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>tk0.runStep(()=>xu6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function v68(){if(HU1)return;HU1=tk0.registerWorkflow(fu6,{name:"jiraTriggerSweepWorkflow"}),tk0.registerScheduled(HU1,{name:"jiraTriggerSweepWorkflow",crontab:vu6,mode:_u6.ExactlyOncePerIntervalWhenActive})}var vu6="7-59/10 * * * *",k68=35,bu6=5,FU1=null,HU1=null;var b68=D(()=>{Vz();dx();qj();kI0()});function x68($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var f68,yu6,gu6,y68;var g68=D(()=>{G8();TK();Rm();sl();f68=new Q1,yu6=["range","if-none-match","if-modified-since"],gu6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];f68.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(nd($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new A$(401,{message:"Authentication required"})}if(!Q)throw new A$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new A$(400,{message:"Missing file key"});let X=await j10(Y,Z);if(!X)throw new A$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&XW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new A$(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 x68(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of yu6){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 A$(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 A$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of gu6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),x68(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});y68=f68});var Q40=b((Ny)=>{var hu6=Ny&&Ny.__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]}),uu6=Ny&&Ny.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))hu6(Z,$,Q)};Object.defineProperty(Ny,"__esModule",{value:!0});uu6($G(),Ny)});var l68=b((h68)=>{Object.defineProperty(h68,"__esModule",{value:!0});h68.version=void 0;h68.version="3.4.0"});var d68=b((iU)=>{var lu6=iU&&iU.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(iU,"__esModule",{value:!0});iU.NodeTransport=iU.VERSION=void 0;iU.nodeResolveHost=nu6;var m5=Q40(),cu6=q0("net"),UU1=q0("tls"),mu6=q0("path"),c68=q0("fs"),du6=lu6(q0("dns")),iu6=l68();iU.VERSION=iu6.version;var pu6="nats.js";class m68{socket;version;lang;yields=[];signal=(0,m5.deferred)();closedNotification=(0,m5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=pu6,this.version=iU.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,m5.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 m5.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 m5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new m5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,m5.deferred)(),Q,Y=(0,cu6.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,m5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=m5.DataBuffer.concat(...this.yields),X=(0,m5.extractProtocolMessage)(Y);if(X!=="")try{let J=m5.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,m5.deferred)();try{if($=(0,mu6.resolve)($),!(0,c68.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,c68.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,m5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new m5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,m5.deferred)();try{let X=(0,UU1.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 m5.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,m5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new m5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,m5.deferred)();try{let Y=(0,UU1.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 m5.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,m5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,m5.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 UU1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,m5.render)($)}`);let Z=(0,m5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,m5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,m5.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}}iU.NodeTransport=m68;function nu6($){let Z=(0,m5.deferred)();return du6.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 o68=b((t68)=>{Object.defineProperty(t68,"__esModule",{value:!0});t68.connect=tu6;var i68=d68(),p68=Q40(),n68=Q40();function tu6($={}){if((0,n68.hasWsProtocol)($))return Promise.reject(n68.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,p68.setTransportFactory)({factory:()=>{return new i68.NodeTransport},dnsResolveFn:i68.nodeResolveHost}),p68.NatsConnectionImpl.connect($)}});var r68=b((bO)=>{var ru6=bO&&bO.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),au6=bO&&bO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))ru6(Z,$,Q)};Object.defineProperty(bO,"__esModule",{value:!0});bO.connect=void 0;var su6=o68();Object.defineProperty(bO,"connect",{enumerable:!0,get:function(){return su6.connect}});au6(Q40(),bO)});function $58($){let Z=$?.connectFn??Ql6,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:Zl6,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=QQ($l6,eu6,O-1,2,0.5);await i$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?a68.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=e68.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 Ql6($){return s68.connect($)}var a68,s68,e68,eu6=100,$l6=3000,Zl6=3000;var Z58=D(()=>{D8();a68=C(ei(),1),s68=C(r68(),1),e68=C(JN(),1)});function ok0($){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 rk0($,Z){return`${$}.${Z}`}class NU1{cache;constructor($){this.cache=ok0({ttlMs:$?.ttlMs??Yl6,maxSize:$?.maxSize??Xl6})}async get($,Z){return this.cache.get(rk0($,Z))??null}async set($,Z,Q){this.cache.set(rk0($,Z),Q)}async invalidate($,Z){this.cache.delete(rk0($,Z)),this.cache.delete(rk0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Yl6=600000,Xl6=5000;var Q58=()=>{};function ak0($,Z){return`${$}:${Z}`}function BU1($){let Z=ok0({ttlMs:$?.ttlMs??Jl6,maxSize:$?.maxSize??Gl6}),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(Y58,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(ak0(K,H))},set(K,H,F){Z.set(ak0(K,H),F)},invalidate(K,H){Z.delete(ak0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(Y58),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(ak0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var Y58="studio.ai-provider-keys.invalidate",Jl6=30000,Gl6=5000;var X58=()=>{};class OU1{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 J58=($)=>{let Z;return()=>Z??=$()},DU1,LU1;var G58=D(()=>{C6();DU1=J58(()=>z$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),LU1=J58(()=>z$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function Bl6($=H58){return{name:jU,subjects:[`${VZ1}.>`],storage:MH.StorageType.File,max_age:Hl6,max_bytes:Ul6,max_msgs_per_subject:Nl6,discard:MH.DiscardPolicy.Old,retention:MH.RetentionPolicy.Limits,duplicate_window:Fl6,num_replicas:$}}class F58{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 W58($){let Z=K58.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function wl6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Kl6().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 jl6($,Z){return $.info?.cluster?Z:1}function El6($){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 wU1{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=Bl6(X);try{await Y.streams.info(jU),await Y.streams.update(jU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(jU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(jU),await Y.streams.add(J);else throw G}},Q=await g8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await MH.jetstreamManager($),X=jl6($,H58);try{await Z(Y,X)}catch(J){if(X<=1||!El6(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:vm});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=wl6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=BC$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=SZ1(H,{runId:Z}),N=performance.now()-F;DU1().record(N),LU1().add(1,{"org.id":Y??"unknown"}),Ll6?.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?W58(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(),Dl6)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 g8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:W58(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:vm}),!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=SZ1(Z,{runId:$,dedup:Q});DU1().record(performance.now()-X),LU1().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=NC$({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"?MH.DeliverPolicy.New:MH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=vj($),W;try{W=await g8(async()=>{return(await Y.consumers.get(jU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:vm})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=sT0({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(tT0()).pipeThrough(oT0()).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(jU,{filter:vj($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var MH,K58,Wl6=($)=>{let Z;return()=>Z??=$()},Kl6,Hl6=86400000000000,Fl6=120000000000,Ul6=4294967296,H58,Nl6=500000,Ol6,Dl6,Ll6;var U58=D(()=>{D8();CZ1();eT0();rT0();C6();G58();MH=C(JN(),1),K58=C(ei(),1),Kl6=Wl6(()=>z$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),H58=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);Ol6=process.env.STREAM_ENCODE_TRACE==="1",Dl6=process.env.DECOPILOT_STREAM_TRACE==="1";Ll6=Ol6?new F58:null});function sk0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,nH(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 N58=D(()=>{e8()});class jU1{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 zl6($,Z){let Q=$.startsWith("thread:")?YH($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function EU1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await WU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await gc($,{threadId:X,runBranch:G?.branch}),K=zl6(W,await jA0($,X)),H=await ze($,Q,n11(J)).catch(()=>null);if(!H){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}for(let F of K){let U=await H.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:H.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await aG(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 B58=D(()=>{iZ();jW();z7()});async function O58($,Z,Q){let Y=Z.organizationId;if(!VX(Z))return!1;if(!ix(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=tF(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await o6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),E8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var D58=D(()=>{C4();_Y();jm();WH();V9()});function Il6($){return $ instanceof zX}function L58($,Z){return Z-$>=ql6}class zU1{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??Pl6;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??Tl6,Q=this.options.itemIntervalMs??Al6,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()-j51),y91);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()-Ml6));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 b91(this.taskBoard,X,Y),await x91(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!==T$.progress||VX(W)||W.assigneeId!==j8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await EU1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!L58(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:T$.progress,to:T$.review,reason:H}}).catch(()=>{}),E8(J,F),await KH(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!==T$.progress||G.assigneeId!==j8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await HH(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),Il6(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()+Rl6)).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!==T$.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(()=>{}),E8(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(!L58(kB(Q,Z.reviewCycleStartedAt),Date.now()))return;await KH($,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(!VX(Y))return!1;let X=Y.assigneeId===j8,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 EU1(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 Pm(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 O58(G,Y,W))return!0;if(await w_$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!S91(W))return!1;return await Em(G,Y,{previewMatchesHead:C91(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await kj($,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 Pl6=60000,Al6=300000,Tl6=50,Rl6=60000,ql6=900000,Ml6=120000;var w58=D(()=>{C4();FT0();B58();LU();k10();WH();D58();V9();FW();g91();z7();Z10();zm()});import{readdir as Vl6,rm as ek0}from"fs/promises";import{join as $S0}from"path";async function ZS0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-kl6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await By($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await j58($,X,Z);else if(!X.startsWith(".")){let J=$S0($,X),G=await By(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await j58(J,K,Z)}if((await By(J)).length===0)await ek0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function j58($,Z,Q){let Y=0,X=$S0($,Z),J=await By(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=$S0(X,W),H=await By(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=$S0(K,U);await ek0(B,{recursive:!0,force:!0}),Y++}}if((await By(K)).length===0)await ek0(K,{recursive:!0,force:!0})}if((await By(X)).length===0)await ek0(X,{recursive:!0,force:!0});return Y}async function By($){try{return(await Vl6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var kl6=30;var PU1=()=>{};import{DBOS as AU1,SchedulerMode as Sl6}from"@dbos-inc/dbos-sdk";async function _l6(){let $=[uW(),Ay(),sU()],Z=0;for(let Q of $)try{Z+=await ZS0(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 vl6($,Z){await AU1.runStep(()=>_l6(),{name:"monitoringRetention"})}function z58(){if(E58)return;E58=!0;let $=AU1.registerWorkflow(vl6,{name:"monitoringRetentionWorkflow"});AU1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Cl6,mode:Sl6.ExactlyOncePerIntervalWhenActive})}var Cl6="23 4 * * *",E58=!1;var P58=D(()=>{O3();PU1()});function A58($){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 vQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await RA($.db,Z,Y.role);return X.boundAuth=XK1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new HP(Q,void 0,X.boundAuth,Y.role,"self"),Vj(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var T58=D(()=>{BK();iF()});function bl6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function xl6(){return{services:bl6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function yl6(){for(let $ of fl6)$()}function R58($){let Z=[...TU1.logs,$];TU1={...TU1,logs:Z.length>500?Z.slice(-500):Z},yl6()}function RU1(){return gl6}var TU1,fl6,gl6=!1;var qU1=D(()=>{TU1=xl6(),fl6=new Set});import{EventEmitter as hl6}from"events";var MU1;var q58=D(()=>{qU1();MU1=new hl6;MU1.on("request",($)=>{R58($)})});function M58(){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=Ri(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>Ri(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${Z9.tool}${B}${Z9.dim}(${w})${Z9.reset}`}else if(N.method)J=`${Z9.dim}${Ri(N.method)}${Z9.reset}`}}catch{}}let W=Ri(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${Z9.mcp}${Ri(F.slice(0,12))}\u2026${Z9.reset}`}else if(X==="/mcp")W=`${Z9.mcp}/mcp${Z9.reset}`;else if(X==="/mcp/registry")W=`${Z9.mcp}/mcp/registry${Z9.reset}`;let K=ll6(Y),H=G?"\u25C0":"\u2190";if(!RU1())console.log(`${Z9.dim}${H}${Z9.reset} ${K}${Y}${Z9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=ul6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!RU1())console.log(`${Z9.dim}${O}${Z9.reset} ${K}${Y}${Z9.reset} ${W}${J?` ${J}`:""} ${N}${U}${Z9.reset} ${Z9.duration}${B}${Z9.reset}`);MU1.emit("request",{method:Y,path:Ri(X),status:U,duration:F,timestamp:new Date})}}}var Z9,ul6=($)=>{if($>=500)return Z9.serverError;if($>=400)return Z9.clientError;if($>=300)return Z9.redirect;return Z9.ok},ll6=($)=>{return Z9[$]||Z9.reset},Ri=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var I58=D(()=>{qU1();q58();Z9={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 C58}from"crypto";import{mkdir as cl6,readdir as ml6,rm as V58,stat as _58}from"fs/promises";import{join as VU1,relative as dl6}from"path";import{z as a$}from"zod";function b58($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return VU1(il6,Z)}function x58($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function IU1($,Z){let Q=b58($),Y=x58(Z);return VU1(Q,Y)}function pl6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return C58("sha256",X).update(J).digest("hex")}function S58($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=pl6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${x58(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function f58($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${C58("md5","etag").update(Y).digest("hex")}"`}async function y58($,Z,Q,Y,X){try{let J=await ml6($,{withFileTypes:!0});for(let G of J){let W=VU1($,G.name),H=dl6(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 y58(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 _58(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:f58(W,F.mtime,F.size)})}catch{}}}}catch{}}function g58($,Z){let Y=K0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:a$.object({prefix:a$.string().optional(),maxKeys:a$.number().optional().default(1000),continuationToken:a$.string().optional(),delimiter:a$.string().optional()}),outputSchema:a$.object({objects:a$.array(a$.object({key:a$.string(),size:a$.number(),lastModified:a$.string(),etag:a$.string()})),nextContinuationToken:a$.string().optional(),isTruncated:a$.boolean(),commonPrefixes:a$.array(a$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=b58(Y);await cl6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await y58(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:a$.object({key:a$.string()}),outputSchema:a$.object({contentType:a$.string().optional(),contentLength:a$.number(),lastModified:a$.string(),etag:a$.string(),metadata:a$.record(a$.string(),a$.string()).optional()}),handler:async(X)=>{let J=X,G=IU1(Y,J.key),W=await _58(G);return{contentType:ZH1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:f58(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:a$.object({key:a$.string(),expiresIn:a$.number().optional()}),outputSchema:a$.object({url:a$.string(),expiresIn:a$.number()}),handler:async(X)=>{let J=X,G=lf(J.expiresIn,k58);return{url:S58(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:a$.object({key:a$.string(),expiresIn:a$.number().optional(),contentType:a$.string().optional()}),outputSchema:a$.object({url:a$.string(),expiresIn:a$.number()}),handler:async(X)=>{let J=X,G=lf(J.expiresIn,k58);return{url:S58(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:a$.object({key:a$.string()}),outputSchema:a$.object({success:a$.boolean(),key:a$.string()}),handler:async(X)=>{let J=X,G=IU1(Y,J.key);try{return await V58(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:a$.object({keys:a$.array(a$.string()).max(1000)}),outputSchema:a$.object({deleted:a$.array(a$.string()),errors:a$.array(a$.object({key:a$.string(),message:a$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=IU1(Y,K);try{await V58(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function kU1($,Z,Q){let Y=g58(Z,Q),X=new TL({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:zZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:a$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:a$.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 Q3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),MW(X,J,$,"mcp:dev-assets")}async function h58($,Z,Q,Y){let J=g58(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 il6="./data/assets",k58=3600,v58,u58;var l58=D(()=>{F$();um();G8();hY0();hm();sX();WE();mV0();v58=new Q1;v58.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return kU1($.req.raw,Z,Y)});u58=v58});var c58={};M6(c58,{mountDevRoutes:()=>nl6});function nl6($,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 kU1(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 h58(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",u58);let Q=new Q1;Q.use("*",RH({mountPath:"/api/dev-assets"})),Q.route("/",cV0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var m58=D(()=>{G8();tK1();mV0();l58()});var e58={};M6(e58,{watchHandler:()=>s58,resolveCorsOrigin:()=>r58,isSsoExemptPath:()=>t58,isAllowedOAuthRedirectUri:()=>a58,createApp:()=>Yc6});import{readFileSync as tl6}from"fs";import{PrometheusSerializer as ol6}from"@opentelemetry/exporter-prometheus";import{DBOS as xO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as sl6,oAuthProtectedResourceMetadata as el6}from"better-auth/plugins";async function rl6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,i58(d58)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),i58(d58)]),Q.release(),!0}catch{return Q.release(!0),!1}}function i58($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function t58($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${VV0}/`)||$.startsWith(`${TV0}/`)}function o58($){return $==="local.studio.decocms.com"}function r58($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(o58(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function a58($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||o58($.hostname)}async function Yc6($={}){let Z=$.database??S8(),Q=!1;e5.stop().catch((Q0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",Q0)});let Y,X,J,G,W=new NU1,K,H,F,U=null;if($.disableNats)K=BU1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new g10,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(Q0)=>{return(async()=>{let w0=Q0.getReader();try{while(!0){let{done:e}=await w0.read();if(e)break}}catch{}finally{w0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=$58();let Q0=E0().natsCredsPath,w0;if(Q0)try{w0=tl6(Q0,"utf8")}catch(f0){console.error(`[app] failed to read NATS_CREDS at ${Q0}; connecting anonymously`,f0)}U.init(E0().natsUrls,w0?{creds:w0}:void 0);let e=he0()?new Ae0({getJetStream:()=>U.getJetStream()}):null;e?.init().catch(()=>{}),Y=e;let i=new b41({getJetStream:()=>U.getJetStream()});i.init().catch(()=>{}),X=i;let m0=new nx(R91,{getJetStream:()=>U.getJetStream()}),I0=new nx(Q10,{getJetStream:()=>U.getJetStream()});m0.init().catch(()=>{}),I0.init().catch(()=>{}),J={reads:m0,cards:I0};let t0=new NQ1({getJetStream:()=>U.getJetStream()});t0.init().catch(()=>{}),G=t0,K=BU1({getConnection:()=>U.getConnection()}),H=new OU1({getConnection:()=>U.getConnection()}),F=new wU1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),Js$(U),U.onReady(()=>{e?.init().catch((f0)=>{console.error("[McpListCache] Deferred init failed:",f0)}),i.init().catch((f0)=>{console.error("[SkillCatalogCache] Deferred init failed:",f0)}),m0.init().catch((f0)=>{console.error("[PrReadCache] Deferred init failed:",f0)}),I0.init().catch((f0)=>{console.error("[PrCardCache] Deferred init failed:",f0)}),t0.init().catch((f0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",f0)}),K.start(),bK$(()=>U.getConnection()),F.init().catch((f0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",f0)})})}if(LE)await LE();Te0(Y),f41(X),q91(J),BQ1(G);let B={storage:new Kh(Z.db),sseHub:e5,onThreadFinished:async(Q0,w0)=>Tm(new rG(Z.db),Q0,w0,new DG(Z.db))},O=new yZ1(B),L=new X80(Z.db),w=new jU1(L);w.start(),D_$(H),H.start((Q0)=>{yT0(Q0),O.execute({type:"CANCEL",taskId:Q0}).catch((w0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",w0)})}).catch((Q0)=>{console.error("[Decopilot] CancelBroadcast start failed:",Q0)}),U?.onReady(()=>{H.start().catch((Q0)=>{console.error("[CancelBroadcast] Deferred start failed:",Q0)})});let j=()=>U?.getConnection()??null;dK1(j),U?.onReady(()=>dK1(j)),iQ1(j),U?.onReady(()=>iQ1(j)),F.init().catch((Q0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",Q0)}),LE=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),Le$(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),xK$(),G.teardown(),Te0(null),f41(null),q91(null),BQ1(null)};let E=new Q1;if(E.use("*",HQ1({enabled:(Q0)=>pd(Q0,"debug")==="1"})),E.use("*",TS0),E.use("/*",$s$({origin:(Q0,w0)=>r58(Q0,{baseUrl:E0().baseUrl,requestOrigin:new URL(w0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(Q0,w0)=>{if(await w0(),Q0.req.path.includes("/files/"))return;if(Q0.req.path.includes("/fs/")&&Q0.req.path.endsWith("/read"))return;Q0.header("X-Frame-Options","DENY"),Q0.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",M58());E.use("*",async(Q0,w0)=>{if(await w0(),bi(Q0.req.path))return;if(Q0.res.status>=500){let i=await Q0.res.clone().text();console.error(`[5xx Response] ${Q0.req.method} ${Q0.req.path} - ${Q0.res.status}:`,i)}}),E.get(mY.HEALTH,(Q0)=>{if(Q)return Q0.json({status:"shutting_down"},503);return Q0.json({status:"ok"})}),E.get(mY.HEALTH_LIVE,(Q0)=>{return Q0.json({status:"ok"})}),E.get(mY.HEALTH_READY,async(Q0)=>{if(Q)return Q0.json({status:"shutting_down"},503);let w0={};if(w0.postgres={status:await rl6(Z.pool)?"up":"down"},U)w0.nats=U.isConnected()?{status:"up"}:{status:"down"};else w0.nats={status:"down"};let e=w0.postgres.status==="up",i=e?200:503;return Q0.json({status:e?"ready":"not_ready",services:w0},i)}),E.get(mY.METRICS,async(Q0)=>{try{let w0=await IS0.collect(),e=al6.serialize(w0.resourceMetrics);return Q0.text(e,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(w0){return console.error("Failed to collect metrics:",w0),Q0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${mY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(Q0)=>{let w0=Q0.req.param("queueName");if(!$c6.has(w0))return Q0.json({error:`Unknown queue: ${w0}`},404);let[e,i]=await Promise.all([xO.listQueuedWorkflows({queueName:w0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),xO.listQueuedWorkflows({queueName:w0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return Q0.json({queue_length:e.length,in_flight:i.length})}),E.route("/api/config",K68),E.route("/api/_reports",z68),E.route("/api/_stripe",KU1),E.route("/api/_github",T68({taskBoard:()=>n,contextFactory:()=>g})),E.route("/api/_git",$i);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",I68(T)),E.route("/api/_jira",q68(T)),E.route("/report",w68($.clientDir)),E.route("/api/auth/custom",qs$),E.route("/api/auth/desktop",ks$),E.all("/api/auth/admin/*",Qe$),E.all("/api/auth/*",async(Q0)=>{return await C8.handler(Q0.req.raw)});let P=vr$();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",w80),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",w80),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",$80),E.route("/",gr$()),E.use("/oauth-proxy/:connectionId/*",w80),E.all("/oauth-proxy/:connectionId/*",p58);let A=async(Q0)=>{let e=await Zc6()(Q0.req.raw),i=await e.json();return Response.json(i,e)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",w80),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(Q0)=>{let e=await Qc6()(Q0.req.raw),i=await e.json();return Response.json(i,e)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=Qs$({ttlMs:120000}),_=await Ia$({db:Z.db,auth:C8,encryption:{key:E0().encryptionKey},observability:{tracer:dO,meter:z$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});vQ.set(_),Mc1({db:Z.db,baseUrl:x5()}),Va$({db:Z.db}),_a$({db:Z.db}),ua$({db:Z.db}),S68({db:Z.db,encryptionKey:E0().encryptionKey}),pI$({db:Z.db}),pa$({db:Z.db}),DV$({db:Z.db});let V=VQ0(Z.db),y=new Uo(Z.db),g=A58({db:Z.db});JQ1({storage:V,studioContextFactory:g}),nZ1({systemDatabaseUrl:mt0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:e5}}),uZ1({dispatchRunFn:JC$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:e5}});let l=new Kh(Z.db),n=new rG(Z.db),p=new DG(Z.db),F0=new zU1(n,g,p);if(E0().taskBoardReviewSweeperEnabled){F0.start();let Q0=LE;LE=async()=>{await Q0?.(),F0.dispose()}}MC$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let Q0=U?.getConnection();return Q0?await n58.jetstreamManager(Q0):null},messageParts:l.messageParts(),resolveRun:async(Q0)=>{let w0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",Q0).executeTakeFirst();return w0?{orgId:w0.organization_id,createdBy:w0.created_by,version:w0.message_storage_version??1,status:w0.status,runFenceToken:w0.run_fence_token,title:w0.title??null}:null},completeRunIfNotCompleted:async(Q0,w0)=>{let e=await l.completeRunIfNotCompleted(Q0,w0);if(sk0(e5,w0,Q0,e),e)await Tm(n,Q0,w0,p);return e},markRunRequiresAction:async(Q0,w0)=>{let e=await l.requiresActionIfInProgress(Q0,w0);return sk0(e5,w0,Q0,e),e},markRunFailed:async(Q0,w0,e,i)=>{let m0=await l.markRunFailed(Q0,w0,e,i);if(sk0(e5,w0,Q0,m0),m0)await Tm(n,Q0,w0,p);return m0},clearSynthesizedError:async(Q0,w0)=>{await l.messageParts().replaceMessageParts(Q0,_j(Q0,w0),[])},persistTitle:(Q0,w0,e)=>l.update(Q0,w0,{title:e}),onTitleUpdated:async({runId:Q0,orgId:w0,title:e})=>{let i=await l.get(Q0,w0).catch(()=>null);e5.emit(w0,nH(Q0,i?.status??"in_progress",{title:e,virtualMcpId:i?.virtual_mcp_id??void 0,createdBy:i?.created_by,triggerId:i?.trigger_id,branch:i?.branch??null,harnessId:i?.harness_id??void 0,createdAt:i?.created_at,updatedAt:i?.updated_at}))},bumpProgress:async({runId:Q0,orgId:w0})=>{await l.bumpProgress(Q0,w0)},recordCompleted:async({runId:Q0,orgId:w0,distinctId:e,usage:i})=>{f1.capture({distinctId:e,event:"chat_message_completed",groups:{organization:w0},properties:{organization_id:w0,thread_id:Q0,transport:"projector",input_tokens:i.inputTokens,output_tokens:i.outputTokens,total_tokens:i.totalTokens}})},recordFailed:async({runId:Q0,orgId:w0,distinctId:e,reason:i,kind:m0})=>{f1.capture({distinctId:e,event:"chat_message_failed",groups:{organization:w0},properties:{organization_id:w0,thread_id:Q0,transport:"projector",error_category:m0,error_message:i}})},purgeRun:async(Q0)=>{F.purge(Q0)}}),CS$({studioContextFactory:g,systemDatabaseUrl:mt0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),z58(),Ic1(),Sa$(),ba$(),ca$(),v68(),aI$(),ta$(),LV$();let V0=async(Q0,w0,e)=>{let i=await V.findById(Q0,w0);if(!i)throw Error("Automation not found");return KQ1({automationId:i.id,organizationId:i.organization_id,triggerId:null})},G0=new sd(V,({automation:Q0,trigger:w0,contextMessages:e,idempotencyKey:i})=>y10({automationId:Q0.id,organizationId:Q0.organization_id,triggerId:w0.id,contextMessages:e},{idempotencyKey:i})),H0=[uW(),Ay(),sU()];for(let Q0 of H0)ZS0(Q0).then(()=>{}).catch((w0)=>console.error("[monitoring] Retention cleanup failed:",w0));let X0=()=>C8.api.deleteAllExpiredApiKeys().catch((Q0)=>console.error("[auth] Expired API key cleanup failed:",Q0));X0(),setInterval(X0,86400000).unref(),E.use("*",async(Q0,w0)=>{if(PS0(Q0.req.path))return w0();let e={measure:async(m0,I0)=>{qW(Q0,m0);try{return await I0()}finally{Y3(Q0,m0)}}},i=await vQ.create(Q0.req.raw,{timings:e});i.automationRunner=V0,Q0.set("studioContext",i);try{await w0()}finally{let m0=i.pendingRevalidations;if(m0.length>0)Promise.race([Promise.allSettled(m0),i$(30000)]).catch((t0)=>console.error("[studio] revalidation cleanup error:",t0))}}),E.use("/api/:org/decopilot/*",td),E.use("/api/:org/v1/*",td),E.use("/api/:org/files/*",td),E.use("*",async(Q0,w0)=>{if(t58(Q0.req.path))return w0();let e=Q0.get("studioContext");if(!e?.organization?.id||!e?.auth?.user?.id)return w0();if(!(await e.storage.orgSsoConfig.getByOrgId(e.organization.id))?.enforced)return w0();if(!await e.storage.orgSsoSessions.isValid(e.auth.user.id,e.organization.id))return Q0.json({error:"SSO authentication required for this organization"},403);return w0()});let Z0=new Q1;Z0.use("*",RH({mountPath:"/api/org-sso"})),Z0.route("/",CV0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(Q0)=>{return Q0.json({tools:Ri0,grouped:KP()})}),E.use("/mcp/*",async(Q0,w0)=>{qW(Q0,"mcp");try{return await w0()}finally{Y3(Q0,"mcp")}});let Y0=async(Q0,w0)=>{let e=Q0.var.studioContext;if(!e.auth.user?.id&&!e.auth.apiKey?.id){let i=new URL(Q0.req.url),m0=Q0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),I0=m0?`${m0}://${i.host}`:i.origin;return Q0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${I0}${i.pathname}/.well-known/oauth-protected-resource"`}})}return await w0()};if(E.use("/mcp/:connectionId?",Y0),E.use("/mcp/gateway/:virtualMcpId?",Y0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Y0),E.use("/mcp/self",Y0),XW()){let{mountDevRoutes:Q0}=(m58(),HS0(c58));Q0(E,Y0)}let o=new Q1;o.use("*",RH({mountPath:"/mcp"})),o.route("/",kR0()),E.route("/mcp",o);let J0=new Q1;J0.use("*",RH({mountPath:"/mcp/self"})),J0.route("/",zk0()),E.route("/mcp/self",J0);let c0=new Q1;c0.use("*",RH({mountPath:"/mcp"})),c0.route("/",_R0()),E.route("/mcp",c0),E.use("/api/:org/models/*",async(Q0,w0)=>{qW(Q0,"llm_models");try{return await w0()}finally{Y3(Q0,"llm_models")}});let k0=je$({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",k0),E.route("/api",y68);let j1=new Q1;j1.use("*",RH({mountPath:"/api"})),j1.route("/",Rk0()),E.route("/api",j1),E.route("/api",Z68);let d0=new Q1;d0.use("*",RH({mountPath:"/api"})),d0.route("/",qk0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",d0);let L0=new Bo(Z.db),j0=new Q1;j0.use("*",RH({mountPath:"/api"})),j0.route("/",fV0()),E.route("/api",j0),E.route("/api/deco-sites",_e$()),E.route("/api/deco-apps",o48());let s0=new Q1;s0.use("*",RH({mountPath:"/api/deco-sites"})),s0.route("/",gV0()),E.route("/api/deco-sites",s0),E.route(VV0,Ye$()),E.route(F88,B88()),E.route("/api/_editor-resolve",Y68()),E.route(Cs$,_s$()),E.route(TV0,cs$());let P1=n48({kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:e5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:XW(),mcpAuth:Y0,oauthProxyHandler:p58,watchHandler:s58,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",P1),E.notFound((Q0)=>{return Q0.json({error:"Not Found",path:Q0.req.path},404)}),E.onError(Pe$),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([e5.stop(),LE?Promise.resolve(LE()).finally(()=>{LE=null}):Promise.resolve()]),U)await U.drain().catch((Q0)=>console.error("[shutdown] NATS drain error:",Q0));console.log("[shutdown] Flushing telemetry..."),await fX().catch((Q0)=>console.error("[shutdown] Telemetry flush error:",Q0)),console.log("[shutdown] Closing database..."),await P4$(Z).catch((Q0)=>console.error("[shutdown] Database close error:",Q0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await xO.registerQueue(B3,{partitionQueue:!0,concurrency:QQ1,minPollingIntervalMs:YQ1}),await xO.registerQueue(N3,{partitionQueue:!0,concurrency:iZ1,priorityEnabled:!0}),await xO.registerQueue(rU,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await xO.registerQueue(aU,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await xO.registerQueue(cO,{partitionQueue:!0,concurrency:SS$}),await xO.registerQueue(PE,OV$),await oK1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((Q0)=>xO.deleteQueue(Q0))),await XQ1(Z.pool),c9$().catch((Q0)=>{console.error("[studio-pack-backfill] failed:",Q0)}),Vc1().catch((Q0)=>{console.error("[org-fs] public-sets boot sync kick failed:",Q0)})}})}var n58,d58=5000,LE=null,p58=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 vQ.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 cd(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 Z80(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=yr$(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!a58(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(ra$(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()),F0=p.indexOf(":");if(F0!==-1){let V0=decodeURIComponent(p.slice(0,F0)),G0=decodeURIComponent(p.slice(F0+1));A=V0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof l==="string"&&l)q=l;let n=new URLSearchParams;for(let[p,F0]of y.entries())n.append(p,F0.toString());P=n.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 n=typeof l==="object"&&l!==null&&!Array.isArray(l);if(P===void 0&&!n)P=g;if(P===void 0){let p=l,F0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...F0,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 x=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 x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,n=null;try{n=await md(G.connection_url)??O}catch{n=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:n};await new F9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},s58=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&&(!OU(Y)||!await DU(Z)))return $.json({error:"forbidden"},403);let W=G?t20:Y;if(G)YO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return CO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!e5.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(()=>{e5.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),e5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),e5.remove(W,K),N()})})})},al6,$c6,Zc6=()=>el6(C8),Qc6=()=>sl6(C8);var $98=D(()=>{D8();F$();kc1();Ca$();xa$();ma$();m10();W91();oa$();Z10();E9();sl();e8();G8();jV0();Zs$();FQ1();gG();iF();zK1();c3();C6();U6();IK1();Ss$();vs$();ms$();vK1();Xe$();lK1();Ee$();nK1();iK();QV0();tK1();Ae$();zV0();t48();sK1();r48();SR0();h10();Q68();vR0();IF1();X68();qF1();H68();j68();P68();A68();R68();M68();V68();b68();YH1();g68();MF1();AF1();j40();Z58();DJ();CA0();I91();fs();gs();DQ1();Q58();X58();iK1();U58();gZ1();N58();on();Do();QO();V9();lW1();w58();P58();NJ0();PU1();O3();rK1();ZO();xZ1();NJ0();nT0();Ni0();Bi0();T58();Hu();I58();Li();zK1();Lm();Cm();gT0();n58=C(JN(),1);al6=new ol6,$c6=new Set([B3,N3,rU,aU,cO,PE])});var X98={};M6(X98,{resolveClientDir:()=>Fc6,resolveAssetPathWithTraversalCheck:()=>Y98,isPathWithinDirectory:()=>Q98,createAssetHandler:()=>Uc6});import{resolve as Y40,dirname as Xc6,join as Jc6,extname as Gc6,basename as Wc6,sep as Z98}from"path";function Kc6($,Z){if($===Z||Wc6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${Z98}assets${Z98}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Q98($,Z){let Q=Y40(Z),Y=Y40($);return Y===Q||Y.startsWith(Q+"/")}function Y98({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=Y40(Z,Q);if(!Q98(Y,Z))return null;return Y}function Fc6($,Z="../client"){let Q=new URL($),Y=Xc6(Q.pathname);return Y40(Y,Z)}function Uc6($={}){let{env:Z="production",clientDir:Q=Hc6,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=Y98({requestPath:W,clientDir:Q});if(!K)return null;let H=Jc6(K,"index.html"),F=Y40(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Gc6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:Kc6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var Hc6="./dist/client";var J98=()=>{};var G98={};M6(G98,{tryUpgradePreviewWs:()=>jc6,tryHandlePreviewHttp:()=>wc6,previewWebSocketHandler:()=>Ec6,parsePreviewBaseDomain:()=>Lc6,isPreviewWsData:()=>QS0,extractHandleFromHost:()=>SU1});function Oc6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function Dc6(){return new Response(Bc6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function Lc6($){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 SU1($,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 wc6($,Z){let Q=SU1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return J40(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Ax)&&Oc6($))return Dc6();return X.headers.delete(Ax),X}function J40($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function QS0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function jc6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=SU1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return J40(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return J40(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return J40(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 J40(426,"upgrade failed");return}function X40($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var Nc6=256,Bc6='<!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>',Ec6;var W98=D(()=>{O41();Ec6={open($){let Z=$.data;if(!QS0(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)}`),X40($,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)=>{X40($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{X40($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!QS0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=Nc6){X40($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!QS0(Z))return;X40($,Z,1000,"")}}});var U98={};M6(U98,{printBanner:()=>Pc6,bannerLines:()=>F98,BANNER_LINES:()=>K98,BANNER_GRADIENT:()=>H98});function zc6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function F98($){let Z=K98.map((Q,Y)=>{let[X,J,G]=zc6(H98[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 Pc6($){console.log("");for(let Z of F98($))console.log(Z);console.log("")}var K98,H98;var N98=D(()=>{K98=[" \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 "],H98=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});D8();var mU1="13";function dU1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:mU1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}D8();import S98 from"pg";var iU1=8314027461559302n,C98=600000,_98=500;async function pU1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=C98}=$,X=$.log??((K)=>console.log(K)),J=new S98.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",[iU1.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 i$(_98)}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)",[iU1.toString()])}catch{}await J.end().catch(()=>{})}}F$();BS0();C6();function SZ8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function SS0($,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 kN1(){let $=SZ8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:SS0($,"--cpu-prof-dir")??process.cwd(),name:SS0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(SS0($,"--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.'}))}vS0();var P40;function gN1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=RE();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(()=>{}),P40=setInterval(()=>void Z().catch(()=>{}),$),P40.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(P40)clearInterval(P40)}}import*as vZ8 from"bun:jsc";var{startSamplingProfiler:bZ8,samplingProfilerStackTraces:xZ8}=vZ8;function hN1(){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{bZ8()}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=xZ8()?.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 uN1(){kN1();let $=[gN1(),yN1(),hN1()];return()=>{for(let Z of $)Z()}}import{existsSync as kc6}from"fs";var pJ=E0();MN1();var{DBOS:G40,DBOSClient:Ac6}=await import("@dbos-inc/dbos-sdk");function fU1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var Tc6=[B3,N3,rU,aU,cO,PE],Rc6=pJ.dispatchRole==="worker"?Tc6:pJ.dispatchRole==="api"?[]:void 0;G40.setConfig(dU1({systemDatabaseUrl:fU1(pJ.databaseUrl,pJ.databasePgSsl),poolSize:pJ.dbosPoolSize,executorID:pJ.podName,listenQueues:Rc6}));var{createApp:qc6}=await Promise.resolve().then(() => ($98(),e58)),{isServerPath:Mc6}=await Promise.resolve().then(() => (j40(),HN1)),{createAssetHandler:Ic6,resolveClientDir:w98}=await Promise.resolve().then(() => (J98(),X98)),Vc6=pJ.port,B98=w98(import.meta.url,"../client"),j98=kc6(B98)?B98:w98(import.meta.url,"../dist/client"),Sc6=Ic6({clientDir:j98,isServerPath:Mc6}),Cc6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function _c6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Cc6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:vc6,tryHandlePreviewHttp:bc6,tryUpgradePreviewWs:xc6,previewWebSocketHandler:CU1,isPreviewWsData:_U1}=await Promise.resolve().then(() => (W98(),G98)),{getOrInitSharedRunner:E98}=await Promise.resolve().then(() => (QH(),qE$)),z98=vc6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),O98={baseDomain:z98??"",getRunner:E98};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())E98().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var YS0=await qc6({clientDir:j98}),vU1=process.env.DBOS_CONDUCTOR_KEY?.trim(),D98=process.env.DBOS_CONDUCTOR_URL?.trim();await pU1({databaseUrl:fU1(pJ.databaseUrl,pJ.databasePgSsl)},()=>G40.launch({...vU1?{conductorKey:vU1}:{},...vU1&&D98?{conductorURL:D98}:{}}));console.log(`[dbos] application version: ${G40.applicationVersion}`);var bU1=5,xU1=0;await g8(async()=>{xU1++;try{return await YS0.initDbos()}catch($){let Z=xU1>=bU1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${xU1}/${bU1} failed, ${Z}`,$),$}},{maxAttempts:bU1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!pJ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (N98(),U98));console.log("");for(let Z of $())console.log(Z)}var fc6=Bun.serve({idleTimeout:0,port:Vc6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(z98){let Y=await xc6($,Z,O98);if(Y===void 0)return;if(Y)return Y;let X=await bc6($,O98);if(X)return X}let Q=await Sc6($);if(Q)return _c6(Q);return YS0.fetch($,{server:Z})},websocket:{open($){if(_U1($.data))CU1.open($)},message($,Z){if(_U1($.data))CU1.message($,Z)},close($){if(_U1($.data))CU1.close($)}},development:!1}),yc6=uN1();if(pJ.localMode)Promise.resolve().then(() => (rx(),qT0)).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(() => (rx(),qT0));Z()}catch{}});var L98=!1;async function gc6($){let Z;try{Z=await Ac6.create({systemDatabaseUrl:fU1(pJ.databaseUrl,pJ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:N3,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:N3}),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 XS0($){if(L98)return;L98=!0,console.log(`
|
|
3708
|
+
</head>`)}function w68($){let Z=new Q1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Uy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(L68($,"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(`${uK({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(Eu6)}),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=Uy(Q.req.param("file").replace(/\.md$/,""));try{let X=await D68(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(zu6)});if(X===null)return Q.text("Report 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("Report unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?L68($,"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 Lu6(Uy(Y)),K=wu6(Y,W);return Q.html(ju6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Du6=2500,Eu6=1e4,zu6=1e4;var j68=D(()=>{G8();Ow();WU1();F$()});function nk0($,Z){return fetch(`${uK({})}${$}`,Z)}async function Pu6($,Z){let Q=await pk0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function Tu6($){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 Au6,vO,E68=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},z68;var P68=D(()=>{G8();gG();Ow();WU1();Au6=new Set(["complete","errored","terminated","unknown"]);vO=new Q1;vO.use("*",async($,Z)=>{let Q=await C8.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});vO.use("/link-token/*",E68);vO.use("/suggest",E68);vO.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 Pu6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});vO.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}=Tu6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await nk0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${OA({})}`},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)}});vO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await nk0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${OA({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Au6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});vO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await nk0(`/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)}});vO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await nk0(`/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:[]})}});z68=vO});var Ru6=1048576,KU1;var A68=D(()=>{G8();fW();F$();NK1();KU1=new Q1;KU1.post("/webhook",I5({maxSize:Ru6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!ya$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=ga$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await ha$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as qu6}from"crypto";function Vu6($,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 qu6(Buffer.from(X),Buffer.from(Y))}function ku6($,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 T68($){let Z=new Q1;return Z.post("/webhook",I5({maxSize:Mu6,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(!Vu6(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"&&!Iu6.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"});let N=(await E41())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=ku6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Su6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Su6($,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 kV$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Mu6=5242880,Iu6;var R68=D(()=>{G8();fW();QH();z7();Iu6=new Set(["check_suite","issue_comment"])});function q68($){let Z=new PO($.db,new FG($.encryptionKey)),Q=new Q1;return Q.get("/attachments/:token",async(Y)=>{let X=dM$(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 _Q(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 M68=D(()=>{G8();Vz();R51();qj()});function I68($){let Z=new PO($.db,new FG($.encryptionKey));async function Q(X,J){let G=Nn$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await PW($.db,W.organizationId);if(!K)return;if(await VI0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new Q1;return Y.post("/webhook/:secret",I5({maxSize:Cu6}),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 Cu6=1048576;var V68=D(()=>{G8();fW();Vz();kI0();dx()});import{DBOS as tk0,SchedulerMode as _u6}from"@dbos-inc/dbos-sdk";function S68($){FU1=$}function C68(){if(!FU1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return FU1}function _68(){let $=C68();return new PO($.db,new FG($.encryptionKey))}async function xu6($,Z){try{let Q=await _68().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await PW(C68().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new _Q(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${k68}m"`,K=0,H;for(let F=0;F<bu6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=Bn$(N,N.changelog?.histories??[],Z);for(let O of B)if(await VI0(Y,Q,O)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function fu6($,Z){let Q=new Date($.getTime()-k68*60000),Y=await tk0.runStep(()=>_68().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>tk0.runStep(()=>xu6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function v68(){if(HU1)return;HU1=tk0.registerWorkflow(fu6,{name:"jiraTriggerSweepWorkflow"}),tk0.registerScheduled(HU1,{name:"jiraTriggerSweepWorkflow",crontab:vu6,mode:_u6.ExactlyOncePerIntervalWhenActive})}var vu6="7-59/10 * * * *",k68=35,bu6=5,FU1=null,HU1=null;var b68=D(()=>{Vz();dx();qj();kI0()});function x68($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var f68,yu6,gu6,y68;var g68=D(()=>{G8();TK();Rm();sl();f68=new Q1,yu6=["range","if-none-match","if-modified-since"],gu6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];f68.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(nd($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new A$(401,{message:"Authentication required"})}if(!Q)throw new A$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new A$(400,{message:"Missing file key"});let X=await j10(Y,Z);if(!X)throw new A$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&XW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new A$(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 x68(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of yu6){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 A$(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 A$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of gu6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),x68(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});y68=f68});var Q40=b((Ny)=>{var hu6=Ny&&Ny.__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]}),uu6=Ny&&Ny.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))hu6(Z,$,Q)};Object.defineProperty(Ny,"__esModule",{value:!0});uu6($G(),Ny)});var l68=b((h68)=>{Object.defineProperty(h68,"__esModule",{value:!0});h68.version=void 0;h68.version="3.4.0"});var d68=b((iU)=>{var lu6=iU&&iU.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(iU,"__esModule",{value:!0});iU.NodeTransport=iU.VERSION=void 0;iU.nodeResolveHost=nu6;var m5=Q40(),cu6=q0("net"),UU1=q0("tls"),mu6=q0("path"),c68=q0("fs"),du6=lu6(q0("dns")),iu6=l68();iU.VERSION=iu6.version;var pu6="nats.js";class m68{socket;version;lang;yields=[];signal=(0,m5.deferred)();closedNotification=(0,m5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=pu6,this.version=iU.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,m5.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 m5.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 m5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new m5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,m5.deferred)(),Q,Y=(0,cu6.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,m5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=m5.DataBuffer.concat(...this.yields),X=(0,m5.extractProtocolMessage)(Y);if(X!=="")try{let J=m5.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,m5.deferred)();try{if($=(0,mu6.resolve)($),!(0,c68.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,c68.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,m5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new m5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,m5.deferred)();try{let X=(0,UU1.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 m5.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,m5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new m5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,m5.deferred)();try{let Y=(0,UU1.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 m5.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,m5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,m5.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 UU1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,m5.render)($)}`);let Z=(0,m5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,m5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,m5.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}}iU.NodeTransport=m68;function nu6($){let Z=(0,m5.deferred)();return du6.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 o68=b((t68)=>{Object.defineProperty(t68,"__esModule",{value:!0});t68.connect=tu6;var i68=d68(),p68=Q40(),n68=Q40();function tu6($={}){if((0,n68.hasWsProtocol)($))return Promise.reject(n68.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,p68.setTransportFactory)({factory:()=>{return new i68.NodeTransport},dnsResolveFn:i68.nodeResolveHost}),p68.NatsConnectionImpl.connect($)}});var r68=b((bO)=>{var ru6=bO&&bO.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),au6=bO&&bO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))ru6(Z,$,Q)};Object.defineProperty(bO,"__esModule",{value:!0});bO.connect=void 0;var su6=o68();Object.defineProperty(bO,"connect",{enumerable:!0,get:function(){return su6.connect}});au6(Q40(),bO)});function $58($){let Z=$?.connectFn??Ql6,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:Zl6,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=QQ($l6,eu6,O-1,2,0.5);await i$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?a68.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=e68.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 Ql6($){return s68.connect($)}var a68,s68,e68,eu6=100,$l6=3000,Zl6=3000;var Z58=D(()=>{D8();a68=C(ei(),1),s68=C(r68(),1),e68=C(JN(),1)});function ok0($){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 rk0($,Z){return`${$}.${Z}`}class NU1{cache;constructor($){this.cache=ok0({ttlMs:$?.ttlMs??Yl6,maxSize:$?.maxSize??Xl6})}async get($,Z){return this.cache.get(rk0($,Z))??null}async set($,Z,Q){this.cache.set(rk0($,Z),Q)}async invalidate($,Z){this.cache.delete(rk0($,Z)),this.cache.delete(rk0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Yl6=600000,Xl6=5000;var Q58=()=>{};function ak0($,Z){return`${$}:${Z}`}function BU1($){let Z=ok0({ttlMs:$?.ttlMs??Jl6,maxSize:$?.maxSize??Gl6}),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(Y58,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(ak0(K,H))},set(K,H,F){Z.set(ak0(K,H),F)},invalidate(K,H){Z.delete(ak0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(Y58),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(ak0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var Y58="studio.ai-provider-keys.invalidate",Jl6=30000,Gl6=5000;var X58=()=>{};class OU1{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 J58=($)=>{let Z;return()=>Z??=$()},DU1,LU1;var G58=D(()=>{C6();DU1=J58(()=>z$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),LU1=J58(()=>z$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function Bl6($=H58){return{name:jU,subjects:[`${VZ1}.>`],storage:MH.StorageType.File,max_age:Hl6,max_bytes:Ul6,max_msgs_per_subject:Nl6,discard:MH.DiscardPolicy.Old,retention:MH.RetentionPolicy.Limits,duplicate_window:Fl6,num_replicas:$}}class F58{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 W58($){let Z=K58.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function wl6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Kl6().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 jl6($,Z){return $.info?.cluster?Z:1}function El6($){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 wU1{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=Bl6(X);try{await Y.streams.info(jU),await Y.streams.update(jU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(jU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(jU),await Y.streams.add(J);else throw G}},Q=await g8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await MH.jetstreamManager($),X=jl6($,H58);try{await Z(Y,X)}catch(J){if(X<=1||!El6(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:vm});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=wl6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=BC$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=SZ1(H,{runId:Z}),N=performance.now()-F;DU1().record(N),LU1().add(1,{"org.id":Y??"unknown"}),Ll6?.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?W58(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(),Dl6)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 g8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:W58(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:vm}),!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=SZ1(Z,{runId:$,dedup:Q});DU1().record(performance.now()-X),LU1().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=NC$({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"?MH.DeliverPolicy.New:MH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=vj($),W;try{W=await g8(async()=>{return(await Y.consumers.get(jU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:vm})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=sT0({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(tT0()).pipeThrough(oT0()).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(jU,{filter:vj($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var MH,K58,Wl6=($)=>{let Z;return()=>Z??=$()},Kl6,Hl6=86400000000000,Fl6=120000000000,Ul6=4294967296,H58,Nl6=500000,Ol6,Dl6,Ll6;var U58=D(()=>{D8();CZ1();eT0();rT0();C6();G58();MH=C(JN(),1),K58=C(ei(),1),Kl6=Wl6(()=>z$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),H58=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);Ol6=process.env.STREAM_ENCODE_TRACE==="1",Dl6=process.env.DECOPILOT_STREAM_TRACE==="1";Ll6=Ol6?new F58:null});function sk0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,nH(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 N58=D(()=>{e8()});class jU1{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 zl6($,Z){let Q=$.startsWith("thread:")?YH($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function EU1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await WU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await gc($,{threadId:X,runBranch:G?.branch}),K=zl6(W,await jA0($,X)),H=await ze($,Q,n11(J)).catch(()=>null);if(!H){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}for(let F of K){let U=await H.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:H.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await aG(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 B58=D(()=>{iZ();jW();z7()});async function O58($,Z,Q){let Y=Z.organizationId;if(!VX(Z))return!1;if(!ix(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=tF(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await o6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),E8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var D58=D(()=>{C4();_Y();jm();WH();V9()});function Il6($){return $ instanceof zX}function L58($,Z){return Z-$>=ql6}class zU1{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??Pl6;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??Tl6,Q=this.options.itemIntervalMs??Al6,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()-j51),y91);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()-Ml6));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 b91(this.taskBoard,X,Y),await x91(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!==T$.progress||VX(W)||W.assigneeId!==j8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await EU1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!L58(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:T$.progress,to:T$.review,reason:H}}).catch(()=>{}),E8(J,F),await KH(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!==T$.progress||G.assigneeId!==j8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await HH(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),Il6(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()+Rl6)).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!==T$.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(()=>{}),E8(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(!L58(kB(Q,Z.reviewCycleStartedAt),Date.now()))return;await KH($,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(!VX(Y))return!1;let X=Y.assigneeId===j8,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 EU1(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 Pm(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 O58(G,Y,W))return!0;if(await w_$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!S91(W))return!1;return await Em(G,Y,{previewMatchesHead:C91(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await kj($,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 Pl6=60000,Al6=300000,Tl6=50,Rl6=60000,ql6=900000,Ml6=120000;var w58=D(()=>{C4();FT0();B58();LU();k10();WH();D58();V9();FW();g91();z7();Z10();zm()});import{readdir as Vl6,rm as ek0}from"fs/promises";import{join as $S0}from"path";async function ZS0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-kl6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await By($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await j58($,X,Z);else if(!X.startsWith(".")){let J=$S0($,X),G=await By(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await j58(J,K,Z)}if((await By(J)).length===0)await ek0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function j58($,Z,Q){let Y=0,X=$S0($,Z),J=await By(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=$S0(X,W),H=await By(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=$S0(K,U);await ek0(B,{recursive:!0,force:!0}),Y++}}if((await By(K)).length===0)await ek0(K,{recursive:!0,force:!0})}if((await By(X)).length===0)await ek0(X,{recursive:!0,force:!0});return Y}async function By($){try{return(await Vl6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var kl6=30;var PU1=()=>{};import{DBOS as AU1,SchedulerMode as Sl6}from"@dbos-inc/dbos-sdk";async function _l6(){let $=[uW(),Ay(),sU()],Z=0;for(let Q of $)try{Z+=await ZS0(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 vl6($,Z){await AU1.runStep(()=>_l6(),{name:"monitoringRetention"})}function z58(){if(E58)return;E58=!0;let $=AU1.registerWorkflow(vl6,{name:"monitoringRetentionWorkflow"});AU1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Cl6,mode:Sl6.ExactlyOncePerIntervalWhenActive})}var Cl6="23 4 * * *",E58=!1;var P58=D(()=>{O3();PU1()});function A58($){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 vQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await RA($.db,Z,Y.role);return X.boundAuth=XK1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new HP(Q,void 0,X.boundAuth,Y.role,"self"),Vj(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var T58=D(()=>{BK();iF()});function bl6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function xl6(){return{services:bl6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function yl6(){for(let $ of fl6)$()}function R58($){let Z=[...TU1.logs,$];TU1={...TU1,logs:Z.length>500?Z.slice(-500):Z},yl6()}function RU1(){return gl6}var TU1,fl6,gl6=!1;var qU1=D(()=>{TU1=xl6(),fl6=new Set});import{EventEmitter as hl6}from"events";var MU1;var q58=D(()=>{qU1();MU1=new hl6;MU1.on("request",($)=>{R58($)})});function M58(){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=Ri(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>Ri(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${Z9.tool}${B}${Z9.dim}(${w})${Z9.reset}`}else if(N.method)J=`${Z9.dim}${Ri(N.method)}${Z9.reset}`}}catch{}}let W=Ri(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${Z9.mcp}${Ri(F.slice(0,12))}\u2026${Z9.reset}`}else if(X==="/mcp")W=`${Z9.mcp}/mcp${Z9.reset}`;else if(X==="/mcp/registry")W=`${Z9.mcp}/mcp/registry${Z9.reset}`;let K=ll6(Y),H=G?"\u25C0":"\u2190";if(!RU1())console.log(`${Z9.dim}${H}${Z9.reset} ${K}${Y}${Z9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=ul6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!RU1())console.log(`${Z9.dim}${O}${Z9.reset} ${K}${Y}${Z9.reset} ${W}${J?` ${J}`:""} ${N}${U}${Z9.reset} ${Z9.duration}${B}${Z9.reset}`);MU1.emit("request",{method:Y,path:Ri(X),status:U,duration:F,timestamp:new Date})}}}var Z9,ul6=($)=>{if($>=500)return Z9.serverError;if($>=400)return Z9.clientError;if($>=300)return Z9.redirect;return Z9.ok},ll6=($)=>{return Z9[$]||Z9.reset},Ri=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var I58=D(()=>{qU1();q58();Z9={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 C58}from"crypto";import{mkdir as cl6,readdir as ml6,rm as V58,stat as _58}from"fs/promises";import{join as VU1,relative as dl6}from"path";import{z as a$}from"zod";function b58($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return VU1(il6,Z)}function x58($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function IU1($,Z){let Q=b58($),Y=x58(Z);return VU1(Q,Y)}function pl6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return C58("sha256",X).update(J).digest("hex")}function S58($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=pl6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${x58(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function f58($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${C58("md5","etag").update(Y).digest("hex")}"`}async function y58($,Z,Q,Y,X){try{let J=await ml6($,{withFileTypes:!0});for(let G of J){let W=VU1($,G.name),H=dl6(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 y58(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 _58(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:f58(W,F.mtime,F.size)})}catch{}}}}catch{}}function g58($,Z){let Y=K0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:a$.object({prefix:a$.string().optional(),maxKeys:a$.number().optional().default(1000),continuationToken:a$.string().optional(),delimiter:a$.string().optional()}),outputSchema:a$.object({objects:a$.array(a$.object({key:a$.string(),size:a$.number(),lastModified:a$.string(),etag:a$.string()})),nextContinuationToken:a$.string().optional(),isTruncated:a$.boolean(),commonPrefixes:a$.array(a$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=b58(Y);await cl6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await y58(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:a$.object({key:a$.string()}),outputSchema:a$.object({contentType:a$.string().optional(),contentLength:a$.number(),lastModified:a$.string(),etag:a$.string(),metadata:a$.record(a$.string(),a$.string()).optional()}),handler:async(X)=>{let J=X,G=IU1(Y,J.key),W=await _58(G);return{contentType:ZH1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:f58(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:a$.object({key:a$.string(),expiresIn:a$.number().optional()}),outputSchema:a$.object({url:a$.string(),expiresIn:a$.number()}),handler:async(X)=>{let J=X,G=lf(J.expiresIn,k58);return{url:S58(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:a$.object({key:a$.string(),expiresIn:a$.number().optional(),contentType:a$.string().optional()}),outputSchema:a$.object({url:a$.string(),expiresIn:a$.number()}),handler:async(X)=>{let J=X,G=lf(J.expiresIn,k58);return{url:S58(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:a$.object({key:a$.string()}),outputSchema:a$.object({success:a$.boolean(),key:a$.string()}),handler:async(X)=>{let J=X,G=IU1(Y,J.key);try{return await V58(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:a$.object({keys:a$.array(a$.string()).max(1000)}),outputSchema:a$.object({deleted:a$.array(a$.string()),errors:a$.array(a$.object({key:a$.string(),message:a$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=IU1(Y,K);try{await V58(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function kU1($,Z,Q){let Y=g58(Z,Q),X=new TL({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:zZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:a$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:a$.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 Q3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),MW(X,J,$,"mcp:dev-assets")}async function h58($,Z,Q,Y){let J=g58(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 il6="./data/assets",k58=3600,v58,u58;var l58=D(()=>{F$();um();G8();hY0();hm();sX();WE();mV0();v58=new Q1;v58.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return kU1($.req.raw,Z,Y)});u58=v58});var c58={};M6(c58,{mountDevRoutes:()=>nl6});function nl6($,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 kU1(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 h58(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",u58);let Q=new Q1;Q.use("*",RH({mountPath:"/api/dev-assets"})),Q.route("/",cV0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var m58=D(()=>{G8();tK1();mV0();l58()});var e58={};M6(e58,{watchHandler:()=>s58,resolveCorsOrigin:()=>r58,isSsoExemptPath:()=>t58,isAllowedOAuthRedirectUri:()=>a58,createApp:()=>Yc6});import{readFileSync as tl6}from"fs";import{PrometheusSerializer as ol6}from"@opentelemetry/exporter-prometheus";import{DBOS as xO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as sl6,oAuthProtectedResourceMetadata as el6}from"better-auth/plugins";async function rl6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,i58(d58)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),i58(d58)]),Q.release(),!0}catch{return Q.release(!0),!1}}function i58($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function t58($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${VV0}/`)||$.startsWith(`${TV0}/`)}function o58($){return $==="local.studio.decocms.com"}function r58($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(o58(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function a58($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||o58($.hostname)}async function Yc6($={}){let Z=$.database??S8(),Q=!1;e5.stop().catch((Q0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",Q0)});let Y,X,J,G,W=new NU1,K,H,F,U=null;if($.disableNats)K=BU1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new g10,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(Q0)=>{return(async()=>{let w0=Q0.getReader();try{while(!0){let{done:e}=await w0.read();if(e)break}}catch{}finally{w0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=$58();let Q0=E0().natsCredsPath,w0;if(Q0)try{w0=tl6(Q0,"utf8")}catch(f0){console.error(`[app] failed to read NATS_CREDS at ${Q0}; connecting anonymously`,f0)}U.init(E0().natsUrls,w0?{creds:w0}:void 0);let e=he0()?new Ae0({getJetStream:()=>U.getJetStream()}):null;e?.init().catch(()=>{}),Y=e;let i=new b41({getJetStream:()=>U.getJetStream()});i.init().catch(()=>{}),X=i;let m0=new nx(R91,{getJetStream:()=>U.getJetStream()}),I0=new nx(Q10,{getJetStream:()=>U.getJetStream()});m0.init().catch(()=>{}),I0.init().catch(()=>{}),J={reads:m0,cards:I0};let t0=new NQ1({getJetStream:()=>U.getJetStream()});t0.init().catch(()=>{}),G=t0,K=BU1({getConnection:()=>U.getConnection()}),H=new OU1({getConnection:()=>U.getConnection()}),F=new wU1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),Js$(U),U.onReady(()=>{e?.init().catch((f0)=>{console.error("[McpListCache] Deferred init failed:",f0)}),i.init().catch((f0)=>{console.error("[SkillCatalogCache] Deferred init failed:",f0)}),m0.init().catch((f0)=>{console.error("[PrReadCache] Deferred init failed:",f0)}),I0.init().catch((f0)=>{console.error("[PrCardCache] Deferred init failed:",f0)}),t0.init().catch((f0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",f0)}),K.start(),bK$(()=>U.getConnection()),F.init().catch((f0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",f0)})})}if(LE)await LE();Te0(Y),f41(X),q91(J),BQ1(G);let B={storage:new Kh(Z.db),sseHub:e5,onThreadFinished:async(Q0,w0)=>Tm(new rG(Z.db),Q0,w0,new DG(Z.db))},O=new yZ1(B),L=new X80(Z.db),w=new jU1(L);w.start(),D_$(H),H.start((Q0)=>{yT0(Q0),O.execute({type:"CANCEL",taskId:Q0}).catch((w0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",w0)})}).catch((Q0)=>{console.error("[Decopilot] CancelBroadcast start failed:",Q0)}),U?.onReady(()=>{H.start().catch((Q0)=>{console.error("[CancelBroadcast] Deferred start failed:",Q0)})});let j=()=>U?.getConnection()??null;dK1(j),U?.onReady(()=>dK1(j)),iQ1(j),U?.onReady(()=>iQ1(j)),F.init().catch((Q0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",Q0)}),LE=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),Le$(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),xK$(),G.teardown(),Te0(null),f41(null),q91(null),BQ1(null)};let E=new Q1;if(E.use("*",HQ1({enabled:(Q0)=>pd(Q0,"debug")==="1"})),E.use("*",TS0),E.use("/*",$s$({origin:(Q0,w0)=>r58(Q0,{baseUrl:E0().baseUrl,requestOrigin:new URL(w0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(Q0,w0)=>{if(await w0(),Q0.req.path.includes("/files/"))return;if(Q0.req.path.includes("/fs/")&&Q0.req.path.endsWith("/read"))return;Q0.header("X-Frame-Options","DENY"),Q0.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",M58());E.use("*",async(Q0,w0)=>{if(await w0(),bi(Q0.req.path))return;if(Q0.res.status>=500){let i=await Q0.res.clone().text();console.error(`[5xx Response] ${Q0.req.method} ${Q0.req.path} - ${Q0.res.status}:`,i)}}),E.get(mY.HEALTH,(Q0)=>{if(Q)return Q0.json({status:"shutting_down"},503);return Q0.json({status:"ok"})}),E.get(mY.HEALTH_LIVE,(Q0)=>{return Q0.json({status:"ok"})}),E.get(mY.HEALTH_READY,async(Q0)=>{if(Q)return Q0.json({status:"shutting_down"},503);let w0={};if(w0.postgres={status:await rl6(Z.pool)?"up":"down"},U)w0.nats=U.isConnected()?{status:"up"}:{status:"down"};else w0.nats={status:"down"};let e=w0.postgres.status==="up",i=e?200:503;return Q0.json({status:e?"ready":"not_ready",services:w0},i)}),E.get(mY.METRICS,async(Q0)=>{try{let w0=await IS0.collect(),e=al6.serialize(w0.resourceMetrics);return Q0.text(e,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(w0){return console.error("Failed to collect metrics:",w0),Q0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${mY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(Q0)=>{let w0=Q0.req.param("queueName");if(!$c6.has(w0))return Q0.json({error:`Unknown queue: ${w0}`},404);let[e,i]=await Promise.all([xO.listQueuedWorkflows({queueName:w0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),xO.listQueuedWorkflows({queueName:w0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return Q0.json({queue_length:e.length,in_flight:i.length})}),E.route("/api/config",K68),E.route("/api/_reports",z68),E.route("/api/_stripe",KU1),E.route("/api/_github",T68({taskBoard:()=>n,contextFactory:()=>g})),E.route("/api/_git",$i);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",I68(T)),E.route("/api/_jira",q68(T)),E.route("/report",w68($.clientDir)),E.route("/api/auth/custom",qs$),E.route("/api/auth/desktop",ks$),E.all("/api/auth/admin/*",Qe$),E.all("/api/auth/*",async(Q0)=>{return await C8.handler(Q0.req.raw)});let P=vr$();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",w80),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",w80),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",$80),E.route("/",gr$()),E.use("/oauth-proxy/:connectionId/*",w80),E.all("/oauth-proxy/:connectionId/*",p58);let A=async(Q0)=>{let e=await Zc6()(Q0.req.raw),i=await e.json();return Response.json(i,e)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",w80),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(Q0)=>{let e=await Qc6()(Q0.req.raw),i=await e.json();return Response.json(i,e)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=Qs$({ttlMs:120000}),_=await Ia$({db:Z.db,auth:C8,encryption:{key:E0().encryptionKey},observability:{tracer:dO,meter:z$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});vQ.set(_),Mc1({db:Z.db,baseUrl:x5()}),Va$({db:Z.db}),_a$({db:Z.db}),ua$({db:Z.db}),S68({db:Z.db,encryptionKey:E0().encryptionKey}),pI$({db:Z.db}),pa$({db:Z.db}),DV$({db:Z.db});let V=VQ0(Z.db),y=new Uo(Z.db),g=A58({db:Z.db});JQ1({storage:V,studioContextFactory:g}),nZ1({systemDatabaseUrl:mt0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:e5}}),uZ1({dispatchRunFn:JC$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:e5}});let l=new Kh(Z.db),n=new rG(Z.db),p=new DG(Z.db),F0=new zU1(n,g,p);if(E0().taskBoardReviewSweeperEnabled){F0.start();let Q0=LE;LE=async()=>{await Q0?.(),F0.dispose()}}MC$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let Q0=U?.getConnection();return Q0?await n58.jetstreamManager(Q0):null},messageParts:l.messageParts(),resolveRun:async(Q0)=>{let w0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",Q0).executeTakeFirst();return w0?{orgId:w0.organization_id,createdBy:w0.created_by,version:w0.message_storage_version??1,status:w0.status,runFenceToken:w0.run_fence_token,title:w0.title??null}:null},completeRunIfNotCompleted:async(Q0,w0)=>{let e=await l.completeRunIfNotCompleted(Q0,w0);if(sk0(e5,w0,Q0,e),e)await Tm(n,Q0,w0,p);return e},markRunRequiresAction:async(Q0,w0)=>{let e=await l.requiresActionIfInProgress(Q0,w0);return sk0(e5,w0,Q0,e),e},markRunFailed:async(Q0,w0,e,i)=>{let m0=await l.markRunFailed(Q0,w0,e,i);if(sk0(e5,w0,Q0,m0),m0)await Tm(n,Q0,w0,p);return m0},clearSynthesizedError:async(Q0,w0)=>{await l.messageParts().replaceMessageParts(Q0,_j(Q0,w0),[])},persistTitle:(Q0,w0,e)=>l.update(Q0,w0,{title:e}),onTitleUpdated:async({runId:Q0,orgId:w0,title:e})=>{let i=await l.get(Q0,w0).catch(()=>null);e5.emit(w0,nH(Q0,i?.status??"in_progress",{title:e,virtualMcpId:i?.virtual_mcp_id??void 0,createdBy:i?.created_by,triggerId:i?.trigger_id,branch:i?.branch??null,harnessId:i?.harness_id??void 0,createdAt:i?.created_at,updatedAt:i?.updated_at}))},bumpProgress:async({runId:Q0,orgId:w0})=>{await l.bumpProgress(Q0,w0)},recordCompleted:async({runId:Q0,orgId:w0,distinctId:e,usage:i})=>{f1.capture({distinctId:e,event:"chat_message_completed",groups:{organization:w0},properties:{organization_id:w0,thread_id:Q0,transport:"projector",input_tokens:i.inputTokens,output_tokens:i.outputTokens,total_tokens:i.totalTokens}})},recordFailed:async({runId:Q0,orgId:w0,distinctId:e,reason:i,kind:m0})=>{f1.capture({distinctId:e,event:"chat_message_failed",groups:{organization:w0},properties:{organization_id:w0,thread_id:Q0,transport:"projector",error_category:m0,error_message:i}})},purgeRun:async(Q0)=>{F.purge(Q0)}}),CS$({studioContextFactory:g,systemDatabaseUrl:mt0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),z58(),Ic1(),Sa$(),ba$(),ca$(),v68(),aI$(),ta$(),LV$();let V0=async(Q0,w0,e)=>{let i=await V.findById(Q0,w0);if(!i)throw Error("Automation not found");return KQ1({automationId:i.id,organizationId:i.organization_id,triggerId:null})},G0=new sd(V,({automation:Q0,trigger:w0,contextMessages:e,idempotencyKey:i})=>y10({automationId:Q0.id,organizationId:Q0.organization_id,triggerId:w0.id,contextMessages:e},{idempotencyKey:i})),H0=[uW(),Ay(),sU()];for(let Q0 of H0)ZS0(Q0).then(()=>{}).catch((w0)=>console.error("[monitoring] Retention cleanup failed:",w0));let X0=()=>C8.api.deleteAllExpiredApiKeys().catch((Q0)=>console.error("[auth] Expired API key cleanup failed:",Q0));X0(),setInterval(X0,86400000).unref(),E.use("*",async(Q0,w0)=>{if(PS0(Q0.req.path))return w0();let e={measure:async(m0,I0)=>{qW(Q0,m0);try{return await I0()}finally{Y3(Q0,m0)}}},i=await vQ.create(Q0.req.raw,{timings:e});i.automationRunner=V0,Q0.set("studioContext",i);try{await w0()}finally{let m0=i.pendingRevalidations;if(m0.length>0)Promise.race([Promise.allSettled(m0),i$(30000)]).catch((t0)=>console.error("[studio] revalidation cleanup error:",t0))}}),E.use("/api/:org/decopilot/*",td),E.use("/api/:org/v1/*",td),E.use("/api/:org/files/*",td),E.use("*",async(Q0,w0)=>{if(t58(Q0.req.path))return w0();let e=Q0.get("studioContext");if(!e?.organization?.id||!e?.auth?.user?.id)return w0();if(!(await e.storage.orgSsoConfig.getByOrgId(e.organization.id))?.enforced)return w0();if(!await e.storage.orgSsoSessions.isValid(e.auth.user.id,e.organization.id))return Q0.json({error:"SSO authentication required for this organization"},403);return w0()});let Z0=new Q1;Z0.use("*",RH({mountPath:"/api/org-sso"})),Z0.route("/",CV0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(Q0)=>{return Q0.json({tools:Ri0,grouped:KP()})}),E.use("/mcp/*",async(Q0,w0)=>{qW(Q0,"mcp");try{return await w0()}finally{Y3(Q0,"mcp")}});let Y0=async(Q0,w0)=>{let e=Q0.var.studioContext;if(!e.auth.user?.id&&!e.auth.apiKey?.id){let i=new URL(Q0.req.url),m0=Q0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),I0=m0?`${m0}://${i.host}`:i.origin;return Q0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${I0}${i.pathname}/.well-known/oauth-protected-resource"`}})}return await w0()};if(E.use("/mcp/:connectionId?",Y0),E.use("/mcp/gateway/:virtualMcpId?",Y0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Y0),E.use("/mcp/self",Y0),XW()){let{mountDevRoutes:Q0}=(m58(),HS0(c58));Q0(E,Y0)}let o=new Q1;o.use("*",RH({mountPath:"/mcp"})),o.route("/",kR0()),E.route("/mcp",o);let J0=new Q1;J0.use("*",RH({mountPath:"/mcp/self"})),J0.route("/",zk0()),E.route("/mcp/self",J0);let c0=new Q1;c0.use("*",RH({mountPath:"/mcp"})),c0.route("/",_R0()),E.route("/mcp",c0),E.use("/api/:org/models/*",async(Q0,w0)=>{qW(Q0,"llm_models");try{return await w0()}finally{Y3(Q0,"llm_models")}});let k0=je$({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",k0),E.route("/api",y68);let j1=new Q1;j1.use("*",RH({mountPath:"/api"})),j1.route("/",Rk0()),E.route("/api",j1),E.route("/api",Z68);let d0=new Q1;d0.use("*",RH({mountPath:"/api"})),d0.route("/",qk0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",d0);let L0=new Bo(Z.db),j0=new Q1;j0.use("*",RH({mountPath:"/api"})),j0.route("/",fV0()),E.route("/api",j0),E.route("/api/deco-sites",_e$()),E.route("/api/deco-apps",o48());let s0=new Q1;s0.use("*",RH({mountPath:"/api/deco-sites"})),s0.route("/",gV0()),E.route("/api/deco-sites",s0),E.route(VV0,Ye$()),E.route(F88,B88()),E.route("/api/_editor-resolve",Y68()),E.route(Cs$,_s$()),E.route(TV0,cs$());let P1=n48({kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:e5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:XW(),mcpAuth:Y0,oauthProxyHandler:p58,watchHandler:s58,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",P1),E.notFound((Q0)=>{return Q0.json({error:"Not Found",path:Q0.req.path},404)}),E.onError(Pe$),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([e5.stop(),LE?Promise.resolve(LE()).finally(()=>{LE=null}):Promise.resolve()]),U)await U.drain().catch((Q0)=>console.error("[shutdown] NATS drain error:",Q0));console.log("[shutdown] Flushing telemetry..."),await fX().catch((Q0)=>console.error("[shutdown] Telemetry flush error:",Q0)),console.log("[shutdown] Closing database..."),await P4$(Z).catch((Q0)=>console.error("[shutdown] Database close error:",Q0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await xO.registerQueue(B3,{partitionQueue:!0,concurrency:QQ1,minPollingIntervalMs:YQ1}),await xO.registerQueue(N3,{partitionQueue:!0,concurrency:iZ1,priorityEnabled:!0}),await xO.registerQueue(rU,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await xO.registerQueue(aU,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await xO.registerQueue(cO,{partitionQueue:!0,concurrency:SS$}),await xO.registerQueue(PE,OV$),await oK1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((Q0)=>xO.deleteQueue(Q0))),await XQ1(Z.pool),c9$().catch((Q0)=>{console.error("[studio-pack-backfill] failed:",Q0)}),Vc1().catch((Q0)=>{console.error("[org-fs] public-sets boot sync kick failed:",Q0)})}})}var n58,d58=5000,LE=null,p58=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 vQ.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 cd(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 Z80(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=yr$(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!a58(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(ra$(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()),F0=p.indexOf(":");if(F0!==-1){let V0=decodeURIComponent(p.slice(0,F0)),G0=decodeURIComponent(p.slice(F0+1));A=V0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof l==="string"&&l)q=l;let n=new URLSearchParams;for(let[p,F0]of y.entries())n.append(p,F0.toString());P=n.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 n=typeof l==="object"&&l!==null&&!Array.isArray(l);if(P===void 0&&!n)P=g;if(P===void 0){let p=l,F0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...F0,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 x=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 x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,n=null;try{n=await md(G.connection_url)??O}catch{n=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:n};await new F9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},s58=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&&(!OU(Y)||!await DU(Z)))return $.json({error:"forbidden"},403);let W=G?t20:Y;if(G)YO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return CO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!e5.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(()=>{e5.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),e5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),e5.remove(W,K),N()})})})},al6,$c6,Zc6=()=>el6(C8),Qc6=()=>sl6(C8);var $98=D(()=>{D8();F$();kc1();Ca$();xa$();ma$();m10();W91();oa$();Z10();E9();sl();e8();G8();jV0();Zs$();FQ1();gG();iF();zK1();c3();C6();U6();IK1();Ss$();vs$();ms$();vK1();Xe$();lK1();Ee$();nK1();iK();QV0();tK1();Ae$();zV0();t48();sK1();r48();SR0();h10();Q68();vR0();IF1();X68();qF1();H68();j68();P68();A68();R68();M68();V68();b68();YH1();g68();MF1();AF1();j40();Z58();DJ();CA0();I91();fs();gs();DQ1();Q58();X58();iK1();U58();gZ1();N58();on();Do();QO();V9();lW1();w58();P58();NJ0();PU1();O3();rK1();ZO();xZ1();NJ0();nT0();Ni0();Bi0();T58();Hu();I58();Li();zK1();Lm();Cm();gT0();n58=C(JN(),1);al6=new ol6,$c6=new Set([B3,N3,rU,aU,cO,PE])});var X98={};M6(X98,{resolveClientDir:()=>Fc6,resolveAssetPathWithTraversalCheck:()=>Y98,isPathWithinDirectory:()=>Q98,createAssetHandler:()=>Uc6});import{resolve as Y40,dirname as Xc6,join as Jc6,extname as Gc6,basename as Wc6,sep as Z98}from"path";function Kc6($,Z){if($===Z||Wc6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${Z98}assets${Z98}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Q98($,Z){let Q=Y40(Z),Y=Y40($);return Y===Q||Y.startsWith(Q+"/")}function Y98({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=Y40(Z,Q);if(!Q98(Y,Z))return null;return Y}function Fc6($,Z="../client"){let Q=new URL($),Y=Xc6(Q.pathname);return Y40(Y,Z)}function Uc6($={}){let{env:Z="production",clientDir:Q=Hc6,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=Y98({requestPath:W,clientDir:Q});if(!K)return null;let H=Jc6(K,"index.html"),F=Y40(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Gc6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:Kc6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var Hc6="./dist/client";var J98=()=>{};var G98={};M6(G98,{tryUpgradePreviewWs:()=>jc6,tryHandlePreviewHttp:()=>wc6,previewWebSocketHandler:()=>Ec6,parsePreviewBaseDomain:()=>Lc6,isPreviewWsData:()=>QS0,extractHandleFromHost:()=>SU1});function Oc6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function Dc6(){return new Response(Bc6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function Lc6($){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 SU1($,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 wc6($,Z){let Q=SU1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return J40(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Ax)&&Oc6($))return Dc6();return X.headers.delete(Ax),X}function J40($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function QS0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function jc6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=SU1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return J40(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return J40(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return J40(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 J40(426,"upgrade failed");return}function X40($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var Nc6=256,Bc6='<!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>',Ec6;var W98=D(()=>{O41();Ec6={open($){let Z=$.data;if(!QS0(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)}`),X40($,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)=>{X40($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{X40($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!QS0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=Nc6){X40($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!QS0(Z))return;X40($,Z,1000,"")}}});var U98={};M6(U98,{printBanner:()=>Pc6,bannerLines:()=>F98,BANNER_LINES:()=>K98,BANNER_GRADIENT:()=>H98});function zc6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function F98($){let Z=K98.map((Q,Y)=>{let[X,J,G]=zc6(H98[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 Pc6($){console.log("");for(let Z of F98($))console.log(Z);console.log("")}var K98,H98;var N98=D(()=>{K98=[" \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 "],H98=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});D8();var mU1="13";function dU1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:mU1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}D8();import S98 from"pg";var iU1=8314027461559302n,C98=600000,_98=500;async function pU1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=C98}=$,X=$.log??((K)=>console.log(K)),J=new S98.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",[iU1.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 i$(_98)}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)",[iU1.toString()])}catch{}await J.end().catch(()=>{})}}F$();BS0();C6();function SZ8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function SS0($,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 kN1(){let $=SZ8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:SS0($,"--cpu-prof-dir")??process.cwd(),name:SS0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(SS0($,"--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.'}))}vS0();var P40;function gN1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=RE();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(()=>{}),P40=setInterval(()=>void Z().catch(()=>{}),$),P40.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(P40)clearInterval(P40)}}import*as vZ8 from"bun:jsc";var{startSamplingProfiler:bZ8,samplingProfilerStackTraces:xZ8}=vZ8;function hN1(){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{bZ8()}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=xZ8()?.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 uN1(){kN1();let $=[gN1(),yN1(),hN1()];return()=>{for(let Z of $)Z()}}import{existsSync as kc6}from"fs";var pJ=E0();MN1();var{DBOS:G40,DBOSClient:Ac6}=await import("@dbos-inc/dbos-sdk");function fU1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var Tc6=[B3,N3,rU,aU,cO,PE],Rc6=pJ.dispatchRole==="worker"?Tc6:pJ.dispatchRole==="api"?[]:void 0;G40.setConfig(dU1({systemDatabaseUrl:fU1(pJ.databaseUrl,pJ.databasePgSsl),poolSize:pJ.dbosPoolSize,executorID:pJ.podName,listenQueues:Rc6}));var{createApp:qc6}=await Promise.resolve().then(() => ($98(),e58)),{isServerPath:Mc6}=await Promise.resolve().then(() => (j40(),HN1)),{createAssetHandler:Ic6,resolveClientDir:w98}=await Promise.resolve().then(() => (J98(),X98)),Vc6=pJ.port,B98=w98(import.meta.url,"../client"),j98=kc6(B98)?B98:w98(import.meta.url,"../dist/client"),Sc6=Ic6({clientDir:j98,isServerPath:Mc6}),Cc6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function _c6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Cc6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:vc6,tryHandlePreviewHttp:bc6,tryUpgradePreviewWs:xc6,previewWebSocketHandler:CU1,isPreviewWsData:_U1}=await Promise.resolve().then(() => (W98(),G98)),{getOrInitSharedRunner:E98}=await Promise.resolve().then(() => (QH(),qE$)),z98=vc6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),O98={baseDomain:z98??"",getRunner:E98};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())E98().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var YS0=await qc6({clientDir:j98}),vU1=process.env.DBOS_CONDUCTOR_KEY?.trim(),D98=process.env.DBOS_CONDUCTOR_URL?.trim();await pU1({databaseUrl:fU1(pJ.databaseUrl,pJ.databasePgSsl)},()=>G40.launch({...vU1?{conductorKey:vU1}:{},...vU1&&D98?{conductorURL:D98}:{}}));console.log(`[dbos] application version: ${G40.applicationVersion}`);var bU1=5,xU1=0;await g8(async()=>{xU1++;try{return await YS0.initDbos()}catch($){let Z=xU1>=bU1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${xU1}/${bU1} failed, ${Z}`,$),$}},{maxAttempts:bU1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!pJ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (N98(),U98));console.log("");for(let Z of $())console.log(Z)}var fc6=Bun.serve({idleTimeout:0,port:Vc6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(z98){let Y=await xc6($,Z,O98);if(Y===void 0)return;if(Y)return Y;let X=await bc6($,O98);if(X)return X}let Q=await Sc6($);if(Q)return _c6(Q);return YS0.fetch($,{server:Z})},websocket:{open($){if(_U1($.data))CU1.open($)},message($,Z){if(_U1($.data))CU1.message($,Z)},close($){if(_U1($.data))CU1.close($)}},development:!1}),yc6=uN1();if(pJ.localMode)Promise.resolve().then(() => (rx(),qT0)).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(() => (rx(),qT0));Z()}catch{}});var L98=!1;async function gc6($){let Z;try{Z=await Ac6.create({systemDatabaseUrl:fU1(pJ.databaseUrl,pJ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:N3,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:N3}),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 XS0($){if(L98)return;L98=!0,console.log(`
|
|
3709
3709
|
[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{yc6(),YS0.markShuttingDown();let J=tU1(pJ.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await i$(J),await fc6.stop(!0);let G=G40.executorID;await G40.shutdown(),await gc6(G),await YS0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>XS0("SIGTERM"));process.on("SIGINT",()=>XS0("SIGINT"));process.on("SIGHUP",()=>XS0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),XS0("uncaughtException")});
|