decocms 4.371.2 → 4.371.3
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-B6wwVpE_.js → AlertCircle-VdsUyDsL.js} +1 -1
- package/dist/client/assets/{AreaChart-DxZFwWge.js → AreaChart-DIlQ1K_d.js} +1 -1
- package/dist/client/assets/{ArrowLeft-CTfWEOn_.js → ArrowLeft-C1Jxz-38.js} +1 -1
- package/dist/client/assets/{ArrowRight-BSx8IDKt.js → ArrowRight-B7Hvi15P.js} +1 -1
- package/dist/client/assets/{ArrowUp-D9wCXP2E.js → ArrowUp-BFEFFMY1.js} +1 -1
- package/dist/client/assets/{CartesianChart-Cd50pbhw.js → CartesianChart-DNNied0N.js} +1 -1
- package/dist/client/assets/{Check-CV5wE14s.js → Check-CCHtN2JL.js} +1 -1
- package/dist/client/assets/{CheckCircle-Cm7e50OB.js → CheckCircle-62tE7hh5.js} +1 -1
- package/dist/client/assets/{ChevronRight-DF00Hxze.js → ChevronRight-CFHS6mGR.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-a1L8nkl_.js → ChevronSelectorVertical-C0AfY4BX.js} +1 -1
- package/dist/client/assets/{ChevronUp-BIJ33mq-.js → ChevronUp-58_Y92Dn.js} +1 -1
- package/dist/client/assets/{Copy01-Djqdozj7.js → Copy01-DUI0S5po.js} +1 -1
- package/dist/client/assets/{CreditCard01-B-FZXFU_.js → CreditCard01-BCIcmSsj.js} +1 -1
- package/dist/client/assets/{Database01-D2F-33im.js → Database01-CgMLXTB0.js} +1 -1
- package/dist/client/assets/{DotsVertical-W2TFUW8Q.js → DotsVertical-CllTTtzx.js} +1 -1
- package/dist/client/assets/{Download01-DHvQwHCH.js → Download01-D1unS475.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-Dpp0jtVr.js → ErrorBarContext-BOFaiRT7.js} +1 -1
- package/dist/client/assets/{Eye-Cdgfzyki.js → Eye-DJsJHMdz.js} +1 -1
- package/dist/client/assets/{File02-9BP6PQyf.js → File02-C6lTNDur.js} +1 -1
- package/dist/client/assets/{GitBranch01-0XUwaJ1e.js → GitBranch01-DuVUhLIs.js} +1 -1
- package/dist/client/assets/{Globe01-B4Ox45iT.js → Globe01-BxiM5hiu.js} +1 -1
- package/dist/client/assets/{HardDrive-Bltl0EZP.js → HardDrive-DYoYQlgK.js} +1 -1
- package/dist/client/assets/{Image01-BKXjYImN.js → Image01-BG5OCK-e.js} +1 -1
- package/dist/client/assets/{Key01-Bn3b2-E-.js → Key01-BVFF75nH.js} +1 -1
- package/dist/client/assets/{Line-BaEgZjON.js → Line-pQ4sdY-j.js} +1 -1
- package/dist/client/assets/{Link01-tgfA2O1O.js → Link01-DqK8epHf.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BeEySOGR.js → LinkExternal01-2jYkMKWf.js} +1 -1
- package/dist/client/assets/{MessageCircle01-BUZyBws-.js → MessageCircle01-BleWTCg5.js} +1 -1
- package/dist/client/assets/{Monitor01-DiNkCarU.js → Monitor01-C3zWsNr6.js} +1 -1
- package/dist/client/assets/{Package-OGz-YQyF.js → Package-XpklebG8.js} +1 -1
- package/dist/client/assets/{Palette-zweuRfuf.js → Palette-Cj-GyLY8.js} +1 -1
- package/dist/client/assets/{Play-CyJUaITh.js → Play-B7qVZhEj.js} +1 -1
- package/dist/client/assets/{Plus-BHzo7JpN.js → Plus-B3s19fbp.js} +1 -1
- package/dist/client/assets/{Printer-BCdINSRW.js → Printer-hmMbghuH.js} +1 -1
- package/dist/client/assets/{SearchLg-BEUzmm7J.js → SearchLg-B9ADJIQh.js} +1 -1
- package/dist/client/assets/{SearchMd-BZxbKw5D.js → SearchMd-Cte0Flmz.js} +1 -1
- package/dist/client/assets/{Sector-BcG--B_v.js → Sector-B1R50REh.js} +1 -1
- package/dist/client/assets/{Settings02-DT6SgAR5.js → Settings02-BG6PEEFh.js} +1 -1
- package/dist/client/assets/{Share07-B18DW4IB.js → Share07-XK-81nC3.js} +1 -1
- package/dist/client/assets/{Shield01-CobmTjIR.js → Shield01-BiMmptW_.js} +1 -1
- package/dist/client/assets/{Stars01-Bumlbnyx.js → Stars01-BbGiUZr8.js} +1 -1
- package/dist/client/assets/{Sun-DSmRhca0.js → Sun-DPlu9nq0.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-BBsMhIe7.js → SwitchHorizontal01-D4Xp6795.js} +1 -1
- package/dist/client/assets/{Tool01-Cdrnwb5w.js → Tool01-C-Av9hw4.js} +1 -1
- package/dist/client/assets/{Tool02-DQ3gW2fr.js → Tool02-BWLvpTJ3.js} +1 -1
- package/dist/client/assets/{Trash01-DUXtn-7w.js → Trash01-DBG5z7yc.js} +1 -1
- package/dist/client/assets/{TrendUp01-NLayJLL7.js → TrendUp01-CVQkVUqd.js} +1 -1
- package/dist/client/assets/{Upload01-BtQp1axP.js → Upload01-C3vxmuR3.js} +1 -1
- package/dist/client/assets/{User01-CKqNomg0.js → User01-D61cOv44.js} +1 -1
- package/dist/client/assets/{UserSquare-8e1dRiH3.js → UserSquare-v3UhY-wJ.js} +1 -1
- package/dist/client/assets/{Users01-57sXIUc1.js → Users01-D6vUv3VA.js} +1 -1
- package/dist/client/assets/{Users03-BgcZr7a4.js → Users03-CvWlZOBQ.js} +1 -1
- package/dist/client/assets/{X-Bb2W3Osa.js → X-Bl6p2PHk.js} +1 -1
- package/dist/client/assets/{XCircle-DY948r_f.js → XCircle-CVRXuYKn.js} +1 -1
- package/dist/client/assets/{XClose-DZSiMxAy.js → XClose-DlSEqtvq.js} +1 -1
- package/dist/client/assets/{Zap-CgzyzKhX.js → Zap-CPc5P9In.js} +1 -1
- package/dist/client/assets/{ZoomOut-D2tsmZom.js → ZoomOut-hBrRCaxr.js} +1 -1
- package/dist/client/assets/{access-gate-DvdkRhsp.js → access-gate-CMGFwr69.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-D5tuJQCZ.js → add-connection-dialog-CP5Mmevx.js} +1 -1
- package/dist/client/assets/{agent-analytics-DBHFYrDv.js → agent-analytics-DCS3uSsr.js} +1 -1
- package/dist/client/assets/agent-app-Oc3NFHyv.js +1 -0
- package/dist/client/assets/{agent-assets-BZdHKM5s.js → agent-assets-DdglfWnk.js} +1 -1
- package/dist/client/assets/{agent-automation-BVb3Gxiv.js → agent-automation-CxX1vxsE.js} +1 -1
- package/dist/client/assets/{agent-automations-DrdTF_QF.js → agent-automations-B3u2ZCWn.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-DgyTqo8E.js → agent-connect-sources-CfWPAAvA.js} +1 -1
- package/dist/client/assets/agent-deck-C0ZMDlgi.js +1 -0
- package/dist/client/assets/{agent-e2e-C5dxsLW1.js → agent-e2e-C5hBbr4z.js} +1 -1
- package/dist/client/assets/{agent-experiments-Dvha9zfY.js → agent-experiments-D0YmjUod.js} +1 -1
- package/dist/client/assets/agent-file-CGQaQeAZ.js +1 -0
- package/dist/client/assets/{agent-git-DXUQUk2o.js → agent-git-DEYO9KtF.js} +1 -1
- package/dist/client/assets/{agent-hosting-RNHPEFX0.js → agent-hosting-Cr3IQ-v1.js} +1 -1
- package/dist/client/assets/{agent-icon-N33S3RAD.js → agent-icon-8_uoIw9T.js} +1 -1
- package/dist/client/assets/agent-library-file-KT4Hio_6.js +1 -0
- package/dist/client/assets/{agent-monitor-CUV7DsFY.js → agent-monitor-0aQD9bjQ.js} +1 -1
- package/dist/client/assets/{agent-overview-Bnvq7c9I.js → agent-overview-COVktEcD.js} +1 -1
- package/dist/client/assets/agent-settings-C4VbiDnu.js +1 -0
- package/dist/client/assets/agent-site-editor-code-CC5pYwiP.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-DxPTZb5h.js → agent-site-editor-content-Cl3K8_0X.js} +2 -2
- package/dist/client/assets/agent-site-editor-mpw2Csz7.js +24 -0
- package/dist/client/assets/{agent-site-editor-preview-BpA11_Yu.js → agent-site-editor-preview-BA36sYGX.js} +3 -3
- package/dist/client/assets/agent-view-CkU0IYt7.js +1 -0
- package/dist/client/assets/{agent-view-guard-CC_CXZXz.js → agent-view-guard-C-KDGm4-.js} +1 -1
- package/dist/client/assets/{agents-list-Cm0rD16a.js → agents-list-CKuwQGtx.js} +1 -1
- package/dist/client/assets/{ai-providers-Dnhw3m11.js → ai-providers-DKHAMpyi.js} +1 -1
- package/dist/client/assets/{alert-d7x6nkTQ.js → alert-Dt-3NCs0.js} +1 -1
- package/dist/client/assets/{alert-dialog-DbPVXIpB.js → alert-dialog-DyR5Q_Tj.js} +1 -1
- package/dist/client/assets/{api-keys-CwvucqWH.js → api-keys-BDNm5-Dl.js} +1 -1
- package/dist/client/assets/api-keys-CC37GpyL.js +1 -0
- package/dist/client/assets/app-editor-D15HlBI9.js +1 -0
- package/dist/client/assets/{asset-utils-B2X6-u_s.js → asset-utils-DASitpN8.js} +1 -1
- package/dist/client/assets/{auth-BG4qFQSm.js → auth-NpT8e85Y.js} +1 -1
- package/dist/client/assets/{auth-catchall--QKnfVt2.js → auth-catchall-CvSC5l_t.js} +1 -1
- package/dist/client/assets/{auth-entry-DIE9VSj_.js → auth-entry-SXWVX_Hn.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CuPiTJfk.js → auth-split-layout-ivHBNujg.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BJgrfhXe.js → authenticate-and-persist-oauth-B1pRhuCl.js} +1 -1
- package/dist/client/assets/{automation-list-row-3PF7uSOA.js → automation-list-row-Ddk9fHNo.js} +1 -1
- package/dist/client/assets/{automation-runs-DfS2YRF7.js → automation-runs-CuZxmXdR.js} +1 -1
- package/dist/client/assets/automations-x9QUNuFg.js +1 -0
- package/dist/client/assets/{autosend-LG-eI-i8.js → autosend-4JcmiES9.js} +1 -1
- package/dist/client/assets/{avatar-BZNxKLv6.js → avatar-DU3VcflD.js} +1 -1
- package/dist/client/assets/{badge-DmLrCyyG.js → badge-D2mSgg83.js} +1 -1
- package/dist/client/assets/{block-document-CTJ131BZ.js → block-document-B-RAdc0f.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-gNEzksKW.js → blocks-preview-workspace-context-BI0TdpjN.js} +1 -1
- package/dist/client/assets/{breadcrumb-CxBUbqBt.js → breadcrumb-zgHbWMCc.js} +1 -1
- package/dist/client/assets/{buckets-BW_7lKAt.js → buckets-BS0Xnpxe.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-CwRZ-otf.js → build-improve-prompt-doc-B33wGST8.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-G2OqyB3c.js → bulk-category-panel-CbySlXro.js} +1 -1
- package/dist/client/assets/{calendar-BqtZqzlI.js → calendar-ButUng_A.js} +1 -1
- package/dist/client/assets/{capability-load-error-BxPWpjvk.js → capability-load-error-DRsV-GAi.js} +1 -1
- package/dist/client/assets/{cards-BGZYCw96.js → cards-D39Wg-JZ.js} +1 -1
- package/dist/client/assets/category-editor-DbD1-U8M.js +1 -0
- package/dist/client/assets/{chart-CXffRtMB.js → chart-CiBx-he_.js} +1 -1
- package/dist/client/assets/{chat-context-_q59AZUK.js → chat-context-Bl66TDog.js} +1 -1
- package/dist/client/assets/{chat-draft-DltxgUNg.js → chat-draft-Dr_jRWei.js} +1 -1
- package/dist/client/assets/{checkbox-ClB-7cKk.js → checkbox-CDV3hkI4.js} +1 -1
- package/dist/client/assets/{choose-editor-BYimc8N3.js → choose-editor-CIPqa9qE.js} +1 -1
- package/dist/client/assets/{cli-auth-success-98VSKTvF.js → cli-auth-success-CN1jtlEB.js} +1 -1
- package/dist/client/assets/{client-icons-YajzpeXZ.js → client-icons-BpIRk6Eq.js} +1 -1
- package/dist/client/assets/{collapsible-COaBQVgw.js → collapsible-DCvGxmdk.js} +1 -1
- package/dist/client/assets/{collection-detail-CgUMSgRZ.js → collection-detail-CFy4iVJB.js} +1 -1
- package/dist/client/assets/{collection-display-button-DKAiHd3Q.js → collection-display-button-BLff0NvM.js} +1 -1
- package/dist/client/assets/{collection-search-BiXs1jPm.js → collection-search-Cg8WYO7F.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-BB_AGLzP.js → collection-table-wrapper-2OEvZUQj.js} +1 -1
- package/dist/client/assets/{collection-tabs-B7pXy1cp.js → collection-tabs-BxByj3JB.js} +1 -1
- package/dist/client/assets/{combobox-DXnYCRkU.js → combobox-LgVI0Z7L.js} +1 -1
- package/dist/client/assets/{command-DPtIHCMz.js → command-DeI04U1v.js} +1 -1
- package/dist/client/assets/{command-palette-store-DcmJmibB.js → command-palette-store-B6erqxcF.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-DpradbnX.js → companion-mcps-section-CPXt61w3.js} +1 -1
- package/dist/client/assets/{connect-BnfQsmIn.js → connect-NgsFpLka.js} +1 -1
- package/dist/client/assets/{connect-layout-CplzJp7H.js → connect-layout-DivbguN1.js} +1 -1
- package/dist/client/assets/{connection-B0rKAD6V.js → connection-Gh-gc5IV.js} +1 -1
- package/dist/client/assets/{connection-card-C75zeoKz.js → connection-card-DOCSy-r2.js} +1 -1
- package/dist/client/assets/{connection-detail-DBRQ_EOn.js → connection-detail-BtFpRXk1.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-exw5Pq0Z.js → connection-form-helpers-COFd-YYJ.js} +1 -1
- package/dist/client/assets/{connections-FiVc_NNY.js → connections-BnXSX27r.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-CGINyQXi.js → create-organization-dialog-D_YqMWxW.js} +1 -1
- package/dist/client/assets/{decofile-api-D_1mxcIY.js → decofile-api-DwtnpwwY.js} +1 -1
- package/dist/client/assets/{decopilot-DXH0qU5M.js → decopilot-CqQIn3DK.js} +1 -1
- package/dist/client/assets/{dialog-B23QWo9i.js → dialog-CALEql2B.js} +1 -1
- package/dist/client/assets/{discover-DxcSmxGr.js → discover-0sB_P0gJ.js} +1 -1
- package/dist/client/assets/{domain-settings-g2fp2Ye9.js → domain-settings-BsQLpeO_.js} +1 -1
- package/dist/client/assets/{download-app-dialog-TA6NzEO8.js → download-app-dialog-4cfbO5ZR.js} +1 -1
- package/dist/client/assets/{drawer-BxrIZkXS.js → drawer-Wjj3JV6a.js} +1 -1
- package/dist/client/assets/{dropdown-menu-BxecOnD3.js → dropdown-menu-BwJm6kWw.js} +1 -1
- package/dist/client/assets/{editor-CfFjFo6R.js → editor-B6qYQm3q.js} +1 -1
- package/dist/client/assets/{empty-state-CkZ5yLkM.js → empty-state-CDt1Oweu.js} +1 -1
- package/dist/client/assets/{empty-state-T4gSZ7lE.js → empty-state-Dpo9j0Bh.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DqpsAFUm.js → extract-connection-data-dNt5_vXq.js} +1 -1
- package/dist/client/assets/{feature-gate-iZNxCNZa.js → feature-gate-D7DzzVJY.js} +1 -1
- package/dist/client/assets/{feature-paywall-BVM5GBPX.js → feature-paywall-rsbHj8go.js} +1 -1
- package/dist/client/assets/{file-explorer-BCzFr5oi.js → file-explorer-CFWGO-U6.js} +1 -1
- package/dist/client/assets/{file-preview-CgkV4Grk.js → file-preview-r_4dJHJu.js} +1 -1
- package/dist/client/assets/{file-share-button-C91aKMmk.js → file-share-button-tzoRmnRq.js} +1 -1
- package/dist/client/assets/{file-type-icon-CIaeJ2vN.js → file-type-icon-Dnlnjv2X.js} +1 -1
- package/dist/client/assets/{folder-icon-B2n98w8h.js → folder-icon-DZt6oPqY.js} +1 -1
- package/dist/client/assets/{form-D274Mm5V.js → form-BDbK3JnT.js} +1 -1
- package/dist/client/assets/{gateway-client-Da7gZR-i.js → gateway-client-BKiwX9p5.js} +1 -1
- package/dist/client/assets/{general-DcrWhsvd.js → general-Ok0oiZzk.js} +1 -1
- package/dist/client/assets/{github-icon-B_cEBMlN.js → github-icon-Pmxow-OZ.js} +1 -1
- package/dist/client/assets/{home-kWL5ccMo.js → home-CS-NhJqO.js} +1 -1
- package/dist/client/assets/{hooks-BjBfy6ei.js → hooks-Ccqgw_Vz.js} +1 -1
- package/dist/client/assets/{hooks-BlQpGzXW.js → hooks-Dn-h6Vcw.js} +1 -1
- package/dist/client/assets/{index-nRYJl_2G.js → index-2Adyhfq_.js} +1 -1
- package/dist/client/assets/{index-DZyEvvL6.js → index-B4mA6UnL.js} +1 -1
- package/dist/client/assets/{index-BKFhg0pC.js → index-BMgXFXs8.js} +1 -1
- package/dist/client/assets/{index-DwkC8ftd.js → index-CAn5a9er.js} +1 -1
- package/dist/client/assets/{index-BadUSqcw.js → index-CFD7GjM4.js} +1 -1
- package/dist/client/assets/{index-D6uaBizA.js → index-CLnsRUUW.js} +1 -1
- package/dist/client/assets/{index-D205LVVe.js → index-Cb1NhXJQ.js} +1 -1
- package/dist/client/assets/{index-B_t_9L8u.js → index-Ci6FOo2o.js} +2 -2
- package/dist/client/assets/index-CpNTsElB.css +1 -0
- package/dist/client/assets/{index-DB8hZ0LD.js → index-CpUt41i2.js} +1 -1
- package/dist/client/assets/{index-DcVfvBoo.js → index-D-uWdP1a.js} +1 -1
- package/dist/client/assets/{index-D_G0qAY7.js → index-DO47GS7M.js} +1 -1
- package/dist/client/assets/{index-BSX_Ja12.js → index-DV57LmCQ.js} +1 -1
- package/dist/client/assets/{index-CFuWbX_m.js → index-DgDxrPJQ.js} +1 -1
- package/dist/client/assets/{index-BW-WWr9m.js → index-DzN1GaeD.js} +1 -1
- package/dist/client/assets/{index-B8PSZLZI.js → index-LUO-1awi.js} +1 -1
- package/dist/client/assets/{index-redirect-BwUlazGe.js → index-redirect-DvmJfTQ6.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-DfvtnjNV.js → infiniteQueryObserver-lxHY9KBm.js} +1 -1
- package/dist/client/assets/{infra-billing-B-CGfdEc.js → infra-billing-BrTbotT6.js} +1 -1
- package/dist/client/assets/{input-CQKBnLmN.js → input-C1_yaWH2.js} +1 -1
- package/dist/client/assets/{input-BAzDfmnE.js → input-DmMiHqqT.js} +1 -1
- package/dist/client/assets/{input-Ca_ZLV1Y.js → input-lLD2pWyd.js} +1 -1
- package/dist/client/assets/{integration-icon-BnRFkhic.js → integration-icon-PXIcCvAJ.js} +1 -1
- package/dist/client/assets/{label-do_aUXHU.js → label-MNehxDd8.js} +1 -1
- package/dist/client/assets/{last-preview-page-BUqf6h1l.js → last-preview-page-B0L1czTe.js} +1 -1
- package/dist/client/assets/{layout-UJ8tWNxs.js → layout-Dpdh60IA.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-DfpMRvTv.js → legacy-agents-deep-BurccH7y.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-CqiQcjAt.js → legacy-main-redirect-DR_vBjBo.js} +1 -1
- package/dist/client/assets/{library-C_i45qn5.js → library-Bh3JUAWw.js} +1 -1
- package/dist/client/assets/{login-C7udEPeA.js → login-DWsBRCWt.js} +1 -1
- package/dist/client/assets/{markdown-Twa7ZLqX.js → markdown-Bj_2Le1s.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-tEfVUp4A.js → mcp-app-renderer-BtowUfrr.js} +1 -1
- package/dist/client/assets/{mcp-oauth-C917Nh81.js → mcp-oauth-BmHUUoma.js} +1 -1
- package/dist/client/assets/{members-BsFGuEmq.js → members-D97CSBdC.js} +1 -1
- package/dist/client/assets/{message-templates-CIDfEotD.js → message-templates-CGva-Wmj.js} +1 -1
- package/dist/client/assets/{mini-report-page-Ddy5Pw8R.js → mini-report-page-B6KW5rQB.js} +1 -1
- package/dist/client/assets/{mock-board-CkJCse34.js → mock-board-B88aD_ZY.js} +3 -3
- package/dist/client/assets/{monaco-editor-DaJaP1Lm.js → monaco-editor-BL1VqVAn.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-BVeD-qT3.js → monitoring-stats-row-DhYpTGm4.js} +1 -1
- package/dist/client/assets/{multi-select-CXFIDFxv.js → multi-select-D4MUTF49.js} +1 -1
- package/dist/client/assets/{mustache-v6qi8gyX.js → mustache-vcSnLgSj.js} +1 -1
- package/dist/client/assets/{oauth-callback-D0viP0sr.js → oauth-callback-CCbopwuF.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CSuMgG32.js → oauth-callback-ai-provider-BhmhWPuU.js} +1 -1
- package/dist/client/assets/{onboarding-VOgHEwav.js → onboarding-CfCwmxWa.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-wjjPbR3H.js → optimistic-project-sidebar-views-r6d0a0fa.js} +1 -1
- package/dist/client/assets/{org-file-open-context-CAC-qw2Y.js → org-file-open-context-BQaKniQN.js} +1 -1
- package/dist/client/assets/{organization-choice-8sEHl_tc.js → organization-choice-n5jWR8x5.js} +1 -1
- package/dist/client/assets/{orgs-DEmuzSnD.js → orgs-BP4Nb7eA.js} +1 -1
- package/dist/client/assets/{page-seo-form-Cuq48XTM.js → page-seo-form-CUFQ9lAZ.js} +1 -1
- package/dist/client/assets/{pair-DDqppz14.js → pair-BVv5qwS0.js} +1 -1
- package/dist/client/assets/{plan-ladder-1DGkQvtt.js → plan-ladder-B_cdDv2u.js} +1 -1
- package/dist/client/assets/{popover-CVXHUdYf.js → popover-CvyZH1aK.js} +1 -1
- package/dist/client/assets/{post-calendar-BUS9OIvE.js → post-calendar-D4wVrUD5.js} +1 -1
- package/dist/client/assets/{post-editor-BZIxDfY9.js → post-editor-Dl7mmgPt.js} +1 -1
- package/dist/client/assets/{preview-content-BkvkIg5_.js → preview-content-CwblWQ7j.js} +1 -1
- package/dist/client/assets/{preview-dialog-CrzeRqhT.js → preview-dialog-8QorEoUx.js} +1 -1
- package/dist/client/assets/{primitives-cehm4nSi.js → primitives-Dm-d52Fy.js} +1 -1
- package/dist/client/assets/{profile-BrvUSH21.js → profile-CqqLFn0p.js} +1 -1
- package/dist/client/assets/{project-app-view-B3Dyt98h.js → project-app-view-Dea9RQT5.js} +1 -1
- package/dist/client/assets/{project-feed-BpTyWPI2.js → project-feed-BWj52Geg.js} +1 -1
- package/dist/client/assets/{project-icon-CbTBUdHd.js → project-icon-B62L0-Ic.js} +1 -1
- package/dist/client/assets/project-reports-BiLKZHtd.js +1 -0
- package/dist/client/assets/project-tasks-CbohEN8r.js +1 -0
- package/dist/client/assets/{prompts-CnSkOwcy.js → prompts-C8qjFh5s.js} +1 -1
- package/dist/client/assets/record-editor-DIcN0zmC.js +1 -0
- package/dist/client/assets/{redirect-editor-CJxBmHDy.js → redirect-editor-DlDRLI5p.js} +1 -1
- package/dist/client/assets/registry-B1XwkW9J.js +2 -0
- package/dist/client/assets/{registry-layout-CZrvope7.js → registry-layout-8_5YS8d1.js} +1 -1
- package/dist/client/assets/{reports-OsoTRPv4.js → reports-BVUgXRYp.js} +1 -1
- package/dist/client/assets/reports-DTnhVLYw.js +1 -0
- package/dist/client/assets/{reports-onboarding-CWGSmZPj.js → reports-onboarding-CFgdzNmN.js} +1 -1
- package/dist/client/assets/{reports-tab-BY3YIV1-.js → reports-tab-geHriKhJ.js} +2 -2
- package/dist/client/assets/{repositories-jGs4vEB4.js → repositories-YhOosDET.js} +1 -1
- package/dist/client/assets/{repository-import-picker-Cz_q5yZW.js → repository-import-picker-DyOhHF3u.js} +1 -1
- package/dist/client/assets/{repository-picker-VKlc-5Nl.js → repository-picker-BUYJfJUH.js} +1 -1
- package/dist/client/assets/{require-capability-AcVeGAPs.js → require-capability-BuyUQe2r.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DX3m9xU5.js → required-auth-layout-CyxpkSWy.js} +1 -1
- package/dist/client/assets/{reset-password-BMBbJ8U2.js → reset-password-OhUCgdFz.js} +1 -1
- package/dist/client/assets/{resizable-7zYbsXBN.js → resizable-DP2_iOJI.js} +1 -1
- package/dist/client/assets/{review-settings-CX8L9XIy.js → review-settings-opGiYRKh.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-vwCs-Pv8.js → rich-text-link-control-IfY5GJsh.js} +1 -1
- package/dist/client/assets/{roles-DV4fcbyA.js → roles-BAZCs_gu.js} +1 -1
- package/dist/client/assets/{route-BwyuTAqy.js → route-9VJmjx4H.js} +1 -1
- package/dist/client/assets/{route-xvY1W3BI.js → route-KMEErrnr.js} +1 -1
- package/dist/client/assets/{route-BWPdXuzd.js → route-VxozlsXO.js} +1 -1
- package/dist/client/assets/{runnable-block-editor-DMLjCiKw.js → runnable-block-editor-D9S_7iKc.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-GS_3-ITC.js → sandbox-lifecycle-context-3dTG6fho.js} +1 -1
- package/dist/client/assets/{schema-DfaDVZ2p.js → schema-36B888Ow.js} +1 -1
- package/dist/client/assets/{scroll-area-BDoLu6qP.js → scroll-area-YvnS-VN7.js} +1 -1
- package/dist/client/assets/{search-input-CyvpxrvE.js → search-input-rOGFcd8V.js} +1 -1
- package/dist/client/assets/{secrets-Dpz6qPsH.js → secrets-BlD021Nv.js} +1 -1
- package/dist/client/assets/{sections-editor-CDqfND3d.js → sections-editor-l0CGUT74.js} +1 -1
- package/dist/client/assets/{select-DNa5fWTD.js → select-DlFxiDXG.js} +1 -1
- package/dist/client/assets/{select-model-CNiFnlRt.js → select-model-D1v-HQmb.js} +1 -1
- package/dist/client/assets/{seo-editor-M0ysd2bD.js → seo-editor-Dsx4w-CS.js} +1 -1
- package/dist/client/assets/{settings-tab-CFrIKYBd.js → settings-tab-1hWkXxtW.js} +1 -1
- package/dist/client/assets/{sheet-CMxXh_Ov.js → sheet-3mWdWARg.js} +1 -1
- package/dist/client/assets/{shell-layout-CWd2W90X.js → shell-layout-BhU24obU.js} +1 -1
- package/dist/client/assets/{sidebar-D9_NtJkk.js → sidebar-D-ykwYZK.js} +1 -1
- package/dist/client/assets/{skill-preview-S2vO6IYy.js → skill-preview-COt3tZyn.js} +1 -1
- package/dist/client/assets/{skills-DbgPHujY.js → skills-CeAeythT.js} +1 -1
- package/dist/client/assets/{sso-Bw-PWl7Q.js → sso-BCvc79Hd.js} +1 -1
- package/dist/client/assets/{store-BgsQX_Fi.js → store-DSS7pwbI.js} +1 -1
- package/dist/client/assets/store-registry-5Rnsr40F.js +2 -0
- package/dist/client/assets/{switch-mcxC_Aan.js → switch-DzbhFkd8.js} +1 -1
- package/dist/client/assets/{synced-repos-lQACy_ad.js → synced-repos-C1a_2VSv.js} +1 -1
- package/dist/client/assets/{table-H21ieEXh.js → table-DRHZogtG.js} +1 -1
- package/dist/client/assets/{tabs-CwAPjptw.js → tabs-BFpD35SN.js} +1 -1
- package/dist/client/assets/{task-board-B3-IsxRC.js → task-board-BnjdulNB.js} +1 -1
- package/dist/client/assets/{task-route-BUeMvwcx.js → task-route-uoLnchBD.js} +1 -1
- package/dist/client/assets/{task-status-BxXgwSMd.js → task-status-CmnhmVw4.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-DU7DvA8Z.js → taskboard-analytics-DUtGlm_o.js} +1 -1
- package/dist/client/assets/{tasks-U-h4ZXgz.js → tasks-CFLqCnn9.js} +1 -1
- package/dist/client/assets/tasks-g-1sXb5S.js +1 -0
- package/dist/client/assets/{textarea-WmVIW0bg.js → textarea-cQD0AENQ.js} +1 -1
- package/dist/client/assets/{thread-intent-C2pJfSAJ.js → thread-intent-B4NPPJnW.js} +1 -1
- package/dist/client/assets/{thread-route-bhfmrSLD.js → thread-route-B4ftFRF1.js} +1 -1
- package/dist/client/assets/{thread-route-61fdgmi1.js → thread-route-BuKwn_NI.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-DoHyi92k.js → thread-sheet-body-B1hx9HMM.js} +1 -1
- package/dist/client/assets/{toggle-group-B1CgOPWM.js → toggle-group-D-jueDYG.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-BYug00Si.js → toolbar-icon-button-C-bcFp4s.js} +1 -1
- package/dist/client/assets/{tooltip-pAkqh20b.js → tooltip-Cjm5-OzF.js} +1 -1
- package/dist/client/assets/{track-KX6uTUqG.js → track-gXVphWaB.js} +1 -1
- package/dist/client/assets/{types-5aijjTQb.js → types-D7bWh5IS.js} +1 -1
- package/dist/client/assets/{usage-stats-S1LN4WEC.js → usage-stats-D42Vs58C.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CYsQyyei.js → use-ai-providers-gBzVwZfi.js} +1 -1
- package/dist/client/assets/{use-automations-BV7TVKO5.js → use-automations-D7KNhekz.js} +1 -1
- package/dist/client/assets/{use-autosave-CgGQs2na.js → use-autosave-B4PyFvWi.js} +1 -1
- package/dist/client/assets/{use-connect-companion-dP07X0QV.js → use-connect-companion-BPzdOTx5.js} +1 -1
- package/dist/client/assets/{use-connection-DIM1Km31.js → use-connection-Xm7LN_9n.js} +1 -1
- package/dist/client/assets/{use-copy-CDcL5GLP.js → use-copy-DU94HmBe.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-13Ot4OKd.js → use-create-virtual-mcp--3UsxEX_.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-BHjSaNEM.js → use-date-fns-locale-C0E1XIsK.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-B0mbzL5m.js → use-debounced-autosave-B4WPkEbW.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BzlwPqAr.js → use-debounced-value-xGhRE_R9.js} +1 -1
- package/dist/client/assets/{use-deco-credits-CvV_4weZ.js → use-deco-credits-CHmdnwNW.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-1Xa06bcv.js → use-decopilot-events-4c7k0EkQ.js} +1 -1
- package/dist/client/assets/{use-delete-connection-kg0pEh1_.js → use-delete-connection-DuVgZvNd.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-BTUkMR_9.js → use-deployment-admin-bb8cVdiw.js} +1 -1
- package/dist/client/assets/{use-entitlements-BKQxiM3P.js → use-entitlements-KRzxrqS2.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-CIU-JcgZ.js → use-fast-preview-draft-url-FohMvhQi.js} +1 -1
- package/dist/client/assets/{use-file-configs-CLO9fSxR.js → use-file-configs-dQMTZ0D4.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-WViWnVCU.js → use-infinite-scroll-d9JW4eui.js} +1 -1
- package/dist/client/assets/{use-join-requests-thW8uEAD.js → use-join-requests-DPp6OyPZ.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-BZNjo1U1.js → use-main-panel-tabs-LtZ4Guyx.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-RfN5_R0g.js → use-mcp-auth-status-BgfOM5Kn.js} +1 -1
- package/dist/client/assets/{use-mcp-client-E9Vc_Rel.js → use-mcp-client-DXM1xOfJ.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-CK92DQb1.js → use-mcp-prompts-DC_0PH3B.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DrrZAlYd.js → use-mcp-tools-CMaYw_Hr.js} +1 -1
- package/dist/client/assets/{use-members-Cr7VpPLM.js → use-members-CXzxpKBu.js} +1 -1
- package/dist/client/assets/{use-mobile-BWNsIKXL.js → use-mobile-BYI7AfZ8.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-Bjy_t-SC.js → use-navigate-to-agent-CjUZCiDZ.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-BHFltTlS.js → use-open-billing-url-BEBNPLNJ.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-Bp8IFxD6.js → use-org-auth-client-BPP7gPmZ.js} +1 -1
- package/dist/client/assets/{use-org-fs-DkULXCVM.js → use-org-fs-DVHt8CES.js} +1 -1
- package/dist/client/assets/{use-org-notice-DCW46IsC.js → use-org-notice-BxTs_NTo.js} +1 -1
- package/dist/client/assets/{use-org-sso-BesO5SJw.js → use-org-sso-CTb2BJZl.js} +1 -1
- package/dist/client/assets/{use-organization-roles-bXsV0FW7.js → use-organization-roles-V7NuNbQN.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BagDsr9q.js → use-organization-settings-g6uVBQuV.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-Btd3eerC.js → use-panel-navigate-hgplI2Gf.js} +1 -1
- package/dist/client/assets/{use-project-native-view-presence-DDD1DfUm.js → use-project-native-view-presence-DhTiN6Ju.js} +1 -1
- package/dist/client/assets/{use-project-scope-CTaEMAbv.js → use-project-scope-BjFNebNc.js} +1 -1
- package/dist/client/assets/{use-registry-connections-BvIXy5Ly.js → use-registry-connections-DqO-48ZD.js} +1 -1
- package/dist/client/assets/{use-releases-DlUPg5SD.js → use-releases-PNG9gtkr.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-CwzJSWg9.js → use-reports-diagnostic-CVPpJgJ0.js} +1 -1
- package/dist/client/assets/{use-route-default-main-3Bfvt474.js → use-route-default-main-DfSpgCsG.js} +1 -1
- package/dist/client/assets/{use-secrets-8-rSfjKw.js → use-secrets-BcSHBiEb.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-Bu8sg1z-.js → use-section-preview-base-Mo37PjIJ.js} +1 -1
- package/dist/client/assets/{use-session-runtime-JGH9InOY.js → use-session-runtime-CXFYmlCx.js} +1 -1
- package/dist/client/assets/{use-tags-T5RHvMH9.js → use-tags-DZpP5qDZ.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-DOH9LfJe.js → use-task-board-analytics-M_xSWhmc.js} +1 -1
- package/dist/client/assets/{use-task-metadata-sy6KLFNJ.js → use-task-metadata-X-a_cXtq.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-1n3XTlWk.js → use-thread-outputs-bMTFY9dN.js} +1 -1
- package/dist/client/assets/{use-view-mode-BhHJ1Hg6.js → use-view-mode-87wocfjx.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DqypJuyN.js → use-virtual-mcp-cCLIMV1h.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BaaJ9wpG.js +1 -0
- package/dist/client/assets/{useQueries-Drlss0b9.js → useQueries-Bsx5oDu5.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-HEcUWN_D.js +1 -0
- package/dist/client/assets/{users-BB661yTJ.js → users-fFbwQlCq.js} +1 -1
- package/dist/client/assets/{utils-iLmJV5k8.js → utils-DZ1FARwz.js} +1 -1
- package/dist/client/assets/{variant-calendar-H5bE__9A.js → variant-calendar-rCSHJOu1.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-BrrMWpxD.js → variant-matcher-override-KjWq3dD9.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CO_nPZTh.js → view-mode-toggle-N6248osk.js} +1 -1
- package/dist/client/assets/{virtual-mcp-CMjIasg-.js → virtual-mcp-CjQcEdrw.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-B-XCjxlW.js +0 -1
- package/dist/client/assets/agent-deck-Ber8ft6c.js +0 -1
- package/dist/client/assets/agent-file-DZjVPuyY.js +0 -1
- package/dist/client/assets/agent-library-file-trfE0T09.js +0 -1
- package/dist/client/assets/agent-settings-CNiD3ckF.js +0 -1
- package/dist/client/assets/agent-site-editor-BdMvy4Mo.js +0 -24
- package/dist/client/assets/agent-site-editor-code-Ce7mDfrI.js +0 -2
- package/dist/client/assets/agent-view-CNgwbe5B.js +0 -1
- package/dist/client/assets/api-keys-B1v9ccYJ.js +0 -1
- package/dist/client/assets/app-editor-DNOaIKZM.js +0 -1
- package/dist/client/assets/automations-CWBeAy1b.js +0 -1
- package/dist/client/assets/category-editor-BgCAssvf.js +0 -1
- package/dist/client/assets/index-DTEWW9mB.css +0 -1
- package/dist/client/assets/project-reports-FVtAI87U.js +0 -1
- package/dist/client/assets/project-tasks-38KXi6kx.js +0 -1
- package/dist/client/assets/record-editor-C5-Kr7k6.js +0 -1
- package/dist/client/assets/registry-rhMWKoWM.js +0 -2
- package/dist/client/assets/reports-Douw-a1a.js +0 -1
- package/dist/client/assets/store-registry-CBDrxRGz.js +0 -2
- package/dist/client/assets/tasks-BGoilBPc.js +0 -1
- package/dist/client/assets/useInfiniteQuery-Ddfpz-kZ.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-JPoWLgBT.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -2076,7 +2076,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var T0$=D(()=>{fg()});f
|
|
|
2076
2076
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${G}/${K}, keeping in old table`);continue}}await Ku`
|
|
2077
2077
|
DELETE FROM kysely_migration WHERE name = ${Q}
|
|
2078
2078
|
`.execute($)}}async function p6$($){await IX4($),await VX4($);let Z=new d6$({db:$,provider:{getMigrations:()=>Promise.resolve(Is0)}}),{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 kX4($){let{keepOpen:Z=!1,database:Q,skipBetterAuth:X=!1}=$??{},Y="skipped";if(!X&&!Q)Y=await pn0();let J=Q??l$(),G=async()=>{if(!Z&&!Q)await yD(J).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await p6$(J.db);return await G(),{betterAuth:Y,kysely:K}}catch(K){throw await G(),K}}async function SX4(){let $=l$(),Z=new d6$({db:$.db,provider:{getMigrations:()=>Promise.resolve(Is0)}}),{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 t6$=D(()=>{m6$();nn0();dQ()});async function OJ0($){let Z={...process.env},Q=X90($,Z);console.log(qR1(Q.settings.encryptionKey));let X=Q.settings.betterAuthSecret||(Q.settings.localMode?Z$$(Q.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (DY0(),OY0)),{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(() => (nn0(),X$$));await W(J.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (dQ(),E1$)),{migrateToLatest:F}=await Promise.resolve().then(() => (t6$(),n6$)),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 R0$(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 Vs0=D(()=>{fg();Q$$();t1()});var s6$={};$0(s6$,{updateService:()=>mz,subscribeCliState:()=>Cs0,setTuiConsoleIntercepted:()=>DJ0,setServerUrl:()=>Po,setMigrationsDone:()=>zo,setDevMode:()=>_X4,resetCliStateForTests:()=>CX4,isTuiConsoleIntercepted:()=>LJ0,getCliState:()=>Ss0,addLogEntry:()=>mD});function o6$(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function r6$(){return{services:o6$(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function CX4(){_Y=r6$()}function Eo(){for(let $ of ks0)$()}function Ss0(){return _Y}function Cs0($){return ks0.add($),()=>ks0.delete($)}function mz($){_Y={..._Y,services:_Y.services.map((Z)=>Z.name===$.name?$:Z)},Eo()}function zo(){_Y={..._Y,migrationsStatus:"done"},Eo()}function Po($){_Y={..._Y,serverUrl:$},Eo()}function mD($){let Z=[..._Y.logs,$];_Y={..._Y,logs:Z.length>500?Z.slice(-500):Z},Eo()}function _X4(){_Y={..._Y,services:[...o6$(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},Eo()}function DJ0($){a6$=$}function LJ0(){return a6$}var _Y,ks0,a6$=!1;var dz=D(()=>{_Y=r6$();ks0=new Set});import{createServer as e6$}from"net";function vX4($){return new Promise((Z)=>{let Q=e6$();Q.once("error",()=>Z(!1)),Q.listen($,"0.0.0.0",()=>{Q.close(()=>Z(!0))})})}async function Ao($){if(await vX4($))return $;let Z=await new Promise((Q,X)=>{let Y=e6$();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 _s0=()=>{};var xs0={};$0(xs0,{startDevServer:()=>fX4,pipeToLogStore:()=>vs0});import{join as xX4}from"path";function vs0($){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;mD({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)mD({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function fX4($){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 Ao(Number(Y)+1):await Ao(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await OJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)mz({name:L.name,status:"ready",port:L.port});zo();let F=xX4(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)vs0(N.stdout),vs0(N.stderr);Po(J),mz({name:"Vite",status:"ready",port:Number(Y)}),mz({name:"API",status:"ready",port:Number(K.port)});let O=async(L)=>{if(N.kill(L),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (DY0(),OY0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:N}}var fs0=D(()=>{Vs0();dz();_s0()});var wJ0;var bs0=D(()=>{wJ0={name:"decocms",version:"4.371.2",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 yX4,Text as $5$}from"ink";import{jsx as gX4,jsxs as Z5$}from"react/jsx-runtime";function Q5$({version:$}){return Z5$(yX4,{flexDirection:"column",marginTop:1,children:[gY0.map((Z,Q)=>gX4($5$,{color:hY0[Q],children:Z},Q)),Z5$($5$,{dimColor:!0,children:[" v",$]})]})}var X5$=D(()=>{Jo()});import{Box as iz,Text as dD}from"ink";import{Spinner as hX4}from"@inkjs/ui";import{jsx as aJ,jsxs as Wu}from"react/jsx-runtime";function Y5$({status:$}){if($==="pending")return aJ(hX4,{label:""});return aJ(dD,{color:"green",children:"\u2713"})}function uX4($){return`${$.name}: ${$.port||"...."}`}function J5$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Wu(iz,{flexDirection:"column",paddingBottom:1,children:[aJ(Q5$,{version:wJ0.version}),aJ(iz,{marginBottom:1,children:aJ(dD,{dimColor:!0,children:"\u2500".repeat(80)})}),aJ(iz,{children:Wu(dD,{dimColor:!0,children:["Home: ",Q]})}),Wu(iz,{gap:2,children:[$.map((Y)=>Wu(iz,{gap:1,children:[aJ(dD,{children:uX4(Y)}),aJ(Y5$,{status:Y.status})]},Y.name)),Wu(iz,{gap:1,children:[aJ(dD,{children:"Migrations"}),aJ(Y5$,{status:Z})]})]}),aJ(iz,{children:X?Wu(dD,{children:["Open in browser: ",aJ(dD,{color:"cyan",children:X})]}):aJ(dD,{dimColor:!0,children:"Starting..."})})]})}var G5$=D(()=>{bs0();X5$()});import{Box as lX4,Text as To}from"ink";import{jsx as ys0,jsxs as gs0}from"react/jsx-runtime";function cX4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function K5$({logs:$}){return ys0(lX4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return ys0(To,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return gs0(To,{children:[gs0(To,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),ys0(To,{color:cX4(Z.status),children:Z.status}),gs0(To,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var W5$=()=>{};var hs0={};$0(hs0,{App:()=>iX4});import{Box as mX4}from"ink";import{useSyncExternalStore as dX4}from"react";import{jsx as H5$,jsxs as pX4}from"react/jsx-runtime";function iX4({home:$}){let Z=dX4(Cs0,Ss0);return pX4(mX4,{flexDirection:"column",children:[H5$(J5$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),H5$(K5$,{logs:Z.logs})]})}var us0=D(()=>{G5$();W5$();dz()});var TG="thread-gate",yN="decopilot-hosted-harness",gN="decopilot-hosted-harness-sandboxed",RG="automations",iD="background-tools",pz="task-board-github-reads";var F5$="11";function U5$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:F5$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var N5$=()=>{};import nX4 from"pg";async function O5$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=tX4}=$,Y=$.log??((W)=>console.log(W)),J=new nX4.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",[B5$.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-G>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await O$(oX4)}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)",[B5$.toString()])}catch{}await J.end().catch(()=>{})}}var B5$=8314027461559302n,tX4=600000,oX4=500;var D5$=D(()=>{i$()});function rX4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function ls0($,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 L5$(){let $=rX4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:ls0($,"--cpu-prof-dir")??process.cwd(),name:ls0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(ls0($,"--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 w5$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=hz();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(()=>{}),jJ0=setInterval(()=>void Z().catch(()=>{}),$),jJ0.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(jJ0)clearInterval(jJ0)}}var jJ0;var j5$=()=>{};import*as aX4 from"bun:jsc";function E5$(){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{sX4()}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=eX4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var sX4,eX4;var z5$=D(()=>{({startSamplingProfiler:sX4,samplingProfilerStackTraces:eX4}=aX4)});function P5$(){L5$();let $=[w5$(),U1$(),E5$()];return()=>{for(let Z of $)Z()}}var A5$=D(()=>{gn0();j5$();z5$()});var nz=v((T5$)=>{Object.defineProperty(T5$,"__esModule",{value:!0});T5$.RepublishHeaders=T5$.DirectMsgHeaders=T5$.JsHeaders=T5$.AdvisoryKind=void 0;T5$.isOrderedPushConsumerOptions=$Y4;T5$.isPullConsumer=ZY4;T5$.isPushConsumer=QY4;T5$.isBoundPushConsumerOptions=XY4;function $Y4($){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 ZY4($){return $.isPullConsumer()}function QY4($){return $.isPushConsumer()}function XY4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}T5$.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"};T5$.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"};T5$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};T5$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var sJ=v((q5$)=>{Object.defineProperty(q5$,"__esModule",{value:!0});q5$.TD=q5$.TE=q5$.Empty=void 0;q5$.encode=NY4;q5$.decode=BY4;q5$.Empty=new Uint8Array(0);q5$.TE=new TextEncoder;q5$.TD=new TextDecoder;function UY4(...$){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 NY4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(q5$.TE.encode($[Q]));if(Z.length===0)return q5$.Empty;if(Z.length===1)return Z[0];return UY4(...Z)}function BY4($){if(!$||$.length===0)return"";return q5$.TD.decode($)}});var eJ=v((V5$)=>{Object.defineProperty(V5$,"__esModule",{value:!0});V5$.errors=V5$.PermissionViolationError=V5$.NoRespondersError=V5$.TimeoutError=V5$.RequestError=V5$.ProtocolError=V5$.ConnectionError=V5$.DrainingConnectionError=V5$.ClosedConnectionError=V5$.AuthorizationError=V5$.UserAuthenticationExpiredError=V5$.InvalidOperationError=V5$.InvalidArgumentError=V5$.InvalidSubjectError=void 0;class ms0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}V5$.InvalidSubjectError=ms0;class EJ0 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 EJ0(`${$} ${Z}`,Q)}}V5$.InvalidArgumentError=EJ0;class ds0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}V5$.InvalidOperationError=ds0;class zJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new zJ0($);return null}}V5$.UserAuthenticationExpiredError=zJ0;class PJ0 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 PJ0($);return null}}V5$.AuthorizationError=PJ0;class is0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}V5$.ClosedConnectionError=is0;class ps0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}V5$.DrainingConnectionError=ps0;class ns0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}V5$.ConnectionError=ns0;class ts0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}V5$.ProtocolError=ts0;class os0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof AJ0}}V5$.RequestError=os0;class rs0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}V5$.TimeoutError=rs0;class AJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}V5$.NoRespondersError=AJ0;class TJ0 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 TJ0($,Q,X,Y)}}V5$.PermissionViolationError=TJ0;V5$.errors={AuthorizationError:PJ0,ClosedConnectionError:is0,ConnectionError:ns0,DrainingConnectionError:ps0,InvalidArgumentError:EJ0,InvalidOperationError:ds0,InvalidSubjectError:ms0,NoRespondersError:AJ0,PermissionViolationError:TJ0,ProtocolError:ts0,RequestError:os0,TimeoutError:rs0,UserAuthenticationExpiredError:zJ0}});var QW=v((v5$)=>{Object.defineProperty(v5$,"__esModule",{value:!0});v5$.SimpleMutex=v5$.Perf=void 0;v5$.extend=SY4;v5$.render=CY4;v5$.timeout=_Y4;v5$.delay=vY4;v5$.deadline=xY4;v5$.deferred=ss0;v5$.debugDeferred=fY4;v5$.shuffle=bY4;v5$.collect=yY4;v5$.jitter=_5$;v5$.backoff=gY4;v5$.nanos=hY4;v5$.millis=uY4;v5$.randomToken=mY4;var kY4=sJ(),as0=eJ();function SY4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function CY4($){return kY4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function _Y4($,Z=!0){let Q=Z?new as0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new as0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function vY4($=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 xY4($,Z=1000){let Q=ss0(),X=setTimeout(()=>{Q.reject(new as0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function ss0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function fY4(){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 bY4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function yY4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class S5${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})}),$}}v5$.Perf=S5$;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 $=ss0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}v5$.SimpleMutex=C5$;function _5$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function gY4($=[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 _5$(Q>Z?$[Z]:$[Q])}}}function hY4($){return $*1e6}function uY4($){return Math.floor($/1e6)}var lY4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",hN=new Uint8Array(62);for(let $=0;$<62;$++)hN[$]=lY4.charCodeAt($);var cY4=218340105584896;function mY4(){let $=Math.floor(Math.random()*cY4),Z=$%62,Q=hN[Z];$=($-Z)/62,Z=$%62;let X=hN[Z];$=($-Z)/62,Z=$%62;let Y=hN[Z];$=($-Z)/62,Z=$%62;let J=hN[Z];$=($-Z)/62,Z=$%62;let G=hN[Z];$=($-Z)/62,Z=$%62;let K=hN[Z];$=($-Z)/62,Z=$%62;let W=hN[Z];$=($-Z)/62;let H=hN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var l5$=v((h5$)=>{Object.defineProperty(h5$,"__esModule",{value:!0});h5$.nuid=h5$.NuidImpl=void 0;var JJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",pD=62,qJ0=12,y5$=10,f5$=33,GJ4=333,b5$=qJ0+y5$,$e0=new Uint8Array(pD);for(let $=0;$<pD;$++)$e0[$]=JJ4.charCodeAt($);var RJ0=4294967296,g5$=BigInt(pD)**BigInt(y5$),Ro=Number(g5$/(1n<<32n)),es0=Number(g5$%(1n<<32n));function KJ4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function WJ4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else KJ4($)}class Ze0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(b5$),this.cbuf=new Uint8Array(qJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Ro+1)),this.seqLo=Math.floor(Math.random()*RJ0);while($++<8&&this.seqHi===Ro&&this.seqLo>=es0);if(this.seqHi===Ro&&this.seqLo>=es0)this.seqLo=0;this.inc=Math.random()*(GJ4-f5$)+f5$|0}setPre(){WJ4(this.cbuf);for(let $=0;$<qJ0;$++)this.buf[$]=$e0[this.cbuf[$]%pD]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=b5$-1;Q>=qJ0;Q--){let X=Math.floor($/pD),J=($-X*pD)*RJ0+Z,G=Math.floor(J/pD),K=J-G*pD;this.buf[Q]=$e0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=RJ0)this.seqLo-=RJ0,this.seqHi+=1;if(this.seqHi>Ro||this.seqHi===Ro&&this.seqLo>=es0)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()}}h5$.NuidImpl=Ze0;h5$.nuid=new Ze0});var i5$=v((m5$)=>{Object.defineProperty(m5$,"__esModule",{value:!0});m5$.nuid=m5$.Nuid=void 0;var c5$=l5$();m5$.Nuid=c5$.NuidImpl;m5$.nuid=c5$.nuid});var IJ0=v((MJ0)=>{Object.defineProperty(MJ0,"__esModule",{value:!0});MJ0.nuid=MJ0.Nuid=void 0;var p5$=i5$();Object.defineProperty(MJ0,"Nuid",{enumerable:!0,get:function(){return p5$.Nuid}});Object.defineProperty(MJ0,"nuid",{enumerable:!0,get:function(){return p5$.nuid}})});var nD=v((n5$)=>{Object.defineProperty(n5$,"__esModule",{value:!0});n5$.DEFAULT_HOST=n5$.DEFAULT_PORT=n5$.Match=void 0;n5$.syncIterator=OJ4;n5$.createInbox=DJ4;var NJ4=IJ0(),BJ4=eJ();n5$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function OJ4($){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 DJ4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw BJ4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${NJ4.nuid.next()}`}n5$.DEFAULT_PORT=4222;n5$.DEFAULT_HOST="127.0.0.1"});var qo=v((a5$)=>{Object.defineProperty(a5$,"__esModule",{value:!0});a5$.DataBuffer=void 0;var o5$=sJ();class r5${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 o5$.TE.encode($)}static toAscii($){return o5$.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}}a5$.DataBuffer=r5$});var tz=v(($9$)=>{Object.defineProperty($9$,"__esModule",{value:!0});$9$.LF=$9$.CR=$9$.CRLF=$9$.CR_LF_LEN=$9$.CR_LF=void 0;$9$.setTransportFactory=TJ4;$9$.defaultPort=RJ4;$9$.getUrlParseFn=qJ4;$9$.newTransport=MJ4;$9$.getResolveFn=IJ4;$9$.protoLen=e5$;$9$.extractProtocolMessage=VJ4;var zJ4=sJ(),PJ4=nD(),AJ4=qo(),$3;function TJ4($){$3=$}function RJ4(){return $3!==void 0&&$3.defaultPort!==void 0?$3.defaultPort:PJ4.DEFAULT_PORT}function qJ4(){return $3!==void 0&&$3.urlParseFn?$3.urlParseFn:void 0}function MJ4(){if(!$3||typeof $3.factory!=="function")throw Error("transport fn is not set");return $3.factory()}function IJ4(){return $3!==void 0&&$3.dnsResolveFn?$3.dnsResolveFn:void 0}$9$.CR_LF=`\r
|
|
2079
|
+
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;mD({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)mD({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function fX4($){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 Ao(Number(Y)+1):await Ao(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await OJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)mz({name:L.name,status:"ready",port:L.port});zo();let F=xX4(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)vs0(N.stdout),vs0(N.stderr);Po(J),mz({name:"Vite",status:"ready",port:Number(Y)}),mz({name:"API",status:"ready",port:Number(K.port)});let O=async(L)=>{if(N.kill(L),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (DY0(),OY0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:N}}var fs0=D(()=>{Vs0();dz();_s0()});var wJ0;var bs0=D(()=>{wJ0={name:"decocms",version:"4.371.3",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 yX4,Text as $5$}from"ink";import{jsx as gX4,jsxs as Z5$}from"react/jsx-runtime";function Q5$({version:$}){return Z5$(yX4,{flexDirection:"column",marginTop:1,children:[gY0.map((Z,Q)=>gX4($5$,{color:hY0[Q],children:Z},Q)),Z5$($5$,{dimColor:!0,children:[" v",$]})]})}var X5$=D(()=>{Jo()});import{Box as iz,Text as dD}from"ink";import{Spinner as hX4}from"@inkjs/ui";import{jsx as aJ,jsxs as Wu}from"react/jsx-runtime";function Y5$({status:$}){if($==="pending")return aJ(hX4,{label:""});return aJ(dD,{color:"green",children:"\u2713"})}function uX4($){return`${$.name}: ${$.port||"...."}`}function J5$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Wu(iz,{flexDirection:"column",paddingBottom:1,children:[aJ(Q5$,{version:wJ0.version}),aJ(iz,{marginBottom:1,children:aJ(dD,{dimColor:!0,children:"\u2500".repeat(80)})}),aJ(iz,{children:Wu(dD,{dimColor:!0,children:["Home: ",Q]})}),Wu(iz,{gap:2,children:[$.map((Y)=>Wu(iz,{gap:1,children:[aJ(dD,{children:uX4(Y)}),aJ(Y5$,{status:Y.status})]},Y.name)),Wu(iz,{gap:1,children:[aJ(dD,{children:"Migrations"}),aJ(Y5$,{status:Z})]})]}),aJ(iz,{children:X?Wu(dD,{children:["Open in browser: ",aJ(dD,{color:"cyan",children:X})]}):aJ(dD,{dimColor:!0,children:"Starting..."})})]})}var G5$=D(()=>{bs0();X5$()});import{Box as lX4,Text as To}from"ink";import{jsx as ys0,jsxs as gs0}from"react/jsx-runtime";function cX4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function K5$({logs:$}){return ys0(lX4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return ys0(To,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return gs0(To,{children:[gs0(To,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),ys0(To,{color:cX4(Z.status),children:Z.status}),gs0(To,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var W5$=()=>{};var hs0={};$0(hs0,{App:()=>iX4});import{Box as mX4}from"ink";import{useSyncExternalStore as dX4}from"react";import{jsx as H5$,jsxs as pX4}from"react/jsx-runtime";function iX4({home:$}){let Z=dX4(Cs0,Ss0);return pX4(mX4,{flexDirection:"column",children:[H5$(J5$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),H5$(K5$,{logs:Z.logs})]})}var us0=D(()=>{G5$();W5$();dz()});var TG="thread-gate",yN="decopilot-hosted-harness",gN="decopilot-hosted-harness-sandboxed",RG="automations",iD="background-tools",pz="task-board-github-reads";var F5$="11";function U5$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:F5$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var N5$=()=>{};import nX4 from"pg";async function O5$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=tX4}=$,Y=$.log??((W)=>console.log(W)),J=new nX4.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",[B5$.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-G>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await O$(oX4)}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)",[B5$.toString()])}catch{}await J.end().catch(()=>{})}}var B5$=8314027461559302n,tX4=600000,oX4=500;var D5$=D(()=>{i$()});function rX4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function ls0($,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 L5$(){let $=rX4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:ls0($,"--cpu-prof-dir")??process.cwd(),name:ls0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(ls0($,"--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 w5$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=hz();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(()=>{}),jJ0=setInterval(()=>void Z().catch(()=>{}),$),jJ0.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(jJ0)clearInterval(jJ0)}}var jJ0;var j5$=()=>{};import*as aX4 from"bun:jsc";function E5$(){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{sX4()}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=eX4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var sX4,eX4;var z5$=D(()=>{({startSamplingProfiler:sX4,samplingProfilerStackTraces:eX4}=aX4)});function P5$(){L5$();let $=[w5$(),U1$(),E5$()];return()=>{for(let Z of $)Z()}}var A5$=D(()=>{gn0();j5$();z5$()});var nz=v((T5$)=>{Object.defineProperty(T5$,"__esModule",{value:!0});T5$.RepublishHeaders=T5$.DirectMsgHeaders=T5$.JsHeaders=T5$.AdvisoryKind=void 0;T5$.isOrderedPushConsumerOptions=$Y4;T5$.isPullConsumer=ZY4;T5$.isPushConsumer=QY4;T5$.isBoundPushConsumerOptions=XY4;function $Y4($){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 ZY4($){return $.isPullConsumer()}function QY4($){return $.isPushConsumer()}function XY4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}T5$.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"};T5$.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"};T5$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};T5$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var sJ=v((q5$)=>{Object.defineProperty(q5$,"__esModule",{value:!0});q5$.TD=q5$.TE=q5$.Empty=void 0;q5$.encode=NY4;q5$.decode=BY4;q5$.Empty=new Uint8Array(0);q5$.TE=new TextEncoder;q5$.TD=new TextDecoder;function UY4(...$){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 NY4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(q5$.TE.encode($[Q]));if(Z.length===0)return q5$.Empty;if(Z.length===1)return Z[0];return UY4(...Z)}function BY4($){if(!$||$.length===0)return"";return q5$.TD.decode($)}});var eJ=v((V5$)=>{Object.defineProperty(V5$,"__esModule",{value:!0});V5$.errors=V5$.PermissionViolationError=V5$.NoRespondersError=V5$.TimeoutError=V5$.RequestError=V5$.ProtocolError=V5$.ConnectionError=V5$.DrainingConnectionError=V5$.ClosedConnectionError=V5$.AuthorizationError=V5$.UserAuthenticationExpiredError=V5$.InvalidOperationError=V5$.InvalidArgumentError=V5$.InvalidSubjectError=void 0;class ms0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}V5$.InvalidSubjectError=ms0;class EJ0 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 EJ0(`${$} ${Z}`,Q)}}V5$.InvalidArgumentError=EJ0;class ds0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}V5$.InvalidOperationError=ds0;class zJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new zJ0($);return null}}V5$.UserAuthenticationExpiredError=zJ0;class PJ0 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 PJ0($);return null}}V5$.AuthorizationError=PJ0;class is0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}V5$.ClosedConnectionError=is0;class ps0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}V5$.DrainingConnectionError=ps0;class ns0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}V5$.ConnectionError=ns0;class ts0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}V5$.ProtocolError=ts0;class os0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof AJ0}}V5$.RequestError=os0;class rs0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}V5$.TimeoutError=rs0;class AJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}V5$.NoRespondersError=AJ0;class TJ0 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 TJ0($,Q,X,Y)}}V5$.PermissionViolationError=TJ0;V5$.errors={AuthorizationError:PJ0,ClosedConnectionError:is0,ConnectionError:ns0,DrainingConnectionError:ps0,InvalidArgumentError:EJ0,InvalidOperationError:ds0,InvalidSubjectError:ms0,NoRespondersError:AJ0,PermissionViolationError:TJ0,ProtocolError:ts0,RequestError:os0,TimeoutError:rs0,UserAuthenticationExpiredError:zJ0}});var QW=v((v5$)=>{Object.defineProperty(v5$,"__esModule",{value:!0});v5$.SimpleMutex=v5$.Perf=void 0;v5$.extend=SY4;v5$.render=CY4;v5$.timeout=_Y4;v5$.delay=vY4;v5$.deadline=xY4;v5$.deferred=ss0;v5$.debugDeferred=fY4;v5$.shuffle=bY4;v5$.collect=yY4;v5$.jitter=_5$;v5$.backoff=gY4;v5$.nanos=hY4;v5$.millis=uY4;v5$.randomToken=mY4;var kY4=sJ(),as0=eJ();function SY4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function CY4($){return kY4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function _Y4($,Z=!0){let Q=Z?new as0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new as0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function vY4($=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 xY4($,Z=1000){let Q=ss0(),X=setTimeout(()=>{Q.reject(new as0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function ss0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function fY4(){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 bY4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function yY4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class S5${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})}),$}}v5$.Perf=S5$;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 $=ss0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}v5$.SimpleMutex=C5$;function _5$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function gY4($=[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 _5$(Q>Z?$[Z]:$[Q])}}}function hY4($){return $*1e6}function uY4($){return Math.floor($/1e6)}var lY4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",hN=new Uint8Array(62);for(let $=0;$<62;$++)hN[$]=lY4.charCodeAt($);var cY4=218340105584896;function mY4(){let $=Math.floor(Math.random()*cY4),Z=$%62,Q=hN[Z];$=($-Z)/62,Z=$%62;let X=hN[Z];$=($-Z)/62,Z=$%62;let Y=hN[Z];$=($-Z)/62,Z=$%62;let J=hN[Z];$=($-Z)/62,Z=$%62;let G=hN[Z];$=($-Z)/62,Z=$%62;let K=hN[Z];$=($-Z)/62,Z=$%62;let W=hN[Z];$=($-Z)/62;let H=hN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var l5$=v((h5$)=>{Object.defineProperty(h5$,"__esModule",{value:!0});h5$.nuid=h5$.NuidImpl=void 0;var JJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",pD=62,qJ0=12,y5$=10,f5$=33,GJ4=333,b5$=qJ0+y5$,$e0=new Uint8Array(pD);for(let $=0;$<pD;$++)$e0[$]=JJ4.charCodeAt($);var RJ0=4294967296,g5$=BigInt(pD)**BigInt(y5$),Ro=Number(g5$/(1n<<32n)),es0=Number(g5$%(1n<<32n));function KJ4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function WJ4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else KJ4($)}class Ze0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(b5$),this.cbuf=new Uint8Array(qJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Ro+1)),this.seqLo=Math.floor(Math.random()*RJ0);while($++<8&&this.seqHi===Ro&&this.seqLo>=es0);if(this.seqHi===Ro&&this.seqLo>=es0)this.seqLo=0;this.inc=Math.random()*(GJ4-f5$)+f5$|0}setPre(){WJ4(this.cbuf);for(let $=0;$<qJ0;$++)this.buf[$]=$e0[this.cbuf[$]%pD]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=b5$-1;Q>=qJ0;Q--){let X=Math.floor($/pD),J=($-X*pD)*RJ0+Z,G=Math.floor(J/pD),K=J-G*pD;this.buf[Q]=$e0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=RJ0)this.seqLo-=RJ0,this.seqHi+=1;if(this.seqHi>Ro||this.seqHi===Ro&&this.seqLo>=es0)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()}}h5$.NuidImpl=Ze0;h5$.nuid=new Ze0});var i5$=v((m5$)=>{Object.defineProperty(m5$,"__esModule",{value:!0});m5$.nuid=m5$.Nuid=void 0;var c5$=l5$();m5$.Nuid=c5$.NuidImpl;m5$.nuid=c5$.nuid});var IJ0=v((MJ0)=>{Object.defineProperty(MJ0,"__esModule",{value:!0});MJ0.nuid=MJ0.Nuid=void 0;var p5$=i5$();Object.defineProperty(MJ0,"Nuid",{enumerable:!0,get:function(){return p5$.Nuid}});Object.defineProperty(MJ0,"nuid",{enumerable:!0,get:function(){return p5$.nuid}})});var nD=v((n5$)=>{Object.defineProperty(n5$,"__esModule",{value:!0});n5$.DEFAULT_HOST=n5$.DEFAULT_PORT=n5$.Match=void 0;n5$.syncIterator=OJ4;n5$.createInbox=DJ4;var NJ4=IJ0(),BJ4=eJ();n5$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function OJ4($){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 DJ4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw BJ4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${NJ4.nuid.next()}`}n5$.DEFAULT_PORT=4222;n5$.DEFAULT_HOST="127.0.0.1"});var qo=v((a5$)=>{Object.defineProperty(a5$,"__esModule",{value:!0});a5$.DataBuffer=void 0;var o5$=sJ();class r5${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 o5$.TE.encode($)}static toAscii($){return o5$.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}}a5$.DataBuffer=r5$});var tz=v(($9$)=>{Object.defineProperty($9$,"__esModule",{value:!0});$9$.LF=$9$.CR=$9$.CRLF=$9$.CR_LF_LEN=$9$.CR_LF=void 0;$9$.setTransportFactory=TJ4;$9$.defaultPort=RJ4;$9$.getUrlParseFn=qJ4;$9$.newTransport=MJ4;$9$.getResolveFn=IJ4;$9$.protoLen=e5$;$9$.extractProtocolMessage=VJ4;var zJ4=sJ(),PJ4=nD(),AJ4=qo(),$3;function TJ4($){$3=$}function RJ4(){return $3!==void 0&&$3.defaultPort!==void 0?$3.defaultPort:PJ4.DEFAULT_PORT}function qJ4(){return $3!==void 0&&$3.urlParseFn?$3.urlParseFn:void 0}function MJ4(){if(!$3||typeof $3.factory!=="function")throw Error("transport fn is not set");return $3.factory()}function IJ4(){return $3!==void 0&&$3.dnsResolveFn?$3.dnsResolveFn:void 0}$9$.CR_LF=`\r
|
|
2080
2080
|
`;$9$.CR_LF_LEN=$9$.CR_LF.length;$9$.CRLF=AJ4.DataBuffer.fromAscii($9$.CR_LF);$9$.CR=new Uint8Array($9$.CRLF)[0];$9$.LF=new Uint8Array($9$.CRLF)[1];function e5$($){for(let Z=0;Z<$.length;Z++){let Q=Z+1;if($.byteLength>Q&&$[Z]===$9$.CR&&$[Q]===$9$.LF)return Q+1}return 0}function VJ4($){let Z=e5$($);if(Z>0){let X=new Uint8Array($).slice(0,Z);return zJ4.TD.decode(X)}return""}});var Ge0=v((W9$)=>{Object.defineProperty(W9$,"__esModule",{value:!0});W9$.ipV4=J9$;W9$.isIP=hJ4;W9$.parseIP=G9$;var Mo=4,oz=16,VJ0=48,Y9$=57,Q9$=65,yJ4=70,X9$=97,gJ4=102,Je0=16777215;function J9$($,Z,Q,X){let Y=new Uint8Array(oz);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 hJ4($){return G9$($)!==void 0}function G9$($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return K9$($);case":":return uJ4($)}return}function K9$($){let Z=new Uint8Array(Mo);for(let Q=0;Q<Mo;Q++){if($.length===0)return;if(Q>0){if($[0]!==".")return;$=$.substring(1)}let{n:X,c:Y,ok:J}=lJ4($);if(!J||X>255)return;$=$.substring(Y),Z[Q]=X}return J9$(Z[0],Z[1],Z[2],Z[3])}function uJ4($){let Z=new Uint8Array(oz),Q=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(Q=0,$=$.substring(2),$.length===0)return Z}let X=0;while(X<oz){let{n:Y,c:J,ok:G}=cJ4($);if(!G||Y>65535)return;if(J<$.length&&$[J]==="."){if(Q<0&&X!=oz-Mo)return;if(X+Mo>oz)return;let K=K9$($);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+=Mo;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<oz){if(Q<0)return;let Y=oz-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 lJ4($){let Z=0,Q=0;for(Z=0;Z<$.length&&VJ0<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=Y9$;Z++)if(Q=Q*10+($.charCodeAt(Z)-VJ0),Q>=Je0)return{n:Je0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:Q,c:Z,ok:!0}}function cJ4($){let Z=0,Q=0;for(Q=0;Q<$.length;Q++){if(VJ0<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=Y9$)Z*=16,Z+=$.charCodeAt(Q)-VJ0;else if(X9$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=gJ4)Z*=16,Z+=$.charCodeAt(Q)-X9$+10;else if(Q9$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=yJ4)Z*=16,Z+=$.charCodeAt(Q)-Q9$+10;else break;if(Z>=Je0)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 Ne0=v((F9$)=>{Object.defineProperty(F9$,"__esModule",{value:!0});F9$.Servers=F9$.ServerImpl=void 0;F9$.isIPV4OrHostname=H9$;F9$.hostPort=Ue0;var Ke0=tz(),We0=QW(),He0=Ge0(),pJ4=nD(),nJ4=eJ();function H9$($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Fe0($){return!H9$($)}function tJ4($){let Q=$.toUpperCase().indexOf("::FFFF:");if(Q!==-1&&$.indexOf(".")!==-1){let X=$.substring(Q+7);return X=X.replace("[",""),X.replace("]","")}return $}function Ue0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=tJ4($),Fe0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Fe0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),Q=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):pJ4.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 Hu{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let Q=Ue0($);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,He0.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}://${Fe0(X)?"["+X+"]":X}`);J.port=`${this.port}`;let G=new Hu(J.host,!1);G.tlsName=this.hostname,Z.push(G)}}if($.randomize)(0,We0.shuffle)(Z);return this.resolves=Z,Z}}F9$.ServerImpl=Hu;class kJ0{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw nJ4.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,Ke0.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}=Ue0(Y),G=Q.get(J);if(G)G.gossiped=!1,X.push(G);else X.push(new Hu(Y))}if(this.randomize)(0,We0.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,He0.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,Ke0.getUrlParseFn)();$=Q?Q($):$;let X=new Hu($,Z);if((0,He0.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 kJ0.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return kJ0.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,Ke0.getUrlParseFn)(),J=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Hu(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,We0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:Q,deleted:X}}}F9$.Servers=kJ0});var SJ0=v((O9$)=>{Object.defineProperty(O9$,"__esModule",{value:!0});O9$.QueuedIteratorImpl=void 0;var Be0=QW(),N9$=eJ();class B9${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,Be0.deferred)(),this.yields=[],this.iterClosed=(0,Be0.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 N9$.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new N9$.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,Be0.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}}O9$.QueuedIteratorImpl=B9$});var Oe0=v((j9$)=>{Object.defineProperty(j9$,"__esModule",{value:!0});j9$.MuxSubscription=void 0;var sJ4=nD(),L9$=eJ();class w9${baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,sJ4.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 L9$.NoRespondersError(X.requestSubject):null;X.resolver($,Z)}}}}close(){let $=new L9$.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}j9$.MuxSubscription=w9$});var De0=v((P9$)=>{Object.defineProperty(P9$,"__esModule",{value:!0});P9$.Heartbeat=void 0;var eJ4=QW();class z9${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,eJ4.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})}}P9$.Heartbeat=z9$});var je0=v((M9$)=>{Object.defineProperty(M9$,"__esModule",{value:!0});M9$.DenoBuffer=M9$.MAX_SIZE=M9$.AssertionError=void 0;M9$.assert=R9$;M9$.concat=q9$;M9$.append=Z34;M9$.readAll=Q34;M9$.writeAll=X34;var $34=sJ();class Le0 extends Error{constructor($){super($);this.name="AssertionError"}}M9$.AssertionError=Le0;function R9$($,Z="Assertion failed."){if(!$)throw new Le0(Z)}var T9$=32768;M9$.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 q9$($,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 Z34($,Z){return q9$($,Uint8Array.of(Z))}class we0{_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($){R9$($<=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($34.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+$>M9$.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*X+$,M9$.MAX_SIZE));CJ0(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,M9$.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(T9$);while(!0){let X=this.capacity-this.length<T9$,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}}}M9$.DenoBuffer=we0;function Q34($){let Z=new we0;return Z.readFrom($),Z.bytes()}function X34($,Z){let Q=0;while(Q<Z.length)Q+=$.write(Z.subarray(Q))}});var Pe0=v((C9$)=>{Object.defineProperty(C9$,"__esModule",{value:!0});C9$.cc=C9$.State=C9$.Parser=C9$.Kind=void 0;C9$.describe=F34;var Ee0=je0(),ze0=sJ();C9$.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function F34($){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=ze0.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=ze0.TD.decode($.data)}return`${Z}: ${Q}`}function V9$(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var k9$=48,U34=57,Fu=67108864;class S9${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=V9$();break;case C9$.cc.H:case C9$.cc.h:this.state=C9$.State.OP_H,this.hdr=0,this.ma=V9$();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 Ee0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===C9$.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new Ee0.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 Ee0.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],Fu);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],Fu);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}: ${ze0.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],Fu),this.ma.size=this.protoParseInt(Z[3],Fu);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],Fu),this.ma.size=this.protoParseInt(Z[4],Fu);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let Q=0;for(let X=0;X<$.length;X++){if($[X]<k9$||$[X]>U34)return-1;Q=Q*10+($[X]-k9$)}return Z!==void 0&&Q>Z?-1:Q}}C9$.Parser=S9$;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 xJ0=v((v9$)=>{Object.defineProperty(v9$,"__esModule",{value:!0});v9$.MsgHdrsImpl=void 0;v9$.canonicalMIMEHeaderKey=Te0;v9$.headers=O34;var _9$=sJ(),XW=nD(),vJ0=eJ();function Te0($){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 vJ0.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 O34($=0,Z=""){if($===0&&Z!=="")throw vJ0.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw vJ0.InvalidArgumentError.format("description","is required");return new Uu($,Z)}var Ae0="NATS/1.0";class Uu{_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 Uu,X=_9$.TD.decode($).split(`\r
|
|
2081
2081
|
`),Y=X[0];if(Y!==Ae0){let J=Y.replace(Ae0,"").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 $=Ae0;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
|
@@ -3375,7 +3375,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
3375
3375
|
${J.join(`
|
|
3376
3376
|
`)}`:X}function mM6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3377
3377
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var sa$=200,fM6=12,xM6,gM6=300,XI0=3;var LW1=O(()=>{pZ();l$();YI0();xM6={aheadBy:0,behindBy:0,files:[]}});function pM6($){if(!$||$.includes(".."))return!1;return iM6.test($)}function ea$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!pM6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function $e$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var iM6;var Ze$=O(()=>{iM6=/^[\w./@-]+$/});function a10($,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 Ye$($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new iw(iZ);let J=await kL($.storage,X,Y);if(J&&await AN($.storage,J)){let F=await sH($,J,{forceRefresh:!0}).catch((U)=>{throw new iw(U instanceof Error?U.message:iZ)});await Qe$($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new iw("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await nu({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:iZ;throw new iw(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await aH(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=H3$(F instanceof Error?F.message:String(F));throw U?new iw(N):F});await Qe$($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function Qe$($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=yd($),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 eL(K,nM6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var nM6=10485760,iw;var wW1=O(()=>{O3();tM0();fa();KG0();Ss();pZ();iw=class iw extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function oM6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!tM6.test(Z))throw Error(`Invalid branch name: ${$}`)}function sb($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(sM6)])}async function eM6($,Z){let Q=$.var.studioContext,Y=GF(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=Bf(G?.metadata?.runtime);if(W)return W;let K=iz0(Z.virtualMcpMetadata),H=K==="cms"?await r31(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)ba(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 $I6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await iY($.var.studioContext)}catch{return null}}function ab($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function cd($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=a10(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=i(Y);return iu(Y,J.id,X)}function jW1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=yJ$(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=E3(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 Ge$($,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 We$($){try{let Z=await cd($),Q=await JI0(Z,$.get("vmClaim").branch);return $.json(Q,200,R5)}catch(Z){return jW1($,Z)}}function e10($,Z){let Y=(KI0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return KI0.set($,X),X.finally(()=>{if(KI0.get($)===X)KI0.delete($)}),Y}async function I7($,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??ab($);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?ZI6(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 ZI6($){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 HI0($,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 QI6($){return Ke$.includes($)}var tM6,Xe$=524288,rM6=65536,sM6=1e4,Je$=2000,aM6,KI0,R5,Ke$,He$=()=>{let $=new e0;$.use("/:virtualMcpId/:branch/*",aM6),$.post("/:virtualMcpId/:branch/write",(Q)=>I7(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>I7(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>I7(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>I7(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>I7(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>I7(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>I7(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:sb(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 I7(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 I7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>I7(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>I7(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!QI6(Y))return Q.json({error:`step must be one of: ${Ke$.join(", ")}`},400);let X=Q.get("vmClaim"),J=await r31(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await $I6(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=ql(X.virtualMcpMetadata);try{await lz0({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 I7(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 PB(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 Ka$(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 We$(Q);return Z(Q)});let Z=(Q)=>I7(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(Je$)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return We$(Q);return I7(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(Je$)])})}),$.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 cd(Q),G=await GI0(J,Y.branch,X.base);return Q.json(G,200,R5)}catch(X){return jW1(Q,X)}return I7(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=ab(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return e10(X,async()=>{try{await s31(W,Y,X);let K=a10(J,G);if(K)await Ye$(W,Y,X,K)}catch(K){if(K instanceof iw)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 I7(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 e10(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 cd(Q);return await aa$(G,Y.branch,J),Q.json({ok:!0},200,R5)}catch(G){let W=E3(G)===409||G instanceof z6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,R5)}});return e10(Y.claimName,()=>I7(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 e10(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await cd(Q),H=W.base??await K.getDefaultBranch();return await WI0(K,Y.branch,H),Q.json({ok:!0},200,R5)}catch(W){return jW1(Q,W)}});let X=ab(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return e10(J,async()=>{try{await s31(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,R5)}return I7(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",l5({maxSize:Xe$,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=ab(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]=$W1(F)&&N?[F,U]:X?await Promise.all([HI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),HI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await cd(Q);return Promise.all([JI0(w,Y.branch),GI0(w,Y.branch)])})();await kW(K,i(K).id,"suggesting a commit message");let L=await Ba$(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:Xe$,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=ab(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]=$W1(F)&&N?[F,U]:X?await Promise.all([HI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),HI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await cd(Q);return Promise.all([JI0(w,Y.branch),GI0(w,Y.branch)])})();await kW(K,i(K).id,"judging whether a change needs review");let L=await Oa$(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=ab(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 Ge$(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",l5({maxSize:rM6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=ab(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=ea$(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=$e$(J,W.resolveType);return Ge$(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Fe$=O(()=>{y$();_K();xd();o31();Sa();Ja$();R3();Ml();Ga$();WK();jH();Wa$();Ha$();v$1();_a();YW1();La$();pZ();d6();LW1();Ze$();wW1();tM6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;aM6=nM0(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{oM6(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 U11(Q,G),F=N11(H,Y),U=Xa$({userId:F,projectRef:K}),N=W.metadata??null,B=await eM6($,{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()});KI0=new Map;R5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Ke$=["clone","install","start"]});function Ue$($,Z,Q){let Y=EW1.get($);if(!Y)Y={pending:null,running:!1},EW1.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)XI6($,Y);return J}async function XI6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await JI6(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)EW1.delete($)}}async function JI6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await ld(Z,Q),W=await Z.listDecofileEntries(G,Y),K=BW1(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=DW1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3378
|
-
`;await na$(Z.repo,L);let w=D[0]??`${QI0(Y)}/${GW1(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 DW1(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 ta$(Z,F.values(),X),{decofile:B,skipped:D}=n10(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:GI6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof z6)||J>=YI6-1)throw N;await P$(S7(2000,200,J,2,0.5))}}}function GI6($){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 g01(Y,$.deps.coAuthor)}var YI6=3,EW1;var Ne$=O(()=>{bE0();rM0();X6();l$();pZ();YI0();EW1=new Map});import{createHmac as Be$,randomBytes as WI6,timingSafeEqual as KI6}from"crypto";function De$(){if(FI0)return FI0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return FI0=$?Buffer.from($):WI6(32),FI0}function zW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+HI6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Be$("sha256",De$()).update(Y).digest("base64url");return`${Y}.${X}`}function Oe$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Be$("sha256",De$()).update(Y).digest("base64url"));if(X.length!==J.length||!KI6(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 HI6=21600000,FI0=null;var Le$=O(()=>{t1()});import{z as dd}from"zod";function UI6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&FI6.test($)}function Pe$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $$0($){let Z=$.get("decofileScope");return iu($.var.studioContext,Z.organizationId,Z.githubRepo)}function Z$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof z6)return $.json({error:Q},409);let Y=E3(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 Ae$(){let $=new e0;return $.use("/:virtualMcpId/:branch",ze$),$.use("/:virtualMcpId/:branch/*",ze$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $$0(Z),X=await oa$(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=zW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(Pe$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return Z$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 $$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 Z$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",BI6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=DI6.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{oM0(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(JW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $$0(Z),W=await Ue$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:yd(Y)},J),K=zW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:Pe$(Z)})}catch(G){return Z$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $$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(E3(W)!==409)throw W;await WI0(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(E3(G)===409)return Z.json({error:"merge-conflict"},409);if(E3(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 Z$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $$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(E3(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return Z$0(Z,Y)}}),$}var FI6,we$=500,je$=1048576,Ee$=1024,NI6=8388608,BI6,DI6,ze$;var Te$=O(()=>{f$1();rM0();y$();_K();o31();tM0();wW1();pZ();Ne$();Le$();LW1();YI0();jH();FI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;BI6=l5({maxSize:NI6,onError:($)=>$.json({error:"Payload too large"},413)}),DI6=dd.object({set:dd.record(dd.string(),dd.unknown()).optional(),delete:dd.array(dd.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)<=we$,{message:`Patch cannot touch more than ${we$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=je$),{message:`Each block must be at most ${je$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Ee$),{message:`Each block key must be at most ${Ee$} characters`}),ze$=nM0(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(!UI6(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||!Oe$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await sG(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(!mz0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=a10(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 Re$=($)=>{let Z=new e0;if(Z.use("*",Dd),Z.use("*",en$),Z.route("/",YM0()),Z.route("/",bt$()),Z.route("/",Pt$()),Z.route("/",is$()),Z.route("/",xs$()),Z.route("/",cs$()),Z.route("/",gs$()),Z.route("/",mM0()),Z.route("/tools",as$()),Z.route("/",os$()),Z.route("/",Ds$({kvStorage:$.kvStorage})),Z.route("/",Ns$()),Z.route("/fs",Is$({getConnection:$.getNatsConnection})),Z.route("/sandbox",He$()),Z.route("/decofile",Ae$()),Z.route("/",vs$()),Z.route("/",ks$()),Z.route("/deco-sites",JM0()),Z.route("/hosting",Ft$()),Z.route("/monitor",wt$()),Z.route("/sso",aq0()),Z.route("/",iM0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Jt$()),$.mountDevAssets)Z.route("/dev-assets",HM0({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("/",Wi$()),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",Cs$()),Z.route("/mcp",pA0()),Z.route("/mcp/self",lM0()),Z.route("/mcp",oA0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var qe$=O(()=>{y$();$t$();lq0();Gt$();LG1();Ut$();jt$();FM0();hb();UG1();PG1();Bs$();Os$();Vs$();Ss$();Ce();JG1();rA0();u31();_s$();fs$();ys$();hs$();d31();ps$();rs$();m31();es$();i31();nA0();Fe$();Te$()});function OI6($){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 LI6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Me$=()=>{let $=new e0;return $.use("*",LI6),$.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:OI6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ie$=O(()=>{y$();t1();cR0()});import{z as V1}from"zod";function iF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function MI6($){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 II6($,Z,Q){try{return JSON.parse($)}catch{throw new Se$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function VI6($){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:II6(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 kI6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?SJ(Q.function.parameters):SJ({type:"object",properties:{}});return[Q.function.name,X$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function SI6($){if(!$)return;return{openai:{response_format:$}}}function CI6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ve$($,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 ke$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var wI6=256,jI6,EI6,zI6,PI6,AI6,TI6,RI6,qI6,Se$,Ce$,_e$;var ve$=O(()=>{b4();y$();xd();EK();jI6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),EI6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),zI6=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(EI6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),PI6=V1.object({type:V1.literal("text")}),AI6=V1.object({type:V1.literal("json_object")}),TI6=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()})}),RI6=V1.union([PI6,AI6,TI6]),qI6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(zI6),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(jI6).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:RI6.optional(),user:V1.string().optional()});Se$=class Se$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ce$=new e0;Ce$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(iF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(iF("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(iF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=qI6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(iF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=MI6(J.model);if(!G)return $.json(iF("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)=>ZE(E.providerId));if(!j)return $.json(iF("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(iF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=VI6(J.messages),N=J.tools?kI6(J.tools):void 0,B=SI6(J.response_format),D=CI6(),L=Math.floor(Date.now()/1000);if(J.stream)return PB($,async(w)=>{let j=Ve$(F,U,N,J,B,$.req.raw.signal);try{let E=rL(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>=wI6)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:ke$(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=Ve$(F,U,N,J,B,$.req.raw.signal),j=await tL(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:ke$(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(iF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(iF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(iF(X.message,"server_error"),500)}});_e$=Ce$});function _I6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function fe$(){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(EJ0(U)!==J)continue;if(!_I6(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 be$=O(()=>{y$();L3()});var ye$;var xe$=O(()=>{ye$={name:"decocms",version:"4.371.2",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 bI6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??fI6}}var ge$,fI6="https://ph.studio.decocms.com",he$;var ue$=O(()=>{y$();Xr();gf();k5();t1();iJ1();xe$();ge$=new e0;ge$.get("/",($)=>{let Z={version:ye$.version,theme:L5$(),...iW().logo&&{logo:iW().logo},...pN()&&{internalUrl:sg1()},...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:$n$(),posthog:bI6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:IB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});he$=ge$});function md($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function PW1($){return(md($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function ce$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(md($))}&sz=${Z}`}function le$($,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 de$($){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()?le$(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):le$(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var eb,xI6,yI6,gI6,hI6,me$;var ie$=O(()=>{eb=m0.enum(["good","bad","neutral"]),xI6=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:eb.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 $})),yI6=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(xI6)),gI6={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()},hI6=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:eb.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:eb.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:eb.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:eb.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(yI6).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:eb.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:eb.optional()})).min(1)})]),me$=m0.object({...gI6,template:hI6})});function UI0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=me$.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 AW1=O(()=>{ie$()});import{join as pe$}from"path";async function lI6($){try{let Z=await fetch(`${bH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(uI6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=UI0(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()||PW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function EG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function cI6($,Z){let Q=md($),Y=Z?.brand?.trim()||PW1(Q),X=ce$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=de$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${EG(W)}</title>`,`<meta name="description" content="${EG(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="${EG(W)}" />`,`<meta property="og:description" content="${EG(K)}" />`,`<meta property="og:url" content="${EG(G)}" />`,`<meta property="og:image" content="${EG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${EG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${EG(W)}" />`,`<meta name="twitter:description" content="${EG(K)}" />`,`<meta name="twitter:image" content="${EG(H)}" />`,`<meta name="twitter:image:alt" content="${EG(F)}" />`,`<link rel="canonical" href="${EG(G)}" />`,`<link rel="icon" href="${EG(X)}" sizes="any" />`].join(`
|
|
3378
|
+
`;await na$(Z.repo,L);let w=D[0]??`${QI0(Y)}/${GW1(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 DW1(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 ta$(Z,F.values(),X),{decofile:B,skipped:D}=n10(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:GI6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof z6)||J>=YI6-1)throw N;await P$(S7(2000,200,J,2,0.5))}}}function GI6($){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 g01(Y,$.deps.coAuthor)}var YI6=3,EW1;var Ne$=O(()=>{bE0();rM0();X6();l$();pZ();YI0();EW1=new Map});import{createHmac as Be$,randomBytes as WI6,timingSafeEqual as KI6}from"crypto";function De$(){if(FI0)return FI0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return FI0=$?Buffer.from($):WI6(32),FI0}function zW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+HI6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Be$("sha256",De$()).update(Y).digest("base64url");return`${Y}.${X}`}function Oe$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Be$("sha256",De$()).update(Y).digest("base64url"));if(X.length!==J.length||!KI6(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 HI6=21600000,FI0=null;var Le$=O(()=>{t1()});import{z as dd}from"zod";function UI6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&FI6.test($)}function Pe$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $$0($){let Z=$.get("decofileScope");return iu($.var.studioContext,Z.organizationId,Z.githubRepo)}function Z$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof z6)return $.json({error:Q},409);let Y=E3(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 Ae$(){let $=new e0;return $.use("/:virtualMcpId/:branch",ze$),$.use("/:virtualMcpId/:branch/*",ze$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $$0(Z),X=await oa$(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=zW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(Pe$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return Z$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 $$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 Z$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",BI6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=DI6.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{oM0(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(JW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $$0(Z),W=await Ue$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:yd(Y)},J),K=zW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:Pe$(Z)})}catch(G){return Z$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $$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(E3(W)!==409)throw W;await WI0(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(E3(G)===409)return Z.json({error:"merge-conflict"},409);if(E3(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 Z$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $$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(E3(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return Z$0(Z,Y)}}),$}var FI6,we$=500,je$=1048576,Ee$=1024,NI6=8388608,BI6,DI6,ze$;var Te$=O(()=>{f$1();rM0();y$();_K();o31();tM0();wW1();pZ();Ne$();Le$();LW1();YI0();jH();FI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;BI6=l5({maxSize:NI6,onError:($)=>$.json({error:"Payload too large"},413)}),DI6=dd.object({set:dd.record(dd.string(),dd.unknown()).optional(),delete:dd.array(dd.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)<=we$,{message:`Patch cannot touch more than ${we$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=je$),{message:`Each block must be at most ${je$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Ee$),{message:`Each block key must be at most ${Ee$} characters`}),ze$=nM0(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(!UI6(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||!Oe$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await sG(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(!mz0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=a10(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 Re$=($)=>{let Z=new e0;if(Z.use("*",Dd),Z.use("*",en$),Z.route("/",YM0()),Z.route("/",bt$()),Z.route("/",Pt$()),Z.route("/",is$()),Z.route("/",xs$()),Z.route("/",cs$()),Z.route("/",gs$()),Z.route("/",mM0()),Z.route("/tools",as$()),Z.route("/",os$()),Z.route("/",Ds$({kvStorage:$.kvStorage})),Z.route("/",Ns$()),Z.route("/fs",Is$({getConnection:$.getNatsConnection})),Z.route("/sandbox",He$()),Z.route("/decofile",Ae$()),Z.route("/",vs$()),Z.route("/",ks$()),Z.route("/deco-sites",JM0()),Z.route("/hosting",Ft$()),Z.route("/monitor",wt$()),Z.route("/sso",aq0()),Z.route("/",iM0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Jt$()),$.mountDevAssets)Z.route("/dev-assets",HM0({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("/",Wi$()),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",Cs$()),Z.route("/mcp",pA0()),Z.route("/mcp/self",lM0()),Z.route("/mcp",oA0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var qe$=O(()=>{y$();$t$();lq0();Gt$();LG1();Ut$();jt$();FM0();hb();UG1();PG1();Bs$();Os$();Vs$();Ss$();Ce();JG1();rA0();u31();_s$();fs$();ys$();hs$();d31();ps$();rs$();m31();es$();i31();nA0();Fe$();Te$()});function OI6($){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 LI6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Me$=()=>{let $=new e0;return $.use("*",LI6),$.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:OI6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var Ie$=O(()=>{y$();t1();cR0()});import{z as V1}from"zod";function iF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function MI6($){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 II6($,Z,Q){try{return JSON.parse($)}catch{throw new Se$(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function VI6($){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:II6(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 kI6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?SJ(Q.function.parameters):SJ({type:"object",properties:{}});return[Q.function.name,X$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function SI6($){if(!$)return;return{openai:{response_format:$}}}function CI6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ve$($,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 ke$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var wI6=256,jI6,EI6,zI6,PI6,AI6,TI6,RI6,qI6,Se$,Ce$,_e$;var ve$=O(()=>{b4();y$();xd();EK();jI6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),EI6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),zI6=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(EI6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),PI6=V1.object({type:V1.literal("text")}),AI6=V1.object({type:V1.literal("json_object")}),TI6=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()})}),RI6=V1.union([PI6,AI6,TI6]),qI6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(zI6),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(jI6).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:RI6.optional(),user:V1.string().optional()});Se$=class Se$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Ce$=new e0;Ce$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(iF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(iF("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(iF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=qI6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(iF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=MI6(J.model);if(!G)return $.json(iF("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)=>ZE(E.providerId));if(!j)return $.json(iF("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(iF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=VI6(J.messages),N=J.tools?kI6(J.tools):void 0,B=SI6(J.response_format),D=CI6(),L=Math.floor(Date.now()/1000);if(J.stream)return PB($,async(w)=>{let j=Ve$(F,U,N,J,B,$.req.raw.signal);try{let E=rL(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>=wI6)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:ke$(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=Ve$(F,U,N,J,B,$.req.raw.signal),j=await tL(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:ke$(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(iF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(iF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(iF(X.message,"server_error"),500)}});_e$=Ce$});function _I6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function fe$(){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(EJ0(U)!==J)continue;if(!_I6(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 be$=O(()=>{y$();L3()});var ye$;var xe$=O(()=>{ye$={name:"decocms",version:"4.371.3",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 bI6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??fI6}}var ge$,fI6="https://ph.studio.decocms.com",he$;var ue$=O(()=>{y$();Xr();gf();k5();t1();iJ1();xe$();ge$=new e0;ge$.get("/",($)=>{let Z={version:ye$.version,theme:L5$(),...iW().logo&&{logo:iW().logo},...pN()&&{internalUrl:sg1()},...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:$n$(),posthog:bI6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:IB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});he$=ge$});function md($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function PW1($){return(md($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function ce$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(md($))}&sz=${Z}`}function le$($,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 de$($){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()?le$(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):le$(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var eb,xI6,yI6,gI6,hI6,me$;var ie$=O(()=>{eb=m0.enum(["good","bad","neutral"]),xI6=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:eb.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 $})),yI6=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(xI6)),gI6={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()},hI6=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:eb.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:eb.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:eb.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:eb.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(yI6).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:eb.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:eb.optional()})).min(1)})]),me$=m0.object({...gI6,template:hI6})});function UI0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=me$.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 AW1=O(()=>{ie$()});import{join as pe$}from"path";async function lI6($){try{let Z=await fetch(`${bH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(uI6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=UI0(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()||PW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function EG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function cI6($,Z){let Q=md($),Y=Z?.brand?.trim()||PW1(Q),X=ce$(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=de$({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${EG(W)}</title>`,`<meta name="description" content="${EG(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="${EG(W)}" />`,`<meta property="og:description" content="${EG(K)}" />`,`<meta property="og:url" content="${EG(G)}" />`,`<meta property="og:image" content="${EG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${EG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${EG(W)}" />`,`<meta name="twitter:description" content="${EG(K)}" />`,`<meta name="twitter:image" content="${EG(H)}" />`,`<meta name="twitter:image:alt" content="${EG(F)}" />`,`<link rel="canonical" href="${EG(G)}" />`,`<link rel="icon" href="${EG(X)}" sizes="any" />`].join(`
|
|
3379
3379
|
`)}function dI6($,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}
|
|
3380
3380
|
</head>`)}function ne$($){let Z=new e0;return Z.get("/:domain/og.png",async(Q)=>{let Y=md(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(pe$($,"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(mI6)}),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=$?pe$($,"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 lI6(md(Y)),K=cI6(Y,W);return Q.html(dI6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var uI6=2500,mI6=1e4;var te$=O(()=>{y$();AW1();cz();t1()});function Q$0($,Z){return fetch(`${bH({})}${$}`,Z)}async function iI6($,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 Q$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}=UI0(G);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:G.scanned_at,drops:K}}var pI6,TB,oe$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},re$;var se$=O(()=>{y$();oJ();cz();AW1();pI6=new Set(["complete","errored","terminated","unknown"]),TB=new e0;TB.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});TB.use("/link-token/*",oe$);TB.use("/suggest",oe$);TB.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 iI6(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)}});TB.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 Q$0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${lz({})}`},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)}});TB.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await Q$0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${lz({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:pI6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});TB.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await Q$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)}});TB.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await Q$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:[]})}});re$=TB});var nI6=1048576,TW1;var ae$=O(()=>{y$();_K();t1();SJ1();TW1=new e0;TW1.post("/webhook",l5({maxSize:nI6,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(!Np$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=Bp$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await Dp$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as tI6}from"crypto";function sI6($,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 tI6(Buffer.from(X),Buffer.from(Y))}function aI6($,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 ee$($){let Z=new e0;return Z.post("/webhook",l5({maxSize:oI6,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(!sI6(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"&&!rI6.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 K11())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=aI6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await eI6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function eI6($,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 SA$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var oI6=5242880,rI6;var $08=O(()=>{y$();_K();WK();rZ();rI6=new Set(["check_suite","issue_comment"])});function Z08($){let Z=new UB($.db,new AY($.encryptionKey)),Q=new e0;return Q.get("/attachments/:token",async(Y)=>{let X=sz$(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 KG(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 Q08=O(()=>{y$();DD();G81();Pf()});function Y08($){let Z=new UB($.db,new AY($.encryptionKey));async function Q(X,J){let G=dh$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await k3($.db,W.organizationId);if(!K)return;if(await mR0(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:$V6}),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 $V6=1048576;var X08=O(()=>{y$();_K();DD();iR0();kf()});import{DBOS as NI0,SchedulerMode as ZV6}from"@dbos-inc/dbos-sdk";function G08($){qW1=$}function W08(){if(!qW1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return qW1}function K08(){let $=W08();return new UB($.db,new AY($.encryptionKey))}async function XV6($,Z){try{let Q=await K08().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await k3(W08().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 KG(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${J08}m"`,K=0,H;for(let F=0;F<YV6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=mh$(N,N.changelog?.histories??[],Z);for(let D of B)if(await mR0(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 JV6($,Z){let Q=new Date($.getTime()-J08*60000),Y=await NI0.runStep(()=>K08().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>NI0.runStep(()=>XV6(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 H08(){if(RW1)return;RW1=NI0.registerWorkflow(JV6,{name:"jiraTriggerSweepWorkflow"}),NI0.registerScheduled(RW1,{name:"jiraTriggerSweepWorkflow",crontab:QV6,mode:ZV6.ExactlyOncePerIntervalWhenActive})}var QV6="7-59/10 * * * *",J08=15,YV6=5,qW1=null,RW1=null;var F08=O(()=>{DD();kf();Pf();iR0()});function U08($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var N08,GV6,WV6,B08;var D08=O(()=>{y$();mW();ll();rz();N08=new e0,GV6=["range","if-none-match","if-modified-since"],WV6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];N08.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Bd($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new J$(401,{message:"Authentication required"})}if(!Q)throw new J$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new J$(400,{message:"Missing file key"});let X=await Ke(Y,Z);if(!X)throw new J$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&_X()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new J$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return U08(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of GV6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new J$(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new J$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of WV6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),U08(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});B08=N08});var Y$0=_(($x)=>{var KV6=$x&&$x.__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]}),HV6=$x&&$x.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))KV6(Z,$,Q)};Object.defineProperty($x,"__esModule",{value:!0});HV6(OJ(),$x)});var w08=_((O08)=>{Object.defineProperty(O08,"__esModule",{value:!0});O08.version=void 0;O08.version="3.4.0"});var z08=_((pF)=>{var FV6=pF&&pF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(pF,"__esModule",{value:!0});pF.NodeTransport=pF.VERSION=void 0;pF.nodeResolveHost=LV6;var L5=Y$0(),UV6=A0("net"),MW1=A0("tls"),NV6=A0("path"),j08=A0("fs"),BV6=FV6(A0("dns")),DV6=w08();pF.VERSION=DV6.version;var OV6="nats.js";class E08{socket;version;lang;yields=[];signal=(0,L5.deferred)();closedNotification=(0,L5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=OV6,this.version=pF.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,L5.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 L5.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 L5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new L5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,L5.deferred)(),Q,Y=(0,UV6.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,L5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=L5.DataBuffer.concat(...this.yields),X=(0,L5.extractProtocolMessage)(Y);if(X!=="")try{let J=L5.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,L5.deferred)();try{if($=(0,NV6.resolve)($),!(0,j08.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,j08.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,L5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new L5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,L5.deferred)();try{let X=(0,MW1.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 L5.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,L5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new L5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,L5.deferred)();try{let Y=(0,MW1.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 L5.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,L5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,L5.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 MW1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,L5.render)($)}`);let Z=(0,L5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,L5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,L5.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}}pF.NodeTransport=E08;function LV6($){let Z=(0,L5.deferred)();return BV6.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 q08=_((R08)=>{Object.defineProperty(R08,"__esModule",{value:!0});R08.connect=wV6;var P08=z08(),A08=Y$0(),T08=Y$0();function wV6($={}){if((0,T08.hasWsProtocol)($))return Promise.reject(T08.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,A08.setTransportFactory)({factory:()=>{return new P08.NodeTransport},dnsResolveFn:P08.nodeResolveHost}),A08.NatsConnectionImpl.connect($)}});var M08=_((RB)=>{var EV6=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]}),zV6=RB&&RB.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))EV6(Z,$,Q)};Object.defineProperty(RB,"__esModule",{value:!0});RB.connect=void 0;var PV6=q08();Object.defineProperty(RB,"connect",{enumerable:!0,get:function(){return PV6.connect}});zV6(Y$0(),RB)});function S08($){let Z=$?.connectFn??qV6,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:RV6,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=S7(TV6,AV6,D-1,2,0.5);await P$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?I08.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=k08.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 qV6($){return V08.connect($)}var I08,V08,k08,AV6=100,TV6=3000,RV6=3000;var C08=O(()=>{l$();I08=V(Om(),1),V08=V(M08(),1),k08=V(QU(),1)});function IW1($,Z){return`${$}.${Z}`}class VW1{cache;constructor($){this.cache=Qd({ttlMs:$?.ttlMs??MV6,maxSize:$?.maxSize??IV6})}async get($,Z){return this.cache.get(IW1($,Z))??null}async set($,Z,Q){this.cache.set(IW1($,Z),Q)}async invalidate($,Z){this.cache.delete(IW1($,Z))}teardown(){this.cache.clear()}}var MV6=600000,IV6=5000;var _08=()=>{};function BI0($,Z){return`${$}:${Z}`}function kW1($){let Z=Qd({ttlMs:$?.ttlMs??VV6,maxSize:$?.maxSize??kV6}),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(v08,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(BI0(K,H))},set(K,H,F){Z.set(BI0(K,H),F)},invalidate(K,H){Z.delete(BI0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(v08),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(BI0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var v08="studio.ai-provider-keys.invalidate",VV6=30000,kV6=5000;var f08=()=>{};class SW1{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 b08=($)=>{let Z;return()=>Z??=$()},CW1,_W1;var x08=O(()=>{W6();CW1=b08(()=>Q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),_W1=b08(()=>Q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function xV6($=h08){return{name:EF,subjects:[`${Q61}.>`],storage:bK.StorageType.File,max_age:_V6,max_bytes:fV6,max_msgs_per_subject:bV6,discard:bK.DiscardPolicy.Old,retention:bK.RetentionPolicy.Limits,duplicate_window:vV6,num_replicas:$}}class u08{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 y08($){let Z=g08.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function uV6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,CV6().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 lV6($,Z){return $.info?.cluster?Z:1}function cV6($){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 vW1{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=xV6(X);try{await Y.streams.info(EF),await Y.streams.update(EF,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(EF,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(EF),await Y.streams.add(J);else throw G}},Q=await N8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await bK.jetstreamManager($),X=lV6($,h08);try{await Z(Y,X)}catch(J){if(X<=1||!cV6(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=uV6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=NR$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=X61(H,{runId:Z}),N=performance.now()-F;CW1().record(N),_W1().add(1,{"org.id":Y??"unknown"}),hV6?.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?y08(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(),gV6)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 N8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:y08(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=X61(Z,{runId:$,dedup:Q});CW1().record(performance.now()-X),_W1().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=UR$({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=Fw($),W;try{W=await N8(async()=>{return(await Y.consumers.get(EF,{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=jA0({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(DA0()).pipeThrough(OA0()).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(EF,{filter:Fw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var bK,g08,SV6=($)=>{let Z;return()=>Z??=$()},CV6,_V6=86400000000000,vV6=120000000000,fV6=4294967296,h08,bV6=500000,yV6,gV6,hV6;var l08=O(()=>{l$();J61();EA0();LA0();W6();x08();bK=V(QU(),1),g08=V(Om(),1),CV6=SV6(()=>Q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),h08=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);yV6=process.env.STREAM_ENCODE_TRACE==="1",gV6=process.env.DECOPILOT_STREAM_TRACE==="1";hV6=yV6?new u08:null});function DI0($,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 c08=O(()=>{q8()});class fW1{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 dV6($,Z){let Q=$.startsWith("thread:")?KK($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function d08($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await WF($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await Fl($,{threadId:X,runBranch:G?.branch}),K=dV6(W,await mE0($,X)),H=await Ms($,Q,xa0(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 S3(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 m08=O(()=>{pZ();R3();rZ()});async function i08($,Z,Q){let Y=Z.organizationId;if(!rX(Z))return!1;if(!If(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=tH(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 p08=O(()=>{A4();$Y();xl();OK();$9()});function rV6($){return $ instanceof yY}function sV6($,Z){return Z-$>=tV6}class bW1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??mV6;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??pV6,Q=this.options.itemIntervalMs??iV6,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()-$81),N41);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()-oV6));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 H41(this.taskBoard,X,Y),await F41(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),rV6(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()+nV6)).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(!sV6(DN(Q,Z.reviewCycleStartedAt),Date.now()))return;await LF($,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 d08(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 gl(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 i08(G,Y,W))return!0;if(await Qq$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!J41(W))return!1;return await CP0(G,Y,{previewMatchesHead:G41(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await Jw($,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 mV6=60000,iV6=300000,pV6=50,nV6=60000,tV6=900000,oV6=120000;var n08=O(()=>{A4();n81();m08();wF();Ee();OK();p08();$9();j3();B41();rZ();Xe();yl()});import{readdir as aV6,rm as OI0}from"fs/promises";import{join as LI0}from"path";async function wI0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-eV6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Zx($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await t08($,X,Z);else if(!X.startsWith(".")){let J=LI0($,X),G=await Zx(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await t08(J,K,Z)}if((await Zx(J)).length===0)await OI0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function t08($,Z,Q){let Y=0,X=LI0($,Z),J=await Zx(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=LI0(X,W),H=await Zx(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=LI0(K,U);await OI0(B,{recursive:!0,force:!0}),Y++}}if((await Zx(K)).length===0)await OI0(K,{recursive:!0,force:!0})}if((await Zx(X)).length===0)await OI0(X,{recursive:!0,force:!0});return Y}async function Zx($){try{return(await aV6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var eV6=30;var xW1=()=>{};import{DBOS as yW1,SchedulerMode as $k6}from"@dbos-inc/dbos-sdk";async function Qk6(){let $=[n3(),Qx(),oF()],Z=0;for(let Q of $)try{Z+=await wI0(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 Yk6($,Z){await yW1.runStep(()=>Qk6(),{name:"monitoringRetention"})}function r08(){if(o08)return;o08=!0;let $=yW1.registerWorkflow(Yk6,{name:"monitoringRetentionWorkflow"});yW1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Zk6,mode:$k6.ExactlyOncePerIntervalWhenActive})}var Zk6="23 4 * * *",o08=!1;var s08=O(()=>{RG();xW1()});function a08($){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=AJ1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new YE(Q,void 0,X.boundAuth,Y.role,"self"),Gw(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var e08=O(()=>{OW();mH()});function Xk6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Jk6(){return{services:Xk6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Wk6(){for(let $ of Gk6)$()}function $18($){let Z=[...gW1.logs,$];gW1={...gW1,logs:Z.length>500?Z.slice(-500):Z},Wk6()}function hW1(){return Kk6}var gW1,Gk6,Kk6=!1;var uW1=O(()=>{gW1=Jk6(),Gk6=new Set});import{EventEmitter as Hk6}from"events";var lW1;var Z18=O(()=>{uW1();lW1=new Hk6;lW1.on("request",($)=>{$18($)})});function Q18(){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=id(N.params.name),D=N.params.arguments||{},L=Object.keys(D).map((j)=>id(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}${id(N.method)}${q5.reset}`}}catch{}}let W=id(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${q5.mcp}${id(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=Uk6(Y),H=G?"\u25C0":"\u2190";if(!hW1())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=Fk6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";if(!hW1())console.log(`${q5.dim}${D}${q5.reset} ${K}${Y}${q5.reset} ${W}${J?` ${J}`:""} ${N}${U}${q5.reset} ${q5.duration}${B}${q5.reset}`);lW1.emit("request",{method:Y,path:id(X),status:U,duration:F,timestamp:new Date})}}}var q5,Fk6=($)=>{if($>=500)return q5.serverError;if($>=400)return q5.clientError;if($>=300)return q5.redirect;return q5.ok},Uk6=($)=>{return q5[$]||q5.reset},id=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Y18=O(()=>{uW1();Z18();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 W18}from"crypto";import{mkdir as Nk6,readdir as Bk6,rm as X18,stat as K18}from"fs/promises";import{join as dW1,relative as Dk6}from"path";import{z as V$}from"zod";function F18($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return dW1(Ok6,Z)}function U18($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function cW1($,Z){let Q=F18($),Y=U18(Z);return dW1(Q,Y)}function Lk6($,Z,Q,Y){let X=O0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return W18("sha256",X).update(J).digest("hex")}function G18($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=Lk6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${U18(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function N18($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${W18("md5","etag").update(Y).digest("hex")}"`}async function B18($,Z,Q,Y,X){try{let J=await Bk6($,{withFileTypes:!0});for(let G of J){let W=dW1($,G.name),H=Dk6(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 B18(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 K18(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:N18(W,F.mtime,F.size)})}catch{}}}}catch{}}function D18($,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=F18(Y);await Nk6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await B18(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=cW1(Y,J.key),W=await K18(G);return{contentType:EG1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:N18(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??J18;return{url:G18(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??J18;return{url:G18(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=cW1(Y,J.key);try{return await X18(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=cW1(Y,K);try{await X18(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function mW1($,Z,Q){let Y=D18(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),x3(X,J,$,"mcp:dev-assets")}async function O18($,Z,Q,Y){let J=D18(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 Ok6="./data/assets",J18=3600,H18,L18;var w18=O(()=>{t1();Xc();y$();zt();ef();hQ();FM0();H18=new e0;H18.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return mW1($.req.raw,Z,Y)});L18=H18});var j18={};q4(j18,{mountDevRoutes:()=>wk6});function wk6($,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 mW1(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 O18(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",L18);let Q=new e0;Q.use("*",vK({mountPath:"/api/dev-assets"})),Q.route("/",HM0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var E18=O(()=>{y$();NG1();FM0();w18()});import{sql as jk6}from"kysely";import{randomUUID as z18}from"crypto";import{z as Ek6}from"zod";async function Pk6($){let Z=new Date().toISOString(),Q=z18(),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:z18(),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 jk6`SELECT
|
|
3381
3381
|
pg_notify('studio_events', ${Q}),
|