decocms 4.369.0 → 4.370.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-C2lWpOgU.js → AlertCircle-1tXYA983.js} +1 -1
- package/dist/client/assets/{AreaChart-CDW2X2rN.js → AreaChart-DYf14-A3.js} +1 -1
- package/dist/client/assets/{ArrowLeft-CU3-fYWo.js → ArrowLeft-WIs9fDWZ.js} +1 -1
- package/dist/client/assets/{ArrowRight-qxhrF_kb.js → ArrowRight-DG-WBoIq.js} +1 -1
- package/dist/client/assets/{ArrowUp-BhS_1mYc.js → ArrowUp-Bmzltodu.js} +1 -1
- package/dist/client/assets/{Check-rqGVCswn.js → Check-xTJ1BAFS.js} +1 -1
- package/dist/client/assets/{CheckCircle-M7bvdMAJ.js → CheckCircle-TQcdsUhf.js} +1 -1
- package/dist/client/assets/{ChevronRight-B0oqU00R.js → ChevronRight-DCqx7EGT.js} +1 -1
- package/dist/client/assets/{ChevronUp-DfxfQUMI.js → ChevronUp-3UEDdaPB.js} +1 -1
- package/dist/client/assets/{Copy01-DVkNiM-0.js → Copy01-PeYhBCOM.js} +1 -1
- package/dist/client/assets/{CreditCard01-eB7EWH17.js → CreditCard01-B_48CqcT.js} +1 -1
- package/dist/client/assets/{Database01-D35ryavs.js → Database01-D7iG5IyO.js} +1 -1
- package/dist/client/assets/{DotsVertical-DZU1UmXa.js → DotsVertical-Cmi2iJK5.js} +1 -1
- package/dist/client/assets/{Download01-DwQ1G6ye.js → Download01-CYV7uDn8.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-CJYWuNcr.js → ErrorBarContext-Cvf7aqY-.js} +1 -1
- package/dist/client/assets/{Eye-CtH1p9zC.js → Eye-Mzs0aJc5.js} +1 -1
- package/dist/client/assets/{File02-DxwsPnN4.js → File02-CNlyjEK_.js} +1 -1
- package/dist/client/assets/{GitBranch01-addX0JVd.js → GitBranch01-CxhsRVwc.js} +1 -1
- package/dist/client/assets/{Globe01-BVQZQLys.js → Globe01-v8HQ0xMJ.js} +1 -1
- package/dist/client/assets/{HardDrive-CgCPR9N9.js → HardDrive-C7VatbUo.js} +1 -1
- package/dist/client/assets/{Image01-CrMDp3Vo.js → Image01-MSm7Xy3L.js} +1 -1
- package/dist/client/assets/{Key01-DhyF5uqa.js → Key01-DRBJEGwt.js} +1 -1
- package/dist/client/assets/{Link01-hmn4gufb.js → Link01-C3EHqcJH.js} +1 -1
- package/dist/client/assets/{LinkExternal01-mgQOyqV5.js → LinkExternal01-C3fl891t.js} +1 -1
- package/dist/client/assets/{MessageCircle01-DDAnC61_.js → MessageCircle01-Cmf8JuHq.js} +1 -1
- package/dist/client/assets/{Monitor01-d_wX2Fmi.js → Monitor01-DjiqQChm.js} +1 -1
- package/dist/client/assets/{Package-qMBF9Z41.js → Package-Df1Gh2IO.js} +1 -1
- package/dist/client/assets/{Palette-DpdMsEg8.js → Palette-HbqVhRK2.js} +1 -1
- package/dist/client/assets/{Play--LDHvpGS.js → Play-BlYc7EZj.js} +1 -1
- package/dist/client/assets/{Plus-CoArXql3.js → Plus-CpSwTr0T.js} +1 -1
- package/dist/client/assets/{Printer-DgFSeDVy.js → Printer-N721Xhfh.js} +1 -1
- package/dist/client/assets/{SearchLg-Cfc9ks4j.js → SearchLg-CLkCoNgY.js} +1 -1
- package/dist/client/assets/{SearchMd-B17DCXA1.js → SearchMd-DprD9K_4.js} +1 -1
- package/dist/client/assets/{Sector-DKNnM_B8.js → Sector-B5QMzQy1.js} +1 -1
- package/dist/client/assets/{Settings02-DS55cdFG.js → Settings02-BVyAPz4l.js} +1 -1
- package/dist/client/assets/{Share07-TiIVn1wF.js → Share07-rj7fj4qY.js} +1 -1
- package/dist/client/assets/{Shield01-CH_njjpt.js → Shield01-CVKjCa0y.js} +1 -1
- package/dist/client/assets/{Stars01-BoUj0aQ2.js → Stars01-DO6CR_Qj.js} +1 -1
- package/dist/client/assets/{Sun-Bf5fAE_C.js → Sun-B_gCoMT5.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-WLp0jVF6.js → SwitchHorizontal01-BtDvtERO.js} +1 -1
- package/dist/client/assets/{Tool01-JAyMpj3A.js → Tool01-VOdgFe0j.js} +1 -1
- package/dist/client/assets/{Tool02-BpsCMUE8.js → Tool02-1JJuM2Jx.js} +1 -1
- package/dist/client/assets/{Trash01-B_0aDdmF.js → Trash01-CPzbb236.js} +1 -1
- package/dist/client/assets/{TrendUp01-DGRDTPSm.js → TrendUp01-DTKK0BbY.js} +1 -1
- package/dist/client/assets/{Upload01-DEQ3dwz0.js → Upload01-BGp95TSG.js} +1 -1
- package/dist/client/assets/{User01-CBghCDg6.js → User01-CIu4j4bY.js} +1 -1
- package/dist/client/assets/{UserSquare-DQQQtBnB.js → UserSquare-fo3u6U30.js} +1 -1
- package/dist/client/assets/{Users01-BOkEXzvv.js → Users01-BFn7BMw2.js} +1 -1
- package/dist/client/assets/{Users03-DwyDrG4M.js → Users03-CkPCcVwN.js} +1 -1
- package/dist/client/assets/{X-Bo-nL9WD.js → X-BK5U4CXr.js} +1 -1
- package/dist/client/assets/{XCircle-tKzUjg2f.js → XCircle-BO_JoMNT.js} +1 -1
- package/dist/client/assets/{XClose-DrZOiEWO.js → XClose-DKf6lRYV.js} +1 -1
- package/dist/client/assets/{Zap-C3oJkRYj.js → Zap-Cmej57-r.js} +1 -1
- package/dist/client/assets/{ZoomOut-BhJBCe49.js → ZoomOut-DnUqC8ul.js} +1 -1
- package/dist/client/assets/{access-gate-DFPEFDON.js → access-gate-DNVd82a-.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-ASPwZQfa.js → add-connection-dialog-BLTjYSH1.js} +1 -1
- package/dist/client/assets/{agent-analytics-CCyYYc0N.js → agent-analytics-CkQGSo_n.js} +1 -1
- package/dist/client/assets/agent-app-BhGS4mQ9.js +1 -0
- package/dist/client/assets/{agent-assets-DikxnyCb.js → agent-assets-CUvTaKlG.js} +1 -1
- package/dist/client/assets/{agent-automation-k56DIR-3.js → agent-automation-BWknYPi6.js} +1 -1
- package/dist/client/assets/{agent-automations-a2VFoLfj.js → agent-automations-DG3VrbcX.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-Bt53VdX4.js → agent-connect-sources-DOhnax4O.js} +1 -1
- package/dist/client/assets/agent-deck-Bqt-SDOn.js +1 -0
- package/dist/client/assets/{agent-e2e-ENCxB69L.js → agent-e2e-Cscw-cIr.js} +1 -1
- package/dist/client/assets/{agent-experiments-OZmD0UEu.js → agent-experiments-WP_CUdVh.js} +1 -1
- package/dist/client/assets/agent-file-CJeRH4S4.js +1 -0
- package/dist/client/assets/{agent-git-Cm4zJ1tF.js → agent-git-BbNQJ_lx.js} +1 -1
- package/dist/client/assets/{agent-hosting-VggutAo8.js → agent-hosting-BN9JQM58.js} +1 -1
- package/dist/client/assets/{agent-icon-BpOMBDFI.js → agent-icon-DVpNns9U.js} +1 -1
- package/dist/client/assets/agent-library-file-BnBTHelr.js +1 -0
- package/dist/client/assets/{agent-monitor-DH5aJvld.js → agent-monitor-DHOuLLWJ.js} +1 -1
- package/dist/client/assets/{agent-overview-DiXRzsSz.js → agent-overview-Bxbjzi_h.js} +1 -1
- package/dist/client/assets/agent-settings-sJcx6kKb.js +1 -0
- package/dist/client/assets/{agent-site-editor-_xasoUjO.js → agent-site-editor-CICC8l8c.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-BI4vvGu8.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-B10w54cK.js → agent-site-editor-content-B3TDs3qI.js} +2 -2
- package/dist/client/assets/{agent-site-editor-preview-ZOZbioaU.js → agent-site-editor-preview-BPXVqm7J.js} +3 -3
- package/dist/client/assets/agent-view-BfULp7pV.js +1 -0
- package/dist/client/assets/{agent-view-guard-DOyeGkcw.js → agent-view-guard-Dkma4AN4.js} +1 -1
- package/dist/client/assets/{agents-list-DqBw8PZ3.js → agents-list-BpqceprA.js} +1 -1
- package/dist/client/assets/{ai-providers-DduOcV7L.js → ai-providers-Dsvao1Pr.js} +1 -1
- package/dist/client/assets/{alert-DR250ZD_.js → alert-CobWIC47.js} +1 -1
- package/dist/client/assets/{alert-dialog-DCDCFOfA.js → alert-dialog-wT7jiyfA.js} +1 -1
- package/dist/client/assets/api-keys-BVrNC9rq.js +1 -0
- package/dist/client/assets/{api-keys-FoUBI_te.js → api-keys-CkjHxdGu.js} +1 -1
- package/dist/client/assets/app-editor-CtV10j6O.js +1 -0
- package/dist/client/assets/{asset-utils-NJ9bu6ns.js → asset-utils-LA8ZX19y.js} +1 -1
- package/dist/client/assets/{auth-catchall-BioA_BsD.js → auth-catchall-DQ5akX44.js} +1 -1
- package/dist/client/assets/{auth-entry-DcLIsH9_.js → auth-entry-D7I605v8.js} +1 -1
- package/dist/client/assets/{auth-split-layout-B8I691Ut.js → auth-split-layout-C5ka_xbG.js} +1 -1
- package/dist/client/assets/{auth-D1dR15pD.js → auth-xyflLJOA.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-x4sNo_pm.js → authenticate-and-persist-oauth-BYffRyL1.js} +1 -1
- package/dist/client/assets/{automation-list-row-BEMC3EgI.js → automation-list-row-BiCHvg1E.js} +1 -1
- package/dist/client/assets/{automation-runs-WYHaFK8K.js → automation-runs-InKaagrd.js} +1 -1
- package/dist/client/assets/{automations-Dqe6pfAQ.js → automations-DczFyfvV.js} +1 -1
- package/dist/client/assets/{autosend-9tjhav1j.js → autosend-jDz9w5es.js} +1 -1
- package/dist/client/assets/{avatar-C1hmceI2.js → avatar-59ieBVuI.js} +1 -1
- package/dist/client/assets/{badge-BomIjFAl.js → badge-Dg-GvhTL.js} +1 -1
- package/dist/client/assets/{block-document-4oL_s25U.js → block-document-DXGd3rGx.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-DIEtTn0R.js → blocks-preview-workspace-context-CGnbNto7.js} +1 -1
- package/dist/client/assets/{breadcrumb-DCZtPfOi.js → breadcrumb-Bi94Zhve.js} +1 -1
- package/dist/client/assets/{buckets-ChXmlHnF.js → buckets-7gYXanZU.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-YYYm2rSv.js → build-improve-prompt-doc-B8PsP5N-.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-CnyffYID.js → bulk-category-panel-BsAoIiTM.js} +1 -1
- package/dist/client/assets/{calendar-DrfD0gKj.js → calendar-DBLoQgX7.js} +1 -1
- package/dist/client/assets/{capability-load-error-BggXhk6R.js → capability-load-error-ClikwkEo.js} +1 -1
- package/dist/client/assets/{cards-Bj4PSHlI.js → cards-CuGpCt1-.js} +1 -1
- package/dist/client/assets/category-editor-CVIRcUyy.js +1 -0
- package/dist/client/assets/{chart-ny1HYNGx.js → chart-5IbQx_10.js} +1 -1
- package/dist/client/assets/{chat-context-CHasUyhx.js → chat-context-CDM4lm2n.js} +1 -1
- package/dist/client/assets/{chat-draft-CHgo5Gd2.js → chat-draft-BOoYvIFQ.js} +1 -1
- package/dist/client/assets/{checkbox-B1wYaCDK.js → checkbox-V9d9pvk-.js} +1 -1
- package/dist/client/assets/{choose-editor-DoL1TZ9w.js → choose-editor-BWtsjN8U.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DS3vhvpo.js → cli-auth-success-BWkwAUAb.js} +1 -1
- package/dist/client/assets/{client-icons-D13XCyeZ.js → client-icons-DlR9x0c9.js} +1 -1
- package/dist/client/assets/{collapsible-oR0EnOeU.js → collapsible-g-wqysdA.js} +1 -1
- package/dist/client/assets/{collection-detail-DrGJM4k3.js → collection-detail-CDEHrMll.js} +1 -1
- package/dist/client/assets/{collection-display-button-CsKOdwAm.js → collection-display-button-Dw6PWWpn.js} +1 -1
- package/dist/client/assets/{collection-search-vqyVPQWx.js → collection-search-Bp-rPhpb.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DQRic-3G.js → collection-table-wrapper-D4FVwO4z.js} +1 -1
- package/dist/client/assets/{collection-tabs-B4SGwBT4.js → collection-tabs-Qlq9sULI.js} +1 -1
- package/dist/client/assets/{command-palette-store-Bvf6TthC.js → command-palette-store-CNy-rAUx.js} +1 -1
- package/dist/client/assets/{command-D7wuXn8e.js → command-snMRwniz.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-C_JqwaN8.js → companion-mcps-section-CqLiiBRm.js} +1 -1
- package/dist/client/assets/{connect-BSJtc-Kh.js → connect-CWxrEdxr.js} +1 -1
- package/dist/client/assets/{connect-layout-DypL-2eq.js → connect-layout-BmmfQzZ9.js} +1 -1
- package/dist/client/assets/{connection-Bgf6l-aA.js → connection-CPQblQ3U.js} +1 -1
- package/dist/client/assets/{connection-card-B4u8rRUh.js → connection-card-BMhM9YLg.js} +1 -1
- package/dist/client/assets/{connection-detail-Bwpc-UOE.js → connection-detail-CQ45HLaK.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CxGOMB-z.js → connection-form-helpers-DWufC45a.js} +1 -1
- package/dist/client/assets/{connections-DgltL0l6.js → connections-Plo1peRz.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-DDeZabgH.js → create-organization-dialog-DhreHUKx.js} +1 -1
- package/dist/client/assets/{decofile-api-DLt1kHTP.js → decofile-api-Dtkqfmem.js} +1 -1
- package/dist/client/assets/{decopilot-32iWDPvx.js → decopilot-CqhqF__3.js} +1 -1
- package/dist/client/assets/{dialog-BypQVVb3.js → dialog-CAXkcJ8S.js} +1 -1
- package/dist/client/assets/{discover-BMEMJPa4.js → discover-Zc5NK4lZ.js} +1 -1
- package/dist/client/assets/{domain-settings-BZEUNcNC.js → domain-settings-DQKHqBu0.js} +1 -1
- package/dist/client/assets/{download-app-dialog-CG6o1bT8.js → download-app-dialog-B7Asc5GB.js} +1 -1
- package/dist/client/assets/{drawer-6NSm3eVL.js → drawer-hcbNpS4x.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CDMf13yl.js → dropdown-menu-pF99TyBi.js} +1 -1
- package/dist/client/assets/{editor-7qaS_3d6.js → editor-B5cNa9eB.js} +1 -1
- package/dist/client/assets/{empty-state-BDUM4Rtf.js → empty-state-Bt0Hh6b-.js} +1 -1
- package/dist/client/assets/{empty-state-DAyCGINn.js → empty-state-D477CT2g.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Cj-WBnCd.js → extract-connection-data-BSTcyitO.js} +1 -1
- package/dist/client/assets/{feature-gate-D_SUayNN.js → feature-gate-DLsUeDhl.js} +1 -1
- package/dist/client/assets/{feature-paywall-DBUFwc96.js → feature-paywall-C_iwpT-v.js} +1 -1
- package/dist/client/assets/{file-explorer-BcL5S1Lu.js → file-explorer-RD2hEKmq.js} +1 -1
- package/dist/client/assets/{file-preview-CXIhtRSX.js → file-preview-DiyPiUfU.js} +1 -1
- package/dist/client/assets/{file-share-button-BGcDBM9E.js → file-share-button-Dz-lABwq.js} +1 -1
- package/dist/client/assets/{file-type-icon-Dj35nCU5.js → file-type-icon-B_0Tk-vm.js} +1 -1
- package/dist/client/assets/{folder-icon-DIhm6Rxv.js → folder-icon-vZmvYwxx.js} +1 -1
- package/dist/client/assets/{form-DmbG84E2.js → form-ChdC5Ot0.js} +1 -1
- package/dist/client/assets/{gateway-client-BOFQMVVW.js → gateway-client-CbIQqHjd.js} +1 -1
- package/dist/client/assets/{general-Bf_5EGhN.js → general-B6ZXV676.js} +1 -1
- package/dist/client/assets/{github-icon-CLv0eSZl.js → github-icon-BjAkFtmY.js} +1 -1
- package/dist/client/assets/{home-BF4Duqdv.js → home-B_r09GAE.js} +1 -1
- package/dist/client/assets/{hooks-D3jKGwrd.js → hooks-C9H07Xup.js} +1 -1
- package/dist/client/assets/{hooks-DxeclenL.js → hooks-CJD0QTpM.js} +1 -1
- package/dist/client/assets/{index-ClkkZHTp.js → index-2szvgJ36.js} +1 -1
- package/dist/client/assets/{index-FdPo9z4k.js → index-BE6wTVdK.js} +1 -1
- package/dist/client/assets/{index-DG9fNIPE.js → index-BQ-uiPPS.js} +1 -1
- package/dist/client/assets/{index-BGFPP1Jg.js → index-BZTfQcMg.js} +1 -1
- package/dist/client/assets/{index-kJsMzJ4Q.js → index-Bmh1G5Mq.js} +1 -1
- package/dist/client/assets/{index-CmFEcUkq.js → index-CPdgPCXJ.js} +1 -1
- package/dist/client/assets/{index-CFIVs_vz.js → index-CZLQtuJd.js} +1 -1
- package/dist/client/assets/{index-Cx9SAtFe.js → index-CiT2vzt3.js} +1 -1
- package/dist/client/assets/{index-BAtwkSnx.js → index-CrHH8NH4.js} +1 -1
- package/dist/client/assets/{index-C7PQ_4p5.js → index-D83Vro8v.js} +1 -1
- package/dist/client/assets/{index-ScYyE5_9.js → index-DEl7JknG.js} +1 -1
- package/dist/client/assets/{index-G2UyMegc.js → index-DNLN-S-y.js} +4 -4
- package/dist/client/assets/{index-OuSBpqWq.js → index-DVZdnl-0.js} +1 -1
- package/dist/client/assets/{index-BtC4pKfK.js → index-DaTXtDEw.js} +1 -1
- package/dist/client/assets/{index-CU4letdV.js → index-dYq-2clQ.js} +1 -1
- package/dist/client/assets/{index-redirect-bccWPJZE.js → index-redirect-aGxomp8_.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-CipffcFb.js → infiniteQueryObserver-CpLrJakx.js} +1 -1
- package/dist/client/assets/{infra-billing-C7y2RsFa.js → infra-billing-DOAjXbOj.js} +1 -1
- package/dist/client/assets/{input-DPdp37UT.js → input-BonEB90_.js} +1 -1
- package/dist/client/assets/{input-CcXFxYa-.js → input-D4hQfAVG.js} +1 -1
- package/dist/client/assets/{input-zIb_hr24.js → input-ajyg1XWz.js} +1 -1
- package/dist/client/assets/{integration-icon-BCZH6zKn.js → integration-icon-BhhBPO6X.js} +1 -1
- package/dist/client/assets/{label-o7e96U_B.js → label-B38_j6k4.js} +1 -1
- package/dist/client/assets/{last-preview-page-Bxnbv0ml.js → last-preview-page-BlwcEUXN.js} +1 -1
- package/dist/client/assets/{layout-CFgn2paa.js → layout-DRo1vIrL.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-CjzNzANN.js → legacy-agents-deep-BXBmXVU8.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-RnStWp9c.js → legacy-main-redirect-DlNN_-xl.js} +1 -1
- package/dist/client/assets/{library-B_OBMdyZ.js → library-CJPMCiQ8.js} +1 -1
- package/dist/client/assets/{login-BMumoiUc.js → login-CK40CqT_.js} +1 -1
- package/dist/client/assets/{markdown-CQ65YS6u.js → markdown-DnP4canl.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-FvZ6aYt8.js → mcp-app-renderer-BWdxAEBu.js} +1 -1
- package/dist/client/assets/{mcp-oauth-ChqPPSp5.js → mcp-oauth-BAU13wtN.js} +1 -1
- package/dist/client/assets/{members-0iJvBjcA.js → members-DvQGNcot.js} +1 -1
- package/dist/client/assets/{message-templates-4UYjbQTF.js → message-templates-CyX6zDFO.js} +1 -1
- package/dist/client/assets/{mini-report-page-BEXjxlQK.js → mini-report-page-DzaKJWDH.js} +1 -1
- package/dist/client/assets/{mock-board-CktKGE_8.js → mock-board-CkAoka7C.js} +3 -3
- package/dist/client/assets/{monaco-editor-CYESZJnj.js → monaco-editor-dkXpmbQK.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CXlUFprB.js → monitoring-stats-row-B74YwkZo.js} +1 -1
- package/dist/client/assets/{multi-select-DGQwU68L.js → multi-select-CNlKmPI6.js} +1 -1
- package/dist/client/assets/{mustache-I-DupvWQ.js → mustache-jdd77gGw.js} +1 -1
- package/dist/client/assets/{oauth-callback-LXXALCwD.js → oauth-callback-D6MRSG5P.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-WYs4F8LI.js → oauth-callback-ai-provider-Db7gGErG.js} +1 -1
- package/dist/client/assets/{onboarding-CzLuREKQ.js → onboarding-TnkA-L5f.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-Dvi4DBSE.js → optimistic-project-sidebar-views-GQk-n4M-.js} +1 -1
- package/dist/client/assets/{org-file-open-context-CdEBkByA.js → org-file-open-context-BqSbRTEV.js} +1 -1
- package/dist/client/assets/{organization-choice-CZ6ST5l-.js → organization-choice-DJl2DFOQ.js} +1 -1
- package/dist/client/assets/{orgs-DW9NJKFV.js → orgs-BHt1QIg3.js} +1 -1
- package/dist/client/assets/page-seo-form-Bqz5780y.js +1 -0
- package/dist/client/assets/{pair-D3JXbeXT.js → pair-n03pUejQ.js} +1 -1
- package/dist/client/assets/{plan-ladder-1wlVOtKw.js → plan-ladder-xhrN5SGF.js} +1 -1
- package/dist/client/assets/{popover-C2wFF_xV.js → popover-U67IDJ4E.js} +1 -1
- package/dist/client/assets/{post-calendar-BlXJlwkw.js → post-calendar-Cf-G7gUH.js} +1 -1
- package/dist/client/assets/post-editor-CWeWjHTL.js +1 -0
- package/dist/client/assets/{preview-content-DSbCMNWp.js → preview-content-_5L2XhHD.js} +1 -1
- package/dist/client/assets/{preview-dialog-DYJe8uUk.js → preview-dialog-CQ_r0371.js} +1 -1
- package/dist/client/assets/{primitives-DVPuksja.js → primitives-DDDiRp7f.js} +1 -1
- package/dist/client/assets/{profile-CeJnHmAy.js → profile-Cmo35YQs.js} +1 -1
- package/dist/client/assets/{project-app-view-DESSEjQa.js → project-app-view-D47sWd3n.js} +1 -1
- package/dist/client/assets/{project-feed-CmHdVN_s.js → project-feed-gXwBJxZH.js} +1 -1
- package/dist/client/assets/{project-icon-C8HyVHnH.js → project-icon-CUpze2pS.js} +1 -1
- package/dist/client/assets/project-reports-BAs_aT3d.js +1 -0
- package/dist/client/assets/project-tasks-C616q5sS.js +1 -0
- package/dist/client/assets/{prompts-Bn5ZJjo-.js → prompts-Vek-xo9Z.js} +1 -1
- package/dist/client/assets/record-editor-BsEaMAHo.js +1 -0
- package/dist/client/assets/redirect-editor-Bb_iGjla.js +1 -0
- package/dist/client/assets/registry-C-4DLbnt.js +2 -0
- package/dist/client/assets/{registry-layout-DR1fRQbJ.js → registry-layout-C3CeJ5OF.js} +1 -1
- package/dist/client/assets/{reports-570Ovt3Y.js → reports-Cml7Wiu3.js} +1 -1
- package/dist/client/assets/reports-i23UwZDC.js +1 -0
- package/dist/client/assets/{reports-onboarding-MJjrf2kp.js → reports-onboarding-DF6DPnMO.js} +1 -1
- package/dist/client/assets/{reports-tab-DxUZKbbK.js → reports-tab-D_lacjcx.js} +2 -2
- package/dist/client/assets/{repositories-CDzzTlR_.js → repositories-DLUZ3cRD.js} +1 -1
- package/dist/client/assets/{repository-import-picker-CoY5lNVi.js → repository-import-picker-X0plkf32.js} +1 -1
- package/dist/client/assets/{repository-picker-D7IurOAz.js → repository-picker-DCx-uHf8.js} +1 -1
- package/dist/client/assets/{require-capability-Jd5jn77l.js → require-capability-D-wH4E29.js} +1 -1
- package/dist/client/assets/{required-auth-layout-bC7FFuKj.js → required-auth-layout-BKa_lviA.js} +1 -1
- package/dist/client/assets/{reset-password-CPOMBw7_.js → reset-password-CNEdFChi.js} +1 -1
- package/dist/client/assets/{resizable-D1tM3IzY.js → resizable-D6YVedQm.js} +1 -1
- package/dist/client/assets/{review-settings-83qlW37B.js → review-settings-eEN8ZWAb.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-CJ9IjXe-.js → rich-text-link-control-BPFG11VP.js} +1 -1
- package/dist/client/assets/{roles-CBTUFX9o.js → roles-CYnkRQ9t.js} +1 -1
- package/dist/client/assets/{route-DYX-ZJ6K.js → route-BYCK-8xU.js} +1 -1
- package/dist/client/assets/{route-DmCAYeiA.js → route-C-P9aRtD.js} +1 -1
- package/dist/client/assets/{route-C-U5U0LP.js → route-Ci7I6rpa.js} +1 -1
- package/dist/client/assets/runnable-block-editor-kEjVvsf_.js +16 -0
- package/dist/client/assets/{sandbox-lifecycle-context-ayfhIoek.js → sandbox-lifecycle-context-fADtVHc-.js} +1 -1
- package/dist/client/assets/{schema-Yg6eVXwq.js → schema-CcbI6epb.js} +1 -1
- package/dist/client/assets/{scroll-area-DFH0BIEE.js → scroll-area-B6T7h0kW.js} +1 -1
- package/dist/client/assets/{search-input-DxlhlhQD.js → search-input-Lb4TIfyo.js} +1 -1
- package/dist/client/assets/{secrets-DjqTFbwn.js → secrets-B1zKNX7T.js} +1 -1
- package/dist/client/assets/sections-editor-kpb1S6HX.js +2 -0
- package/dist/client/assets/{select-BBIddav0.js → select-Bg8FJZH4.js} +1 -1
- package/dist/client/assets/{select-model-DlxXqqd1.js → select-model-Bwzm3QxW.js} +1 -1
- package/dist/client/assets/seo-editor-DHGGE8fk.js +1 -0
- package/dist/client/assets/{settings-tab-BnEXhTTK.js → settings-tab-DBCrAv1j.js} +1 -1
- package/dist/client/assets/{sheet-C0L3YWis.js → sheet-BTynoFug.js} +1 -1
- package/dist/client/assets/{shell-layout-CsiRuIFo.js → shell-layout-CYdkOIB8.js} +1 -1
- package/dist/client/assets/{sidebar-BolrJwiT.js → sidebar-CWSdX6_H.js} +1 -1
- package/dist/client/assets/{skill-preview-BCCeJe6p.js → skill-preview-CyKjOfIX.js} +1 -1
- package/dist/client/assets/{skills-BX2p2Ul4.js → skills-DcqlBMNQ.js} +1 -1
- package/dist/client/assets/{sso-CVlC0aEo.js → sso-BZLvMG_D.js} +1 -1
- package/dist/client/assets/{store-CBNNdmsb.js → store-Dz2XPNUe.js} +1 -1
- package/dist/client/assets/store-registry-D9rK2p3L.js +2 -0
- package/dist/client/assets/{switch-Dhe_5yOi.js → switch-_AKgCBvM.js} +1 -1
- package/dist/client/assets/{synced-repos-g8U4jc_i.js → synced-repos-RgS5-hst.js} +1 -1
- package/dist/client/assets/{table-Dg_IemFq.js → table-glaZIeWJ.js} +1 -1
- package/dist/client/assets/{tabs-D03Qxk92.js → tabs-Dt95FMsw.js} +1 -1
- package/dist/client/assets/{task-board-CX4694hL.js → task-board-DMNgmO_8.js} +1 -1
- package/dist/client/assets/{task-route-EKbO6y_O.js → task-route-CauWOiGW.js} +1 -1
- package/dist/client/assets/{task-status-DPU68_gS.js → task-status-C920sz5t.js} +1 -1
- package/dist/client/assets/tasks-B58M8cFe.js +1 -0
- package/dist/client/assets/{tasks-C9tTegeu.js → tasks-B6Eh8qrn.js} +1 -1
- package/dist/client/assets/{textarea-qr7TLAIF.js → textarea-xT8-q2Sr.js} +1 -1
- package/dist/client/assets/{thread-intent-Dp5bGo2g.js → thread-intent-ctmAJKi2.js} +1 -1
- package/dist/client/assets/{thread-route-Dgqcb54O.js → thread-route-B2ty6ukP.js} +1 -1
- package/dist/client/assets/{thread-route-OLYiCJph.js → thread-route-IuL5SOAM.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-S1u9ZwLo.js → thread-sheet-body-CfDwHQTb.js} +1 -1
- package/dist/client/assets/{toggle-group-CpWyvCov.js → toggle-group-C_CFdIpl.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-CKSL6Yie.js → toolbar-icon-button-BKd-A7Pf.js} +1 -1
- package/dist/client/assets/{tooltip-DWL9syQD.js → tooltip-DX0Bl_lS.js} +1 -1
- package/dist/client/assets/{track-CGJk_yiE.js → track-BGFQx9Og.js} +1 -1
- package/dist/client/assets/{types-Dl4SJsdD.js → types-C1oq08z_.js} +1 -1
- package/dist/client/assets/{usage-stats-Cgo5f2V2.js → usage-stats-DfmfsH2y.js} +1 -1
- package/dist/client/assets/{use-ai-providers-D-_z6UQo.js → use-ai-providers-Cxex7wDI.js} +1 -1
- package/dist/client/assets/{use-automations-CCERRGfI.js → use-automations-xhQB066d.js} +1 -1
- package/dist/client/assets/{use-autosave-DnRgbTqM.js → use-autosave-CLWD6tK9.js} +1 -1
- package/dist/client/assets/{use-connect-companion-Y5EiEwxZ.js → use-connect-companion-Ccc5SBnt.js} +1 -1
- package/dist/client/assets/{use-connection-CvQsoe8t.js → use-connection-ClO-4FPh.js} +1 -1
- package/dist/client/assets/{use-copy-6F0jqaNp.js → use-copy-CATdEsly.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp--Wd1wVnr.js → use-create-virtual-mcp-C2lQbb02.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-DQDMzFi_.js → use-date-fns-locale-C99-kFzM.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DODMG9cD.js → use-debounced-autosave-Cy-9dLd5.js} +1 -1
- package/dist/client/assets/{use-debounced-value-GI3jmKWk.js → use-debounced-value-C17ryCVv.js} +1 -1
- package/dist/client/assets/{use-deco-credits-u_ppfNkE.js → use-deco-credits-CaqOb_n2.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-BVhyJ5Q6.js → use-decopilot-events-CBMDrdyc.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DhYXRV2S.js → use-delete-connection-B5InmISb.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DE8hhXsQ.js → use-deployment-admin-2fd5jdJ9.js} +1 -1
- package/dist/client/assets/{use-entitlements-gYQEm8ff.js → use-entitlements-VncN_xA9.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-f5Jm7mxB.js → use-fast-preview-draft-url-DzfJMOr_.js} +1 -1
- package/dist/client/assets/{use-file-configs-TLOrvzhi.js → use-file-configs-BrxuudMo.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DWeCyP7v.js → use-infinite-scroll-DlAjTXQY.js} +1 -1
- package/dist/client/assets/{use-join-requests-D6HjuxyX.js → use-join-requests-B2iYH4eh.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-DQK_iDNw.js → use-main-panel-tabs-DjhAXWfm.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-DXK9BGJ3.js → use-mcp-auth-status-DmKOOwLh.js} +1 -1
- package/dist/client/assets/{use-mcp-client-CTofCVDt.js → use-mcp-client-K6gPUYYt.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-DmSUcGeg.js → use-mcp-prompts-mgcej9zb.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BXu3F-We.js → use-mcp-tools-DOYLIeZs.js} +1 -1
- package/dist/client/assets/{use-members-DgyRGi7X.js → use-members-CSBt8w68.js} +1 -1
- package/dist/client/assets/{use-mobile-0svyHh7R.js → use-mobile-CTLnWPQD.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CgIoChxk.js → use-navigate-to-agent-pQ_2zKBF.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-CZNG2cUJ.js → use-open-billing-url-D7Fh2Y5_.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DOv_Zmqc.js → use-org-auth-client-B3u98b0C.js} +1 -1
- package/dist/client/assets/{use-org-fs-PpDGQ72n.js → use-org-fs-CR29Vg7P.js} +1 -1
- package/dist/client/assets/{use-org-notice-BB8yp0g5.js → use-org-notice-C3ImSlEr.js} +1 -1
- package/dist/client/assets/{use-org-sso-DyncQoRl.js → use-org-sso-_0tZu1zz.js} +1 -1
- package/dist/client/assets/{use-organization-roles-Cj6O_vUV.js → use-organization-roles-EzxOjML4.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CSCcR92y.js → use-organization-settings-C3TqDfmH.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-BFz9YH5v.js → use-panel-navigate-CVnynvUQ.js} +1 -1
- package/dist/client/assets/{use-project-native-view-presence-B7mLctxE.js → use-project-native-view-presence-6OUtCAU9.js} +1 -1
- package/dist/client/assets/{use-project-scope-DpQwuDpe.js → use-project-scope-CEo7AuDz.js} +1 -1
- package/dist/client/assets/{use-registry-connections-aYb_SDLh.js → use-registry-connections-sjcpoUa8.js} +1 -1
- package/dist/client/assets/{use-releases-CYHV5ZkG.js → use-releases-BEQP4Vfy.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-B6TMkRSm.js → use-reports-diagnostic-Cdvpean2.js} +1 -1
- package/dist/client/assets/{use-route-default-main-JsxrVKzY.js → use-route-default-main-wEQ2mAPL.js} +1 -1
- package/dist/client/assets/{use-secrets-Bc419fLl.js → use-secrets-7Xv_ppXY.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-DuSOZ2iN.js → use-section-preview-base-CCdV-eU3.js} +1 -1
- package/dist/client/assets/{use-session-runtime-Dok2hP9u.js → use-session-runtime-D2HHCqTL.js} +1 -1
- package/dist/client/assets/{use-tags-CVYcMiKb.js → use-tags-OTKxlTzk.js} +1 -1
- package/dist/client/assets/{use-task-metadata-Rne3mWjx.js → use-task-metadata-DDJJreot.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-voNNtY3m.js → use-thread-outputs-CyoPuq_u.js} +1 -1
- package/dist/client/assets/{use-view-mode-BKNxYPE2.js → use-view-mode-B-DLwjr7.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BvBBJ8Mx.js → use-virtual-mcp-BjnluMGN.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-Ck1FMc__.js +1 -0
- package/dist/client/assets/{useQueries-4lpfmzLc.js → useQueries-DYREP69h.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DwTGOgqt.js +1 -0
- package/dist/client/assets/{users-DKU7eIFb.js → users-HiO_AGbd.js} +1 -1
- package/dist/client/assets/{utils-BjXWEQk-.js → utils-P6wlF9vW.js} +1 -1
- package/dist/client/assets/{variant-calendar-DQNS_zcb.js → variant-calendar-Dcoy5XFs.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-B5kRg6OI.js → variant-matcher-override-BypdXcWL.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-Cb8qN_2E.js → view-mode-toggle--X7nV3BO.js} +1 -1
- package/dist/client/assets/{virtual-mcp-FeJJ4-Gs.js → virtual-mcp-Cn7jF0kx.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/agent-app-CjdC9Vik.js +0 -1
- package/dist/client/assets/agent-deck-B8w_RJek.js +0 -1
- package/dist/client/assets/agent-file-Rp_QgjUS.js +0 -1
- package/dist/client/assets/agent-library-file-DWiwo1Gr.js +0 -1
- package/dist/client/assets/agent-settings-mw4RaXBd.js +0 -1
- package/dist/client/assets/agent-site-editor-code-CPuZW_04.js +0 -2
- package/dist/client/assets/agent-view-BvlT3TRT.js +0 -1
- package/dist/client/assets/api-keys-RkuibPIu.js +0 -1
- package/dist/client/assets/app-editor-9G7AY-zP.js +0 -1
- package/dist/client/assets/category-editor--To3Gwxn.js +0 -1
- package/dist/client/assets/page-seo-form-jnLFUZoS.js +0 -1
- package/dist/client/assets/post-editor-BEKqMwyr.js +0 -1
- package/dist/client/assets/project-reports-k8kZQqgV.js +0 -1
- package/dist/client/assets/project-tasks-CwCZqTzX.js +0 -1
- package/dist/client/assets/record-editor-D4BJirKJ.js +0 -1
- package/dist/client/assets/redirect-editor-D7V8q-dv.js +0 -1
- package/dist/client/assets/registry-D4-n3nE0.js +0 -2
- package/dist/client/assets/reports-fKETPc_l.js +0 -1
- package/dist/client/assets/runnable-block-editor-BJcwVbgi.js +0 -16
- package/dist/client/assets/sections-editor-y7T49D7e.js +0 -2
- package/dist/client/assets/seo-editor-BmQQyoRh.js +0 -1
- package/dist/client/assets/store-registry-DBKLw5d2.js +0 -2
- package/dist/client/assets/tasks-Dd5O_bDj.js +0 -1
- package/dist/client/assets/useInfiniteQuery-xfHI500T.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Z6PlTFXu.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -2076,7 +2076,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var Z0$=D(()=>{Ig()});f
|
|
|
2076
2076
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${G}/${K}, keeping in old table`);continue}}await eh`
|
|
2077
2077
|
DELETE FROM kysely_migration WHERE name = ${Q}
|
|
2078
2078
|
`.execute($)}}async function R6$($){await ZX4($),await QX4($);let Z=new A6$({db:$,provider:{getMigrations:()=>Promise.resolve(Os0)}}),{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 XX4($){let{keepOpen:Z=!1,database:Q,skipBetterAuth:X=!1}=$??{},Y="skipped";if(!X&&!Q)Y=await vn0();let J=Q??l$(),G=async()=>{if(!Z&&!Q)await CD(J).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await R6$(J.db);return await G(),{betterAuth:Y,kysely:K}}catch(K){throw await G(),K}}async function YX4(){let $=l$(),Z=new A6$({db:$.db,provider:{getMigrations:()=>Promise.resolve(Os0)}}),{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 M6$=D(()=>{P6$();xn0();hQ()});async function XJ0($){let Z={...process.env},Q=p50($,Z);console.log(XR1(Q.settings.encryptionKey));let X=Q.settings.betterAuthSecret||(Q.settings.localMode?v1$(Q.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (YY0(),XY0)),{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(() => (xn0(),f1$));await W(J.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (hQ(),a0$)),{migrateToLatest:F}=await Promise.resolve().then(() => (M6$(),q6$)),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 Q0$(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 Ds0=D(()=>{Ig();x1$();a1()});var S6$={};$0(S6$,{updateService:()=>yz,subscribeCliState:()=>js0,setTuiConsoleIntercepted:()=>YJ0,setServerUrl:()=>Bo,setMigrationsDone:()=>No,setDevMode:()=>GX4,resetCliStateForTests:()=>JX4,isTuiConsoleIntercepted:()=>JJ0,getCliState:()=>ws0,addLogEntry:()=>yD});function I6$(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function V6$(){return{services:I6$(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function JX4(){IY=V6$()}function Uo(){for(let $ of Ls0)$()}function ws0(){return IY}function js0($){return Ls0.add($),()=>Ls0.delete($)}function yz($){IY={...IY,services:IY.services.map((Z)=>Z.name===$.name?$:Z)},Uo()}function No(){IY={...IY,migrationsStatus:"done"},Uo()}function Bo($){IY={...IY,serverUrl:$},Uo()}function yD($){let Z=[...IY.logs,$];IY={...IY,logs:Z.length>500?Z.slice(-500):Z},Uo()}function GX4(){IY={...IY,services:[...I6$(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},Uo()}function YJ0($){k6$=$}function JJ0(){return k6$}var IY,Ls0,k6$=!1;var gz=D(()=>{IY=V6$();Ls0=new Set});import{createServer as C6$}from"net";function KX4($){return new Promise((Z)=>{let Q=C6$();Q.once("error",()=>Z(!1)),Q.listen($,"0.0.0.0",()=>{Q.close(()=>Z(!0))})})}async function Oo($){if(await KX4($))return $;let Z=await new Promise((Q,X)=>{let Y=C6$();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 Es0=()=>{};var Ps0={};$0(Ps0,{startDevServer:()=>HX4,pipeToLogStore:()=>zs0});import{join as WX4}from"path";function zs0($){let Z=$.getReader(),Q=new TextDecoder,X="";function Y(){let J=X.split(`
|
|
2079
|
-
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;yD({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)yD({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function HX4($){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 Oo(Number(Y)+1):await Oo(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await XJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)yz({name:L.name,status:"ready",port:L.port});No();let F=WX4(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)zs0(N.stdout),zs0(N.stderr);Bo(J),yz({name:"Vite",status:"ready",port:Number(Y)}),yz({name:"API",status:"ready",port:Number(K.port)});let O=async(L)=>{if(N.kill(L),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (YY0(),XY0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:N}}var As0=D(()=>{Ds0();gz();Es0()});var GJ0;var Ts0=D(()=>{GJ0={name:"decocms",version:"4.369.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@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":"^2.9.1","@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":"^3.0.10","@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:"^6.0.208","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 UX4,Text as _6$}from"ink";import{jsx as NX4,jsxs as v6$}from"react/jsx-runtime";function x6$({version:$}){return v6$(UX4,{flexDirection:"column",marginTop:1,children:[IY0.map((Z,Q)=>NX4(_6$,{color:VY0[Q],children:Z},Q)),v6$(_6$,{dimColor:!0,children:[" v",$]})]})}var f6$=D(()=>{at()});import{Box as hz,Text as gD}from"ink";import{Spinner as BX4}from"@inkjs/ui";import{jsx as pJ,jsxs as $u}from"react/jsx-runtime";function b6$({status:$}){if($==="pending")return pJ(BX4,{label:""});return pJ(gD,{color:"green",children:"\u2713"})}function OX4($){return`${$.name}: ${$.port||"...."}`}function y6$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return $u(hz,{flexDirection:"column",paddingBottom:1,children:[pJ(x6$,{version:GJ0.version}),pJ(hz,{marginBottom:1,children:pJ(gD,{dimColor:!0,children:"\u2500".repeat(80)})}),pJ(hz,{children:$u(gD,{dimColor:!0,children:["Home: ",Q]})}),$u(hz,{gap:2,children:[$.map((Y)=>$u(hz,{gap:1,children:[pJ(gD,{children:OX4(Y)}),pJ(b6$,{status:Y.status})]},Y.name)),$u(hz,{gap:1,children:[pJ(gD,{children:"Migrations"}),pJ(b6$,{status:Z})]})]}),pJ(hz,{children:X?$u(gD,{children:["Open in browser: ",pJ(gD,{color:"cyan",children:X})]}):pJ(gD,{dimColor:!0,children:"Starting..."})})]})}var g6$=D(()=>{Ts0();f6$()});import{Box as DX4,Text as Do}from"ink";import{jsx as Rs0,jsxs as qs0}from"react/jsx-runtime";function LX4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function h6$({logs:$}){return Rs0(DX4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return Rs0(Do,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return qs0(Do,{children:[qs0(Do,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Rs0(Do,{color:LX4(Z.status),children:Z.status}),qs0(Do,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var u6$=()=>{};var Ms0={};$0(Ms0,{App:()=>EX4});import{Box as wX4}from"ink";import{useSyncExternalStore as jX4}from"react";import{jsx as l6$,jsxs as zX4}from"react/jsx-runtime";function EX4({home:$}){let Z=jX4(js0,ws0);return zX4(wX4,{flexDirection:"column",children:[l6$(y6$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),l6$(h6$,{logs:Z.logs})]})}var Is0=D(()=>{g6$();u6$();gz()});var jG="thread-gate",CN="decopilot-hosted-harness",_N="decopilot-hosted-harness-sandboxed",EG="automations",hD="background-tools",uz="task-board-github-reads";var c6$="11";function m6$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:c6$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var d6$=()=>{};import PX4 from"pg";async function p6$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=AX4}=$,Y=$.log??((W)=>console.log(W)),J=new PX4.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",[i6$.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 O$(TX4)}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)",[i6$.toString()])}catch{}await J.end().catch(()=>{})}}var i6$=8314027461559302n,AX4=600000,TX4=500;var n6$=D(()=>{i$()});function RX4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Vs0($,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 t6$(){let $=RX4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Vs0($,"--cpu-prof-dir")??process.cwd(),name:Vs0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Vs0($,"--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 o6$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=vz();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(()=>{}),KJ0=setInterval(()=>void Z().catch(()=>{}),$),KJ0.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(KJ0)clearInterval(KJ0)}}var KJ0;var r6$=()=>{};import*as qX4 from"bun:jsc";function a6$(){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{MX4()}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=IX4()?.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 MX4,IX4;var s6$=D(()=>{({startSamplingProfiler:MX4,samplingProfilerStackTraces:IX4}=qX4)});function e6$(){t6$();let $=[o6$(),m0$(),a6$()];return()=>{for(let Z of $)Z()}}var $5$=D(()=>{qn0();r6$();s6$()});var lz=v((Z5$)=>{Object.defineProperty(Z5$,"__esModule",{value:!0});Z5$.RepublishHeaders=Z5$.DirectMsgHeaders=Z5$.JsHeaders=Z5$.AdvisoryKind=void 0;Z5$.isOrderedPushConsumerOptions=VX4;Z5$.isPullConsumer=kX4;Z5$.isPushConsumer=SX4;Z5$.isBoundPushConsumerOptions=CX4;function VX4($){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 kX4($){return $.isPullConsumer()}function SX4($){return $.isPushConsumer()}function CX4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Z5$.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"};Z5$.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"};Z5$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Z5$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var nJ=v((X5$)=>{Object.defineProperty(X5$,"__esModule",{value:!0});X5$.TD=X5$.TE=X5$.Empty=void 0;X5$.encode=uX4;X5$.decode=lX4;X5$.Empty=new Uint8Array(0);X5$.TE=new TextEncoder;X5$.TD=new TextDecoder;function hX4(...$){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 uX4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(X5$.TE.encode($[Q]));if(Z.length===0)return X5$.Empty;if(Z.length===1)return Z[0];return hX4(...Z)}function lX4($){if(!$||$.length===0)return"";return X5$.TD.decode($)}});var tJ=v((G5$)=>{Object.defineProperty(G5$,"__esModule",{value:!0});G5$.errors=G5$.PermissionViolationError=G5$.NoRespondersError=G5$.TimeoutError=G5$.RequestError=G5$.ProtocolError=G5$.ConnectionError=G5$.DrainingConnectionError=G5$.ClosedConnectionError=G5$.AuthorizationError=G5$.UserAuthenticationExpiredError=G5$.InvalidOperationError=G5$.InvalidArgumentError=G5$.InvalidSubjectError=void 0;class Ss0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}G5$.InvalidSubjectError=Ss0;class WJ0 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 WJ0(`${$} ${Z}`,Q)}}G5$.InvalidArgumentError=WJ0;class Cs0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}G5$.InvalidOperationError=Cs0;class HJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new HJ0($);return null}}G5$.UserAuthenticationExpiredError=HJ0;class FJ0 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 FJ0($);return null}}G5$.AuthorizationError=FJ0;class _s0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}G5$.ClosedConnectionError=_s0;class vs0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}G5$.DrainingConnectionError=vs0;class xs0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}G5$.ConnectionError=xs0;class fs0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}G5$.ProtocolError=fs0;class bs0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof UJ0}}G5$.RequestError=bs0;class ys0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}G5$.TimeoutError=ys0;class UJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}G5$.NoRespondersError=UJ0;class NJ0 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 NJ0($,Q,X,Y)}}G5$.PermissionViolationError=NJ0;G5$.errors={AuthorizationError:FJ0,ClosedConnectionError:_s0,ConnectionError:xs0,DrainingConnectionError:vs0,InvalidArgumentError:WJ0,InvalidOperationError:Cs0,InvalidSubjectError:Ss0,NoRespondersError:UJ0,PermissionViolationError:NJ0,ProtocolError:fs0,RequestError:bs0,TimeoutError:ys0,UserAuthenticationExpiredError:HJ0}});var rK=v((U5$)=>{Object.defineProperty(U5$,"__esModule",{value:!0});U5$.SimpleMutex=U5$.Perf=void 0;U5$.extend=YY4;U5$.render=JY4;U5$.timeout=GY4;U5$.delay=KY4;U5$.deadline=WY4;U5$.deferred=hs0;U5$.debugDeferred=HY4;U5$.shuffle=FY4;U5$.collect=UY4;U5$.jitter=F5$;U5$.backoff=NY4;U5$.nanos=BY4;U5$.millis=OY4;U5$.randomToken=wY4;var XY4=nJ(),gs0=tJ();function YY4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function JY4($){return XY4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function GY4($,Z=!0){let Q=Z?new gs0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new gs0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function KY4($=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 WY4($,Z=1000){let Q=hs0(),X=setTimeout(()=>{Q.reject(new gs0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function hs0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function HY4(){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 FY4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function UY4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class W5${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})}),$}}U5$.Perf=W5$;class H5${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=hs0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}U5$.SimpleMutex=H5$;function F5$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function NY4($=[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 F5$(Q>Z?$[Z]:$[Q])}}}function BY4($){return $*1e6}function OY4($){return Math.floor($/1e6)}var DY4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",vN=new Uint8Array(62);for(let $=0;$<62;$++)vN[$]=DY4.charCodeAt($);var LY4=218340105584896;function wY4(){let $=Math.floor(Math.random()*LY4),Z=$%62,Q=vN[Z];$=($-Z)/62,Z=$%62;let X=vN[Z];$=($-Z)/62,Z=$%62;let Y=vN[Z];$=($-Z)/62,Z=$%62;let J=vN[Z];$=($-Z)/62,Z=$%62;let G=vN[Z];$=($-Z)/62,Z=$%62;let K=vN[Z];$=($-Z)/62,Z=$%62;let W=vN[Z];$=($-Z)/62;let H=vN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var E5$=v((w5$)=>{Object.defineProperty(w5$,"__esModule",{value:!0});w5$.nuid=w5$.NuidImpl=void 0;var vY4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",uD=62,OJ0=12,D5$=10,B5$=33,xY4=333,O5$=OJ0+D5$,ls0=new Uint8Array(uD);for(let $=0;$<uD;$++)ls0[$]=vY4.charCodeAt($);var BJ0=4294967296,L5$=BigInt(uD)**BigInt(D5$),Lo=Number(L5$/(1n<<32n)),us0=Number(L5$%(1n<<32n));function fY4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function bY4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else fY4($)}class cs0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(O5$),this.cbuf=new Uint8Array(OJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Lo+1)),this.seqLo=Math.floor(Math.random()*BJ0);while($++<8&&this.seqHi===Lo&&this.seqLo>=us0);if(this.seqHi===Lo&&this.seqLo>=us0)this.seqLo=0;this.inc=Math.random()*(xY4-B5$)+B5$|0}setPre(){bY4(this.cbuf);for(let $=0;$<OJ0;$++)this.buf[$]=ls0[this.cbuf[$]%uD]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=O5$-1;Q>=OJ0;Q--){let X=Math.floor($/uD),J=($-X*uD)*BJ0+Z,G=Math.floor(J/uD),K=J-G*uD;this.buf[Q]=ls0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=BJ0)this.seqLo-=BJ0,this.seqHi+=1;if(this.seqHi>Lo||this.seqHi===Lo&&this.seqLo>=us0)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()}}w5$.NuidImpl=cs0;w5$.nuid=new cs0});var T5$=v((P5$)=>{Object.defineProperty(P5$,"__esModule",{value:!0});P5$.nuid=P5$.Nuid=void 0;var z5$=E5$();P5$.Nuid=z5$.NuidImpl;P5$.nuid=z5$.nuid});var LJ0=v((DJ0)=>{Object.defineProperty(DJ0,"__esModule",{value:!0});DJ0.nuid=DJ0.Nuid=void 0;var R5$=T5$();Object.defineProperty(DJ0,"Nuid",{enumerable:!0,get:function(){return R5$.Nuid}});Object.defineProperty(DJ0,"nuid",{enumerable:!0,get:function(){return R5$.nuid}})});var lD=v((q5$)=>{Object.defineProperty(q5$,"__esModule",{value:!0});q5$.DEFAULT_HOST=q5$.DEFAULT_PORT=q5$.Match=void 0;q5$.syncIterator=cY4;q5$.createInbox=mY4;var uY4=LJ0(),lY4=tJ();q5$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function cY4($){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 mY4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw lY4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${uY4.nuid.next()}`}q5$.DEFAULT_PORT=4222;q5$.DEFAULT_HOST="127.0.0.1"});var wo=v((k5$)=>{Object.defineProperty(k5$,"__esModule",{value:!0});k5$.DataBuffer=void 0;var I5$=nJ();class V5${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 I5$.TE.encode($)}static toAscii($){return I5$.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}}k5$.DataBuffer=V5$});var cz=v((_5$)=>{Object.defineProperty(_5$,"__esModule",{value:!0});_5$.LF=_5$.CR=_5$.CRLF=_5$.CR_LF_LEN=_5$.CR_LF=void 0;_5$.setTransportFactory=aY4;_5$.defaultPort=sY4;_5$.getUrlParseFn=eY4;_5$.newTransport=$J4;_5$.getResolveFn=ZJ4;_5$.protoLen=C5$;_5$.extractProtocolMessage=QJ4;var tY4=nJ(),oY4=lD(),rY4=wo(),oJ;function aY4($){oJ=$}function sY4(){return oJ!==void 0&&oJ.defaultPort!==void 0?oJ.defaultPort:oY4.DEFAULT_PORT}function eY4(){return oJ!==void 0&&oJ.urlParseFn?oJ.urlParseFn:void 0}function $J4(){if(!oJ||typeof oJ.factory!=="function")throw Error("transport fn is not set");return oJ.factory()}function ZJ4(){return oJ!==void 0&&oJ.dnsResolveFn?oJ.dnsResolveFn:void 0}_5$.CR_LF=`\r
|
|
2079
|
+
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;yD({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)yD({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function HX4($){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 Oo(Number(Y)+1):await Oo(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await XJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)yz({name:L.name,status:"ready",port:L.port});No();let F=WX4(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)zs0(N.stdout),zs0(N.stderr);Bo(J),yz({name:"Vite",status:"ready",port:Number(Y)}),yz({name:"API",status:"ready",port:Number(K.port)});let O=async(L)=>{if(N.kill(L),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (YY0(),XY0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:N}}var As0=D(()=>{Ds0();gz();Es0()});var GJ0;var Ts0=D(()=>{GJ0={name:"decocms",version:"4.370.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@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":"^2.9.1","@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":"^3.0.10","@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:"^6.0.208","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 UX4,Text as _6$}from"ink";import{jsx as NX4,jsxs as v6$}from"react/jsx-runtime";function x6$({version:$}){return v6$(UX4,{flexDirection:"column",marginTop:1,children:[IY0.map((Z,Q)=>NX4(_6$,{color:VY0[Q],children:Z},Q)),v6$(_6$,{dimColor:!0,children:[" v",$]})]})}var f6$=D(()=>{at()});import{Box as hz,Text as gD}from"ink";import{Spinner as BX4}from"@inkjs/ui";import{jsx as pJ,jsxs as $u}from"react/jsx-runtime";function b6$({status:$}){if($==="pending")return pJ(BX4,{label:""});return pJ(gD,{color:"green",children:"\u2713"})}function OX4($){return`${$.name}: ${$.port||"...."}`}function y6$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return $u(hz,{flexDirection:"column",paddingBottom:1,children:[pJ(x6$,{version:GJ0.version}),pJ(hz,{marginBottom:1,children:pJ(gD,{dimColor:!0,children:"\u2500".repeat(80)})}),pJ(hz,{children:$u(gD,{dimColor:!0,children:["Home: ",Q]})}),$u(hz,{gap:2,children:[$.map((Y)=>$u(hz,{gap:1,children:[pJ(gD,{children:OX4(Y)}),pJ(b6$,{status:Y.status})]},Y.name)),$u(hz,{gap:1,children:[pJ(gD,{children:"Migrations"}),pJ(b6$,{status:Z})]})]}),pJ(hz,{children:X?$u(gD,{children:["Open in browser: ",pJ(gD,{color:"cyan",children:X})]}):pJ(gD,{dimColor:!0,children:"Starting..."})})]})}var g6$=D(()=>{Ts0();f6$()});import{Box as DX4,Text as Do}from"ink";import{jsx as Rs0,jsxs as qs0}from"react/jsx-runtime";function LX4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function h6$({logs:$}){return Rs0(DX4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return Rs0(Do,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return qs0(Do,{children:[qs0(Do,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Rs0(Do,{color:LX4(Z.status),children:Z.status}),qs0(Do,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var u6$=()=>{};var Ms0={};$0(Ms0,{App:()=>EX4});import{Box as wX4}from"ink";import{useSyncExternalStore as jX4}from"react";import{jsx as l6$,jsxs as zX4}from"react/jsx-runtime";function EX4({home:$}){let Z=jX4(js0,ws0);return zX4(wX4,{flexDirection:"column",children:[l6$(y6$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),l6$(h6$,{logs:Z.logs})]})}var Is0=D(()=>{g6$();u6$();gz()});var jG="thread-gate",CN="decopilot-hosted-harness",_N="decopilot-hosted-harness-sandboxed",EG="automations",hD="background-tools",uz="task-board-github-reads";var c6$="11";function m6$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:c6$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var d6$=()=>{};import PX4 from"pg";async function p6$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=AX4}=$,Y=$.log??((W)=>console.log(W)),J=new PX4.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",[i6$.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 O$(TX4)}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)",[i6$.toString()])}catch{}await J.end().catch(()=>{})}}var i6$=8314027461559302n,AX4=600000,TX4=500;var n6$=D(()=>{i$()});function RX4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Vs0($,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 t6$(){let $=RX4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Vs0($,"--cpu-prof-dir")??process.cwd(),name:Vs0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Vs0($,"--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 o6$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=vz();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(()=>{}),KJ0=setInterval(()=>void Z().catch(()=>{}),$),KJ0.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(KJ0)clearInterval(KJ0)}}var KJ0;var r6$=()=>{};import*as qX4 from"bun:jsc";function a6$(){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{MX4()}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=IX4()?.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 MX4,IX4;var s6$=D(()=>{({startSamplingProfiler:MX4,samplingProfilerStackTraces:IX4}=qX4)});function e6$(){t6$();let $=[o6$(),m0$(),a6$()];return()=>{for(let Z of $)Z()}}var $5$=D(()=>{qn0();r6$();s6$()});var lz=v((Z5$)=>{Object.defineProperty(Z5$,"__esModule",{value:!0});Z5$.RepublishHeaders=Z5$.DirectMsgHeaders=Z5$.JsHeaders=Z5$.AdvisoryKind=void 0;Z5$.isOrderedPushConsumerOptions=VX4;Z5$.isPullConsumer=kX4;Z5$.isPushConsumer=SX4;Z5$.isBoundPushConsumerOptions=CX4;function VX4($){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 kX4($){return $.isPullConsumer()}function SX4($){return $.isPushConsumer()}function CX4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Z5$.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"};Z5$.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"};Z5$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Z5$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var nJ=v((X5$)=>{Object.defineProperty(X5$,"__esModule",{value:!0});X5$.TD=X5$.TE=X5$.Empty=void 0;X5$.encode=uX4;X5$.decode=lX4;X5$.Empty=new Uint8Array(0);X5$.TE=new TextEncoder;X5$.TD=new TextDecoder;function hX4(...$){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 uX4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(X5$.TE.encode($[Q]));if(Z.length===0)return X5$.Empty;if(Z.length===1)return Z[0];return hX4(...Z)}function lX4($){if(!$||$.length===0)return"";return X5$.TD.decode($)}});var tJ=v((G5$)=>{Object.defineProperty(G5$,"__esModule",{value:!0});G5$.errors=G5$.PermissionViolationError=G5$.NoRespondersError=G5$.TimeoutError=G5$.RequestError=G5$.ProtocolError=G5$.ConnectionError=G5$.DrainingConnectionError=G5$.ClosedConnectionError=G5$.AuthorizationError=G5$.UserAuthenticationExpiredError=G5$.InvalidOperationError=G5$.InvalidArgumentError=G5$.InvalidSubjectError=void 0;class Ss0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}G5$.InvalidSubjectError=Ss0;class WJ0 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 WJ0(`${$} ${Z}`,Q)}}G5$.InvalidArgumentError=WJ0;class Cs0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}G5$.InvalidOperationError=Cs0;class HJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new HJ0($);return null}}G5$.UserAuthenticationExpiredError=HJ0;class FJ0 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 FJ0($);return null}}G5$.AuthorizationError=FJ0;class _s0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}G5$.ClosedConnectionError=_s0;class vs0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}G5$.DrainingConnectionError=vs0;class xs0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}G5$.ConnectionError=xs0;class fs0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}G5$.ProtocolError=fs0;class bs0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof UJ0}}G5$.RequestError=bs0;class ys0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}G5$.TimeoutError=ys0;class UJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}G5$.NoRespondersError=UJ0;class NJ0 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 NJ0($,Q,X,Y)}}G5$.PermissionViolationError=NJ0;G5$.errors={AuthorizationError:FJ0,ClosedConnectionError:_s0,ConnectionError:xs0,DrainingConnectionError:vs0,InvalidArgumentError:WJ0,InvalidOperationError:Cs0,InvalidSubjectError:Ss0,NoRespondersError:UJ0,PermissionViolationError:NJ0,ProtocolError:fs0,RequestError:bs0,TimeoutError:ys0,UserAuthenticationExpiredError:HJ0}});var rK=v((U5$)=>{Object.defineProperty(U5$,"__esModule",{value:!0});U5$.SimpleMutex=U5$.Perf=void 0;U5$.extend=YY4;U5$.render=JY4;U5$.timeout=GY4;U5$.delay=KY4;U5$.deadline=WY4;U5$.deferred=hs0;U5$.debugDeferred=HY4;U5$.shuffle=FY4;U5$.collect=UY4;U5$.jitter=F5$;U5$.backoff=NY4;U5$.nanos=BY4;U5$.millis=OY4;U5$.randomToken=wY4;var XY4=nJ(),gs0=tJ();function YY4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function JY4($){return XY4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function GY4($,Z=!0){let Q=Z?new gs0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new gs0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function KY4($=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 WY4($,Z=1000){let Q=hs0(),X=setTimeout(()=>{Q.reject(new gs0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function hs0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function HY4(){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 FY4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function UY4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class W5${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})}),$}}U5$.Perf=W5$;class H5${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=hs0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}U5$.SimpleMutex=H5$;function F5$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function NY4($=[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 F5$(Q>Z?$[Z]:$[Q])}}}function BY4($){return $*1e6}function OY4($){return Math.floor($/1e6)}var DY4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",vN=new Uint8Array(62);for(let $=0;$<62;$++)vN[$]=DY4.charCodeAt($);var LY4=218340105584896;function wY4(){let $=Math.floor(Math.random()*LY4),Z=$%62,Q=vN[Z];$=($-Z)/62,Z=$%62;let X=vN[Z];$=($-Z)/62,Z=$%62;let Y=vN[Z];$=($-Z)/62,Z=$%62;let J=vN[Z];$=($-Z)/62,Z=$%62;let G=vN[Z];$=($-Z)/62,Z=$%62;let K=vN[Z];$=($-Z)/62,Z=$%62;let W=vN[Z];$=($-Z)/62;let H=vN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var E5$=v((w5$)=>{Object.defineProperty(w5$,"__esModule",{value:!0});w5$.nuid=w5$.NuidImpl=void 0;var vY4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",uD=62,OJ0=12,D5$=10,B5$=33,xY4=333,O5$=OJ0+D5$,ls0=new Uint8Array(uD);for(let $=0;$<uD;$++)ls0[$]=vY4.charCodeAt($);var BJ0=4294967296,L5$=BigInt(uD)**BigInt(D5$),Lo=Number(L5$/(1n<<32n)),us0=Number(L5$%(1n<<32n));function fY4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function bY4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else fY4($)}class cs0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(O5$),this.cbuf=new Uint8Array(OJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Lo+1)),this.seqLo=Math.floor(Math.random()*BJ0);while($++<8&&this.seqHi===Lo&&this.seqLo>=us0);if(this.seqHi===Lo&&this.seqLo>=us0)this.seqLo=0;this.inc=Math.random()*(xY4-B5$)+B5$|0}setPre(){bY4(this.cbuf);for(let $=0;$<OJ0;$++)this.buf[$]=ls0[this.cbuf[$]%uD]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=O5$-1;Q>=OJ0;Q--){let X=Math.floor($/uD),J=($-X*uD)*BJ0+Z,G=Math.floor(J/uD),K=J-G*uD;this.buf[Q]=ls0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=BJ0)this.seqLo-=BJ0,this.seqHi+=1;if(this.seqHi>Lo||this.seqHi===Lo&&this.seqLo>=us0)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()}}w5$.NuidImpl=cs0;w5$.nuid=new cs0});var T5$=v((P5$)=>{Object.defineProperty(P5$,"__esModule",{value:!0});P5$.nuid=P5$.Nuid=void 0;var z5$=E5$();P5$.Nuid=z5$.NuidImpl;P5$.nuid=z5$.nuid});var LJ0=v((DJ0)=>{Object.defineProperty(DJ0,"__esModule",{value:!0});DJ0.nuid=DJ0.Nuid=void 0;var R5$=T5$();Object.defineProperty(DJ0,"Nuid",{enumerable:!0,get:function(){return R5$.Nuid}});Object.defineProperty(DJ0,"nuid",{enumerable:!0,get:function(){return R5$.nuid}})});var lD=v((q5$)=>{Object.defineProperty(q5$,"__esModule",{value:!0});q5$.DEFAULT_HOST=q5$.DEFAULT_PORT=q5$.Match=void 0;q5$.syncIterator=cY4;q5$.createInbox=mY4;var uY4=LJ0(),lY4=tJ();q5$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function cY4($){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 mY4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw lY4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${uY4.nuid.next()}`}q5$.DEFAULT_PORT=4222;q5$.DEFAULT_HOST="127.0.0.1"});var wo=v((k5$)=>{Object.defineProperty(k5$,"__esModule",{value:!0});k5$.DataBuffer=void 0;var I5$=nJ();class V5${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 I5$.TE.encode($)}static toAscii($){return I5$.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}}k5$.DataBuffer=V5$});var cz=v((_5$)=>{Object.defineProperty(_5$,"__esModule",{value:!0});_5$.LF=_5$.CR=_5$.CRLF=_5$.CR_LF_LEN=_5$.CR_LF=void 0;_5$.setTransportFactory=aY4;_5$.defaultPort=sY4;_5$.getUrlParseFn=eY4;_5$.newTransport=$J4;_5$.getResolveFn=ZJ4;_5$.protoLen=C5$;_5$.extractProtocolMessage=QJ4;var tY4=nJ(),oY4=lD(),rY4=wo(),oJ;function aY4($){oJ=$}function sY4(){return oJ!==void 0&&oJ.defaultPort!==void 0?oJ.defaultPort:oY4.DEFAULT_PORT}function eY4(){return oJ!==void 0&&oJ.urlParseFn?oJ.urlParseFn:void 0}function $J4(){if(!oJ||typeof oJ.factory!=="function")throw Error("transport fn is not set");return oJ.factory()}function ZJ4(){return oJ!==void 0&&oJ.dnsResolveFn?oJ.dnsResolveFn:void 0}_5$.CR_LF=`\r
|
|
2080
2080
|
`;_5$.CR_LF_LEN=_5$.CR_LF.length;_5$.CRLF=rY4.DataBuffer.fromAscii(_5$.CR_LF);_5$.CR=new Uint8Array(_5$.CRLF)[0];_5$.LF=new Uint8Array(_5$.CRLF)[1];function C5$($){for(let Z=0;Z<$.length;Z++){let Q=Z+1;if($.byteLength>Q&&$[Z]===_5$.CR&&$[Q]===_5$.LF)return Q+1}return 0}function QJ4($){let Z=C5$($);if(Z>0){let X=new Uint8Array($).slice(0,Z);return tY4.TD.decode(X)}return""}});var ns0=v((u5$)=>{Object.defineProperty(u5$,"__esModule",{value:!0});u5$.ipV4=y5$;u5$.isIP=BJ4;u5$.parseIP=g5$;var jo=4,mz=16,wJ0=48,b5$=57,x5$=65,UJ4=70,f5$=97,NJ4=102,ps0=16777215;function y5$($,Z,Q,X){let Y=new Uint8Array(mz);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 BJ4($){return g5$($)!==void 0}function g5$($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return h5$($);case":":return OJ4($)}return}function h5$($){let Z=new Uint8Array(jo);for(let Q=0;Q<jo;Q++){if($.length===0)return;if(Q>0){if($[0]!==".")return;$=$.substring(1)}let{n:X,c:Y,ok:J}=DJ4($);if(!J||X>255)return;$=$.substring(Y),Z[Q]=X}return y5$(Z[0],Z[1],Z[2],Z[3])}function OJ4($){let Z=new Uint8Array(mz),Q=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(Q=0,$=$.substring(2),$.length===0)return Z}let X=0;while(X<mz){let{n:Y,c:J,ok:G}=LJ4($);if(!G||Y>65535)return;if(J<$.length&&$[J]==="."){if(Q<0&&X!=mz-jo)return;if(X+jo>mz)return;let K=h5$($);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+=jo;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<mz){if(Q<0)return;let Y=mz-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 DJ4($){let Z=0,Q=0;for(Z=0;Z<$.length&&wJ0<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=b5$;Z++)if(Q=Q*10+($.charCodeAt(Z)-wJ0),Q>=ps0)return{n:ps0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:Q,c:Z,ok:!0}}function LJ4($){let Z=0,Q=0;for(Q=0;Q<$.length;Q++){if(wJ0<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=b5$)Z*=16,Z+=$.charCodeAt(Q)-wJ0;else if(f5$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=NJ4)Z*=16,Z+=$.charCodeAt(Q)-f5$+10;else if(x5$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=UJ4)Z*=16,Z+=$.charCodeAt(Q)-x5$+10;else break;if(Z>=ps0)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 es0=v((c5$)=>{Object.defineProperty(c5$,"__esModule",{value:!0});c5$.Servers=c5$.ServerImpl=void 0;c5$.isIPV4OrHostname=l5$;c5$.hostPort=ss0;var ts0=cz(),os0=rK(),rs0=ns0(),zJ4=lD(),PJ4=tJ();function l5$($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function as0($){return!l5$($)}function AJ4($){let Q=$.toUpperCase().indexOf("::FFFF:");if(Q!==-1&&$.indexOf(".")!==-1){let X=$.substring(Q+7);return X=X.replace("[",""),X.replace("]","")}return $}function ss0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=AJ4($),as0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=as0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),Q=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):zJ4.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 Zu{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let Q=ss0($);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,rs0.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}://${as0(X)?"["+X+"]":X}`);J.port=`${this.port}`;let G=new Zu(J.host,!1);G.tlsName=this.hostname,Z.push(G)}}if($.randomize)(0,os0.shuffle)(Z);return this.resolves=Z,Z}}c5$.ServerImpl=Zu;class jJ0{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw PJ4.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,ts0.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}=ss0(Y),G=Q.get(J);if(G)G.gossiped=!1,X.push(G);else X.push(new Zu(Y))}if(this.randomize)(0,os0.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,rs0.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,ts0.getUrlParseFn)();$=Q?Q($):$;let X=new Zu($,Z);if((0,rs0.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 jJ0.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return jJ0.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,ts0.getUrlParseFn)(),J=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Zu(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,os0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:Q,deleted:X}}}c5$.Servers=jJ0});var EJ0=v((p5$)=>{Object.defineProperty(p5$,"__esModule",{value:!0});p5$.QueuedIteratorImpl=void 0;var $e0=rK(),d5$=tJ();class i5${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,$e0.deferred)(),this.yields=[],this.iterClosed=(0,$e0.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 d5$.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new d5$.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,$e0.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}}p5$.QueuedIteratorImpl=i5$});var Ze0=v((r5$)=>{Object.defineProperty(r5$,"__esModule",{value:!0});r5$.MuxSubscription=void 0;var MJ4=lD(),t5$=tJ();class o5${baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,MJ4.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 t5$.NoRespondersError(X.requestSubject):null;X.resolver($,Z)}}}}close(){let $=new t5$.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}r5$.MuxSubscription=o5$});var Qe0=v((e5$)=>{Object.defineProperty(e5$,"__esModule",{value:!0});e5$.Heartbeat=void 0;var IJ4=rK();class s5${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,IJ4.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})}}e5$.Heartbeat=s5$});var Je0=v((Y9$)=>{Object.defineProperty(Y9$,"__esModule",{value:!0});Y9$.DenoBuffer=Y9$.MAX_SIZE=Y9$.AssertionError=void 0;Y9$.assert=Q9$;Y9$.concat=X9$;Y9$.append=kJ4;Y9$.readAll=SJ4;Y9$.writeAll=CJ4;var VJ4=nJ();class Xe0 extends Error{constructor($){super($);this.name="AssertionError"}}Y9$.AssertionError=Xe0;function Q9$($,Z="Assertion failed."){if(!$)throw new Xe0(Z)}var Z9$=32768;Y9$.MAX_SIZE=4294967294;function zJ0($,Z,Q=0){let X=Z.byteLength-Q;if($.byteLength>X)$=$.subarray(0,X);return Z.set($,Q),$.byteLength}function X9$($,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 kJ4($,Z){return X9$($,Uint8Array.of(Z))}class Ye0{_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($){Q9$($<=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=zJ0(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(VJ4.TE.encode($))}write($){let Z=this._grow($.byteLength);return zJ0($,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)zJ0(this._buf.subarray(this._off),this._buf);else if(X+$>Y9$.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*X+$,Y9$.MAX_SIZE));zJ0(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,Y9$.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(Z9$);while(!0){let X=this.capacity-this.length<Z9$,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}}}Y9$.DenoBuffer=Ye0;function SJ4($){let Z=new Ye0;return Z.readFrom($),Z.bytes()}function CJ4($,Z){let Q=0;while(Q<Z.length)Q+=$.write(Z.subarray(Q))}});var We0=v((H9$)=>{Object.defineProperty(H9$,"__esModule",{value:!0});H9$.cc=H9$.State=H9$.Parser=H9$.Kind=void 0;H9$.describe=gJ4;var Ge0=Je0(),Ke0=nJ();H9$.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function gJ4($){let Z,Q="";switch($.kind){case H9$.Kind.MSG:Z="MSG";break;case H9$.Kind.OK:Z="OK";break;case H9$.Kind.ERR:Z="ERR",Q=Ke0.TD.decode($.data);break;case H9$.Kind.PING:Z="PING";break;case H9$.Kind.PONG:Z="PONG";break;case H9$.Kind.INFO:Z="INFO",Q=Ke0.TD.decode($.data)}return`${Z}: ${Q}`}function G9$(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var K9$=48,hJ4=57,Qu=67108864;class W9${dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=H9$.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 H9$.State.OP_START:switch(Q){case H9$.cc.M:case H9$.cc.m:this.state=H9$.State.OP_M,this.hdr=-1,this.ma=G9$();break;case H9$.cc.H:case H9$.cc.h:this.state=H9$.State.OP_H,this.hdr=0,this.ma=G9$();break;case H9$.cc.P:case H9$.cc.p:this.state=H9$.State.OP_P;break;case H9$.cc.PLUS:this.state=H9$.State.OP_PLUS;break;case H9$.cc.MINUS:this.state=H9$.State.OP_MINUS;break;case H9$.cc.I:case H9$.cc.i:this.state=H9$.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_H:switch(Q){case H9$.cc.M:case H9$.cc.m:this.state=H9$.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_M:switch(Q){case H9$.cc.S:case H9$.cc.s:this.state=H9$.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_MS:switch(Q){case H9$.cc.G:case H9$.cc.g:this.state=H9$.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_MSG:switch(Q){case H9$.cc.SPACE:case H9$.cc.TAB:this.state=H9$.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_MSG_SPC:switch(Q){case H9$.cc.SPACE:case H9$.cc.TAB:continue;default:this.state=H9$.State.MSG_ARG,this.as=Z}break;case H9$.State.MSG_ARG:switch(Q){case H9$.cc.CR:this.drop=1;break;case H9$.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=H9$.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;case H9$.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let X=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:H9$.Kind.MSG,msg:this.ma,data:X}),this.argBuf=void 0,this.msgBuf=void 0,this.state=H9$.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:H9$.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=H9$.State.MSG_END;break;case H9$.State.MSG_END:switch(Q){case H9$.cc.NL:this.drop=0,this.as=Z+1,this.state=H9$.State.OP_START;break;default:continue}break;case H9$.State.OP_PLUS:switch(Q){case H9$.cc.O:case H9$.cc.o:this.state=H9$.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_PLUS_O:switch(Q){case H9$.cc.K:case H9$.cc.k:this.state=H9$.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_PLUS_OK:switch(Q){case H9$.cc.NL:this.dispatcher.push({kind:H9$.Kind.OK}),this.drop=0,this.state=H9$.State.OP_START;break}break;case H9$.State.OP_MINUS:switch(Q){case H9$.cc.E:case H9$.cc.e:this.state=H9$.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_MINUS_E:switch(Q){case H9$.cc.R:case H9$.cc.r:this.state=H9$.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_MINUS_ER:switch(Q){case H9$.cc.R:case H9$.cc.r:this.state=H9$.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_MINUS_ERR:switch(Q){case H9$.cc.SPACE:case H9$.cc.TAB:this.state=H9$.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_MINUS_ERR_SPC:switch(Q){case H9$.cc.SPACE:case H9$.cc.TAB:continue;default:this.state=H9$.State.MINUS_ERR_ARG,this.as=Z}break;case H9$.State.MINUS_ERR_ARG:switch(Q){case H9$.cc.CR:this.drop=1;break;case H9$.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:H9$.Kind.ERR,data:X}),this.drop=0,this.as=Z+1,this.state=H9$.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(Q))}break;case H9$.State.OP_P:switch(Q){case H9$.cc.I:case H9$.cc.i:this.state=H9$.State.OP_PI;break;case H9$.cc.O:case H9$.cc.o:this.state=H9$.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_PO:switch(Q){case H9$.cc.N:case H9$.cc.n:this.state=H9$.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_PON:switch(Q){case H9$.cc.G:case H9$.cc.g:this.state=H9$.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_PONG:switch(Q){case H9$.cc.NL:this.dispatcher.push({kind:H9$.Kind.PONG}),this.drop=0,this.state=H9$.State.OP_START;break}break;case H9$.State.OP_PI:switch(Q){case H9$.cc.N:case H9$.cc.n:this.state=H9$.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_PIN:switch(Q){case H9$.cc.G:case H9$.cc.g:this.state=H9$.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_PING:switch(Q){case H9$.cc.NL:this.dispatcher.push({kind:H9$.Kind.PING}),this.drop=0,this.state=H9$.State.OP_START;break}break;case H9$.State.OP_I:switch(Q){case H9$.cc.N:case H9$.cc.n:this.state=H9$.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_IN:switch(Q){case H9$.cc.F:case H9$.cc.f:this.state=H9$.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_INF:switch(Q){case H9$.cc.O:case H9$.cc.o:this.state=H9$.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_INFO:switch(Q){case H9$.cc.SPACE:case H9$.cc.TAB:this.state=H9$.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case H9$.State.OP_INFO_SPC:switch(Q){case H9$.cc.SPACE:case H9$.cc.TAB:continue;default:this.state=H9$.State.INFO_ARG,this.as=Z}break;case H9$.State.INFO_ARG:switch(Q){case H9$.cc.CR:this.drop=1;break;case H9$.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:H9$.Kind.INFO,data:X}),this.drop=0,this.as=Z+1,this.state=H9$.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;default:throw this.fail($.subarray(Z))}}if((this.state===H9$.State.MSG_ARG||this.state===H9$.State.MINUS_ERR_ARG||this.state===H9$.State.INFO_ARG)&&!this.argBuf)this.argBuf=new Ge0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===H9$.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new Ge0.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 Ge0.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 H9$.cc.SPACE:case H9$.cc.TAB:case H9$.cc.CR:case H9$.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],Qu);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],Qu);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}: ${Ke0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case H9$.cc.SPACE:case H9$.cc.TAB:case H9$.cc.CR:case H9$.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],Qu),this.ma.size=this.protoParseInt(Z[3],Qu);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],Qu),this.ma.size=this.protoParseInt(Z[4],Qu);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]<K9$||$[X]>hJ4)return-1;Q=Q*10+($[X]-K9$)}return Z!==void 0&&Q>Z?-1:Q}}H9$.Parser=W9$;H9$.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};H9$.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 TJ0=v((U9$)=>{Object.defineProperty(U9$,"__esModule",{value:!0});U9$.MsgHdrsImpl=void 0;U9$.canonicalMIMEHeaderKey=Fe0;U9$.headers=cJ4;var F9$=nJ(),aK=lD(),AJ0=tJ();function Fe0($){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 AJ0.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 cJ4($=0,Z=""){if($===0&&Z!=="")throw AJ0.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw AJ0.InvalidArgumentError.format("description","is required");return new Xu($,Z)}var He0="NATS/1.0";class Xu{_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 Xu,X=F9$.TD.decode($).split(`\r
|
|
2081
2081
|
`),Y=X[0];if(Y!==He0){let J=Y.replace(He0,"").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 $=He0;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
|
|
2082
2082
|
${Z}: ${Q[X]}`;return`${$}\r
|
package/dist/server/server.js
CHANGED
|
@@ -2996,7 +2996,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
2996
2996
|
${J.join(`
|
|
2997
2997
|
`)}`:X}function QM6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
2998
2998
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var qa$=200,pq6=12,tq6,rq6=300,iM0=3;var t31=O(()=>{cZ();u$();mM0();tq6={aheadBy:0,behindBy:0,files:[]}});function XM6($){if(!$||$.includes(".."))return!1;return YM6.test($)}function Ia$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!XM6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function Va$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var YM6;var ka$=O(()=>{YM6=/^[\w./@-]+$/});function l10($,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 Ca$($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new hw(lZ);let J=await TL($.storage,X,Y);if(J&&await LN($.storage,J)){let F=await mH($,J,{forceRefresh:!0}).catch((U)=>{throw new hw(U instanceof Error?U.message:lZ)});await Sa$($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new hw("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await hu({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:lZ;throw new hw(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await iH(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=lG$(F instanceof Error?F.message:String(F));throw U?new hw(N):F});await Sa$($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function Sa$($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=kd($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await nL(K,JM6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var JM6=10485760,hw;var o31=O(()=>{F3();bM0();Ma();sJ0();As();cZ();hw=class hw extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function WM6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!GM6.test(Z))throw Error(`Invalid branch name: ${$}`)}function db($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(HM6)])}async function UM6($,Z){let Q=$.var.studioContext,Y=eH(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=Wf(G?.metadata?.runtime);if(W)return W;let K=fz0(Z.virtualMcpMetadata),H=K==="cms"?await V31(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)Ia(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function NM6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await uY($.var.studioContext)}catch{return null}}function mb($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function fd($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=l10(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=i(Y);return yu(Y,J.id,X)}function r31($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=OJ$(Z);if(Y!==void 0)return $.json({error:Q},429,{...z5,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof j6)return $.json({error:Q},409,z5);let X=D3(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,z5)}return $.json({error:Q},502,z5)}async function fa$($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function ba$($){try{let Z=await fd($),Q=await pM0(Z,$.get("vmClaim").branch);return $.json(Q,200,z5)}catch(Z){return r31($,Z)}}function c10($,Z){let Y=(oM0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return oM0.set($,X),X.finally(()=>{if(oM0.get($)===X)oM0.delete($)}),Y}async function T7($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,z5);let Y=Q?.runner??mb($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...z5}})}}let D=await B.text(),L=Q?.redactRepoDir?BM6(D):D,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...z5}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let D=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${D}`},502)}}function BM6($){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 rM0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function DM6($){return xa$.includes($)}var GM6,_a$=524288,KM6=65536,HM6=1e4,va$=2000,FM6,oM0,z5,xa$,ya$=()=>{let $=new e0;$.use("/:virtualMcpId/:branch/*",FM6),$.post("/:virtualMcpId/:branch/write",(Q)=>T7(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:db(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>T7(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:db(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>T7(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:db(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>T7(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:db(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>T7(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:db(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>T7(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:db(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>T7(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:db(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return T7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return T7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>T7(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>T7(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!DM6(Y))return Q.json({error:`step must be one of: ${xa$.join(", ")}`},400);let X=Q.get("vmClaim"),J=await V31(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await NM6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,z5);if(Y==="start"){let G=i(Q.var.studioContext),W=wl(X.virtualMcpMetadata);try{await Sz0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return T7(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return OB(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return xs$(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return ba$(Q);return Z(Q)});let Z=(Q)=>T7(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(va$)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return ba$(Q);return T7(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(va$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await fd(Q),G=await nM0(J,Y.branch,X.base);return Q.json(G,200,z5)}catch(X){return r31(Q,X)}return T7(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,z5);let Y=mb(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return c10(X,async()=>{try{await k31(W,Y,X);let K=l10(J,G);if(K)await Ca$(W,Y,X,K)}catch(K){if(K instanceof hw)return Q.json({error:K.message},403,z5);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,z5)}return T7(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return c10(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,z5);try{let G=await fd(Q);return await Ma$(G,Y.branch,J),Q.json({ok:!0},200,z5)}catch(G){let W=D3(G)===409||G instanceof j6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,z5)}});return c10(Y.claimName,()=>T7(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return c10(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await fd(Q),H=W.base??await K.getDefaultBranch();return await tM0(K,Y.branch,H),Q.json({ok:!0},200,z5)}catch(W){return r31(Q,W)}});let X=mb(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return c10(J,async()=>{try{await k31(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,z5)}return T7(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",y5({maxSize:_a$,onError:(Q)=>Q.json({error:"Payload too large"},413,z5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=mb(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=_31(F)&&N?[F,U]:X?await Promise.all([rM0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),rM0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await fd(Q);return Promise.all([pM0(w,Y.branch),nM0(w,Y.branch)])})();await TW(K,i(K).id,"suggesting a commit message");let L=await ls$(K,B,D);return Q.json(L,200,z5)}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,z5);return Q.json({error:F},502,z5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",y5({maxSize:_a$,onError:(Q)=>Q.json({error:"Payload too large"},413,z5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=mb(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=_31(F)&&N?[F,U]:X?await Promise.all([rM0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),rM0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await fd(Q);return Promise.all([pM0(w,Y.branch),nM0(w,Y.branch)])})();await TW(K,i(K).id,"judging whether a change needs review");let L=await ds$(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,z5)}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,z5);return Q.json({error:F},502,z5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=mb(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return fa$(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",y5({maxSize:KM6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=mb(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=Ia$(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=Va$(J,W.resolveType);return fa$(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var ga$=O(()=>{y$();qK();Vd();I31();Aa();vs$();E3();jl();fs$();ZK();UH();bs$();ys$();z$1();Ra();b31();ms$();cZ();u6();t31();ka$();o31();GM6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;FM6=fM0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=c0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=i(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{WM6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=ns({orgId:X.id,virtualMcpId:J,branch:G}),H=await a01(Q,G),F=e01(H,Y),U=_s$({userId:F,projectRef:K}),N=W.metadata??null,B=await UM6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let D;try{D=await uY(Q)}catch{D=null}if(!D)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:D,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});oM0=new Map;z5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};xa$=["clone","install","start"]});function ha$($,Z,Q){let Y=s31.get($);if(!Y)Y={pending:null,running:!1},s31.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)LM6($,Y);return J}async function LM6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await wM6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)s31.delete($)}}async function wM6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await vd(Z,Q),W=await Z.listDecofileEntries(G,Y),K=i31(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let D=p31(K,N),L=`${JSON.stringify(B,null,2)}
|
|
2999
|
-
`;await Pa$(Z.repo,L);let w=D[0]??`${dM0(Y)}/${g31(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of p31(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await Aa$(Z,F.values(),X),{decofile:B,skipped:D}=x10(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:lW(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:jM6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof j6)||J>=OM6-1)throw N;await P$(M7(2000,200,J,2,0.5))}}}function jM6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return q01(Y,$.deps.coAuthor)}var OM6=3,s31;var ua$=O(()=>{RE0();yM0();Q6();u$();cZ();mM0();s31=new Map});import{createHmac as la$,randomBytes as EM6,timingSafeEqual as zM6}from"crypto";function ca$(){if(sM0)return sM0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return sM0=$?Buffer.from($):EM6(32),sM0}function a31($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+PM6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=la$("sha256",ca$()).update(Y).digest("base64url");return`${Y}.${X}`}function da$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(la$("sha256",ca$()).update(Y).digest("base64url"));if(X.length!==J.length||!zM6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var PM6=21600000,sM0=null;var ma$=O(()=>{a1()});import{z as bd}from"zod";function TM6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&AM6.test($)}function oa$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function d10($){let Z=$.get("decofileScope");return yu($.var.studioContext,Z.organizationId,Z.githubRepo)}function m10($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof j6)return $.json({error:Q},409);let Y=D3(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function ra$(){let $=new e0;return $.use("/:virtualMcpId/:branch",ta$),$.use("/:virtualMcpId/:branch/*",ta$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await d10(Z),X=await Ta$(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(X.decofile,200,{...J,"content-type":"application/json"});let G=a31({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(oa$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return m10(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await d10(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return m10(Z,X)}}),$.patch("/:virtualMcpId/:branch",qM6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=MM6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{xM0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(y31(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await d10(Z),W=await ha$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:kd(Y)},J),K=a31({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:oa$(Z)})}catch(G){return m10(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await d10(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(D3(W)!==409)throw W;await tM0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(D3(G)===409)return Z.json({error:"merge-conflict"},409);if(D3(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return m10(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await d10(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(D3(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return m10(Z,Y)}}),$}var AM6,ia$=500,pa$=1048576,na$=1024,RM6=8388608,qM6,MM6,ta$;var sa$=O(()=>{P$1();yM0();y$();qK();I31();bM0();o31();cZ();ua$();ma$();t31();mM0();UH();AM6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;qM6=y5({maxSize:RM6,onError:($)=>$.json({error:"Payload too large"},413)}),MM6=bd.object({set:bd.record(bd.string(),bd.unknown()).optional(),delete:bd.array(bd.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)<=ia$,{message:`Patch cannot touch more than ${ia$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=pa$),{message:`Each block must be at most ${pa$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=na$),{message:`Each block key must be at most ${na$} characters`}),ta$=fM0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!TM6(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||!da$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await pG(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!vz0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=l10(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var aa$=($)=>{let Z=new e0;if(Z.use("*",Gd),Z.use("*",In$),Z.route("/",mq0()),Z.route("/",Ht$()),Z.route("/",on$()),Z.route("/",Es$()),Z.route("/",Fs$()),Z.route("/",Ls$()),Z.route("/",Ns$()),Z.route("/",CM0()),Z.route("/tools",Ms$()),Z.route("/",Ts$()),Z.route("/",cr$({kvStorage:$.kvStorage})),Z.route("/",ur$()),Z.route("/fs",Zs$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ya$()),Z.route("/decofile",ra$()),Z.route("/",Ws$()),Z.route("/",Ys$()),Z.route("/deco-sites",pq0()),Z.route("/hosting",gn$()),Z.route("/monitor",in$()),Z.route("/sso",hq0()),Z.route("/",_M0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",vn$()),$.mountDevAssets)Z.route("/dev-assets",rq0({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("/",ym$()),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",Js$()),Z.route("/mcp",fA0()),Z.route("/mcp/self",VM0()),Z.route("/mcp",yA0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var ea$=O(()=>{y$();Vn$();Vq0();fn$();tJ1();hn$();pn$();sq0();Cb();dJ1();eJ1();lr$();dr$();Qs$();Xs$();Pe();yJ1();gA0();j31();Gs$();Ks$();Us$();Bs$();P31();zs$();Rs$();A31();Is$();T31();bA0();ga$();sa$()});function IM6($){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 VM6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},$e$=()=>{let $=new e0;return $.use("*",VM6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await ZJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:IM6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ze$=O(()=>{y$();a1();SR0()});import{z as V1}from"zod";function hF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function gM6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function hM6($,Z,Q){try{return JSON.parse($)}catch{throw new Xe$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function uM6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:hM6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function lM6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?qJ(Q.function.parameters):qJ({type:"object",properties:{}});return[Q.function.name,X$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function cM6($){if(!$)return;return{openai:{response_format:$}}}function dM6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Qe$($,Z,Q,Y,X,J){let G={model:$,messages:Z,tools:Q,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function Ye$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var kM6=256,SM6,CM6,_M6,vM6,fM6,bM6,xM6,yM6,Xe$,Je$,Ge$;var We$=O(()=>{v4();y$();Vd();BK();SM6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),CM6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),_M6=V1.discriminatedUnion("role",[V1.object({role:V1.literal("system"),content:V1.string(),name:V1.string().optional()}),V1.object({role:V1.literal("user"),content:V1.union([V1.string(),V1.array(V1.union([V1.object({type:V1.literal("text"),text:V1.string()}),V1.object({type:V1.literal("image_url"),image_url:V1.object({url:V1.string(),detail:V1.string().optional()})})]))]),name:V1.string().optional()}),V1.object({role:V1.literal("assistant"),content:V1.string().nullable().optional(),name:V1.string().optional(),tool_calls:V1.array(CM6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),vM6=V1.object({type:V1.literal("text")}),fM6=V1.object({type:V1.literal("json_object")}),bM6=V1.object({type:V1.literal("json_schema"),json_schema:V1.object({name:V1.string(),description:V1.string().optional(),schema:V1.record(V1.string(),V1.unknown()),strict:V1.boolean().optional()})}),xM6=V1.union([vM6,fM6,bM6]),yM6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(_M6),stream:V1.boolean().optional().default(!1),temperature:V1.number().min(0).max(2).optional(),max_tokens:V1.number().positive().optional(),top_p:V1.number().min(0).max(1).optional(),frequency_penalty:V1.number().min(-2).max(2).optional(),presence_penalty:V1.number().min(-2).max(2).optional(),stop:V1.union([V1.string(),V1.array(V1.string())]).optional(),tools:V1.array(SM6).optional(),tool_choice:V1.union([V1.literal("auto"),V1.literal("none"),V1.literal("required"),V1.object({type:V1.literal("function"),function:V1.object({name:V1.string()})})]).optional(),response_format:xM6.optional(),user:V1.string().optional()});Xe$=class Xe$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Je$=new e0;Je$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(hF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(hF("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(hF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=yM6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(hF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=gM6(J.model);if(!G)return $.json(hF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>oj(E.providerId));if(!j)return $.json(hF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(hF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=uM6(J.messages),N=J.tools?lM6(J.tools):void 0,B=cM6(J.response_format),D=dM6(),L=Math.floor(Date.now()/1000);if(J.stream)return OB($,async(w)=>{let j=Qe$(F,U,N,J,B,$.req.raw.signal);try{let E=mL(j),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of E.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=kM6)await q()}else if(k.type==="tool-call"){await q();let M=P++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:Ye$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await q(),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=Qe$(F,U,N,J,B,$.req.raw.signal),j=await cL(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:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:Ye$(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(hF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(hF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(hF(X.message,"server_error"),500)}});Ge$=Je$});function mM6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Ke$(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!uZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||p5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(KJ0(U)!==J)continue;if(!mM6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var He$=O(()=>{y$();U3()});var Ue$;var Fe$=O(()=>{Ue$={name:"decocms",version:"4.369.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@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":"^2.9.1","@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":"^3.0.10","@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:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function nM6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??pM6}}var Ne$,pM6="https://ph.studio.decocms.com",Be$;var De$=O(()=>{y$();ro();Cf();q5();a1();TJ1();Fe$();Ne$=new e0;Ne$.get("/",($)=>{let Z={version:Ue$.version,theme:t6$(),...hW().logo&&{logo:hW().logo},...uN()&&{internalUrl:kg1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:Vp$(),posthog:nM6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:PB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Be$=Ne$});function xd($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function e31($){return(xd($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function Le$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(xd($))}&sz=${Z}`}function Oe$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function we$($){let{brand:Z,domain:Q,score:Y,verdict:X}=$,J=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=X?.trim()?Oe$(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):Oe$(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var ib,tM6,oM6,rM6,sM6,je$;var Ee$=O(()=>{ib=m0.enum(["good","bad","neutral"]),tM6=m0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},m0.object({kind:m0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:m0.coerce.string().optional(),tone:ib.optional(),muted:m0.boolean().optional(),delta:m0.coerce.string().optional(),deltaDir:m0.enum(["up","down","neutral"]).optional(),points:m0.array(m0.coerce.number()).optional(),label:m0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),oM6=m0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},m0.array(tM6)),rM6={key:m0.coerce.string(),title:m0.coerce.string(),eyebrow:m0.coerce.string().optional(),headline:m0.coerce.string(),annotation:m0.coerce.string().optional(),methodology:m0.coerce.string().optional(),sources:m0.array(m0.object({name:m0.coerce.string(),logoUrl:m0.coerce.string()})).optional()},sM6=m0.discriminatedUnion("template",[m0.object({template:m0.literal("cover"),score:m0.object({value:m0.coerce.number(),max:m0.coerce.number().optional(),grade:m0.coerce.string().optional(),label:m0.coerce.string().optional()}).optional(),brandImage:m0.coerce.string().optional(),screenshot:m0.coerce.string().optional(),mobileScreenshot:m0.coerce.string().optional()}),m0.object({template:m0.literal("cta"),ctaUrl:m0.coerce.string().optional(),ctaLabel:m0.coerce.string().optional(),bullets:m0.array(m0.coerce.string()).optional()}),m0.object({template:m0.literal("series"),points:m0.array(m0.coerce.number()).min(2),xLabels:m0.array(m0.coerce.string()).min(1),unit:m0.coerce.string().optional(),callout:m0.object({index:m0.coerce.number(),value:m0.coerce.string(),tone:ib.optional()})}),m0.object({template:m0.literal("threshold"),value:m0.coerce.string().default(""),metricLabel:m0.coerce.string().optional(),ratio:m0.coerce.number(),thresholdRatio:m0.coerce.number().optional(),thresholdLabel:m0.coerce.string().default(""),tone:ib.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:ib.optional()})).min(1)}),m0.object({template:m0.literal("bars"),items:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),ratio:m0.coerce.number(),tone:ib.optional()})).min(1)}),m0.object({template:m0.literal("gauges"),gauges:m0.array(m0.object({label:m0.coerce.string(),value:m0.coerce.string(),status:m0.enum(["good","warn","bad"]).catch("warn"),caption:m0.coerce.string().optional(),ratio:m0.coerce.number().optional()})).min(1)}),m0.object({template:m0.literal("checklist"),checks:m0.array(m0.object({label:m0.coerce.string(),status:m0.enum(["pass","fail","warn"]).catch("fail"),value:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("table"),columns:m0.array(m0.object({label:m0.coerce.string(),align:m0.enum(["left","right"]).optional()})).min(1),rows:m0.array(oM6).min(1),highlightRow:m0.coerce.number().optional()}),m0.object({template:m0.literal("products"),products:m0.array(m0.object({name:m0.coerce.string(),price:m0.coerce.string().optional(),image:m0.coerce.string().optional(),url:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("list"),entries:m0.array(m0.object({label:m0.coerce.string(),severity:m0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:m0.coerce.number().optional()}),m0.object({template:m0.literal("keywords"),volumeLabel:m0.coerce.string().optional(),keywords:m0.array(m0.object({term:m0.coerce.string(),volume:m0.coerce.string(),position:m0.coerce.number().catch(0)})).min(1)}),m0.object({template:m0.literal("competitor"),metricLabel:m0.coerce.string().optional(),competitors:m0.array(m0.object({name:m0.coerce.string(),value:m0.coerce.string(),tone:ib.optional(),isYou:m0.boolean().optional()})).min(1)}),m0.object({template:m0.literal("scorecard"),rivalLabel:m0.coerce.string().optional(),dimensions:m0.array(m0.object({label:m0.coerce.string(),you:m0.coerce.string(),rival:m0.coerce.string().optional(),rivalName:m0.coerce.string().optional(),tone:ib.optional()})).min(1)})]),je$=m0.object({...rM6,template:sM6})});function aM0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=je$.safeParse(X.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:X.section_type,position:X.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((X)=>X!==null),Y=Q.filter((X)=>X.template.template!=="cover"&&X.template.template!=="cta").map((X)=>({key:X.key,title:X.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Y},slides:Q},drops:Z}}var $W1=O(()=>{Ee$()});import{join as ze$}from"path";async function eM6($){try{let Z=await fetch(`${VH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(aM6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=aM0(Q);if(!Y.slides.length)return null;let X=Y.slides.find((W)=>W.template.template==="cover"),J=X?.template,G=J&&J.template==="cover"?J:void 0;return{brand:Y.meta.brand?.trim()||e31($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function DG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function $I6($,Z){let Q=xd($),Y=Z?.brand?.trim()||e31(Q),X=Le$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=we$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${DG(W)}</title>`,`<meta name="description" content="${DG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${DG(W)}" />`,`<meta property="og:description" content="${DG(K)}" />`,`<meta property="og:url" content="${DG(G)}" />`,`<meta property="og:image" content="${DG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${DG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${DG(W)}" />`,`<meta name="twitter:description" content="${DG(K)}" />`,`<meta name="twitter:image" content="${DG(H)}" />`,`<meta name="twitter:image:alt" content="${DG(F)}" />`,`<link rel="canonical" href="${DG(G)}" />`,`<link rel="icon" href="${DG(X)}" sizes="any" />`].join(`
|
|
2999
|
+
`;await Pa$(Z.repo,L);let w=D[0]??`${dM0(Y)}/${g31(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of p31(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await Aa$(Z,F.values(),X),{decofile:B,skipped:D}=x10(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:lW(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:jM6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof j6)||J>=OM6-1)throw N;await P$(M7(2000,200,J,2,0.5))}}}function jM6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return q01(Y,$.deps.coAuthor)}var OM6=3,s31;var ua$=O(()=>{RE0();yM0();Q6();u$();cZ();mM0();s31=new Map});import{createHmac as la$,randomBytes as EM6,timingSafeEqual as zM6}from"crypto";function ca$(){if(sM0)return sM0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return sM0=$?Buffer.from($):EM6(32),sM0}function a31($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+PM6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=la$("sha256",ca$()).update(Y).digest("base64url");return`${Y}.${X}`}function da$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(la$("sha256",ca$()).update(Y).digest("base64url"));if(X.length!==J.length||!zM6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var PM6=21600000,sM0=null;var ma$=O(()=>{a1()});import{z as bd}from"zod";function TM6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&AM6.test($)}function oa$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function d10($){let Z=$.get("decofileScope");return yu($.var.studioContext,Z.organizationId,Z.githubRepo)}function m10($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof j6)return $.json({error:Q},409);let Y=D3(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function ra$(){let $=new e0;return $.use("/:virtualMcpId/:branch",ta$),$.use("/:virtualMcpId/:branch/*",ta$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await d10(Z),X=await Ta$(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(X.decofile,200,{...J,"content-type":"application/json"});let G=a31({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(oa$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return m10(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await d10(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return m10(Z,X)}}),$.patch("/:virtualMcpId/:branch",qM6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=MM6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{xM0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(y31(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await d10(Z),W=await ha$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:kd(Y)},J),K=a31({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:oa$(Z)})}catch(G){return m10(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await d10(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(D3(W)!==409)throw W;await tM0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(D3(G)===409)return Z.json({error:"merge-conflict"},409);if(D3(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return m10(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await d10(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(D3(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return m10(Z,Y)}}),$}var AM6,ia$=500,pa$=1048576,na$=1024,RM6=8388608,qM6,MM6,ta$;var sa$=O(()=>{P$1();yM0();y$();qK();I31();bM0();o31();cZ();ua$();ma$();t31();mM0();UH();AM6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;qM6=y5({maxSize:RM6,onError:($)=>$.json({error:"Payload too large"},413)}),MM6=bd.object({set:bd.record(bd.string(),bd.unknown()).optional(),delete:bd.array(bd.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)<=ia$,{message:`Patch cannot touch more than ${ia$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=pa$),{message:`Each block must be at most ${pa$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=na$),{message:`Each block key must be at most ${na$} characters`}),ta$=fM0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!TM6(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||!da$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await pG(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!vz0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=l10(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var aa$=($)=>{let Z=new e0;if(Z.use("*",Gd),Z.use("*",In$),Z.route("/",mq0()),Z.route("/",Ht$()),Z.route("/",on$()),Z.route("/",Es$()),Z.route("/",Fs$()),Z.route("/",Ls$()),Z.route("/",Ns$()),Z.route("/",CM0()),Z.route("/tools",Ms$()),Z.route("/",Ts$()),Z.route("/",cr$({kvStorage:$.kvStorage})),Z.route("/",ur$()),Z.route("/fs",Zs$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ya$()),Z.route("/decofile",ra$()),Z.route("/",Ws$()),Z.route("/",Ys$()),Z.route("/deco-sites",pq0()),Z.route("/hosting",gn$()),Z.route("/monitor",in$()),Z.route("/sso",hq0()),Z.route("/",_M0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",vn$()),$.mountDevAssets)Z.route("/dev-assets",rq0({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("/",ym$()),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",Js$()),Z.route("/mcp",fA0()),Z.route("/mcp/self",VM0()),Z.route("/mcp",yA0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var ea$=O(()=>{y$();Vn$();Vq0();fn$();tJ1();hn$();pn$();sq0();Cb();dJ1();eJ1();lr$();dr$();Qs$();Xs$();Pe();yJ1();gA0();j31();Gs$();Ks$();Us$();Bs$();P31();zs$();Rs$();A31();Is$();T31();bA0();ga$();sa$()});function IM6($){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 VM6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},$e$=()=>{let $=new e0;return $.use("*",VM6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await ZJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:IM6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ze$=O(()=>{y$();a1();SR0()});import{z as V1}from"zod";function hF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function gM6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function hM6($,Z,Q){try{return JSON.parse($)}catch{throw new Xe$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function uM6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:hM6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function lM6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?qJ(Q.function.parameters):qJ({type:"object",properties:{}});return[Q.function.name,X$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function cM6($){if(!$)return;return{openai:{response_format:$}}}function dM6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Qe$($,Z,Q,Y,X,J){let G={model:$,messages:Z,tools:Q,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function Ye$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var kM6=256,SM6,CM6,_M6,vM6,fM6,bM6,xM6,yM6,Xe$,Je$,Ge$;var We$=O(()=>{v4();y$();Vd();BK();SM6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),CM6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),_M6=V1.discriminatedUnion("role",[V1.object({role:V1.literal("system"),content:V1.string(),name:V1.string().optional()}),V1.object({role:V1.literal("user"),content:V1.union([V1.string(),V1.array(V1.union([V1.object({type:V1.literal("text"),text:V1.string()}),V1.object({type:V1.literal("image_url"),image_url:V1.object({url:V1.string(),detail:V1.string().optional()})})]))]),name:V1.string().optional()}),V1.object({role:V1.literal("assistant"),content:V1.string().nullable().optional(),name:V1.string().optional(),tool_calls:V1.array(CM6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),vM6=V1.object({type:V1.literal("text")}),fM6=V1.object({type:V1.literal("json_object")}),bM6=V1.object({type:V1.literal("json_schema"),json_schema:V1.object({name:V1.string(),description:V1.string().optional(),schema:V1.record(V1.string(),V1.unknown()),strict:V1.boolean().optional()})}),xM6=V1.union([vM6,fM6,bM6]),yM6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(_M6),stream:V1.boolean().optional().default(!1),temperature:V1.number().min(0).max(2).optional(),max_tokens:V1.number().positive().optional(),top_p:V1.number().min(0).max(1).optional(),frequency_penalty:V1.number().min(-2).max(2).optional(),presence_penalty:V1.number().min(-2).max(2).optional(),stop:V1.union([V1.string(),V1.array(V1.string())]).optional(),tools:V1.array(SM6).optional(),tool_choice:V1.union([V1.literal("auto"),V1.literal("none"),V1.literal("required"),V1.object({type:V1.literal("function"),function:V1.object({name:V1.string()})})]).optional(),response_format:xM6.optional(),user:V1.string().optional()});Xe$=class Xe$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Je$=new e0;Je$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(hF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(hF("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(hF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=yM6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(hF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=gM6(J.model);if(!G)return $.json(hF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>oj(E.providerId));if(!j)return $.json(hF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(hF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=uM6(J.messages),N=J.tools?lM6(J.tools):void 0,B=cM6(J.response_format),D=dM6(),L=Math.floor(Date.now()/1000);if(J.stream)return OB($,async(w)=>{let j=Qe$(F,U,N,J,B,$.req.raw.signal);try{let E=mL(j),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of E.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=kM6)await q()}else if(k.type==="tool-call"){await q();let M=P++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:Ye$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await q(),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=Qe$(F,U,N,J,B,$.req.raw.signal),j=await cL(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:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:Ye$(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(hF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(hF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(hF(X.message,"server_error"),500)}});Ge$=Je$});function mM6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function Ke$(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!uZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||p5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(KJ0(U)!==J)continue;if(!mM6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var He$=O(()=>{y$();U3()});var Ue$;var Fe$=O(()=>{Ue$={name:"decocms",version:"4.370.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@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":"^2.9.1","@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":"^3.0.10","@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:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function nM6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??pM6}}var Ne$,pM6="https://ph.studio.decocms.com",Be$;var De$=O(()=>{y$();ro();Cf();q5();a1();TJ1();Fe$();Ne$=new e0;Ne$.get("/",($)=>{let Z={version:Ue$.version,theme:t6$(),...hW().logo&&{logo:hW().logo},...uN()&&{internalUrl:kg1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:Vp$(),posthog:nM6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:PB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Be$=Ne$});function xd($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function e31($){return(xd($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function Le$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(xd($))}&sz=${Z}`}function Oe$($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function we$($){let{brand:Z,domain:Q,score:Y,verdict:X}=$,J=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=X?.trim()?Oe$(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):Oe$(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var ib,tM6,oM6,rM6,sM6,je$;var Ee$=O(()=>{ib=m0.enum(["good","bad","neutral"]),tM6=m0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},m0.object({kind:m0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:m0.coerce.string().optional(),tone:ib.optional(),muted:m0.boolean().optional(),delta:m0.coerce.string().optional(),deltaDir:m0.enum(["up","down","neutral"]).optional(),points:m0.array(m0.coerce.number()).optional(),label:m0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),oM6=m0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},m0.array(tM6)),rM6={key:m0.coerce.string(),title:m0.coerce.string(),eyebrow:m0.coerce.string().optional(),headline:m0.coerce.string(),annotation:m0.coerce.string().optional(),methodology:m0.coerce.string().optional(),sources:m0.array(m0.object({name:m0.coerce.string(),logoUrl:m0.coerce.string()})).optional()},sM6=m0.discriminatedUnion("template",[m0.object({template:m0.literal("cover"),score:m0.object({value:m0.coerce.number(),max:m0.coerce.number().optional(),grade:m0.coerce.string().optional(),label:m0.coerce.string().optional()}).optional(),brandImage:m0.coerce.string().optional(),screenshot:m0.coerce.string().optional(),mobileScreenshot:m0.coerce.string().optional()}),m0.object({template:m0.literal("cta"),ctaUrl:m0.coerce.string().optional(),ctaLabel:m0.coerce.string().optional(),bullets:m0.array(m0.coerce.string()).optional()}),m0.object({template:m0.literal("series"),points:m0.array(m0.coerce.number()).min(2),xLabels:m0.array(m0.coerce.string()).min(1),unit:m0.coerce.string().optional(),callout:m0.object({index:m0.coerce.number(),value:m0.coerce.string(),tone:ib.optional()})}),m0.object({template:m0.literal("threshold"),value:m0.coerce.string().default(""),metricLabel:m0.coerce.string().optional(),ratio:m0.coerce.number(),thresholdRatio:m0.coerce.number().optional(),thresholdLabel:m0.coerce.string().default(""),tone:ib.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:ib.optional()})).min(1)}),m0.object({template:m0.literal("bars"),items:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),ratio:m0.coerce.number(),tone:ib.optional()})).min(1)}),m0.object({template:m0.literal("gauges"),gauges:m0.array(m0.object({label:m0.coerce.string(),value:m0.coerce.string(),status:m0.enum(["good","warn","bad"]).catch("warn"),caption:m0.coerce.string().optional(),ratio:m0.coerce.number().optional()})).min(1)}),m0.object({template:m0.literal("checklist"),checks:m0.array(m0.object({label:m0.coerce.string(),status:m0.enum(["pass","fail","warn"]).catch("fail"),value:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("table"),columns:m0.array(m0.object({label:m0.coerce.string(),align:m0.enum(["left","right"]).optional()})).min(1),rows:m0.array(oM6).min(1),highlightRow:m0.coerce.number().optional()}),m0.object({template:m0.literal("products"),products:m0.array(m0.object({name:m0.coerce.string(),price:m0.coerce.string().optional(),image:m0.coerce.string().optional(),url:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("list"),entries:m0.array(m0.object({label:m0.coerce.string(),severity:m0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:m0.coerce.number().optional()}),m0.object({template:m0.literal("keywords"),volumeLabel:m0.coerce.string().optional(),keywords:m0.array(m0.object({term:m0.coerce.string(),volume:m0.coerce.string(),position:m0.coerce.number().catch(0)})).min(1)}),m0.object({template:m0.literal("competitor"),metricLabel:m0.coerce.string().optional(),competitors:m0.array(m0.object({name:m0.coerce.string(),value:m0.coerce.string(),tone:ib.optional(),isYou:m0.boolean().optional()})).min(1)}),m0.object({template:m0.literal("scorecard"),rivalLabel:m0.coerce.string().optional(),dimensions:m0.array(m0.object({label:m0.coerce.string(),you:m0.coerce.string(),rival:m0.coerce.string().optional(),rivalName:m0.coerce.string().optional(),tone:ib.optional()})).min(1)})]),je$=m0.object({...rM6,template:sM6})});function aM0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=je$.safeParse(X.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:X.section_type,position:X.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((X)=>X!==null),Y=Q.filter((X)=>X.template.template!=="cover"&&X.template.template!=="cta").map((X)=>({key:X.key,title:X.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Y},slides:Q},drops:Z}}var $W1=O(()=>{Ee$()});import{join as ze$}from"path";async function eM6($){try{let Z=await fetch(`${VH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(aM6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=aM0(Q);if(!Y.slides.length)return null;let X=Y.slides.find((W)=>W.template.template==="cover"),J=X?.template,G=J&&J.template==="cover"?J:void 0;return{brand:Y.meta.brand?.trim()||e31($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function DG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function $I6($,Z){let Q=xd($),Y=Z?.brand?.trim()||e31(Q),X=Le$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=we$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${DG(W)}</title>`,`<meta name="description" content="${DG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${DG(W)}" />`,`<meta property="og:description" content="${DG(K)}" />`,`<meta property="og:url" content="${DG(G)}" />`,`<meta property="og:image" content="${DG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${DG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${DG(W)}" />`,`<meta name="twitter:description" content="${DG(K)}" />`,`<meta name="twitter:image" content="${DG(H)}" />`,`<meta name="twitter:image:alt" content="${DG(F)}" />`,`<link rel="canonical" href="${DG(G)}" />`,`<link rel="icon" href="${DG(X)}" sizes="any" />`].join(`
|
|
3000
3000
|
`)}function ZI6($,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}
|
|
3001
3001
|
</head>`)}function Pe$($){let Z=new e0;return Z.get("/:domain/og.png",async(Q)=>{let Y=xd(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(ze$($,"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(`${VH({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(QI6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?ze$($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await eM6(xd(Y)),K=$I6(Y,W);return Q.html(ZI6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var aM6=2500,QI6=1e4;var Ae$=O(()=>{y$();$W1();xz();a1()});function i10($,Z){return fetch(`${VH({})}${$}`,Z)}async function YI6($,Z,Q){let Y=new URLSearchParams;if(Z)Y.set("pw",Z);if(Q)Y.set("lang",Q);let X=Y.toString()?`?${Y.toString()}`:"",J=await i10(`/api/v2/public/diagnostics/${encodeURIComponent($)}${X}`,{headers:{Accept:"application/json"}});if(J.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!J.ok)throw Error(`report read HTTP ${J.status}`);let G=await J.json(),{deck:W,drops:K}=aM0(G);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:G.scanned_at,drops:K}}var XI6,wB,Te$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Re$;var qe$=O(()=>{y$();mJ();xz();$W1();XI6=new Set(["complete","errored","terminated","unknown"]),wB=new e0;wB.use("*",async($,Z)=>{let Q=await J8.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});wB.use("/link-token/*",Te$);wB.use("/suggest",Te$);wB.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.get("reportUser"),Y=$.req.query("key")?.trim()||void 0,X=$.req.query("lang")?.trim()||void 0;try{let J=await YI6(Z,Y,X);if($.header("Cache-Control","private, no-store"),Q||!J.deck)return $.json(J);return $.json({...J,deck:{...J.deck,slides:J.deck.slides.slice(0,1)},truncated:J.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});wB.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Y=typeof Q.domain==="string"?Q.domain.trim():"";if(!Y)return $.json({error:"domain is required"},400);let X=Z?.email,J=typeof Q.distinctId==="string"&&Q.distinctId.trim()&&Q.distinctId.length<=200?Q.distinctId.trim():void 0;try{let G=await i10("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${bz({})}`},body:JSON.stringify({url:Y,...X?{email:X}:{},distinct_id:J})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});wB.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await i10(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${bz({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:XI6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});wB.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await i10(`/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)}});wB.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await i10(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});Re$=wB});var JI6=1048576,ZW1;var Me$=O(()=>{y$();qK();a1();KJ1();ZW1=new e0;ZW1.post("/webhook",y5({maxSize:JI6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=O0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!ui$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=li$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await ci$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as GI6}from"crypto";function HI6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return GI6(Buffer.from(X),Buffer.from(Y))}function FI6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function Ie$($){let Z=new e0;return Z.post("/webhook",y5({maxSize:WI6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!HI6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!KI6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});let N=(await o01())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=FI6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await UI6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function UI6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await KA$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var WI6=5242880,KI6;var Ve$=O(()=>{y$();qK();ZK();pZ();KI6=new Set(["check_suite","issue_comment"])});function ke$($){let Z=new JB($.db,new wY($.encryptionKey)),Q=new e0;return Q.get("/attachments/:token",async(Y)=>{let X=kz$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new YG(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var Se$=O(()=>{y$();KD();n$1();Of()});function Ce$($){let Z=new JB($.db,new wY($.encryptionKey));async function Q(X,J){let G=Eh$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await UF($.db,W.organizationId);if(!K)return;if(await _R0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new e0;return Y.post("/webhook/:secret",y5({maxSize:NI6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var NI6=1048576;var _e$=O(()=>{y$();qK();KD();vR0();Sl()});import{DBOS as eM0,SchedulerMode as BI6}from"@dbos-inc/dbos-sdk";function fe$($){YW1=$}function be$(){if(!YW1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return YW1}function xe$(){let $=be$();return new JB($.db,new wY($.encryptionKey))}async function LI6($,Z){try{let Q=await xe$().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await UF(be$().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new YG(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${ve$}m"`,K=0,H;for(let F=0;F<OI6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=zh$(N,N.changelog?.histories??[],Z);for(let D of B)if(await _R0(Y,Q,D)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function wI6($,Z){let Q=new Date($.getTime()-ve$*60000),Y=await eM0.runStep(()=>xe$().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>eM0.runStep(()=>LI6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function ye$(){if(QW1)return;QW1=eM0.registerWorkflow(wI6,{name:"jiraTriggerSweepWorkflow"}),eM0.registerScheduled(QW1,{name:"jiraTriggerSweepWorkflow",crontab:DI6,mode:BI6.ExactlyOncePerIntervalWhenActive})}var DI6="7-59/10 * * * *",ve$=15,OI6=5,YW1=null,QW1=null;var ge$=O(()=>{KD();Sl();Of();vR0()});function he$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var ue$,jI6,EI6,le$;var ce$=O(()=>{y$();gW();fl();mz();ue$=new e0,jI6=["range","if-none-match","if-modified-since"],EI6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];ue$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Jd($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new J$(401,{message:"Authentication required"})}if(!Q)throw new J$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new J$(400,{message:"Missing file key"});let X=await $e(Y,Z);if(!X)throw new J$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&IX()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new J$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return he$(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of jI6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new J$(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new J$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of EI6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),he$(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});le$=ue$});var p10=_((pb)=>{var zI6=pb&&pb.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),PI6=pb&&pb.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))zI6(Z,$,Q)};Object.defineProperty(pb,"__esModule",{value:!0});PI6(FJ(),pb)});var ie$=_((de$)=>{Object.defineProperty(de$,"__esModule",{value:!0});de$.version=void 0;de$.version="3.4.0"});var te$=_((uF)=>{var AI6=uF&&uF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(uF,"__esModule",{value:!0});uF.NodeTransport=uF.VERSION=void 0;uF.nodeResolveHost=VI6;var N5=p10(),TI6=A0("net"),XW1=A0("tls"),RI6=A0("path"),pe$=A0("fs"),qI6=AI6(A0("dns")),MI6=ie$();uF.VERSION=MI6.version;var II6="nats.js";class ne${socket;version;lang;yields=[];signal=(0,N5.deferred)();closedNotification=(0,N5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=II6,this.version=uF.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,N5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw N5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new N5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new N5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,N5.deferred)(),Q,Y=(0,TI6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,N5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=N5.DataBuffer.concat(...this.yields),X=(0,N5.extractProtocolMessage)(Y);if(X!=="")try{let J=N5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,N5.deferred)();try{if($=(0,RI6.resolve)($),!(0,pe$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,pe$.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,N5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new N5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,N5.deferred)();try{let X=(0,XW1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new N5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,N5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new N5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,N5.deferred)();try{let Y=(0,XW1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new N5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,N5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,N5.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 XW1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,N5.render)($)}`);let Z=(0,N5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,N5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,N5.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}}uF.NodeTransport=ne$;function VI6($){let Z=(0,N5.deferred)();return qI6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var ee$=_((ae$)=>{Object.defineProperty(ae$,"__esModule",{value:!0});ae$.connect=kI6;var oe$=te$(),re$=p10(),se$=p10();function kI6($={}){if((0,se$.hasWsProtocol)($))return Promise.reject(se$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,re$.setTransportFactory)({factory:()=>{return new oe$.NodeTransport},dnsResolveFn:oe$.nodeResolveHost}),re$.NatsConnectionImpl.connect($)}});var $08=_((jB)=>{var CI6=jB&&jB.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),_I6=jB&&jB.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))CI6(Z,$,Q)};Object.defineProperty(jB,"__esModule",{value:!0});jB.connect=void 0;var vI6=ee$();Object.defineProperty(jB,"connect",{enumerable:!0,get:function(){return vI6.connect}});_I6(p10(),jB)});function X08($){let Z=$?.connectFn??yI6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let D=0;while(!J)try{Q=await Z({servers:N,timeout:xI6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let L=M7(bI6,fI6,D-1,2,0.5);await P$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?Z08.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=Y08.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function yI6($){return Q08.connect($)}var Z08,Q08,Y08,fI6=100,bI6=3000,xI6=3000;var J08=O(()=>{u$();Z08=V(Wm(),1),Q08=V($08(),1),Y08=V(rF(),1)});function JW1($,Z){return`${$}.${Z}`}class GW1{cache;constructor($){this.cache=tc({ttlMs:$?.ttlMs??gI6,maxSize:$?.maxSize??hI6})}async get($,Z){return this.cache.get(JW1($,Z))??null}async set($,Z,Q){this.cache.set(JW1($,Z),Q)}async invalidate($,Z){this.cache.delete(JW1($,Z))}teardown(){this.cache.clear()}}var gI6=600000,hI6=5000;var G08=()=>{};function $I0($,Z){return`${$}:${Z}`}function WW1($){let Z=tc({ttlMs:$?.ttlMs??uI6,maxSize:$?.maxSize??lI6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(W08,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get($I0(K,H))},set(K,H,F){Z.set($I0(K,H),F)},invalidate(K,H){Z.delete($I0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(W08),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete($I0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var W08="studio.ai-provider-keys.invalidate",uI6=30000,lI6=5000;var K08=()=>{};class KW1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var H08=($)=>{let Z;return()=>Z??=$()},HW1,FW1;var F08=O(()=>{J6();HW1=H08(()=>Q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),FW1=H08(()=>Q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function tI6($=B08){return{name:BF,subjects:[`${d41}.>`],storage:VK.StorageType.File,max_age:mI6,max_bytes:pI6,max_msgs_per_subject:nI6,discard:VK.DiscardPolicy.Old,retention:VK.RetentionPolicy.Limits,duplicate_window:iI6,num_replicas:$}}class D08{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 U08($){let Z=N08.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function aI6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,dI6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function eI6($,Z){return $.info?.cluster?Z:1}function $V6($){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 UW1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Y,X)=>{let J=tI6(X);try{await Y.streams.info(BF),await Y.streams.update(BF,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(BF,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(BF),await Y.streams.add(J);else throw G}},Q=await U8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await VK.jetstreamManager($),X=eI6($,B08);try{await Z(Y,X)}catch(J){if(X<=1||!$V6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:ml});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=aI6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=mT$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=i41(H,{runId:Z}),N=performance.now()-F;HW1().record(N),FW1().add(1,{"org.id":Y??"unknown"}),sI6?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?U08(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),rI6)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 U8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:U08(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:ml}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=i41(Z,{runId:$,dedup:Q});HW1().record(performance.now()-X),FW1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=dT$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?VK.DeliverPolicy.New:VK.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=Xw($),W;try{W=await U8(async()=>{return(await Y.consumers.get(BF,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:ml})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=WA0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(YA0()).pipeThrough(XA0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){D(),L.close();return}let E=j;if(E.kind==="done"){if(J){D(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(BF,{filter:Xw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var VK,N08,cI6=($)=>{let Z;return()=>Z??=$()},dI6,mI6=86400000000000,iI6=120000000000,pI6=4294967296,B08,nI6=500000,oI6,rI6,sI6;var O08=O(()=>{u$();p41();KA0();JA0();J6();F08();VK=V(rF(),1),N08=V(Wm(),1),dI6=cI6(()=>Q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),B08=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);oI6=process.env.STREAM_ENCODE_TRACE==="1",rI6=process.env.DECOPILOT_STREAM_TRACE==="1";sI6=oI6?new D08:null});function ZI0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,nK(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var L08=O(()=>{R8()});class NW1{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 ZV6($,Z){let Q=$.startsWith("thread:")?QK($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function w08($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await $F($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await Ql($,{threadId:X,runBranch:G?.branch}),K=ZV6(W,await vE0($,X)),H=await js($,Q,Ta0(J)).catch(()=>null);if(!H){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}for(let F of K){let U=await H.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:H.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await R3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var j08=O(()=>{cZ();E3();pZ()});async function E08($,Z,Q){let Y=Z.organizationId;if(!iX(Z))return!1;if(!Pf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=lH(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await f6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),H8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var z08=O(()=>{z4();oQ();Vl();HK();H9()});function KV6($){return $ instanceof _Y}function HV6($,Z){return Z-$>=GV6}class BW1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??QV6;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??XV6,Q=this.options.itemIntervalMs??YV6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}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()-l$1),e81);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()-WV6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await r81(this.taskBoard,X,Y),await s81(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==T$.progress||G.assigneeId!==t$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await FK(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),KV6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+JV6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==T$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),H8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!HV6(KN(Q,Z.reviewCycleStartedAt),Date.now()))return;await HF($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!iX(Y))return!1;let X=Y.assigneeId===t$,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await w08(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await Cl(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await E08(G,Y,W))return!0;if(await fR$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!p81(W))return!1;return await zP0(G,Y,{previewMatchesHead:n81(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await eL($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var QV6=60000,YV6=300000,XV6=50,JV6=60000,GV6=900000,WV6=120000;var P08=O(()=>{z4();f81();j08();FF();Ue();HK();z08();H9();B3();$41();pZ();ra();kl()});import{readdir as FV6,rm as QI0}from"fs/promises";import{join as YI0}from"path";async function XI0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-UV6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await nb($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await A08($,X,Z);else if(!X.startsWith(".")){let J=YI0($,X),G=await nb(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await A08(J,K,Z)}if((await nb(J)).length===0)await QI0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function A08($,Z,Q){let Y=0,X=YI0($,Z),J=await nb(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=YI0(X,W),H=await nb(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=YI0(K,U);await QI0(B,{recursive:!0,force:!0}),Y++}}if((await nb(K)).length===0)await QI0(K,{recursive:!0,force:!0})}if((await nb(X)).length===0)await QI0(X,{recursive:!0,force:!0});return Y}async function nb($){try{return(await FV6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var UV6=30;var DW1=()=>{};import{DBOS as OW1,SchedulerMode as NV6}from"@dbos-inc/dbos-sdk";async function DV6(){let $=[l3(),tb(),dF()],Z=0;for(let Q of $)try{Z+=await XI0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function OV6($,Z){await OW1.runStep(()=>DV6(),{name:"monitoringRetention"})}function R08(){if(T08)return;T08=!0;let $=OW1.registerWorkflow(OV6,{name:"monitoringRetentionWorkflow"});OW1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:BV6,mode:NV6.ExactlyOncePerIntervalWhenActive})}var BV6="23 4 * * *",T08=!1;var q08=O(()=>{EG();DW1()});function M08($){return async(Z,Q)=>{let Y=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await $Q.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await oz($.db,Z,Y.role);return X.boundAuth=$J1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new sj(Q,void 0,X.boundAuth,Y.role,"self"),$w(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var I08=O(()=>{HW();yH()});function LV6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function wV6(){return{services:LV6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function EV6(){for(let $ of jV6)$()}function V08($){let Z=[...LW1.logs,$];LW1={...LW1,logs:Z.length>500?Z.slice(-500):Z},EV6()}function wW1(){return zV6}var LW1,jV6,zV6=!1;var jW1=O(()=>{LW1=wV6(),jV6=new Set});import{EventEmitter as PV6}from"events";var EW1;var k08=O(()=>{jW1();EW1=new PV6;EW1.on("request",($)=>{V08($)})});function S08(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=yd(N.params.name),D=N.params.arguments||{},L=Object.keys(D).map((j)=>yd(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${P5.tool}${B}${P5.dim}(${w})${P5.reset}`}else if(N.method)J=`${P5.dim}${yd(N.method)}${P5.reset}`}}catch{}}let W=yd(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${P5.mcp}${yd(F.slice(0,12))}\u2026${P5.reset}`}else if(X==="/mcp")W=`${P5.mcp}/mcp${P5.reset}`;else if(X==="/mcp/registry")W=`${P5.mcp}/mcp/registry${P5.reset}`;let K=TV6(Y),H=G?"\u25C0":"\u2190";if(!wW1())console.log(`${P5.dim}${H}${P5.reset} ${K}${Y}${P5.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=AV6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";if(!wW1())console.log(`${P5.dim}${D}${P5.reset} ${K}${Y}${P5.reset} ${W}${J?` ${J}`:""} ${N}${U}${P5.reset} ${P5.duration}${B}${P5.reset}`);EW1.emit("request",{method:Y,path:yd(X),status:U,duration:F,timestamp:new Date})}}}var P5,AV6=($)=>{if($>=500)return P5.serverError;if($>=400)return P5.clientError;if($>=300)return P5.redirect;return P5.ok},TV6=($)=>{return P5[$]||P5.reset},yd=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var C08=O(()=>{jW1();k08();P5={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 b08}from"crypto";import{mkdir as RV6,readdir as qV6,rm as _08,stat as x08}from"fs/promises";import{join as PW1,relative as MV6}from"path";import{z as V$}from"zod";function g08($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return PW1(IV6,Z)}function h08($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function zW1($,Z){let Q=g08($),Y=h08(Z);return PW1(Q,Y)}function VV6($,Z,Q,Y){let X=O0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return b08("sha256",X).update(J).digest("hex")}function f08($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=VV6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${h08(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function u08($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${b08("md5","etag").update(Y).digest("hex")}"`}async function l08($,Z,Q,Y,X){try{let J=await qV6($,{withFileTypes:!0});for(let G of J){let W=PW1($,G.name),H=MV6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await l08(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await x08(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:u08(W,F.mtime,F.size)})}catch{}}}}catch{}}function c08($,Z){let Y=i($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:V$.object({prefix:V$.string().optional(),maxKeys:V$.number().optional().default(1000),continuationToken:V$.string().optional(),delimiter:V$.string().optional()}),outputSchema:V$.object({objects:V$.array(V$.object({key:V$.string(),size:V$.number(),lastModified:V$.string(),etag:V$.string()})),nextContinuationToken:V$.string().optional(),isTruncated:V$.boolean(),commonPrefixes:V$.array(V$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=g08(Y);await RV6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await l08(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,L=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:V$.object({key:V$.string()}),outputSchema:V$.object({contentType:V$.string().optional(),contentLength:V$.number(),lastModified:V$.string(),etag:V$.string(),metadata:V$.record(V$.string(),V$.string()).optional()}),handler:async(X)=>{let J=X,G=zW1(Y,J.key),W=await x08(G);return{contentType:sJ1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:u08(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:V$.object({key:V$.string(),expiresIn:V$.number().optional()}),outputSchema:V$.object({url:V$.string(),expiresIn:V$.number()}),handler:async(X)=>{let J=X,G=J.expiresIn??v08;return{url:f08(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:V$.object({key:V$.string(),expiresIn:V$.number().optional(),contentType:V$.string().optional()}),outputSchema:V$.object({url:V$.string(),expiresIn:V$.number()}),handler:async(X)=>{let J=X,G=J.expiresIn??v08;return{url:f08(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:V$.object({key:V$.string()}),outputSchema:V$.object({success:V$.boolean(),key:V$.string()}),handler:async(X)=>{let J=X,G=zW1(Y,J.key);try{return await _08(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:V$.object({keys:V$.array(V$.string()).max(1000)}),outputSchema:V$.object({deleted:V$.array(V$.string()),errors:V$.array(V$.object({key:V$.string(),message:V$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=zW1(Y,K);try{await _08(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function AW1($,Z,Q){let Y=c08(Z,Q),X=new wH({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:S5});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:V$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:V$.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new cY({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),S3(X,J,$,"mcp:dev-assets")}async function d08($,Z,Q,Y){let J=c08(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var IV6="./data/assets",v08=3600,y08,m08;var i08=O(()=>{a1();rl();y$();Nt();mf();fQ();sq0();y08=new e0;y08.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return AW1($.req.raw,Z,Y)});m08=y08});var p08={};T4(p08,{mountDevRoutes:()=>kV6});function kV6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return AW1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await d08(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",m08);let Q=new e0;Q.use("*",MK({mountPath:"/api/dev-assets"})),Q.route("/",rq0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var n08=O(()=>{y$();mJ1();sq0();i08()});import{sql as SV6}from"kysely";import{randomUUID as t08}from"crypto";import{z as CV6}from"zod";async function vV6($){let Z=new Date().toISOString(),Q=t08(),Y=T8.SELF($.organizationId),X="registry.publish_request.created",J={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:Q,organization_id:$.organizationId,type:"registry.publish_request.created",source:Y,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(J),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let G=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Y)])).execute();if(G.length>0)await $.db.insertInto("event_deliveries").values(G.map((W)=>({id:t08(),event_id:Q,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await SV6`SELECT
|
|
3002
3002
|
pg_notify('studio_events', ${Q}),
|