decocms 4.315.0 → 4.315.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-Bej7VpQB.js → AlertCircle-B9iqSZjA.js} +1 -1
- package/dist/client/assets/{AreaChart-D74stNX8.js → AreaChart-U_J7EXKa.js} +1 -1
- package/dist/client/assets/{ArrowLeft-D32tzw1j.js → ArrowLeft-DCSYN70a.js} +1 -1
- package/dist/client/assets/{ArrowUp-BUO-DQ_5.js → ArrowUp-DjJEV5Af.js} +1 -1
- package/dist/client/assets/{Check-B9BXJyjP.js → Check-B6dbygmc.js} +1 -1
- package/dist/client/assets/{CheckCircle-K-2uFmnf.js → CheckCircle-D9Bfy3in.js} +1 -1
- package/dist/client/assets/{ChevronDown-CibOAPkj.js → ChevronDown-BoRLejVN.js} +1 -1
- package/dist/client/assets/{ChevronRight-Dk63i-bY.js → ChevronRight-BhMmOwxR.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-DP1B9xmi.js → ChevronSelectorVertical-wM_csfJu.js} +1 -1
- package/dist/client/assets/{ChevronUp-uoqbJNUa.js → ChevronUp-Bm_2Z9UI.js} +1 -1
- package/dist/client/assets/{Copy01-DTYCMLsv.js → Copy01-CPYFCxPN.js} +1 -1
- package/dist/client/assets/{CreditCard01-Df6seLnX.js → CreditCard01-DLDxNK9N.js} +1 -1
- package/dist/client/assets/{DotsVertical-BNlDBik3.js → DotsVertical-DHnUM3Ag.js} +1 -1
- package/dist/client/assets/{Download01-m3LM8kPc.js → Download01-BHVRik-N.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-QA2qP1MX.js → ErrorBarContext-C1f5MJZl.js} +1 -1
- package/dist/client/assets/{Eye-CB0taZNN.js → Eye-CYzkKphY.js} +1 -1
- package/dist/client/assets/{FilterLines-CwjS3Zh5.js → FilterLines-CYBasK--.js} +1 -1
- package/dist/client/assets/{GitBranch01-DvgFXEvj.js → GitBranch01-Bk6awbht.js} +1 -1
- package/dist/client/assets/{Globe01-Bz6nWs5t.js → Globe01-Dtdv5XNf.js} +1 -1
- package/dist/client/assets/{Globe04-BKZm7NZh.js → Globe04-B9iFJH7H.js} +1 -1
- package/dist/client/assets/{HardDrive-D8YqEXCA.js → HardDrive-CngebUKA.js} +1 -1
- package/dist/client/assets/{Image01-BwqMsrGA.js → Image01-DtaQXGGb.js} +1 -1
- package/dist/client/assets/{Key01-pCeqHsdV.js → Key01-DeyJNvC0.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DVNDnb4r.js → LinkExternal01-Cj7TNB1E.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-jKzwuttY.js → LockUnlocked01-DvDHS9My.js} +1 -1
- package/dist/client/assets/{LogOut01-IfQGZUz1.js → LogOut01-DvZclhh5.js} +1 -1
- package/dist/client/assets/{Monitor01-DQGIQKPB.js → Monitor01-Cnf_itKW.js} +1 -1
- package/dist/client/assets/{Package-BJFyO9X8.js → Package-CvyiH1Jk.js} +1 -1
- package/dist/client/assets/{Palette-CHp50KTK.js → Palette-BpUn8pFh.js} +1 -1
- package/dist/client/assets/{Play-CP7NuEh2.js → Play-rBEC0olb.js} +1 -1
- package/dist/client/assets/{Plus-DQNoCqec.js → Plus-BJDwaGxw.js} +1 -1
- package/dist/client/assets/{SearchLg-DqH4hrjK.js → SearchLg-Dq24cELH.js} +1 -1
- package/dist/client/assets/{SearchMd-jLr9qO5x.js → SearchMd-_p7JDjAn.js} +1 -1
- package/dist/client/assets/{Sector-B_Z4X2JB.js → Sector-DO2BFbsD.js} +1 -1
- package/dist/client/assets/{Settings02-QlyaNN7o.js → Settings02-D7QiEpqw.js} +1 -1
- package/dist/client/assets/{Share07-DQHlE1cH.js → Share07-CnGJRtz3.js} +1 -1
- package/dist/client/assets/{Shield01-DBAziydT.js → Shield01-Bh0WAw94.js} +1 -1
- package/dist/client/assets/{Stars01-CzjRHMuS.js → Stars01-DoZMsfAd.js} +1 -1
- package/dist/client/assets/{Stars02-CSnwfk4T.js → Stars02-CC7CpQQr.js} +1 -1
- package/dist/client/assets/{Sun-COKwhR22.js → Sun-DKKms5fg.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-hEGX7d4h.js → SwitchHorizontal01-XASGBInl.js} +1 -1
- package/dist/client/assets/{Tool01-BAW-sIAT.js → Tool01-xFh-prfM.js} +1 -1
- package/dist/client/assets/{Tool02-DLsmC3Yu.js → Tool02-Bh0OKLg_.js} +1 -1
- package/dist/client/assets/{Trash01-CTp8cuOY.js → Trash01-CyAS8yN9.js} +1 -1
- package/dist/client/assets/{TrendUp01-B6W9C9wE.js → TrendUp01-DQQM7VfU.js} +1 -1
- package/dist/client/assets/{Upload01-B6G5nPhB.js → Upload01-CI3l1j5K.js} +1 -1
- package/dist/client/assets/{User01-BPPt6N8K.js → User01-BKn-1rhf.js} +1 -1
- package/dist/client/assets/{UserSquare-COva4WYR.js → UserSquare-CPNK-7kp.js} +1 -1
- package/dist/client/assets/{Users01-SXcjHXZH.js → Users01-CDHPg_BR.js} +1 -1
- package/dist/client/assets/{Users03-D3Mv6wlJ.js → Users03-B3CPj4YH.js} +1 -1
- package/dist/client/assets/{XCircle-Bwj_b3BU.js → XCircle-CUnYNp9t.js} +1 -1
- package/dist/client/assets/{XClose-C7nyvaRr.js → XClose-Co5suZFY.js} +1 -1
- package/dist/client/assets/{YAxis-aQLdu6Ig.js → YAxis-D14eCPgh.js} +1 -1
- package/dist/client/assets/{Zap-BcfUzL9Q.js → Zap-Cuz0JJTW.js} +1 -1
- package/dist/client/assets/{ZapSquare-Dqz1Q5-x.js → ZapSquare-D8NeihJx.js} +1 -1
- package/dist/client/assets/{ZoomOut-zvfcklN3.js → ZoomOut-oNIRMw-_.js} +1 -1
- package/dist/client/assets/{access-gate-DLoxDnmp.js → access-gate-BNXjfmbN.js} +1 -1
- package/dist/client/assets/{agent-icon-XTSaP6I2.js → agent-icon-TebTL1Fq.js} +1 -1
- package/dist/client/assets/{agents-list-CM-gQ_Od.js → agents-list-iovb_HsT.js} +1 -1
- package/dist/client/assets/{ai-providers-HN4rFalQ.js → ai-providers-CVWWmzbb.js} +1 -1
- package/dist/client/assets/{alert-CzOoZhTC.js → alert-VaNiYHVV.js} +1 -1
- package/dist/client/assets/{alert-dialog-f0ZctJ3t.js → alert-dialog-BJPkSQV_.js} +1 -1
- package/dist/client/assets/{analytics-tab-CV_STTr4.js → analytics-tab-DcdjJp-h.js} +1 -1
- package/dist/client/assets/{api-keys-B98RUPf0.js → api-keys-Ca7Fx1_h.js} +1 -1
- package/dist/client/assets/{app-editor-Bq5_zK07.js → app-editor-CEgMvumu.js} +1 -1
- package/dist/client/assets/{auth-catchall-DESi0X8C.js → auth-catchall-D_JbiBy3.js} +1 -1
- package/dist/client/assets/{auth-entry-F-uxPqEH.js → auth-entry-gAFtFEJz.js} +1 -1
- package/dist/client/assets/{auth-CwvvWXYL.js → auth-p-17aUOC.js} +1 -1
- package/dist/client/assets/{auth-split-layout-JdP-NdS0.js → auth-split-layout-BYddZHpb.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-CVJgyPiH.js → authenticate-and-persist-oauth-C0t-D5OK.js} +1 -1
- package/dist/client/assets/{automation-list-row-pE_WOSIU.js → automation-list-row-C9e094sY.js} +1 -1
- package/dist/client/assets/{automation-runs-C7IXBgBK.js → automation-runs-DNeWhU89.js} +1 -1
- package/dist/client/assets/{automations-TFKxaCMz.js → automations-CtoLbQIz.js} +1 -1
- package/dist/client/assets/{avatar-B985UcxB.js → avatar-Bp9vOJYe.js} +1 -1
- package/dist/client/assets/{badge-Cb0gTzGf.js → badge-D8SfxMGo.js} +1 -1
- package/dist/client/assets/{block-document-B07ynLnG.js → block-document-C1ahiUMt.js} +1 -1
- package/dist/client/assets/{breadcrumb-D0FeT4Gz.js → breadcrumb-B0M7unus.js} +1 -1
- package/dist/client/assets/{buckets-CJ0PnbiH.js → buckets-nSfHsRgY.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-DMhClv7m.js → bulk-category-panel-DBZ1sJjE.js} +1 -1
- package/dist/client/assets/{capability-load-error-DavE7mT9.js → capability-load-error-Bx4C6yb8.js} +1 -1
- package/dist/client/assets/{cards-Dv5mxo8O.js → cards-BQ88yBAd.js} +1 -1
- package/dist/client/assets/{category-editor-BDM0kwWE.js → category-editor-CfGd4l6f.js} +1 -1
- package/dist/client/assets/{cdn-tab-Bhn1ywIS.js → cdn-tab-Eb-DedtA.js} +1 -1
- package/dist/client/assets/{chart-D4FP60-7.js → chart-DwwEMQzF.js} +1 -1
- package/dist/client/assets/{chat-context-CBscVdHR.js → chat-context-C6C68xTk.js} +1 -1
- package/dist/client/assets/{checkbox-DLRB2HfI.js → checkbox-Dm6qr1Hi.js} +1 -1
- package/dist/client/assets/{choose-editor-BF74DQ5M.js → choose-editor-DJKIQisT.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DpV400ci.js → cli-auth-success-C49BQg7Y.js} +1 -1
- package/dist/client/assets/{collection-detail-DTN_ZlUR.js → collection-detail-IGfHtbMr.js} +1 -1
- package/dist/client/assets/{collection-display-button-CUAw2G0Z.js → collection-display-button-CuzlYhKW.js} +1 -1
- package/dist/client/assets/{collection-search-wFM8jJIo.js → collection-search-BaETrfi6.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-C4bLQLKy.js → collection-table-wrapper-DOceYEwi.js} +1 -1
- package/dist/client/assets/{collection-tabs-EC5xFfxN.js → collection-tabs-DSJW8Cb7.js} +1 -1
- package/dist/client/assets/{command-DHAE7emh.js → command-BzPOaNYO.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-D3mgIpMf.js → commerce-onboarding-BXBUfdQ3.js} +1 -1
- package/dist/client/assets/{config-DIqgphbv.js → config-YEC2VeJ9.js} +1 -1
- package/dist/client/assets/{connect-0s6NnjJE.js → connect-BrgOP4Tn.js} +1 -1
- package/dist/client/assets/{connection-Dod_Gy98.js → connection-D6vcWvwV.js} +1 -1
- package/dist/client/assets/{connection-card-BtymHbjN.js → connection-card-0pcPk5ml.js} +1 -1
- package/dist/client/assets/{connection-detail-DP57lKd-.js → connection-detail-DwKwRoFq.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-DTw0VjrD.js → connection-form-helpers-_PNzz4tU.js} +1 -1
- package/dist/client/assets/{connections-BDEdpwz_.js → connections-DRHOHZar.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-CtZUYHIf.js → decopilot-sse-pool-C5cgKp0v.js} +1 -1
- package/dist/client/assets/{dialog-Bmqdtohz.js → dialog-Bm054UHY.js} +1 -1
- package/dist/client/assets/{domain-settings-CVauxY_-.js → domain-settings-BzHGw1Vk.js} +1 -1
- package/dist/client/assets/{drawer-Dc2htMdI.js → drawer-BptOYWU-.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DAMxhrzZ.js → dropdown-menu-y8yI_BSd.js} +1 -1
- package/dist/client/assets/{e2e-tab-DVLUvs8z.js → e2e-tab-B-SaABOb.js} +1 -1
- package/dist/client/assets/{editor-DOrG6VPf.js → editor-D3vDZIxX.js} +1 -1
- package/dist/client/assets/{empty-state-Bnp00NAZ.js → empty-state-D9OQcECu.js} +1 -1
- package/dist/client/assets/{empty-state-BiAzFFwa.js → empty-state-DL7sSMiX.js} +1 -1
- package/dist/client/assets/{extract-connection-data-28dQrkJJ.js → extract-connection-data-BCgLC1c_.js} +1 -1
- package/dist/client/assets/{file-explorer-DlaOjcqw.js → file-explorer-DiekmvhP.js} +1 -1
- package/dist/client/assets/{file-type-icon-Ccl-fcJp.js → file-type-icon-CbcA3z1H.js} +1 -1
- package/dist/client/assets/{folder-icon-CO7kM5K4.js → folder-icon-DRb-Vg9T.js} +1 -1
- package/dist/client/assets/{form-BVEQOkXa.js → form-CjYeoa4f.js} +1 -1
- package/dist/client/assets/{general-B_sJn3iD.js → general-C7gk9ulg.js} +1 -1
- package/dist/client/assets/{github-repo-picker-KO1A9w2J.js → github-repo-picker-BJfB5G15.js} +1 -1
- package/dist/client/assets/{hooks-CHhTa1g3.js → hooks-B4apGCdp.js} +1 -1
- package/dist/client/assets/{hosting-tab-Dq68j-Co.js → hosting-tab-BQvd8hF5.js} +1 -1
- package/dist/client/assets/{index-DvjKkLVm.js → index-BEGO8mhu.js} +1 -1
- package/dist/client/assets/{index-CtjyamYR.js → index-BpW8UaeV.js} +1 -1
- package/dist/client/assets/{index-Db-DlpL8.js → index-Bqy1zgv7.js} +1 -1
- package/dist/client/assets/{index-DGs-iBNT.js → index-C1zZgyxH.js} +1 -1
- package/dist/client/assets/{index-g6MjGW_V.js → index-CC17nyby.js} +1 -1
- package/dist/client/assets/{index-CsY1TF9W.js → index-CFoccU6r.js} +3 -3
- package/dist/client/assets/{index-CBaTpVoA.js → index-MI6Jlwzp.js} +1 -1
- package/dist/client/assets/{index-ilTUza0C.js → index-S4CTLP_q.js} +7 -7
- package/dist/client/assets/{index-redirect-DGenLaU9.js → index-redirect-DpBgM8di.js} +1 -1
- package/dist/client/assets/{index-Dyra9YpE.js → index-zse_W76g.js} +1 -1
- package/dist/client/assets/{infra-billing-DV5Yy6Ky.js → infra-billing-Dp-i6NXr.js} +1 -1
- package/dist/client/assets/{input-C2LQkzgM.js → input-_s8u0Xwx.js} +1 -1
- package/dist/client/assets/{integration-icon-Bd-TxQ28.js → integration-icon-Cml6xEGe.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-thun3Tzx.js → invite-member-dialog-CTk-06aq.js} +1 -1
- package/dist/client/assets/{label-DDomnkh5.js → label-dXS_9fvw.js} +1 -1
- package/dist/client/assets/{layout-DfMF9PEd.js → layout-DV5lqQBh.js} +1 -1
- package/dist/client/assets/{login-75oG_Gd_.js → login-D8CydGGJ.js} +1 -1
- package/dist/client/assets/{markdown-C7zZMlTi.js → markdown-BISGhtns.js} +1 -1
- package/dist/client/assets/{mcp-oauth-_oCEy3WG.js → mcp-oauth-p-xtIn0v.js} +1 -1
- package/dist/client/assets/{members-CFnI2qWf.js → members-DDdKJNe-.js} +1 -1
- package/dist/client/assets/{monaco-editor-2GYvgTCm.js → monaco-editor-DL_JeWzt.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-ZV7Gaaze.js → monitoring-stats-row-Br94fsjT.js} +1 -1
- package/dist/client/assets/{multi-select-CPlralQu.js → multi-select-CyTOEUPz.js} +1 -1
- package/dist/client/assets/{oauth-callback-Cx3aicjB.js → oauth-callback-CbdU8fKu.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-JuFmrV8x.js → oauth-callback-ai-provider-yJR0IOnY.js} +1 -1
- package/dist/client/assets/{onboarding-icQX21fS.js → onboarding-Wz5q5wiE.js} +1 -1
- package/dist/client/assets/{org-layout-D0pr2rq_.js → org-layout-vhyyANXO.js} +1 -1
- package/dist/client/assets/{organization-choice-F-G1061G.js → organization-choice-BLxQjROd.js} +1 -1
- package/dist/client/assets/{orgs-DRYLpCVe.js → orgs-Bq-jLqnl.js} +1 -1
- package/dist/client/assets/{page-seo-form-CoHPKHow.js → page-seo-form-CUPCrYgq.js} +1 -1
- package/dist/client/assets/{popover-FlxnwnLI.js → popover-e0AmU7mZ.js} +1 -1
- package/dist/client/assets/{post-calendar-Bs11Wcra.js → post-calendar-Cf-cE7oZ.js} +1 -1
- package/dist/client/assets/{post-editor-CCaPavmU.js → post-editor-Balu_0o2.js} +1 -1
- package/dist/client/assets/{primitives-889vcVvP.js → primitives-C9lAcdKk.js} +1 -1
- package/dist/client/assets/{profile-xt4wiDoU.js → profile-DZMw5pBI.js} +1 -1
- package/dist/client/assets/{project-app-view-k3PiOaL8.js → project-app-view-B00U-l4i.js} +1 -1
- package/dist/client/assets/{prompts-JH62LdiR.js → prompts-Clu6ft5e.js} +1 -1
- package/dist/client/assets/record-editor-BUyGkeKP.js +1 -0
- package/dist/client/assets/{redirect-editor-C6qSTuIW.js → redirect-editor-DZwP3wwm.js} +1 -1
- package/dist/client/assets/registry-D-XCN8ug.js +2 -0
- package/dist/client/assets/{registry-layout-DQwiDBXS.js → registry-layout-BH7sqOfO.js} +1 -1
- package/dist/client/assets/{reports-BY2GkVZ5.js → reports-DTK0-OW-.js} +1 -1
- package/dist/client/assets/{require-capability-OmhSpJuE.js → require-capability-CdKDPXXy.js} +1 -1
- package/dist/client/assets/{required-auth-layout-VRB_5_PP.js → required-auth-layout-B0rFzszj.js} +1 -1
- package/dist/client/assets/{reset-password-Q-hOQcow.js → reset-password-8UxpOpDg.js} +1 -1
- package/dist/client/assets/{review-settings-CQ6NXWzj.js → review-settings-DO23OOP7.js} +1 -1
- package/dist/client/assets/{roles-C4JCCd61.js → roles-CLfpguy1.js} +1 -1
- package/dist/client/assets/{scroll-area-GYZwib1R.js → scroll-area-Dc5Kns15.js} +1 -1
- package/dist/client/assets/{search-input-eW5d9e3B.js → search-input-CZYydbZl.js} +1 -1
- package/dist/client/assets/{secrets-B953c7cb.js → secrets-oUeJMxzi.js} +1 -1
- package/dist/client/assets/{sections-editor-BSlgIvOD.js → sections-editor-6X544Y_j.js} +1 -1
- package/dist/client/assets/{select-DP8R6SHe.js → select-R-qOZjk8.js} +1 -1
- package/dist/client/assets/{select-model-CRB8gXuS.js → select-model-DtaqvU3u.js} +1 -1
- package/dist/client/assets/{self-tool-result-w-P_oeg6.js → self-tool-result-CZ4QZJuN.js} +1 -1
- package/dist/client/assets/{seo-editor-D4qBTkDE.js → seo-editor-CkklE6j-.js} +1 -1
- package/dist/client/assets/{settings-layout-CmtjJJHk.js → settings-layout-Djn9szNX.js} +1 -1
- package/dist/client/assets/{shell-controls-B1p5_P9b.js → shell-controls-DA6vFZCt.js} +1 -1
- package/dist/client/assets/{shell-layout-DUVB6L2Q.js → shell-layout-ChraBTKY.js} +1 -1
- package/dist/client/assets/{skill-preview-D3dGbOAx.js → skill-preview-bzw1hlQG.js} +1 -1
- package/dist/client/assets/{skills-BlPWTGg_.js → skills-DwSe6Dbe.js} +1 -1
- package/dist/client/assets/{spinner-XUz-V5Vj.js → spinner-B7G-yp4V.js} +1 -1
- package/dist/client/assets/{sso-BAqlNjV8.js → sso-S2SObYLc.js} +1 -1
- package/dist/client/assets/{store-CGA0TOdo.js → store-CpICp701.js} +1 -1
- package/dist/client/assets/store-registry-Fc7Zmie7.js +2 -0
- package/dist/client/assets/{super-agent-icon-BSOmrM2r.js → super-agent-icon-vT2v4fSL.js} +1 -1
- package/dist/client/assets/{switch-BdDFg-PF.js → switch-BkBXoSg1.js} +1 -1
- package/dist/client/assets/{synced-repos-Byovc6Fm.js → synced-repos-DQEPeafQ.js} +1 -1
- package/dist/client/assets/{table-BbIJ0rmd.js → table-7ZHiR9sG.js} +1 -1
- package/dist/client/assets/{tabs-Dd-0wyNm.js → tabs-zaIEoTdQ.js} +1 -1
- package/dist/client/assets/{task-board-DsG4QtmP.js → task-board-Djh_P50b.js} +1 -1
- package/dist/client/assets/{tasks-u23R5vwL.js → tasks-CwuRdPZi.js} +1 -1
- package/dist/client/assets/{textarea-oNYVtNe9.js → textarea-DyxqZVB5.js} +1 -1
- package/dist/client/assets/{thread-route-BqJg5WGB.js → thread-route-BgGSYvU3.js} +1 -1
- package/dist/client/assets/{toggle-group-IfwP1hdz.js → toggle-group-DGpPcV2M.js} +1 -1
- package/dist/client/assets/{toolbar-BOzGw4xb.js → toolbar-Cs7L84b0.js} +1 -1
- package/dist/client/assets/{track-D92DyZJ9.js → track-ByPT7wnA.js} +1 -1
- package/dist/client/assets/{types-Cz-fNGsN.js → types-B7br9OLI.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DaanRc7k.js → use-ai-providers-ggAxdzau.js} +1 -1
- package/dist/client/assets/{use-api-keys-Z9BEPMW_.js → use-api-keys-wr8uEKHl.js} +1 -1
- package/dist/client/assets/{use-automations-D6udA7L9.js → use-automations-DYmJSeHi.js} +1 -1
- package/dist/client/assets/{use-autosave-IpHgwNbO.js → use-autosave-CzWnlw2M.js} +1 -1
- package/dist/client/assets/{use-connection-BUAx1O6N.js → use-connection-DWYCayzu.js} +1 -1
- package/dist/client/assets/{use-copy-BDjAPexh.js → use-copy-CG6zLeRr.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DSVDEur5.js → use-create-virtual-mcp-Cs-jausE.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-BYLzRqFc.js → use-debounced-autosave-BazLVTrZ.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DbLciHWs.js → use-debounced-value-CQiMvTpW.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-TaikrB10.js → use-decopilot-events-B7M3fS8N.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CAi7cqnV.js → use-delete-connection-BYOV0LeT.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DuZ7igSD.js → use-deployment-admin-2VO8F8Ut.js} +1 -1
- package/dist/client/assets/{use-destination-route-CVs2A1Bf.js → use-destination-route-Dm-Zr_gf.js} +1 -1
- package/dist/client/assets/{use-file-configs-DUhkHH1a.js → use-file-configs-zWi8StdK.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-B-jk_63J.js → use-infinite-scroll-kWb5npwc.js} +1 -1
- package/dist/client/assets/{use-join-requests-BxDq8_zF.js → use-join-requests-C59hhLBx.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-B1hD4ThG.js → use-mcp-auth-status-BlV2Rgj7.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DdX0FtEV.js → use-mcp-client-CVSDdHjn.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BmEzqC6H.js → use-mcp-tools-v46bs5pG.js} +1 -1
- package/dist/client/assets/{use-members-Wdgqxg2j.js → use-members-CovlXcCo.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BWzBrG0-.js → use-navigate-to-agent-DMOTgkQh.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-Cb0fOhA-.js → use-org-auth-client-9jvEkzBV.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-Dz209KTJ.js → use-org-repo-syncs-BLaORbJC.js} +1 -1
- package/dist/client/assets/{use-org-sso-1NXIpqBg.js → use-org-sso-V0rmurP6.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BjyjreNE.js → use-organization-roles-CL_OkuH7.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DVuQjZwy.js → use-organization-settings-rHEGOwp1.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-DysnruF5.js → use-panel-navigate-BLX6VvYc.js} +1 -1
- package/dist/client/assets/{use-registry-connections-7Ja1mN2x.js → use-registry-connections-D-pQBBgR.js} +1 -1
- package/dist/client/assets/{use-secrets-xVUtjKbC.js → use-secrets-Xbb2c-Es.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-50aMcsMG.js → use-section-preview-base-CFiMgNpd.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BY8XAdbp.js → use-status-sounds-1BaJ8Up-.js} +1 -1
- package/dist/client/assets/{use-tags-DmjpcVSb.js → use-tags-B3_MnVVE.js} +1 -1
- package/dist/client/assets/{use-view-mode-Cgllsz30.js → use-view-mode-CRzWQfCY.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DW98QiaY.js → use-virtual-mcp-zLdvq6kA.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BzBOHt5K.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-BAv9lty6.js +1 -0
- package/dist/client/assets/{users-B9Mj-ivo.js → users-Iuf6IE5q.js} +1 -1
- package/dist/client/assets/{variant-calendar-CfO6p8pw.js → variant-calendar-nYfhvxd7.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-B-Lc6LYJ.js → view-mode-toggle-BdvmBFn0.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/record-editor-CnkT1_Yf.js +0 -1
- package/dist/client/assets/registry-Cfm46ZaU.js +0 -2
- package/dist/client/assets/store-registry-DQLVofuj.js +0 -2
- package/dist/client/assets/useInfiniteQuery-BQK6IbnO.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BCfvw7ki.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2978,7 +2978,7 @@ Respond with the structured verdict and a short reason.`,Yd$;var Jd$=D(()=>{c4()
|
|
|
2978
2978
|
${G.join(`
|
|
2979
2979
|
`)}`:Y}function LB6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2980
2980
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var ld$=200,JB6=12,KB6,FB6=300,YX1=3;var GX1=D(()=>{QL();bT0();KB6={aheadBy:0,behindBy:0,files:[]}});function EB6($){if(!$||$.includes(".."))return!1;return wB6.test($)}function dd$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!EB6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function md$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var wB6;var id$=D(()=>{wB6=/^[\w./@-]+$/});function _a($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function pd$($,Z,X,Q){if(!Q.connectionId)throw new kv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new kv(K9);await lO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:K9;throw new kv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await fK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=D9$(F instanceof Error?F.message:String(F));throw N?new kv(U):F}),K=Yl($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await uO(H,jB6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var jB6=10485760,kv;var JX1=D(()=>{HJ();RT0();Pn();ci0();dy();kv=class kv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function PB6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!zB6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Vv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(TB6)])}async function IB6($,Z){let X=$.var.studioContext,Q=WJ(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=kC(J?.metadata?.runtime);if(W)return W;let K=UD0(Z.virtualMcpMetadata),H=K==="cms"?await u71(X,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",N=!!J&&(H==="gone"||H==="alive"&&K==="cms");if(N&&J)sn(X,J.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:H,resolved:F,stamped:N});return F}async function qB6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await WQ($.var.studioContext)}catch{return null}}function Sv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Hl($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=_a(Z,X);if(!Y)throw new h4(404,"AUTH","repo","Project has no GitHub repository");let G=n(Q);return IT0(Q,G.id,Y)}function WX1($,Z){if(Z instanceof kA0)return $.json({error:Z.message},429,{...T5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,T5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,T5)}async function od$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function rd$($){try{let Z=await Hl($),X=await xT0(Z,$.get("vmClaim").branch);return $.json(X,200,T5)}catch(Z){return WX1($,Z)}}function va($,Z){let Q=(hT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return hT0.set($,Y),Y.finally(()=>{if(hT0.get($)===Y)hT0.delete($)}),Q}async function X7($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,T5);let Q=X?.runner??Sv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);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",...T5}})}}let O=await B.text(),L=X?.redactRepoDir?MB6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...T5}})};try{if(F){let B=U();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 U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function MB6($){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 uT0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function kB6($){return sd$.includes($)}var zB6,nd$=524288,AB6=65536,TB6=1e4,td$=2000,RB6,hT0,T5,sd$,ad$=()=>{let $=new K1;$.use("/:virtualMcpId/:branch/*",RB6),$.post("/:virtualMcpId/:branch/write",(X)=>X7(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>X7(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>X7(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>X7(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>X7(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>X7(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>X7(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return X7(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return X7(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>X7(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>X7(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!kB6(Q))return X.json({error:`step must be one of: ${sd$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await u71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await qB6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,T5);if(Q==="start"){let J=n(X.var.studioContext),W=ly(Y.virtualMcpMetadata);try{await k70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${H}`},502)}}return X7(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return $U(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return ac$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return rd$(X);return Z(X)});let Z=(X)=>X7(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(td$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return rd$(X);return X7(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(td$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await Hl(X),J=await yT0(G,Q.branch,Y.base);return X.json(J,200,T5)}catch(Y){return WX1(X,Y)}return X7(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,T5);let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return va(Y,async()=>{try{await l71(W,Q,Y);let K=_a(G,J);if(K)await pd$(W,Q,Y,K)}catch(K){if(K instanceof kv)return X.json({error:K.message},403,T5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,T5)}return X7(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return va(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,T5);try{let J=await Hl(X);return await cd$(J,Q.branch,G),X.json({ok:!0},200,T5)}catch(J){let W=J instanceof h4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,T5)}});return va(Q.claimName,()=>X7(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return va(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Hl(X),H=W.base??await K.getDefaultBranch();return await gT0(K,Q.branch,H),X.json({ok:!0},200,T5)}catch(W){return WX1(X,W)}});let Y=Sv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return va(G,async()=>{try{await l71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,T5)}return X7(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",o5({maxSize:nd$,onError:(X)=>X.json({error:"Payload too large"},413,T5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Sv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=m71(F)&&U?[F,N]:Y?await Promise.all([uT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),uT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Hl(X);return Promise.all([xT0(w,Q.branch),yT0(w,Q.branch)])})(),L=await Qd$(K,B,O);return X.json(L,200,T5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,T5);return X.json({error:F},502,T5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",o5({maxSize:nd$,onError:(X)=>X.json({error:"Payload too large"},413,T5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Sv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=m71(F)&&U?[F,N]:Y?await Promise.all([uT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),uT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Hl(X);return Promise.all([xT0(w,Q.branch),yT0(w,Q.branch)])})(),L=await Gd$(K,B,O,typeof H.language==="string"?H.language:void 0);return X.json(L,200,T5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,T5);return X.json({error:F},502,T5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return od$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",o5({maxSize:AB6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=dd$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=md$(G,W.resolveType);return od$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var ed$=D(()=>{Q8();MH();Ql();h71();Ln();oc$();n3();Jg();rc$();a3();sc$();ec$();hi0();jn();n71();Jd$();o71();QL();GX1();id$();JX1();zB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;RB6=TT0(async($,Z)=>{let X=$.var.studioContext;try{t(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=n(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{PB6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=On({orgId:Y.id,virtualMcpId:G,branch:J}),H=await vi0(X,J),F=fi0(H,Q),N=tc$({userId:F,projectRef:K}),U=W.metadata??null,B=await IB6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:F,virtualMcpMetadata:U,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await WQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});hT0=new Map;T5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};sd$=["clone","install","start"]});function $m$($,Z,X){let Q=KX1.get($);if(!Q)Q={pending:null,running:!1},KX1.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)SB6($,Q);return G}async function SB6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await CB6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)KX1.delete($)}}async function CB6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Kl(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=XX1(W,Q),H=[],F=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=QX1(K,O),E=`${JSON.stringify(L,null,2)}
|
|
2981
|
-
`,j=await Z.createBlob(E);await gd$(Z.owner,Z.repo,j,E);let z=w[0]??`${fT0(Q)}/${s71(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of QX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=ka(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:_B6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=VB6-1)throw O;await w$(G7(2000,200,Y,2,0.5))}}}function _B6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Mi0(Q,$.deps.coAuthor)}var VB6=3,KX1;var Zm$=D(()=>{JD0();MT0();W4();QL();bT0();KX1=new Map});import{createHmac as Xm$,randomBytes as vB6,timingSafeEqual as fB6}from"crypto";function Qm$(){if(lT0)return lT0;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return lT0=$?Buffer.from($):vB6(32),lT0}function HX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+bB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Xm$("sha256",Qm$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Ym$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Xm$("sha256",Qm$()).update(Q).digest("base64url"));if(Y.length!==G.length||!fB6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var bB6=21600000,lT0=null;var Gm$=D(()=>{E$()});import{z as Fl}from"zod";function yB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&xB6.test($)}function Fm$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function fa($){let Z=$.get("decofileScope");return IT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ba($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Nm$(){let $=new K1;return $.use("/:virtualMcpId/:branch",Hm$),$.use("/:virtualMcpId/:branch/*",Hm$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await hd$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=HX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Fm$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ba(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await fa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ba(Z,Y)}}),$.patch("/:virtualMcpId/:branch",hB6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=uB6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{qT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(r71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await fa(Z),W=await $m$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Yl(Q)},G),K=HX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Fm$(Z)})}catch(J){return ba(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await gT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return ba(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ba(Z,Q)}}),$}var xB6,Jm$=500,Wm$=1048576,Km$=1024,gB6=8388608,hB6,uB6,Hm$;var Um$=D(()=>{Ht0();MT0();Q8();MH();h71();RT0();JX1();o71();Zm$();Gm$();GX1();QL();bT0();xB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;hB6=o5({maxSize:gB6,onError:($)=>$.json({error:"Payload too large"},413)}),uB6=Fl.object({set:Fl.record(Fl.string(),Fl.unknown()).optional(),delete:Fl.array(Fl.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)<=Jm$,{message:`Patch cannot touch more than ${Jm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Wm$),{message:`Each block must be at most ${Wm$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Km$),{message:`Each block key must be at most ${Km$} characters`}),Hm$=TT0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!yB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Ym$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!ND0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=_a(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Bm$=($)=>{let Z=new K1;if(Z.use("*",Ev),Z.route("/",gA0()),Z.route("/",Vh$()),Z.route("/",bc$()),Z.route("/",_c$()),Z.route("/",zT0()),Z.route("/tools",cc$()),Z.route("/",hc$()),Z.route("/",Nc$({kvStorage:$.kvStorage})),Z.route("/",Hc$()),Z.route("/fs",Ic$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ad$()),Z.route("/decofile",Nm$()),Z.route("/",Vc$()),Z.route("/deco-sites",uA0()),Z.route("/hosting",Eh$()),Z.route("/monitor",Ih$()),Z.route("/sso",_A0()),Z.route("/",PT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Nh$()),$.mountDevAssets)Z.route("/dev-assets",dA0({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("/",_x$()),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",Mc$()),Z.route("/mcp",cw0()),Z.route("/mcp/self",jT0()),Z.route("/mcp",iw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Om$=D(()=>{Q8();GZ1();Uh$();HZ1();jh$();qh$();mA0();$a();QZ1();Fc$();Uc$();qc$();Wo();s91();pw0();_71();kc$();Sc$();vc$();xc$();uc$();f71();dc$();b71();dw0();ed$();Um$()});function lB6($){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 cB6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Dm$=()=>{let $=new K1;return $.use("*",cB6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await Z7(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:lB6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Lm$=D(()=>{Q8();E$();xP0()});import{z as k1}from"zod";function vH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function aB6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function eB6($,Z,X){try{return JSON.parse($)}catch{throw new jm$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function $O6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:eB6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function ZO6($){let Z=$.map((X)=>{let Q=X.function.parameters?sY(X.function.parameters):sY({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function XO6($){if(!$)return;return{openai:{response_format:$}}}function QO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function wm$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Em$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var dB6=256,mB6,iB6,pB6,nB6,tB6,oB6,rB6,sB6,jm$,zm$,Pm$;var Am$=D(()=>{c4();Q8();Ql();vN();mB6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),iB6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),pB6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(iB6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),nB6=k1.object({type:k1.literal("text")}),tB6=k1.object({type:k1.literal("json_object")}),oB6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),rB6=k1.union([nB6,tB6,oB6]),sB6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(pB6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(mB6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:rB6.optional(),user:k1.string().optional()});jm$=class jm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zm$=new K1;zm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(vH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(vH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(vH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=sB6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(vH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=aB6(G.model);if(!J)return $.json(vH("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}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>jw(j.providerId));if(!E)return $.json(vH("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=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(vH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=$O6(G.messages),U=G.tools?ZO6(G.tools):void 0,B=XO6(G.response_format),O=QO6(),L=Math.floor(Date.now()/1000);if(G.stream)return $U($,async(w)=>{let E=wm$(F,N,U,G,B,$.req.raw.signal);try{let j=bO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=dB6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.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 I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Em$(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 I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=wm$(F,N,U,G,B,$.req.raw.signal),E=await vO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Em$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(vH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(vH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(vH(Y.message,"server_error"),500)}});Pm$=zm$});function YO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Tm$(){let $=new K1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!XJ(G))return Z.json({error:"Invalid site slug"},400);let J=await X.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","=",Q).execute(),W=[];for(let H of J){if(!H.slug||hZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(pe1(N)!==G)continue;if(!YO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Rm$=D(()=>{Q8();DO()});var qm$;var Im$=D(()=>{qm$={name:"decocms",version:"4.315.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function WO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??JO6}}var Mm$,JO6="https://ph.studio.decocms.com",km$;var Vm$=D(()=>{Q8();J90();aC();Q9();E$();c91();Im$();Mm$=new K1;Mm$.get("/",($)=>{let Z={version:qm$.version,theme:Kp1(),..._F().logo&&{logo:_F().logo},...zN()&&{internalUrl:g_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:Pg$(),posthog:WO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:da()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});km$=Mm$});function Nl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function FX1($){return(Nl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Cm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Nl($))}&sz=${Z}`}function Sm$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function _m$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?Sm$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Sm$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var Cv,KO6,HO6,FO6,NO6,vm$;var fm$=D(()=>{Cv=c0.enum(["good","bad","neutral"]),KO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:Cv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),HO6=c0.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},c0.array(KO6)),FO6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},NO6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:Cv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:Cv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(HO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:Cv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),vm$=c0.object({...FO6,template:NO6})});function cT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=vm$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var NX1=D(()=>{fm$()});import{join as bm$}from"path";async function BO6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(UO6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=cT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||FX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function PG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function OO6($,Z){let X=Nl($),Q=Z?.brand?.trim()||FX1(X),Y=Cm$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=_m$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${PG(W)}</title>`,`<meta name="description" content="${PG(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="${PG(W)}" />`,`<meta property="og:description" content="${PG(K)}" />`,`<meta property="og:url" content="${PG(J)}" />`,`<meta property="og:image" content="${PG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${PG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${PG(W)}" />`,`<meta name="twitter:description" content="${PG(K)}" />`,`<meta name="twitter:image" content="${PG(H)}" />`,`<meta name="twitter:image:alt" content="${PG(F)}" />`,`<link rel="canonical" href="${PG(J)}" />`,`<link rel="icon" href="${PG(Y)}" sizes="any" />`].join(`
|
|
2981
|
+
`,j=await Z.createBlob(E);await gd$(Z.owner,Z.repo,j,E);let z=w[0]??`${fT0(Q)}/${s71(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of QX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=ka(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:_B6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=VB6-1)throw O;await w$(G7(2000,200,Y,2,0.5))}}}function _B6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Mi0(Q,$.deps.coAuthor)}var VB6=3,KX1;var Zm$=D(()=>{JD0();MT0();W4();QL();bT0();KX1=new Map});import{createHmac as Xm$,randomBytes as vB6,timingSafeEqual as fB6}from"crypto";function Qm$(){if(lT0)return lT0;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return lT0=$?Buffer.from($):vB6(32),lT0}function HX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+bB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Xm$("sha256",Qm$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Ym$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Xm$("sha256",Qm$()).update(Q).digest("base64url"));if(Y.length!==G.length||!fB6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var bB6=21600000,lT0=null;var Gm$=D(()=>{E$()});import{z as Fl}from"zod";function yB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&xB6.test($)}function Fm$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function fa($){let Z=$.get("decofileScope");return IT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ba($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Nm$(){let $=new K1;return $.use("/:virtualMcpId/:branch",Hm$),$.use("/:virtualMcpId/:branch/*",Hm$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await hd$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=HX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Fm$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ba(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await fa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ba(Z,Y)}}),$.patch("/:virtualMcpId/:branch",hB6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=uB6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{qT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(r71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await fa(Z),W=await $m$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Yl(Q)},G),K=HX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Fm$(Z)})}catch(J){return ba(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await gT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return ba(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ba(Z,Q)}}),$}var xB6,Jm$=500,Wm$=1048576,Km$=1024,gB6=8388608,hB6,uB6,Hm$;var Um$=D(()=>{Ht0();MT0();Q8();MH();h71();RT0();JX1();o71();Zm$();Gm$();GX1();QL();bT0();xB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;hB6=o5({maxSize:gB6,onError:($)=>$.json({error:"Payload too large"},413)}),uB6=Fl.object({set:Fl.record(Fl.string(),Fl.unknown()).optional(),delete:Fl.array(Fl.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)<=Jm$,{message:`Patch cannot touch more than ${Jm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Wm$),{message:`Each block must be at most ${Wm$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Km$),{message:`Each block key must be at most ${Km$} characters`}),Hm$=TT0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!yB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Ym$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!ND0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=_a(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Bm$=($)=>{let Z=new K1;if(Z.use("*",Ev),Z.route("/",gA0()),Z.route("/",Vh$()),Z.route("/",bc$()),Z.route("/",_c$()),Z.route("/",zT0()),Z.route("/tools",cc$()),Z.route("/",hc$()),Z.route("/",Nc$({kvStorage:$.kvStorage})),Z.route("/",Hc$()),Z.route("/fs",Ic$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ad$()),Z.route("/decofile",Nm$()),Z.route("/",Vc$()),Z.route("/deco-sites",uA0()),Z.route("/hosting",Eh$()),Z.route("/monitor",Ih$()),Z.route("/sso",_A0()),Z.route("/",PT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Nh$()),$.mountDevAssets)Z.route("/dev-assets",dA0({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("/",_x$()),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",Mc$()),Z.route("/mcp",cw0()),Z.route("/mcp/self",jT0()),Z.route("/mcp",iw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Om$=D(()=>{Q8();GZ1();Uh$();HZ1();jh$();qh$();mA0();$a();QZ1();Fc$();Uc$();qc$();Wo();s91();pw0();_71();kc$();Sc$();vc$();xc$();uc$();f71();dc$();b71();dw0();ed$();Um$()});function lB6($){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 cB6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Dm$=()=>{let $=new K1;return $.use("*",cB6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await Z7(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:lB6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Lm$=D(()=>{Q8();E$();xP0()});import{z as k1}from"zod";function vH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function aB6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function eB6($,Z,X){try{return JSON.parse($)}catch{throw new jm$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function $O6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:eB6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function ZO6($){let Z=$.map((X)=>{let Q=X.function.parameters?sY(X.function.parameters):sY({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function XO6($){if(!$)return;return{openai:{response_format:$}}}function QO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function wm$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function Em$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var dB6=256,mB6,iB6,pB6,nB6,tB6,oB6,rB6,sB6,jm$,zm$,Pm$;var Am$=D(()=>{c4();Q8();Ql();vN();mB6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),iB6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),pB6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(iB6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),nB6=k1.object({type:k1.literal("text")}),tB6=k1.object({type:k1.literal("json_object")}),oB6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),rB6=k1.union([nB6,tB6,oB6]),sB6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(pB6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(mB6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:rB6.optional(),user:k1.string().optional()});jm$=class jm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};zm$=new K1;zm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(vH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(vH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(vH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=sB6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(vH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=aB6(G.model);if(!J)return $.json(vH("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}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>jw(j.providerId));if(!E)return $.json(vH("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=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(vH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=$O6(G.messages),U=G.tools?ZO6(G.tools):void 0,B=XO6(G.response_format),O=QO6(),L=Math.floor(Date.now()/1000);if(G.stream)return $U($,async(w)=>{let E=wm$(F,N,U,G,B,$.req.raw.signal);try{let j=bO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=dB6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.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 I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Em$(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 I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=wm$(F,N,U,G,B,$.req.raw.signal),E=await vO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Em$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(vH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(vH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(vH(Y.message,"server_error"),500)}});Pm$=zm$});function YO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Tm$(){let $=new K1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!XJ(G))return Z.json({error:"Invalid site slug"},400);let J=await X.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","=",Q).execute(),W=[];for(let H of J){if(!H.slug||hZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(pe1(N)!==G)continue;if(!YO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Rm$=D(()=>{Q8();DO()});var qm$;var Im$=D(()=>{qm$={name:"decocms",version:"4.315.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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 WO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??JO6}}var Mm$,JO6="https://ph.studio.decocms.com",km$;var Vm$=D(()=>{Q8();J90();aC();Q9();E$();c91();Im$();Mm$=new K1;Mm$.get("/",($)=>{let Z={version:qm$.version,theme:Kp1(),..._F().logo&&{logo:_F().logo},...zN()&&{internalUrl:g_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:Pg$(),posthog:WO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:da()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});km$=Mm$});function Nl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function FX1($){return(Nl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Cm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Nl($))}&sz=${Z}`}function Sm$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function _m$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?Sm$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Sm$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var Cv,KO6,HO6,FO6,NO6,vm$;var fm$=D(()=>{Cv=c0.enum(["good","bad","neutral"]),KO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:Cv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),HO6=c0.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},c0.array(KO6)),FO6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},NO6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:Cv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:Cv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(HO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:Cv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),vm$=c0.object({...FO6,template:NO6})});function cT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=vm$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var NX1=D(()=>{fm$()});import{join as bm$}from"path";async function BO6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(UO6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=cT0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||FX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function PG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function OO6($,Z){let X=Nl($),Q=Z?.brand?.trim()||FX1(X),Y=Cm$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=_m$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${PG(W)}</title>`,`<meta name="description" content="${PG(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="${PG(W)}" />`,`<meta property="og:description" content="${PG(K)}" />`,`<meta property="og:url" content="${PG(J)}" />`,`<meta property="og:image" content="${PG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${PG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${PG(W)}" />`,`<meta name="twitter:description" content="${PG(K)}" />`,`<meta name="twitter:image" content="${PG(H)}" />`,`<meta name="twitter:image:alt" content="${PG(F)}" />`,`<link rel="canonical" href="${PG(J)}" />`,`<link rel="icon" href="${PG(Y)}" sizes="any" />`].join(`
|
|
2982
2982
|
`)}function DO6($,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}
|
|
2983
2983
|
</head>`)}function xm$($){let Z=new K1;return Z.get("/:domain/og.png",async(X)=>{let Q=Nl(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(bm$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(LO6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?bm$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await BO6(Nl(Q)),K=OO6(Q,W);return X.html(DO6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var UO6=2500,LO6=1e4;var ym$=D(()=>{Q8();NX1();AE();E$()});function xa($,Z){return fetch(`${DK({})}${$}`,Z)}async function wO6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await xa(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=cT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var EO6,XU,gm$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},hm$;var um$=D(()=>{Q8();nY();AE();NX1();EO6=new Set(["complete","errored","terminated","unknown"]),XU=new K1;XU.use("*",async($,Z)=>{let X=await e$.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});XU.use("/link-token/*",gm$);XU.use("/suggest",gm$);XU.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await wO6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});XU.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await xa("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${PE({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.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)}});XU.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await xa(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${PE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:EO6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});XU.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await xa(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});XU.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await xa(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});hm$=XU});import{createHmac as jO6,timingSafeEqual as zO6}from"crypto";function cm$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>PO6)return!1;let W=jO6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&zO6(K,F)})}function dm$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=mJ(Z),Q=mJ(mJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:fH(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function mm$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function fH($){return typeof $==="string"?$:void 0}function mJ($){return typeof $==="object"&&$!==null?$:void 0}function dT0($){return typeof $==="number"?new Date($*1000):null}function OX1($){return fH($)??fH(mJ($)?.id)}function AO6($){return OX1($.subscription)??fH(mJ(mJ($.parent)?.subscription_details)?.subscription)}function TO6($){let Z=dT0($.current_period_end);if(Z)return Z;let X=mJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=mJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function UX1($,Z){let X=dT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function BX1($,Z){let X=dT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function RO6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=fH(mJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(fH(mJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(fH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=fH(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(mJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:mJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(fH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=OX1(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(UX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:OX1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:BX1(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=fH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&UX1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":mm$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:TO6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:BX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=AO6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(UX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:dT0(X.period_end),lastStripeEventAt:BX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function IO6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:mm$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function lm$($,Z){let X=IO6($,Z);if(!X)return;dY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Lt1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function im$($){let Z=new NK(r8().db),X=await RO6(Z,$);if(!(X.handled&&X.topUp))lm$($,X);if(X.handled&&X.topUp)await Xz$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),lm$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await m0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof tY&&(Q.status===400||Q.status===404)))throw Q}return X}var PO6=300;var pm$=D(()=>{oG();S4();h50();_E();A11()});var qO6=1048576,DX1;var nm$=D(()=>{Q8();MH();E$();pm$();DX1=new K1;DX1.post("/webhook",o5({maxSize:qO6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=C0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!cm$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=dm$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await im$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as MO6}from"crypto";function VO6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return MO6(Buffer.from(Y),Buffer.from(Q))}var kO6=5242880,LX1;var tm$=D(()=>{Q8();MH();a3();LX1=new K1;LX1.post("/webhook",o5({maxSize:kO6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!VO6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Wt0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function om$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var rm$,SO6,CO6,sm$;var am$=D(()=>{Q8();S3();Sg();zy();rm$=new K1,SO6=["range","if-none-match","if-modified-since"],CO6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];rm$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(yu($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Z$(401,{message:"Authentication required"})}if(!X)throw new Z$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Z$(400,{message:"Missing file key"});let Y=await _t(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&eG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Z$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return om$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of SO6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Z$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new Z$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of CO6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),om$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});sm$=rm$});var ya=_((_v)=>{var _O6=_v&&_v.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),vO6=_v&&_v.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))_O6(Z,$,X)};Object.defineProperty(_v,"__esModule",{value:!0});vO6(kY(),_v)});var Zi$=_((em$)=>{Object.defineProperty(em$,"__esModule",{value:!0});em$.version=void 0;em$.version="3.4.0"});var Yi$=_((bH)=>{var fO6=bH&&bH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(bH,"__esModule",{value:!0});bH.NodeTransport=bH.VERSION=void 0;bH.nodeResolveHost=uO6;var e6=ya(),bO6=A0("net"),wX1=A0("tls"),xO6=A0("path"),Xi$=A0("fs"),yO6=fO6(A0("dns")),gO6=Zi$();bH.VERSION=gO6.version;var hO6="nats.js";class Qi${socket;version;lang;yields=[];signal=(0,e6.deferred)();closedNotification=(0,e6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=hO6,this.version=bH.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,e6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw e6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new e6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new e6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,e6.deferred)(),X,Q=(0,bO6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,e6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=e6.DataBuffer.concat(...this.yields),Y=(0,e6.extractProtocolMessage)(Q);if(Y!=="")try{let G=e6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,e6.deferred)();try{if($=(0,xO6.resolve)($),!(0,Xi$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Xi$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,e6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new e6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,e6.deferred)();try{let Y=(0,wX1.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new e6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,e6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new e6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,e6.deferred)();try{let Q=(0,wX1.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new e6.errors.ConnectionError(Q.message,{cause:Q}))}return X}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,e6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,e6.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 wX1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,e6.render)($)}`);let Z=(0,e6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,e6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,e6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}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(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}bH.NodeTransport=Qi$;function uO6($){let Z=(0,e6.deferred)();return yO6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Hi$=_((Ki$)=>{Object.defineProperty(Ki$,"__esModule",{value:!0});Ki$.connect=lO6;var Gi$=Yi$(),Ji$=ya(),Wi$=ya();function lO6($={}){if((0,Wi$.hasWsProtocol)($))return Promise.reject(Wi$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Ji$.setTransportFactory)({factory:()=>{return new Gi$.NodeTransport},dnsResolveFn:Gi$.nodeResolveHost}),Ji$.NatsConnectionImpl.connect($)}});var Fi$=_((QU)=>{var dO6=QU&&QU.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),mO6=QU&&QU.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))dO6(Z,$,X)};Object.defineProperty(QU,"__esModule",{value:!0});QU.connect=void 0;var iO6=Hi$();Object.defineProperty(QU,"connect",{enumerable:!0,get:function(){return iO6.connect}});mO6(ya(),QU)});function Oi$($){let Z=$?.connectFn??oO6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:tO6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{O++;let L=G7(nO6,pO6,O-1,2,0.5);await w$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?Ni$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Bi$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function oO6($){return Ui$.connect($)}var Ni$,Ui$,Bi$,pO6=100,nO6=3000,tO6=3000;var Di$=D(()=>{W4();Ni$=V(xl(),1),Ui$=V(Fi$(),1),Bi$=V(DU(),1)});function EX1($,Z){return`${$}.${Z}`}class jX1{cache;constructor($){this.cache=Eu({ttlMs:$?.ttlMs??rO6,maxSize:$?.maxSize??sO6})}async get($,Z){return this.cache.get(EX1($,Z))??null}async set($,Z,X){this.cache.set(EX1($,Z),X)}async invalidate($,Z){this.cache.delete(EX1($,Z))}teardown(){this.cache.clear()}}var rO6=600000,sO6=5000;var Li$=()=>{};function mT0($,Z){return`${$}:${Z}`}function zX1($){let Z=Eu({ttlMs:$?.ttlMs??aO6,maxSize:$?.maxSize??eO6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(wi$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(mT0(K,H))},set(K,H,F){Z.set(mT0(K,H),F)},invalidate(K,H){Z.delete(mT0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(wi$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(mT0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var wi$="studio.ai-provider-keys.invalidate",aO6=30000,eO6=5000;var Ei$=()=>{};class PX1{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 X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;this.onCancel?.(G.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 X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var ji$=($)=>{let Z;return()=>Z??=$()},AX1,TX1;var zi$=D(()=>{G6();AX1=ji$(()=>J$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),TX1=ji$(()=>J$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function JD6($=Ti$){return{name:$H,subjects:[`${_s0}.>`],storage:RW.StorageType.File,max_age:XD6,max_bytes:YD6,max_msgs_per_subject:GD6,discard:RW.DiscardPolicy.Old,retention:RW.RetentionPolicy.Limits,duplicate_window:QD6,num_replicas:$}}class Ri${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 Pi$($){let Z=Ai$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function FD6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,ZD6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function ND6($,Z){return $.info?.cluster?Z:1}function UD6($){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 RX1{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(Q,Y)=>{let G=JD6(Y);try{await Q.streams.info($H),await Q.streams.update($H,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update($H,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete($H),await Q.streams.add(G);else throw J}},X=await h6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await RW.jetstreamManager($),Y=ND6($,Ti$);try{await Z(Q,Y)}catch(G){if(Y<=1||!UD6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:lg});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=FD6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=cO$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=fs0(H,{runId:Z}),U=performance.now()-F;AX1().record(U),TX1().add(1,{"org.id":Q??"unknown"}),HD6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?Pi$(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),N++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),KD6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishSerialized($,Z){try{return await h6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Pi$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:lg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=fs0(Z,{runId:$,dedup:X});AX1().record(performance.now()-Y),TX1().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=lO$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?RW.DeliverPolicy.New:RW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=jD($),W;try{W=await h6(async()=>{return(await Q.consumers.get($H,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:lg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=Aw0({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(Ew0()).pipeThrough(jw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await F.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge($H,{filter:jD($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var RW,Ai$,$D6=($)=>{let Z;return()=>Z??=$()},ZD6,XD6=86400000000000,QD6=120000000000,YD6=4294967296,Ti$,GD6=500000,WD6,KD6,HD6;var Ii$=D(()=>{W4();bs0();Tw0();zw0();G6();zi$();RW=V(DU(),1),Ai$=V(xl(),1),ZD6=$D6(()=>J$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),Ti$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);WD6=process.env.STREAM_ENCODE_TRACE==="1",KD6=process.env.DECOPILOT_STREAM_TRACE==="1";HD6=WD6?new Ri$:null});function iT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,nW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var qi$=D(()=>{_8()});class IX1{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}}async function Mi$($,Z,X){let Q=Z.organizationId;if(!ZY(Z,(await N9($,Q)).review))return!1;if(!tC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=IK(Y?.flags),J=await j5($,Q),W=await $.storage.taskBoard.update(Z.id,Q,BJ(J,G),Z.updatedBy);return await A6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),x$(Q,W),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var ki$=D(()=>{j6();BX();Mg();v5();iK();z5()});function jD6($){return $ instanceof $Q}function zD6($,Z){return Z-$>=wD6}class qX1{taskBoard;contextFactory;billing;db;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.db=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??BD6;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??DD6,X=this.options.itemIntervalMs??OD6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} 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()-at0),ao0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-ED6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await oo0(this.taskBoard,Y,Q,await WN(this.db,Q)),await ro0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==Y8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await EN(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),jD6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+LD6),(await WN(this.db,Y)).progress).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await WN(this.db,Z),Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!=="in_progress")return;let G=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy,Q);if(!G)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),x$(Z,G)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!zD6(dF(X,Z.reviewCycleStartedAt),Date.now()))return;await tK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;let Y=await WN(this.db,Z);if(!ZY(Q,Y.review))return!1;let G=Q.assigneeId===Y8,J=await this.taskBoard.listPrs($,Z),W=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!W)return!1;if(J.length===0){if(G)await this.handOffReviewWithoutPr(W,Q);return!1}let K=await Promise.all(J.map(async(H)=>({...H,...await Vg(Z,H)})));if(K.every((H)=>H.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await Mi$(W,Q,K))return!0;if(await vD$(W,Q))return!0;if(await this.resolveConflictFromSweep(W,Q,K))return!0;if(!G)return!1;if(!wr0(K))return!1;return await vL0(W,Q,{previewMatchesHead:Er0(K)}),!0}async resolveConflictFromSweep($,Z,X){let Q=X.find((Y)=>Y.state!=="closed"&&Y.conflict===!0);if(!Q)return!1;return await UD($,Z.organizationId,Z,{pr:{number:Q.number,url:Q.url},conflict:!0}).catch((Y)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",Y),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var BD6=60000,OD6=300000,DD6=50,LD6=60000,wD6=900000,ED6=120000;var Vi$=D(()=>{v5();j6();Hr0();wN();et();iK();ki$();z5();YJ();eo0();JG();kt();kg()});import{readdir as PD6,rm as pT0}from"fs/promises";import{join as nT0}from"path";async function tT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-AD6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await vv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Si$($,Y,Z);else if(!Y.startsWith(".")){let G=nT0($,Y),J=await vv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Si$(G,K,Z)}if((await vv(G)).length===0)await pT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Si$($,Z,X){let Q=0,Y=nT0($,Z),G=await vv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=nT0(Y,W),H=await vv(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=nT0(K,N);await pT0(B,{recursive:!0,force:!0}),Q++}}if((await vv(K)).length===0)await pT0(K,{recursive:!0,force:!0})}if((await vv(Y)).length===0)await pT0(Y,{recursive:!0,force:!0});return Q}async function vv($){try{return(await PD6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var AD6=30;var MX1=()=>{};import{DBOS as kX1,SchedulerMode as TD6}from"@dbos-inc/dbos-sdk";async function ID6(){let $=[nJ(),fv(),gH()],Z=0;for(let X of $)try{Z+=await tT0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function qD6($,Z){await kX1.runStep(()=>ID6(),{name:"monitoringRetention"})}function _i$(){if(Ci$)return;Ci$=!0;let $=kX1.registerWorkflow(qD6,{name:"monitoringRetentionWorkflow"});kX1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:RD6,mode:TD6.ExactlyOncePerIntervalWhenActive})}var RD6="23 4 * * *",Ci$=!1;var vi$=D(()=>{RY();MX1()});function fi$($){return async(Z,X)=>{let Q=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","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await wJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await xt($.db,Z,Q.role);return Y.boundAuth=I91({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new JE(X,void 0,Y.boundAuth,Q.role,"self"),KD(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var bi$=D(()=>{pB();HD()});function MD6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function kD6(){return{services:MD6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function SD6(){for(let $ of VD6)$()}function xi$($){let Z=[...VX1.logs,$];VX1={...VX1,logs:Z.length>500?Z.slice(-500):Z},SD6()}function SX1(){return CD6}var VX1,VD6,CD6=!1;var CX1=D(()=>{VX1=kD6(),VD6=new Set});import{EventEmitter as _D6}from"events";var _X1;var yi$=D(()=>{CX1();_X1=new _D6;_X1.on("request",($)=>{xi$($)})});function gi$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let B=Ul(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>Ul(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${W5.tool}${B}${W5.dim}(${w})${W5.reset}`}else if(U.method)G=`${W5.dim}${Ul(U.method)}${W5.reset}`}}catch{}}let W=Ul(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${W5.mcp}${Ul(F.slice(0,12))}\u2026${W5.reset}`}else if(Y==="/mcp")W=`${W5.mcp}/mcp${W5.reset}`;else if(Y==="/mcp/registry")W=`${W5.mcp}/mcp/registry${W5.reset}`;let K=fD6(Q),H=J?"\u25C0":"\u2190";if(!SX1())console.log(`${W5.dim}${H}${W5.reset} ${K}${Q}${W5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=vD6(N),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!SX1())console.log(`${W5.dim}${O}${W5.reset} ${K}${Q}${W5.reset} ${W}${G?` ${G}`:""} ${U}${N}${W5.reset} ${W5.duration}${B}${W5.reset}`);_X1.emit("request",{method:Q,path:Ul(Y),status:N,duration:F,timestamp:new Date})}}}var W5,vD6=($)=>{if($>=500)return W5.serverError;if($>=400)return W5.clientError;if($>=300)return W5.redirect;return W5.ok},fD6=($)=>{return W5[$]||W5.reset},Ul=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var hi$=D(()=>{CX1();yi$();W5={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 di$}from"crypto";import{mkdir as bD6,readdir as xD6,rm as ui$,stat as mi$}from"fs/promises";import{join as fX1,relative as yD6}from"path";import{z as T$}from"zod";function pi$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return fX1(gD6,Z)}function ni$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function vX1($,Z){let X=pi$($),Q=ni$(Z);return fX1(X,Q)}function hD6($,Z,X,Q){let Y=C0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return di$("sha256",Y).update(G).digest("hex")}function ci$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=hD6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${ni$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function ti$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${di$("md5","etag").update(Q).digest("hex")}"`}async function oi$($,Z,X,Q,Y){try{let G=await xD6($,{withFileTypes:!0});for(let J of G){let W=fX1($,J.name),H=yD6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await oi$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await mi$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:ti$(W,F.mtime,F.size)})}catch{}}}}catch{}}function ri$($,Z){let Q=n($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:T$.object({prefix:T$.string().optional(),maxKeys:T$.number().optional().default(1000),continuationToken:T$.string().optional(),delimiter:T$.string().optional()}),outputSchema:T$.object({objects:T$.array(T$.object({key:T$.string(),size:T$.number(),lastModified:T$.string(),etag:T$.string()})),nextContinuationToken:T$.string().optional(),isTruncated:T$.boolean(),commonPrefixes:T$.array(T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=pi$(Q);await bD6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await oi$(F,F,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((w)=>w.key>H),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({contentType:T$.string().optional(),contentLength:T$.number(),lastModified:T$.string(),etag:T$.string(),metadata:T$.record(T$.string(),T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=vX1(Q,G.key),W=await mi$(J);return{contentType:BZ1(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:ti$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:T$.object({key:T$.string(),expiresIn:T$.number().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??li$;return{url:ci$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:T$.object({key:T$.string(),expiresIn:T$.number().optional(),contentType:T$.string().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??li$;return{url:ci$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({success:T$.boolean(),key:T$.string()}),handler:async(Y)=>{let G=Y,J=vX1(Q,G.key);try{return await ui$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:T$.object({keys:T$.array(T$.string()).max(1000)}),outputSchema:T$.object({deleted:T$.array(T$.string()),errors:T$.array(T$.object({key:T$.string(),message:T$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=vX1(Q,K);try{await ui$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function bX1($,Z,X){let Q=ri$(Z,X),Y=new ZK({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:U5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:T$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:T$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.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 G=new HQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),MJ(Y,G,$,"mcp:dev-assets")}async function si$($,Z,X,Q){let G=ri$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var gD6="./data/assets",li$=3600,ii$,ai$;var ei$=D(()=>{E$();tg();Q8();Gm();L_();mX();mA0();ii$=new K1;ii$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return bX1($.req.raw,Z,Q)});ai$=ii$});var $p$={};J4($p$,{mountDevRoutes:()=>uD6});function uD6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return bX1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await si$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",ai$);let X=new K1;X.use("*",AW({mountPath:"/api/dev-assets"})),X.route("/",dA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Zp$=D(()=>{Q8();YZ1();mA0();ei$()});import{sql as lD6}from"kysely";import{randomUUID as Xp$}from"crypto";import{z as cD6}from"zod";async function mD6($){let Z=new Date().toISOString(),X=Xp$(),Q=C8.SELF($.organizationId),Y="registry.publish_request.created",G={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:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=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","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Xp$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await lD6`SELECT
|
|
2984
2984
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as B,b as L,j as r}from"./index-CsY1TF9W.js";import{I as z}from"./input-C2LQkzgM.js";import{L as F}from"./label-DDomnkh5.js";import{S as A,a as R,b as O,c as V,d as D}from"./select-DP8R6SHe.js";import{T as J}from"./textarea-oNYVtNe9.js";import{g as M,x as $,k as q,z as G,K as H}from"./index-ilTUza0C.js";import{s as P}from"./primitives-889vcVvP.js";import{u as Q}from"./use-autosave-IpHgwNbO.js";import"./Check-B9BXJyjP.js";import"./ChevronDown-CibOAPkj.js";import"./ChevronUp-uoqbJNUa.js";import"./ArrowUp-BUO-DQ_5.js";import"./chat-context-CBscVdHR.js";import"./use-panel-navigate-DysnruF5.js";import"./use-destination-route-CVs2A1Bf.js";import"./thread-route-BqJg5WGB.js";import"./dialog-Bmqdtohz.js";import"./Copy01-DTYCMLsv.js";import"./Download01-m3LM8kPc.js";import"./constants-dLUUoWH7.js";import"./session-runtime-C-KTDVeQ.js";import"./slugify-CEUa2lfQ.js";import"./hooks-CHhTa1g3.js";import"./use-mcp-client-DdX0FtEV.js";import"./auth-CwvvWXYL.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-CtZUYHIf.js";import"./task-board-DsG4QtmP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-DW98QiaY.js";import"./use-ai-providers-DaanRc7k.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-TaikrB10.js";import"./use-organization-settings-DVuQjZwy.js";import"./automation-runs-C7IXBgBK.js";import"./agent-icon-XTSaP6I2.js";import"./AlertCircle-Bej7VpQB.js";import"./UserSquare-COva4WYR.js";import"./Tool01-BAW-sIAT.js";import"./ArrowLeft-D32tzw1j.js";import"./Tool02-DLsmC3Yu.js";import"./XCircle-Bwj_b3BU.js";import"./TrendUp01-B6W9C9wE.js";import"./ZapSquare-Dqz1Q5-x.js";import"./ZoomOut-zvfcklN3.js";import"./Users03-D3Mv6wlJ.js";import"./CheckCircle-K-2uFmnf.js";import"./ChevronRight-Dk63i-bY.js";import"./ChevronSelectorVertical-DP1B9xmi.js";import"./DotsVertical-BNlDBik3.js";import"./Stars02-CSnwfk4T.js";import"./CreditCard01-Df6seLnX.js";import"./Settings02-QlyaNN7o.js";import"./Eye-CB0taZNN.js";import"./FilterLines-CwjS3Zh5.js";import"./Share07-DQHlE1cH.js";import"./GitBranch01-DvgFXEvj.js";import"./Globe01-Bz6nWs5t.js";import"./Globe04-BKZm7NZh.js";import"./SwitchHorizontal01-hEGX7d4h.js";import"./HardDrive-D8YqEXCA.js";import"./Image01-BwqMsrGA.js";import"./Key01-pCeqHsdV.js";import"./LinkExternal01-DVNDnb4r.js";import"./LockUnlocked01-jKzwuttY.js";import"./LogOut01-IfQGZUz1.js";import"./Monitor01-DQGIQKPB.js";import"./Sun-COKwhR22.js";import"./Package-BJFyO9X8.js";import"./Palette-CHp50KTK.js";import"./Play-CP7NuEh2.js";import"./Plus-DQNoCqec.js";import"./SearchLg-DqH4hrjK.js";import"./SearchMd-jLr9qO5x.js";import"./Shield01-DBAziydT.js";import"./Stars01-CzjRHMuS.js";import"./Trash01-CTp8cuOY.js";import"./Upload01-B6G5nPhB.js";import"./User01-BPPt6N8K.js";import"./Users01-SXcjHXZH.js";import"./XClose-C7nyvaRr.js";import"./Zap-BcfUzL9Q.js";import"./useInfiniteQuery-BQK6IbnO.js";import"./use-infinite-scroll-B-jk_63J.js";import"./use-connection-BUAx1O6N.js";import"./table-BbIJ0rmd.js";import"./empty-state-BiAzFFwa.js";import"./use-members-Wdgqxg2j.js";import"./use-org-auth-client-Cb0fOhA-.js";import"./use-automations-D6udA7L9.js";import"./useSuspenseInfiniteQuery-BCfvw7ki.js";import"./avatar-B985UcxB.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-BDjAPexh.js";import"./markdown-C7zZMlTi.js";import"./monaco-editor-2GYvgTCm.js";import"./spinner-XUz-V5Vj.js";import"./editor-DOrG6VPf.js";import"./types-Cz-fNGsN.js";import"./shell-layout-DUVB6L2Q.js";import"./required-auth-layout-VRB_5_PP.js";import"./use-org-sso-1NXIpqBg.js";import"./integration-icon-Bd-TxQ28.js";import"./use-navigate-to-agent-BWzBrG0-.js";import"./chart-D4FP60-7.js";import"./index-DvjKkLVm.js";import"./AreaChart-D74stNX8.js";import"./form-BVEQOkXa.js";import"./file-type-icon-Ccl-fcJp.js";import"./drawer-Dc2htMdI.js";import"./collection-search-wFM8jJIo.js";import"./tabs-Dd-0wyNm.js";import"./toggle-group-IfwP1hdz.js";import"./super-agent-icon-BSOmrM2r.js";import"./self-tool-result-w-P_oeg6.js";import"./alert-dialog-f0ZctJ3t.js";import"./extract-connection-data-28dQrkJJ.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-DbLciHWs.js";import"./authenticate-and-persist-oauth-CVJgyPiH.js";import"./mcp-oauth-_oCEy3WG.js";import"./track-D92DyZJ9.js";import"./popover-FlxnwnLI.js";import"./toolbar-BOzGw4xb.js";import"./github-repo-picker-KO1A9w2J.js";import"./use-mcp-tools-BmEzqC6H.js";import"./agent-capabilities-B52k7xCe.js";import"./connection-card-BtymHbjN.js";import"./use-registry-connections-7Ja1mN2x.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./connection-form-helpers-DTw0VjrD.js";import"./collection-tabs-EC5xFfxN.js";import"./badge-Cb0gTzGf.js";import"./select-model-CRB8gXuS.js";import"./checkbox-DLRB2HfI.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-CO7kM5K4.js";import"./dropdown-menu-DAMxhrzZ.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-BY8XAdbp.js";import"./skill-preview-D3dGbOAx.js";import"./use-file-configs-DUhkHH1a.js";import"./pt-BR-CLy76QW2.js";import"./use-debounced-autosave-BYLzRqFc.js";import"./scroll-area-GYZwib1R.js";import"./search-input-eW5d9e3B.js";import"./use-mcp-auth-status-B1hD4ThG.js";import"./switch-BdDFg-PF.js";import"./use-secrets-xVUtjKbC.js";import"./config-DIqgphbv.js";import"./command-DHAE7emh.js";import"./index-CBaTpVoA.js";import"./get-initials-D-f_fDFw.js";import"./breadcrumb-D0FeT4Gz.js";import"./use-tags-DmjpcVSb.js";import"./automation-list-row-pE_WOSIU.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-Dz209KTJ.js";import"./cards-Dv5mxo8O.js";const U={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},W={authors:"sandbox.recordEditor.titleAuthor"};function Zr(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=M(h);let g;t[4]!==f||t[5]!==a?(g=$(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:G(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=Q(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,N=W[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const T=U[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(A,{value:P(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(R,{id:o.key,className:"h-10 w-full",children:r.jsx(O,{placeholder:i(o.labelKey)})}),r.jsx(V,{children:(o.options??[]).map(m=>r.jsx(D,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(J,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(z,{id:o.key,value:P(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,t[29]=x}else x=t[29];let u;t[34]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Zr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-DQwiDBXS.js","assets/index-CsY1TF9W.js","assets/index-DZ3ZDC5F.css","assets/Tool02-DLsmC3Yu.js","assets/CheckCircle-K-2uFmnf.js","assets/Settings02-QlyaNN7o.js","assets/use-mcp-client-DdX0FtEV.js","assets/constants-dLUUoWH7.js","assets/auth-CwvvWXYL.js","assets/useInfiniteQuery-BQK6IbnO.js","assets/use-infinite-scroll-B-jk_63J.js","assets/badge-Cb0gTzGf.js","assets/input-C2LQkzgM.js","assets/dropdown-menu-DAMxhrzZ.js","assets/Check-B9BXJyjP.js","assets/ChevronRight-Dk63i-bY.js","assets/DotsVertical-BNlDBik3.js","assets/table-BbIJ0rmd.js","assets/toggle-group-IfwP1hdz.js","assets/use-view-mode-Cgllsz30.js","assets/FilterLines-CwjS3Zh5.js","assets/Globe01-Bz6nWs5t.js","assets/SearchMd-jLr9qO5x.js","assets/dialog-Bmqdtohz.js","assets/AlertCircle-Bej7VpQB.js","assets/Download01-m3LM8kPc.js","assets/Upload01-B6G5nPhB.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-f0ZctJ3t.js","assets/Trash01-CTp8cuOY.js","assets/label-DDomnkh5.js","assets/select-DP8R6SHe.js","assets/ChevronDown-CibOAPkj.js","assets/ChevronUp-uoqbJNUa.js","assets/switch-BdDFg-PF.js","assets/textarea-oNYVtNe9.js","assets/ArrowLeft-D32tzw1j.js","assets/XCircle-Bwj_b3BU.js","assets/checkbox-DLRB2HfI.js","assets/Eye-CB0taZNN.js","assets/LinkExternal01-DVNDnb4r.js","assets/use-copy-BDjAPexh.js","assets/Copy01-DTYCMLsv.js","assets/Key01-pCeqHsdV.js","assets/Plus-DQNoCqec.js","assets/mcp-oauth-_oCEy3WG.js","assets/Play-CP7NuEh2.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,bq as o}from"./index-CsY1TF9W.js";import{R as n}from"./require-capability-OmhSpJuE.js";import"./access-gate-DLoxDnmp.js";import"./capability-load-error-DavE7mT9.js";const c=s.lazy(()=>o(()=>import("./registry-layout-DQwiDBXS.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function u(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(n,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(c,{})})}),r[0]=t):t=r[0],t}export{u as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-DQwiDBXS.js","assets/index-CsY1TF9W.js","assets/index-DZ3ZDC5F.css","assets/Tool02-DLsmC3Yu.js","assets/CheckCircle-K-2uFmnf.js","assets/Settings02-QlyaNN7o.js","assets/use-mcp-client-DdX0FtEV.js","assets/constants-dLUUoWH7.js","assets/auth-CwvvWXYL.js","assets/useInfiniteQuery-BQK6IbnO.js","assets/use-infinite-scroll-B-jk_63J.js","assets/badge-Cb0gTzGf.js","assets/input-C2LQkzgM.js","assets/dropdown-menu-DAMxhrzZ.js","assets/Check-B9BXJyjP.js","assets/ChevronRight-Dk63i-bY.js","assets/DotsVertical-BNlDBik3.js","assets/table-BbIJ0rmd.js","assets/toggle-group-IfwP1hdz.js","assets/use-view-mode-Cgllsz30.js","assets/FilterLines-CwjS3Zh5.js","assets/Globe01-Bz6nWs5t.js","assets/SearchMd-jLr9qO5x.js","assets/dialog-Bmqdtohz.js","assets/AlertCircle-Bej7VpQB.js","assets/Download01-m3LM8kPc.js","assets/Upload01-B6G5nPhB.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-f0ZctJ3t.js","assets/Trash01-CTp8cuOY.js","assets/label-DDomnkh5.js","assets/select-DP8R6SHe.js","assets/ChevronDown-CibOAPkj.js","assets/ChevronUp-uoqbJNUa.js","assets/switch-BdDFg-PF.js","assets/textarea-oNYVtNe9.js","assets/ArrowLeft-D32tzw1j.js","assets/XCircle-Bwj_b3BU.js","assets/checkbox-DLRB2HfI.js","assets/Eye-CB0taZNN.js","assets/LinkExternal01-DVNDnb4r.js","assets/use-copy-BDjAPexh.js","assets/Copy01-DTYCMLsv.js","assets/Key01-pCeqHsdV.js","assets/Plus-DQNoCqec.js","assets/mcp-oauth-_oCEy3WG.js","assets/Play-CP7NuEh2.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as n,d as c,f as m,j as t,k as f,r as l,bq as p}from"./index-CsY1TF9W.js";import{R as u}from"./require-capability-OmhSpJuE.js";import"./access-gate-DLoxDnmp.js";import"./capability-load-error-DavE7mT9.js";const g=l.lazy(()=>p(()=>import("./registry-layout-DQwiDBXS.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function h(){const e=n.c(5),i=c();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=m(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{h as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./use-infinite-scroll-B-jk_63J.js";import{fg as i}from"./index-CsY1TF9W.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-B-jk_63J.js";import{fg as u,b$ as n}from"./index-CsY1TF9W.js";function a(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{a as u};
|