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/cli.js
CHANGED
|
@@ -2105,7 +2105,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var P4$=L(()=>{Zu()});f
|
|
|
2105
2105
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${G}/${K}, keeping in old table`);continue}}await Vl`
|
|
2106
2106
|
DELETE FROM kysely_migration WHERE name = ${Q}
|
|
2107
2107
|
`.execute($)}}async function s7$($){await SW4($),await CW4($);let Z=new a7$({db:$,provider:{getMigrations:()=>Promise.resolve(q11)}}),{error:Q,results:X}=await Z.migrateToLatest(),Y=0;if(X?.forEach((J)=>{if(J.status==="Success")Y++;else if(J.status==="Error")console.error(`Failed to execute migration "${J.migrationName}"`)}),Q)throw console.error("Failed to migrate"),console.error(Q),Q;return Y}async function _W4($){let{keepOpen:Z=!1,database:Q,skipBetterAuth:X=!1}=$??{},Y="skipped";if(!X&&!Q)Y=await xa0();let J=Q??F8(),G=async()=>{if(!Z&&!Q)await eD(J).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await s7$(J.db);return await G(),{betterAuth:Y,kysely:K}}catch(K){throw await G(),K}}async function vW4(){let $=F8(),Z=new a7$({db:$.db,provider:{getMigrations:()=>Promise.resolve(q11)}}),{error:Q,results:X}=await Z.migrateDown();if(X?.forEach((Y)=>{if(Y.status==="Success")console.log(`\u2705 Migration "${Y.migrationName}" rolled back successfully`);else if(Y.status==="Error")console.error(`\u274C Failed to rollback migration "${Y.migrationName}"`)}),Q)throw console.error("Failed to rollback migration"),console.error(Q),Q}var $Q$=L(()=>{o7$();fa0();jX()});async function z30($){let Z={...process.env},Q=H70($,Z);console.log(AV1(Q.settings.encryptionKey));let X=Q.settings.betterAuthSecret||(Q.settings.localMode?e6$(Q.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (PG0(),zG0)),{outputs:J,services:G}=await Y({home:Q.settings.dataDir,externalDatabaseUrl:Q.externalDatabaseUrl,externalNatsUrl:Q.externalNatsUrl});if(!Q.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (fa0(),Z5$));await W(J.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (jX(),w6$)),{migrateToLatest:F}=await Promise.resolve().then(() => ($Q$(),e7$)),U=H(J.databaseUrl);await F({keepOpen:!0,database:U,skipBetterAuth:!0})}let K={...Q.settings,betterAuthSecret:X,databaseUrl:J.databaseUrl,natsUrls:J.natsUrls,...J.s3?{s3Endpoint:J.s3.endpoint,s3Bucket:J.s3.bucket,s3AccessKeyId:J.s3.accessKeyId,s3SecretAccessKey:J.s3.secretAccessKey,s3ForcePathStyle:J.s3.forcePathStyle}:{}};return T4$(K),{settings:K,services:G.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:G.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var M11=L(()=>{Zu();$5$();W$()});var YQ$={};K0(YQ$,{updateService:()=>wT,subscribeCliState:()=>k11,setTuiConsoleIntercepted:()=>P30,setServerUrl:()=>Wr,setMigrationsDone:()=>Kr,setDevMode:()=>fW4,resetCliStateForTests:()=>xW4,isTuiConsoleIntercepted:()=>T30,getCliState:()=>V11,addLogEntry:()=>Jw});function ZQ$(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function QQ$(){return{services:ZQ$(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function xW4(){wJ=QQ$()}function Gr(){for(let $ of I11)$()}function V11(){return wJ}function k11($){return I11.add($),()=>I11.delete($)}function wT($){wJ={...wJ,services:wJ.services.map((Z)=>Z.name===$.name?$:Z)},Gr()}function Kr(){wJ={...wJ,migrationsStatus:"done"},Gr()}function Wr($){wJ={...wJ,serverUrl:$},Gr()}function Jw($){let Z=[...wJ.logs,$];wJ={...wJ,logs:Z.length>500?Z.slice(-500):Z},Gr()}function fW4(){wJ={...wJ,services:[...ZQ$(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},Gr()}function P30($){XQ$=$}function T30(){return XQ$}var wJ,I11,XQ$=!1;var jT=L(()=>{wJ=QQ$();I11=new Set});import{createServer as JQ$}from"net";function bW4($){return new Promise((Z)=>{let Q=JQ$();Q.once("error",()=>Z(!1)),Q.listen($,"0.0.0.0",()=>{Q.close(()=>Z(!0))})})}async function Hr($){if(await bW4($))return $;let Z=await new Promise((Q,X)=>{let Y=JQ$();Y.once("error",X),Y.listen(0,"0.0.0.0",()=>{let J=Y.address(),G=typeof J==="object"&&J?J.port:0;Y.close(()=>Q(G))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var S11=()=>{};var _11={};K0(_11,{startDevServer:()=>gW4,pipeToLogStore:()=>C11});import{join as yW4}from"path";function C11($){let Z=$.getReader(),Q=new TextDecoder,X="";function Y(){let J=X.split(`
|
|
2108
|
-
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;Jw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:J,value:G}=await Z.read();if(J)break;X+=Q.decode(G,{stream:!0}),Y()}}catch{}if(X.trim()){let J=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(J)Jw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function gW4($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,J=Z||`http://localhost:${Y}`,G=X?await Hr(Number(Y)+1):await Hr(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await z30({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)wT({name:D.name,status:"ready",port:D.port});Kr();let F=yW4(import.meta.dir,"..","..","..","..",".."),U=Q===!0,N=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:J,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)C11(N.stdout),C11(N.stderr);Wr(J),wT({name:"Vite",status:"ready",port:Number(Y)}),wT({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(N.kill(D),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (PG0(),zG0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:N}}var v11=L(()=>{M11();jT();S11()});var A30;var x11=L(()=>{A30={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"}}});import{Box as uW4,Text as GQ$}from"ink";import{jsx as lW4,jsxs as KQ$}from"react/jsx-runtime";function WQ$({version:$}){return KQ$(uW4,{flexDirection:"column",marginTop:1,children:[dG0.map((Z,Q)=>lW4(GQ$,{color:iG0[Q],children:Z},Q)),KQ$(GQ$,{dimColor:!0,children:[" v",$]})]})}var HQ$=L(()=>{ia()});import{Box as ET,Text as Gw}from"ink";import{Spinner as cW4}from"@inkjs/ui";import{jsx as bG,jsxs as kl}from"react/jsx-runtime";function FQ$({status:$}){if($==="pending")return bG(cW4,{label:""});return bG(Gw,{color:"green",children:"\u2713"})}function mW4($){return`${$.name}: ${$.port||"...."}`}function UQ$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return kl(ET,{flexDirection:"column",paddingBottom:1,children:[bG(WQ$,{version:A30.version}),bG(ET,{marginBottom:1,children:bG(Gw,{dimColor:!0,children:"\u2500".repeat(80)})}),bG(ET,{children:kl(Gw,{dimColor:!0,children:["Home: ",Q]})}),kl(ET,{gap:2,children:[$.map((Y)=>kl(ET,{gap:1,children:[bG(Gw,{children:mW4(Y)}),bG(FQ$,{status:Y.status})]},Y.name)),kl(ET,{gap:1,children:[bG(Gw,{children:"Migrations"}),bG(FQ$,{status:Z})]})]}),bG(ET,{children:X?kl(Gw,{children:["Open in browser: ",bG(Gw,{color:"cyan",children:X})]}):bG(Gw,{dimColor:!0,children:"Starting..."})})]})}var NQ$=L(()=>{x11();HQ$()});import{Box as dW4,Text as Fr}from"ink";import{jsx as f11,jsxs as b11}from"react/jsx-runtime";function iW4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function BQ$({logs:$}){return f11(dW4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return f11(Fr,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return b11(Fr,{children:[b11(Fr,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),f11(Fr,{color:iW4(Z.status),children:Z.status}),b11(Fr,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var LQ$=()=>{};var y11={};K0(y11,{App:()=>tW4});import{Box as pW4}from"ink";import{useSyncExternalStore as nW4}from"react";import{jsx as OQ$,jsxs as oW4}from"react/jsx-runtime";function tW4({home:$}){let Z=nW4(k11,V11);return oW4(pW4,{flexDirection:"column",children:[OQ$(UQ$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),OQ$(BQ$,{logs:Z.logs})]})}var g11=L(()=>{NQ$();LQ$();jT()});var BK="thread-gate",uB="decopilot-hosted-harness",lB="decopilot-hosted-harness-sandboxed",LK="automations",Kw="background-tools",zT="task-board-github-reads";var DQ$="13";function wQ$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:DQ$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var jQ$=()=>{};import aW4 from"pg";async function zQ$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=rW4}=$,Y=$.log??((W)=>console.log(W)),J=new aW4.Client({connectionString:Q});await J.connect();let G=Date.now(),K=!1;try{while(!K){if(K=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[EQ$.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-G>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await S$(sW4)}let W=Date.now()-G;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await J.query("SELECT pg_advisory_unlock($1)",[EQ$.toString()])}catch{}await J.end().catch(()=>{})}}var EQ$=8314027461559302n,rW4=600000,sW4=500;var PQ$=L(()=>{w8()});function eW4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function h11($,Z){for(let Q=0;Q<$.length;Q++){let X=$[Q];if(X===void 0)continue;if(X===Z)return $[Q+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function TQ$(){let $=eW4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:h11($,"--cpu-prof-dir")??process.cwd(),name:h11($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(h11($,"--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.'}))}function AQ$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=BT();if(!Q)return;let X={};try{let{heapStats:Y}=await import("bun:jsc"),J=Y(),G=Object.entries(J.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);X={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,...X}))};return Z().catch(()=>{}),R30=setInterval(()=>void Z().catch(()=>{}),$),R30.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),X=typeof Q==="string"?Q:JSON.stringify(Q),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(R30)clearInterval(R30)}}var R30;var RQ$=()=>{};import*as $H4 from"bun:jsc";function qQ$(){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{ZH4()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let J=performance.now(),G=J-X;X=J+Z;let K=[];try{K=QH4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){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??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.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:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var ZH4,QH4;var MQ$=L(()=>{({startSamplingProfiler:ZH4,samplingProfilerStackTraces:QH4}=$H4)});function IQ$(){TQ$();let $=[AQ$(),H6$(),qQ$()];return()=>{for(let Z of $)Z()}}var VQ$=L(()=>{Ma0();RQ$();MQ$()});var PT=b((kQ$)=>{Object.defineProperty(kQ$,"__esModule",{value:!0});kQ$.RepublishHeaders=kQ$.DirectMsgHeaders=kQ$.JsHeaders=kQ$.AdvisoryKind=void 0;kQ$.isOrderedPushConsumerOptions=XH4;kQ$.isPullConsumer=YH4;kQ$.isPushConsumer=JH4;kQ$.isBoundPushConsumerOptions=GH4;function XH4($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function YH4($){return $.isPullConsumer()}function JH4($){return $.isPushConsumer()}function GH4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}kQ$.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};kQ$.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};kQ$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};kQ$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var yG=b((CQ$)=>{Object.defineProperty(CQ$,"__esModule",{value:!0});CQ$.TD=CQ$.TE=CQ$.Empty=void 0;CQ$.encode=OH4;CQ$.decode=DH4;CQ$.Empty=new Uint8Array(0);CQ$.TE=new TextEncoder;CQ$.TD=new TextDecoder;function LH4(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}function OH4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(CQ$.TE.encode($[Q]));if(Z.length===0)return CQ$.Empty;if(Z.length===1)return Z[0];return LH4(...Z)}function DH4($){if(!$||$.length===0)return"";return CQ$.TD.decode($)}});var gG=b((xQ$)=>{Object.defineProperty(xQ$,"__esModule",{value:!0});xQ$.errors=xQ$.PermissionViolationError=xQ$.NoRespondersError=xQ$.TimeoutError=xQ$.RequestError=xQ$.ProtocolError=xQ$.ConnectionError=xQ$.DrainingConnectionError=xQ$.ClosedConnectionError=xQ$.AuthorizationError=xQ$.UserAuthenticationExpiredError=xQ$.InvalidOperationError=xQ$.InvalidArgumentError=xQ$.InvalidSubjectError=void 0;class l11 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}xQ$.InvalidSubjectError=l11;class q30 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,Q){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((X)=>`'${X}'`),$=$.join(",");else $=`'${$}'`;return new q30(`${$} ${Z}`,Q)}}xQ$.InvalidArgumentError=q30;class c11 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}xQ$.InvalidOperationError=c11;class M30 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new M30($);return null}}xQ$.UserAuthenticationExpiredError=M30;class I30 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],Q=$.toLowerCase();for(let X=0;X<Z.length;X++)if(Q.indexOf(Z[X])!==-1)return new I30($);return null}}xQ$.AuthorizationError=I30;class m11 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}xQ$.ClosedConnectionError=m11;class d11 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}xQ$.DrainingConnectionError=d11;class i11 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}xQ$.ConnectionError=i11;class p11 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}xQ$.ProtocolError=p11;class n11 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof V30}}xQ$.RequestError=n11;class t11 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}xQ$.TimeoutError=t11;class V30 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}xQ$.NoRespondersError=V30;class k30 extends Error{operation;subject;queue;constructor($,Z,Q,X,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=Q,this.queue=X}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let Q="publish",X="",Y=void 0,J=$.match(/(Publish|Subscription) to "(\S+)"/);if(J){if(Q=J[1].toLowerCase(),X=J[2],Q==="subscription"){let G=$.match(/using queue "(\S+)"/);if(G)Y=G[1]}}return new k30($,Q,X,Y)}}xQ$.PermissionViolationError=k30;xQ$.errors={AuthorizationError:I30,ClosedConnectionError:m11,ConnectionError:i11,DrainingConnectionError:d11,InvalidArgumentError:q30,InvalidOperationError:c11,InvalidSubjectError:l11,NoRespondersError:V30,PermissionViolationError:k30,ProtocolError:p11,RequestError:n11,TimeoutError:t11,UserAuthenticationExpiredError:M30}});var oW=b((hQ$)=>{Object.defineProperty(hQ$,"__esModule",{value:!0});hQ$.SimpleMutex=hQ$.Perf=void 0;hQ$.extend=vH4;hQ$.render=xH4;hQ$.timeout=fH4;hQ$.delay=bH4;hQ$.deadline=yH4;hQ$.deferred=a11;hQ$.debugDeferred=gH4;hQ$.shuffle=hH4;hQ$.collect=uH4;hQ$.jitter=gQ$;hQ$.backoff=lH4;hQ$.nanos=cH4;hQ$.millis=mH4;hQ$.randomToken=pH4;var _H4=yG(),o11=gG();function vH4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function xH4($){return _H4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function fH4($,Z=!0){let Q=Z?new o11.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new o11.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function bH4($=0){let Z,Q=new Promise((X)=>{let Y=setTimeout(()=>{X()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),X()}}});return Object.assign(Q,Z)}async function yH4($,Z=1000){let Q=a11(),X=setTimeout(()=>{Q.reject(new o11.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function a11(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function gH4(){let $={},Z=new Promise((Q,X)=>{$={resolve:(Y)=>{console.trace("resolve",Y),Q(Y)},reject:(Y)=>{console.trace("reject"),X(Y)}}});return Object.assign(Z,$)}function hH4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function uH4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class bQ${timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,Q){let X=this.timers.get(Z);if(X===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(Q);if(Y===void 0)throw Error(`${Q} is not defined`);this.measures.set($,Y-X)}getEntries(){let $=[];return this.measures.forEach((Z,Q)=>{$.push({name:Q,duration:Z})}),$}}hQ$.Perf=bQ$;class yQ${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=a11();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}hQ$.SimpleMutex=yQ$;function gQ$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function lH4($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(Q){return gQ$(Q>Z?$[Z]:$[Q])}}}function cH4($){return $*1e6}function mH4($){return Math.floor($/1e6)}var dH4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",cB=new Uint8Array(62);for(let $=0;$<62;$++)cB[$]=dH4.charCodeAt($);var iH4=218340105584896;function pH4(){let $=Math.floor(Math.random()*iH4),Z=$%62,Q=cB[Z];$=($-Z)/62,Z=$%62;let X=cB[Z];$=($-Z)/62,Z=$%62;let Y=cB[Z];$=($-Z)/62,Z=$%62;let J=cB[Z];$=($-Z)/62,Z=$%62;let G=cB[Z];$=($-Z)/62,Z=$%62;let K=cB[Z];$=($-Z)/62,Z=$%62;let W=cB[Z];$=($-Z)/62;let H=cB[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var nQ$=b((iQ$)=>{Object.defineProperty(iQ$,"__esModule",{value:!0});iQ$.nuid=iQ$.NuidImpl=void 0;var WF4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ww=62,C30=12,mQ$=10,lQ$=33,HF4=333,cQ$=C30+mQ$,s11=new Uint8Array(Ww);for(let $=0;$<Ww;$++)s11[$]=WF4.charCodeAt($);var S30=4294967296,dQ$=BigInt(Ww)**BigInt(mQ$),Ur=Number(dQ$/(1n<<32n)),r11=Number(dQ$%(1n<<32n));function FF4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function UF4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else FF4($)}class e11{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(cQ$),this.cbuf=new Uint8Array(C30),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Ur+1)),this.seqLo=Math.floor(Math.random()*S30);while($++<8&&this.seqHi===Ur&&this.seqLo>=r11);if(this.seqHi===Ur&&this.seqLo>=r11)this.seqLo=0;this.inc=Math.random()*(HF4-lQ$)+lQ$|0}setPre(){UF4(this.cbuf);for(let $=0;$<C30;$++)this.buf[$]=s11[this.cbuf[$]%Ww]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=cQ$-1;Q>=C30;Q--){let X=Math.floor($/Ww),J=($-X*Ww)*S30+Z,G=Math.floor(J/Ww),K=J-G*Ww;this.buf[Q]=s11[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=S30)this.seqLo-=S30,this.seqHi+=1;if(this.seqHi>Ur||this.seqHi===Ur&&this.seqLo>=r11)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}iQ$.NuidImpl=e11;iQ$.nuid=new e11});var rQ$=b((oQ$)=>{Object.defineProperty(oQ$,"__esModule",{value:!0});oQ$.nuid=oQ$.Nuid=void 0;var tQ$=nQ$();oQ$.Nuid=tQ$.NuidImpl;oQ$.nuid=tQ$.nuid});var v30=b((_30)=>{Object.defineProperty(_30,"__esModule",{value:!0});_30.nuid=_30.Nuid=void 0;var sQ$=rQ$();Object.defineProperty(_30,"Nuid",{enumerable:!0,get:function(){return sQ$.Nuid}});Object.defineProperty(_30,"nuid",{enumerable:!0,get:function(){return sQ$.nuid}})});var Hw=b((eQ$)=>{Object.defineProperty(eQ$,"__esModule",{value:!0});eQ$.DEFAULT_HOST=eQ$.DEFAULT_PORT=eQ$.Match=void 0;eQ$.syncIterator=wF4;eQ$.createInbox=jF4;var OF4=v30(),DF4=gG();eQ$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function wF4($){let Z=$[Symbol.asyncIterator]();return{async next(){let Q=await Z.next();if(Q.done)return Promise.resolve(null);return Promise.resolve(Q.value)}}}function jF4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw DF4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${OF4.nuid.next()}`}eQ$.DEFAULT_PORT=4222;eQ$.DEFAULT_HOST="127.0.0.1"});var Nr=b((XX$)=>{Object.defineProperty(XX$,"__esModule",{value:!0});XX$.DataBuffer=void 0;var ZX$=yG();class QX${buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}static fromAscii($){if(!$)$="";return ZX$.TE.encode($)}static toAscii($){return ZX$.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let Q=0;Q<this.buffers.length;Q++)$.set(this.buffers[Q],Z),Z+=this.buffers[Q].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let Q=this.byteLength;if($===void 0||$>Q)$=Q;let X=Z.subarray(0,$);if(Q>$)this.buffers.push(Z.subarray($));return this.byteLength=Q-$,X}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let Q=0;Q<Z.length;Q++)if(Z[Q]&&Z[Q].length)this.buffers.push(Z[Q]),this.byteLength+=Z[Q].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}XX$.DataBuffer=QX$});var TT=b((GX$)=>{Object.defineProperty(GX$,"__esModule",{value:!0});GX$.LF=GX$.CR=GX$.CRLF=GX$.CR_LF_LEN=GX$.CR_LF=void 0;GX$.setTransportFactory=MF4;GX$.defaultPort=IF4;GX$.getUrlParseFn=VF4;GX$.newTransport=kF4;GX$.getResolveFn=SF4;GX$.protoLen=JX$;GX$.extractProtocolMessage=CF4;var AF4=yG(),RF4=Hw(),qF4=Nr(),hG;function MF4($){hG=$}function IF4(){return hG!==void 0&&hG.defaultPort!==void 0?hG.defaultPort:RF4.DEFAULT_PORT}function VF4(){return hG!==void 0&&hG.urlParseFn?hG.urlParseFn:void 0}function kF4(){if(!hG||typeof hG.factory!=="function")throw Error("transport fn is not set");return hG.factory()}function SF4(){return hG!==void 0&&hG.dnsResolveFn?hG.dnsResolveFn:void 0}GX$.CR_LF=`\r
|
|
2108
|
+
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;Jw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:J,value:G}=await Z.read();if(J)break;X+=Q.decode(G,{stream:!0}),Y()}}catch{}if(X.trim()){let J=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(J)Jw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function gW4($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,J=Z||`http://localhost:${Y}`,G=X?await Hr(Number(Y)+1):await Hr(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await z30({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)wT({name:D.name,status:"ready",port:D.port});Kr();let F=yW4(import.meta.dir,"..","..","..","..",".."),U=Q===!0,N=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:J,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)C11(N.stdout),C11(N.stderr);Wr(J),wT({name:"Vite",status:"ready",port:Number(Y)}),wT({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(N.kill(D),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (PG0(),zG0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:N}}var v11=L(()=>{M11();jT();S11()});var A30;var x11=L(()=>{A30={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"}}});import{Box as uW4,Text as GQ$}from"ink";import{jsx as lW4,jsxs as KQ$}from"react/jsx-runtime";function WQ$({version:$}){return KQ$(uW4,{flexDirection:"column",marginTop:1,children:[dG0.map((Z,Q)=>lW4(GQ$,{color:iG0[Q],children:Z},Q)),KQ$(GQ$,{dimColor:!0,children:[" v",$]})]})}var HQ$=L(()=>{ia()});import{Box as ET,Text as Gw}from"ink";import{Spinner as cW4}from"@inkjs/ui";import{jsx as bG,jsxs as kl}from"react/jsx-runtime";function FQ$({status:$}){if($==="pending")return bG(cW4,{label:""});return bG(Gw,{color:"green",children:"\u2713"})}function mW4($){return`${$.name}: ${$.port||"...."}`}function UQ$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return kl(ET,{flexDirection:"column",paddingBottom:1,children:[bG(WQ$,{version:A30.version}),bG(ET,{marginBottom:1,children:bG(Gw,{dimColor:!0,children:"\u2500".repeat(80)})}),bG(ET,{children:kl(Gw,{dimColor:!0,children:["Home: ",Q]})}),kl(ET,{gap:2,children:[$.map((Y)=>kl(ET,{gap:1,children:[bG(Gw,{children:mW4(Y)}),bG(FQ$,{status:Y.status})]},Y.name)),kl(ET,{gap:1,children:[bG(Gw,{children:"Migrations"}),bG(FQ$,{status:Z})]})]}),bG(ET,{children:X?kl(Gw,{children:["Open in browser: ",bG(Gw,{color:"cyan",children:X})]}):bG(Gw,{dimColor:!0,children:"Starting..."})})]})}var NQ$=L(()=>{x11();HQ$()});import{Box as dW4,Text as Fr}from"ink";import{jsx as f11,jsxs as b11}from"react/jsx-runtime";function iW4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function BQ$({logs:$}){return f11(dW4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return f11(Fr,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return b11(Fr,{children:[b11(Fr,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),f11(Fr,{color:iW4(Z.status),children:Z.status}),b11(Fr,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var LQ$=()=>{};var y11={};K0(y11,{App:()=>tW4});import{Box as pW4}from"ink";import{useSyncExternalStore as nW4}from"react";import{jsx as OQ$,jsxs as oW4}from"react/jsx-runtime";function tW4({home:$}){let Z=nW4(k11,V11);return oW4(pW4,{flexDirection:"column",children:[OQ$(UQ$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),OQ$(BQ$,{logs:Z.logs})]})}var g11=L(()=>{NQ$();LQ$();jT()});var BK="thread-gate",uB="decopilot-hosted-harness",lB="decopilot-hosted-harness-sandboxed",LK="automations",Kw="background-tools",zT="task-board-github-reads";var DQ$="13";function wQ$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:DQ$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var jQ$=()=>{};import aW4 from"pg";async function zQ$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=rW4}=$,Y=$.log??((W)=>console.log(W)),J=new aW4.Client({connectionString:Q});await J.connect();let G=Date.now(),K=!1;try{while(!K){if(K=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[EQ$.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-G>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await S$(sW4)}let W=Date.now()-G;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await J.query("SELECT pg_advisory_unlock($1)",[EQ$.toString()])}catch{}await J.end().catch(()=>{})}}var EQ$=8314027461559302n,rW4=600000,sW4=500;var PQ$=L(()=>{w8()});function eW4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function h11($,Z){for(let Q=0;Q<$.length;Q++){let X=$[Q];if(X===void 0)continue;if(X===Z)return $[Q+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function TQ$(){let $=eW4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:h11($,"--cpu-prof-dir")??process.cwd(),name:h11($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(h11($,"--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.'}))}function AQ$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=BT();if(!Q)return;let X={};try{let{heapStats:Y}=await import("bun:jsc"),J=Y(),G=Object.entries(J.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);X={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,...X}))};return Z().catch(()=>{}),R30=setInterval(()=>void Z().catch(()=>{}),$),R30.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),X=typeof Q==="string"?Q:JSON.stringify(Q),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(R30)clearInterval(R30)}}var R30;var RQ$=()=>{};import*as $H4 from"bun:jsc";function qQ$(){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{ZH4()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let J=performance.now(),G=J-X;X=J+Z;let K=[];try{K=QH4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){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??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.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:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var ZH4,QH4;var MQ$=L(()=>{({startSamplingProfiler:ZH4,samplingProfilerStackTraces:QH4}=$H4)});function IQ$(){TQ$();let $=[AQ$(),H6$(),qQ$()];return()=>{for(let Z of $)Z()}}var VQ$=L(()=>{Ma0();RQ$();MQ$()});var PT=b((kQ$)=>{Object.defineProperty(kQ$,"__esModule",{value:!0});kQ$.RepublishHeaders=kQ$.DirectMsgHeaders=kQ$.JsHeaders=kQ$.AdvisoryKind=void 0;kQ$.isOrderedPushConsumerOptions=XH4;kQ$.isPullConsumer=YH4;kQ$.isPushConsumer=JH4;kQ$.isBoundPushConsumerOptions=GH4;function XH4($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function YH4($){return $.isPullConsumer()}function JH4($){return $.isPushConsumer()}function GH4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}kQ$.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};kQ$.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};kQ$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};kQ$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var yG=b((CQ$)=>{Object.defineProperty(CQ$,"__esModule",{value:!0});CQ$.TD=CQ$.TE=CQ$.Empty=void 0;CQ$.encode=OH4;CQ$.decode=DH4;CQ$.Empty=new Uint8Array(0);CQ$.TE=new TextEncoder;CQ$.TD=new TextDecoder;function LH4(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}function OH4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(CQ$.TE.encode($[Q]));if(Z.length===0)return CQ$.Empty;if(Z.length===1)return Z[0];return LH4(...Z)}function DH4($){if(!$||$.length===0)return"";return CQ$.TD.decode($)}});var gG=b((xQ$)=>{Object.defineProperty(xQ$,"__esModule",{value:!0});xQ$.errors=xQ$.PermissionViolationError=xQ$.NoRespondersError=xQ$.TimeoutError=xQ$.RequestError=xQ$.ProtocolError=xQ$.ConnectionError=xQ$.DrainingConnectionError=xQ$.ClosedConnectionError=xQ$.AuthorizationError=xQ$.UserAuthenticationExpiredError=xQ$.InvalidOperationError=xQ$.InvalidArgumentError=xQ$.InvalidSubjectError=void 0;class l11 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}xQ$.InvalidSubjectError=l11;class q30 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,Q){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((X)=>`'${X}'`),$=$.join(",");else $=`'${$}'`;return new q30(`${$} ${Z}`,Q)}}xQ$.InvalidArgumentError=q30;class c11 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}xQ$.InvalidOperationError=c11;class M30 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new M30($);return null}}xQ$.UserAuthenticationExpiredError=M30;class I30 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],Q=$.toLowerCase();for(let X=0;X<Z.length;X++)if(Q.indexOf(Z[X])!==-1)return new I30($);return null}}xQ$.AuthorizationError=I30;class m11 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}xQ$.ClosedConnectionError=m11;class d11 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}xQ$.DrainingConnectionError=d11;class i11 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}xQ$.ConnectionError=i11;class p11 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}xQ$.ProtocolError=p11;class n11 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof V30}}xQ$.RequestError=n11;class t11 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}xQ$.TimeoutError=t11;class V30 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}xQ$.NoRespondersError=V30;class k30 extends Error{operation;subject;queue;constructor($,Z,Q,X,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=Q,this.queue=X}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let Q="publish",X="",Y=void 0,J=$.match(/(Publish|Subscription) to "(\S+)"/);if(J){if(Q=J[1].toLowerCase(),X=J[2],Q==="subscription"){let G=$.match(/using queue "(\S+)"/);if(G)Y=G[1]}}return new k30($,Q,X,Y)}}xQ$.PermissionViolationError=k30;xQ$.errors={AuthorizationError:I30,ClosedConnectionError:m11,ConnectionError:i11,DrainingConnectionError:d11,InvalidArgumentError:q30,InvalidOperationError:c11,InvalidSubjectError:l11,NoRespondersError:V30,PermissionViolationError:k30,ProtocolError:p11,RequestError:n11,TimeoutError:t11,UserAuthenticationExpiredError:M30}});var oW=b((hQ$)=>{Object.defineProperty(hQ$,"__esModule",{value:!0});hQ$.SimpleMutex=hQ$.Perf=void 0;hQ$.extend=vH4;hQ$.render=xH4;hQ$.timeout=fH4;hQ$.delay=bH4;hQ$.deadline=yH4;hQ$.deferred=a11;hQ$.debugDeferred=gH4;hQ$.shuffle=hH4;hQ$.collect=uH4;hQ$.jitter=gQ$;hQ$.backoff=lH4;hQ$.nanos=cH4;hQ$.millis=mH4;hQ$.randomToken=pH4;var _H4=yG(),o11=gG();function vH4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function xH4($){return _H4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function fH4($,Z=!0){let Q=Z?new o11.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new o11.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function bH4($=0){let Z,Q=new Promise((X)=>{let Y=setTimeout(()=>{X()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),X()}}});return Object.assign(Q,Z)}async function yH4($,Z=1000){let Q=a11(),X=setTimeout(()=>{Q.reject(new o11.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function a11(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function gH4(){let $={},Z=new Promise((Q,X)=>{$={resolve:(Y)=>{console.trace("resolve",Y),Q(Y)},reject:(Y)=>{console.trace("reject"),X(Y)}}});return Object.assign(Z,$)}function hH4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function uH4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class bQ${timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,Q){let X=this.timers.get(Z);if(X===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(Q);if(Y===void 0)throw Error(`${Q} is not defined`);this.measures.set($,Y-X)}getEntries(){let $=[];return this.measures.forEach((Z,Q)=>{$.push({name:Q,duration:Z})}),$}}hQ$.Perf=bQ$;class yQ${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=a11();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}hQ$.SimpleMutex=yQ$;function gQ$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function lH4($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(Q){return gQ$(Q>Z?$[Z]:$[Q])}}}function cH4($){return $*1e6}function mH4($){return Math.floor($/1e6)}var dH4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",cB=new Uint8Array(62);for(let $=0;$<62;$++)cB[$]=dH4.charCodeAt($);var iH4=218340105584896;function pH4(){let $=Math.floor(Math.random()*iH4),Z=$%62,Q=cB[Z];$=($-Z)/62,Z=$%62;let X=cB[Z];$=($-Z)/62,Z=$%62;let Y=cB[Z];$=($-Z)/62,Z=$%62;let J=cB[Z];$=($-Z)/62,Z=$%62;let G=cB[Z];$=($-Z)/62,Z=$%62;let K=cB[Z];$=($-Z)/62,Z=$%62;let W=cB[Z];$=($-Z)/62;let H=cB[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var nQ$=b((iQ$)=>{Object.defineProperty(iQ$,"__esModule",{value:!0});iQ$.nuid=iQ$.NuidImpl=void 0;var WF4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ww=62,C30=12,mQ$=10,lQ$=33,HF4=333,cQ$=C30+mQ$,s11=new Uint8Array(Ww);for(let $=0;$<Ww;$++)s11[$]=WF4.charCodeAt($);var S30=4294967296,dQ$=BigInt(Ww)**BigInt(mQ$),Ur=Number(dQ$/(1n<<32n)),r11=Number(dQ$%(1n<<32n));function FF4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function UF4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else FF4($)}class e11{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(cQ$),this.cbuf=new Uint8Array(C30),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Ur+1)),this.seqLo=Math.floor(Math.random()*S30);while($++<8&&this.seqHi===Ur&&this.seqLo>=r11);if(this.seqHi===Ur&&this.seqLo>=r11)this.seqLo=0;this.inc=Math.random()*(HF4-lQ$)+lQ$|0}setPre(){UF4(this.cbuf);for(let $=0;$<C30;$++)this.buf[$]=s11[this.cbuf[$]%Ww]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=cQ$-1;Q>=C30;Q--){let X=Math.floor($/Ww),J=($-X*Ww)*S30+Z,G=Math.floor(J/Ww),K=J-G*Ww;this.buf[Q]=s11[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=S30)this.seqLo-=S30,this.seqHi+=1;if(this.seqHi>Ur||this.seqHi===Ur&&this.seqLo>=r11)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}iQ$.NuidImpl=e11;iQ$.nuid=new e11});var rQ$=b((oQ$)=>{Object.defineProperty(oQ$,"__esModule",{value:!0});oQ$.nuid=oQ$.Nuid=void 0;var tQ$=nQ$();oQ$.Nuid=tQ$.NuidImpl;oQ$.nuid=tQ$.nuid});var v30=b((_30)=>{Object.defineProperty(_30,"__esModule",{value:!0});_30.nuid=_30.Nuid=void 0;var sQ$=rQ$();Object.defineProperty(_30,"Nuid",{enumerable:!0,get:function(){return sQ$.Nuid}});Object.defineProperty(_30,"nuid",{enumerable:!0,get:function(){return sQ$.nuid}})});var Hw=b((eQ$)=>{Object.defineProperty(eQ$,"__esModule",{value:!0});eQ$.DEFAULT_HOST=eQ$.DEFAULT_PORT=eQ$.Match=void 0;eQ$.syncIterator=wF4;eQ$.createInbox=jF4;var OF4=v30(),DF4=gG();eQ$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function wF4($){let Z=$[Symbol.asyncIterator]();return{async next(){let Q=await Z.next();if(Q.done)return Promise.resolve(null);return Promise.resolve(Q.value)}}}function jF4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw DF4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${OF4.nuid.next()}`}eQ$.DEFAULT_PORT=4222;eQ$.DEFAULT_HOST="127.0.0.1"});var Nr=b((XX$)=>{Object.defineProperty(XX$,"__esModule",{value:!0});XX$.DataBuffer=void 0;var ZX$=yG();class QX${buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}static fromAscii($){if(!$)$="";return ZX$.TE.encode($)}static toAscii($){return ZX$.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let Q=0;Q<this.buffers.length;Q++)$.set(this.buffers[Q],Z),Z+=this.buffers[Q].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let Q=this.byteLength;if($===void 0||$>Q)$=Q;let X=Z.subarray(0,$);if(Q>$)this.buffers.push(Z.subarray($));return this.byteLength=Q-$,X}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let Q=0;Q<Z.length;Q++)if(Z[Q]&&Z[Q].length)this.buffers.push(Z[Q]),this.byteLength+=Z[Q].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}XX$.DataBuffer=QX$});var TT=b((GX$)=>{Object.defineProperty(GX$,"__esModule",{value:!0});GX$.LF=GX$.CR=GX$.CRLF=GX$.CR_LF_LEN=GX$.CR_LF=void 0;GX$.setTransportFactory=MF4;GX$.defaultPort=IF4;GX$.getUrlParseFn=VF4;GX$.newTransport=kF4;GX$.getResolveFn=SF4;GX$.protoLen=JX$;GX$.extractProtocolMessage=CF4;var AF4=yG(),RF4=Hw(),qF4=Nr(),hG;function MF4($){hG=$}function IF4(){return hG!==void 0&&hG.defaultPort!==void 0?hG.defaultPort:RF4.DEFAULT_PORT}function VF4(){return hG!==void 0&&hG.urlParseFn?hG.urlParseFn:void 0}function kF4(){if(!hG||typeof hG.factory!=="function")throw Error("transport fn is not set");return hG.factory()}function SF4(){return hG!==void 0&&hG.dnsResolveFn?hG.dnsResolveFn:void 0}GX$.CR_LF=`\r
|
|
2109
2109
|
`;GX$.CR_LF_LEN=GX$.CR_LF.length;GX$.CRLF=qF4.DataBuffer.fromAscii(GX$.CR_LF);GX$.CR=new Uint8Array(GX$.CRLF)[0];GX$.LF=new Uint8Array(GX$.CRLF)[1];function JX$($){for(let Z=0;Z<$.length;Z++){let Q=Z+1;if($.byteLength>Q&&$[Z]===GX$.CR&&$[Q]===GX$.LF)return Q+1}return 0}function CF4($){let Z=JX$($);if(Z>0){let X=new Uint8Array($).slice(0,Z);return AF4.TD.decode(X)}return""}});var Y$1=b((LX$)=>{Object.defineProperty(LX$,"__esModule",{value:!0});LX$.ipV4=UX$;LX$.isIP=cF4;LX$.parseIP=NX$;var Br=4,AT=16,x30=48,FX$=57,WX$=65,uF4=70,HX$=97,lF4=102,X$1=16777215;function UX$($,Z,Q,X){let Y=new Uint8Array(AT);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((G,K)=>{Y[K]=G}),Y[12]=$,Y[13]=Z,Y[14]=Q,Y[15]=X,Y}function cF4($){return NX$($)!==void 0}function NX$($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return BX$($);case":":return mF4($)}return}function BX$($){let Z=new Uint8Array(Br);for(let Q=0;Q<Br;Q++){if($.length===0)return;if(Q>0){if($[0]!==".")return;$=$.substring(1)}let{n:X,c:Y,ok:J}=dF4($);if(!J||X>255)return;$=$.substring(Y),Z[Q]=X}return UX$(Z[0],Z[1],Z[2],Z[3])}function mF4($){let Z=new Uint8Array(AT),Q=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(Q=0,$=$.substring(2),$.length===0)return Z}let X=0;while(X<AT){let{n:Y,c:J,ok:G}=iF4($);if(!G||Y>65535)return;if(J<$.length&&$[J]==="."){if(Q<0&&X!=AT-Br)return;if(X+Br>AT)return;let K=BX$($);if(K===void 0)return;Z[X]=K[12],Z[X+1]=K[13],Z[X+2]=K[14],Z[X+3]=K[15],$="",X+=Br;break}if(Z[X]=Y>>8,Z[X+1]=Y,X+=2,$=$.substring(J),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(Q>=0)return;if(Q=X,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(X<AT){if(Q<0)return;let Y=AT-X;for(let J=X-1;J>=Q;J--)Z[J+Y]=Z[J];for(let J=Q+Y-1;J>=Q;J--)Z[J]=0}else if(Q>=0)return;return Z}function dF4($){let Z=0,Q=0;for(Z=0;Z<$.length&&x30<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=FX$;Z++)if(Q=Q*10+($.charCodeAt(Z)-x30),Q>=X$1)return{n:X$1,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:Q,c:Z,ok:!0}}function iF4($){let Z=0,Q=0;for(Q=0;Q<$.length;Q++){if(x30<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=FX$)Z*=16,Z+=$.charCodeAt(Q)-x30;else if(HX$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=lF4)Z*=16,Z+=$.charCodeAt(Q)-HX$+10;else if(WX$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=uF4)Z*=16,Z+=$.charCodeAt(Q)-WX$+10;else break;if(Z>=X$1)return{n:0,c:Q,ok:!1}}if(Q===0)return{n:0,c:Q,ok:!1};return{n:Z,c:Q,ok:!0}}});var F$1=b((DX$)=>{Object.defineProperty(DX$,"__esModule",{value:!0});DX$.Servers=DX$.ServerImpl=void 0;DX$.isIPV4OrHostname=OX$;DX$.hostPort=H$1;var J$1=TT(),G$1=oW(),K$1=Y$1(),oF4=Hw(),aF4=gG();function OX$($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function W$1($){return!OX$($)}function rF4($){let Q=$.toUpperCase().indexOf("::FFFF:");if(Q!==-1&&$.indexOf(".")!==-1){let X=$.substring(Q+7);return X=X.replace("[",""),X.replace("]","")}return $}function H$1($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=rF4($),W$1($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=W$1($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),Q=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):oF4.DEFAULT_PORT,Y=new URL(`${Q===80?"https":"http"}://${$}`);Y.port=`${Q}`;let J=Y.hostname;if(J.charAt(0)==="[")J=J.substring(1,J.length-1);return{listen:Y.host,hostname:J,port:Q}}class Sl{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let Q=H$1($);this.listen=Q.listen,this.hostname=Q.hostname,this.port=Q.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,K$1.isIP)(this.hostname))return[this];else{let Q=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${Q.join(",")}`);for(let X of Q){let Y=this.port===80?"https":"http",J=new URL(`${Y}://${W$1(X)?"["+X+"]":X}`);J.port=`${this.port}`;let G=new Sl(J.host,!1);G.tlsName=this.hostname,Z.push(G)}}if($.randomize)(0,G$1.shuffle)(Z);return this.resolves=Z,Z}}DX$.ServerImpl=Sl;class f30{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw aF4.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,J$1.getUrlParseFn)(),Q=new Map;for(let Y of this.servers)Q.set(Y.listen,Y);let X=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:J}=H$1(Y),G=Q.get(J);if(G)G.gossiped=!1,X.push(G);else X.push(new Sl(Y))}if(this.randomize)(0,G$1.shuffle)(X);if(this.servers=X,this.currentServer===void 0||!X.includes(this.currentServer))this.currentServer=X[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,K$1.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let Q=(0,J$1.getUrlParseFn)();$=Q?Q($):$;let X=new Sl($,Z);if((0,K$1.isIP)(X.hostname))X.tlsName=this.tlsName;this.servers.push(X)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return f30.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return f30.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let Q=[],X=[],Y=(0,J$1.getUrlParseFn)(),J=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Sl(K,!0);J.set(K,W)});let G=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&J.get(H)===void 0)G.push(W);J.delete(H)}),G.reverse(),G.forEach((K)=>{let W=this.servers.splice(K,1);X=X.concat(W[0].listen)}),J.forEach((K,W)=>{this.servers.push(K),Q.push(W)}),this.randomize&&Q.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,G$1.shuffle)(W),this.servers=K?[K,...W]:W}return{added:Q,deleted:X}}}DX$.Servers=f30});var b30=b((zX$)=>{Object.defineProperty(zX$,"__esModule",{value:!0});zX$.QueuedIteratorImpl=void 0;var U$1=oW(),jX$=gG();class EX${inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,U$1.deferred)(),this.yields=[],this.iterClosed=(0,U$1.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(Q){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new jX$.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new jX$.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let X=$[Z];try{X()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let Q=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-Q:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,U$1.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}zX$.QueuedIteratorImpl=EX$});var N$1=b((RX$)=>{Object.defineProperty(RX$,"__esModule",{value:!0});RX$.MuxSubscription=void 0;var ZU4=Hw(),TX$=gG();class AX${baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,ZU4.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((Q)=>{Q.resolver(Z,{})}),!0;if(Z.operation==="publish"){let Q=this.all().find((X)=>{return X.requestSubject===Z.subject});if(Q)return Q.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let Q=this.getToken(Z);if(Q){let X=this.get(Q);if(X){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new TX$.NoRespondersError(X.requestSubject):null;X.resolver($,Z)}}}}close(){let $=new TX$.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}RX$.MuxSubscription=AX$});var B$1=b((IX$)=>{Object.defineProperty(IX$,"__esModule",{value:!0});IX$.Heartbeat=void 0;var QU4=oW();class MX${ph;interval;maxOut;timer;pendings;constructor($,Z,Q){this.ph=$,this.interval=Z,this.maxOut=Q,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,QU4.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}IX$.Heartbeat=MX$});var D$1=b((_X$)=>{Object.defineProperty(_X$,"__esModule",{value:!0});_X$.DenoBuffer=_X$.MAX_SIZE=_X$.AssertionError=void 0;_X$.assert=SX$;_X$.concat=CX$;_X$.append=YU4;_X$.readAll=JU4;_X$.writeAll=GU4;var XU4=yG();class L$1 extends Error{constructor($){super($);this.name="AssertionError"}}_X$.AssertionError=L$1;function SX$($,Z="Assertion failed."){if(!$)throw new L$1(Z)}var kX$=32768;_X$.MAX_SIZE=4294967294;function y30($,Z,Q=0){let X=Z.byteLength-Q;if($.byteLength>X)$=$.subarray(0,X);return Z.set($,Q),$.byteLength}function CX$($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let Q=new Uint8Array($.length+Z.length);return Q.set($,0),Q.set(Z,$.length),Q}function YU4($,Z){return CX$($,Uint8Array.of(Z))}class O$1{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){SX$($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=y30(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(XU4.TE.encode($))}write($){let Z=this._grow($.byteLength);return y30($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let Q=this._tryGrowByReslice($);if(Q>=0)return Q;let X=this.capacity;if($<=Math.floor(X/2)-Z)y30(this._buf.subarray(this._off),this._buf);else if(X+$>_X$.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*X+$,_X$.MAX_SIZE));y30(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,_X$.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,Q=new Uint8Array(kX$);while(!0){let X=this.capacity-this.length<kX$,Y=X?Q:new Uint8Array(this._buf.buffer,this.length),J=$.read(Y);if(J===null)return Z;if(X)this.write(Y.subarray(0,J));else this._reslice(this.length+J);Z+=J}}}_X$.DenoBuffer=O$1;function JU4($){let Z=new O$1;return Z.readFrom($),Z.bytes()}function GU4($,Z){let Q=0;while(Q<Z.length)Q+=$.write(Z.subarray(Q))}});var E$1=b((yX$)=>{Object.defineProperty(yX$,"__esModule",{value:!0});yX$.cc=yX$.State=yX$.Parser=yX$.Kind=void 0;yX$.describe=BU4;var w$1=D$1(),j$1=yG();yX$.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function BU4($){let Z,Q="";switch($.kind){case yX$.Kind.MSG:Z="MSG";break;case yX$.Kind.OK:Z="OK";break;case yX$.Kind.ERR:Z="ERR",Q=j$1.TD.decode($.data);break;case yX$.Kind.PING:Z="PING";break;case yX$.Kind.PONG:Z="PONG";break;case yX$.Kind.INFO:Z="INFO",Q=j$1.TD.decode($.data)}return`${Z}: ${Q}`}function xX$(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var fX$=48,LU4=57,Cl=67108864;class bX${dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=yX$.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let Q=$[Z];switch(this.state){case yX$.State.OP_START:switch(Q){case yX$.cc.M:case yX$.cc.m:this.state=yX$.State.OP_M,this.hdr=-1,this.ma=xX$();break;case yX$.cc.H:case yX$.cc.h:this.state=yX$.State.OP_H,this.hdr=0,this.ma=xX$();break;case yX$.cc.P:case yX$.cc.p:this.state=yX$.State.OP_P;break;case yX$.cc.PLUS:this.state=yX$.State.OP_PLUS;break;case yX$.cc.MINUS:this.state=yX$.State.OP_MINUS;break;case yX$.cc.I:case yX$.cc.i:this.state=yX$.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_H:switch(Q){case yX$.cc.M:case yX$.cc.m:this.state=yX$.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_M:switch(Q){case yX$.cc.S:case yX$.cc.s:this.state=yX$.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_MS:switch(Q){case yX$.cc.G:case yX$.cc.g:this.state=yX$.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_MSG:switch(Q){case yX$.cc.SPACE:case yX$.cc.TAB:this.state=yX$.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_MSG_SPC:switch(Q){case yX$.cc.SPACE:case yX$.cc.TAB:continue;default:this.state=yX$.State.MSG_ARG,this.as=Z}break;case yX$.State.MSG_ARG:switch(Q){case yX$.cc.CR:this.drop=1;break;case yX$.cc.NL:{let X=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(X),this.drop=0,this.as=Z+1,this.state=yX$.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;case yX$.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let X=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:yX$.Kind.MSG,msg:this.ma,data:X}),this.argBuf=void 0,this.msgBuf=void 0,this.state=yX$.State.MSG_END}else{let X=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<X)X=Y;if(X>0)this.msgBuf.write($.subarray(Z,Z+X)),Z=Z+X-1;else this.msgBuf.writeByte(Q)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:yX$.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=yX$.State.MSG_END;break;case yX$.State.MSG_END:switch(Q){case yX$.cc.NL:this.drop=0,this.as=Z+1,this.state=yX$.State.OP_START;break;default:continue}break;case yX$.State.OP_PLUS:switch(Q){case yX$.cc.O:case yX$.cc.o:this.state=yX$.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_PLUS_O:switch(Q){case yX$.cc.K:case yX$.cc.k:this.state=yX$.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_PLUS_OK:switch(Q){case yX$.cc.NL:this.dispatcher.push({kind:yX$.Kind.OK}),this.drop=0,this.state=yX$.State.OP_START;break}break;case yX$.State.OP_MINUS:switch(Q){case yX$.cc.E:case yX$.cc.e:this.state=yX$.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_MINUS_E:switch(Q){case yX$.cc.R:case yX$.cc.r:this.state=yX$.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_MINUS_ER:switch(Q){case yX$.cc.R:case yX$.cc.r:this.state=yX$.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_MINUS_ERR:switch(Q){case yX$.cc.SPACE:case yX$.cc.TAB:this.state=yX$.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_MINUS_ERR_SPC:switch(Q){case yX$.cc.SPACE:case yX$.cc.TAB:continue;default:this.state=yX$.State.MINUS_ERR_ARG,this.as=Z}break;case yX$.State.MINUS_ERR_ARG:switch(Q){case yX$.cc.CR:this.drop=1;break;case yX$.cc.NL:{let X;if(this.argBuf)X=this.argBuf.bytes(),this.argBuf=void 0;else X=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:yX$.Kind.ERR,data:X}),this.drop=0,this.as=Z+1,this.state=yX$.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(Q))}break;case yX$.State.OP_P:switch(Q){case yX$.cc.I:case yX$.cc.i:this.state=yX$.State.OP_PI;break;case yX$.cc.O:case yX$.cc.o:this.state=yX$.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_PO:switch(Q){case yX$.cc.N:case yX$.cc.n:this.state=yX$.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_PON:switch(Q){case yX$.cc.G:case yX$.cc.g:this.state=yX$.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_PONG:switch(Q){case yX$.cc.NL:this.dispatcher.push({kind:yX$.Kind.PONG}),this.drop=0,this.state=yX$.State.OP_START;break}break;case yX$.State.OP_PI:switch(Q){case yX$.cc.N:case yX$.cc.n:this.state=yX$.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_PIN:switch(Q){case yX$.cc.G:case yX$.cc.g:this.state=yX$.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_PING:switch(Q){case yX$.cc.NL:this.dispatcher.push({kind:yX$.Kind.PING}),this.drop=0,this.state=yX$.State.OP_START;break}break;case yX$.State.OP_I:switch(Q){case yX$.cc.N:case yX$.cc.n:this.state=yX$.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_IN:switch(Q){case yX$.cc.F:case yX$.cc.f:this.state=yX$.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_INF:switch(Q){case yX$.cc.O:case yX$.cc.o:this.state=yX$.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_INFO:switch(Q){case yX$.cc.SPACE:case yX$.cc.TAB:this.state=yX$.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case yX$.State.OP_INFO_SPC:switch(Q){case yX$.cc.SPACE:case yX$.cc.TAB:continue;default:this.state=yX$.State.INFO_ARG,this.as=Z}break;case yX$.State.INFO_ARG:switch(Q){case yX$.cc.CR:this.drop=1;break;case yX$.cc.NL:{let X;if(this.argBuf)X=this.argBuf.bytes(),this.argBuf=void 0;else X=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:yX$.Kind.INFO,data:X}),this.drop=0,this.as=Z+1,this.state=yX$.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;default:throw this.fail($.subarray(Z))}}if((this.state===yX$.State.MSG_ARG||this.state===yX$.State.MINUS_ERR_ARG||this.state===yX$.State.INFO_ARG)&&!this.argBuf)this.argBuf=new w$1.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===yX$.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new w$1.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,Q=new Uint8Array($+Z);if(Q.set(this.ma.subject),this.ma.reply)Q.set(this.ma.reply,$);if(this.argBuf=new w$1.DenoBuffer(Q),this.ma.subject=Q.subarray(0,$),this.ma.reply)this.ma.reply=Q.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case yX$.cc.SPACE:case yX$.cc.TAB:case yX$.cc.CR:case yX$.cc.NL:if(Q>=0)Z.push($.subarray(Q,X)),Q=-1;break;default:if(Q<0)Q=X}if(Q>=0)Z.push($.subarray(Q));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],Cl);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],Cl);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${j$1.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case yX$.cc.SPACE:case yX$.cc.TAB:case yX$.cc.CR:case yX$.cc.NL:if(Q>=0)Z.push($.subarray(Q,X)),Q=-1;break;default:if(Q<0)Q=X}if(Q>=0)Z.push($.subarray(Q));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],Cl),this.ma.size=this.protoParseInt(Z[3],Cl);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],Cl),this.ma.size=this.protoParseInt(Z[4],Cl);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let Q=0;for(let X=0;X<$.length;X++){if($[X]<fX$||$[X]>LU4)return-1;Q=Q*10+($[X]-fX$)}return Z!==void 0&&Q>Z?-1:Q}}yX$.Parser=bX$;yX$.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};yX$.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var u30=b((hX$)=>{Object.defineProperty(hX$,"__esModule",{value:!0});hX$.MsgHdrsImpl=void 0;hX$.canonicalMIMEHeaderKey=P$1;hX$.headers=wU4;var gX$=yG(),aW=Hw(),h30=gG();function P$1($){let F=!0,U=Array($.length);for(let N=0;N<$.length;N++){let B=$.charCodeAt(N);if(B===58||B<33||B>126)throw h30.InvalidArgumentError.format("header",`'${$[N]}' is not a valid character in a header name`);if(F&&97<=B&&B<=122)B-=32;else if(!F&&65<=B&&B<=90)B+=32;U[N]=B,F=B==45}return String.fromCharCode(...U)}function wU4($=0,Z=""){if($===0&&Z!=="")throw h30.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw h30.InvalidArgumentError.format("description","is required");return new _l($,Z)}var z$1="NATS/1.0";class _l{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,Q]of this.headers){let X=$.values(Z);if(Q.length!==X.length)return!1;let Y=[...Q].sort(),J=[...X].sort();for(let G=0;G<Y.length;G++)if(Y[G]!==J[G])return!1}return!0}return!1}static decode($){let Z=new _l,X=gX$.TD.decode($).split(`\r
|
|
2110
2110
|
`),Y=X[0];if(Y!==z$1){let J=Y.replace(z$1,"").trim();if(J.length>0){if(Z._code=parseInt(J,10),isNaN(Z._code))Z._code=0;let G=Z._code.toString();J=J.replace(G,""),Z._description=J.trim()}}if(X.length>=1)X.slice(1).map((J)=>{if(J){let G=J.indexOf(":");if(G>-1){let K=J.slice(0,G),W=J.slice(G+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=z$1;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,Q]of this.headers)for(let X=0;X<Q.length;X++)$=`${$}\r
|
|
2111
2111
|
${Z}: ${Q[X]}`;return`${$}\r
|
|
@@ -5756,9 +5756,9 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
5756
5756
|
${J.join(`
|
|
5757
5757
|
`)}`:Y}function BL5($){let Z=new Set;for(let Q of $)for(let X of Q.split(`
|
|
5758
5758
|
`)){let Y=X.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var jP8=200,XL5=12,JL5,KL5=300,Jy0=3;var rR1=L(()=>{Q7();w8();Yy0();JL5={aheadBy:0,behindBy:0,files:[]}});function OL5($){if(!$||$.includes(".."))return!1;return LL5.test($)}function zP8($){return DL5.includes($)}function sR1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!OL5(Z))return null;let{__resolveType:Q,...X}=$;return{resolveType:Z,payload:X}}function eR1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var LL5,DL5;var PP8=L(()=>{LL5=/^[\w./@-]+$/;DL5=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function s90($,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 AP8($,Z,Q,X){let Y=$.organization?.id;if(!Y)throw new ZP(S7);let J=await gE($.storage,Y,X);if(J&&await ZO($.storage,J)){let F=await JN($,J,{forceRefresh:!0}).catch((U)=>{throw new ZP(U instanceof Error?U.message:S7)});await TP8($,Z,Q,F);return}let G=X.connectionId??J?.legacyConnectionId;if(!G)throw new ZP("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await ji({ctx:$,connectionId:G,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:S7;throw new ZP(U)}});let{cloneUrl:K,gitUserName:W,gitUserEmail:H}=await GN(G,X.owner,X.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=tb$(F instanceof Error?F.message:String(F));throw U?new ZP(N):F});await TP8($,Z,Q,{cloneUrl:K,gitUserName:W,gitUserEmail:H})}async function TP8($,Z,Q,X){let{cloneUrl:Y,gitUserName:J,gitUserEmail:G}=X,K=Ot($),W=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Y},identity:{userName:J,userEmail:G}},...K?{operator:K}:{}})});if(!W.ok){let H=await Kz(W,wL5).catch(()=>W.statusText);throw Error(`Failed to refresh sandbox git credentials (${W.status}): ${H}`)}}var wL5=10485760,ZP;var $q1=L(()=>{oK();ob0();_40();QO0();q80();Q7();ZP=class ZP extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function EL5($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!jL5.test(Z))throw Error(`Invalid branch name: ${$}`)}function Dh($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(zL5)])}async function TL5($,Z){let Q=$.var.studioContext,X=LN(Z.branch),Y=$.req.query("thread")??X,J=Y&&Y===X?Z.branchThread:Y?await Q.storage.threads.get(Y).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,K=hy(G?.metadata?.runtime);if(K)return K;let W=dk0(Z.virtualMcpMetadata),H=W==="cms"?await CR1(Q,{claimName:Z.claimName}):"alive",F=W==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&W==="cms");if(U&&G)v40(Q,G.id,F);if(W==="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 AL5($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await rY($.var.studioContext)}catch{return null}}function wh($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function zt($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),X=$.var.studioContext,Y=s90(Z,Q);if(!Y)throw new h0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=F0(X);return Oi(X,J.id,Y)}function Qq1($,Z){let Q=Z instanceof Error?Z.message:String(Z),X=Of$(Z);if(X!==void 0)return $.json({error:Q},429,{...W9,...X===null?{}:{"Retry-After":String(Math.ceil(X/1000))}});if(Z instanceof Z5)return $.json({error:Q},409,W9);let Y=$W(Z);if(Y!==null){let J=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},J,W9)}return $.json({error:Q},502,W9)}async function Zq1($,Z,Q){let X;try{X=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await X.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:X.status,headers:{"content-type":X.headers.get("content-type")??"application/json"}})}async function IP8($){try{let Z=await zt($),Q=await Gy0(Z,$.get("vmClaim").branch);return $.json(Q,200,W9)}catch(Z){return Qq1($,Z)}}function e90($,Z){let X=(Hy0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=X.catch(()=>{});return Hy0.set($,Y),Y.finally(()=>{if(Hy0.get($)===Y)Hy0.delete($)}),X}async function OQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,W9);let X=Q?.runner??wh($);if(X instanceof Response)return X;let{claimName:Y,userId:J,projectRef:G}=$.get("vmClaim"),K=Q?.method??"POST",W=null,H=new Headers;if(Q?.jsonBody!==void 0)W=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)W=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:K,headers:H,body:W,...F?{signal:F}:{}},N=async()=>{let B=await X.proxyDaemonRequest(Y,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await X.adoptLiveClaim({userId:J,projectRef:G},Y))B=await X.proxyDaemonRequest(Y,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...W9}})}}let O=await B.text(),D=Q?.redactRepoDir?RL5(O):O,w=B.headers.get("content-type")??"application/json";return new Response(D,{status:B.status,headers:{"content-type":w,...W9}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((D,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 RL5($){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 Fy0($,Z,Q,X="GET",Y){let J=await $.proxyDaemonRequest(Z,Q,{method:X,headers:new Headers,body:null});if(J.status===404&&Y){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))J=await $.proxyDaemonRequest(Z,Q,{method:X,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 K=`Daemon error (${J.status})`;try{K=JSON.parse(G).error??K}catch{}throw Error(K)}return JSON.parse(G)}function qL5($){return VP8.includes($)}var jL5,RP8=524288,qP8=65536,zL5=1e4,MP8=2000,PL5,Hy0,W9,VP8,kP8=()=>{let $=new Y1;$.use("/:virtualMcpId/:branch/*",PL5),$.post("/:virtualMcpId/:branch/write",(Q)=>OQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Dh(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>OQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Dh(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>OQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Dh(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>OQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Dh(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>OQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Dh(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>OQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Dh(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>OQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Dh(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let X=Q.req.param("script");if(!X)return Q.json({error:"missing script name"},400);return OQ(Q,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let X=Q.req.param("script");if(!X)return Q.json({error:"missing script name"},400);return OQ(Q,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>OQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>OQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let X=Q.req.param("step");if(!X||!qL5(X))return Q.json({error:`step must be one of: ${VP8.join(", ")}`},400);let Y=Q.get("vmClaim"),J=await CR1(Q.var.studioContext,{claimName:Y.claimName})==="gone"?null:await AL5(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,W9);if(X==="start"){let G=F0(Q.var.studioContext),K=si(Y.virtualMcpMetadata);try{await uk0({ctx:Q.var.studioContext,runner:J,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:K})}catch(W){let H=W instanceof Error?W.message:String(W);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return OQ(Q,`/_sandbox/setup/${X}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let X=Q.get("vmClaim");if(!X.runner)return oO(Q,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return kz8(Q,{ctx:Q.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return IP8(Q);return Z(Q)});let Z=(Q)=>OQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(MP8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return IP8(Q);return OQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(MP8)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")try{let Y=await Q.req.json().catch(()=>({})),J=await zt(Q),G=await Ky0(J,X.branch,Y.base);return Q.json(G,200,W9)}catch(Y){return Qq1(Q,Y)}return OQ(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,W9);let X=wh(Q);if(X instanceof Response)return X;let{claimName:Y,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),K=Q.var.studioContext;return e90(Y,async()=>{try{await _R1(K,X,Y);let W=s90(J,G);if(W)await AP8(K,X,Y,W)}catch(W){if(W instanceof ZP)return Q.json({error:W.message},403,W9);let H=W instanceof Error?W.message:String(W);return Q.json({error:H},502,W9)}return OQ(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")return e90(X.claimName,async()=>{let Y=await Q.req.json().catch(()=>({})),J=Array.isArray(Y.filepaths)?Y.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,W9);try{let G=await zt(Q);return await EP8(G,X.branch,J),Q.json({ok:!0},200,W9)}catch(G){let K=$W(G)===409||G instanceof Z5?409:502,W=G instanceof Error?G.message:String(G);return Q.json({error:W},K,W9)}});return e90(X.claimName,()=>OQ(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let X=Q.get("vmClaim");if(X.runtime==="cms")return e90(X.claimName,async()=>{try{let K=await Q.req.json().catch(()=>({})),W=await zt(Q),H=K.base??await W.getDefaultBranch();return await Wy0(W,X.branch,H),Q.json({ok:!0},200,W9)}catch(K){return Qq1(Q,K)}});let Y=wh(Q);if(Y instanceof Response)return Y;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return e90(J,async()=>{try{await _R1(G,Y,J)}catch(K){let W=K instanceof Error?K.message:String(K);return Q.json({error:W},502,W9)}return OQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",f5({maxSize:RP8,onError:(Q)=>Q.json({error:"Payload too large"},413,W9)}),async(Q)=>{let X=Q.get("vmClaim"),Y=null;if(X.runtime!=="cms"){let H=wh(Q);if(H instanceof Response)return H;Y=H}let{claimName:J,userId:G,projectRef:K}=X,W=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]=fR1(F)&&N?[F,U]:Y?await Promise.all([Fy0(Y,J,"/_sandbox/git/status","GET",{userId:G,projectRef:K}),Fy0(Y,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:K})]):await(async()=>{let w=await zt(Q);return Promise.all([Gy0(w,X.branch),Ky0(w,X.branch)])})();await yH(W,F0(W).id,"suggesting a commit message");let D=await xz8(W,B,O);return Q.json(D,200,W9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,W9);return Q.json({error:F},502,W9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",f5({maxSize:RP8,onError:(Q)=>Q.json({error:"Payload too large"},413,W9)}),async(Q)=>{let X=Q.get("vmClaim"),Y=null;if(X.runtime!=="cms"){let H=wh(Q);if(H instanceof Response)return H;Y=H}let{claimName:J,userId:G,projectRef:K}=X,W=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]=fR1(F)&&N?[F,U]:Y?await Promise.all([Fy0(Y,J,"/_sandbox/git/status","GET",{userId:G,projectRef:K}),Fy0(Y,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:K})]):await(async()=>{let w=await zt(Q);return Promise.all([Gy0(w,X.branch),Ky0(w,X.branch)])})();await yH(W,F0(W).id,"judging whether a change needs review");let D=await bz8(W,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(D,200,W9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,W9);return Q.json({error:F},502,W9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let X=wh(Q);if(X instanceof Response)return X;let{claimName:Y}=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 X.getPreviewUrl(Y)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let K=G.replace(/\/+$/,"");return Zq1(Q,`${K}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",f5({maxSize:qP8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let X=wh(Q);if(X instanceof Response)return X;let{claimName:Y}=Q.get("vmClaim"),J;try{J=await X.getPreviewUrl(Y)}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 K=sR1(G);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);let W=eR1(J,K.resolveType);return Zq1(Q,W,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",f5({maxSize:qP8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let{runner:X,claimName:Y,virtualMcpMetadata:J}=Q.get("vmClaim"),G;try{G=X?await X.getPreviewUrl(Y):ei(J)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let K;try{K=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!K||typeof K!=="object"||Array.isArray(K))return Q.json({error:"Invalid JSON body"},400);let W=sR1(K);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);if(!zP8(W.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=eR1(G,W.resolveType);return Zq1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var SP8=L(()=>{U8();qW();Lt();SR1();k40();Mz8();KW();$p();Iz8();$F();iU();Vz8();Sz8();ZN1();C40();gR1();yz8();Q7();q5();rR1();PP8();mk0();$q1();jL5=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;PL5=tb0(async($,Z)=>{let Q=$.var.studioContext;try{e(Q)}catch{return $.json({error:"Unauthorized"},401)}let X=t0(Q);if(!X)return $.json({error:"Unauthorized"},401);let Y;try{Y=F0(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{EL5(G)}catch(D){let w=D instanceof Error?D.message:String(D);return $.json({error:w},400)}let K=await Q.storage.virtualMcps.findById(J);if(!K||K.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let W=a80({orgId:Y.id,virtualMcpId:J,branch:G}),H=await IF1(Q,G),F=VF1(H,X),U=qz8({userId:F,projectRef:W}),N=K.metadata??null,B=await TL5($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:X,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:W,virtualMcpMetadata:N,connectionIds:K.connections?.map((D)=>D.connection_id)??[],runtime:B}),Z();let O;try{O=await rY(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:X,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:W,virtualMcpMetadata:N,connectionIds:K.connections?.map((D)=>D.connection_id)??[],runtime:B}),Z()});Hy0=new Map;W9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};VP8=["clone","install","start"]});function CP8($,Z,Q){let X=Xq1.get($);if(!X)X={pending:null,running:!1},Xq1.set($,X);if(!X.pending)X.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=X.pending;Y.deps=Z;for(let[G,K]of Object.entries(Q.set??{}))Y.set.set(G,K),Y.del.delete(G);for(let G of Q.delete??[])Y.del.add(G),Y.set.delete(G);let J=new Promise((G,K)=>{Y.resolvers.push(G),Y.rejecters.push(K)});if(!X.running)IL5($,X);return J}async function IL5($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let X=await VL5(Q);for(let Y of Q.resolvers)Y(X)}catch(X){for(let Y of Q.rejecters)Y(X)}}}finally{if(Z.running=!1,!Z.pending)Xq1.delete($)}}async function VL5($){let{client:Z,branch:Q,packagePath:X}=$.deps,Y=new Map;for(let J=0;;J++){let G=await Et(Z,Q),K=await Z.listDecofileEntries(G,X),W=tR1(K,X),H=[],F=new Map(W.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=oR1(W,N),D=`${JSON.stringify(B,null,2)}
|
|
5759
|
-
`;await LP8(Z.repo,D);let w=O[0]??`${Xy0(X)}/${lR1(N)}.json`;H.push({path:w,content:D});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:D});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 oR1(W,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=X?`${X}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(K.some((N)=>N.type==="blob"&&N.path===U)){let N=await OP8(Z,F.values(),Y),{decofile:B,skipped:O}=n90(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:uH(Z.repo),branch:Q,packagePath:X,blocks:O.map((D)=>D.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:kL5($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof Z5)||J>=ML5-1)throw N;await S$(wQ(2000,200,J,2,0.5))}}}function kL5($){let Z=(Y)=>{let J=Y.slice(0,3).join(", ");return Y.length>3?`${J} (+${Y.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 X=`chore(decofile): ${Q.join("; ")}`;return aH1(X,$.deps.coAuthor)}var ML5=3,Xq1;var _P8=L(()=>{VV0();rb0();V6();w8();Q7();Yy0();Xq1=new Map});import{createHmac as vP8,randomBytes as SL5,timingSafeEqual as CL5}from"crypto";function xP8(){if(Uy0)return Uy0;let $;try{let Z=T0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Uy0=$?Buffer.from($):SL5(32),Uy0}function Yq1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+_L5)/1000)},X=Buffer.from(JSON.stringify(Q)).toString("base64url"),Y=vP8("sha256",xP8()).update(X).digest("base64url");return`${X}.${Y}`}function fP8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let X=$.slice(0,Q),Y=Buffer.from($.slice(Q+1)),J=Buffer.from(vP8("sha256",xP8()).update(X).digest("base64url"));if(Y.length!==J.length||!CL5(Y,J))return!1;let G;try{G=JSON.parse(Buffer.from(X,"base64url").toString())}catch{return!1}let K=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>=K}var _L5=21600000,Uy0=null;var bP8=L(()=>{W$()});function Ny0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function vL5($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let X=Ny0(Q)?.__resolveType;if(typeof X==="string"&&X)return X}return"blog/loaders/Blogpost.ts"}function yP8($){let Z;try{Z=Ny0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=vL5(Z),X={...Z},Y=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let K=Ny0(G),W=K&&Ny0(K.post);if(!W)continue;if(W.status==="archived")continue;if(typeof W.slug!=="string"||!W.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(X,F))continue;X[F]={name:F,__resolveType:Q,["post"]:{...W,status:"published"}},Y++}return Y>0?JSON.stringify(X):$}import{z as Pt}from"zod";function fL5($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&xL5.test($)}function cP8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $Z0($){let Z=$.get("decofileScope");return Oi($.var.studioContext,Z.organizationId,Z.githubRepo)}function ZZ0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof Z5)return $.json({error:Q},409);let X=$W(Z);if(X!==null){let Y=X===404?404:X===409||X===422?409:502;return $.json({error:Q},Y)}return $.json({error:Q},500)}function mP8(){let $=new Y1;return $.use("/:virtualMcpId/:branch",lP8),$.use("/:virtualMcpId/:branch/*",lP8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await $Z0(Z),Y=await DP8(X,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(yP8(Y.decofile),200,{...J,"content-type":"application/json"});let G=Yq1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(cP8(Z))},"decofile":${Y.decofile}}`,200,{...J,"content-type":"application/json"})}catch(X){return ZZ0(Z,X)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),X=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await $Z0(Z),J=await Y.readFileAtRef(Q.branch,X);if(J===null){let G=await Y.getDefaultBranch();if(G!==Q.branch)J=await Y.readFileAtRef(G,X)}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(Y){return ZZ0(Z,Y)}}),$.patch("/:virtualMcpId/:branch",yL5,async(Z)=>{let Q=Z.get("decofileScope"),X=Z.var.studioContext,Y=gL5.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let J=Y.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{ab0(G)}catch(K){let W=K instanceof Error?K.message:String(K);return Z.json({error:W},400)}for(let[G,K]of Object.entries(J.set??{})){if(typeof K!=="object"||K===null||Array.isArray(K))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(uR1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $Z0(Z),K=await CP8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Ot(X)},J),W=Yq1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:K,token:W,apiHost:cP8(Z)})}catch(G){return ZZ0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await $Z0(Z),Y=await X.getDefaultBranch();if(Y===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 X.mergeBranches(Y,Q.branch,J)}catch(K){if($W(K)!==409)throw K;await Wy0(X,Q.branch,Y),G=await X.mergeBranches(Y,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if($W(G)===409)return Z.json({error:"merge-conflict"},409);if($W(G)===405){let W=await X.findOpenChangeRequest(Y,Q.branch)??await X.createChangeRequest({base:Y,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.url})}throw G}}catch(X){return ZZ0(Z,X)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await $Z0(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},K]=await Promise.all([X.compare(Y,Q.branch),X.getBranch(Q.branch)]);return Z.json({baseBranch:Y,aheadBy:J,behindBy:G,lastCommitAt:K?.committedAt??null})}catch(J){if($W(J)===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(X){return ZZ0(Z,X)}}),$}var xL5,gP8=500,hP8=1048576,uP8=1024,bL5=8388608,yL5,gL5,lP8;var dP8=L(()=>{mk0();rb0();U8();qW();SR1();ob0();$q1();Q7();_P8();bP8();rR1();Yy0();iU();xL5=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;yL5=f5({maxSize:bL5,onError:($)=>$.json({error:"Payload too large"},413)}),gL5=Pt.object({set:Pt.record(Pt.string(),Pt.unknown()).optional(),delete:Pt.array(Pt.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)<=gP8,{message:`Patch cannot touch more than ${gP8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=hP8),{message:`Each block must be at most ${hP8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=uP8),{message:`Each block key must be at most ${uP8} characters`}),lP8=tb0(async($,Z)=>{let Q=$.var.studioContext,X=Q.organization;if(!X)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!fL5(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||!fP8(B,{organizationId:X.id,virtualMcpId:Y,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await dK(Q,X.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let K=await Q.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let W=K.metadata??null;if(!ei(W))return $.json({error:"Project has no preview server configured"},404);let F=K.connections?.map((B)=>B.connection_id)??[],U=s90(W,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=W?.runtime;return $.set("decofileScope",{organizationId:X.id,virtualMcpId:Y,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var iP8=($)=>{let Z=new Y1;if(Z.use("*",pn),Z.use("*",PD8),Z.route("/",Xb0()),Z.route("/",Xw8()),Z.route("/",mD8()),Z.route("/",Nz8()),Z.route("/",Yz8()),Z.route("/",Fz8()),Z.route("/",Gz8()),Z.route("/",ib0()),Z.route("/tools",Ez8()),Z.route("/",Dz8()),Z.route("/",bE8({kvStorage:$.kvStorage})),Z.route("/",xE8()),Z.route("/fs",oE8({getConnection:$.getNatsConnection})),Z.route("/sandbox",kP8()),Z.route("/decofile",mP8()),Z.route("/",Zz8()),Z.route("/",rE8()),Z.route("/deco-sites",Jb0()),Z.route("/hosting",_D8()),Z.route("/monitor",hD8()),Z.route("/sso",sf0()),Z.route("/",pb0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ID8()),$.mountDevAssets)Z.route("/dev-assets",Hb0({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("/",_B8()),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",eE8()),Z.route("/mcp",rC0()),Z.route("/mcp/self",lb0()),Z.route("/mcp",$_0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var pP8=L(()=>{U8();TD8();lf0();VD8();rA1();vD8();uD8();Fb0();Yh();pA1();Q21();fE8();yE8();aE8();sE8();u60();uA1();Z_0();PR1();$z8();Qz8();Jz8();Kz8();RR1();Bz8();wz8();qR1();zz8();MR1();sC0();SP8();dP8()});function hL5($){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 uL5=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},nP8=()=>{let $=new Y1;return $.use("*",uL5),$.get("/",async(Z)=>{let Q=T0(),X=Q.decoSupabaseUrl,Y=Q.decoSupabaseServiceKey;if(!X||!Y)return Z.json({apps:[]});try{let J=await DG(X,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:hL5(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var tP8=L(()=>{U8();W$();nx0()});import{z as b1}from"zod";function sN($,Z="invalid_request_error",Q=null,X=null){return{error:{message:$,type:Z,param:Q,code:X}}}function aL5($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),X=$.substring(Z+1);if(!Q||!X)return null;return{credentialId:Q,modelId:X}}function rL5($,Z,Q){try{return JSON.parse($)}catch{throw new rP8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function sL5($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let X of Q.tool_calls)Z[X.id]=X.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((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:rL5(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let X=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:X,output:{type:"text",value:Q.content}}]}}})}function eL5($){let Z=$.map((Q)=>{let X=Q.function.parameters?kU(Q.function.parameters):kU({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:X})]});return Object.fromEntries(Z)}function $O5($){if(!$)return;return{openai:{response_format:$}}}function ZO5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function oP8($,Z,Q,X,Y,J){let G={model:$,instructions:Z.filter((K)=>K.role==="system"),messages:Z.filter((K)=>K.role!=="system"),tools:Q,temperature:X.temperature,maxOutputTokens:X.max_tokens,topP:X.top_p,frequencyPenalty:X.frequency_penalty,presencePenalty:X.presence_penalty,stopSequences:X.stop?Array.isArray(X.stop)?X.stop:[X.stop]:void 0,abortSignal:J};return Y?{...G,providerOptions:Y}:G}function aP8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var lL5=256,cL5,mL5,dL5,iL5,pL5,nL5,tL5,oL5,rP8,sP8,eP8;var $T8=L(()=>{g4();U8();Lt();FF();cL5=b1.object({type:b1.literal("function"),function:b1.object({name:b1.string(),description:b1.string().optional(),parameters:b1.record(b1.string(),b1.unknown()).optional()})}),mL5=b1.object({id:b1.string(),type:b1.literal("function"),function:b1.object({name:b1.string(),arguments:b1.string()})}),dL5=b1.discriminatedUnion("role",[b1.object({role:b1.literal("system"),content:b1.string(),name:b1.string().optional()}),b1.object({role:b1.literal("user"),content:b1.union([b1.string(),b1.array(b1.union([b1.object({type:b1.literal("text"),text:b1.string()}),b1.object({type:b1.literal("image_url"),image_url:b1.object({url:b1.string(),detail:b1.string().optional()})})]))]),name:b1.string().optional()}),b1.object({role:b1.literal("assistant"),content:b1.string().nullable().optional(),name:b1.string().optional(),tool_calls:b1.array(mL5).optional()}),b1.object({role:b1.literal("tool"),content:b1.string(),tool_call_id:b1.string()})]),iL5=b1.object({type:b1.literal("text")}),pL5=b1.object({type:b1.literal("json_object")}),nL5=b1.object({type:b1.literal("json_schema"),json_schema:b1.object({name:b1.string(),description:b1.string().optional(),schema:b1.record(b1.string(),b1.unknown()),strict:b1.boolean().optional()})}),tL5=b1.union([iL5,pL5,nL5]),oL5=b1.object({model:b1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:b1.array(dL5),stream:b1.boolean().optional().default(!1),temperature:b1.number().min(0).max(2).optional(),max_tokens:b1.number().positive().optional(),top_p:b1.number().min(0).max(1).optional(),frequency_penalty:b1.number().min(-2).max(2).optional(),presence_penalty:b1.number().min(-2).max(2).optional(),stop:b1.union([b1.string(),b1.array(b1.string())]).optional(),tools:b1.array(cL5).optional(),tool_choice:b1.union([b1.literal("auto"),b1.literal("none"),b1.literal("required"),b1.object({type:b1.literal("function"),function:b1.object({name:b1.string()})})]).optional(),response_format:tL5.optional(),user:b1.string().optional()});rP8=class rP8 extends Error{constructor($){super($);this.name="MessageConversionError"}};sP8=new Y1;sP8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(sN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(sN("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(sN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let X=await $.req.json(),Y=oL5.safeParse(X);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(sN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=Y.data,G=aL5(J.model);if(!G)return $.json(sN("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:K}=G,{modelId:W}=G;if(!K){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>gT(E.providerId));if(!j)return $.json(sN("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);K=j.id}let H;try{H=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(sN(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(W),U=sL5(J.messages),N=J.tools?eL5(J.tools):void 0,B=$O5(J.response_format),O=ZO5(),D=Math.floor(Date.now()/1000);if(J.stream)return oO($,async(w)=>{let j=oP8(F,U,N,J,B,$.req.raw.signal);try{let E=ri(j),z=!1,A=0,P="",T=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,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:D,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>=lL5)await T()}else if(q.type==="tool-call"){await T();let f=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await T(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:J.model,choices:[{index:0,delta:{},finish_reason:aP8(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 T(),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=oP8(F,U,N,J,B,$.req.raw.signal),j=await wN(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:D,model:J.model,choices:[{index:0,message:E,finish_reason:aP8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(X){let Y=X;if(Y.name==="AbortError")return $.json(sN("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(sN(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(sN(Y.message,"server_error"),500)}});eP8=sP8});function QO5($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function ZT8(){let $=new Y1;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"),X=t0(Q);if(!X)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!Z7(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","=",X).execute(),K=[];for(let H of G){if(!H.slug||_9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(l$0(U)!==J)continue;if(!QO5(U.metadata))continue;K.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let W={matches:K};return Z.json(W)}),$}var QT8=L(()=>{U8();aK()});function YO5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XO5}}var XT8,XO5="https://ph.studio.decocms.com",YT8;var JT8=L(()=>{U8();N00();Yg();D9();W$();MA1();x11();XT8=new Y1;XT8.get("/",($)=>{let Z={version:A30.version,theme:BE$(),...TH().logo&&{logo:TH().logo},...RO()&&{internalUrl:_6$()},...T0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!T0().firecrawlApiKey,hostingEnabled:!!T0().controlplaneRestUrl&&!!T0().controlplaneServiceToken,hostingControlPlaneGa:T0().hostingControlPlaneGa,monitorEnabled:!!T0().clickhouseAnalyticsUrl&&!!T0().clickhouseAnalyticsPassword,monitorGa:T0().monitorGa,plansEnabled:T0().plansEnabled,auth:TO8(),posthog:YO5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:oD()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});YT8=XT8});function jh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function Jq1($){return(jh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function GT8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(jh($))}&sz=${Z}`}function JO5($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let X=Q.slice(0,Z-1),Y=X.lastIndexOf(" ");return`${(Y>Z*0.6?X.slice(0,Y):X).trimEnd()}\u2026`}function KT8($){let{brand:Z,domain:Q,score:X}=$,Y=typeof X==="number"?`${Z} commerce report \u2014 ${Math.round(X)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=JO5(`How does ${Q} really perform? See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:Y,description:J}}import{z as E$}from"zod";var GO5,WT8;var HT8=L(()=>{GO5=E$.object({check_id:E$.string(),title:E$.string(),description:E$.string().optional(),impact:E$.string().optional(),why:E$.string().optional(),category:E$.string(),severity:E$.string(),value_band:E$.string().optional(),value_driver:E$.string().optional(),controllability:E$.string().optional(),pages:E$.array(E$.string()),tasks:E$.array(E$.string()),evidence:E$.string(),sample_scope:E$.string().optional(),sources:E$.array(E$.string())}),WT8=E$.object({domain:E$.string(),brand:E$.string(),favicon:E$.string().optional(),scanned_at:E$.string().nullable(),lang:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),totals:E$.object({measured:E$.number(),registry_total:E$.number(),passed:E$.number(),failed:E$.number(),blocked:E$.number()}),buckets:E$.array(E$.object({id:E$.enum(["critical","important","worth"]),label:E$.string(),items:E$.array(GO5)})),passing:E$.object({count:E$.number(),items:E$.array(E$.object({check_id:E$.string(),title:E$.string()}))}),not_measured:E$.object({count:E$.number(),groups:E$.array(E$.object({reason:E$.string(),label:E$.string(),count:E$.number(),checks:E$.array(E$.string())}))}),categories:E$.array(E$.object({key:E$.string(),label:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),pass:E$.number(),fail:E$.number()})),screenshots:E$.array(E$.object({url:E$.string(),page_type:E$.string().optional(),viewport:E$.enum(["desktop","mobile"]),image_url:E$.string()}))})});function FT8($,Z,Q){let X=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${gH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${X}`}async function By0($,Z={}){let Q=await fetch(FT8($,"",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 WT8.parse(await Q.json())}async function UT8($,Z={}){let Q=await fetch(FT8($,".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 Gq1=L(()=>{HT8();$E()});import{join as NT8}from"path";async function WO5($){try{let Z=await By0($,{signal:AbortSignal.timeout(KO5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||Jq1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function zG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function HO5($,Z){let Q=jh($),X=Z?.brand?.trim()||Jq1(Q),Y=GT8(Q,128),G=`${(T0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:K,description:W}=KT8({brand:X,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${X} commerce report by decocms`;return[`<title>${zG(K)}</title>`,`<meta name="description" content="${zG(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${zG(K)}" />`,`<meta property="og:description" content="${zG(W)}" />`,`<meta property="og:url" content="${zG(G)}" />`,`<meta property="og:image" content="${zG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${zG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${zG(K)}" />`,`<meta name="twitter:description" content="${zG(W)}" />`,`<meta name="twitter:image" content="${zG(H)}" />`,`<meta name="twitter:image:alt" content="${zG(F)}" />`,`<link rel="canonical" href="${zG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${zG(G)}.md" />`,`<link rel="icon" href="${zG(Y)}" sizes="any" />`].join(`
|
|
5759
|
+
`;await LP8(Z.repo,D);let w=O[0]??`${Xy0(X)}/${lR1(N)}.json`;H.push({path:w,content:D});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:D});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 oR1(W,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=X?`${X}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(K.some((N)=>N.type==="blob"&&N.path===U)){let N=await OP8(Z,F.values(),Y),{decofile:B,skipped:O}=n90(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:uH(Z.repo),branch:Q,packagePath:X,blocks:O.map((D)=>D.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:kL5($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof Z5)||J>=ML5-1)throw N;await S$(wQ(2000,200,J,2,0.5))}}}function kL5($){let Z=(Y)=>{let J=Y.slice(0,3).join(", ");return Y.length>3?`${J} (+${Y.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 X=`chore(decofile): ${Q.join("; ")}`;return aH1(X,$.deps.coAuthor)}var ML5=3,Xq1;var _P8=L(()=>{VV0();rb0();V6();w8();Q7();Yy0();Xq1=new Map});import{createHmac as vP8,randomBytes as SL5,timingSafeEqual as CL5}from"crypto";function xP8(){if(Uy0)return Uy0;let $;try{let Z=T0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Uy0=$?Buffer.from($):SL5(32),Uy0}function Yq1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+_L5)/1000)},X=Buffer.from(JSON.stringify(Q)).toString("base64url"),Y=vP8("sha256",xP8()).update(X).digest("base64url");return`${X}.${Y}`}function fP8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let X=$.slice(0,Q),Y=Buffer.from($.slice(Q+1)),J=Buffer.from(vP8("sha256",xP8()).update(X).digest("base64url"));if(Y.length!==J.length||!CL5(Y,J))return!1;let G;try{G=JSON.parse(Buffer.from(X,"base64url").toString())}catch{return!1}let K=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>=K}var _L5=21600000,Uy0=null;var bP8=L(()=>{W$()});function Ny0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function vL5($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let X=Ny0(Q)?.__resolveType;if(typeof X==="string"&&X)return X}return"blog/loaders/Blogpost.ts"}function yP8($){let Z;try{Z=Ny0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=vL5(Z),X={...Z},Y=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let K=Ny0(G),W=K&&Ny0(K.post);if(!W)continue;if(W.status==="archived")continue;if(typeof W.slug!=="string"||!W.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(X,F))continue;X[F]={name:F,__resolveType:Q,["post"]:{...W,status:"published"}},Y++}return Y>0?JSON.stringify(X):$}import{z as Pt}from"zod";function fL5($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&xL5.test($)}function cP8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $Z0($){let Z=$.get("decofileScope");return Oi($.var.studioContext,Z.organizationId,Z.githubRepo)}function ZZ0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof Z5)return $.json({error:Q},409);let X=$W(Z);if(X!==null){let Y=X===404?404:X===409||X===422?409:502;return $.json({error:Q},Y)}return $.json({error:Q},500)}function mP8(){let $=new Y1;return $.use("/:virtualMcpId/:branch",lP8),$.use("/:virtualMcpId/:branch/*",lP8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await $Z0(Z),Y=await DP8(X,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(yP8(Y.decofile),200,{...J,"content-type":"application/json"});let G=Yq1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(cP8(Z))},"decofile":${Y.decofile}}`,200,{...J,"content-type":"application/json"})}catch(X){return ZZ0(Z,X)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),X=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await $Z0(Z),J=await Y.readFileAtRef(Q.branch,X);if(J===null){let G=await Y.getDefaultBranch();if(G!==Q.branch)J=await Y.readFileAtRef(G,X)}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(Y){return ZZ0(Z,Y)}}),$.patch("/:virtualMcpId/:branch",yL5,async(Z)=>{let Q=Z.get("decofileScope"),X=Z.var.studioContext,Y=gL5.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let J=Y.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{ab0(G)}catch(K){let W=K instanceof Error?K.message:String(K);return Z.json({error:W},400)}for(let[G,K]of Object.entries(J.set??{})){if(typeof K!=="object"||K===null||Array.isArray(K))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(uR1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $Z0(Z),K=await CP8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Ot(X)},J),W=Yq1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:K,token:W,apiHost:cP8(Z)})}catch(G){return ZZ0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await $Z0(Z),Y=await X.getDefaultBranch();if(Y===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 X.mergeBranches(Y,Q.branch,J)}catch(K){if($W(K)!==409)throw K;await Wy0(X,Q.branch,Y),G=await X.mergeBranches(Y,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if($W(G)===409)return Z.json({error:"merge-conflict"},409);if($W(G)===405){let W=await X.findOpenChangeRequest(Y,Q.branch)??await X.createChangeRequest({base:Y,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:W.number,url:W.url})}throw G}}catch(X){return ZZ0(Z,X)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let X=await $Z0(Z),Y=await X.getDefaultBranch();if(Y===Q.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},K]=await Promise.all([X.compare(Y,Q.branch),X.getBranch(Q.branch)]);return Z.json({baseBranch:Y,aheadBy:J,behindBy:G,lastCommitAt:K?.committedAt??null})}catch(J){if($W(J)===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(X){return ZZ0(Z,X)}}),$}var xL5,gP8=500,hP8=1048576,uP8=1024,bL5=8388608,yL5,gL5,lP8;var dP8=L(()=>{mk0();rb0();U8();qW();SR1();ob0();$q1();Q7();_P8();bP8();rR1();Yy0();iU();xL5=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;yL5=f5({maxSize:bL5,onError:($)=>$.json({error:"Payload too large"},413)}),gL5=Pt.object({set:Pt.record(Pt.string(),Pt.unknown()).optional(),delete:Pt.array(Pt.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)<=gP8,{message:`Patch cannot touch more than ${gP8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=hP8),{message:`Each block must be at most ${hP8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=uP8),{message:`Each block key must be at most ${uP8} characters`}),lP8=tb0(async($,Z)=>{let Q=$.var.studioContext,X=Q.organization;if(!X)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Y||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!fL5(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||!fP8(B,{organizationId:X.id,virtualMcpId:Y,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await dK(Q,X.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let K=await Q.storage.virtualMcps.findById(Y);if(!K||K.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let W=K.metadata??null;if(!ei(W))return $.json({error:"Project has no preview server configured"},404);let F=K.connections?.map((B)=>B.connection_id)??[],U=s90(W,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=W?.runtime;return $.set("decofileScope",{organizationId:X.id,virtualMcpId:Y,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var iP8=($)=>{let Z=new Y1;if(Z.use("*",pn),Z.use("*",PD8),Z.route("/",Xb0()),Z.route("/",Xw8()),Z.route("/",mD8()),Z.route("/",Nz8()),Z.route("/",Yz8()),Z.route("/",Fz8()),Z.route("/",Gz8()),Z.route("/",ib0()),Z.route("/tools",Ez8()),Z.route("/",Dz8()),Z.route("/",bE8({kvStorage:$.kvStorage})),Z.route("/",xE8()),Z.route("/fs",oE8({getConnection:$.getNatsConnection})),Z.route("/sandbox",kP8()),Z.route("/decofile",mP8()),Z.route("/",Zz8()),Z.route("/",rE8()),Z.route("/deco-sites",Jb0()),Z.route("/hosting",_D8()),Z.route("/monitor",hD8()),Z.route("/sso",sf0()),Z.route("/",pb0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ID8()),$.mountDevAssets)Z.route("/dev-assets",Hb0({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("/",_B8()),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",eE8()),Z.route("/mcp",rC0()),Z.route("/mcp/self",lb0()),Z.route("/mcp",$_0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var pP8=L(()=>{U8();TD8();lf0();VD8();rA1();vD8();uD8();Fb0();Yh();pA1();Q21();fE8();yE8();aE8();sE8();u60();uA1();Z_0();PR1();$z8();Qz8();Jz8();Kz8();RR1();Bz8();wz8();qR1();zz8();MR1();sC0();SP8();dP8()});function hL5($){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 uL5=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},nP8=()=>{let $=new Y1;return $.use("*",uL5),$.get("/",async(Z)=>{let Q=T0(),X=Q.decoSupabaseUrl,Y=Q.decoSupabaseServiceKey;if(!X||!Y)return Z.json({apps:[]});try{let J=await DG(X,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:hL5(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var tP8=L(()=>{U8();W$();nx0()});import{z as b1}from"zod";function sN($,Z="invalid_request_error",Q=null,X=null){return{error:{message:$,type:Z,param:Q,code:X}}}function aL5($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),X=$.substring(Z+1);if(!Q||!X)return null;return{credentialId:Q,modelId:X}}function rL5($,Z,Q){try{return JSON.parse($)}catch{throw new rP8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function sL5($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let X of Q.tool_calls)Z[X.id]=X.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((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:rL5(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let X=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:X,output:{type:"text",value:Q.content}}]}}})}function eL5($){let Z=$.map((Q)=>{let X=Q.function.parameters?kU(Q.function.parameters):kU({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:X})]});return Object.fromEntries(Z)}function $O5($){if(!$)return;return{openai:{response_format:$}}}function ZO5(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function oP8($,Z,Q,X,Y,J){let G={model:$,instructions:Z.filter((K)=>K.role==="system"),messages:Z.filter((K)=>K.role!=="system"),tools:Q,temperature:X.temperature,maxOutputTokens:X.max_tokens,topP:X.top_p,frequencyPenalty:X.frequency_penalty,presencePenalty:X.presence_penalty,stopSequences:X.stop?Array.isArray(X.stop)?X.stop:[X.stop]:void 0,abortSignal:J};return Y?{...G,providerOptions:Y}:G}function aP8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var lL5=256,cL5,mL5,dL5,iL5,pL5,nL5,tL5,oL5,rP8,sP8,eP8;var $T8=L(()=>{g4();U8();Lt();FF();cL5=b1.object({type:b1.literal("function"),function:b1.object({name:b1.string(),description:b1.string().optional(),parameters:b1.record(b1.string(),b1.unknown()).optional()})}),mL5=b1.object({id:b1.string(),type:b1.literal("function"),function:b1.object({name:b1.string(),arguments:b1.string()})}),dL5=b1.discriminatedUnion("role",[b1.object({role:b1.literal("system"),content:b1.string(),name:b1.string().optional()}),b1.object({role:b1.literal("user"),content:b1.union([b1.string(),b1.array(b1.union([b1.object({type:b1.literal("text"),text:b1.string()}),b1.object({type:b1.literal("image_url"),image_url:b1.object({url:b1.string(),detail:b1.string().optional()})})]))]),name:b1.string().optional()}),b1.object({role:b1.literal("assistant"),content:b1.string().nullable().optional(),name:b1.string().optional(),tool_calls:b1.array(mL5).optional()}),b1.object({role:b1.literal("tool"),content:b1.string(),tool_call_id:b1.string()})]),iL5=b1.object({type:b1.literal("text")}),pL5=b1.object({type:b1.literal("json_object")}),nL5=b1.object({type:b1.literal("json_schema"),json_schema:b1.object({name:b1.string(),description:b1.string().optional(),schema:b1.record(b1.string(),b1.unknown()),strict:b1.boolean().optional()})}),tL5=b1.union([iL5,pL5,nL5]),oL5=b1.object({model:b1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:b1.array(dL5),stream:b1.boolean().optional().default(!1),temperature:b1.number().min(0).max(2).optional(),max_tokens:b1.number().positive().optional(),top_p:b1.number().min(0).max(1).optional(),frequency_penalty:b1.number().min(-2).max(2).optional(),presence_penalty:b1.number().min(-2).max(2).optional(),stop:b1.union([b1.string(),b1.array(b1.string())]).optional(),tools:b1.array(cL5).optional(),tool_choice:b1.union([b1.literal("auto"),b1.literal("none"),b1.literal("required"),b1.object({type:b1.literal("function"),function:b1.object({name:b1.string()})})]).optional(),response_format:tL5.optional(),user:b1.string().optional()});rP8=class rP8 extends Error{constructor($){super($);this.name="MessageConversionError"}};sP8=new Y1;sP8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(sN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(sN("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(sN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let X=await $.req.json(),Y=oL5.safeParse(X);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(sN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=Y.data,G=aL5(J.model);if(!G)return $.json(sN("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:K}=G,{modelId:W}=G;if(!K){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>gT(E.providerId));if(!j)return $.json(sN("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);K=j.id}let H;try{H=await Z.aiProviders.activate(K,Z.organization.id)}catch{return $.json(sN(`AI provider credential not found or inaccessible: ${K}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(W),U=sL5(J.messages),N=J.tools?eL5(J.tools):void 0,B=$O5(J.response_format),O=ZO5(),D=Math.floor(Date.now()/1000);if(J.stream)return oO($,async(w)=>{let j=oP8(F,U,N,J,B,$.req.raw.signal);try{let E=ri(j),z=!1,A=0,P="",T=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,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:D,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>=lL5)await T()}else if(q.type==="tool-call"){await T();let f=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await T(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:J.model,choices:[{index:0,delta:{},finish_reason:aP8(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 T(),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=oP8(F,U,N,J,B,$.req.raw.signal),j=await wN(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:D,model:J.model,choices:[{index:0,message:E,finish_reason:aP8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(X){let Y=X;if(Y.name==="AbortError")return $.json(sN("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(sN(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(sN(Y.message,"server_error"),500)}});eP8=sP8});function QO5($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function ZT8(){let $=new Y1;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"),X=t0(Q);if(!X)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!Z7(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","=",X).execute(),K=[];for(let H of G){if(!H.slug||_9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(l$0(U)!==J)continue;if(!QO5(U.metadata))continue;K.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let W={matches:K};return Z.json(W)}),$}var QT8=L(()=>{U8();aK()});function YO5(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XO5}}var XT8,XO5="https://ph.studio.decocms.com",YT8;var JT8=L(()=>{U8();N00();Yg();D9();W$();MA1();x11();XT8=new Y1;XT8.get("/",($)=>{let Z={version:A30.version,theme:BE$(),...TH().logo&&{logo:TH().logo},...RO()&&{internalUrl:_6$()},...T0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!T0().firecrawlApiKey,hostingEnabled:!!T0().controlplaneRestUrl&&!!T0().controlplaneServiceToken,hostingControlPlaneGa:T0().hostingControlPlaneGa,monitorEnabled:!!T0().clickhouseAnalyticsUrl&&!!T0().clickhouseAnalyticsPassword,monitorGa:T0().monitorGa,plansEnabled:T0().plansEnabled,auth:TO8(),posthog:YO5(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:oD()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});YT8=XT8});function jh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function Jq1($){return(jh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function GT8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(jh($))}&sz=${Z}`}function JO5($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let X=Q.slice(0,Z-1),Y=X.lastIndexOf(" ");return`${(Y>Z*0.6?X.slice(0,Y):X).trimEnd()}\u2026`}function KT8($){let{brand:Z,domain:Q,score:X}=$,Y=typeof X==="number"?`${Z} commerce report \u2014 ${Math.round(X)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=JO5(`How does ${Q} really perform? See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:Y,description:J}}import{z as E$}from"zod";var GO5,WT8;var HT8=L(()=>{GO5=E$.object({check_id:E$.string(),title:E$.string(),description:E$.string().optional(),impact:E$.string().optional(),why:E$.string().optional(),category:E$.string(),severity:E$.string(),value_band:E$.string().optional(),value_driver:E$.string().optional(),controllability:E$.string().optional(),pages:E$.array(E$.string()),tasks:E$.array(E$.string()),evidence:E$.string(),sample_scope:E$.string().optional(),sources:E$.array(E$.string())}),WT8=E$.object({domain:E$.string(),brand:E$.string(),favicon:E$.string().optional(),scanned_at:E$.string().nullable(),lang:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),totals:E$.object({measured:E$.number(),registry_total:E$.number(),passed:E$.number(),failed:E$.number(),blocked:E$.number()}),buckets:E$.array(E$.object({id:E$.enum(["critical","important","worth"]),label:E$.string(),items:E$.array(GO5)})),passing:E$.object({count:E$.number(),items:E$.array(E$.object({check_id:E$.string(),title:E$.string()}))}),not_measured:E$.object({count:E$.number(),groups:E$.array(E$.object({reason:E$.string(),label:E$.string(),count:E$.number(),checks:E$.array(E$.string())}))}),categories:E$.array(E$.object({key:E$.string(),label:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),pass:E$.number(),fail:E$.number()})),screenshots:E$.array(E$.object({url:E$.string(),page_type:E$.string().optional(),viewport:E$.enum(["desktop","mobile"]),image_url:E$.string()}))})});function FT8($,Z,Q){let X=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${gH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${X}`}async function By0($,Z={}){let Q=await fetch(FT8($,"",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 WT8.parse(await Q.json())}async function UT8($,Z={}){let Q=await fetch(FT8($,".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 Gq1=L(()=>{HT8();$E()});import{join as NT8}from"path";async function WO5($){try{let Z=await By0($,{signal:AbortSignal.timeout(KO5)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||Jq1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function zG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function HO5($,Z){let Q=jh($),X=Z?.brand?.trim()||Jq1(Q),Y=GT8(Q,128),G=`${(T0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:K,description:W}=KT8({brand:X,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${X} commerce report by decocms`;return[`<title>${zG(K)}</title>`,`<meta name="description" content="${zG(W)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${zG(K)}" />`,`<meta property="og:description" content="${zG(W)}" />`,`<meta property="og:url" content="${zG(G)}" />`,`<meta property="og:image" content="${zG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${zG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${zG(K)}" />`,`<meta name="twitter:description" content="${zG(W)}" />`,`<meta name="twitter:image" content="${zG(H)}" />`,`<meta name="twitter:image:alt" content="${zG(F)}" />`,`<link rel="canonical" href="${zG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${zG(G)}.md" />`,`<link rel="icon" href="${zG(Y)}" sizes="any" />`].join(`
|
|
5760
5760
|
`)}function FO5($,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}
|
|
5761
|
-
</head>`)}function BT8($){let Z=new Y1;return Z.get("/:domain/og.png",async(Q)=>{let X=jh(Q.req.param("domain")),Y=async()=>{let J=$?Bun.file(NT8($,"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(`${gH({})}/api/v2/public/diagnostics/${encodeURIComponent(X)}/og.png`,{signal:AbortSignal.timeout(UO5)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return Y();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let X=jh(Q.req.param("file").replace(/\.md$/,""));try{let Y=await UT8(X,{signal:AbortSignal.timeout(NO5)});if(Y===null)return Q.text("Report not found",404);return Q.body(Y,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 X=Q.req.param("domain"),Y=$?NT8($,"index.html"):null,J=Y?Bun.file(Y):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let K=await WO5(jh(X)),W=HO5(X,K);return Q.html(FO5(G,W),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var KO5=2500,UO5=1e4,NO5=1e4;var LT8=L(()=>{U8();$E();Gq1();W$()});function Ly0($,Z){return fetch(`${gH({})}${$}`,Z)}async function BO5($,Z){let Q=await By0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function OO5($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",X=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:X}}var LO5,rO,OT8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},DT8;var wT8=L(()=>{U8();w3();$E();Gq1();LO5=new Set(["complete","errored","terminated","unknown"]);rO=new Y1;rO.use("*",async($,Z)=>{let Q=await b8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});rO.use("/link-token/*",OT8);rO.use("/suggest",OT8);rO.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 BO5(Z,Q))}catch{return $.json({error:"report read failed"},502)}});rO.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:X,distinctId:Y}=OO5(Q);if(!X)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await Ly0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${P2({})}`},body:JSON.stringify({url:X,...J?{email:J}:{},distinct_id:Y})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let K=await G.json(),W=K.blocked?{state:"blocked"}:K.status==="fresh"?{state:"fresh"}:K.mode==="sync"?{state:"sync"}:{state:"running",id:K.id??null};return $.json(W)}catch{return $.json({error:"run failed"},502)}});rO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await Ly0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${P2({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let Y=(await Q.json()).status??"unknown",J={done:LO5.has(Y),status:Y};return $.json(J)}catch{return $.json({error:"status failed"},502)}});rO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await Ly0(`/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)}});rO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await Ly0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let X=await Q.json();return $.json({suggestions:Array.isArray(X.suggestions)?X.suggestions:[]})}catch{return $.json({suggestions:[]})}});DT8=rO});var DO5=1048576,Kq1;var jT8=L(()=>{U8();qW();W$();UA1();Kq1=new Y1;Kq1.post("/webhook",f5({maxSize:DO5,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=T0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!fL8(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=bL8(Q);if(!Y)return $.json({error:"invalid payload"},400);let J=await yL8(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as wO5}from"crypto";function zO5($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let X=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==X.length)return!1;return wO5(Buffer.from(Y),Buffer.from(X))}function PO5($,Z){let Q=Z,X=Q?.repository?.name,Y=Q?.repository?.owner?.login;if(typeof X!=="string"||typeof Y!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let K of Array.isArray(G)?G:[]){let W=K?.number;if(typeof W==="number")J.push(W)}}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:Y,repoName:X,number:G}))}function ET8($){let Z=new Y1;return Z.post("/webhook",f5({maxSize:jO5,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let X=process.env.GITHUB_WEBHOOK_SECRET;if(!X)return Q.json({error:"github webhook not configured"},503);let Y=await Q.req.text();if(!zO5(Y,Q.req.header("x-hub-signature-256"),X))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!EO5.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(Y)}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 TF1())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let K=PO5(J??"",G);if(K.length===0)return Q.json({ok:!0,ignored:"no-pr"});let W=await TO5($,K);return Q.json({ok:!0,refreshed:W})}),Z}async function TO5($,Z){let Q=0;for(let X of Z){let Y=$.taskBoard(),J;try{J=await Y.findPrLinks(X)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let K=await Y.getById(G.taskBoardItemId,G.organizationId),W=K?await $.contextFactory()(G.organizationId,K.assignedBy??K.createdBy):null;if(!W)continue;if(await k08(W,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(K){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,K)}}return Q}var jO5=5242880,EO5;var zT8=L(()=>{U8();qW();$F();_7();EO5=new Set(["check_suite","issue_comment"])});function PT8($){let Z=new hO($.db,new mG($.encryptionKey)),Q=new Y1;return Q.get("/attachments/:token",async(X)=>{let Y=ds$(X.req.param("token"));if(!Y)return X.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(Y.organizationId);if(!J)return X.json({error:"Jira is not connected"},404);let K=await new oQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(Y.attachmentId);if(!K.ok||!K.body)return X.json({error:"Jira refused the download"},502);let W=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=K.headers.get(H);if(F)W.set(H,F)}return W.set("cache-control","no-store"),new Response(K.body,{status:200,headers:W})}),Q}var TT8=L(()=>{U8();bT();IN1();Uz()});function AT8($){let Z=new hO($.db,new mG($.encryptionKey));async function Q(Y,J){let G=NF8(J);if(!G)return;let K=await Z.getByWebhookSecret(Y);if(!K?.enabled)return;let W=await FW($.db,K.organizationId);if(!W)return;if(await ax0(W,K,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let X=new Y1;return X.post("/webhook/:secret",f5({maxSize:AO5}),async(Y)=>{let J=Y.req.param("secret");if(!await Z.getByWebhookSecret(J))return Y.json({error:"Unknown webhook"},404);let K;try{K=await Y.req.json()}catch{return Y.json({error:"Body must be JSON"},400)}return Q(J,K).catch((W)=>{console.error("[jira-webhook] trigger failed",W)}),Y.body(null,202)}),X}var AO5=1048576;var RT8=L(()=>{U8();qW();bT();rx0();sy()});import{DBOS as Oy0,SchedulerMode as RO5}from"@dbos-inc/dbos-sdk";function MT8($){Hq1=$}function IT8(){if(!Hq1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return Hq1}function VT8(){let $=IT8();return new hO($.db,new mG($.encryptionKey))}async function IO5($,Z){try{let Q=await VT8().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let X=await FW(IT8().db,Q.organizationId);if(!X)return{integrationId:$,started:0};if((await X.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new oQ(Q.siteUrl,Q.email,Q.apiToken),K=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${qT8}m"`,W=0,H;for(let F=0;F<MO5;F++){let U=await J.searchIssues({jql:K,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=BF8(N,N.changelog?.histories??[],Z);for(let O of B)if(await ax0(X,Q,O)==="started")W++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:W}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function VO5($,Z){let Q=new Date($.getTime()-qT8*60000),X=await Oy0.runStep(()=>VT8().listEnabledIds(),{name:"loadJiraIntegrations"});if(X.length===0)return;let Y=await Promise.all(X.map((J)=>Oy0.runStep(()=>IO5(J,Q),{name:`sweepJira:${J}`})));for(let J of Y)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 kT8(){if(Wq1)return;Wq1=Oy0.registerWorkflow(VO5,{name:"jiraTriggerSweepWorkflow"}),Oy0.registerScheduled(Wq1,{name:"jiraTriggerSweepWorkflow",crontab:qO5,mode:RO5.ExactlyOncePerIntervalWhenActive})}var qO5="7-59/10 * * * *",qT8=35,MO5=5,Hq1=null,Wq1=null;var ST8=L(()=>{bT();sy();Uz();rx0()});function CT8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var _T8,kO5,SO5,vT8;var xT8=L(()=>{U8();PH();Pp();od();_T8=new Y1,kO5=["range","if-none-match","if-modified-since"],SO5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];_T8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(dn($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q$(401,{message:"Authentication required"})}if(!Q)throw new q$(401,{message:"Organization context required"});let X=$.req.path.replace(/^.*\/files\//,"");if(!X)throw new q$(400,{message:"Missing file key"});let Y=await E60(X,Z);if(!Y)throw new q$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&nK()){let W=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!W)throw new q$(500,{message:"Invalid data URL from storage"});let[,H,F]=W,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return CT8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let W of kO5){let H=$.req.header(W);if(H)J.set(W,H)}let G=await fetch(Y,{headers:J});if(G.status===403||G.status===404)throw new q$(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:`,X),new q$(502,{message:"Upstream storage error"});let K=new Headers;for(let W of SO5){let H=G.headers.get(W);if(H)K.set(W,H)}return K.set("Cache-Control","private, max-age=86400"),CT8(K,K.get("content-type")??""),new Response(G.body,{status:G.status,headers:K})});vT8=_T8});var QZ0=b((Eh)=>{var CO5=Eh&&Eh.__createBinding||(Object.create?function($,Z,Q,X){if(X===void 0)X=Q;var Y=Object.getOwnPropertyDescriptor(Z,Q);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,X,Y)}:function($,Z,Q,X){if(X===void 0)X=Q;$[X]=Z[Q]}),_O5=Eh&&Eh.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))CO5(Z,$,Q)};Object.defineProperty(Eh,"__esModule",{value:!0});_O5(uG(),Eh)});var yT8=b((fT8)=>{Object.defineProperty(fT8,"__esModule",{value:!0});fT8.version=void 0;fT8.version="3.4.0"});var uT8=b((eN)=>{var vO5=eN&&eN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(eN,"__esModule",{value:!0});eN.NodeTransport=eN.VERSION=void 0;eN.nodeResolveHost=hO5;var r5=QZ0(),xO5=B0("net"),Fq1=B0("tls"),fO5=B0("path"),gT8=B0("fs"),bO5=vO5(B0("dns")),yO5=yT8();eN.VERSION=yO5.version;var gO5="nats.js";class hT8{socket;version;lang;yields=[];signal=(0,r5.deferred)();closedNotification=(0,r5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=gO5,this.version=eN.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:X}=Q||{};try{if(X===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r5.checkOptions)(Y,Z);let{tls_required:J,tls_available:G}=Y,K=G===!0&&Z.tls!==null;if(!X&&(J||K))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw r5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let J=Y;if(!J)J=new r5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,K=G==="ECONNREFUSED"?new r5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),K}}dial($){let Z=(0,r5.deferred)(),Q,X=(0,xO5.createConnection)($.port,$.hostname,()=>{Z.resolve(X),X.removeAllListeners()});return X.on("error",(Y)=>{Q=Y}),X.on("close",()=>{X.removeAllListeners(),Z.reject(Q)}),X.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let X=r5.DataBuffer.concat(...this.yields),Y=(0,r5.extractProtocolMessage)(X);if(Y!=="")try{let J=r5.INFO.exec(Y);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,r5.deferred)();try{if($=(0,fO5.resolve)($),!(0,gT8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,gT8.readFile)($,(Q,X)=>{if(Q)return Z.reject(Q);Z.resolve(X)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:X,ca:Y,keyFile:J,key:G}=this.options.tls;try{if(Z){let K=await this.loadFile(Z);if(K)$.cert=K}else if(Q)$.cert=Q;if(J){let K=await this.loadFile(J);if(K)$.key=K}else if(G)$.key=G;if(X){let K=await this.loadFile(X);if(K)$.ca=[K]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(K){return Promise.reject(K)}}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 Y=await this.loadClientCerts()||{};Q=(0,r5.extend)(Q,this.options.tls,Y)}catch(Y){return Promise.reject(new r5.errors.ConnectionError(Y.message,{cause:Y}))}let X=(0,r5.deferred)();try{let Y=(0,Fq1.connect)($.port,$.hostname,Q,()=>{Y.removeAllListeners(),X.resolve(Y)});Y.on("error",(J)=>{Z=J}),Y.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{X.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){X.reject(new r5.errors.ConnectionError(Y.message,{cause:Y}))}return X}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Z=(0,r5.extend)(Z,this.options.tls,X)}catch(X){return Promise.reject(new r5.errors.ConnectionError(X.message,{cause:X}))}let Q=(0,r5.deferred)();try{let X=(0,Fq1.connect)(Z,()=>{X.removeAllListeners(),Q.resolve(X)});X.on("error",(Y)=>{$=Y}),X.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Q.reject($),X.removeAllListeners()})}catch(X){Q.reject(new r5.errors.ConnectionError(X.message,{cause:X}))}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,r5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r5.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 Fq1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r5.render)($)}`);let Z=(0,r5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,r5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,r5.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}}eN.NodeTransport=hT8;function hO5($){let Z=(0,r5.deferred)();return bO5.default.lookup($,{all:!0},(Q,X)=>{if(Q){Z.reject(Q);return}let Y=[];for(let J of X)Y.push(J.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var iT8=b((dT8)=>{Object.defineProperty(dT8,"__esModule",{value:!0});dT8.connect=uO5;var lT8=uT8(),cT8=QZ0(),mT8=QZ0();function uO5($={}){if((0,mT8.hasWsProtocol)($))return Promise.reject(mT8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,cT8.setTransportFactory)({factory:()=>{return new lT8.NodeTransport},dnsResolveFn:lT8.nodeResolveHost}),cT8.NatsConnectionImpl.connect($)}});var pT8=b((sO)=>{var cO5=sO&&sO.__createBinding||(Object.create?function($,Z,Q,X){if(X===void 0)X=Q;var Y=Object.getOwnPropertyDescriptor(Z,Q);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,X,Y)}:function($,Z,Q,X){if(X===void 0)X=Q;$[X]=Z[Q]}),mO5=sO&&sO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))cO5(Z,$,Q)};Object.defineProperty(sO,"__esModule",{value:!0});sO.connect=void 0;var dO5=iT8();Object.defineProperty(sO,"connect",{enumerable:!0,get:function(){return dO5.connect}});mO5(QZ0(),sO)});function aT8($){let Z=$?.connectFn??tO5,Q=null,X=null,Y=!1,J=!1,G=!1,K=[];function W(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${K.length} callbacks`);for(let N of K)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,X=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:nO5,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),X=null,G=!1,F(Q),H();return}catch{O++;let D=wQ(pO5,iO5,O-1,2,0.5);await S$(D)}}return{init(N,B){if(Y)return;Y=!0,J=!1;let O=B?.creds?nT8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return W()},getConnection(){return W()?Q:null},getJetStream(){if(!W())return null;if(!X)X=oT8.jetstream(Q);return X},onReady(N){if(K.push(N),W())try{N()}catch{}},async drain(){if(J=!0,Y=!1,X=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function tO5($){return tT8.connect($)}var nT8,tT8,oT8,iO5=100,pO5=3000,nO5=3000;var rT8=L(()=>{w8();nT8=_(Ar(),1),tT8=_(pT8(),1),oT8=_(tB(),1)});function Dy0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,X=$?.updateRecencyOnGet??!1,Y=new Map;function J(){if(Y.size<=Q)return;let G=Date.now();for(let[K,W]of Y)if(W.expiresAt<=G)Y.delete(K);while(Y.size>Q){let K=Y.keys().next().value;if(K===void 0)break;Y.delete(K)}}return{get(G){let K=Y.get(G);if(!K)return;if(K.expiresAt<=Date.now()){Y.delete(G);return}if(X)Y.delete(G),Y.set(G,K);return K.value},set(G,K){Y.delete(G),Y.set(G,{value:K,expiresAt:Date.now()+Z}),J()},delete(G){Y.delete(G)},clear(){Y.clear()},size(){return Y.size}}}function wy0($,Z){return`${$}.${Z}`}class Uq1{cache;constructor($){this.cache=Dy0({ttlMs:$?.ttlMs??oO5,maxSize:$?.maxSize??aO5})}async get($,Z){return this.cache.get(wy0($,Z))??null}async set($,Z,Q){this.cache.set(wy0($,Z),Q)}async invalidate($,Z){this.cache.delete(wy0($,Z)),this.cache.delete(wy0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var oO5=600000,aO5=5000;var sT8=()=>{};function jy0($,Z){return`${$}:${Z}`}function Nq1($){let Z=Dy0({ttlMs:$?.ttlMs??rO5,maxSize:$?.maxSize??sO5}),Q=$?.getConnection,X=crypto.randomUUID(),Y=new TextEncoder,J=new TextDecoder,G=null;function K(W,H){let F=Q?.();if(!F)return;try{F.publish(eT8,Y.encode(JSON.stringify({organizationId:W,keyId:H,originId:X})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(W,H){return Z.get(jy0(W,H))},set(W,H,F){Z.set(jy0(W,H),F)},invalidate(W,H){Z.delete(jy0(W,H)),K(W,H)},start(){if(G)return;let W=Q?.();if(!W)return;G=W.subscribe(eT8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===X)continue;Z.delete(jy0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var eT8="studio.ai-provider-keys.invalidate",rO5=30000,sO5=5000;var $A8=()=>{};class Bq1{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,X=Z.subscribe("studio.decopilot.cancel");this.subscription=X,(async()=>{for await(let Y of X)try{let J=JSON.parse(Q.decode(Y.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 ZA8=($)=>{let Z;return()=>Z??=$()},Lq1,Oq1;var QA8=L(()=>{h6();Lq1=ZA8(()=>A$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),Oq1=ZA8(()=>A$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function JD5($=JA8){return{name:MN,subjects:[`${CL1}.>`],storage:RF.StorageType.File,max_age:ZD5,max_bytes:XD5,max_msgs_per_subject:YD5,discard:RF.DiscardPolicy.Old,retention:RF.RetentionPolicy.Limits,duplicate_window:QD5,num_replicas:$}}class GA8{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 XA8($){let Z=YA8.headers();for(let[Q,X]of Object.entries($))Z.set(Q,X);return Z}function HD5($,Z){let Q=0;return{publish(X,Y,J,G){X.publish(Y,J,G?{headers:G}:void 0).catch((K)=>{if(Q++,$D5().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,K)})},get errorCount(){return Q}}}function FD5($,Z){return $.info?.cluster?Z:1}function UD5($){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 Dq1{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(X,Y)=>{let J=JD5(Y);try{await X.streams.info(MN),await X.streams.update(MN,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await X.streams.add(J),await X.streams.update(MN,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await X.streams.delete(MN),await X.streams.add(J);else throw G}},Q=await S8(async()=>{let X=this.options.getJetStreamManager?await this.options.getJetStreamManager():await RF.jetstreamManager($),Y=FD5($,JA8);try{await Z(X,Y)}catch(J){if(Y<=1||!UD5(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${J.message}); falling back to an unreplicated stream`),await Z(X,1)}return X},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Sp});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,X){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=HD5(Z,X),G=!1,K=()=>{if(G)return;G=!0;let H=B88(Z);Y.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",K,{once:!0});let W=(H)=>{let F=performance.now(),U=vL1(H,{runId:Z}),N=performance.now()-F;Lq1().record(N),Oq1().add(1,{"org.id":X??"unknown"}),WD5?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(Y,B.subject,B.data,B.headers?XA8(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(W(O),U++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),K(),KD5)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 S8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:XA8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Sp}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let X=this.js;if(!X)return!1;let Y=performance.now(),J=vL1(Z,{runId:$,dedup:Q});Lq1().record(performance.now()-Y),Oq1().add(1);for(let G of J)if(!await this.publishSerialized(X,G))return!1;return!0}async publishDone($,Z,Q){let X=this.js;if(!X)return!1;let Y=N88({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(X,Y)}async createTailStream($,Z,Q){let X=this.js;if(!X)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=Q?.deliverPolicy==="new"?RF.DeliverPolicy.New:RF.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=Ez($),K;try{K=await S8(async()=>{return(await X.consumers.get(MN,{filter_subjects:G,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Sp})}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=zC0({messages:async function*(){try{for await(let D of K)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{K.stop()}}(),onCancel:()=>K.stop()}).pipeThrough(DC0()).pipeThrough(wC0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,K.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:w,value:j}=await F.read();if(w){O(),D.close();return}let E=j;if(E.kind==="done"){if(J){O(),D.close();return}continue}D.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(MN,{filter:Ez($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var RF,YA8,eO5=($)=>{let Z;return()=>Z??=$()},$D5,ZD5=86400000000000,QD5=120000000000,XD5=4294967296,JA8,YD5=500000,GD5,KD5,WD5;var KA8=L(()=>{w8();xL1();PC0();jC0();h6();QA8();RF=_(tB(),1),YA8=_(Ar(),1),$D5=eO5(()=>A$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),JA8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);GD5=process.env.STREAM_ENCODE_TRACE==="1",KD5=process.env.DECOPILOT_STREAM_TRACE==="1";WD5=GD5?new GA8:null});function Ey0($,Z,Q,X){if(!X)return!1;return $.emit(Z,ZU(Q,X.status,{title:X.title??void 0,virtualMcpId:X.virtual_mcp_id??void 0,createdBy:X.created_by??void 0,triggerId:X.trigger_id??null,branch:X.branch??null,harnessId:X.harness_id??void 0,createdAt:X.created_at,updatedAt:X.updated_at})),!0}var WA8=L(()=>{Y4()});class wq1{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 ND5($,Z){let Q=$.startsWith("thread:")?ZF($):$;return[...new Set([Z,Q].filter((X)=>!!X))]}async function jq1($,Z){let Q=Z.organizationId;try{let X=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let Y of X){let J=await ON($,Y);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(Y),K=await fi($,{threadId:Y,runBranch:G?.branch}),W=ND5(K,await uV0($,Y)),H=await P80($,Q,aK1(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 W){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 S3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(X){console.error("[task-board] PR lookup by branch failed",X)}return!1}var HA8=L(()=>{Q7();KW();_7()});async function FA8($,Z,Q){let X=Z.organizationId;if(!sY(Z))return!1;if(!ey(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,X))return!1;let Y=await $.storage.organizationSettings.get(X),J=QN(Y?.flags),G=await $.storage.taskBoard.update(Z.id,X,{status:J},Z.updatedBy);return await Q5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),R8(X,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var UA8=L(()=>{b4();eX();Op();JF();h9()});function ED5($){return $ instanceof dY}function NA8($,Z){return Z-$>=wD5}class Eq1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,X={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=X}start(){if(this.timer)return;let $=this.options.intervalMs??BD5;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??OD5,Q=this.options.itemIntervalMs??LD5,X=new Date(Date.now()-Q),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,X),J=Y.at(-1);this.cursor=Y.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:K}of Y)try{if(await this.reconcileItem(G,K,X))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,X)}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()-PN1),uB1);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()-jD5));for(let{id:Q,organizationId:X,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await yB1(this.taskBoard,Y,X),await gB1(this.taskBoard,this.billing,Y,X)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,X=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:Y,organizationId:J,finishedAt:G}of X)try{if(!await this.taskBoard.claimSweep(Y,J,Z))continue;let K=await this.taskBoard.getById(Y,J);if(!K||K.status!==M$.progress||sY(K)||K.assigneeId!==A8)continue;let W=await this.contextFactory(J,K.assignedBy??K.createdBy);if(!W)continue;if(await jq1(W,K)){if(await this.taskBoard.clearSweepBudget(Y,J),await this.reconcileItem(Y,J,Z))Q++;continue}if(!NA8(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(Y,J,K.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:M$.progress,to:M$.review,reason:H}}).catch(()=>{}),R8(J,F),await GF(W,F,H)}catch(K){console.error(`[task-board-review-sweeper] settling finished run on ${Y} failed`,K)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:X,organizationId:Y,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(X,Y,new Date))continue;let G=await this.taskBoard.getById(X,Y);if(!G||G.status!==M$.progress||G.assigneeId!==A8)continue;let K=await this.contextFactory(Y,G.assignedBy??G.createdBy);if(!K)continue;await KF(K,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${X} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${X} failed`,G),ED5(G)){await this.returnToTodo(X,Y,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(X,Y,J,new Date(Date.now()+DD5)).catch((K)=>console.error(`[task-board-review-sweeper] re-arming ${X} failed`,K))}return Z}async returnToTodo($,Z,Q){try{let X=await this.taskBoard.getById($,Z);if(!X||X.status!==M$.progress)return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,X.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),R8(Z,Y)}catch(X){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,X)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!NA8(nL(Q,Z.reviewCycleStartedAt),Date.now()))return;await GF($,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 X=await this.taskBoard.getById($,Z);if(!X)return!1;if(!sY(X))return!1;let Y=X.assigneeId===A8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!G)return!1;if(J.length===0){if(await jq1(G,X))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(Y)await this.handOffReviewWithoutPr(G,X);return!1}}let K=await Promise.all(J.map(async(W)=>({...W,...await jp(Z,W)})));if(K.every((W)=>W.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await FA8(G,X,K))return!0;if(await w48(G,X))return!0;if(await this.resolveConflictFromSweep(G,X,K))return!0;if(!Y)return!1;if(!vB1(K))return!1;return await Dp(G,X,{previewMatchesHead:xB1(K)}),!0}async resolveConflictFromSweep($,Z,Q){let X=Q.find((Y)=>Y.state!=="closed"&&Y.conflict===!0);if(!X)return!1;return await Oz($,Z.organizationId,Z,{pr:{number:X.number,url:X.url},conflict:!0}).catch((Y)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",Y),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var BD5=60000,LD5=300000,OD5=50,DD5=60000,wD5=900000,jD5=120000;var BA8=L(()=>{b4();_S0();HA8();RN();S60();JF();UA8();h9();eK();lB1();_7();Q60();wp()});import{readdir as zD5,rm as zy0}from"fs/promises";import{join as Py0}from"path";async function Ty0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-PD5),Z.setUTCHours(0,0,0,0);let Q=0;try{let X=await zh($);for(let Y of X)if(/^\d{4}$/.test(Y))Q+=await LA8($,Y,Z);else if(!Y.startsWith(".")){let J=Py0($,Y),G=await zh(J);for(let W of G){if(!/^\d{4}$/.test(W))continue;Q+=await LA8(J,W,Z)}if((await zh(J)).length===0)await zy0(J,{recursive:!0,force:!0})}}catch(X){console.warn("monitoring retention cleanup failed:",X)}return Q}async function LA8($,Z,Q){let X=0,Y=Py0($,Z),J=await zh(Y);for(let K of J){if(!/^\d{2}$/.test(K))continue;let W=Py0(Y,K),H=await zh(W);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${K}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=Py0(W,U);await zy0(B,{recursive:!0,force:!0}),X++}}if((await zh(W)).length===0)await zy0(W,{recursive:!0,force:!0})}if((await zh(Y)).length===0)await zy0(Y,{recursive:!0,force:!0});return X}async function zh($){try{return(await zD5($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var PD5=30;var zq1=()=>{};import{DBOS as Pq1,SchedulerMode as TD5}from"@dbos-inc/dbos-sdk";async function RD5(){let $=[cW(),Ul(),bB()],Z=0;for(let Q of $)try{Z+=await Ty0(Q)}catch(X){console.error("[monitoring-retention] cleanup failed:",X)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function qD5($,Z){await Pq1.runStep(()=>RD5(),{name:"monitoringRetention"})}function DA8(){if(OA8)return;OA8=!0;let $=Pq1.registerWorkflow(qD5,{name:"monitoringRetentionWorkflow"});Pq1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:AD5,mode:TD5.ExactlyOncePerIntervalWhenActive})}var AD5="23 4 * * *",OA8=!1;var wA8=L(()=>{WK();zq1()});function jA8($){return async(Z,Q)=>{let X=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(!X)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let Y=await aQ.create();Y.auth.user={id:Q,role:X.role},Y.organization={id:X.orgId,slug:X.orgSlug,name:X.orgName};let J=await C2($.db,Z,X.role);return Y.boundAuth=XA1({auth:Y.authInstance,headers:new Headers,role:X.role,permissions:J,userId:Q}),Y.access=new DA(Q,void 0,Y.boundAuth,X.role,"self"),Lz(Y,{id:X.orgId,slug:X.orgSlug}),Y}}var EA8=L(()=>{UH();eU()});import{EventEmitter as MD5}from"events";var Tq1;var zA8=L(()=>{jT();Tq1=new MD5;Tq1.on("request",($)=>{Jw($)})});function PA8(){return async($,Z)=>{let Q=Date.now(),X=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let J="",G=!1;if(Y.startsWith("/mcp")&&X==="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=Tt(N.params.name),O=N.params.arguments||{},D=Object.keys(O).map((j)=>Tt(j)),w=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";J=`${H9.tool}${B}${H9.dim}(${w})${H9.reset}`}else if(N.method)J=`${H9.dim}${Tt(N.method)}${H9.reset}`}}catch{}}let K=Tt(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";K=`/mcp/${H9.mcp}${Tt(F.slice(0,12))}\u2026${H9.reset}`}else if(Y==="/mcp")K=`${H9.mcp}/mcp${H9.reset}`;else if(Y==="/mcp/registry")K=`${H9.mcp}/mcp/registry${H9.reset}`;let W=VD5(X),H=G?"\u25C0":"\u2190";if(!T30())console.log(`${H9.dim}${H}${H9.reset} ${W}${X}${H9.reset} ${K}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=ID5(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!T30())console.log(`${H9.dim}${O}${H9.reset} ${W}${X}${H9.reset} ${K}${J?` ${J}`:""} ${N}${U}${H9.reset} ${H9.duration}${B}${H9.reset}`);Tq1.emit("request",{method:X,path:Tt(Y),status:U,duration:F,timestamp:new Date})}}}var H9,ID5=($)=>{if($>=500)return H9.serverError;if($>=400)return H9.clientError;if($>=300)return H9.redirect;return H9.ok},VD5=($)=>{return H9[$]||H9.reset},Tt=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var TA8=L(()=>{jT();zA8();H9={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 MA8}from"crypto";import{mkdir as kD5,readdir as SD5,rm as AA8,stat as IA8}from"fs/promises";import{join as Rq1,relative as CD5}from"path";import{z as Z8}from"zod";function kA8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return Rq1(_D5,Z)}function SA8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function Aq1($,Z){let Q=kA8($),X=SA8(Z);return Rq1(Q,X)}function vD5($,Z,Q,X){let Y=T0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${X}`;return MA8("sha256",Y).update(J).digest("hex")}function qA8($,Z,Q,X,Y){let J=Math.floor(Date.now()/1000)+X,G=vD5(Z,Q,J,Y),K=new URL(`/api/dev-assets/${Z}/${SA8(Q)}`,$);return K.searchParams.set("expires",J.toString()),K.searchParams.set("signature",G),K.searchParams.set("method",Y),K.toString()}function CA8($,Z,Q){let X=`${$}:${Z.getTime()}:${Q}`;return`"${MA8("md5","etag").update(X).digest("hex")}"`}async function _A8($,Z,Q,X,Y){try{let J=await SD5($,{withFileTypes:!0});for(let G of J){let K=Rq1($,G.name),H=CD5(Z,K).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(X){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await _A8(K,Z,Q,X,Y);else if(G.isFile()){if(X&&Q){let F=H.slice(Q.length);if(F.includes(X)){let U=F.indexOf(X),N=Q+F.slice(0,U+1);Y.commonPrefixes.add(N);continue}}try{let F=await IA8(K);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:CA8(K,F.mtime,F.size)})}catch{}}}}catch{}}function vA8($,Z){let X=F0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Z8.object({prefix:Z8.string().optional(),maxKeys:Z8.number().optional().default(1000),continuationToken:Z8.string().optional(),delimiter:Z8.string().optional()}),outputSchema:Z8.object({objects:Z8.array(Z8.object({key:Z8.string(),size:Z8.number(),lastModified:Z8.string(),etag:Z8.string()})),nextContinuationToken:Z8.string().optional(),isTruncated:Z8.boolean(),commonPrefixes:Z8.array(Z8.string()).optional()}),handler:async(Y)=>{let J=Y,G=J.prefix||"",K=J.maxKeys??1000,W=J.delimiter,H=J.continuationToken,F=kA8(X);await kD5(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await _A8(F,F,G,W,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+K),O=N+K<U.objects.length,D=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Z8.object({key:Z8.string()}),outputSchema:Z8.object({contentType:Z8.string().optional(),contentLength:Z8.number(),lastModified:Z8.string(),etag:Z8.string(),metadata:Z8.record(Z8.string(),Z8.string()).optional()}),handler:async(Y)=>{let J=Y,G=Aq1(X,J.key),K=await IA8(G);return{contentType:$21(J.key),contentLength:K.size,lastModified:K.mtime.toISOString(),etag:CA8(G,K.mtime,K.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Z8.object({key:Z8.string(),expiresIn:Z8.number().optional()}),outputSchema:Z8.object({url:Z8.string(),expiresIn:Z8.number()}),handler:async(Y)=>{let J=Y,G=og(J.expiresIn,RA8);return{url:qA8(Z,X,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:Z8.object({key:Z8.string(),expiresIn:Z8.number().optional(),contentType:Z8.string().optional()}),outputSchema:Z8.object({url:Z8.string(),expiresIn:Z8.number()}),handler:async(Y)=>{let J=Y,G=og(J.expiresIn,RA8);return{url:qA8(Z,X,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Z8.object({key:Z8.string()}),outputSchema:Z8.object({success:Z8.boolean(),key:Z8.string()}),handler:async(Y)=>{let J=Y,G=Aq1(X,J.key);try{return await AA8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Z8.object({keys:Z8.array(Z8.string()).max(1000)}),outputSchema:Z8.object({deleted:Z8.array(Z8.string()),errors:Z8.array(Z8.object({key:Z8.string(),message:Z8.string()}))}),handler:async(Y)=>{let J=Y,G=[],K=[];return await Promise.all(J.keys.map(async(W)=>{let H=Aq1(X,W);try{await AA8(H),G.push(W)}catch(F){K.push({key:W,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:K}}}]}async function qq1($,Z,Q){let X=vA8(Z,Q),Y=new Hj({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:_Z});for(let G of X){let K="shape"in G.inputSchema?G.inputSchema.shape:Z8.object({}).shape,W=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Z8.object({}).shape;Y.registerTool(G.name,{description:G.description??"",inputSchema:K,outputSchema:W,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 f3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(J),OW(Y,J,$,"mcp:dev-assets")}async function xA8($,Z,Q,X){let J=vA8(Q,X).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 _D5="./data/assets",RA8=3600,VA8,fA8;var bA8=L(()=>{W$();yp();U8();WF0();bp();IJ();nz();Fb0();VA8=new Y1;VA8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),X=`${Q.protocol}//${Q.host}`;return qq1($.req.raw,Z,X)});fA8=VA8});var yA8={};K0(yA8,{mountDevRoutes:()=>xD5});function xD5($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(X)=>{let Y=X.get("studioContext"),J=new URL(X.req.url),G=`${J.protocol}//${J.host}`;return qq1(X.req.raw,Y,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(X)=>{let Y=X.get("studioContext"),J=new URL(X.req.url),G=`${J.protocol}//${J.host}`,K=X.req.param("toolName");if(!K)return X.json({error:"Missing tool name"},400);let W=await X.req.json(),H=await xA8(K,W,Y,G);if(H.isError)return X.json(H.content,500);return X.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",fA8);let Q=new Y1;Q.use("*",TF({mountPath:"/api/dev-assets"})),Q.route("/",Hb0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var gA8=L(()=>{U8();nA1();Fb0();bA8()});var tA8={};K0(tA8,{watchHandler:()=>nA8,resolveCorsOrigin:()=>iA8,isSsoExemptPath:()=>mA8,isAllowedOAuthRedirectUri:()=>pA8,createApp:()=>dD5});import{readFileSync as fD5}from"fs";import{PrometheusSerializer as bD5}from"@opentelemetry/exporter-prometheus";import{DBOS as eO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as hD5,oAuthProtectedResourceMetadata as uD5}from"better-auth/plugins";async function yD5($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,uA8(hA8)])}catch{return Z.then((X)=>X.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),uA8(hA8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function uA8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function mA8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${of0}/`)||$.startsWith(`${df0}/`)}function dA8($){return $==="local.studio.decocms.com"}function iA8($,{baseUrl:Z,requestOrigin:Q}){let X;try{X=new URL($).hostname}catch{return null}if(X==="localhost"||X==="127.0.0.1")return $;if(dA8(X))return $;let Y=Z??Q;try{if(new URL(Y).origin===$)return $}catch{}return null}function pA8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||dA8($.hostname)}async function dD5($={}){let Z=$.database??F8(),Q=!1;K9.stop().catch((X0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",X0)});let X,Y,J,G,K=new Uq1,W,H,F,U=null;if($.disableNats)W=Nq1(),X={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},Y=null,J=null,G=new h60,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(X0)=>{return(async()=>{let E0=X0.getReader();try{while(!0){let{done:Z0}=await E0.read();if(Z0)break}}catch{}finally{E0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=aT8();let X0=T0().natsCredsPath,E0;if(X0)try{E0=fD5(X0,"utf8")}catch(g0){console.error(`[app] failed to read NATS_CREDS at ${X0}; connecting anonymously`,g0)}U.init(T0().natsUrls,E0?{creds:E0}:void 0);let Z0=cG1()?new qG1({getJetStream:()=>U.getJetStream()}):null;Z0?.init().catch(()=>{}),X=Z0;let n=new yF1({getJetStream:()=>U.getJetStream()});n.init().catch(()=>{}),Y=n;let i0=new Zg(IB1,{getJetStream:()=>U.getJetStream()}),k0=new Zg(X60,{getJetStream:()=>U.getJetStream()});i0.init().catch(()=>{}),k0.init().catch(()=>{}),J={reads:i0,cards:k0};let a0=new OD1({getJetStream:()=>U.getJetStream()});a0.init().catch(()=>{}),G=a0,W=Nq1({getConnection:()=>U.getConnection()}),H=new Bq1({getConnection:()=>U.getConnection()}),F=new Dq1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),XO8(U),U.onReady(()=>{Z0?.init().catch((g0)=>{console.error("[McpListCache] Deferred init failed:",g0)}),n.init().catch((g0)=>{console.error("[SkillCatalogCache] Deferred init failed:",g0)}),i0.init().catch((g0)=>{console.error("[PrReadCache] Deferred init failed:",g0)}),k0.init().catch((g0)=>{console.error("[PrCardCache] Deferred init failed:",g0)}),a0.init().catch((g0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",g0)}),W.start(),xv$(()=>U.getConnection()),F.init().catch((g0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",g0)})})}if(QP)await QP();MG1(X),hF1(Y),VB1(J),DD1(G);let B={storage:new Jc(Z.db),sseHub:K9,onThreadFinished:async(X0,E0)=>zp(new k3(Z.db),X0,E0,new tG(Z.db))},O=new uL1(B),D=new Y90(Z.db),w=new wq1(D);w.start(),O48(H),H.start((X0)=>{JC0(X0),O.execute({type:"CANCEL",taskId:X0}).catch((E0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",E0)})}).catch((X0)=>{console.error("[Decopilot] CancelBroadcast start failed:",X0)}),U?.onReady(()=>{H.start().catch((X0)=>{console.error("[CancelBroadcast] Deferred start failed:",X0)})});let j=()=>U?.getConnection()??null;mA1(j),U?.onReady(()=>mA1(j)),tD1(j),U?.onReady(()=>tD1(j)),F.init().catch((X0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",X0)}),QP=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),LD8(),F.teardown(),X?.teardown(),Y?.teardown(),J?.reads.teardown(),J?.cards.teardown(),K.teardown(),W.teardown(),fv$(),G.teardown(),MG1(null),hF1(null),VB1(null),DD1(null)};let E=new Y1;if(E.use("*",ND1({enabled:(X0)=>mn(X0,"debug")==="1"})),E.use("*",wa0),E.use("/*",sL8({origin:(X0,E0)=>iA8(X0,{baseUrl:T0().baseUrl,requestOrigin:new URL(E0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(X0,E0)=>{if(await E0(),X0.req.path.includes("/files/"))return;if(X0.req.path.includes("/fs/")&&X0.req.path.endsWith("/read"))return;X0.header("X-Frame-Options","DENY"),X0.header("Content-Security-Policy","frame-ancestors 'none'")}),!T0().noTui)E.use("*",PA8());E.use("*",async(X0,E0)=>{if(await E0(),_a(X0.req.path))return;if(X0.res.status>=500){let n=await X0.res.clone().text();console.error(`[5xx Response] ${X0.req.method} ${X0.req.path} - ${X0.res.status}:`,n)}}),E.get(EY.HEALTH,(X0)=>{if(Q)return X0.json({status:"shutting_down"},503);return X0.json({status:"ok"})}),E.get(EY.HEALTH_LIVE,(X0)=>{return X0.json({status:"ok"})}),E.get(EY.HEALTH_READY,async(X0)=>{if(Q)return X0.json({status:"shutting_down"},503);let E0={};if(E0.postgres={status:await yD5(Z.pool)?"up":"down"},U)E0.nats=U.isConnected()?{status:"up"}:{status:"down"};else E0.nats={status:"down"};let Z0=E0.postgres.status==="up",n=Z0?200:503;return X0.json({status:Z0?"ready":"not_ready",services:E0},n)}),E.get(EY.METRICS,async(X0)=>{try{let E0=await Pa0.collect(),Z0=gD5.serialize(E0.resourceMetrics);return X0.text(Z0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(E0){return console.error("Failed to collect metrics:",E0),X0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${EY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(X0)=>{let E0=X0.req.param("queueName");if(!lD5.has(E0))return X0.json({error:`Unknown queue: ${E0}`},404);let[Z0,n]=await Promise.all([eO.listQueuedWorkflows({queueName:E0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),eO.listQueuedWorkflows({queueName:E0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return X0.json({queue_length:Z0.length,in_flight:n.length})}),E.route("/api/config",YT8),E.route("/api/_reports",DT8),E.route("/api/_stripe",Kq1),E.route("/api/_github",ET8({taskBoard:()=>u,contextFactory:()=>g})),E.route("/api/_git",sn);let A={db:Z.db,encryptionKey:T0().encryptionKey};E.route("/api/_jira",AT8(A)),E.route("/api/_jira",PT8(A)),E.route("/report",BT8($.clientDir)),E.route("/api/auth/custom",AO8),E.route("/api/auth/desktop",IO8),E.all("/api/auth/admin/*",$D8),E.all("/api/auth/*",async(X0)=>{return await b8.handler(X0.req.raw)});let P=CB8();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",w90),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",w90),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",$90),E.route("/",bB8()),E.use("/oauth-proxy/:connectionId/*",w90),E.all("/oauth-proxy/:connectionId/*",lA8);let T=async(X0)=>{let Z0=await cD5()(X0.req.raw),n=await Z0.json();return Response.json(n,Z0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",w90),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",T);let q=async(X0)=>{let Z0=await mD5()(X0.req.raw),n=await Z0.json();return Response.json(n,Z0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let f=$O8({ttlMs:120000}),C=await qL8({db:Z.db,auth:b8,encryption:{key:T0().encryptionKey},observability:{tracer:aD,meter:A$},modelListCache:K,providerKeyCache:W,memberRoleCache:f});aQ.set(C),lG$({db:Z.db,baseUrl:c5()}),ML8({db:Z.db}),SL8({db:Z.db}),gL8({db:Z.db}),MT8({db:Z.db,encryptionKey:T0().encryptionKey}),pe$({db:Z.db}),dL8({db:Z.db}),O08({db:Z.db});let V=rW0(Z.db),h=new Oe(Z.db),g=jA8({db:Z.db});WD1({storage:V,studioContextFactory:g}),aL1({systemDatabaseUrl:CG0(T0().databaseUrl,T0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:K9}}),mL1({dispatchRunFn:J88,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:K9}});let l=new Jc(Z.db),u=new k3(Z.db),d=new tG(Z.db),W0=new Eq1(u,g,d);if(T0().taskBoardReviewSweeperEnabled){W0.start();let X0=QP;QP=async()=>{await X0?.(),W0.dispose()}}M88({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let X0=U?.getConnection();return X0?await cA8.jetstreamManager(X0):null},messageParts:l.messageParts(),resolveRun:async(X0)=>{let E0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",X0).executeTakeFirst();return E0?{orgId:E0.organization_id,createdBy:E0.created_by,version:E0.message_storage_version??1,status:E0.status,runFenceToken:E0.run_fence_token,title:E0.title??null}:null},completeRunIfNotCompleted:async(X0,E0)=>{let Z0=await l.completeRunIfNotCompleted(X0,E0);if(Ey0(K9,E0,X0,Z0),Z0)await zp(u,X0,E0,d);return Z0},markRunRequiresAction:async(X0,E0)=>{let Z0=await l.requiresActionIfInProgress(X0,E0);return Ey0(K9,E0,X0,Z0),Z0},markRunFailed:async(X0,E0,Z0,n)=>{let i0=await l.markRunFailed(X0,E0,Z0,n);if(Ey0(K9,E0,X0,i0),i0)await zp(u,X0,E0,d);return i0},clearSynthesizedError:async(X0,E0)=>{await l.messageParts().replaceMessageParts(X0,jz(X0,E0),[])},persistTitle:(X0,E0,Z0)=>l.update(X0,E0,{title:Z0}),onTitleUpdated:async({runId:X0,orgId:E0,title:Z0})=>{let n=await l.get(X0,E0).catch(()=>null);K9.emit(E0,ZU(X0,n?.status??"in_progress",{title:Z0,virtualMcpId:n?.virtual_mcp_id??void 0,createdBy:n?.created_by,triggerId:n?.trigger_id,branch:n?.branch??null,harnessId:n?.harness_id??void 0,createdAt:n?.created_at,updatedAt:n?.updated_at}))},bumpProgress:async({runId:X0,orgId:E0})=>{await l.bumpProgress(X0,E0)},recordCompleted:async({runId:X0,orgId:E0,distinctId:Z0,usage:n})=>{h1.capture({distinctId:Z0,event:"chat_message_completed",groups:{organization:E0},properties:{organization_id:E0,thread_id:X0,transport:"projector",input_tokens:n.inputTokens,output_tokens:n.outputTokens,total_tokens:n.totalTokens}})},recordFailed:async({runId:X0,orgId:E0,distinctId:Z0,reason:n,kind:i0})=>{h1.capture({distinctId:Z0,event:"chat_message_failed",groups:{organization:E0},properties:{organization_id:E0,thread_id:X0,transport:"projector",error_category:i0,error_message:n}})},purgeRun:async(X0)=>{F.purge(X0)}}),C$8({studioContextFactory:g,systemDatabaseUrl:CG0(T0().databaseUrl,T0().databasePgSsl),streamBuffer:F}),DA8(),cG$(),VL8(),_L8(),uL8(),kT8(),re$(),pL8(),D08();let P0=async(X0,E0,Z0)=>{let n=await V.findById(X0,E0);if(!n)throw Error("Automation not found");return UD1({automationId:n.id,organizationId:n.organization_id,triggerId:null})},J0=new an(V,({automation:X0,trigger:E0,contextMessages:Z0,idempotencyKey:n})=>g60({automationId:X0.id,organizationId:X0.organization_id,triggerId:E0.id,contextMessages:Z0},{idempotencyKey:n})),U0=[cW(),Ul(),bB()];for(let X0 of U0)Ty0(X0).then(()=>{}).catch((E0)=>console.error("[monitoring] Retention cleanup failed:",E0));let Y0=()=>b8.api.deleteAllExpiredApiKeys().catch((X0)=>console.error("[auth] Expired API key cleanup failed:",X0));Y0(),setInterval(Y0,86400000).unref(),E.use("*",async(X0,E0)=>{if(Oa0(X0.req.path))return E0();let Z0={measure:async(i0,k0)=>{LW(X0,i0);try{return await k0()}finally{b3(X0,i0)}}},n=await aQ.create(X0.req.raw,{timings:Z0});n.automationRunner=P0,X0.set("studioContext",n);try{await E0()}finally{let i0=n.pendingRevalidations;if(i0.length>0)Promise.race([Promise.allSettled(i0),S$(30000)]).catch((a0)=>console.error("[studio] revalidation cleanup error:",a0))}}),E.use("/api/:org/decopilot/*",pn),E.use("/api/:org/v1/*",pn),E.use("/api/:org/files/*",pn),E.use("*",async(X0,E0)=>{if(mA8(X0.req.path))return E0();let Z0=X0.get("studioContext");if(!Z0?.organization?.id||!Z0?.auth?.user?.id)return E0();if(!(await Z0.storage.orgSsoConfig.getByOrgId(Z0.organization.id))?.enforced)return E0();if(!await Z0.storage.orgSsoSessions.isValid(Z0.auth.user.id,Z0.organization.id))return X0.json({error:"SSO authentication required for this organization"},403);return E0()});let t=new Y1;t.use("*",TF({mountPath:"/api/org-sso"})),t.route("/",sf0()),E.route("/api/org-sso",t),E.get("/api/tools/management",(X0)=>{return X0.json({tools:V51,grouped:OA()})}),E.use("/mcp/*",async(X0,E0)=>{LW(X0,"mcp");try{return await E0()}finally{b3(X0,"mcp")}});let $0=async(X0,E0)=>{let Z0=X0.var.studioContext;if(!Z0.auth.user?.id&&!Z0.auth.apiKey?.id){let n=new URL(X0.req.url),i0=X0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),k0=i0?`${i0}://${n.host}`:n.origin;return X0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${k0}${n.pathname}/.well-known/oauth-protected-resource"`}})}return await E0()};if(E.use("/mcp/:connectionId?",$0),E.use("/mcp/gateway/:virtualMcpId?",$0),E.use("/mcp/virtual-mcp/:virtualMcpId?",$0),E.use("/mcp/self",$0),nK()){let{mountDevRoutes:X0}=(gA8(),Sy0(yA8));X0(E,$0)}let a=new Y1;a.use("*",TF({mountPath:"/mcp"})),a.route("/",rC0()),E.route("/mcp",a);let G0=new Y1;G0.use("*",TF({mountPath:"/mcp/self"})),G0.route("/",lb0()),E.route("/mcp/self",G0);let d0=new Y1;d0.use("*",TF({mountPath:"/mcp"})),d0.route("/",$_0()),E.route("/mcp",d0),E.use("/api/:org/models/*",async(X0,E0)=>{LW(X0,"llm_models");try{return await E0()}finally{b3(X0,"llm_models")}});let C0=DD8({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",C0),E.route("/api",vT8);let z1=new Y1;z1.use("*",TF({mountPath:"/api"})),z1.route("/",ib0()),E.route("/api",z1),E.route("/api",eP8);let p0=new Y1;p0.use("*",TF({mountPath:"/api"})),p0.route("/",pb0({tokenStorage:h,automationEventDispatcher:J0})),E.route("/api",p0);let j0=new we(Z.db),z0=new Y1;z0.use("*",TF({mountPath:"/api"})),z0.route("/",Xb0()),E.route("/api",z0),E.route("/api/deco-sites",SD8()),E.route("/api/deco-apps",nP8());let $1=new Y1;$1.use("*",TF({mountPath:"/api/deco-sites"})),$1.route("/",Jb0()),E.route("/api/deco-sites",$1),E.route(of0,ZD8()),E.route(Wz8,Uz8()),E.route("/api/_editor-resolve",ZT8()),E.route(kO8,SO8()),E.route(df0,uO8());let A1=iP8({kvStorage:j0,runRegistry:O,streamBuffer:F,sseHub:K9,cancelBroadcast:H,tokenStorage:h,automationEventDispatcher:J0,mountDevAssets:nK(),mcpAuth:$0,oauthProxyHandler:lA8,watchHandler:nA8,betterAuthProtectedResourceHandler:T,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",A1),E.notFound((X0)=>{return X0.json({error:"Not Found",path:X0.req.path},404)}),E.onError(ED8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([K9.stop(),QP?Promise.resolve(QP()).finally(()=>{QP=null}):Promise.resolve()]),U)await U.drain().catch((X0)=>console.error("[shutdown] NATS drain error:",X0));console.log("[shutdown] Flushing telemetry..."),await DJ().catch((X0)=>console.error("[shutdown] Telemetry flush error:",X0)),console.log("[shutdown] Closing database..."),await eD(Z).catch((X0)=>console.error("[shutdown] Database close error:",X0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await eO.registerQueue(LK,{partitionQueue:!0,concurrency:JD1,minPollingIntervalMs:GD1}),await eO.registerQueue(BK,{partitionQueue:!0,concurrency:tL1,priorityEnabled:!0}),await eO.registerQueue(uB,{workerConcurrency:T0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await eO.registerQueue(lB,{workerConcurrency:T0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await eO.registerQueue(Kw,{partitionQueue:!0,concurrency:S$8}),await eO.registerQueue(zT,L08),await tA1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((X0)=>eO.deleteQueue(X0))),await KD1(Z.pool),c2$().catch((X0)=>{console.error("[studio-pack-backfill] failed:",X0)}),mG$().catch((X0)=>{console.error("[org-fs] public-sets boot sync kick failed:",X0)})}})}var cA8,hA8=5000,QP=null,lA8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),X=Q[Q.length-1],Y=$.get("studioContext");if(!Y)Y=await aQ.create($.req.raw),$.set("studioContext",Y);let J=$.req.param("org")?Y.organization?.id:void 0,G=await Y.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(X==="register"&&G.oauth_config?.clientId){let h=await $.req.json().catch(()=>({}));return $.json({...typeof h==="object"&&h!==null?h:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let K=await hn(G.connection_url),W,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(K.ok)W=(await K.json()).authorization_servers?.[0];if(!W)W=H.origin;let N=await Z90(W);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(X==="authorize")O=B.authorization_endpoint;else if(X==="token")O=B.token_endpoint;else if(X==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${X}`},404);let D=fB8(O);if(D)return D;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,X==="authorize"){let h=w.searchParams.get("redirect_uri");if(h){let g=T0().baseUrl??j.origin;try{if(!pA8(new URL(h),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",h)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(tL8(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 A=$.req.header("Authorization");if(A)E.Authorization=A;let P,T=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(X==="token"&&z?.includes("application/x-www-form-urlencoded")){if(A?.toLowerCase().startsWith("basic "))try{let d=atob(A.slice(6).trim()),W0=d.indexOf(":");if(W0!==-1){let P0=decodeURIComponent(d.slice(0,W0)),J0=decodeURIComponent(d.slice(W0+1));T=P0||null,q=J0||null}}catch{}let h=await $.req.formData();if(h.has("resource"))h.set("resource",U);let g=h.get("client_id"),l=h.get("client_secret");if(typeof g==="string"&&g)T=g;if(typeof l==="string"&&l)q=l;let u=new URLSearchParams;for(let[d,W0]of h.entries())u.append(d,W0.toString());P=u.toString()}else if(X==="register"&&z?.toLowerCase().includes("application/json")){let h=await Y.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 u=typeof l==="object"&&l!==null&&!Array.isArray(l);if(P===void 0&&!u)P=g;if(P===void 0){let d=l,W0=d.metadata&&typeof d.metadata==="object"?d.metadata:{};d.metadata={...W0,organization_id:G.organization_id,...h?.slug?{organization_slug:h.slug}:{},...h?.name?{organization_name:h.name}:{}},P=JSON.stringify(d),E["Content-Type"]="application/json"}}else P=$.req.raw.body??void 0;let f=await fetch(w.toString(),{method:$.req.method,headers:E,body:P,duplex:"half",redirect:"manual"}),C=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[h,g]of f.headers.entries())if(!V.includes(h.toLowerCase()))C.set(h,g);if(X==="token"&&f.ok){let h=await f.text();try{let g=JSON.parse(h);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,u=null;try{u=await un(G.connection_url)??O}catch{u=O}let d={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:T,clientSecret:q,tokenEndpoint:u};await new P9(Y.db,Y.vault).upsert(d)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(h,{status:f.status,statusText:f.statusText,headers:C})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:C})},nA8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let X=Z.organization?.id;if(!X)return $.json({error:"organization id missing"},400);let Y=$.req.query("types"),J=Y?Y.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!TN(X)||!await AN(Z)))return $.json({error:"forbidden"},403);let K=G?DS0:X;if(G)PO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:X,targetOrgId:"all"});let W=crypto.randomUUID();return oO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:W,organizationId:X,typePatterns:J,connectedAt:new Date().toISOString()})}),!K9.add({id:W,organizationId:K,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(()=>{K9.remove(K,W)})}})){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),K9.remove(K,W)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),K9.remove(K,W),N()})})})},gD5,lD5,cD5=()=>uD5(b8),mD5=()=>hD5(b8);var oA8=L(()=>{w8();W$();dG$();kL8();vL8();lL8();d60();FB1();nL8();Q60();D9();od();Y4();U8();hf0();eL8();BD1();w3();eU();EA1();jX();h6();D6();MA1();VO8();CO8();lO8();_A1();QD8();uA1();wD8();pA1();mH();Af0();nA1();zD8();lf0();pP8();rA1();tP8();sC0();u60();$T8();Z_0();MR1();QT8();RR1();JT8();LT8();wT8();jT8();zT8();TT8();RT8();ST8();Q21();xT8();qR1();PR1();IG0();rT8();dJ();eV0();SB1();y$0();h$0();jD1();sT8();$A8();dA1();KA8();lL1();WA8();er();Ee();zO();h9();uT1();BA8();wA8();xU0();zq1();WK();oA1();EO();gL1();xU0();OC0();D51();w51();EA8();Gm();TA8();Lt();EA1();Bp();Vp();GC0();cA8=_(tB(),1);gD5=new bD5,lD5=new Set([LK,BK,uB,lB,Kw,zT])});var eA8={};K0(eA8,{resolveClientDir:()=>rD5,resolveAssetPathWithTraversalCheck:()=>sA8,isPathWithinDirectory:()=>rA8,createAssetHandler:()=>sD5});import{resolve as XZ0,dirname as iD5,join as pD5,extname as nD5,basename as tD5,sep as aA8}from"path";function oD5($,Z){if($===Z||tD5($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${aA8}assets${aA8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function rA8($,Z){let Q=XZ0(Z),X=XZ0($);return X===Q||X.startsWith(Q+"/")}function sA8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,X=XZ0(Z,Q);if(!rA8(X,Z))return null;return X}function rD5($,Z="../client"){let Q=new URL($),X=iD5(Q.pathname);return XZ0(X,Z)}function sD5($={}){let{env:Z="production",clientDir:Q=aD5,isServerPath:X=()=>!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),K;try{K=decodeURIComponent(G.pathname)}catch{return null}if(X(K))return null;let W=sA8({requestPath:K,clientDir:Q});if(!W)return null;let H=pD5(W,"index.html"),F=XZ0(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(nD5(W))?[H,F]:[];for(let O of[W,...B])try{let D=Bun.file(O);if(await D.exists())return new Response(D,{headers:oD5(O,F)})}catch{}if(K.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var aD5="./dist/client";var $28=()=>{};var Z28={};K0(Z28,{tryUpgradePreviewWs:()=>Jw5,tryHandlePreviewHttp:()=>Yw5,previewWebSocketHandler:()=>Gw5,parsePreviewBaseDomain:()=>Xw5,isPreviewWsData:()=>Ay0,extractHandleFromHost:()=>Mq1});function Zw5($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function Qw5(){return new Response($w5,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function Xw5($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let X=Q.hostname;if($.includes("{handle}")){let Y=X.indexOf(".");if(Y<=0||Y===X.length-1)return null;return X.slice(Y+1)}return X}function Mq1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),X=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!X.endsWith(J))return null;let G=X.slice(0,X.length-J.length);if(!G||G.includes("."))return null;return G}async function Yw5($,Z){let Q=Mq1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let X=await Z.getRunner();if(!X)return JZ0(503,"preview proxy not configured");let Y=await X.proxyPreviewRequest(Q,$);if(Y.headers.get(Sy)&&Zw5($))return Qw5();return Y.headers.delete(Sy),Y}function JZ0($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Ay0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function Jw5($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let X=Mq1($.headers.get("host"),Q.baseDomain);if(!X)return null;let Y=await Q.getRunner();if(!Y)return JZ0(503,"preview proxy not configured");let J=await Y.resolvePreviewUpstreamUrl(X);if(!J)return JZ0(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return JZ0(404,"not found");let K=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,W=$.headers.get("sec-websocket-protocol"),H=W?W.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:K,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return JZ0(426,"upgrade failed");return}function YZ0($,Z,Q,X){if(Z.closed)return;Z.closed=!0;try{$.close(Q,X)}catch{}try{Z.upstream?.close()}catch{}}var eD5=256,$w5='<!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>',Gw5;var Q28=L(()=>{wF1();Gw5={open($){let Z=$.data;if(!Ay0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(X){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${X instanceof Error?X.message:String(X)}`),YZ0($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let X=Z.pending.shift();if(X!==void 0)Q.send(X)}}),Q.addEventListener("message",(X)=>{if(Z.closed)return;$.send(X.data)}),Q.addEventListener("close",(X)=>{YZ0($,Z,X.code||1000,X.reason||"")}),Q.addEventListener("error",()=>{YZ0($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!Ay0(Q))return;let X=Q.upstream;if(X&&X.readyState===WebSocket.OPEN){X.send(Z);return}if(Q.pending.length>=eD5){YZ0($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!Ay0(Z))return;YZ0($,Z,1000,"")}}});var Rw5={};import{existsSync as Lw5}from"fs";function _q1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}function ww5($){let Z=new Headers($.headers);for(let[Q,X]of Object.entries(Dw5))Z.set(Q,X);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}async function Aw5($){let Z;try{Z=await Kw5.create({systemDatabaseUrl:_q1(PG.databaseUrl,PG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:BK,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let X=Q.map((Y)=>Y.workflowID);await Z.resumeWorkflows(X,{queueName:BK}),console.log(`[shutdown] re-enqueued ${X.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,X)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function qy0($){if(G28)return;G28=!0,console.log(`
|
|
5761
|
+
</head>`)}function BT8($){let Z=new Y1;return Z.get("/:domain/og.png",async(Q)=>{let X=jh(Q.req.param("domain")),Y=async()=>{let J=$?Bun.file(NT8($,"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(`${gH({})}/api/v2/public/diagnostics/${encodeURIComponent(X)}/og.png`,{signal:AbortSignal.timeout(UO5)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return Y();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let X=jh(Q.req.param("file").replace(/\.md$/,""));try{let Y=await UT8(X,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(NO5)});if(Y===null)return Q.text("Report not found",404);return Q.body(Y,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 X=Q.req.param("domain"),Y=$?NT8($,"index.html"):null,J=Y?Bun.file(Y):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let K=await WO5(jh(X)),W=HO5(X,K);return Q.html(FO5(G,W),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var KO5=2500,UO5=1e4,NO5=1e4;var LT8=L(()=>{U8();$E();Gq1();W$()});function Ly0($,Z){return fetch(`${gH({})}${$}`,Z)}async function BO5($,Z){let Q=await By0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function OO5($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",X=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:X}}var LO5,rO,OT8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},DT8;var wT8=L(()=>{U8();w3();$E();Gq1();LO5=new Set(["complete","errored","terminated","unknown"]);rO=new Y1;rO.use("*",async($,Z)=>{let Q=await b8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});rO.use("/link-token/*",OT8);rO.use("/suggest",OT8);rO.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 BO5(Z,Q))}catch{return $.json({error:"report read failed"},502)}});rO.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:X,distinctId:Y}=OO5(Q);if(!X)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await Ly0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${P2({})}`},body:JSON.stringify({url:X,...J?{email:J}:{},distinct_id:Y})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let K=await G.json(),W=K.blocked?{state:"blocked"}:K.status==="fresh"?{state:"fresh"}:K.mode==="sync"?{state:"sync"}:{state:"running",id:K.id??null};return $.json(W)}catch{return $.json({error:"run failed"},502)}});rO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await Ly0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${P2({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let Y=(await Q.json()).status??"unknown",J={done:LO5.has(Y),status:Y};return $.json(J)}catch{return $.json({error:"status failed"},502)}});rO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await Ly0(`/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)}});rO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await Ly0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let X=await Q.json();return $.json({suggestions:Array.isArray(X.suggestions)?X.suggestions:[]})}catch{return $.json({suggestions:[]})}});DT8=rO});var DO5=1048576,Kq1;var jT8=L(()=>{U8();qW();W$();UA1();Kq1=new Y1;Kq1.post("/webhook",f5({maxSize:DO5,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=T0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!fL8(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=bL8(Q);if(!Y)return $.json({error:"invalid payload"},400);let J=await yL8(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as wO5}from"crypto";function zO5($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let X=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==X.length)return!1;return wO5(Buffer.from(Y),Buffer.from(X))}function PO5($,Z){let Q=Z,X=Q?.repository?.name,Y=Q?.repository?.owner?.login;if(typeof X!=="string"||typeof Y!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let K of Array.isArray(G)?G:[]){let W=K?.number;if(typeof W==="number")J.push(W)}}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:Y,repoName:X,number:G}))}function ET8($){let Z=new Y1;return Z.post("/webhook",f5({maxSize:jO5,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let X=process.env.GITHUB_WEBHOOK_SECRET;if(!X)return Q.json({error:"github webhook not configured"},503);let Y=await Q.req.text();if(!zO5(Y,Q.req.header("x-hub-signature-256"),X))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!EO5.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(Y)}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 TF1())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let K=PO5(J??"",G);if(K.length===0)return Q.json({ok:!0,ignored:"no-pr"});let W=await TO5($,K);return Q.json({ok:!0,refreshed:W})}),Z}async function TO5($,Z){let Q=0;for(let X of Z){let Y=$.taskBoard(),J;try{J=await Y.findPrLinks(X)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let K=await Y.getById(G.taskBoardItemId,G.organizationId),W=K?await $.contextFactory()(G.organizationId,K.assignedBy??K.createdBy):null;if(!W)continue;if(await k08(W,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(K){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,K)}}return Q}var jO5=5242880,EO5;var zT8=L(()=>{U8();qW();$F();_7();EO5=new Set(["check_suite","issue_comment"])});function PT8($){let Z=new hO($.db,new mG($.encryptionKey)),Q=new Y1;return Q.get("/attachments/:token",async(X)=>{let Y=ds$(X.req.param("token"));if(!Y)return X.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(Y.organizationId);if(!J)return X.json({error:"Jira is not connected"},404);let K=await new oQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(Y.attachmentId);if(!K.ok||!K.body)return X.json({error:"Jira refused the download"},502);let W=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=K.headers.get(H);if(F)W.set(H,F)}return W.set("cache-control","no-store"),new Response(K.body,{status:200,headers:W})}),Q}var TT8=L(()=>{U8();bT();IN1();Uz()});function AT8($){let Z=new hO($.db,new mG($.encryptionKey));async function Q(Y,J){let G=NF8(J);if(!G)return;let K=await Z.getByWebhookSecret(Y);if(!K?.enabled)return;let W=await FW($.db,K.organizationId);if(!W)return;if(await ax0(W,K,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let X=new Y1;return X.post("/webhook/:secret",f5({maxSize:AO5}),async(Y)=>{let J=Y.req.param("secret");if(!await Z.getByWebhookSecret(J))return Y.json({error:"Unknown webhook"},404);let K;try{K=await Y.req.json()}catch{return Y.json({error:"Body must be JSON"},400)}return Q(J,K).catch((W)=>{console.error("[jira-webhook] trigger failed",W)}),Y.body(null,202)}),X}var AO5=1048576;var RT8=L(()=>{U8();qW();bT();rx0();sy()});import{DBOS as Oy0,SchedulerMode as RO5}from"@dbos-inc/dbos-sdk";function MT8($){Hq1=$}function IT8(){if(!Hq1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return Hq1}function VT8(){let $=IT8();return new hO($.db,new mG($.encryptionKey))}async function IO5($,Z){try{let Q=await VT8().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let X=await FW(IT8().db,Q.organizationId);if(!X)return{integrationId:$,started:0};if((await X.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new oQ(Q.siteUrl,Q.email,Q.apiToken),K=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${qT8}m"`,W=0,H;for(let F=0;F<MO5;F++){let U=await J.searchIssues({jql:K,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=BF8(N,N.changelog?.histories??[],Z);for(let O of B)if(await ax0(X,Q,O)==="started")W++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:W}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function VO5($,Z){let Q=new Date($.getTime()-qT8*60000),X=await Oy0.runStep(()=>VT8().listEnabledIds(),{name:"loadJiraIntegrations"});if(X.length===0)return;let Y=await Promise.all(X.map((J)=>Oy0.runStep(()=>IO5(J,Q),{name:`sweepJira:${J}`})));for(let J of Y)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 kT8(){if(Wq1)return;Wq1=Oy0.registerWorkflow(VO5,{name:"jiraTriggerSweepWorkflow"}),Oy0.registerScheduled(Wq1,{name:"jiraTriggerSweepWorkflow",crontab:qO5,mode:RO5.ExactlyOncePerIntervalWhenActive})}var qO5="7-59/10 * * * *",qT8=35,MO5=5,Hq1=null,Wq1=null;var ST8=L(()=>{bT();sy();Uz();rx0()});function CT8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var _T8,kO5,SO5,vT8;var xT8=L(()=>{U8();PH();Pp();od();_T8=new Y1,kO5=["range","if-none-match","if-modified-since"],SO5=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];_T8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(dn($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q$(401,{message:"Authentication required"})}if(!Q)throw new q$(401,{message:"Organization context required"});let X=$.req.path.replace(/^.*\/files\//,"");if(!X)throw new q$(400,{message:"Missing file key"});let Y=await E60(X,Z);if(!Y)throw new q$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&nK()){let W=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!W)throw new q$(500,{message:"Invalid data URL from storage"});let[,H,F]=W,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return CT8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let W of kO5){let H=$.req.header(W);if(H)J.set(W,H)}let G=await fetch(Y,{headers:J});if(G.status===403||G.status===404)throw new q$(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:`,X),new q$(502,{message:"Upstream storage error"});let K=new Headers;for(let W of SO5){let H=G.headers.get(W);if(H)K.set(W,H)}return K.set("Cache-Control","private, max-age=86400"),CT8(K,K.get("content-type")??""),new Response(G.body,{status:G.status,headers:K})});vT8=_T8});var QZ0=b((Eh)=>{var CO5=Eh&&Eh.__createBinding||(Object.create?function($,Z,Q,X){if(X===void 0)X=Q;var Y=Object.getOwnPropertyDescriptor(Z,Q);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,X,Y)}:function($,Z,Q,X){if(X===void 0)X=Q;$[X]=Z[Q]}),_O5=Eh&&Eh.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))CO5(Z,$,Q)};Object.defineProperty(Eh,"__esModule",{value:!0});_O5(uG(),Eh)});var yT8=b((fT8)=>{Object.defineProperty(fT8,"__esModule",{value:!0});fT8.version=void 0;fT8.version="3.4.0"});var uT8=b((eN)=>{var vO5=eN&&eN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(eN,"__esModule",{value:!0});eN.NodeTransport=eN.VERSION=void 0;eN.nodeResolveHost=hO5;var r5=QZ0(),xO5=B0("net"),Fq1=B0("tls"),fO5=B0("path"),gT8=B0("fs"),bO5=vO5(B0("dns")),yO5=yT8();eN.VERSION=yO5.version;var gO5="nats.js";class hT8{socket;version;lang;yields=[];signal=(0,r5.deferred)();closedNotification=(0,r5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=gO5,this.version=eN.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:X}=Q||{};try{if(X===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r5.checkOptions)(Y,Z);let{tls_required:J,tls_available:G}=Y,K=G===!0&&Z.tls!==null;if(!X&&(J||K))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw r5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let J=Y;if(!J)J=new r5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,K=G==="ECONNREFUSED"?new r5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),K}}dial($){let Z=(0,r5.deferred)(),Q,X=(0,xO5.createConnection)($.port,$.hostname,()=>{Z.resolve(X),X.removeAllListeners()});return X.on("error",(Y)=>{Q=Y}),X.on("close",()=>{X.removeAllListeners(),Z.reject(Q)}),X.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let X=r5.DataBuffer.concat(...this.yields),Y=(0,r5.extractProtocolMessage)(X);if(Y!=="")try{let J=r5.INFO.exec(Y);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,r5.deferred)();try{if($=(0,fO5.resolve)($),!(0,gT8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,gT8.readFile)($,(Q,X)=>{if(Q)return Z.reject(Q);Z.resolve(X)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:X,ca:Y,keyFile:J,key:G}=this.options.tls;try{if(Z){let K=await this.loadFile(Z);if(K)$.cert=K}else if(Q)$.cert=Q;if(J){let K=await this.loadFile(J);if(K)$.key=K}else if(G)$.key=G;if(X){let K=await this.loadFile(X);if(K)$.ca=[K]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(K){return Promise.reject(K)}}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 Y=await this.loadClientCerts()||{};Q=(0,r5.extend)(Q,this.options.tls,Y)}catch(Y){return Promise.reject(new r5.errors.ConnectionError(Y.message,{cause:Y}))}let X=(0,r5.deferred)();try{let Y=(0,Fq1.connect)($.port,$.hostname,Q,()=>{Y.removeAllListeners(),X.resolve(Y)});Y.on("error",(J)=>{Z=J}),Y.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{X.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){X.reject(new r5.errors.ConnectionError(Y.message,{cause:Y}))}return X}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Z=(0,r5.extend)(Z,this.options.tls,X)}catch(X){return Promise.reject(new r5.errors.ConnectionError(X.message,{cause:X}))}let Q=(0,r5.deferred)();try{let X=(0,Fq1.connect)(Z,()=>{X.removeAllListeners(),Q.resolve(X)});X.on("error",(Y)=>{$=Y}),X.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Q.reject($),X.removeAllListeners()})}catch(X){Q.reject(new r5.errors.ConnectionError(X.message,{cause:X}))}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,r5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r5.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 Fq1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r5.render)($)}`);let Z=(0,r5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,r5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,r5.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}}eN.NodeTransport=hT8;function hO5($){let Z=(0,r5.deferred)();return bO5.default.lookup($,{all:!0},(Q,X)=>{if(Q){Z.reject(Q);return}let Y=[];for(let J of X)Y.push(J.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var iT8=b((dT8)=>{Object.defineProperty(dT8,"__esModule",{value:!0});dT8.connect=uO5;var lT8=uT8(),cT8=QZ0(),mT8=QZ0();function uO5($={}){if((0,mT8.hasWsProtocol)($))return Promise.reject(mT8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,cT8.setTransportFactory)({factory:()=>{return new lT8.NodeTransport},dnsResolveFn:lT8.nodeResolveHost}),cT8.NatsConnectionImpl.connect($)}});var pT8=b((sO)=>{var cO5=sO&&sO.__createBinding||(Object.create?function($,Z,Q,X){if(X===void 0)X=Q;var Y=Object.getOwnPropertyDescriptor(Z,Q);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,X,Y)}:function($,Z,Q,X){if(X===void 0)X=Q;$[X]=Z[Q]}),mO5=sO&&sO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))cO5(Z,$,Q)};Object.defineProperty(sO,"__esModule",{value:!0});sO.connect=void 0;var dO5=iT8();Object.defineProperty(sO,"connect",{enumerable:!0,get:function(){return dO5.connect}});mO5(QZ0(),sO)});function aT8($){let Z=$?.connectFn??tO5,Q=null,X=null,Y=!1,J=!1,G=!1,K=[];function W(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${K.length} callbacks`);for(let N of K)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,X=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:nO5,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),X=null,G=!1,F(Q),H();return}catch{O++;let D=wQ(pO5,iO5,O-1,2,0.5);await S$(D)}}return{init(N,B){if(Y)return;Y=!0,J=!1;let O=B?.creds?nT8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return W()},getConnection(){return W()?Q:null},getJetStream(){if(!W())return null;if(!X)X=oT8.jetstream(Q);return X},onReady(N){if(K.push(N),W())try{N()}catch{}},async drain(){if(J=!0,Y=!1,X=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function tO5($){return tT8.connect($)}var nT8,tT8,oT8,iO5=100,pO5=3000,nO5=3000;var rT8=L(()=>{w8();nT8=_(Ar(),1),tT8=_(pT8(),1),oT8=_(tB(),1)});function Dy0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,X=$?.updateRecencyOnGet??!1,Y=new Map;function J(){if(Y.size<=Q)return;let G=Date.now();for(let[K,W]of Y)if(W.expiresAt<=G)Y.delete(K);while(Y.size>Q){let K=Y.keys().next().value;if(K===void 0)break;Y.delete(K)}}return{get(G){let K=Y.get(G);if(!K)return;if(K.expiresAt<=Date.now()){Y.delete(G);return}if(X)Y.delete(G),Y.set(G,K);return K.value},set(G,K){Y.delete(G),Y.set(G,{value:K,expiresAt:Date.now()+Z}),J()},delete(G){Y.delete(G)},clear(){Y.clear()},size(){return Y.size}}}function wy0($,Z){return`${$}.${Z}`}class Uq1{cache;constructor($){this.cache=Dy0({ttlMs:$?.ttlMs??oO5,maxSize:$?.maxSize??aO5})}async get($,Z){return this.cache.get(wy0($,Z))??null}async set($,Z,Q){this.cache.set(wy0($,Z),Q)}async invalidate($,Z){this.cache.delete(wy0($,Z)),this.cache.delete(wy0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var oO5=600000,aO5=5000;var sT8=()=>{};function jy0($,Z){return`${$}:${Z}`}function Nq1($){let Z=Dy0({ttlMs:$?.ttlMs??rO5,maxSize:$?.maxSize??sO5}),Q=$?.getConnection,X=crypto.randomUUID(),Y=new TextEncoder,J=new TextDecoder,G=null;function K(W,H){let F=Q?.();if(!F)return;try{F.publish(eT8,Y.encode(JSON.stringify({organizationId:W,keyId:H,originId:X})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(W,H){return Z.get(jy0(W,H))},set(W,H,F){Z.set(jy0(W,H),F)},invalidate(W,H){Z.delete(jy0(W,H)),K(W,H)},start(){if(G)return;let W=Q?.();if(!W)return;G=W.subscribe(eT8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===X)continue;Z.delete(jy0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var eT8="studio.ai-provider-keys.invalidate",rO5=30000,sO5=5000;var $A8=()=>{};class Bq1{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,X=Z.subscribe("studio.decopilot.cancel");this.subscription=X,(async()=>{for await(let Y of X)try{let J=JSON.parse(Q.decode(Y.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 ZA8=($)=>{let Z;return()=>Z??=$()},Lq1,Oq1;var QA8=L(()=>{h6();Lq1=ZA8(()=>A$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),Oq1=ZA8(()=>A$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function JD5($=JA8){return{name:MN,subjects:[`${CL1}.>`],storage:RF.StorageType.File,max_age:ZD5,max_bytes:XD5,max_msgs_per_subject:YD5,discard:RF.DiscardPolicy.Old,retention:RF.RetentionPolicy.Limits,duplicate_window:QD5,num_replicas:$}}class GA8{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 XA8($){let Z=YA8.headers();for(let[Q,X]of Object.entries($))Z.set(Q,X);return Z}function HD5($,Z){let Q=0;return{publish(X,Y,J,G){X.publish(Y,J,G?{headers:G}:void 0).catch((K)=>{if(Q++,$D5().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,K)})},get errorCount(){return Q}}}function FD5($,Z){return $.info?.cluster?Z:1}function UD5($){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 Dq1{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(X,Y)=>{let J=JD5(Y);try{await X.streams.info(MN),await X.streams.update(MN,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await X.streams.add(J),await X.streams.update(MN,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await X.streams.delete(MN),await X.streams.add(J);else throw G}},Q=await S8(async()=>{let X=this.options.getJetStreamManager?await this.options.getJetStreamManager():await RF.jetstreamManager($),Y=FD5($,JA8);try{await Z(X,Y)}catch(J){if(Y<=1||!UD5(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${J.message}); falling back to an unreplicated stream`),await Z(X,1)}return X},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Sp});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,X){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=HD5(Z,X),G=!1,K=()=>{if(G)return;G=!0;let H=B88(Z);Y.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",K,{once:!0});let W=(H)=>{let F=performance.now(),U=vL1(H,{runId:Z}),N=performance.now()-F;Lq1().record(N),Oq1().add(1,{"org.id":X??"unknown"}),WD5?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(Y,B.subject,B.data,B.headers?XA8(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(W(O),U++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),K(),KD5)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 S8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:XA8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Sp}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let X=this.js;if(!X)return!1;let Y=performance.now(),J=vL1(Z,{runId:$,dedup:Q});Lq1().record(performance.now()-Y),Oq1().add(1);for(let G of J)if(!await this.publishSerialized(X,G))return!1;return!0}async publishDone($,Z,Q){let X=this.js;if(!X)return!1;let Y=N88({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(X,Y)}async createTailStream($,Z,Q){let X=this.js;if(!X)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=Q?.deliverPolicy==="new"?RF.DeliverPolicy.New:RF.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=Ez($),K;try{K=await S8(async()=>{return(await X.consumers.get(MN,{filter_subjects:G,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Sp})}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=zC0({messages:async function*(){try{for await(let D of K)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{K.stop()}}(),onCancel:()=>K.stop()}).pipeThrough(DC0()).pipeThrough(wC0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,K.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:w,value:j}=await F.read();if(w){O(),D.close();return}let E=j;if(E.kind==="done"){if(J){O(),D.close();return}continue}D.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(MN,{filter:Ez($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var RF,YA8,eO5=($)=>{let Z;return()=>Z??=$()},$D5,ZD5=86400000000000,QD5=120000000000,XD5=4294967296,JA8,YD5=500000,GD5,KD5,WD5;var KA8=L(()=>{w8();xL1();PC0();jC0();h6();QA8();RF=_(tB(),1),YA8=_(Ar(),1),$D5=eO5(()=>A$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),JA8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);GD5=process.env.STREAM_ENCODE_TRACE==="1",KD5=process.env.DECOPILOT_STREAM_TRACE==="1";WD5=GD5?new GA8:null});function Ey0($,Z,Q,X){if(!X)return!1;return $.emit(Z,ZU(Q,X.status,{title:X.title??void 0,virtualMcpId:X.virtual_mcp_id??void 0,createdBy:X.created_by??void 0,triggerId:X.trigger_id??null,branch:X.branch??null,harnessId:X.harness_id??void 0,createdAt:X.created_at,updatedAt:X.updated_at})),!0}var WA8=L(()=>{Y4()});class wq1{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 ND5($,Z){let Q=$.startsWith("thread:")?ZF($):$;return[...new Set([Z,Q].filter((X)=>!!X))]}async function jq1($,Z){let Q=Z.organizationId;try{let X=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let Y of X){let J=await ON($,Y);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(Y),K=await fi($,{threadId:Y,runBranch:G?.branch}),W=ND5(K,await uV0($,Y)),H=await P80($,Q,aK1(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 W){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 S3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(X){console.error("[task-board] PR lookup by branch failed",X)}return!1}var HA8=L(()=>{Q7();KW();_7()});async function FA8($,Z,Q){let X=Z.organizationId;if(!sY(Z))return!1;if(!ey(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,X))return!1;let Y=await $.storage.organizationSettings.get(X),J=QN(Y?.flags),G=await $.storage.taskBoard.update(Z.id,X,{status:J},Z.updatedBy);return await Q5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),R8(X,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var UA8=L(()=>{b4();eX();Op();JF();h9()});function ED5($){return $ instanceof dY}function NA8($,Z){return Z-$>=wD5}class Eq1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,X={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=X}start(){if(this.timer)return;let $=this.options.intervalMs??BD5;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??OD5,Q=this.options.itemIntervalMs??LD5,X=new Date(Date.now()-Q),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,X),J=Y.at(-1);this.cursor=Y.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:K}of Y)try{if(await this.reconcileItem(G,K,X))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,X)}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()-PN1),uB1);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()-jD5));for(let{id:Q,organizationId:X,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await yB1(this.taskBoard,Y,X),await gB1(this.taskBoard,this.billing,Y,X)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,X=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:Y,organizationId:J,finishedAt:G}of X)try{if(!await this.taskBoard.claimSweep(Y,J,Z))continue;let K=await this.taskBoard.getById(Y,J);if(!K||K.status!==M$.progress||sY(K)||K.assigneeId!==A8)continue;let W=await this.contextFactory(J,K.assignedBy??K.createdBy);if(!W)continue;if(await jq1(W,K)){if(await this.taskBoard.clearSweepBudget(Y,J),await this.reconcileItem(Y,J,Z))Q++;continue}if(!NA8(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(Y,J,K.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:Y,action:"status_changed",actorId:null,data:{from:M$.progress,to:M$.review,reason:H}}).catch(()=>{}),R8(J,F),await GF(W,F,H)}catch(K){console.error(`[task-board-review-sweeper] settling finished run on ${Y} failed`,K)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:X,organizationId:Y,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(X,Y,new Date))continue;let G=await this.taskBoard.getById(X,Y);if(!G||G.status!==M$.progress||G.assigneeId!==A8)continue;let K=await this.contextFactory(Y,G.assignedBy??G.createdBy);if(!K)continue;await KF(K,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${X} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${X} failed`,G),ED5(G)){await this.returnToTodo(X,Y,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(X,Y,J,new Date(Date.now()+DD5)).catch((K)=>console.error(`[task-board-review-sweeper] re-arming ${X} failed`,K))}return Z}async returnToTodo($,Z,Q){try{let X=await this.taskBoard.getById($,Z);if(!X||X.status!==M$.progress)return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,X.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),R8(Z,Y)}catch(X){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,X)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!NA8(nL(Q,Z.reviewCycleStartedAt),Date.now()))return;await GF($,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 X=await this.taskBoard.getById($,Z);if(!X)return!1;if(!sY(X))return!1;let Y=X.assigneeId===A8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!G)return!1;if(J.length===0){if(await jq1(G,X))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(Y)await this.handOffReviewWithoutPr(G,X);return!1}}let K=await Promise.all(J.map(async(W)=>({...W,...await jp(Z,W)})));if(K.every((W)=>W.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await FA8(G,X,K))return!0;if(await w48(G,X))return!0;if(await this.resolveConflictFromSweep(G,X,K))return!0;if(!Y)return!1;if(!vB1(K))return!1;return await Dp(G,X,{previewMatchesHead:xB1(K)}),!0}async resolveConflictFromSweep($,Z,Q){let X=Q.find((Y)=>Y.state!=="closed"&&Y.conflict===!0);if(!X)return!1;return await Oz($,Z.organizationId,Z,{pr:{number:X.number,url:X.url},conflict:!0}).catch((Y)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",Y),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var BD5=60000,LD5=300000,OD5=50,DD5=60000,wD5=900000,jD5=120000;var BA8=L(()=>{b4();_S0();HA8();RN();S60();JF();UA8();h9();eK();lB1();_7();Q60();wp()});import{readdir as zD5,rm as zy0}from"fs/promises";import{join as Py0}from"path";async function Ty0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-PD5),Z.setUTCHours(0,0,0,0);let Q=0;try{let X=await zh($);for(let Y of X)if(/^\d{4}$/.test(Y))Q+=await LA8($,Y,Z);else if(!Y.startsWith(".")){let J=Py0($,Y),G=await zh(J);for(let W of G){if(!/^\d{4}$/.test(W))continue;Q+=await LA8(J,W,Z)}if((await zh(J)).length===0)await zy0(J,{recursive:!0,force:!0})}}catch(X){console.warn("monitoring retention cleanup failed:",X)}return Q}async function LA8($,Z,Q){let X=0,Y=Py0($,Z),J=await zh(Y);for(let K of J){if(!/^\d{2}$/.test(K))continue;let W=Py0(Y,K),H=await zh(W);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${K}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=Py0(W,U);await zy0(B,{recursive:!0,force:!0}),X++}}if((await zh(W)).length===0)await zy0(W,{recursive:!0,force:!0})}if((await zh(Y)).length===0)await zy0(Y,{recursive:!0,force:!0});return X}async function zh($){try{return(await zD5($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var PD5=30;var zq1=()=>{};import{DBOS as Pq1,SchedulerMode as TD5}from"@dbos-inc/dbos-sdk";async function RD5(){let $=[cW(),Ul(),bB()],Z=0;for(let Q of $)try{Z+=await Ty0(Q)}catch(X){console.error("[monitoring-retention] cleanup failed:",X)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function qD5($,Z){await Pq1.runStep(()=>RD5(),{name:"monitoringRetention"})}function DA8(){if(OA8)return;OA8=!0;let $=Pq1.registerWorkflow(qD5,{name:"monitoringRetentionWorkflow"});Pq1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:AD5,mode:TD5.ExactlyOncePerIntervalWhenActive})}var AD5="23 4 * * *",OA8=!1;var wA8=L(()=>{WK();zq1()});function jA8($){return async(Z,Q)=>{let X=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(!X)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let Y=await aQ.create();Y.auth.user={id:Q,role:X.role},Y.organization={id:X.orgId,slug:X.orgSlug,name:X.orgName};let J=await C2($.db,Z,X.role);return Y.boundAuth=XA1({auth:Y.authInstance,headers:new Headers,role:X.role,permissions:J,userId:Q}),Y.access=new DA(Q,void 0,Y.boundAuth,X.role,"self"),Lz(Y,{id:X.orgId,slug:X.orgSlug}),Y}}var EA8=L(()=>{UH();eU()});import{EventEmitter as MD5}from"events";var Tq1;var zA8=L(()=>{jT();Tq1=new MD5;Tq1.on("request",($)=>{Jw($)})});function PA8(){return async($,Z)=>{let Q=Date.now(),X=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let J="",G=!1;if(Y.startsWith("/mcp")&&X==="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=Tt(N.params.name),O=N.params.arguments||{},D=Object.keys(O).map((j)=>Tt(j)),w=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";J=`${H9.tool}${B}${H9.dim}(${w})${H9.reset}`}else if(N.method)J=`${H9.dim}${Tt(N.method)}${H9.reset}`}}catch{}}let K=Tt(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";K=`/mcp/${H9.mcp}${Tt(F.slice(0,12))}\u2026${H9.reset}`}else if(Y==="/mcp")K=`${H9.mcp}/mcp${H9.reset}`;else if(Y==="/mcp/registry")K=`${H9.mcp}/mcp/registry${H9.reset}`;let W=VD5(X),H=G?"\u25C0":"\u2190";if(!T30())console.log(`${H9.dim}${H}${H9.reset} ${W}${X}${H9.reset} ${K}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=ID5(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!T30())console.log(`${H9.dim}${O}${H9.reset} ${W}${X}${H9.reset} ${K}${J?` ${J}`:""} ${N}${U}${H9.reset} ${H9.duration}${B}${H9.reset}`);Tq1.emit("request",{method:X,path:Tt(Y),status:U,duration:F,timestamp:new Date})}}}var H9,ID5=($)=>{if($>=500)return H9.serverError;if($>=400)return H9.clientError;if($>=300)return H9.redirect;return H9.ok},VD5=($)=>{return H9[$]||H9.reset},Tt=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var TA8=L(()=>{jT();zA8();H9={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 MA8}from"crypto";import{mkdir as kD5,readdir as SD5,rm as AA8,stat as IA8}from"fs/promises";import{join as Rq1,relative as CD5}from"path";import{z as Z8}from"zod";function kA8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return Rq1(_D5,Z)}function SA8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function Aq1($,Z){let Q=kA8($),X=SA8(Z);return Rq1(Q,X)}function vD5($,Z,Q,X){let Y=T0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${X}`;return MA8("sha256",Y).update(J).digest("hex")}function qA8($,Z,Q,X,Y){let J=Math.floor(Date.now()/1000)+X,G=vD5(Z,Q,J,Y),K=new URL(`/api/dev-assets/${Z}/${SA8(Q)}`,$);return K.searchParams.set("expires",J.toString()),K.searchParams.set("signature",G),K.searchParams.set("method",Y),K.toString()}function CA8($,Z,Q){let X=`${$}:${Z.getTime()}:${Q}`;return`"${MA8("md5","etag").update(X).digest("hex")}"`}async function _A8($,Z,Q,X,Y){try{let J=await SD5($,{withFileTypes:!0});for(let G of J){let K=Rq1($,G.name),H=CD5(Z,K).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(X){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await _A8(K,Z,Q,X,Y);else if(G.isFile()){if(X&&Q){let F=H.slice(Q.length);if(F.includes(X)){let U=F.indexOf(X),N=Q+F.slice(0,U+1);Y.commonPrefixes.add(N);continue}}try{let F=await IA8(K);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:CA8(K,F.mtime,F.size)})}catch{}}}}catch{}}function vA8($,Z){let X=F0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Z8.object({prefix:Z8.string().optional(),maxKeys:Z8.number().optional().default(1000),continuationToken:Z8.string().optional(),delimiter:Z8.string().optional()}),outputSchema:Z8.object({objects:Z8.array(Z8.object({key:Z8.string(),size:Z8.number(),lastModified:Z8.string(),etag:Z8.string()})),nextContinuationToken:Z8.string().optional(),isTruncated:Z8.boolean(),commonPrefixes:Z8.array(Z8.string()).optional()}),handler:async(Y)=>{let J=Y,G=J.prefix||"",K=J.maxKeys??1000,W=J.delimiter,H=J.continuationToken,F=kA8(X);await kD5(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await _A8(F,F,G,W,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+K),O=N+K<U.objects.length,D=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Z8.object({key:Z8.string()}),outputSchema:Z8.object({contentType:Z8.string().optional(),contentLength:Z8.number(),lastModified:Z8.string(),etag:Z8.string(),metadata:Z8.record(Z8.string(),Z8.string()).optional()}),handler:async(Y)=>{let J=Y,G=Aq1(X,J.key),K=await IA8(G);return{contentType:$21(J.key),contentLength:K.size,lastModified:K.mtime.toISOString(),etag:CA8(G,K.mtime,K.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Z8.object({key:Z8.string(),expiresIn:Z8.number().optional()}),outputSchema:Z8.object({url:Z8.string(),expiresIn:Z8.number()}),handler:async(Y)=>{let J=Y,G=og(J.expiresIn,RA8);return{url:qA8(Z,X,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:Z8.object({key:Z8.string(),expiresIn:Z8.number().optional(),contentType:Z8.string().optional()}),outputSchema:Z8.object({url:Z8.string(),expiresIn:Z8.number()}),handler:async(Y)=>{let J=Y,G=og(J.expiresIn,RA8);return{url:qA8(Z,X,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Z8.object({key:Z8.string()}),outputSchema:Z8.object({success:Z8.boolean(),key:Z8.string()}),handler:async(Y)=>{let J=Y,G=Aq1(X,J.key);try{return await AA8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Z8.object({keys:Z8.array(Z8.string()).max(1000)}),outputSchema:Z8.object({deleted:Z8.array(Z8.string()),errors:Z8.array(Z8.object({key:Z8.string(),message:Z8.string()}))}),handler:async(Y)=>{let J=Y,G=[],K=[];return await Promise.all(J.keys.map(async(W)=>{let H=Aq1(X,W);try{await AA8(H),G.push(W)}catch(F){K.push({key:W,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:K}}}]}async function qq1($,Z,Q){let X=vA8(Z,Q),Y=new Hj({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:_Z});for(let G of X){let K="shape"in G.inputSchema?G.inputSchema.shape:Z8.object({}).shape,W=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Z8.object({}).shape;Y.registerTool(G.name,{description:G.description??"",inputSchema:K,outputSchema:W,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 f3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(J),OW(Y,J,$,"mcp:dev-assets")}async function xA8($,Z,Q,X){let J=vA8(Q,X).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 _D5="./data/assets",RA8=3600,VA8,fA8;var bA8=L(()=>{W$();yp();U8();WF0();bp();IJ();nz();Fb0();VA8=new Y1;VA8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),X=`${Q.protocol}//${Q.host}`;return qq1($.req.raw,Z,X)});fA8=VA8});var yA8={};K0(yA8,{mountDevRoutes:()=>xD5});function xD5($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(X)=>{let Y=X.get("studioContext"),J=new URL(X.req.url),G=`${J.protocol}//${J.host}`;return qq1(X.req.raw,Y,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(X)=>{let Y=X.get("studioContext"),J=new URL(X.req.url),G=`${J.protocol}//${J.host}`,K=X.req.param("toolName");if(!K)return X.json({error:"Missing tool name"},400);let W=await X.req.json(),H=await xA8(K,W,Y,G);if(H.isError)return X.json(H.content,500);return X.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",fA8);let Q=new Y1;Q.use("*",TF({mountPath:"/api/dev-assets"})),Q.route("/",Hb0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var gA8=L(()=>{U8();nA1();Fb0();bA8()});var tA8={};K0(tA8,{watchHandler:()=>nA8,resolveCorsOrigin:()=>iA8,isSsoExemptPath:()=>mA8,isAllowedOAuthRedirectUri:()=>pA8,createApp:()=>dD5});import{readFileSync as fD5}from"fs";import{PrometheusSerializer as bD5}from"@opentelemetry/exporter-prometheus";import{DBOS as eO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as hD5,oAuthProtectedResourceMetadata as uD5}from"better-auth/plugins";async function yD5($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,uA8(hA8)])}catch{return Z.then((X)=>X.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),uA8(hA8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function uA8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function mA8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${of0}/`)||$.startsWith(`${df0}/`)}function dA8($){return $==="local.studio.decocms.com"}function iA8($,{baseUrl:Z,requestOrigin:Q}){let X;try{X=new URL($).hostname}catch{return null}if(X==="localhost"||X==="127.0.0.1")return $;if(dA8(X))return $;let Y=Z??Q;try{if(new URL(Y).origin===$)return $}catch{}return null}function pA8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||dA8($.hostname)}async function dD5($={}){let Z=$.database??F8(),Q=!1;K9.stop().catch((X0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",X0)});let X,Y,J,G,K=new Uq1,W,H,F,U=null;if($.disableNats)W=Nq1(),X={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},Y=null,J=null,G=new h60,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(X0)=>{return(async()=>{let E0=X0.getReader();try{while(!0){let{done:Z0}=await E0.read();if(Z0)break}}catch{}finally{E0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=aT8();let X0=T0().natsCredsPath,E0;if(X0)try{E0=fD5(X0,"utf8")}catch(g0){console.error(`[app] failed to read NATS_CREDS at ${X0}; connecting anonymously`,g0)}U.init(T0().natsUrls,E0?{creds:E0}:void 0);let Z0=cG1()?new qG1({getJetStream:()=>U.getJetStream()}):null;Z0?.init().catch(()=>{}),X=Z0;let n=new yF1({getJetStream:()=>U.getJetStream()});n.init().catch(()=>{}),Y=n;let i0=new Zg(IB1,{getJetStream:()=>U.getJetStream()}),k0=new Zg(X60,{getJetStream:()=>U.getJetStream()});i0.init().catch(()=>{}),k0.init().catch(()=>{}),J={reads:i0,cards:k0};let a0=new OD1({getJetStream:()=>U.getJetStream()});a0.init().catch(()=>{}),G=a0,W=Nq1({getConnection:()=>U.getConnection()}),H=new Bq1({getConnection:()=>U.getConnection()}),F=new Dq1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),XO8(U),U.onReady(()=>{Z0?.init().catch((g0)=>{console.error("[McpListCache] Deferred init failed:",g0)}),n.init().catch((g0)=>{console.error("[SkillCatalogCache] Deferred init failed:",g0)}),i0.init().catch((g0)=>{console.error("[PrReadCache] Deferred init failed:",g0)}),k0.init().catch((g0)=>{console.error("[PrCardCache] Deferred init failed:",g0)}),a0.init().catch((g0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",g0)}),W.start(),xv$(()=>U.getConnection()),F.init().catch((g0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",g0)})})}if(QP)await QP();MG1(X),hF1(Y),VB1(J),DD1(G);let B={storage:new Jc(Z.db),sseHub:K9,onThreadFinished:async(X0,E0)=>zp(new k3(Z.db),X0,E0,new tG(Z.db))},O=new uL1(B),D=new Y90(Z.db),w=new wq1(D);w.start(),O48(H),H.start((X0)=>{JC0(X0),O.execute({type:"CANCEL",taskId:X0}).catch((E0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",E0)})}).catch((X0)=>{console.error("[Decopilot] CancelBroadcast start failed:",X0)}),U?.onReady(()=>{H.start().catch((X0)=>{console.error("[CancelBroadcast] Deferred start failed:",X0)})});let j=()=>U?.getConnection()??null;mA1(j),U?.onReady(()=>mA1(j)),tD1(j),U?.onReady(()=>tD1(j)),F.init().catch((X0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",X0)}),QP=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),LD8(),F.teardown(),X?.teardown(),Y?.teardown(),J?.reads.teardown(),J?.cards.teardown(),K.teardown(),W.teardown(),fv$(),G.teardown(),MG1(null),hF1(null),VB1(null),DD1(null)};let E=new Y1;if(E.use("*",ND1({enabled:(X0)=>mn(X0,"debug")==="1"})),E.use("*",wa0),E.use("/*",sL8({origin:(X0,E0)=>iA8(X0,{baseUrl:T0().baseUrl,requestOrigin:new URL(E0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(X0,E0)=>{if(await E0(),X0.req.path.includes("/files/"))return;if(X0.req.path.includes("/fs/")&&X0.req.path.endsWith("/read"))return;X0.header("X-Frame-Options","DENY"),X0.header("Content-Security-Policy","frame-ancestors 'none'")}),!T0().noTui)E.use("*",PA8());E.use("*",async(X0,E0)=>{if(await E0(),_a(X0.req.path))return;if(X0.res.status>=500){let n=await X0.res.clone().text();console.error(`[5xx Response] ${X0.req.method} ${X0.req.path} - ${X0.res.status}:`,n)}}),E.get(EY.HEALTH,(X0)=>{if(Q)return X0.json({status:"shutting_down"},503);return X0.json({status:"ok"})}),E.get(EY.HEALTH_LIVE,(X0)=>{return X0.json({status:"ok"})}),E.get(EY.HEALTH_READY,async(X0)=>{if(Q)return X0.json({status:"shutting_down"},503);let E0={};if(E0.postgres={status:await yD5(Z.pool)?"up":"down"},U)E0.nats=U.isConnected()?{status:"up"}:{status:"down"};else E0.nats={status:"down"};let Z0=E0.postgres.status==="up",n=Z0?200:503;return X0.json({status:Z0?"ready":"not_ready",services:E0},n)}),E.get(EY.METRICS,async(X0)=>{try{let E0=await Pa0.collect(),Z0=gD5.serialize(E0.resourceMetrics);return X0.text(Z0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(E0){return console.error("Failed to collect metrics:",E0),X0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${EY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(X0)=>{let E0=X0.req.param("queueName");if(!lD5.has(E0))return X0.json({error:`Unknown queue: ${E0}`},404);let[Z0,n]=await Promise.all([eO.listQueuedWorkflows({queueName:E0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),eO.listQueuedWorkflows({queueName:E0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return X0.json({queue_length:Z0.length,in_flight:n.length})}),E.route("/api/config",YT8),E.route("/api/_reports",DT8),E.route("/api/_stripe",Kq1),E.route("/api/_github",ET8({taskBoard:()=>u,contextFactory:()=>g})),E.route("/api/_git",sn);let A={db:Z.db,encryptionKey:T0().encryptionKey};E.route("/api/_jira",AT8(A)),E.route("/api/_jira",PT8(A)),E.route("/report",BT8($.clientDir)),E.route("/api/auth/custom",AO8),E.route("/api/auth/desktop",IO8),E.all("/api/auth/admin/*",$D8),E.all("/api/auth/*",async(X0)=>{return await b8.handler(X0.req.raw)});let P=CB8();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",w90),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",w90),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",$90),E.route("/",bB8()),E.use("/oauth-proxy/:connectionId/*",w90),E.all("/oauth-proxy/:connectionId/*",lA8);let T=async(X0)=>{let Z0=await cD5()(X0.req.raw),n=await Z0.json();return Response.json(n,Z0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",w90),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",T);let q=async(X0)=>{let Z0=await mD5()(X0.req.raw),n=await Z0.json();return Response.json(n,Z0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let f=$O8({ttlMs:120000}),C=await qL8({db:Z.db,auth:b8,encryption:{key:T0().encryptionKey},observability:{tracer:aD,meter:A$},modelListCache:K,providerKeyCache:W,memberRoleCache:f});aQ.set(C),lG$({db:Z.db,baseUrl:c5()}),ML8({db:Z.db}),SL8({db:Z.db}),gL8({db:Z.db}),MT8({db:Z.db,encryptionKey:T0().encryptionKey}),pe$({db:Z.db}),dL8({db:Z.db}),O08({db:Z.db});let V=rW0(Z.db),h=new Oe(Z.db),g=jA8({db:Z.db});WD1({storage:V,studioContextFactory:g}),aL1({systemDatabaseUrl:CG0(T0().databaseUrl,T0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:K9}}),mL1({dispatchRunFn:J88,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:K9}});let l=new Jc(Z.db),u=new k3(Z.db),d=new tG(Z.db),W0=new Eq1(u,g,d);if(T0().taskBoardReviewSweeperEnabled){W0.start();let X0=QP;QP=async()=>{await X0?.(),W0.dispose()}}M88({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let X0=U?.getConnection();return X0?await cA8.jetstreamManager(X0):null},messageParts:l.messageParts(),resolveRun:async(X0)=>{let E0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",X0).executeTakeFirst();return E0?{orgId:E0.organization_id,createdBy:E0.created_by,version:E0.message_storage_version??1,status:E0.status,runFenceToken:E0.run_fence_token,title:E0.title??null}:null},completeRunIfNotCompleted:async(X0,E0)=>{let Z0=await l.completeRunIfNotCompleted(X0,E0);if(Ey0(K9,E0,X0,Z0),Z0)await zp(u,X0,E0,d);return Z0},markRunRequiresAction:async(X0,E0)=>{let Z0=await l.requiresActionIfInProgress(X0,E0);return Ey0(K9,E0,X0,Z0),Z0},markRunFailed:async(X0,E0,Z0,n)=>{let i0=await l.markRunFailed(X0,E0,Z0,n);if(Ey0(K9,E0,X0,i0),i0)await zp(u,X0,E0,d);return i0},clearSynthesizedError:async(X0,E0)=>{await l.messageParts().replaceMessageParts(X0,jz(X0,E0),[])},persistTitle:(X0,E0,Z0)=>l.update(X0,E0,{title:Z0}),onTitleUpdated:async({runId:X0,orgId:E0,title:Z0})=>{let n=await l.get(X0,E0).catch(()=>null);K9.emit(E0,ZU(X0,n?.status??"in_progress",{title:Z0,virtualMcpId:n?.virtual_mcp_id??void 0,createdBy:n?.created_by,triggerId:n?.trigger_id,branch:n?.branch??null,harnessId:n?.harness_id??void 0,createdAt:n?.created_at,updatedAt:n?.updated_at}))},bumpProgress:async({runId:X0,orgId:E0})=>{await l.bumpProgress(X0,E0)},recordCompleted:async({runId:X0,orgId:E0,distinctId:Z0,usage:n})=>{h1.capture({distinctId:Z0,event:"chat_message_completed",groups:{organization:E0},properties:{organization_id:E0,thread_id:X0,transport:"projector",input_tokens:n.inputTokens,output_tokens:n.outputTokens,total_tokens:n.totalTokens}})},recordFailed:async({runId:X0,orgId:E0,distinctId:Z0,reason:n,kind:i0})=>{h1.capture({distinctId:Z0,event:"chat_message_failed",groups:{organization:E0},properties:{organization_id:E0,thread_id:X0,transport:"projector",error_category:i0,error_message:n}})},purgeRun:async(X0)=>{F.purge(X0)}}),C$8({studioContextFactory:g,systemDatabaseUrl:CG0(T0().databaseUrl,T0().databasePgSsl),streamBuffer:F}),DA8(),cG$(),VL8(),_L8(),uL8(),kT8(),re$(),pL8(),D08();let P0=async(X0,E0,Z0)=>{let n=await V.findById(X0,E0);if(!n)throw Error("Automation not found");return UD1({automationId:n.id,organizationId:n.organization_id,triggerId:null})},J0=new an(V,({automation:X0,trigger:E0,contextMessages:Z0,idempotencyKey:n})=>g60({automationId:X0.id,organizationId:X0.organization_id,triggerId:E0.id,contextMessages:Z0},{idempotencyKey:n})),U0=[cW(),Ul(),bB()];for(let X0 of U0)Ty0(X0).then(()=>{}).catch((E0)=>console.error("[monitoring] Retention cleanup failed:",E0));let Y0=()=>b8.api.deleteAllExpiredApiKeys().catch((X0)=>console.error("[auth] Expired API key cleanup failed:",X0));Y0(),setInterval(Y0,86400000).unref(),E.use("*",async(X0,E0)=>{if(Oa0(X0.req.path))return E0();let Z0={measure:async(i0,k0)=>{LW(X0,i0);try{return await k0()}finally{b3(X0,i0)}}},n=await aQ.create(X0.req.raw,{timings:Z0});n.automationRunner=P0,X0.set("studioContext",n);try{await E0()}finally{let i0=n.pendingRevalidations;if(i0.length>0)Promise.race([Promise.allSettled(i0),S$(30000)]).catch((a0)=>console.error("[studio] revalidation cleanup error:",a0))}}),E.use("/api/:org/decopilot/*",pn),E.use("/api/:org/v1/*",pn),E.use("/api/:org/files/*",pn),E.use("*",async(X0,E0)=>{if(mA8(X0.req.path))return E0();let Z0=X0.get("studioContext");if(!Z0?.organization?.id||!Z0?.auth?.user?.id)return E0();if(!(await Z0.storage.orgSsoConfig.getByOrgId(Z0.organization.id))?.enforced)return E0();if(!await Z0.storage.orgSsoSessions.isValid(Z0.auth.user.id,Z0.organization.id))return X0.json({error:"SSO authentication required for this organization"},403);return E0()});let t=new Y1;t.use("*",TF({mountPath:"/api/org-sso"})),t.route("/",sf0()),E.route("/api/org-sso",t),E.get("/api/tools/management",(X0)=>{return X0.json({tools:V51,grouped:OA()})}),E.use("/mcp/*",async(X0,E0)=>{LW(X0,"mcp");try{return await E0()}finally{b3(X0,"mcp")}});let $0=async(X0,E0)=>{let Z0=X0.var.studioContext;if(!Z0.auth.user?.id&&!Z0.auth.apiKey?.id){let n=new URL(X0.req.url),i0=X0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),k0=i0?`${i0}://${n.host}`:n.origin;return X0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${k0}${n.pathname}/.well-known/oauth-protected-resource"`}})}return await E0()};if(E.use("/mcp/:connectionId?",$0),E.use("/mcp/gateway/:virtualMcpId?",$0),E.use("/mcp/virtual-mcp/:virtualMcpId?",$0),E.use("/mcp/self",$0),nK()){let{mountDevRoutes:X0}=(gA8(),Sy0(yA8));X0(E,$0)}let a=new Y1;a.use("*",TF({mountPath:"/mcp"})),a.route("/",rC0()),E.route("/mcp",a);let G0=new Y1;G0.use("*",TF({mountPath:"/mcp/self"})),G0.route("/",lb0()),E.route("/mcp/self",G0);let d0=new Y1;d0.use("*",TF({mountPath:"/mcp"})),d0.route("/",$_0()),E.route("/mcp",d0),E.use("/api/:org/models/*",async(X0,E0)=>{LW(X0,"llm_models");try{return await E0()}finally{b3(X0,"llm_models")}});let C0=DD8({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",C0),E.route("/api",vT8);let z1=new Y1;z1.use("*",TF({mountPath:"/api"})),z1.route("/",ib0()),E.route("/api",z1),E.route("/api",eP8);let p0=new Y1;p0.use("*",TF({mountPath:"/api"})),p0.route("/",pb0({tokenStorage:h,automationEventDispatcher:J0})),E.route("/api",p0);let j0=new we(Z.db),z0=new Y1;z0.use("*",TF({mountPath:"/api"})),z0.route("/",Xb0()),E.route("/api",z0),E.route("/api/deco-sites",SD8()),E.route("/api/deco-apps",nP8());let $1=new Y1;$1.use("*",TF({mountPath:"/api/deco-sites"})),$1.route("/",Jb0()),E.route("/api/deco-sites",$1),E.route(of0,ZD8()),E.route(Wz8,Uz8()),E.route("/api/_editor-resolve",ZT8()),E.route(kO8,SO8()),E.route(df0,uO8());let A1=iP8({kvStorage:j0,runRegistry:O,streamBuffer:F,sseHub:K9,cancelBroadcast:H,tokenStorage:h,automationEventDispatcher:J0,mountDevAssets:nK(),mcpAuth:$0,oauthProxyHandler:lA8,watchHandler:nA8,betterAuthProtectedResourceHandler:T,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",A1),E.notFound((X0)=>{return X0.json({error:"Not Found",path:X0.req.path},404)}),E.onError(ED8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([K9.stop(),QP?Promise.resolve(QP()).finally(()=>{QP=null}):Promise.resolve()]),U)await U.drain().catch((X0)=>console.error("[shutdown] NATS drain error:",X0));console.log("[shutdown] Flushing telemetry..."),await DJ().catch((X0)=>console.error("[shutdown] Telemetry flush error:",X0)),console.log("[shutdown] Closing database..."),await eD(Z).catch((X0)=>console.error("[shutdown] Database close error:",X0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await eO.registerQueue(LK,{partitionQueue:!0,concurrency:JD1,minPollingIntervalMs:GD1}),await eO.registerQueue(BK,{partitionQueue:!0,concurrency:tL1,priorityEnabled:!0}),await eO.registerQueue(uB,{workerConcurrency:T0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await eO.registerQueue(lB,{workerConcurrency:T0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await eO.registerQueue(Kw,{partitionQueue:!0,concurrency:S$8}),await eO.registerQueue(zT,L08),await tA1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((X0)=>eO.deleteQueue(X0))),await KD1(Z.pool),c2$().catch((X0)=>{console.error("[studio-pack-backfill] failed:",X0)}),mG$().catch((X0)=>{console.error("[org-fs] public-sets boot sync kick failed:",X0)})}})}var cA8,hA8=5000,QP=null,lA8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),X=Q[Q.length-1],Y=$.get("studioContext");if(!Y)Y=await aQ.create($.req.raw),$.set("studioContext",Y);let J=$.req.param("org")?Y.organization?.id:void 0,G=await Y.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(X==="register"&&G.oauth_config?.clientId){let h=await $.req.json().catch(()=>({}));return $.json({...typeof h==="object"&&h!==null?h:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let K=await hn(G.connection_url),W,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(K.ok)W=(await K.json()).authorization_servers?.[0];if(!W)W=H.origin;let N=await Z90(W);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(X==="authorize")O=B.authorization_endpoint;else if(X==="token")O=B.token_endpoint;else if(X==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${X}`},404);let D=fB8(O);if(D)return D;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,X==="authorize"){let h=w.searchParams.get("redirect_uri");if(h){let g=T0().baseUrl??j.origin;try{if(!pA8(new URL(h),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",h)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(tL8(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 A=$.req.header("Authorization");if(A)E.Authorization=A;let P,T=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(X==="token"&&z?.includes("application/x-www-form-urlencoded")){if(A?.toLowerCase().startsWith("basic "))try{let d=atob(A.slice(6).trim()),W0=d.indexOf(":");if(W0!==-1){let P0=decodeURIComponent(d.slice(0,W0)),J0=decodeURIComponent(d.slice(W0+1));T=P0||null,q=J0||null}}catch{}let h=await $.req.formData();if(h.has("resource"))h.set("resource",U);let g=h.get("client_id"),l=h.get("client_secret");if(typeof g==="string"&&g)T=g;if(typeof l==="string"&&l)q=l;let u=new URLSearchParams;for(let[d,W0]of h.entries())u.append(d,W0.toString());P=u.toString()}else if(X==="register"&&z?.toLowerCase().includes("application/json")){let h=await Y.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 u=typeof l==="object"&&l!==null&&!Array.isArray(l);if(P===void 0&&!u)P=g;if(P===void 0){let d=l,W0=d.metadata&&typeof d.metadata==="object"?d.metadata:{};d.metadata={...W0,organization_id:G.organization_id,...h?.slug?{organization_slug:h.slug}:{},...h?.name?{organization_name:h.name}:{}},P=JSON.stringify(d),E["Content-Type"]="application/json"}}else P=$.req.raw.body??void 0;let f=await fetch(w.toString(),{method:$.req.method,headers:E,body:P,duplex:"half",redirect:"manual"}),C=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[h,g]of f.headers.entries())if(!V.includes(h.toLowerCase()))C.set(h,g);if(X==="token"&&f.ok){let h=await f.text();try{let g=JSON.parse(h);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,u=null;try{u=await un(G.connection_url)??O}catch{u=O}let d={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:T,clientSecret:q,tokenEndpoint:u};await new P9(Y.db,Y.vault).upsert(d)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(h,{status:f.status,statusText:f.statusText,headers:C})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:C})},nA8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let X=Z.organization?.id;if(!X)return $.json({error:"organization id missing"},400);let Y=$.req.query("types"),J=Y?Y.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!TN(X)||!await AN(Z)))return $.json({error:"forbidden"},403);let K=G?DS0:X;if(G)PO({action:"watch_all_orgs",actorUserId:Q,actorOrgId:X,targetOrgId:"all"});let W=crypto.randomUUID();return oO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:W,organizationId:X,typePatterns:J,connectedAt:new Date().toISOString()})}),!K9.add({id:W,organizationId:K,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(()=>{K9.remove(K,W)})}})){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),K9.remove(K,W)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),K9.remove(K,W),N()})})})},gD5,lD5,cD5=()=>uD5(b8),mD5=()=>hD5(b8);var oA8=L(()=>{w8();W$();dG$();kL8();vL8();lL8();d60();FB1();nL8();Q60();D9();od();Y4();U8();hf0();eL8();BD1();w3();eU();EA1();jX();h6();D6();MA1();VO8();CO8();lO8();_A1();QD8();uA1();wD8();pA1();mH();Af0();nA1();zD8();lf0();pP8();rA1();tP8();sC0();u60();$T8();Z_0();MR1();QT8();RR1();JT8();LT8();wT8();jT8();zT8();TT8();RT8();ST8();Q21();xT8();qR1();PR1();IG0();rT8();dJ();eV0();SB1();y$0();h$0();jD1();sT8();$A8();dA1();KA8();lL1();WA8();er();Ee();zO();h9();uT1();BA8();wA8();xU0();zq1();WK();oA1();EO();gL1();xU0();OC0();D51();w51();EA8();Gm();TA8();Lt();EA1();Bp();Vp();GC0();cA8=_(tB(),1);gD5=new bD5,lD5=new Set([LK,BK,uB,lB,Kw,zT])});var eA8={};K0(eA8,{resolveClientDir:()=>rD5,resolveAssetPathWithTraversalCheck:()=>sA8,isPathWithinDirectory:()=>rA8,createAssetHandler:()=>sD5});import{resolve as XZ0,dirname as iD5,join as pD5,extname as nD5,basename as tD5,sep as aA8}from"path";function oD5($,Z){if($===Z||tD5($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${aA8}assets${aA8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function rA8($,Z){let Q=XZ0(Z),X=XZ0($);return X===Q||X.startsWith(Q+"/")}function sA8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,X=XZ0(Z,Q);if(!rA8(X,Z))return null;return X}function rD5($,Z="../client"){let Q=new URL($),X=iD5(Q.pathname);return XZ0(X,Z)}function sD5($={}){let{env:Z="production",clientDir:Q=aD5,isServerPath:X=()=>!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),K;try{K=decodeURIComponent(G.pathname)}catch{return null}if(X(K))return null;let W=sA8({requestPath:K,clientDir:Q});if(!W)return null;let H=pD5(W,"index.html"),F=XZ0(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(nD5(W))?[H,F]:[];for(let O of[W,...B])try{let D=Bun.file(O);if(await D.exists())return new Response(D,{headers:oD5(O,F)})}catch{}if(K.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var aD5="./dist/client";var $28=()=>{};var Z28={};K0(Z28,{tryUpgradePreviewWs:()=>Jw5,tryHandlePreviewHttp:()=>Yw5,previewWebSocketHandler:()=>Gw5,parsePreviewBaseDomain:()=>Xw5,isPreviewWsData:()=>Ay0,extractHandleFromHost:()=>Mq1});function Zw5($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function Qw5(){return new Response($w5,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function Xw5($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let X=Q.hostname;if($.includes("{handle}")){let Y=X.indexOf(".");if(Y<=0||Y===X.length-1)return null;return X.slice(Y+1)}return X}function Mq1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),X=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!X.endsWith(J))return null;let G=X.slice(0,X.length-J.length);if(!G||G.includes("."))return null;return G}async function Yw5($,Z){let Q=Mq1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let X=await Z.getRunner();if(!X)return JZ0(503,"preview proxy not configured");let Y=await X.proxyPreviewRequest(Q,$);if(Y.headers.get(Sy)&&Zw5($))return Qw5();return Y.headers.delete(Sy),Y}function JZ0($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Ay0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function Jw5($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let X=Mq1($.headers.get("host"),Q.baseDomain);if(!X)return null;let Y=await Q.getRunner();if(!Y)return JZ0(503,"preview proxy not configured");let J=await Y.resolvePreviewUpstreamUrl(X);if(!J)return JZ0(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return JZ0(404,"not found");let K=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,W=$.headers.get("sec-websocket-protocol"),H=W?W.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:K,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return JZ0(426,"upgrade failed");return}function YZ0($,Z,Q,X){if(Z.closed)return;Z.closed=!0;try{$.close(Q,X)}catch{}try{Z.upstream?.close()}catch{}}var eD5=256,$w5='<!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>',Gw5;var Q28=L(()=>{wF1();Gw5={open($){let Z=$.data;if(!Ay0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(X){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${X instanceof Error?X.message:String(X)}`),YZ0($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let X=Z.pending.shift();if(X!==void 0)Q.send(X)}}),Q.addEventListener("message",(X)=>{if(Z.closed)return;$.send(X.data)}),Q.addEventListener("close",(X)=>{YZ0($,Z,X.code||1000,X.reason||"")}),Q.addEventListener("error",()=>{YZ0($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!Ay0(Q))return;let X=Q.upstream;if(X&&X.readyState===WebSocket.OPEN){X.send(Z);return}if(Q.pending.length>=eD5){YZ0($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!Ay0(Z))return;YZ0($,Z,1000,"")}}});var Rw5={};import{existsSync as Lw5}from"fs";function _q1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}function ww5($){let Z=new Headers($.headers);for(let[Q,X]of Object.entries(Dw5))Z.set(Q,X);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}async function Aw5($){let Z;try{Z=await Kw5.create({systemDatabaseUrl:_q1(PG.databaseUrl,PG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:BK,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let X=Q.map((Y)=>Y.workflowID);await Z.resumeWorkflows(X,{queueName:BK}),console.log(`[shutdown] re-enqueued ${X.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,X)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function qy0($){if(G28)return;G28=!0,console.log(`
|
|
5762
5762
|
[shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),X=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);X.unref?.();let Y=0;try{Tw5(),Ry0.markShuttingDown();let J=TV1(PG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await S$(J),await Pw5.stop(!0);let G=GZ0.executorID;await GZ0.shutdown(),await Aw5(G),await Ry0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),Y=1}clearTimeout(X),process.exit(Y)}var PG,GZ0,Kw5,Ww5,Hw5,Fw5,Uw5,Nw5,K28,Bw5,X28,W28,Ow5,Dw5,jw5,Ew5,zw5,Iq1,Vq1,H28,F28,Y28,Ry0,kq1,J28,Sq1=5,Cq1=0,Pw5,Tw5,G28=!1;var U28=L(async()=>{w8();jQ$();PQ$();W$();Zu();h6();VQ$();PG=T0();e4$();({DBOS:GZ0,DBOSClient:Kw5}=await import("@dbos-inc/dbos-sdk"));Ww5=[LK,BK,uB,lB,Kw,zT],Hw5=PG.dispatchRole==="worker"?Ww5:PG.dispatchRole==="api"?[]:void 0;GZ0.setConfig(wQ$({systemDatabaseUrl:_q1(PG.databaseUrl,PG.databasePgSsl),poolSize:PG.dbosPoolSize,executorID:PG.podName,listenQueues:Hw5}));({createApp:Fw5}=await Promise.resolve().then(() => (oA8(),tA8))),{isServerPath:Uw5}=await Promise.resolve().then(() => (IG0(),b4$)),{createAssetHandler:Nw5,resolveClientDir:K28}=await Promise.resolve().then(() => ($28(),eA8)),Bw5=PG.port,X28=K28(import.meta.url,"../client"),W28=Lw5(X28)?X28:K28(import.meta.url,"../dist/client"),Ow5=Nw5({clientDir:W28,isServerPath:Uw5}),Dw5={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};({parsePreviewBaseDomain:jw5,tryHandlePreviewHttp:Ew5,tryUpgradePreviewWs:zw5,previewWebSocketHandler:Iq1,isPreviewWsData:Vq1}=await Promise.resolve().then(() => (Q28(),Z28))),{getOrInitSharedRunner:H28}=await Promise.resolve().then(() => ($F(),qd$)),F28=jw5(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),Y28={baseDomain:F28??"",getRunner:H28};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())H28().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});Ry0=await Fw5({clientDir:W28}),kq1=process.env.DBOS_CONDUCTOR_KEY?.trim(),J28=process.env.DBOS_CONDUCTOR_URL?.trim();await zQ$({databaseUrl:_q1(PG.databaseUrl,PG.databasePgSsl)},()=>GZ0.launch({...kq1?{conductorKey:kq1}:{},...kq1&&J28?{conductorURL:J28}:{}}));console.log(`[dbos] application version: ${GZ0.applicationVersion}`);await S8(async()=>{Cq1++;try{return await Ry0.initDbos()}catch($){let Z=Cq1>=Sq1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${Cq1}/${Sq1} failed, ${Z}`,$),$}},{maxAttempts:Sq1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!PG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (ia(),pG0));console.log("");for(let Z of $())console.log(Z)}Pw5=Bun.serve({idleTimeout:0,port:Bw5,hostname:"0.0.0.0",fetch:async($,Z)=>{if(F28){let X=await zw5($,Z,Y28);if(X===void 0)return;if(X)return X;let Y=await Ew5($,Y28);if(Y)return Y}let Q=await Ow5($);if(Q)return ww5(Q);return Ry0.fetch($,{server:Z})},websocket:{open($){if(Vq1($.data))Iq1.open($)},message($,Z){if(Vq1($.data))Iq1.message($,Z)},close($){if(Vq1($.data))Iq1.close($)}},development:!1}),Tw5=IQ$();if(PG.localMode)Promise.resolve().then(() => (Yg(),nS0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let X=await Q();if(X>0)console.log(`[local-mode] cleared ${X} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let Y=await $()}catch(X){console.error("Failed to seed local mode:",X)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (Yg(),nS0));Z()}catch{}});process.on("SIGTERM",()=>qy0("SIGTERM"));process.on("SIGINT",()=>qy0("SIGINT"));process.on("SIGHUP",()=>qy0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),qy0("uncaughtException")})});var vq1={};K0(vq1,{startServer:()=>Mw5,interceptConsoleForTui:()=>qw5});function qw5(){let{log:$,warn:Z,error:Q}=console;function X(...Y){let J=Y.map((G)=>typeof G==="string"?G:Bun.inspect(G)).join(" ");for(let G of J.split(`
|
|
5763
5763
|
`)){let K=Bun.stripANSI(G).trim();if(!K)continue;Jw({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}return console.log=X,console.warn=X,console.error=X,P30(!0),()=>{console.log=$,console.warn=Z,console.error=Q,P30(!1)}}async function Mw5($){let Z=await Hr(Number($.port)),{settings:Q,services:X}=await z30({port:String(Z),home:$.home,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui});for(let Y of X)wT({name:Y.name,status:"ready",port:Y.port});Kr(),await U28().then(() => Rw5),Wr(`http://localhost:${Q.port}`)}var xq1=L(()=>{M11();jT();S11()});import{parseArgs as Iw5}from"util";import{homedir as fq1}from"os";import{join as B28}from"path";function Cy0($){if($.noTui)return!1;return $.isTty===!0}function kt($,Z,Q){if(Z===void 0)return;let X=Number(Z);if(!Number.isSafeInteger(X)||X<=0||Q!==void 0&&X>Q)throw Error(`Invalid --${$} "${Z}" \u2014 must be a positive integer${Q!==void 0?` up to ${Q}`:""}.`);return X}var{values:XZ,positionals:KZ0}=Iw5({args:process.argv.slice(2),options:{port:{type:"string",short:"p",default:process.env.PORT||"3000"},"vite-port":{type:"string",default:process.env.VITE_PORT||"4000"},home:{type:"string"},"base-url":{type:"string"},help:{type:"boolean",short:"h",default:!1},version:{type:"boolean",short:"v",default:!1},"skip-migrations":{type:"boolean",default:!1},"no-tui":{type:"boolean",default:!1},"no-local-mode":{type:"boolean",default:!1},target:{type:"string"},"dry-run":{type:"boolean",default:!1},batch:{type:"string"},limit:{type:"string"},org:{type:"string"}},allowPositionals:!0});try{kt("port",XZ.port,65535),kt("vite-port",XZ["vite-port"],65535)}catch($){console.error($.message),process.exit(1)}if(XZ.help)console.log(`
|
|
5764
5764
|
Deco CMS \u2014 Open-source control plane for your AI agents
|