decocms 4.373.6 → 4.373.8
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-D3eYSD-F.js → AlertCircle-1_aD--dB.js} +1 -1
- package/dist/client/assets/{AreaChart-DwaiozPI.js → AreaChart-DL1NARLv.js} +1 -1
- package/dist/client/assets/{ArrowLeft-pKUucwnA.js → ArrowLeft-DbYZw4_2.js} +1 -1
- package/dist/client/assets/{ArrowRight-dpr4pl9N.js → ArrowRight-DNQSixjP.js} +1 -1
- package/dist/client/assets/{ArrowUp-CYYVNB-P.js → ArrowUp-CSKb51sC.js} +1 -1
- package/dist/client/assets/{CartesianChart-C0zj7nlT.js → CartesianChart-C7UCTRH5.js} +1 -1
- package/dist/client/assets/{CheckCircle-GeSGM969.js → CheckCircle-Cc6CY47i.js} +1 -1
- package/dist/client/assets/{ChevronUp-D3WR1M0A.js → ChevronUp-C9Nhfb-x.js} +1 -1
- package/dist/client/assets/{Copy01-DqrZOvVi.js → Copy01-BjLGbqnG.js} +1 -1
- package/dist/client/assets/{CreditCard01-VmFyjxYd.js → CreditCard01-ByBlbqPe.js} +1 -1
- package/dist/client/assets/{DotsVertical-CD4T7H6_.js → DotsVertical-Czhni7yG.js} +1 -1
- package/dist/client/assets/{Download01-BRqjontI.js → Download01-CDh7RxaN.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-DL2J6Vap.js → ErrorBarContext-Dwimm_GG.js} +1 -1
- package/dist/client/assets/{Eye-CI6aKDnd.js → Eye-BKjf_vUO.js} +1 -1
- package/dist/client/assets/{Globe01-DF7y1beg.js → Globe01-k6r26TAV.js} +1 -1
- package/dist/client/assets/{Globe04-BFA3LOH7.js → Globe04-DFGUZ8EW.js} +1 -1
- package/dist/client/assets/{Image01-B6W5URkI.js → Image01-DpNFr3GM.js} +1 -1
- package/dist/client/assets/{Key01-BB4eK9Eq.js → Key01-BkaZy7Ah.js} +1 -1
- package/dist/client/assets/{LayoutLeft-DEnYqvHT.js → LayoutLeft-D1fYrUGp.js} +1 -1
- package/dist/client/assets/{Line-DrZZSRLC.js → Line-B72CBrVS.js} +1 -1
- package/dist/client/assets/{Link01-DVDPoM5q.js → Link01-D45u3Kwy.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DpqcCYOT.js → LinkExternal01-CZLsVISw.js} +1 -1
- package/dist/client/assets/{Monitor01-DKEZpVnT.js → Monitor01-BjQTJmPT.js} +1 -1
- package/dist/client/assets/{Package-BYLXGnrw.js → Package-MW9FV2l6.js} +1 -1
- package/dist/client/assets/{Palette-CJjjIC-G.js → Palette-D2r_rP7A.js} +1 -1
- package/dist/client/assets/{Play-DJHXfM-U.js → Play-CQYqv81V.js} +1 -1
- package/dist/client/assets/{Plus-CFFsuHFf.js → Plus-DWnlhQEG.js} +1 -1
- package/dist/client/assets/{SearchLg-DgqRTz9C.js → SearchLg-BeTAUTWq.js} +1 -1
- package/dist/client/assets/{SearchMd-DRk1Er2c.js → SearchMd-BCQ1CyGA.js} +1 -1
- package/dist/client/assets/{Sector-WqXSCDB7.js → Sector-BE44p-SO.js} +1 -1
- package/dist/client/assets/{Settings02-DsaxolGj.js → Settings02-S2K24EWO.js} +1 -1
- package/dist/client/assets/{Share07-NUMfhSqd.js → Share07-BaevX8Mw.js} +1 -1
- package/dist/client/assets/{Stars01-DwhcksvZ.js → Stars01-DxWX4pOr.js} +1 -1
- package/dist/client/assets/{Sun-C0V63ie9.js → Sun-edqgTWqM.js} +1 -1
- package/dist/client/assets/{Tool01-d_iK_DkH.js → Tool01-BOTbO9xX.js} +1 -1
- package/dist/client/assets/{Tool02-cweQ69Nx.js → Tool02-CyM8jIXw.js} +1 -1
- package/dist/client/assets/{Trash01-Desmqajq.js → Trash01-CDngQkql.js} +1 -1
- package/dist/client/assets/{TrendUp01-B7gk74Ha.js → TrendUp01-CsEPcUzR.js} +1 -1
- package/dist/client/assets/{Upload01-DelvmgfV.js → Upload01-D48ElPif.js} +1 -1
- package/dist/client/assets/{User01-CbDoD5mb.js → User01-CEit44ru.js} +1 -1
- package/dist/client/assets/{UserSquare-Bje-nfYn.js → UserSquare-sbsbnvWo.js} +1 -1
- package/dist/client/assets/{Users01-BqKNBiO6.js → Users01-Drj4BA_j.js} +1 -1
- package/dist/client/assets/{X-CTlWdd97.js → X-Cr1LzzwP.js} +1 -1
- package/dist/client/assets/{XCircle-D6WY1ym8.js → XCircle-DoUWUf9d.js} +1 -1
- package/dist/client/assets/{XClose-DS_Db3B_.js → XClose-DA1jDjt_.js} +1 -1
- package/dist/client/assets/{Zap-XRJ8YEEc.js → Zap-C8hEZAXG.js} +1 -1
- package/dist/client/assets/{ZoomOut-DBByf2mh.js → ZoomOut-D-FhOF2X.js} +1 -1
- package/dist/client/assets/{access-gate-BPsOGNar.js → access-gate-DN6XyU54.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-TAht4cuO.js → add-connection-dialog-B2QrTqPz.js} +1 -1
- package/dist/client/assets/{agent-analytics-BU1-PzkI.js → agent-analytics-DU5TPtWM.js} +1 -1
- package/dist/client/assets/agent-app-Dlen_0Di.js +1 -0
- package/dist/client/assets/{agent-assets-BrYlDhjI.js → agent-assets-DcW1ORPj.js} +1 -1
- package/dist/client/assets/{agent-automation-DRIwy8Ar.js → agent-automation-9xM1Gtnb.js} +1 -1
- package/dist/client/assets/{agent-automations-BHxYXOUj.js → agent-automations-CmiwlkHP.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-wRyuYv4j.js → agent-connect-sources-DQnuiEX7.js} +1 -1
- package/dist/client/assets/agent-deck-CNwv_Xxg.js +1 -0
- package/dist/client/assets/{agent-e2e-DY_ih97m.js → agent-e2e-B1yu3LmN.js} +1 -1
- package/dist/client/assets/{agent-experiments-dhU9xmuI.js → agent-experiments-DcMUbiO3.js} +1 -1
- package/dist/client/assets/agent-file-CYm8MPZc.js +1 -0
- package/dist/client/assets/{agent-git-Cnyq85Ut.js → agent-git-46vyb24u.js} +1 -1
- package/dist/client/assets/{agent-hosting-Bfupqb3A.js → agent-hosting-BSY1HOZj.js} +1 -1
- package/dist/client/assets/{agent-icon-BRULiLDc.js → agent-icon-Ds4wUFQr.js} +1 -1
- package/dist/client/assets/agent-library-file-BuTSLi66.js +1 -0
- package/dist/client/assets/{agent-monitor-aF5mIseh.js → agent-monitor-vTks-T2X.js} +1 -1
- package/dist/client/assets/{agent-overview-CUKcQOax.js → agent-overview-ByGWdLe6.js} +1 -1
- package/dist/client/assets/agent-settings-DYymML90.js +1 -0
- package/dist/client/assets/{agent-site-editor-BrClI9uN.js → agent-site-editor-DjTgNacN.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-D3yflCXW.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-aGIy9wkn.js → agent-site-editor-content-CHcFmRvs.js} +2 -2
- package/dist/client/assets/agent-site-editor-preview-DgGl4ejp.js +518 -0
- package/dist/client/assets/agent-view-Dly6F-Vf.js +1 -0
- package/dist/client/assets/{agent-view-guard-S1hwNIOS.js → agent-view-guard-CiTb-IfK.js} +1 -1
- package/dist/client/assets/{agents-list-BRkUdqSH.js → agents-list-D-o8r0uS.js} +1 -1
- package/dist/client/assets/{ai-providers-BCwuu37Q.js → ai-providers-2qCkDYbv.js} +1 -1
- package/dist/client/assets/{alert-B1s9CJD8.js → alert-DjtybrS0.js} +1 -1
- package/dist/client/assets/{alert-dialog-DqO-3R76.js → alert-dialog-CVY7NpNS.js} +1 -1
- package/dist/client/assets/{api-keys-MUj_Ov5B.js → api-keys-DhnkXPQZ.js} +1 -1
- package/dist/client/assets/api-keys-SHbXzKXe.js +1 -0
- package/dist/client/assets/app-editor-BVTQM-H0.js +1 -0
- package/dist/client/assets/{asset-utils-CcZCvpL7.js → asset-utils-R2NmFVJk.js} +1 -1
- package/dist/client/assets/{auth-catchall-CKeXgRzB.js → auth-catchall-HC-N9ZSa.js} +1 -1
- package/dist/client/assets/{auth-entry-DzpuiHht.js → auth-entry-DKvENBOx.js} +1 -1
- package/dist/client/assets/{auth-CXaWU5n-.js → auth-gLcu1CpT.js} +1 -1
- package/dist/client/assets/{auth-split-layout-B9R0oKiN.js → auth-split-layout-B0sFfkaP.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-D7P0kNl_.js → authenticate-and-persist-oauth-w1UaCnqr.js} +1 -1
- package/dist/client/assets/{automation-list-row-DhIsdNHC.js → automation-list-row-BWqCCVZt.js} +1 -1
- package/dist/client/assets/{automation-runs-JqP5LSua.js → automation-runs-ChsLWdft.js} +1 -1
- package/dist/client/assets/{automations-Bvrg2Ist.js → automations-BCNLJx72.js} +1 -1
- package/dist/client/assets/{autosend-Bpehk8fy.js → autosend-BcXsN51P.js} +1 -1
- package/dist/client/assets/{avatar-Didv6efi.js → avatar-qzN7CafM.js} +1 -1
- package/dist/client/assets/{badge-BNCSp2s3.js → badge-Jn9rjNBm.js} +1 -1
- package/dist/client/assets/{block-document-DGTOwJRV.js → block-document-CS7Dc6Jk.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-MbXHAD_k.js → blocks-preview-workspace-context-CkWQ4HXu.js} +1 -1
- package/dist/client/assets/{breadcrumb-Boq-3hHe.js → breadcrumb-DxmYUb0I.js} +1 -1
- package/dist/client/assets/{buckets-D2ABK9h6.js → buckets-Bve35Vnp.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-Cokn8AIT.js → build-improve-prompt-doc-3sm8qZxG.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-CGL0cNkF.js → bulk-category-panel-PSXvOwnQ.js} +1 -1
- package/dist/client/assets/{calendar-Dm4fhyz-.js → calendar-CSr2hmIz.js} +1 -1
- package/dist/client/assets/{capability-load-error-B0iwFf7_.js → capability-load-error-Cdp84b5C.js} +1 -1
- package/dist/client/assets/category-editor-2S0eDZog.js +1 -0
- package/dist/client/assets/{chart-Akk0F8wU.js → chart-FOXwCLGv.js} +1 -1
- package/dist/client/assets/{chat-context-iYlkLZJd.js → chat-context-B6h2xdo0.js} +1 -1
- package/dist/client/assets/{chat-draft-BT2YB8qY.js → chat-draft-VxzhQrWJ.js} +1 -1
- package/dist/client/assets/{checkbox-CEMIbeLG.js → checkbox-CeU6IqeR.js} +1 -1
- package/dist/client/assets/{choose-editor-D7H3RTiD.js → choose-editor-BPTc6Ttm.js} +1 -1
- package/dist/client/assets/{cli-auth-success-sL-AfU_l.js → cli-auth-success-e04cXoeC.js} +1 -1
- package/dist/client/assets/{client-icons-CceCjUyO.js → client-icons-D01N1JIB.js} +1 -1
- package/dist/client/assets/{collapsible-Ddmiof2Z.js → collapsible-1Kj_Hjxx.js} +1 -1
- package/dist/client/assets/{collection-detail-UAstqg8H.js → collection-detail-J302oKJK.js} +1 -1
- package/dist/client/assets/{collection-display-button-Cqjn8K7c.js → collection-display-button-DFru68mT.js} +1 -1
- package/dist/client/assets/{collection-search-DJYVC05l.js → collection-search-CY6qtMl2.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-qc6gW6SL.js → collection-table-wrapper-wS8JTYNq.js} +1 -1
- package/dist/client/assets/{collection-tabs-anNBFHFb.js → collection-tabs-C75WAB0u.js} +1 -1
- package/dist/client/assets/{combobox-CGYz-V_6.js → combobox-BhSInoyS.js} +1 -1
- package/dist/client/assets/{command-Dt5rZk11.js → command-CApdc7tB.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-C6ViuDC1.js → companion-mcps-section-B9Du9wa_.js} +1 -1
- package/dist/client/assets/{connect-DlhT2_a0.js → connect-Cn0VFLPZ.js} +1 -1
- package/dist/client/assets/{connect-layout-UA_ojwUJ.js → connect-layout-CqRKUl7K.js} +1 -1
- package/dist/client/assets/{connection-BgOyoL-N.js → connection-DHsoRZa4.js} +1 -1
- package/dist/client/assets/{connection-card-DxPN8sYJ.js → connection-card-B4Lfzhnd.js} +1 -1
- package/dist/client/assets/{connection-detail-D4jYnX4w.js → connection-detail-DEVK6-mo.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BgtFrKr_.js → connection-form-helpers-Do68AahQ.js} +1 -1
- package/dist/client/assets/{connections-C1YycoCL.js → connections-CcxQm1vB.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-B4051f2Y.js → create-organization-dialog-RGp21FdA.js} +1 -1
- package/dist/client/assets/{decofile-api-qrEn75pC.js → decofile-api-xtxqfgRa.js} +1 -1
- package/dist/client/assets/decopilot-BgEg3OT6.js +4 -0
- package/dist/client/assets/{dialog-BG4c8Ew3.js → dialog-Dl5zPv9e.js} +1 -1
- package/dist/client/assets/{discover-CZhPBem-.js → discover-B68h516y.js} +1 -1
- package/dist/client/assets/{domain-settings-B5xKTZUy.js → domain-settings-D74bsHDK.js} +1 -1
- package/dist/client/assets/{download-app-dialog-BUFOH47d.js → download-app-dialog-t4N-N3uU.js} +1 -1
- package/dist/client/assets/{drawer-HsdaIuzu.js → drawer-CgkgucN1.js} +1 -1
- package/dist/client/assets/{editor-D6niHdLA.js → editor-T3L5r0Fu.js} +1 -1
- package/dist/client/assets/{empty-state-BI6nLRJ9.js → empty-state-CKSGQb76.js} +1 -1
- package/dist/client/assets/{empty-state-DtKYrRQz.js → empty-state-jlXAM_Vx.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BN2GqRYG.js → extract-connection-data-DcLFWp9p.js} +1 -1
- package/dist/client/assets/{feature-gate-CBjka-VN.js → feature-gate-B-yrcMj6.js} +1 -1
- package/dist/client/assets/{feature-paywall-CRwtygFs.js → feature-paywall-DlNMP7aX.js} +1 -1
- package/dist/client/assets/{file-explorer-Dm8CypxL.js → file-explorer-DuCWREXF.js} +1 -1
- package/dist/client/assets/{file-preview-C81z-6bM.js → file-preview-CaI7fK9R.js} +1 -1
- package/dist/client/assets/{file-share-button-DZuygGvz.js → file-share-button-DnOchcN5.js} +1 -1
- package/dist/client/assets/{file-type-icon-DpJWy5M2.js → file-type-icon-VOg1Vfy5.js} +1 -1
- package/dist/client/assets/{folder-icon-Bm639N0Y.js → folder-icon-jICbufb_.js} +1 -1
- package/dist/client/assets/{form-Dky9WQSJ.js → form-C_kDn5va.js} +1 -1
- package/dist/client/assets/{gateway-client-QdZQKIDo.js → gateway-client-CSBLiew8.js} +1 -1
- package/dist/client/assets/{general-D__F-EyS.js → general-s-LpWgDM.js} +1 -1
- package/dist/client/assets/{github-icon-B_0P_4Xb.js → github-icon-DVQ1NwUu.js} +1 -1
- package/dist/client/assets/{home-CDgdAzeZ.js → home-DV89XXOG.js} +1 -1
- package/dist/client/assets/{hooks-Dr4SK9lF.js → hooks-B2mYVhP_.js} +1 -1
- package/dist/client/assets/{hooks-BP4OlUD4.js → hooks-DvQkdYJL.js} +1 -1
- package/dist/client/assets/{icon-button-DcEuCL60.js → icon-button-CByYJZRV.js} +1 -1
- package/dist/client/assets/{index-ClSKfzUE.js → index-545LRaIz.js} +1 -1
- package/dist/client/assets/{index-BJVVvEJb.js → index-BLPQEXIu.js} +1 -1
- package/dist/client/assets/index-BNah-P_g.css +1 -0
- package/dist/client/assets/{index-DfOmiBMV.js → index-C6HQEiEx.js} +1 -1
- package/dist/client/assets/{index-v_Uq46OW.js → index-CARHKa4M.js} +1 -1
- package/dist/client/assets/{index-C4voA6sY.js → index-CGR18BSj.js} +1 -1
- package/dist/client/assets/{index-cOIC2Zfa.js → index-CNUd9Lae.js} +1 -1
- package/dist/client/assets/{index-CHtlQTUQ.js → index-Ci3mCUbP.js} +1 -1
- package/dist/client/assets/{index-BwRzUgh0.js → index-CkeC_MxK.js} +1 -1
- package/dist/client/assets/{index-CcHKaTn6.js → index-CpZ_1mN7.js} +1 -1
- package/dist/client/assets/{index-B9-heAAa.js → index-Dn-pE_oF.js} +2 -2
- package/dist/client/assets/{index-1S4uBH3x.js → index-DnDIM2xu.js} +1 -1
- package/dist/client/assets/{index-BvpMJL9X.js → index-O9d00ugp.js} +1 -1
- package/dist/client/assets/{index-Dc_i1Bik.js → index-WCc3fcxd.js} +1 -1
- package/dist/client/assets/{index-5QMOhTWH.js → index-ctxca5Ua.js} +1 -1
- package/dist/client/assets/{index-redirect-CT5fA9So.js → index-redirect-lO7wa7N_.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-Dj9z-_Ba.js → infiniteQueryObserver-ZTOME-Yd.js} +1 -1
- package/dist/client/assets/{infra-billing-C_FQsgB0.js → infra-billing-DEXSrufy.js} +1 -1
- package/dist/client/assets/{input-Bsj5KDt6.js → input-B4lbwedr.js} +1 -1
- package/dist/client/assets/input-CcdXXTty.js +8 -0
- package/dist/client/assets/{input-D7UnEeXl.js → input-DfvK3BvZ.js} +1 -1
- package/dist/client/assets/{integration-icon-B6dtorjO.js → integration-icon-BbMj8xyp.js} +1 -1
- package/dist/client/assets/{label-BO4yFijb.js → label-nMs4JvQM.js} +1 -1
- package/dist/client/assets/{last-preview-page-Dv830AIe.js → last-preview-page-BP1aM3EQ.js} +1 -1
- package/dist/client/assets/{layout-Bxh_his-.js → layout-ecXPoMWs.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-qsw3IhVI.js → legacy-agents-deep-BnkOa_92.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-C6TKhr8-.js → legacy-main-redirect-Be3GXpEP.js} +1 -1
- package/dist/client/assets/{library-CfLbpWZK.js → library-BdS1qibY.js} +1 -1
- package/dist/client/assets/{login-CZbYiPIn.js → login-B4q0HQCV.js} +1 -1
- package/dist/client/assets/{markdown-BF4hkzaL.js → markdown-D50yVO4b.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-Bxmf7t4w.js → mcp-app-renderer-C46rwnJa.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DzKWzujJ.js → mcp-oauth-D9zitCdn.js} +1 -1
- package/dist/client/assets/{members-CDm04dqD.js → members-wCJ1T-Jh.js} +1 -1
- package/dist/client/assets/{message-templates-Dqw35wcK.js → message-templates-DGuaJC7Y.js} +1 -1
- package/dist/client/assets/{mini-report-page-DImPoXRk.js → mini-report-page-CP1mebuW.js} +1 -1
- package/dist/client/assets/{mock-board-BmIzs8Cs.js → mock-board-CbTe5OBn.js} +3 -3
- package/dist/client/assets/{monaco-editor-CLDMxU3Q.js → monaco-editor-DwetGl4M.js} +2 -2
- package/dist/client/assets/{monitoring-stats-row-1O6-pYvX.js → monitoring-stats-row-DJ9fN0yN.js} +1 -1
- package/dist/client/assets/{multi-select-DJ-p4Z1M.js → multi-select-BE1NAYiV.js} +1 -1
- package/dist/client/assets/{mustache-7izSLTr2.js → mustache-wFLLi-RJ.js} +1 -1
- package/dist/client/assets/{oauth-callback-D4wX3DB9.js → oauth-callback-D8JHxvY7.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BkM4OhqK.js → oauth-callback-ai-provider-DomKyrb4.js} +1 -1
- package/dist/client/assets/{onboarding-QU_kmcMD.js → onboarding-DJcRNmWh.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-CyseA3Te.js → optimistic-project-sidebar-views-DMDmcznJ.js} +1 -1
- package/dist/client/assets/{org-file-open-context-BJOB9JXS.js → org-file-open-context-bJmEvFz7.js} +1 -1
- package/dist/client/assets/{organization-choice-Yyr2HSJT.js → organization-choice-B_p1WFTG.js} +1 -1
- package/dist/client/assets/{orgs-BV2AvFmU.js → orgs-BwgDyUJv.js} +1 -1
- package/dist/client/assets/{page-seo-form-BsO0DrNN.js → page-seo-form-CESXJ0d5.js} +1 -1
- package/dist/client/assets/pair-B93l5mBb.js +47 -0
- package/dist/client/assets/{plan-ladder-DokAEKuN.js → plan-ladder--9AA86Vw.js} +1 -1
- package/dist/client/assets/{popover-DM5IZa3t.js → popover-2ypE52tC.js} +1 -1
- package/dist/client/assets/{post-calendar-C-e5-TV2.js → post-calendar-DHFYHW34.js} +1 -1
- package/dist/client/assets/{post-editor-BcTEdZP9.js → post-editor-C2pNflme.js} +1 -1
- package/dist/client/assets/{preview-content-D4gN_IR-.js → preview-content-B2uHD2ji.js} +1 -1
- package/dist/client/assets/{preview-dialog-CUXp3Zgx.js → preview-dialog-BBrtVo7w.js} +1 -1
- package/dist/client/assets/{primitives-B5JG2jIM.js → primitives-BAuykeIS.js} +1 -1
- package/dist/client/assets/{profile-CT7SVHWT.js → profile-SaxqZy8C.js} +1 -1
- package/dist/client/assets/{project-app-view-CnjyPq4z.js → project-app-view-DMevjOJJ.js} +1 -1
- package/dist/client/assets/{project-feed-CWn-Lv0t.js → project-feed-BeIKiBhK.js} +1 -1
- package/dist/client/assets/{project-icon-Ba4aI2hq.js → project-icon-DcxLNBvR.js} +1 -1
- package/dist/client/assets/project-reports-Zx7QBvUm.js +1 -0
- package/dist/client/assets/project-tasks-DognbToz.js +1 -0
- package/dist/client/assets/{prompts-W3xLcrYm.js → prompts-BPaifu-G.js} +1 -1
- package/dist/client/assets/record-editor-B4oaFr3X.js +1 -0
- package/dist/client/assets/{redirect-editor-BMH4ehui.js → redirect-editor-DKcp7e1n.js} +1 -1
- package/dist/client/assets/registry-Cmuz9TXo.js +2 -0
- package/dist/client/assets/{registry-layout-B6_xJXmc.js → registry-layout-10KQ6qzs.js} +1 -1
- package/dist/client/assets/reports-Al2NBjvI.js +1 -0
- package/dist/client/assets/{reports-B4eXifzx.js → reports-BTFMjh6T.js} +1 -1
- package/dist/client/assets/{reports-onboarding-ZAUri_6S.js → reports-onboarding-SI9K65FB.js} +1 -1
- package/dist/client/assets/{reports-tab-D4AGFGPc.js → reports-tab-BZPtKneq.js} +2 -2
- package/dist/client/assets/{repositories-Buk76J8t.js → repositories-2YbqPWsA.js} +1 -1
- package/dist/client/assets/{repository-import-picker-ebb6WNSx.js → repository-import-picker-CC5rjGza.js} +1 -1
- package/dist/client/assets/{repository-picker-B9Ygev7q.js → repository-picker-oVfzv-hF.js} +1 -1
- package/dist/client/assets/{require-capability-DhJhDP-L.js → require-capability-BUixtCV_.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Cac00Ws4.js → required-auth-layout-c8IKViEL.js} +1 -1
- package/dist/client/assets/{reset-password-B8vf7L1c.js → reset-password-BcCSqEgi.js} +1 -1
- package/dist/client/assets/{resizable-C3bWrtWT.js → resizable-C5i5wwZj.js} +1 -1
- package/dist/client/assets/{review-settings-C-hBeg41.js → review-settings-4QW7vK7s.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-CvYxTCJj.js → rich-text-link-control-Beqn4IaU.js} +1 -1
- package/dist/client/assets/{roles-Dh9UUZcV.js → roles-14p4u72x.js} +1 -1
- package/dist/client/assets/{route-DwkJPD1w.js → route-7BgI5Woy.js} +1 -1
- package/dist/client/assets/{route-Bb-xA0Ol.js → route-D1BgROGd.js} +1 -1
- package/dist/client/assets/route-DyAzwdqu.js +1 -0
- package/dist/client/assets/{route-page-header-BfHqQiDS.js → route-page-header-BZt7tMeI.js} +1 -1
- package/dist/client/assets/runnable-block-editor-DLCoyC1l.js +16 -0
- package/dist/client/assets/{sandbox-lifecycle-context-DfY4dZfw.js → sandbox-lifecycle-context-BElwiIKp.js} +1 -1
- package/dist/client/assets/{schema-6mN0bvm3.js → schema-BJjGrX8W.js} +1 -1
- package/dist/client/assets/{scroll-area-D7qbBjMH.js → scroll-area-DglU8OjO.js} +1 -1
- package/dist/client/assets/{search-input-Ck0252jm.js → search-input-B0JWJqt0.js} +1 -1
- package/dist/client/assets/{search-toggle-BLXBsyeS.js → search-toggle-DAzXUHXL.js} +1 -1
- package/dist/client/assets/{secrets-CqlL4cwb.js → secrets-DfOK53jt.js} +1 -1
- package/dist/client/assets/{sections-editor-S86e9po8.js → sections-editor-JwUGjbSO.js} +1 -1
- package/dist/client/assets/{select-CGIEs0gc.js → select-CQa_dQzn.js} +1 -1
- package/dist/client/assets/{select-model-B_ckG0Vk.js → select-model-CyVGvEjL.js} +1 -1
- package/dist/client/assets/{seo-editor-CiJSQ0hg.js → seo-editor-BVsw5Vxc.js} +1 -1
- package/dist/client/assets/{separator-Lx1_tt_L.js → separator-B4rqYwHA.js} +1 -1
- package/dist/client/assets/{settings-tab-08jTQ5mn.js → settings-tab-LDWtDGaS.js} +1 -1
- package/dist/client/assets/{sheet-BCMwxEJt.js → sheet-CFcU_I-W.js} +1 -1
- package/dist/client/assets/{shell-layout-C1-8bBsl.js → shell-layout-Cu8BQ2YY.js} +1 -1
- package/dist/client/assets/{sidebar-CpgCLs_P.js → sidebar-BV5Lpxrt.js} +1 -1
- package/dist/client/assets/{skill-preview-B9Fe89d7.js → skill-preview-n1yWNAQL.js} +1 -1
- package/dist/client/assets/{skills-DEDSoqR0.js → skills-DGx6RRr9.js} +1 -1
- package/dist/client/assets/{sso-Bcqdho85.js → sso-BUsjtg7A.js} +1 -1
- package/dist/client/assets/{store-Cs5Bmze9.js → store-Bg3pg157.js} +1 -1
- package/dist/client/assets/store-registry-D0DynT60.js +2 -0
- package/dist/client/assets/{switch-B7r0dQcL.js → switch-RF4lhbzX.js} +1 -1
- package/dist/client/assets/{synced-repos-CMjTOFt-.js → synced-repos-Dev_EZMx.js} +1 -1
- package/dist/client/assets/{table-DgtBm1fC.js → table-BciFqWlt.js} +1 -1
- package/dist/client/assets/{tabs-8a-KIKo5.js → tabs-CpJgNx30.js} +1 -1
- package/dist/client/assets/{task-board-CiWJ5lUh.js → task-board-DxUiBcDP.js} +1 -1
- package/dist/client/assets/{task-route-CN2ffNmY.js → task-route-D0p98pAa.js} +1 -1
- package/dist/client/assets/{task-status-DPBgrE0W.js → task-status-W7i54FBc.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-DtbeRtX6.js → taskboard-analytics-QY1OXppw.js} +1 -1
- package/dist/client/assets/{tasks-Csxrv5NN.js → tasks-B6HzEGHt.js} +1 -1
- package/dist/client/assets/tasks-mk0xpRui.js +1 -0
- package/dist/client/assets/{textarea-B4b4OfxE.js → textarea-DTACqjWS.js} +1 -1
- package/dist/client/assets/{thread-button-DPSOj2uV.js → thread-button-BDPXLKAH.js} +1 -1
- package/dist/client/assets/{thread-intent-D_ZAwkxt.js → thread-intent-DOmgYGxo.js} +1 -1
- package/dist/client/assets/{thread-route-Bb_Mex6m.js → thread-route-CQvzElwe.js} +1 -1
- package/dist/client/assets/{thread-route-MBCO8DTC.js → thread-route-DH7EC64o.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-C_Vpg-fX.js → thread-sheet-body-Cn07EcYl.js} +1 -1
- package/dist/client/assets/{toggle-group-DG19r_KQ.js → toggle-group-8GW330jn.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-6kpUmydY.js → toolbar-icon-button-BR3O5nbS.js} +1 -1
- package/dist/client/assets/{tooltip-DB_mQQ5y.js → tooltip-C6ST3NpK.js} +1 -1
- package/dist/client/assets/{track-DVuJubzn.js → track-CbmiGiqA.js} +1 -1
- package/dist/client/assets/{types-C5y87H9S.js → types-CCxzQATz.js} +1 -1
- package/dist/client/assets/{usage-stats-rVm4rZXJ.js → usage-stats-BrYXmxF3.js} +1 -1
- package/dist/client/assets/{use-ai-providers-ChLr6stH.js → use-ai-providers-DUHhmQc6.js} +1 -1
- package/dist/client/assets/{use-automations-D29wqp0p.js → use-automations-U42Dldb-.js} +1 -1
- package/dist/client/assets/{use-autosave-DzXheZOH.js → use-autosave-edwInapC.js} +1 -1
- package/dist/client/assets/{use-connect-companion-C9XVvNbQ.js → use-connect-companion-C8SW5ee7.js} +1 -1
- package/dist/client/assets/{use-connection-CxUZdVtx.js → use-connection-zRPDIQ_n.js} +1 -1
- package/dist/client/assets/{use-copy-n0GWSVkA.js → use-copy-CIAIrC4p.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Cqo-Z1Nz.js → use-create-virtual-mcp-VQEANfyF.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-DRlG3NUT.js → use-date-fns-locale-DeWcS2U7.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-0DRMOIhZ.js → use-debounced-autosave-CU5jh2Bj.js} +1 -1
- package/dist/client/assets/{use-debounced-value-D9Q5Remb.js → use-debounced-value-B3_m5S__.js} +1 -1
- package/dist/client/assets/{use-deco-credits-D_VcXnYT.js → use-deco-credits-B92-uMQD.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-M5cJZFyY.js → use-decopilot-events-7Ia-4Ojl.js} +1 -1
- package/dist/client/assets/{use-delete-connection-D1JqYId6.js → use-delete-connection-Dnlrdtet.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-CURK73vg.js → use-deployment-admin-CxktJ2MS.js} +1 -1
- package/dist/client/assets/{use-entitlements-BNCg22H6.js → use-entitlements-CJrgpU-3.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-CamuNqdc.js → use-fast-preview-draft-url-Dg3eP3_b.js} +1 -1
- package/dist/client/assets/{use-file-configs-CtFInHrx.js → use-file-configs-BRGqSXQ6.js} +1 -1
- package/dist/client/assets/{use-in-settings-BVlXs-Md.js → use-in-settings-B8vln_7N.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DWMzEhh9.js → use-infinite-scroll-CWZ-jt-q.js} +1 -1
- package/dist/client/assets/{use-join-requests--jRCdkZk.js → use-join-requests-CmLwY10S.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-BoYcNsqs.js → use-main-panel-tabs-Cskdmhh-.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-_gtuZE1M.js → use-mcp-auth-status-tmqmYFZf.js} +1 -1
- package/dist/client/assets/{use-mcp-client-QkBFbC3f.js → use-mcp-client-ixAVEgas.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-DvwjTF0b.js → use-mcp-prompts-2U0nS-wa.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Dqs2rAUi.js → use-mcp-tools-IEW4h9lj.js} +1 -1
- package/dist/client/assets/{use-members-aplVIbSX.js → use-members-CthmHZKF.js} +1 -1
- package/dist/client/assets/{use-mobile-z5LlRP9d.js → use-mobile-cGAaNUys.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-B82Qcige.js → use-navigate-to-agent-BCAq2VrI.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-6XxQw3Eh.js → use-open-billing-url-CqH0MvxG.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-LTupMcfa.js → use-org-auth-client-CLrcF9If.js} +1 -1
- package/dist/client/assets/{use-org-fs-CP-M8wtZ.js → use-org-fs-DES7wpqb.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-ug_mDBgC.js → use-org-repo-syncs-E3XPDOag.js} +1 -1
- package/dist/client/assets/{use-org-sso-jTEc7oSr.js → use-org-sso-Dv-UbNYl.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BC9sU7Oz.js → use-organization-roles-BWlsyW31.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CcUVu9tG.js → use-organization-settings-BfcOMNYp.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-C1nn8JtC.js → use-panel-navigate-BWSWcls2.js} +1 -1
- package/dist/client/assets/{use-project-native-view-presence-dy3A_Smb.js → use-project-native-view-presence-D4KcE4ZV.js} +1 -1
- package/dist/client/assets/{use-project-scope-BC5vNotn.js → use-project-scope-BXLyS9dJ.js} +1 -1
- package/dist/client/assets/{use-registry-connections-D949LAVQ.js → use-registry-connections-D-bmaapw.js} +1 -1
- package/dist/client/assets/{use-releases-DbvQa9X0.js → use-releases-gwSkm006.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-CvqD5Npp.js → use-reports-diagnostic-Bcblv5Yi.js} +1 -1
- package/dist/client/assets/{use-route-default-main-4UlGpexs.js → use-route-default-main-Cqwf9yFF.js} +1 -1
- package/dist/client/assets/{use-secrets-DQ0yv8Dx.js → use-secrets-BoxjTT25.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-A8bn_b5M.js → use-section-preview-base-DqYppapS.js} +1 -1
- package/dist/client/assets/{use-session-runtime-D8PkcXOC.js → use-session-runtime-BjRK3zxG.js} +1 -1
- package/dist/client/assets/{use-tags-eYRRTNnb.js → use-tags-DoOM8lEs.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-D-kcn1Zu.js → use-task-board-analytics-Cs9CJCjT.js} +1 -1
- package/dist/client/assets/{use-task-metadata-DZMFkATI.js → use-task-metadata-DoKY3xZE.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-DTZIvT49.js → use-thread-outputs-U4dosc_t.js} +1 -1
- package/dist/client/assets/{use-view-mode-DxPHENE7.js → use-view-mode-BstGnCoQ.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-fKIjaLUZ.js → use-virtual-mcp-DpRXFoRT.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-oFY--skC.js +1 -0
- package/dist/client/assets/{useQueries-CivyO6wT.js → useQueries-D-H6sgTA.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CeJnbkNg.js +1 -0
- package/dist/client/assets/{users-CUvKzNap.js → users-BYszNity.js} +1 -1
- package/dist/client/assets/{utils-DSkbGbRW.js → utils-BcWFUEDf.js} +1 -1
- package/dist/client/assets/{variant-calendar-DjBw6GgF.js → variant-calendar-CjdpLWMM.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-DIc1blpZ.js → variant-matcher-override-tS-jImDP.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-BEII9Hz5.js → view-mode-toggle-6iRVDc1B.js} +1 -1
- package/dist/client/assets/{virtual-mcp-BuIha-KP.js → virtual-mcp-BPECS6-J.js} +1 -1
- package/dist/client/index.html +2 -2
- 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-DB0n9kOL.js +0 -1
- package/dist/client/assets/agent-deck-Bw6Hm4Fs.js +0 -1
- package/dist/client/assets/agent-file-B3o36mvT.js +0 -1
- package/dist/client/assets/agent-library-file-C6aVVhO7.js +0 -1
- package/dist/client/assets/agent-settings-BXN1E4GQ.js +0 -1
- package/dist/client/assets/agent-site-editor-code-lUlSWpIf.js +0 -2
- package/dist/client/assets/agent-site-editor-preview-BkdcHe-G.js +0 -518
- package/dist/client/assets/agent-view-DfomKgn9.js +0 -1
- package/dist/client/assets/api-keys-q9NetUp4.js +0 -1
- package/dist/client/assets/app-editor--D9yS_3r.js +0 -1
- package/dist/client/assets/category-editor-J_clPaRt.js +0 -1
- package/dist/client/assets/decopilot-DUPu0_xK.js +0 -4
- package/dist/client/assets/index-BOHOyAF8.css +0 -1
- package/dist/client/assets/input-DQJIevdV.js +0 -8
- package/dist/client/assets/pair-BUORk8Dw.js +0 -47
- package/dist/client/assets/project-reports-CT0QZktU.js +0 -1
- package/dist/client/assets/project-tasks-BBYQxnPi.js +0 -1
- package/dist/client/assets/record-editor-J2Uasy2O.js +0 -1
- package/dist/client/assets/registry-CCMThGEu.js +0 -2
- package/dist/client/assets/reports-DolpTcLc.js +0 -1
- package/dist/client/assets/route-sCTIOnzJ.js +0 -1
- package/dist/client/assets/runnable-block-editor-3WdOeD3r.js +0 -16
- package/dist/client/assets/store-registry-B9NkoB0_.js +0 -2
- package/dist/client/assets/tasks-snZl8AHp.js +0 -1
- package/dist/client/assets/useInfiniteQuery-BQbzbaMU.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-ydSR9RDy.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -2076,7 +2076,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var v0$=L(()=>{Cg()});f
|
|
|
2076
2076
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${G}/${K}, keeping in old table`);continue}}await Xu`
|
|
2077
2077
|
DELETE FROM kysely_migration WHERE name = ${Q}
|
|
2078
2078
|
`.execute($)}}async function X5$($){await uX4($),await lX4($);let Z=new Z5$({db:$,provider:{getMigrations:()=>Promise.resolve(ms0)}}),{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 cX4($){let{keepOpen:Z=!1,database:Q,skipBetterAuth:X=!1}=$??{},Y="skipped";if(!X&&!Q)Y=await Kt0();let J=Q??l$(),G=async()=>{if(!Z&&!Q)await gL(J).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await X5$(J.db);return await G(),{betterAuth:Y,kysely:K}}catch(K){throw await G(),K}}async function mX4(){let $=l$(),Z=new Z5$({db:$.db,provider:{getMigrations:()=>Promise.resolve(ms0)}}),{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 J5$=L(()=>{$5$();Wt0();mQ()});async function qJ0($){let Z={...process.env},Q=D90($,Z);console.log(fR1(Q.settings.encryptionKey));let X=Q.settings.betterAuthSecret||(Q.settings.localMode?U$$(Q.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (MY0(),qY0)),{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(() => (Wt0(),B$$));await W(J.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (mQ(),k1$)),{migrateToLatest:F}=await Promise.resolve().then(() => (J5$(),Y5$)),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 x0$(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=L(()=>{Cg();N$$();t1()});var H5$={};e(H5$,{updateService:()=>dz,subscribeCliState:()=>ns0,setTuiConsoleIntercepted:()=>MJ0,setServerUrl:()=>zo,setMigrationsDone:()=>Eo,setDevMode:()=>iX4,resetCliStateForTests:()=>dX4,isTuiConsoleIntercepted:()=>IJ0,getCliState:()=>ps0,addLogEntry:()=>dL});function G5$(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function K5$(){return{services:G5$(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function dX4(){_Y=K5$()}function jo(){for(let $ of is0)$()}function ps0(){return _Y}function ns0($){return is0.add($),()=>is0.delete($)}function dz($){_Y={..._Y,services:_Y.services.map((Z)=>Z.name===$.name?$:Z)},jo()}function Eo(){_Y={..._Y,migrationsStatus:"done"},jo()}function zo($){_Y={..._Y,serverUrl:$},jo()}function dL($){let Z=[..._Y.logs,$];_Y={..._Y,logs:Z.length>500?Z.slice(-500):Z},jo()}function iX4(){_Y={..._Y,services:[...G5$(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},jo()}function MJ0($){W5$=$}function IJ0(){return W5$}var _Y,is0,W5$=!1;var iz=L(()=>{_Y=K5$();is0=new Set});import{createServer as F5$}from"net";function pX4($){return new Promise((Z)=>{let Q=F5$();Q.once("error",()=>Z(!1)),Q.listen($,"0.0.0.0",()=>{Q.close(()=>Z(!0))})})}async function Po($){if(await pX4($))return $;let Z=await new Promise((Q,X)=>{let Y=F5$();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 ts0=()=>{};var rs0={};e(rs0,{startDevServer:()=>tX4,pipeToLogStore:()=>os0});import{join as nX4}from"path";function os0($){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;dL({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)dL({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function tX4($){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 Po(Number(Y)+1):await Po(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await qJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let O of W)dz({name:O.name,status:"ready",port:O.port});Eo();let F=nX4(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)os0(N.stdout),os0(N.stderr);zo(J),dz({name:"Vite",status:"ready",port:Number(Y)}),dz({name:"API",status:"ready",port:Number(K.port)});let D=async(O)=>{if(N.kill(O),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (MY0(),qY0));await w(K.dataDir)}};return process.on("SIGINT",()=>D("SIGINT")),process.on("SIGTERM",()=>D("SIGTERM")),{port:Number(Y),process:N}}var as0=L(()=>{ds0();iz();ts0()});var VJ0;var ss0=L(()=>{VJ0={name:"decocms",version:"4.373.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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 rX4,Text as U5$}from"ink";import{jsx as aX4,jsxs as N5$}from"react/jsx-runtime";function B5$({version:$}){return N5$(rX4,{flexDirection:"column",marginTop:1,children:[oY0.map((Z,Q)=>aX4(U5$,{color:rY0[Q],children:Z},Q)),N5$(U5$,{dimColor:!0,children:[" v",$]})]})}var D5$=L(()=>{Yo()});import{Box as pz,Text as iL}from"ink";import{Spinner as sX4}from"@inkjs/ui";import{jsx as aJ,jsxs as Yu}from"react/jsx-runtime";function L5$({status:$}){if($==="pending")return aJ(sX4,{label:""});return aJ(iL,{color:"green",children:"\u2713"})}function eX4($){return`${$.name}: ${$.port||"...."}`}function O5$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Yu(pz,{flexDirection:"column",paddingBottom:1,children:[aJ(B5$,{version:VJ0.version}),aJ(pz,{marginBottom:1,children:aJ(iL,{dimColor:!0,children:"\u2500".repeat(80)})}),aJ(pz,{children:Yu(iL,{dimColor:!0,children:["Home: ",Q]})}),Yu(pz,{gap:2,children:[$.map((Y)=>Yu(pz,{gap:1,children:[aJ(iL,{children:eX4(Y)}),aJ(L5$,{status:Y.status})]},Y.name)),Yu(pz,{gap:1,children:[aJ(iL,{children:"Migrations"}),aJ(L5$,{status:Z})]})]}),aJ(pz,{children:X?Yu(iL,{children:["Open in browser: ",aJ(iL,{color:"cyan",children:X})]}):aJ(iL,{dimColor:!0,children:"Starting..."})})]})}var w5$=L(()=>{ss0();D5$()});import{Box as $Y4,Text as Ao}from"ink";import{jsx as es0,jsxs as $e0}from"react/jsx-runtime";function ZY4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function j5$({logs:$}){return es0($Y4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return es0(Ao,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return $e0(Ao,{children:[$e0(Ao,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),es0(Ao,{color:ZY4(Z.status),children:Z.status}),$e0(Ao,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var E5$=()=>{};var Ze0={};e(Ze0,{App:()=>YY4});import{Box as QY4}from"ink";import{useSyncExternalStore as XY4}from"react";import{jsx as z5$,jsxs as JY4}from"react/jsx-runtime";function YY4({home:$}){let Z=XY4(ns0,ps0);return JY4(QY4,{flexDirection:"column",children:[z5$(O5$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),z5$(j5$,{logs:Z.logs})]})}var Qe0=L(()=>{w5$();E5$();iz()});var TG="thread-gate",hN="decopilot-hosted-harness",uN="decopilot-hosted-harness-sandboxed",RG="automations",pL="background-tools",nz="task-board-github-reads";var P5$="11";function A5$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:P5$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var T5$=()=>{};import GY4 from"pg";async function q5$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=KY4}=$,Y=$.log??((W)=>console.log(W)),J=new GY4.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",[R5$.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 B$(WY4)}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)",[R5$.toString()])}catch{}await J.end().catch(()=>{})}}var R5$=8314027461559302n,KY4=600000,WY4=500;var M5$=L(()=>{i$()});function HY4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Xe0($,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 I5$(){let $=HY4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Xe0($,"--cpu-prof-dir")??process.cwd(),name:Xe0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Xe0($,"--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 V5$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=uz();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 k5$=()=>{};import*as FY4 from"bun:jsc";function S5$(){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{UY4()}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=NY4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.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 UY4,NY4;var C5$=L(()=>{({startSamplingProfiler:UY4,samplingProfilerStackTraces:NY4}=FY4)});function _5$(){I5$();let $=[V5$(),P1$(),S5$()];return()=>{for(let Z of $)Z()}}var v5$=L(()=>{en0();k5$();C5$()});var tz=v((x5$)=>{Object.defineProperty(x5$,"__esModule",{value:!0});x5$.RepublishHeaders=x5$.DirectMsgHeaders=x5$.JsHeaders=x5$.AdvisoryKind=void 0;x5$.isOrderedPushConsumerOptions=BY4;x5$.isPullConsumer=DY4;x5$.isPushConsumer=LY4;x5$.isBoundPushConsumerOptions=OY4;function BY4($){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 DY4($){return $.isPullConsumer()}function LY4($){return $.isPushConsumer()}function OY4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}x5$.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"};x5$.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"};x5$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};x5$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var sJ=v((b5$)=>{Object.defineProperty(b5$,"__esModule",{value:!0});b5$.TD=b5$.TE=b5$.Empty=void 0;b5$.encode=qY4;b5$.decode=MY4;b5$.Empty=new Uint8Array(0);b5$.TE=new TextEncoder;b5$.TD=new TextDecoder;function RY4(...$){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 qY4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(b5$.TE.encode($[Q]));if(Z.length===0)return b5$.Empty;if(Z.length===1)return Z[0];return RY4(...Z)}function MY4($){if(!$||$.length===0)return"";return b5$.TD.decode($)}});var eJ=v((h5$)=>{Object.defineProperty(h5$,"__esModule",{value:!0});h5$.errors=h5$.PermissionViolationError=h5$.NoRespondersError=h5$.TimeoutError=h5$.RequestError=h5$.ProtocolError=h5$.ConnectionError=h5$.DrainingConnectionError=h5$.ClosedConnectionError=h5$.AuthorizationError=h5$.UserAuthenticationExpiredError=h5$.InvalidOperationError=h5$.InvalidArgumentError=h5$.InvalidSubjectError=void 0;class Je0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}h5$.InvalidSubjectError=Je0;class SJ0 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 SJ0(`${$} ${Z}`,Q)}}h5$.InvalidArgumentError=SJ0;class Ge0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}h5$.InvalidOperationError=Ge0;class CJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new CJ0($);return null}}h5$.UserAuthenticationExpiredError=CJ0;class _J0 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 _J0($);return null}}h5$.AuthorizationError=_J0;class Ke0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}h5$.ClosedConnectionError=Ke0;class We0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}h5$.DrainingConnectionError=We0;class He0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}h5$.ConnectionError=He0;class Fe0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}h5$.ProtocolError=Fe0;class Ue0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof vJ0}}h5$.RequestError=Ue0;class Ne0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}h5$.TimeoutError=Ne0;class vJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}h5$.NoRespondersError=vJ0;class xJ0 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 xJ0($,Q,X,Y)}}h5$.PermissionViolationError=xJ0;h5$.errors={AuthorizationError:_J0,ClosedConnectionError:Ke0,ConnectionError:He0,DrainingConnectionError:We0,InvalidArgumentError:SJ0,InvalidOperationError:Ge0,InvalidSubjectError:Je0,NoRespondersError:vJ0,PermissionViolationError:xJ0,ProtocolError:Fe0,RequestError:Ue0,TimeoutError:Ne0,UserAuthenticationExpiredError:CJ0}});var QW=v((d5$)=>{Object.defineProperty(d5$,"__esModule",{value:!0});d5$.SimpleMutex=d5$.Perf=void 0;d5$.extend=mY4;d5$.render=dY4;d5$.timeout=iY4;d5$.delay=pY4;d5$.deadline=nY4;d5$.deferred=De0;d5$.debugDeferred=tY4;d5$.shuffle=oY4;d5$.collect=rY4;d5$.jitter=m5$;d5$.backoff=aY4;d5$.nanos=sY4;d5$.millis=eY4;d5$.randomToken=QJ4;var cY4=sJ(),Be0=eJ();function mY4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function dY4($){return cY4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function iY4($,Z=!0){let Q=Z?new Be0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new Be0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function pY4($=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 nY4($,Z=1000){let Q=De0(),X=setTimeout(()=>{Q.reject(new Be0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function De0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function tY4(){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 oY4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function rY4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class l5${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})}),$}}d5$.Perf=l5$;class c5${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=De0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}d5$.SimpleMutex=c5$;function m5$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function aY4($=[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 m5$(Q>Z?$[Z]:$[Q])}}}function sY4($){return $*1e6}function eY4($){return Math.floor($/1e6)}var $J4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",lN=new Uint8Array(62);for(let $=0;$<62;$++)lN[$]=$J4.charCodeAt($);var ZJ4=218340105584896;function QJ4(){let $=Math.floor(Math.random()*ZJ4),Z=$%62,Q=lN[Z];$=($-Z)/62,Z=$%62;let X=lN[Z];$=($-Z)/62,Z=$%62;let Y=lN[Z];$=($-Z)/62,Z=$%62;let J=lN[Z];$=($-Z)/62,Z=$%62;let G=lN[Z];$=($-Z)/62,Z=$%62;let K=lN[Z];$=($-Z)/62,Z=$%62;let W=lN[Z];$=($-Z)/62;let H=lN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var s5$=v((r5$)=>{Object.defineProperty(r5$,"__esModule",{value:!0});r5$.nuid=r5$.NuidImpl=void 0;var jJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",nL=62,bJ0=12,t5$=10,p5$=33,EJ4=333,n5$=bJ0+t5$,Oe0=new Uint8Array(nL);for(let $=0;$<nL;$++)Oe0[$]=jJ4.charCodeAt($);var fJ0=4294967296,o5$=BigInt(nL)**BigInt(t5$),To=Number(o5$/(1n<<32n)),Le0=Number(o5$%(1n<<32n));function zJ4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function PJ4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else zJ4($)}class we0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(n5$),this.cbuf=new Uint8Array(bJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(To+1)),this.seqLo=Math.floor(Math.random()*fJ0);while($++<8&&this.seqHi===To&&this.seqLo>=Le0);if(this.seqHi===To&&this.seqLo>=Le0)this.seqLo=0;this.inc=Math.random()*(EJ4-p5$)+p5$|0}setPre(){PJ4(this.cbuf);for(let $=0;$<bJ0;$++)this.buf[$]=Oe0[this.cbuf[$]%nL]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=n5$-1;Q>=bJ0;Q--){let X=Math.floor($/nL),J=($-X*nL)*fJ0+Z,G=Math.floor(J/nL),K=J-G*nL;this.buf[Q]=Oe0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=fJ0)this.seqLo-=fJ0,this.seqHi+=1;if(this.seqHi>To||this.seqHi===To&&this.seqLo>=Le0)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()}}r5$.NuidImpl=we0;r5$.nuid=new we0});var Q9$=v(($9$)=>{Object.defineProperty($9$,"__esModule",{value:!0});$9$.nuid=$9$.Nuid=void 0;var e5$=s5$();$9$.Nuid=e5$.NuidImpl;$9$.nuid=e5$.nuid});var gJ0=v((yJ0)=>{Object.defineProperty(yJ0,"__esModule",{value:!0});yJ0.nuid=yJ0.Nuid=void 0;var X9$=Q9$();Object.defineProperty(yJ0,"Nuid",{enumerable:!0,get:function(){return X9$.Nuid}});Object.defineProperty(yJ0,"nuid",{enumerable:!0,get:function(){return X9$.nuid}})});var tL=v((Y9$)=>{Object.defineProperty(Y9$,"__esModule",{value:!0});Y9$.DEFAULT_HOST=Y9$.DEFAULT_PORT=Y9$.Match=void 0;Y9$.syncIterator=IJ4;Y9$.createInbox=VJ4;var qJ4=gJ0(),MJ4=eJ();Y9$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function IJ4($){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 VJ4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw MJ4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${qJ4.nuid.next()}`}Y9$.DEFAULT_PORT=4222;Y9$.DEFAULT_HOST="127.0.0.1"});var Ro=v((W9$)=>{Object.defineProperty(W9$,"__esModule",{value:!0});W9$.DataBuffer=void 0;var G9$=sJ();class K9${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 G9$.TE.encode($)}static toAscii($){return G9$.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}}W9$.DataBuffer=K9$});var oz=v((U9$)=>{Object.defineProperty(U9$,"__esModule",{value:!0});U9$.LF=U9$.CR=U9$.CRLF=U9$.CR_LF_LEN=U9$.CR_LF=void 0;U9$.setTransportFactory=bJ4;U9$.defaultPort=yJ4;U9$.getUrlParseFn=gJ4;U9$.newTransport=hJ4;U9$.getResolveFn=uJ4;U9$.protoLen=F9$;U9$.extractProtocolMessage=lJ4;var vJ4=sJ(),xJ4=tL(),fJ4=Ro(),$3;function bJ4($){$3=$}function yJ4(){return $3!==void 0&&$3.defaultPort!==void 0?$3.defaultPort:xJ4.DEFAULT_PORT}function gJ4(){return $3!==void 0&&$3.urlParseFn?$3.urlParseFn:void 0}function hJ4(){if(!$3||typeof $3.factory!=="function")throw Error("transport fn is not set");return $3.factory()}function uJ4(){return $3!==void 0&&$3.dnsResolveFn?$3.dnsResolveFn:void 0}U9$.CR_LF=`\r
|
|
2079
|
+
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;dL({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)dL({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function tX4($){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 Po(Number(Y)+1):await Po(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await qJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let O of W)dz({name:O.name,status:"ready",port:O.port});Eo();let F=nX4(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)os0(N.stdout),os0(N.stderr);zo(J),dz({name:"Vite",status:"ready",port:Number(Y)}),dz({name:"API",status:"ready",port:Number(K.port)});let D=async(O)=>{if(N.kill(O),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (MY0(),qY0));await w(K.dataDir)}};return process.on("SIGINT",()=>D("SIGINT")),process.on("SIGTERM",()=>D("SIGTERM")),{port:Number(Y),process:N}}var as0=L(()=>{ds0();iz();ts0()});var VJ0;var ss0=L(()=>{VJ0={name:"decocms",version:"4.373.8",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 rX4,Text as U5$}from"ink";import{jsx as aX4,jsxs as N5$}from"react/jsx-runtime";function B5$({version:$}){return N5$(rX4,{flexDirection:"column",marginTop:1,children:[oY0.map((Z,Q)=>aX4(U5$,{color:rY0[Q],children:Z},Q)),N5$(U5$,{dimColor:!0,children:[" v",$]})]})}var D5$=L(()=>{Yo()});import{Box as pz,Text as iL}from"ink";import{Spinner as sX4}from"@inkjs/ui";import{jsx as aJ,jsxs as Yu}from"react/jsx-runtime";function L5$({status:$}){if($==="pending")return aJ(sX4,{label:""});return aJ(iL,{color:"green",children:"\u2713"})}function eX4($){return`${$.name}: ${$.port||"...."}`}function O5$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Yu(pz,{flexDirection:"column",paddingBottom:1,children:[aJ(B5$,{version:VJ0.version}),aJ(pz,{marginBottom:1,children:aJ(iL,{dimColor:!0,children:"\u2500".repeat(80)})}),aJ(pz,{children:Yu(iL,{dimColor:!0,children:["Home: ",Q]})}),Yu(pz,{gap:2,children:[$.map((Y)=>Yu(pz,{gap:1,children:[aJ(iL,{children:eX4(Y)}),aJ(L5$,{status:Y.status})]},Y.name)),Yu(pz,{gap:1,children:[aJ(iL,{children:"Migrations"}),aJ(L5$,{status:Z})]})]}),aJ(pz,{children:X?Yu(iL,{children:["Open in browser: ",aJ(iL,{color:"cyan",children:X})]}):aJ(iL,{dimColor:!0,children:"Starting..."})})]})}var w5$=L(()=>{ss0();D5$()});import{Box as $Y4,Text as Ao}from"ink";import{jsx as es0,jsxs as $e0}from"react/jsx-runtime";function ZY4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function j5$({logs:$}){return es0($Y4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return es0(Ao,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return $e0(Ao,{children:[$e0(Ao,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),es0(Ao,{color:ZY4(Z.status),children:Z.status}),$e0(Ao,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var E5$=()=>{};var Ze0={};e(Ze0,{App:()=>YY4});import{Box as QY4}from"ink";import{useSyncExternalStore as XY4}from"react";import{jsx as z5$,jsxs as JY4}from"react/jsx-runtime";function YY4({home:$}){let Z=XY4(ns0,ps0);return JY4(QY4,{flexDirection:"column",children:[z5$(O5$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),z5$(j5$,{logs:Z.logs})]})}var Qe0=L(()=>{w5$();E5$();iz()});var TG="thread-gate",hN="decopilot-hosted-harness",uN="decopilot-hosted-harness-sandboxed",RG="automations",pL="background-tools",nz="task-board-github-reads";var P5$="11";function A5$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:P5$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var T5$=()=>{};import GY4 from"pg";async function q5$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=KY4}=$,Y=$.log??((W)=>console.log(W)),J=new GY4.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",[R5$.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 B$(WY4)}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)",[R5$.toString()])}catch{}await J.end().catch(()=>{})}}var R5$=8314027461559302n,KY4=600000,WY4=500;var M5$=L(()=>{i$()});function HY4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Xe0($,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 I5$(){let $=HY4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Xe0($,"--cpu-prof-dir")??process.cwd(),name:Xe0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Xe0($,"--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 V5$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=uz();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 k5$=()=>{};import*as FY4 from"bun:jsc";function S5$(){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{UY4()}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=NY4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.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 UY4,NY4;var C5$=L(()=>{({startSamplingProfiler:UY4,samplingProfilerStackTraces:NY4}=FY4)});function _5$(){I5$();let $=[V5$(),P1$(),S5$()];return()=>{for(let Z of $)Z()}}var v5$=L(()=>{en0();k5$();C5$()});var tz=v((x5$)=>{Object.defineProperty(x5$,"__esModule",{value:!0});x5$.RepublishHeaders=x5$.DirectMsgHeaders=x5$.JsHeaders=x5$.AdvisoryKind=void 0;x5$.isOrderedPushConsumerOptions=BY4;x5$.isPullConsumer=DY4;x5$.isPushConsumer=LY4;x5$.isBoundPushConsumerOptions=OY4;function BY4($){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 DY4($){return $.isPullConsumer()}function LY4($){return $.isPushConsumer()}function OY4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}x5$.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"};x5$.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"};x5$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};x5$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var sJ=v((b5$)=>{Object.defineProperty(b5$,"__esModule",{value:!0});b5$.TD=b5$.TE=b5$.Empty=void 0;b5$.encode=qY4;b5$.decode=MY4;b5$.Empty=new Uint8Array(0);b5$.TE=new TextEncoder;b5$.TD=new TextDecoder;function RY4(...$){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 qY4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(b5$.TE.encode($[Q]));if(Z.length===0)return b5$.Empty;if(Z.length===1)return Z[0];return RY4(...Z)}function MY4($){if(!$||$.length===0)return"";return b5$.TD.decode($)}});var eJ=v((h5$)=>{Object.defineProperty(h5$,"__esModule",{value:!0});h5$.errors=h5$.PermissionViolationError=h5$.NoRespondersError=h5$.TimeoutError=h5$.RequestError=h5$.ProtocolError=h5$.ConnectionError=h5$.DrainingConnectionError=h5$.ClosedConnectionError=h5$.AuthorizationError=h5$.UserAuthenticationExpiredError=h5$.InvalidOperationError=h5$.InvalidArgumentError=h5$.InvalidSubjectError=void 0;class Je0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}h5$.InvalidSubjectError=Je0;class SJ0 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 SJ0(`${$} ${Z}`,Q)}}h5$.InvalidArgumentError=SJ0;class Ge0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}h5$.InvalidOperationError=Ge0;class CJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new CJ0($);return null}}h5$.UserAuthenticationExpiredError=CJ0;class _J0 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 _J0($);return null}}h5$.AuthorizationError=_J0;class Ke0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}h5$.ClosedConnectionError=Ke0;class We0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}h5$.DrainingConnectionError=We0;class He0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}h5$.ConnectionError=He0;class Fe0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}h5$.ProtocolError=Fe0;class Ue0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof vJ0}}h5$.RequestError=Ue0;class Ne0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}h5$.TimeoutError=Ne0;class vJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}h5$.NoRespondersError=vJ0;class xJ0 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 xJ0($,Q,X,Y)}}h5$.PermissionViolationError=xJ0;h5$.errors={AuthorizationError:_J0,ClosedConnectionError:Ke0,ConnectionError:He0,DrainingConnectionError:We0,InvalidArgumentError:SJ0,InvalidOperationError:Ge0,InvalidSubjectError:Je0,NoRespondersError:vJ0,PermissionViolationError:xJ0,ProtocolError:Fe0,RequestError:Ue0,TimeoutError:Ne0,UserAuthenticationExpiredError:CJ0}});var QW=v((d5$)=>{Object.defineProperty(d5$,"__esModule",{value:!0});d5$.SimpleMutex=d5$.Perf=void 0;d5$.extend=mY4;d5$.render=dY4;d5$.timeout=iY4;d5$.delay=pY4;d5$.deadline=nY4;d5$.deferred=De0;d5$.debugDeferred=tY4;d5$.shuffle=oY4;d5$.collect=rY4;d5$.jitter=m5$;d5$.backoff=aY4;d5$.nanos=sY4;d5$.millis=eY4;d5$.randomToken=QJ4;var cY4=sJ(),Be0=eJ();function mY4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function dY4($){return cY4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function iY4($,Z=!0){let Q=Z?new Be0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new Be0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function pY4($=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 nY4($,Z=1000){let Q=De0(),X=setTimeout(()=>{Q.reject(new Be0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function De0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function tY4(){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 oY4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function rY4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class l5${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})}),$}}d5$.Perf=l5$;class c5${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=De0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}d5$.SimpleMutex=c5$;function m5$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function aY4($=[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 m5$(Q>Z?$[Z]:$[Q])}}}function sY4($){return $*1e6}function eY4($){return Math.floor($/1e6)}var $J4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",lN=new Uint8Array(62);for(let $=0;$<62;$++)lN[$]=$J4.charCodeAt($);var ZJ4=218340105584896;function QJ4(){let $=Math.floor(Math.random()*ZJ4),Z=$%62,Q=lN[Z];$=($-Z)/62,Z=$%62;let X=lN[Z];$=($-Z)/62,Z=$%62;let Y=lN[Z];$=($-Z)/62,Z=$%62;let J=lN[Z];$=($-Z)/62,Z=$%62;let G=lN[Z];$=($-Z)/62,Z=$%62;let K=lN[Z];$=($-Z)/62,Z=$%62;let W=lN[Z];$=($-Z)/62;let H=lN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var s5$=v((r5$)=>{Object.defineProperty(r5$,"__esModule",{value:!0});r5$.nuid=r5$.NuidImpl=void 0;var jJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",nL=62,bJ0=12,t5$=10,p5$=33,EJ4=333,n5$=bJ0+t5$,Oe0=new Uint8Array(nL);for(let $=0;$<nL;$++)Oe0[$]=jJ4.charCodeAt($);var fJ0=4294967296,o5$=BigInt(nL)**BigInt(t5$),To=Number(o5$/(1n<<32n)),Le0=Number(o5$%(1n<<32n));function zJ4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function PJ4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else zJ4($)}class we0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(n5$),this.cbuf=new Uint8Array(bJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(To+1)),this.seqLo=Math.floor(Math.random()*fJ0);while($++<8&&this.seqHi===To&&this.seqLo>=Le0);if(this.seqHi===To&&this.seqLo>=Le0)this.seqLo=0;this.inc=Math.random()*(EJ4-p5$)+p5$|0}setPre(){PJ4(this.cbuf);for(let $=0;$<bJ0;$++)this.buf[$]=Oe0[this.cbuf[$]%nL]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=n5$-1;Q>=bJ0;Q--){let X=Math.floor($/nL),J=($-X*nL)*fJ0+Z,G=Math.floor(J/nL),K=J-G*nL;this.buf[Q]=Oe0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=fJ0)this.seqLo-=fJ0,this.seqHi+=1;if(this.seqHi>To||this.seqHi===To&&this.seqLo>=Le0)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()}}r5$.NuidImpl=we0;r5$.nuid=new we0});var Q9$=v(($9$)=>{Object.defineProperty($9$,"__esModule",{value:!0});$9$.nuid=$9$.Nuid=void 0;var e5$=s5$();$9$.Nuid=e5$.NuidImpl;$9$.nuid=e5$.nuid});var gJ0=v((yJ0)=>{Object.defineProperty(yJ0,"__esModule",{value:!0});yJ0.nuid=yJ0.Nuid=void 0;var X9$=Q9$();Object.defineProperty(yJ0,"Nuid",{enumerable:!0,get:function(){return X9$.Nuid}});Object.defineProperty(yJ0,"nuid",{enumerable:!0,get:function(){return X9$.nuid}})});var tL=v((Y9$)=>{Object.defineProperty(Y9$,"__esModule",{value:!0});Y9$.DEFAULT_HOST=Y9$.DEFAULT_PORT=Y9$.Match=void 0;Y9$.syncIterator=IJ4;Y9$.createInbox=VJ4;var qJ4=gJ0(),MJ4=eJ();Y9$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function IJ4($){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 VJ4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw MJ4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${qJ4.nuid.next()}`}Y9$.DEFAULT_PORT=4222;Y9$.DEFAULT_HOST="127.0.0.1"});var Ro=v((W9$)=>{Object.defineProperty(W9$,"__esModule",{value:!0});W9$.DataBuffer=void 0;var G9$=sJ();class K9${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 G9$.TE.encode($)}static toAscii($){return G9$.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}}W9$.DataBuffer=K9$});var oz=v((U9$)=>{Object.defineProperty(U9$,"__esModule",{value:!0});U9$.LF=U9$.CR=U9$.CRLF=U9$.CR_LF_LEN=U9$.CR_LF=void 0;U9$.setTransportFactory=bJ4;U9$.defaultPort=yJ4;U9$.getUrlParseFn=gJ4;U9$.newTransport=hJ4;U9$.getResolveFn=uJ4;U9$.protoLen=F9$;U9$.extractProtocolMessage=lJ4;var vJ4=sJ(),xJ4=tL(),fJ4=Ro(),$3;function bJ4($){$3=$}function yJ4(){return $3!==void 0&&$3.defaultPort!==void 0?$3.defaultPort:xJ4.DEFAULT_PORT}function gJ4(){return $3!==void 0&&$3.urlParseFn?$3.urlParseFn:void 0}function hJ4(){if(!$3||typeof $3.factory!=="function")throw Error("transport fn is not set");return $3.factory()}function uJ4(){return $3!==void 0&&$3.dnsResolveFn?$3.dnsResolveFn:void 0}U9$.CR_LF=`\r
|
|
2080
2080
|
`;U9$.CR_LF_LEN=U9$.CR_LF.length;U9$.CRLF=fJ4.DataBuffer.fromAscii(U9$.CR_LF);U9$.CR=new Uint8Array(U9$.CRLF)[0];U9$.LF=new Uint8Array(U9$.CRLF)[1];function F9$($){for(let Z=0;Z<$.length;Z++){let Q=Z+1;if($.byteLength>Q&&$[Z]===U9$.CR&&$[Q]===U9$.LF)return Q+1}return 0}function lJ4($){let Z=F9$($);if(Z>0){let X=new Uint8Array($).slice(0,Z);return vJ4.TD.decode(X)}return""}});var Ae0=v((E9$)=>{Object.defineProperty(E9$,"__esModule",{value:!0});E9$.ipV4=O9$;E9$.isIP=sJ4;E9$.parseIP=w9$;var qo=4,rz=16,hJ0=48,L9$=57,B9$=65,rJ4=70,D9$=97,aJ4=102,Pe0=16777215;function O9$($,Z,Q,X){let Y=new Uint8Array(rz);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 sJ4($){return w9$($)!==void 0}function w9$($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return j9$($);case":":return eJ4($)}return}function j9$($){let Z=new Uint8Array(qo);for(let Q=0;Q<qo;Q++){if($.length===0)return;if(Q>0){if($[0]!==".")return;$=$.substring(1)}let{n:X,c:Y,ok:J}=$34($);if(!J||X>255)return;$=$.substring(Y),Z[Q]=X}return O9$(Z[0],Z[1],Z[2],Z[3])}function eJ4($){let Z=new Uint8Array(rz),Q=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(Q=0,$=$.substring(2),$.length===0)return Z}let X=0;while(X<rz){let{n:Y,c:J,ok:G}=Z34($);if(!G||Y>65535)return;if(J<$.length&&$[J]==="."){if(Q<0&&X!=rz-qo)return;if(X+qo>rz)return;let K=j9$($);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+=qo;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<rz){if(Q<0)return;let Y=rz-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 $34($){let Z=0,Q=0;for(Z=0;Z<$.length&&hJ0<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=L9$;Z++)if(Q=Q*10+($.charCodeAt(Z)-hJ0),Q>=Pe0)return{n:Pe0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:Q,c:Z,ok:!0}}function Z34($){let Z=0,Q=0;for(Q=0;Q<$.length;Q++){if(hJ0<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=L9$)Z*=16,Z+=$.charCodeAt(Q)-hJ0;else if(D9$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=aJ4)Z*=16,Z+=$.charCodeAt(Q)-D9$+10;else if(B9$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=rJ4)Z*=16,Z+=$.charCodeAt(Q)-B9$+10;else break;if(Z>=Pe0)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 Ve0=v((P9$)=>{Object.defineProperty(P9$,"__esModule",{value:!0});P9$.Servers=P9$.ServerImpl=void 0;P9$.isIPV4OrHostname=z9$;P9$.hostPort=Ie0;var Te0=oz(),Re0=QW(),qe0=Ae0(),J34=tL(),G34=eJ();function z9$($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Me0($){return!z9$($)}function K34($){let Q=$.toUpperCase().indexOf("::FFFF:");if(Q!==-1&&$.indexOf(".")!==-1){let X=$.substring(Q+7);return X=X.replace("[",""),X.replace("]","")}return $}function Ie0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=K34($),Me0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Me0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),Q=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):J34.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 Ju{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let Q=Ie0($);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,qe0.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}://${Me0(X)?"["+X+"]":X}`);J.port=`${this.port}`;let G=new Ju(J.host,!1);G.tlsName=this.hostname,Z.push(G)}}if($.randomize)(0,Re0.shuffle)(Z);return this.resolves=Z,Z}}P9$.ServerImpl=Ju;class uJ0{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw G34.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,Te0.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}=Ie0(Y),G=Q.get(J);if(G)G.gossiped=!1,X.push(G);else X.push(new Ju(Y))}if(this.randomize)(0,Re0.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,qe0.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,Te0.getUrlParseFn)();$=Q?Q($):$;let X=new Ju($,Z);if((0,qe0.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 uJ0.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return uJ0.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,Te0.getUrlParseFn)(),J=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Ju(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,Re0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:Q,deleted:X}}}P9$.Servers=uJ0});var lJ0=v((q9$)=>{Object.defineProperty(q9$,"__esModule",{value:!0});q9$.QueuedIteratorImpl=void 0;var ke0=QW(),T9$=eJ();class R9${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,ke0.deferred)(),this.yields=[],this.iterClosed=(0,ke0.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 T9$.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new T9$.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,ke0.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}}q9$.QueuedIteratorImpl=R9$});var Se0=v((k9$)=>{Object.defineProperty(k9$,"__esModule",{value:!0});k9$.MuxSubscription=void 0;var U34=tL(),I9$=eJ();class V9${baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,U34.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 I9$.NoRespondersError(X.requestSubject):null;X.resolver($,Z)}}}}close(){let $=new I9$.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}k9$.MuxSubscription=V9$});var Ce0=v((_9$)=>{Object.defineProperty(_9$,"__esModule",{value:!0});_9$.Heartbeat=void 0;var N34=QW();class C9${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,N34.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})}}_9$.Heartbeat=C9$});var xe0=v((y9$)=>{Object.defineProperty(y9$,"__esModule",{value:!0});y9$.DenoBuffer=y9$.MAX_SIZE=y9$.AssertionError=void 0;y9$.assert=f9$;y9$.concat=b9$;y9$.append=D34;y9$.readAll=L34;y9$.writeAll=O34;var B34=sJ();class _e0 extends Error{constructor($){super($);this.name="AssertionError"}}y9$.AssertionError=_e0;function f9$($,Z="Assertion failed."){if(!$)throw new _e0(Z)}var x9$=32768;y9$.MAX_SIZE=4294967294;function cJ0($,Z,Q=0){let X=Z.byteLength-Q;if($.byteLength>X)$=$.subarray(0,X);return Z.set($,Q),$.byteLength}function b9$($,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 D34($,Z){return b9$($,Uint8Array.of(Z))}class ve0{_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($){f9$($<=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=cJ0(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(B34.TE.encode($))}write($){let Z=this._grow($.byteLength);return cJ0($,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)cJ0(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));cJ0(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(x9$);while(!0){let X=this.capacity-this.length<x9$,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=ve0;function L34($){let Z=new ve0;return Z.readFrom($),Z.bytes()}function O34($,Z){let Q=0;while(Q<Z.length)Q+=$.write(Z.subarray(Q))}});var ye0=v((c9$)=>{Object.defineProperty(c9$,"__esModule",{value:!0});c9$.cc=c9$.State=c9$.Parser=c9$.Kind=void 0;c9$.describe=T34;var fe0=xe0(),be0=sJ();c9$.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function T34($){let Z,Q="";switch($.kind){case c9$.Kind.MSG:Z="MSG";break;case c9$.Kind.OK:Z="OK";break;case c9$.Kind.ERR:Z="ERR",Q=be0.TD.decode($.data);break;case c9$.Kind.PING:Z="PING";break;case c9$.Kind.PONG:Z="PONG";break;case c9$.Kind.INFO:Z="INFO",Q=be0.TD.decode($.data)}return`${Z}: ${Q}`}function h9$(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var u9$=48,R34=57,Gu=67108864;class l9${dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=c9$.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 c9$.State.OP_START:switch(Q){case c9$.cc.M:case c9$.cc.m:this.state=c9$.State.OP_M,this.hdr=-1,this.ma=h9$();break;case c9$.cc.H:case c9$.cc.h:this.state=c9$.State.OP_H,this.hdr=0,this.ma=h9$();break;case c9$.cc.P:case c9$.cc.p:this.state=c9$.State.OP_P;break;case c9$.cc.PLUS:this.state=c9$.State.OP_PLUS;break;case c9$.cc.MINUS:this.state=c9$.State.OP_MINUS;break;case c9$.cc.I:case c9$.cc.i:this.state=c9$.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_H:switch(Q){case c9$.cc.M:case c9$.cc.m:this.state=c9$.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_M:switch(Q){case c9$.cc.S:case c9$.cc.s:this.state=c9$.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_MS:switch(Q){case c9$.cc.G:case c9$.cc.g:this.state=c9$.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_MSG:switch(Q){case c9$.cc.SPACE:case c9$.cc.TAB:this.state=c9$.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_MSG_SPC:switch(Q){case c9$.cc.SPACE:case c9$.cc.TAB:continue;default:this.state=c9$.State.MSG_ARG,this.as=Z}break;case c9$.State.MSG_ARG:switch(Q){case c9$.cc.CR:this.drop=1;break;case c9$.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=c9$.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;case c9$.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let X=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:c9$.Kind.MSG,msg:this.ma,data:X}),this.argBuf=void 0,this.msgBuf=void 0,this.state=c9$.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:c9$.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=c9$.State.MSG_END;break;case c9$.State.MSG_END:switch(Q){case c9$.cc.NL:this.drop=0,this.as=Z+1,this.state=c9$.State.OP_START;break;default:continue}break;case c9$.State.OP_PLUS:switch(Q){case c9$.cc.O:case c9$.cc.o:this.state=c9$.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_PLUS_O:switch(Q){case c9$.cc.K:case c9$.cc.k:this.state=c9$.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_PLUS_OK:switch(Q){case c9$.cc.NL:this.dispatcher.push({kind:c9$.Kind.OK}),this.drop=0,this.state=c9$.State.OP_START;break}break;case c9$.State.OP_MINUS:switch(Q){case c9$.cc.E:case c9$.cc.e:this.state=c9$.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_MINUS_E:switch(Q){case c9$.cc.R:case c9$.cc.r:this.state=c9$.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_MINUS_ER:switch(Q){case c9$.cc.R:case c9$.cc.r:this.state=c9$.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_MINUS_ERR:switch(Q){case c9$.cc.SPACE:case c9$.cc.TAB:this.state=c9$.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_MINUS_ERR_SPC:switch(Q){case c9$.cc.SPACE:case c9$.cc.TAB:continue;default:this.state=c9$.State.MINUS_ERR_ARG,this.as=Z}break;case c9$.State.MINUS_ERR_ARG:switch(Q){case c9$.cc.CR:this.drop=1;break;case c9$.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:c9$.Kind.ERR,data:X}),this.drop=0,this.as=Z+1,this.state=c9$.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(Q))}break;case c9$.State.OP_P:switch(Q){case c9$.cc.I:case c9$.cc.i:this.state=c9$.State.OP_PI;break;case c9$.cc.O:case c9$.cc.o:this.state=c9$.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_PO:switch(Q){case c9$.cc.N:case c9$.cc.n:this.state=c9$.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_PON:switch(Q){case c9$.cc.G:case c9$.cc.g:this.state=c9$.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_PONG:switch(Q){case c9$.cc.NL:this.dispatcher.push({kind:c9$.Kind.PONG}),this.drop=0,this.state=c9$.State.OP_START;break}break;case c9$.State.OP_PI:switch(Q){case c9$.cc.N:case c9$.cc.n:this.state=c9$.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_PIN:switch(Q){case c9$.cc.G:case c9$.cc.g:this.state=c9$.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_PING:switch(Q){case c9$.cc.NL:this.dispatcher.push({kind:c9$.Kind.PING}),this.drop=0,this.state=c9$.State.OP_START;break}break;case c9$.State.OP_I:switch(Q){case c9$.cc.N:case c9$.cc.n:this.state=c9$.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_IN:switch(Q){case c9$.cc.F:case c9$.cc.f:this.state=c9$.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_INF:switch(Q){case c9$.cc.O:case c9$.cc.o:this.state=c9$.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_INFO:switch(Q){case c9$.cc.SPACE:case c9$.cc.TAB:this.state=c9$.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case c9$.State.OP_INFO_SPC:switch(Q){case c9$.cc.SPACE:case c9$.cc.TAB:continue;default:this.state=c9$.State.INFO_ARG,this.as=Z}break;case c9$.State.INFO_ARG:switch(Q){case c9$.cc.CR:this.drop=1;break;case c9$.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:c9$.Kind.INFO,data:X}),this.drop=0,this.as=Z+1,this.state=c9$.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;default:throw this.fail($.subarray(Z))}}if((this.state===c9$.State.MSG_ARG||this.state===c9$.State.MINUS_ERR_ARG||this.state===c9$.State.INFO_ARG)&&!this.argBuf)this.argBuf=new fe0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===c9$.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new fe0.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 fe0.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 c9$.cc.SPACE:case c9$.cc.TAB:case c9$.cc.CR:case c9$.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],Gu);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],Gu);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}: ${be0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case c9$.cc.SPACE:case c9$.cc.TAB:case c9$.cc.CR:case c9$.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],Gu),this.ma.size=this.protoParseInt(Z[3],Gu);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],Gu),this.ma.size=this.protoParseInt(Z[4],Gu);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]<u9$||$[X]>R34)return-1;Q=Q*10+($[X]-u9$)}return Z!==void 0&&Q>Z?-1:Q}}c9$.Parser=l9$;c9$.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};c9$.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 iJ0=v((d9$)=>{Object.defineProperty(d9$,"__esModule",{value:!0});d9$.MsgHdrsImpl=void 0;d9$.canonicalMIMEHeaderKey=he0;d9$.headers=I34;var m9$=sJ(),XW=tL(),dJ0=eJ();function he0($){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 dJ0.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 I34($=0,Z=""){if($===0&&Z!=="")throw dJ0.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw dJ0.InvalidArgumentError.format("description","is required");return new Ku($,Z)}var ge0="NATS/1.0";class Ku{_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 Ku,X=m9$.TD.decode($).split(`\r
|
|
2081
2081
|
`),Y=X[0];if(Y!==ge0){let J=Y.replace(ge0,"").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 $=ge0;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
|
@@ -3387,7 +3387,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
3387
3387
|
${J.join(`
|
|
3388
3388
|
`)}`:X}function JI6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3389
3389
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var Je$=200,oM6=12,sM6,eM6=300,EI0=3;var qW1=O(()=>{pZ();m$();jI0();sM6={aheadBy:0,behindBy:0,files:[]}});function WI6($){if(!$||$.includes(".."))return!1;return GI6.test($)}function We$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!WI6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function Ke$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var GI6;var He$=O(()=>{GI6=/^[\w./@-]+$/});function H$0($,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 Ue$($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new pw(iZ);let J=await SL($.storage,X,Y);if(J&&await qN($.storage,J)){let F=await aH($,J,{forceRefresh:!0}).catch((U)=>{throw new pw(U instanceof Error?U.message:iZ)});await Fe$($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new pw("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await iu({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:iZ;throw new pw(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await eH(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=jG$(F instanceof Error?F.message:String(F));throw U?new pw(N):F});await Fe$($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function Fe$($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=xd($),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 $w(K,KI6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var KI6=10485760,pw;var MW1=O(()=>{OG();HI0();va();z30();Ss();pZ();pw=class pw extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function FI6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!HI6.test(Z))throw Error(`Invalid branch name: ${$}`)}function nb($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(NI6)])}async function DI6($,Z){let Q=$.var.studioContext,Y=WF(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=Df(G?.metadata?.runtime);if(W)return W;let K=JP0(Z.virtualMcpMetadata),H=K==="cms"?await JW1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)fa(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 OI6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await iY($.var.studioContext)}catch{return null}}function tb($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function ld($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=H$0(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=i(Y);return du(Y,J.id,X)}function IW1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=pJ$(Z);if(Y!==void 0)return $.json({error:Q},429,{...R5,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof z6)return $.json({error:Q},409,R5);let X=EG(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,R5)}return $.json({error:Q},502,R5)}async function De$($,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 Oe$($){try{let Z=await ld($),Q=await zI0(Z,$.get("vmClaim").branch);return $.json(Q,200,R5)}catch(Z){return IW1($,Z)}}function F$0($,Z){let Y=(TI0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return TI0.set($,X),X.finally(()=>{if(TI0.get($)===X)TI0.delete($)}),Y}async function V7($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,R5);let Y=Q?.runner??tb($);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",...R5}})}}let D=await B.text(),L=Q?.redactRepoDir?LI6(D):D,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...R5}})};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 LI6($){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 RI0($,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 wI6($){return Le$.includes($)}var HI6,Ne$=524288,UI6=65536,NI6=1e4,Be$=2000,BI6,TI0,R5,Le$,we$=()=>{let $=new e0;$.use("/:virtualMcpId/:branch/*",BI6),$.post("/:virtualMcpId/:branch/write",(Q)=>V7(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:nb(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>V7(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:nb(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>V7(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:nb(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>V7(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:nb(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>V7(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:nb(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>V7(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:nb(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>V7(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:nb(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 V7(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 V7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>V7(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>V7(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!wI6(Y))return Q.json({error:`step must be one of: ${Le$.join(", ")}`},400);let X=Q.get("vmClaim"),J=await JW1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await OI6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,R5);if(Y==="start"){let G=i(Q.var.studioContext),W=Tl(X.virtualMcpMetadata);try{await ZP0({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 V7(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 AB(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 La$(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 Oe$(Q);return Z(Q)});let Z=(Q)=>V7(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(Be$)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Oe$(Q);return V7(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(Be$)])})}),$.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 ld(Q),G=await PI0(J,Y.branch,X.base);return Q.json(G,200,R5)}catch(X){return IW1(Q,X)}return V7(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,R5);let Y=tb(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return F$0(X,async()=>{try{await GW1(W,Y,X);let K=H$0(J,G);if(K)await Ue$(W,Y,X,K)}catch(K){if(K instanceof pw)return Q.json({error:K.message},403,R5);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,R5)}return V7(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 F$0(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,R5);try{let G=await ld(Q);return await Ge$(G,Y.branch,J),Q.json({ok:!0},200,R5)}catch(G){let W=EG(G)===409||G instanceof z6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,R5)}});return F$0(Y.claimName,()=>V7(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 F$0(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await ld(Q),H=W.base??await K.getDefaultBranch();return await AI0(K,Y.branch,H),Q.json({ok:!0},200,R5)}catch(W){return IW1(Q,W)}});let X=tb(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return F$0(J,async()=>{try{await GW1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,R5)}return V7(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",l5({maxSize:Ne$,onError:(Q)=>Q.json({error:"Payload too large"},413,R5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=tb(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]=HW1(F)&&N?[F,U]:X?await Promise.all([RI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),RI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await ld(Q);return Promise.all([zI0(w,Y.branch),PI0(w,Y.branch)])})();await kW(K,i(K).id,"suggesting a commit message");let L=await Pa$(K,B,D);return Q.json(L,200,R5)}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,R5);return Q.json({error:F},502,R5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",l5({maxSize:Ne$,onError:(Q)=>Q.json({error:"Payload too large"},413,R5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=tb(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]=HW1(F)&&N?[F,U]:X?await Promise.all([RI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),RI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await ld(Q);return Promise.all([zI0(w,Y.branch),PI0(w,Y.branch)])})();await kW(K,i(K).id,"judging whether a change needs review");let L=await Ta$(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,R5)}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,R5);return Q.json({error:F},502,R5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=tb(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 De$(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",l5({maxSize:UI6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=tb(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=We$(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=Ke$(J,W.resolveType);return De$(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var je$=O(()=>{y$();_K();bd();XW1();ka();Ba$();RG();Rl();Da$();WK();jH();Oa$();wa$();n$1();Ca();NW1();Ra$();pZ();c6();qW1();He$();MW1();HI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;BI6=KI0(async($,Z)=>{let Q=$.var.studioContext;try{p(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{FI6(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=Za({orgId:X.id,virtualMcpId:J,branch:G}),H=await q11(Q,G),F=M11(H,Y),U=Na$({userId:F,projectRef:K}),N=W.metadata??null,B=await DI6($,{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 iY(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()});TI0=new Map;R5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Le$=["clone","install","start"]});function Ee$($,Z,Q){let Y=VW1.get($);if(!Y)Y={pending:null,running:!1},VW1.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)EI6($,Y);return J}async function EI6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await zI6(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)VW1.delete($)}}async function zI6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await ud(Z,Q),W=await Z.listDecofileEntries(G,Y),K=AW1(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=TW1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3390
|
-
`;await Ze$(Z.repo,L);let w=D[0]??`${wI0(Y)}/${OW1(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 TW1(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 Qe$(Z,F.values(),X),{decofile:B,skipped:D}=X$0(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:nW(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:PI6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof z6)||J>=jI6-1)throw N;await P$(C7(2000,200,J,2,0.5))}}}function PI6($){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 a01(Y,$.deps.coAuthor)}var jI6=3,VW1;var ze$=O(()=>{nE0();UI0();X6();m$();pZ();jI0();VW1=new Map});import{createHmac as Pe$,randomBytes as AI6,timingSafeEqual as TI6}from"crypto";function Ae$(){if(qI0)return qI0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return qI0=$?Buffer.from($):AI6(32),qI0}function kW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+RI6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Pe$("sha256",Ae$()).update(Y).digest("base64url");return`${Y}.${X}`}function Te$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Pe$("sha256",Ae$()).update(Y).digest("base64url"));if(X.length!==J.length||!TI6(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 RI6=21600000,qI0=null;var Re$=O(()=>{t1()});import{z as cd}from"zod";function MI6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&qI6.test($)}function ke$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function U$0($){let Z=$.get("decofileScope");return du($.var.studioContext,Z.organizationId,Z.githubRepo)}function N$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof z6)return $.json({error:Q},409);let Y=EG(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 Se$(){let $=new e0;return $.use("/:virtualMcpId/:branch",Ve$),$.use("/:virtualMcpId/:branch/*",Ve$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U$0(Z),X=await Ye$(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=kW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(ke$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return N$0(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 U$0(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 N$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",VI6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=kI6.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{FI0(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(DW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await U$0(Z),W=await Ee$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:xd(Y)},J),K=kW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:ke$(Z)})}catch(G){return N$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U$0(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(EG(W)!==409)throw W;await AI0(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(EG(G)===409)return Z.json({error:"merge-conflict"},409);if(EG(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 N$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U$0(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(EG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return N$0(Z,Y)}}),$}var qI6,qe$=500,Me$=1048576,Ie$=1024,II6=8388608,VI6,kI6,Ve$;var Ce$=O(()=>{t$1();UI0();y$();_K();XW1();HI0();MW1();pZ();ze$();Re$();qW1();jI0();jH();qI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;VI6=l5({maxSize:II6,onError:($)=>$.json({error:"Payload too large"},413)}),kI6=cd.object({set:cd.record(cd.string(),cd.unknown()).optional(),delete:cd.array(cd.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)<=qe$,{message:`Patch cannot touch more than ${qe$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Me$),{message:`Each block must be at most ${Me$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Ie$),{message:`Each block key must be at most ${Ie$} characters`}),Ve$=KI0(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(!MI6(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||!Te$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await s3(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(!XP0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=H$0(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 _e$=($)=>{let Z=new e0;if(Z.use("*",Bd),Z.use("*",Wt$),Z.route("/",jM0()),Z.route("/",dt$()),Z.route("/",kt$()),Z.route("/",es$()),Z.route("/",ms$()),Z.route("/",rs$()),Z.route("/",ps$()),Z.route("/",JI0()),Z.route("/tools",Ga$()),Z.route("/",Ya$()),Z.route("/",As$({kvStorage:$.kvStorage})),Z.route("/",zs$()),Z.route("/fs",bs$({getConnection:$.getNatsConnection})),Z.route("/sandbox",we$()),Z.route("/decofile",Se$()),Z.route("/",ls$()),Z.route("/",ys$()),Z.route("/deco-sites",zM0()),Z.route("/hosting",jt$()),Z.route("/monitor",qt$()),Z.route("/sso",BM0()),Z.route("/",GI0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Bt$()),$.mountDevAssets)Z.route("/dev-assets",RM0({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("/",Di$()),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",hs$()),Z.route("/mcp",W20()),Z.route("/mcp/self",QI0()),Z.route("/mcp",F20()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var ve$=O(()=>{y$();Kt$();QM0();Dt$();q31();Et$();Mt$();qM0();bb();z31();S31();Ps$();Ts$();xs$();gs$();ce();D31();U20();oG1();us$();cs$();is$();ns$();aG1();$a$();Xa$();eG1();Wa$();$W1();K20();je$();Ce$()});function SI6($){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 CI6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},fe$=()=>{let $=new e0;return $.use("*",CI6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await GJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:SI6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var be$=O(()=>{y$();t1();Yq0()});import{z as V1}from"zod";function nF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function lI6($){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 cI6($,Z,Q){try{return JSON.parse($)}catch{throw new ge$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function dI6($){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:cI6(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 mI6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?SJ(Q.function.parameters):SJ({type:"object",properties:{}});return[Q.function.name,D$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function iI6($){if(!$)return;return{openai:{response_format:$}}}function pI6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function xe$($,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 _I6=256,vI6,fI6,bI6,xI6,yI6,gI6,hI6,uI6,ge$,he$,ue$;var le$=O(()=>{b4();y$();bd();EK();vI6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),fI6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),bI6=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(fI6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),xI6=V1.object({type:V1.literal("text")}),yI6=V1.object({type:V1.literal("json_object")}),gI6=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()})}),hI6=V1.union([xI6,yI6,gI6]),uI6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(bI6),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(vI6).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:hI6.optional(),user:V1.string().optional()});ge$=class ge$ extends Error{constructor($){super($);this.name="MessageConversionError"}};he$=new e0;he$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(nF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(nF("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(nF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=uI6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(nF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=lI6(J.model);if(!G)return $.json(nF("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)=>QE(E.providerId));if(!j)return $.json(nF("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(nF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=dI6(J.messages),N=J.tools?mI6(J.tools):void 0,B=iI6(J.response_format),D=pI6(),L=Math.floor(Date.now()/1000);if(J.stream)return AB($,async(w)=>{let j=xe$(F,U,N,J,B,$.req.raw.signal);try{let E=sL(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>=_I6)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=xe$(F,U,N,J,B,$.req.raw.signal),j=await oL(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(nF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(nF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(nF(X.message,"server_error"),500)}});ue$=he$});function nI6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function ce$(){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(!mZ(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||r5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(SJ0(U)!==J)continue;if(!nI6(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 de$=O(()=>{y$();LG()});var ie$;var me$=O(()=>{ie$={name:"decocms",version:"4.373.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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 rI6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??oI6}}var pe$,oI6="https://ph.studio.decocms.com",ne$;var te$=O(()=>{y$();Xr();bf();k5();t1();$31();me$();pe$=new e0;pe$.get("/",($)=>{let Z={version:ie$.version,theme:M5$(),...iW().logo&&{logo:iW().logo},...nN()&&{internalUrl:Gh1()},...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:Kn$(),posthog:rI6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:VB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ne$=pe$});function dd($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function SW1($){return(dd($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function re$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(dd($))}&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 se$($){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 ob,sI6,aI6,eI6,$V6,ae$;var ee$=O(()=>{ob=m0.enum(["good","bad","neutral"]),sI6=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:ob.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 $})),aI6=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(sI6)),eI6={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()},$V6=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:ob.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:ob.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:ob.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:ob.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(aI6).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:ob.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:ob.optional()})).min(1)})]),ae$=m0.object({...eI6,template:$V6})});function MI0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=ae$.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 CW1=O(()=>{ee$()});import{join as $08}from"path";async function QV6($){try{let Z=await fetch(`${bH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(ZV6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=MI0(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()||SW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function E3($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function YV6($,Z){let Q=dd($),Y=Z?.brand?.trim()||SW1(Q),X=re$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=se$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${E3(W)}</title>`,`<meta name="description" content="${E3(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="${E3(W)}" />`,`<meta property="og:description" content="${E3(K)}" />`,`<meta property="og:url" content="${E3(G)}" />`,`<meta property="og:image" content="${E3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${E3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${E3(W)}" />`,`<meta name="twitter:description" content="${E3(K)}" />`,`<meta name="twitter:image" content="${E3(H)}" />`,`<meta name="twitter:image:alt" content="${E3(F)}" />`,`<link rel="canonical" href="${E3(G)}" />`,`<link rel="icon" href="${E3(X)}" sizes="any" />`].join(`
|
|
3390
|
+
`;await Ze$(Z.repo,L);let w=D[0]??`${wI0(Y)}/${OW1(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 TW1(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 Qe$(Z,F.values(),X),{decofile:B,skipped:D}=X$0(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:nW(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:PI6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof z6)||J>=jI6-1)throw N;await P$(C7(2000,200,J,2,0.5))}}}function PI6($){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 a01(Y,$.deps.coAuthor)}var jI6=3,VW1;var ze$=O(()=>{nE0();UI0();X6();m$();pZ();jI0();VW1=new Map});import{createHmac as Pe$,randomBytes as AI6,timingSafeEqual as TI6}from"crypto";function Ae$(){if(qI0)return qI0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return qI0=$?Buffer.from($):AI6(32),qI0}function kW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+RI6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Pe$("sha256",Ae$()).update(Y).digest("base64url");return`${Y}.${X}`}function Te$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Pe$("sha256",Ae$()).update(Y).digest("base64url"));if(X.length!==J.length||!TI6(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 RI6=21600000,qI0=null;var Re$=O(()=>{t1()});import{z as cd}from"zod";function MI6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&qI6.test($)}function ke$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function U$0($){let Z=$.get("decofileScope");return du($.var.studioContext,Z.organizationId,Z.githubRepo)}function N$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof z6)return $.json({error:Q},409);let Y=EG(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 Se$(){let $=new e0;return $.use("/:virtualMcpId/:branch",Ve$),$.use("/:virtualMcpId/:branch/*",Ve$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U$0(Z),X=await Ye$(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=kW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(ke$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return N$0(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 U$0(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 N$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",VI6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=kI6.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{FI0(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(DW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await U$0(Z),W=await Ee$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:xd(Y)},J),K=kW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:ke$(Z)})}catch(G){return N$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U$0(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(EG(W)!==409)throw W;await AI0(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(EG(G)===409)return Z.json({error:"merge-conflict"},409);if(EG(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 N$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await U$0(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(EG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return N$0(Z,Y)}}),$}var qI6,qe$=500,Me$=1048576,Ie$=1024,II6=8388608,VI6,kI6,Ve$;var Ce$=O(()=>{t$1();UI0();y$();_K();XW1();HI0();MW1();pZ();ze$();Re$();qW1();jI0();jH();qI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;VI6=l5({maxSize:II6,onError:($)=>$.json({error:"Payload too large"},413)}),kI6=cd.object({set:cd.record(cd.string(),cd.unknown()).optional(),delete:cd.array(cd.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)<=qe$,{message:`Patch cannot touch more than ${qe$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Me$),{message:`Each block must be at most ${Me$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Ie$),{message:`Each block key must be at most ${Ie$} characters`}),Ve$=KI0(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(!MI6(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||!Te$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await s3(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(!XP0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=H$0(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 _e$=($)=>{let Z=new e0;if(Z.use("*",Bd),Z.use("*",Wt$),Z.route("/",jM0()),Z.route("/",dt$()),Z.route("/",kt$()),Z.route("/",es$()),Z.route("/",ms$()),Z.route("/",rs$()),Z.route("/",ps$()),Z.route("/",JI0()),Z.route("/tools",Ga$()),Z.route("/",Ya$()),Z.route("/",As$({kvStorage:$.kvStorage})),Z.route("/",zs$()),Z.route("/fs",bs$({getConnection:$.getNatsConnection})),Z.route("/sandbox",we$()),Z.route("/decofile",Se$()),Z.route("/",ls$()),Z.route("/",ys$()),Z.route("/deco-sites",zM0()),Z.route("/hosting",jt$()),Z.route("/monitor",qt$()),Z.route("/sso",BM0()),Z.route("/",GI0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Bt$()),$.mountDevAssets)Z.route("/dev-assets",RM0({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("/",Di$()),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",hs$()),Z.route("/mcp",W20()),Z.route("/mcp/self",QI0()),Z.route("/mcp",F20()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var ve$=O(()=>{y$();Kt$();QM0();Dt$();q31();Et$();Mt$();qM0();bb();z31();S31();Ps$();Ts$();xs$();gs$();ce();D31();U20();oG1();us$();cs$();is$();ns$();aG1();$a$();Xa$();eG1();Wa$();$W1();K20();je$();Ce$()});function SI6($){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 CI6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},fe$=()=>{let $=new e0;return $.use("*",CI6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await GJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:SI6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var be$=O(()=>{y$();t1();Yq0()});import{z as V1}from"zod";function nF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function lI6($){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 cI6($,Z,Q){try{return JSON.parse($)}catch{throw new ge$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function dI6($){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:cI6(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 mI6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?SJ(Q.function.parameters):SJ({type:"object",properties:{}});return[Q.function.name,D$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function iI6($){if(!$)return;return{openai:{response_format:$}}}function pI6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function xe$($,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 _I6=256,vI6,fI6,bI6,xI6,yI6,gI6,hI6,uI6,ge$,he$,ue$;var le$=O(()=>{b4();y$();bd();EK();vI6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),fI6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),bI6=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(fI6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),xI6=V1.object({type:V1.literal("text")}),yI6=V1.object({type:V1.literal("json_object")}),gI6=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()})}),hI6=V1.union([xI6,yI6,gI6]),uI6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(bI6),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(vI6).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:hI6.optional(),user:V1.string().optional()});ge$=class ge$ extends Error{constructor($){super($);this.name="MessageConversionError"}};he$=new e0;he$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(nF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(nF("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(nF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=uI6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(nF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=lI6(J.model);if(!G)return $.json(nF("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)=>QE(E.providerId));if(!j)return $.json(nF("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(nF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=dI6(J.messages),N=J.tools?mI6(J.tools):void 0,B=iI6(J.response_format),D=pI6(),L=Math.floor(Date.now()/1000);if(J.stream)return AB($,async(w)=>{let j=xe$(F,U,N,J,B,$.req.raw.signal);try{let E=sL(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>=_I6)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=xe$(F,U,N,J,B,$.req.raw.signal),j=await oL(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(nF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(nF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(nF(X.message,"server_error"),500)}});ue$=he$});function nI6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function ce$(){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(!mZ(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||r5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(SJ0(U)!==J)continue;if(!nI6(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 de$=O(()=>{y$();LG()});var ie$;var me$=O(()=>{ie$={name:"decocms",version:"4.373.8",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 rI6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??oI6}}var pe$,oI6="https://ph.studio.decocms.com",ne$;var te$=O(()=>{y$();Xr();bf();k5();t1();$31();me$();pe$=new e0;pe$.get("/",($)=>{let Z={version:ie$.version,theme:M5$(),...iW().logo&&{logo:iW().logo},...nN()&&{internalUrl:Gh1()},...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:Kn$(),posthog:rI6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:VB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ne$=pe$});function dd($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function SW1($){return(dd($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function re$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(dd($))}&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 se$($){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 ob,sI6,aI6,eI6,$V6,ae$;var ee$=O(()=>{ob=m0.enum(["good","bad","neutral"]),sI6=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:ob.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 $})),aI6=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(sI6)),eI6={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()},$V6=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:ob.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:ob.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:ob.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:ob.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(aI6).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:ob.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:ob.optional()})).min(1)})]),ae$=m0.object({...eI6,template:$V6})});function MI0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=ae$.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 CW1=O(()=>{ee$()});import{join as $08}from"path";async function QV6($){try{let Z=await fetch(`${bH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(ZV6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=MI0(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()||SW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function E3($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function YV6($,Z){let Q=dd($),Y=Z?.brand?.trim()||SW1(Q),X=re$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=se$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${E3(W)}</title>`,`<meta name="description" content="${E3(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="${E3(W)}" />`,`<meta property="og:description" content="${E3(K)}" />`,`<meta property="og:url" content="${E3(G)}" />`,`<meta property="og:image" content="${E3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${E3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${E3(W)}" />`,`<meta name="twitter:description" content="${E3(K)}" />`,`<meta name="twitter:image" content="${E3(H)}" />`,`<meta name="twitter:image:alt" content="${E3(F)}" />`,`<link rel="canonical" href="${E3(G)}" />`,`<link rel="icon" href="${E3(X)}" sizes="any" />`].join(`
|
|
3391
3391
|
`)}function XV6($,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}
|
|
3392
3392
|
</head>`)}function Z08($){let Z=new e0;return Z.get("/:domain/og.png",async(Q)=>{let Y=dd(Q.req.param("domain")),X=async()=>{let J=$?Bun.file($08($,"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(`${bH({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(JV6)}),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=$?$08($,"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 QV6(dd(Y)),K=YV6(Y,W);return Q.html(XV6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var ZV6=2500,JV6=1e4;var Q08=O(()=>{y$();CW1();dz();t1()});function B$0($,Z){return fetch(`${bH({})}${$}`,Z)}async function GV6($,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 B$0(`/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}=MI0(G);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:G.scanned_at,drops:K}}var WV6,RB,Y08=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},X08;var J08=O(()=>{y$();oJ();dz();CW1();WV6=new Set(["complete","errored","terminated","unknown"]),RB=new e0;RB.use("*",async($,Z)=>{let Q=await W8.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});RB.use("/link-token/*",Y08);RB.use("/suggest",Y08);RB.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 GV6(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)}});RB.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 B$0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${cz({})}`},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)}});RB.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await B$0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${cz({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:WV6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});RB.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await B$0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});RB.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await B$0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});X08=RB});var KV6=1048576,_W1;var G08=O(()=>{y$();_K();t1();hJ1();_W1=new e0;_W1.post("/webhook",l5({maxSize:KV6,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(!zp$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=Pp$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await Ap$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as HV6}from"crypto";function NV6($,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 HV6(Buffer.from(X),Buffer.from(Y))}function BV6($,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 W08($){let Z=new e0;return Z.post("/webhook",l5({maxSize:FV6,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(!NV6(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"&&!UV6.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 A11())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=BV6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await DV6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function DV6($,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 hA$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var FV6=5242880,UV6;var K08=O(()=>{y$();_K();WK();rZ();UV6=new Set(["check_suite","issue_comment"])});function H08($){let Z=new NB($.db,new PY($.encryptionKey)),Q=new e0;return Q.get("/attachments/:token",async(Y)=>{let X=GP$(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 K3(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 F08=O(()=>{y$();OD();z81();Af()});function U08($){let Z=new NB($.db,new PY($.encryptionKey));async function Q(X,J){let G=rh$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await kG($.db,W.organizationId);if(!K)return;if(await Jq0(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",l5({maxSize:OV6}),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 OV6=1048576;var N08=O(()=>{y$();_K();OD();Gq0();kf()});import{DBOS as II0,SchedulerMode as LV6}from"@dbos-inc/dbos-sdk";function D08($){fW1=$}function O08(){if(!fW1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return fW1}function L08(){let $=O08();return new NB($.db,new PY($.encryptionKey))}async function EV6($,Z){try{let Q=await L08().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await kG(O08().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 K3(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${B08}m"`,K=0,H;for(let F=0;F<jV6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=sh$(N,N.changelog?.histories??[],Z);for(let D of B)if(await Jq0(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 zV6($,Z){let Q=new Date($.getTime()-B08*60000),Y=await II0.runStep(()=>L08().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>II0.runStep(()=>EV6(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 w08(){if(vW1)return;vW1=II0.registerWorkflow(zV6,{name:"jiraTriggerSweepWorkflow"}),II0.registerScheduled(vW1,{name:"jiraTriggerSweepWorkflow",crontab:wV6,mode:LV6.ExactlyOncePerIntervalWhenActive})}var wV6="7-59/10 * * * *",B08=15,jV6=5,fW1=null,vW1=null;var j08=O(()=>{OD();kf();Af();Gq0()});function E08($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var z08,PV6,AV6,P08;var A08=O(()=>{y$();mW();ll();rz();z08=new e0,PV6=["range","if-none-match","if-modified-since"],AV6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];z08.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Nd($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new X$(401,{message:"Authentication required"})}if(!Q)throw new X$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new X$(400,{message:"Missing file key"});let X=await Pe(Y,Z);if(!X)throw new X$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&_X()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new X$(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 E08(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of PV6){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 X$(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 X$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of AV6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),E08(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});P08=z08});var D$0=_((rb)=>{var TV6=rb&&rb.__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]}),RV6=rb&&rb.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))TV6(Z,$,Q)};Object.defineProperty(rb,"__esModule",{value:!0});RV6(OJ(),rb)});var q08=_((T08)=>{Object.defineProperty(T08,"__esModule",{value:!0});T08.version=void 0;T08.version="3.4.0"});var V08=_((tF)=>{var qV6=tF&&tF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(tF,"__esModule",{value:!0});tF.NodeTransport=tF.VERSION=void 0;tF.nodeResolveHost=CV6;var O5=D$0(),MV6=A0("net"),bW1=A0("tls"),IV6=A0("path"),M08=A0("fs"),VV6=qV6(A0("dns")),kV6=q08();tF.VERSION=kV6.version;var SV6="nats.js";class I08{socket;version;lang;yields=[];signal=(0,O5.deferred)();closedNotification=(0,O5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=SV6,this.version=tF.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,O5.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 O5.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 O5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new O5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,O5.deferred)(),Q,Y=(0,MV6.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,O5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=O5.DataBuffer.concat(...this.yields),X=(0,O5.extractProtocolMessage)(Y);if(X!=="")try{let J=O5.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,O5.deferred)();try{if($=(0,IV6.resolve)($),!(0,M08.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,M08.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,O5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new O5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,O5.deferred)();try{let X=(0,bW1.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 O5.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,O5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new O5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,O5.deferred)();try{let Y=(0,bW1.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 O5.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,O5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,O5.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 bW1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,O5.render)($)}`);let Z=(0,O5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,O5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,O5.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}}tF.NodeTransport=I08;function CV6($){let Z=(0,O5.deferred)();return VV6.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 v08=_((_08)=>{Object.defineProperty(_08,"__esModule",{value:!0});_08.connect=_V6;var k08=V08(),S08=D$0(),C08=D$0();function _V6($={}){if((0,C08.hasWsProtocol)($))return Promise.reject(C08.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,S08.setTransportFactory)({factory:()=>{return new k08.NodeTransport},dnsResolveFn:k08.nodeResolveHost}),S08.NatsConnectionImpl.connect($)}});var f08=_((qB)=>{var fV6=qB&&qB.__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]}),bV6=qB&&qB.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))fV6(Z,$,Q)};Object.defineProperty(qB,"__esModule",{value:!0});qB.connect=void 0;var xV6=v08();Object.defineProperty(qB,"connect",{enumerable:!0,get:function(){return xV6.connect}});bV6(D$0(),qB)});function g08($){let Z=$?.connectFn??uV6,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:hV6,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=C7(gV6,yV6,D-1,2,0.5);await P$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?b08.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 uV6($){return x08.connect($)}var b08,x08,y08,yV6=100,gV6=3000,hV6=3000;var h08=O(()=>{m$();b08=V(Dm(),1),x08=V(f08(),1),y08=V(XU(),1)});function xW1($,Z){return`${$}.${Z}`}class yW1{cache;constructor($){this.cache=Zd({ttlMs:$?.ttlMs??lV6,maxSize:$?.maxSize??cV6})}async get($,Z){return this.cache.get(xW1($,Z))??null}async set($,Z,Q){this.cache.set(xW1($,Z),Q)}async invalidate($,Z){this.cache.delete(xW1($,Z))}teardown(){this.cache.clear()}}var lV6=600000,cV6=5000;var u08=()=>{};function VI0($,Z){return`${$}:${Z}`}function gW1($){let Z=Zd({ttlMs:$?.ttlMs??dV6,maxSize:$?.maxSize??mV6}),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(l08,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(VI0(K,H))},set(K,H,F){Z.set(VI0(K,H),F)},invalidate(K,H){Z.delete(VI0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(l08),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(VI0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var l08="studio.ai-provider-keys.invalidate",dV6=30000,mV6=5000;var c08=()=>{};class hW1{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 d08=($)=>{let Z;return()=>Z??=$()},uW1,lW1;var m08=O(()=>{W6();uW1=d08(()=>Q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),lW1=d08(()=>Q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function sV6($=n08){return{name:PF,subjects:[`${j61}.>`],storage:bK.StorageType.File,max_age:nV6,max_bytes:oV6,max_msgs_per_subject:rV6,discard:bK.DiscardPolicy.Old,retention:bK.RetentionPolicy.Limits,duplicate_window:tV6,num_replicas:$}}class t08{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 i08($){let Z=p08.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function Zk6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,pV6().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 Qk6($,Z){return $.info?.cluster?Z:1}function Yk6($){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 cW1{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=sV6(X);try{await Y.streams.info(PF),await Y.streams.update(PF,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(PF,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(PF),await Y.streams.add(J);else throw G}},Q=await A8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await bK.jetstreamManager($),X=Qk6($,n08);try{await Z(Y,X)}catch(J){if(X<=1||!Yk6(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:sl});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=Zk6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=PR$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=z61(H,{runId:Z}),N=performance.now()-F;uW1().record(N),lW1().add(1,{"org.id":Y??"unknown"}),$k6?.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?i08(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(),eV6)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 A8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:i08(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:sl}),!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=z61(Z,{runId:$,dedup:Q});uW1().record(performance.now()-X),lW1().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=zR$({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"?bK.DeliverPolicy.New:bK.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=Uw($),W;try{W=await A8(async()=>{return(await Y.consumers.get(PF,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:sl})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=fA0({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(SA0()).pipeThrough(CA0()).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(PF,{filter:Uw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var bK,p08,iV6=($)=>{let Z;return()=>Z??=$()},pV6,nV6=86400000000000,tV6=120000000000,oV6=4294967296,n08,rV6=500000,aV6,eV6,$k6;var o08=O(()=>{m$();P61();bA0();_A0();W6();m08();bK=V(XU(),1),p08=V(Dm(),1),pV6=iV6(()=>Q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),n08=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);aV6=process.env.STREAM_ENCODE_TRACE==="1",eV6=process.env.DECOPILOT_STREAM_TRACE==="1";$k6=aV6?new t08:null});function kI0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,$H(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 r08=O(()=>{q8()});class dW1{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 Xk6($,Z){let Q=$.startsWith("thread:")?KK($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function s08($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await KF($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await Kl($,{threadId:X,runBranch:G?.branch}),K=Xk6(W,await Qz0($,X)),H=await Ms($,Q,ra0(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 SG(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 a08=O(()=>{pZ();RG();rZ()});async function e08($,Z,Q){let Y=Z.organizationId;if(!rX(Z))return!1;if(!Sf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=oH(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await y6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),r$(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var $18=O(()=>{A4();eQ();bl();OK();$9()});function Uk6($){return $ instanceof yY}function Nk6($,Z){return Z-$>=Hk6}class mW1{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??Jk6;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??Wk6,Q=this.options.itemIntervalMs??Gk6,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()-D81),I41);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()-Fk6));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 R41(this.taskBoard,X,Y),await q41(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!==o$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await LK(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),Uk6(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()+Kk6)).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(()=>{}),r$(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(!Nk6(wN(Q,Z.reviewCycleStartedAt),Date.now()))return;await jF($,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(!rX(Y))return!1;let X=Y.assigneeId===o$,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 s08(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 yl(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 Uq$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!z41(W))return!1;return await nP0(G,Y,{previewMatchesHead:P41(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await Ww($,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 Jk6=60000,Gk6=300000,Wk6=50,Kk6=60000,Hk6=900000,Fk6=120000;var Z18=O(()=>{A4();K41();a08();EF();_e();OK();$18();$9();jG();V41();rZ();Je();xl()});import{readdir as Bk6,rm as SI0}from"fs/promises";import{join as CI0}from"path";async function _I0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Dk6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await sb($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await Q18($,X,Z);else if(!X.startsWith(".")){let J=CI0($,X),G=await sb(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await Q18(J,K,Z)}if((await sb(J)).length===0)await SI0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function Q18($,Z,Q){let Y=0,X=CI0($,Z),J=await sb(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=CI0(X,W),H=await sb(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=CI0(K,U);await SI0(B,{recursive:!0,force:!0}),Y++}}if((await sb(K)).length===0)await SI0(K,{recursive:!0,force:!0})}if((await sb(X)).length===0)await SI0(X,{recursive:!0,force:!0});return Y}async function sb($){try{return(await Bk6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var Dk6=30;var iW1=()=>{};import{DBOS as pW1,SchedulerMode as Ok6}from"@dbos-inc/dbos-sdk";async function wk6(){let $=[nG(),ab(),sF()],Z=0;for(let Q of $)try{Z+=await _I0(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 jk6($,Z){await pW1.runStep(()=>wk6(),{name:"monitoringRetention"})}function X18(){if(Y18)return;Y18=!0;let $=pW1.registerWorkflow(jk6,{name:"monitoringRetentionWorkflow"});pW1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Lk6,mode:Ok6.ExactlyOncePerIntervalWhenActive})}var Lk6="23 4 * * *",Y18=!1;var J18=O(()=>{R3();iW1()});function G18($){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 XQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await ZP($.db,Z,Y.role);return X.boundAuth=CJ1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new XE(Q,void 0,X.boundAuth,Y.role,"self"),Gw(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var W18=O(()=>{OW();mH()});function Ek6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function zk6(){return{services:Ek6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Ak6(){for(let $ of Pk6)$()}function K18($){let Z=[...nW1.logs,$];nW1={...nW1,logs:Z.length>500?Z.slice(-500):Z},Ak6()}function tW1(){return Tk6}var nW1,Pk6,Tk6=!1;var oW1=O(()=>{nW1=zk6(),Pk6=new Set});import{EventEmitter as Rk6}from"events";var rW1;var H18=O(()=>{oW1();rW1=new Rk6;rW1.on("request",($)=>{K18($)})});function F18(){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=md(N.params.name),D=N.params.arguments||{},L=Object.keys(D).map((j)=>md(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${q5.tool}${B}${q5.dim}(${w})${q5.reset}`}else if(N.method)J=`${q5.dim}${md(N.method)}${q5.reset}`}}catch{}}let W=md(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${q5.mcp}${md(F.slice(0,12))}\u2026${q5.reset}`}else if(X==="/mcp")W=`${q5.mcp}/mcp${q5.reset}`;else if(X==="/mcp/registry")W=`${q5.mcp}/mcp/registry${q5.reset}`;let K=Mk6(Y),H=G?"\u25C0":"\u2190";if(!tW1())console.log(`${q5.dim}${H}${q5.reset} ${K}${Y}${q5.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=qk6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";if(!tW1())console.log(`${q5.dim}${D}${q5.reset} ${K}${Y}${q5.reset} ${W}${J?` ${J}`:""} ${N}${U}${q5.reset} ${q5.duration}${B}${q5.reset}`);rW1.emit("request",{method:Y,path:md(X),status:U,duration:F,timestamp:new Date})}}}var q5,qk6=($)=>{if($>=500)return q5.serverError;if($>=400)return q5.clientError;if($>=300)return q5.redirect;return q5.ok},Mk6=($)=>{return q5[$]||q5.reset},md=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var U18=O(()=>{oW1();H18();q5={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 O18}from"crypto";import{mkdir as Ik6,readdir as Vk6,rm as N18,stat as L18}from"fs/promises";import{join as aW1,relative as kk6}from"path";import{z as V$}from"zod";function j18($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return aW1(Sk6,Z)}function E18($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function sW1($,Z){let Q=j18($),Y=E18(Z);return aW1(Q,Y)}function Ck6($,Z,Q,Y){let X=O0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return O18("sha256",X).update(J).digest("hex")}function D18($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=Ck6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${E18(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function z18($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${O18("md5","etag").update(Y).digest("hex")}"`}async function P18($,Z,Q,Y,X){try{let J=await Vk6($,{withFileTypes:!0});for(let G of J){let W=aW1($,G.name),H=kk6(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 P18(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 L18(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:z18(W,F.mtime,F.size)})}catch{}}}}catch{}}function A18($,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=j18(Y);await Ik6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await P18(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=sW1(Y,J.key),W=await L18(G);return{contentType:V31(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:z18(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??B18;return{url:D18(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??B18;return{url:D18(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=sW1(Y,J.key);try{return await N18(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=sW1(Y,K);try{await N18(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function eW1($,Z,Q){let Y=A18(Z,Q),X=new RH({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:f5});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 nY({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),xG(X,J,$,"mcp:dev-assets")}async function T18($,Z,Q,Y){let J=A18(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 Sk6="./data/assets",B18=3600,w18,R18;var q18=O(()=>{t1();Yc();y$();zt();of();gQ();qM0();w18=new e0;w18.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return eW1($.req.raw,Z,Y)});R18=w18});var M18={};q4(M18,{mountDevRoutes:()=>_k6});function _k6($,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 eW1(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 T18(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",R18);let Q=new e0;Q.use("*",vK({mountPath:"/api/dev-assets"})),Q.route("/",RM0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var I18=O(()=>{y$();P31();qM0();q18()});import{sql as vk6}from"kysely";import{randomUUID as V18}from"crypto";import{z as fk6}from"zod";async function xk6($){let Z=new Date().toISOString(),Q=V18(),Y=R8.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:V18(),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 vk6`SELECT
|
|
3393
3393
|
pg_notify('studio_events', ${Q}),
|