decocms 4.425.0 → 4.426.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-CQU3FO2-.js → AlertCircle-Dh9lwUAJ.js} +1 -1
- package/dist/client/assets/{AreaChart-Caz7K4-P.js → AreaChart-CjdJMEma.js} +1 -1
- package/dist/client/assets/{ArrowLeft-r9k0gxde.js → ArrowLeft-BGYsJwr2.js} +1 -1
- package/dist/client/assets/{ArrowRight-CJiUKB0e.js → ArrowRight-9nkv_n33.js} +1 -1
- package/dist/client/assets/{ArrowUp-D1uaoIEr.js → ArrowUp-BEUKMR1b.js} +1 -1
- package/dist/client/assets/{CartesianChart-CsM3ceFL.js → CartesianChart-DomSSzyF.js} +1 -1
- package/dist/client/assets/{Check-soPAeKca.js → Check-C7XCKaVD.js} +1 -1
- package/dist/client/assets/{CheckCircle-BdRkKVcj.js → CheckCircle-ChjcsQ6e.js} +1 -1
- package/dist/client/assets/{ChevronUp-B4upaCys.js → ChevronUp-BLjBJuX1.js} +1 -1
- package/dist/client/assets/{Copy01-Ck1CQt9c.js → Copy01-COSj2yl3.js} +1 -1
- package/dist/client/assets/{CreditCard01-C5LQldm8.js → CreditCard01-c7ALaNdl.js} +1 -1
- package/dist/client/assets/{DotsVertical-DMsZySzr.js → DotsVertical-BY6GOg69.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-bwtijj2s.js → ErrorBarContext-C6Ka2dZX.js} +1 -1
- package/dist/client/assets/{Image01-AxefwT4b.js → Image01-BUoc7dul.js} +1 -1
- package/dist/client/assets/{Key01-V9W0a2Yy.js → Key01-CpDPClSw.js} +1 -1
- package/dist/client/assets/{Line-CPF3zU9K.js → Line-CREaQkr3.js} +1 -1
- package/dist/client/assets/{Link01-C9tHLmLh.js → Link01-Cl8TmSAu.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CkkaHQ43.js → LinkExternal01-BpwEo5mX.js} +1 -1
- package/dist/client/assets/{Monitor01-DYA_QMf2.js → Monitor01-DjVxT7Ye.js} +1 -1
- package/dist/client/assets/{Palette-Bk3UCvKx.js → Palette-qYxOT-Eu.js} +1 -1
- package/dist/client/assets/{Plus-kHt_8stA.js → Plus-coArzCGt.js} +1 -1
- package/dist/client/assets/{SearchMd-DFB2ha4T.js → SearchMd-D7DbuO-r.js} +1 -1
- package/dist/client/assets/{Sector-D22gYKYq.js → Sector-CO3EFLIZ.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-IkLiZTCG.js → ShoppingBag01-Dutlk1ra.js} +1 -1
- package/dist/client/assets/{Sun-CttdH4aG.js → Sun-BVBkARhS.js} +1 -1
- package/dist/client/assets/{Tool01-BVUW3itu.js → Tool01-fHsiwx5R.js} +1 -1
- package/dist/client/assets/{Trash01-CKOL_3ja.js → Trash01-B9q9XwwI.js} +1 -1
- package/dist/client/assets/{Upload01-DlR8CSo4.js → Upload01-CphgSD0x.js} +1 -1
- package/dist/client/assets/{User01-dc7WIl5M.js → User01-CMYGXzFL.js} +1 -1
- package/dist/client/assets/{UserSquare-D1bS09Fm.js → UserSquare-CAix9ifC.js} +1 -1
- package/dist/client/assets/{Users01-BaIVzoZ3.js → Users01-DPFEioN5.js} +1 -1
- package/dist/client/assets/{X-Dp6J1NZk.js → X-Dt1AZixL.js} +1 -1
- package/dist/client/assets/{XAxis-B8-Lgf5y.js → XAxis-KeaaSo7A.js} +1 -1
- package/dist/client/assets/{XClose-CVE8Vs6Q.js → XClose-B9Q2XRVd.js} +1 -1
- package/dist/client/assets/{ZoomOut-ekFDVqJi.js → ZoomOut-PSTvj6r8.js} +1 -1
- package/dist/client/assets/{access-gate-DVZHCUBi.js → access-gate-1aCLkdeG.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-B-zUvMaq.js → add-connection-dialog-CzZDruYr.js} +1 -1
- package/dist/client/assets/agent-analytics-CWZFiPCw.js +2 -0
- package/dist/client/assets/agent-app-8SMd_DwT.js +1 -0
- package/dist/client/assets/agent-assets-DLcrq17_.js +1 -0
- package/dist/client/assets/{agent-automation-Bj4sGNvm.js → agent-automation-BheAYOxQ.js} +2 -2
- package/dist/client/assets/agent-automations-BBHKFwf5.js +1 -0
- package/dist/client/assets/agent-connect-sources-DOLP3sAe.js +1 -0
- package/dist/client/assets/agent-deck-B_OTY_ON.js +1 -0
- package/dist/client/assets/agent-e2e-BwaP7Ol7.js +1 -0
- package/dist/client/assets/agent-experiments-uazbcmJ1.js +1 -0
- package/dist/client/assets/agent-file-ClIiGvtE.js +1 -0
- package/dist/client/assets/{agent-git-BcKeYOTv.js → agent-git-CJpnrZtD.js} +2 -2
- package/dist/client/assets/agent-hosting-VrZ6s8Mj.js +1 -0
- package/dist/client/assets/{agent-icon-C8wu-T9B.js → agent-icon-Cju9Okbj.js} +1 -1
- package/dist/client/assets/agent-library-AbCCGd2u.js +1 -0
- package/dist/client/assets/agent-library-file-BX8G-q2Z.js +1 -0
- package/dist/client/assets/agent-monitor-zqfxBaH-.js +1 -0
- package/dist/client/assets/agent-overview-DCKnKeTr.js +1 -0
- package/dist/client/assets/agent-settings-DcXtdgfi.js +1 -0
- package/dist/client/assets/{agent-site-editor-BManvh2p.js → agent-site-editor-CG-imoFz.js} +2 -2
- package/dist/client/assets/agent-site-editor-code-ZkCFJITj.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-DVWOt-Lp.js → agent-site-editor-content-dfB0FrOl.js} +3 -3
- package/dist/client/assets/{agent-site-editor-preview-DqrFB9eA.js → agent-site-editor-preview-BSlCBpoz.js} +3 -3
- package/dist/client/assets/{agent-view-guard-DP6rr7-6.js → agent-view-guard-CMzjdLr_.js} +1 -1
- package/dist/client/assets/agent-view-qJLawiIP.js +1 -0
- package/dist/client/assets/{agents-list-BHJZEiO4.js → agents-list-C3UyUc19.js} +1 -1
- package/dist/client/assets/{ai-providers-BU1J8_R5.js → ai-providers-Dw19IBmh.js} +1 -1
- package/dist/client/assets/{alert-B_aVDXWu.js → alert-DMoz9rms.js} +1 -1
- package/dist/client/assets/{alert-dialog-DJcNPQjm.js → alert-dialog-dGExRb-e.js} +1 -1
- package/dist/client/assets/{analytics-sections-BXAEbLgR.js → analytics-sections-H0bMI5TT.js} +1 -1
- package/dist/client/assets/api-keys-1N7itRHA.js +1 -0
- package/dist/client/assets/{api-keys-yyXIMQJI.js → api-keys-CAGHyjGG.js} +1 -1
- package/dist/client/assets/app-editor-R5yzsqfq.js +1 -0
- package/dist/client/assets/{asset-utils-BV839mqx.js → asset-utils-m3RtaS65.js} +1 -1
- package/dist/client/assets/{auth-i4uSZxqM.js → auth-AjdxyXQQ.js} +1 -1
- package/dist/client/assets/{auth-catchall-B38U7kv-.js → auth-catchall-CFm9414S.js} +1 -1
- package/dist/client/assets/{auth-entry-CKSK4iYs.js → auth-entry-DgYkGEvE.js} +1 -1
- package/dist/client/assets/{auth-split-layout-D02-xSkU.js → auth-split-layout-CKwfbNYt.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-D-PqEdfN.js → authenticate-and-persist-oauth-qbq5LuiV.js} +1 -1
- package/dist/client/assets/{automation-list-row-Cj0lVdtQ.js → automation-list-row-Dh3DCjT7.js} +1 -1
- package/dist/client/assets/{automation-runs-BNfzkXtY.js → automation-runs-2dGVqxIx.js} +1 -1
- package/dist/client/assets/{automations-CcA3VvLO.js → automations-BPw-0_2G.js} +1 -1
- package/dist/client/assets/{autosend-BgamBAXS.js → autosend-DtAhWrvb.js} +1 -1
- package/dist/client/assets/{avatar-By9-J1G7.js → avatar-BugbqVXb.js} +1 -1
- package/dist/client/assets/{badge-BLmau0Ea.js → badge-D1nBHfyl.js} +1 -1
- package/dist/client/assets/{block-document-DNf3E-rZ.js → block-document-CxKjCcIO.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-Dp3GVv9B.js → blocks-preview-workspace-context-CtTYA1qe.js} +1 -1
- package/dist/client/assets/{buckets-CfOh79gF.js → buckets-CnRzWdap.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-bnw-geKz.js → build-improve-prompt-doc-Bqv4jK3j.js} +1 -1
- package/dist/client/assets/{calendar-C_3zvYnn.js → calendar-4zS_oOft.js} +1 -1
- package/dist/client/assets/{capability-load-error-_sxFuxMW.js → capability-load-error-CDEMn6wp.js} +1 -1
- package/dist/client/assets/category-editor-C2JizcgQ.js +1 -0
- package/dist/client/assets/{chart-DUDR_GLh.js → chart-UpLMYPC1.js} +1 -1
- package/dist/client/assets/{chat-context-DSOY14Dl.js → chat-context-iBhAWaTl.js} +1 -1
- package/dist/client/assets/{chat-draft-Db3gWleH.js → chat-draft-2b__RL23.js} +1 -1
- package/dist/client/assets/{checkbox-YgstniWn.js → checkbox-9Hass2fp.js} +1 -1
- package/dist/client/assets/{choose-editor-Cvv0YS80.js → choose-editor-4VkBBo9f.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-Byy3Q6us.js → claim-phase-copy-Cu7y7gag.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CF33WEDl.js → cli-auth-success-DYkPcG65.js} +1 -1
- package/dist/client/assets/{client-icons-3lGatXeB.js → client-icons-D1yY3hrH.js} +1 -1
- package/dist/client/assets/{collapsible-Pi90xi-e.js → collapsible-CLujQiBB.js} +1 -1
- package/dist/client/assets/{collection-detail-DHdecaB7.js → collection-detail-CSQIvwEO.js} +1 -1
- package/dist/client/assets/{collection-display-button-Cb5VEBCx.js → collection-display-button-Bp5cubVL.js} +1 -1
- package/dist/client/assets/{collection-search-CZPfBwnt.js → collection-search-RCkR7knL.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CR8wWqYX.js → collection-table-wrapper-CRdyF4Ce.js} +1 -1
- package/dist/client/assets/{collection-tabs-CDyR4kzk.js → collection-tabs-BOAoqV16.js} +1 -1
- package/dist/client/assets/{combobox-BIrYGyuF.js → combobox-B3MSOcaK.js} +1 -1
- package/dist/client/assets/{command-DxWpNp1x.js → command-Ca_7Byfo.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-BT3BpapS.js → companion-mcps-section-DGYlCg35.js} +1 -1
- package/dist/client/assets/{config-BfXHrI3c.js → config-B-Fm6YG0.js} +1 -1
- package/dist/client/assets/{connect-BaV0v-Tu.js → connect-D6q-DV5B.js} +1 -1
- package/dist/client/assets/{connect-layout-BUm5geCN.js → connect-layout-DoIJwbJx.js} +1 -1
- package/dist/client/assets/{connection-sgm4TBxZ.js → connection-BZR_b2EN.js} +1 -1
- package/dist/client/assets/{connection-card-KlghLDwU.js → connection-card-BCurehFX.js} +1 -1
- package/dist/client/assets/{connection-detail-DclD8xq_.js → connection-detail-DFi0lXEc.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-i009QpGu.js → connection-form-helpers-BJ_8FXIG.js} +1 -1
- package/dist/client/assets/{connections-_X80BGGI.js → connections-QHuZp1-J.js} +1 -1
- package/dist/client/assets/context-Bv0D5-Uj.js +1 -0
- package/dist/client/assets/{create-organization-dialog-DhSGIMf_.js → create-organization-dialog-IH2noFuZ.js} +1 -1
- package/dist/client/assets/{decopilot-ZxSRkfiB.js → decopilot-D626jWMz.js} +1 -1
- package/dist/client/assets/{dialog-1dafL4bi.js → dialog-BAKH_-im.js} +1 -1
- package/dist/client/assets/discover-DJLBtlMy.js +1 -0
- package/dist/client/assets/{domain-settings-CGpwkGbK.js → domain-settings-LFpXpUtA.js} +1 -1
- package/dist/client/assets/{download-app-dialog-BcCXsaD8.js → download-app-dialog-DPWcze5R.js} +1 -1
- package/dist/client/assets/{drawer-wrrjDRlR.js → drawer-D6W2ZApA.js} +1 -1
- package/dist/client/assets/{editor-BiYdYoAb.js → editor-DfRgyxZb.js} +1 -1
- package/dist/client/assets/{empty-state-LYCOTuMl.js → empty-state-DBsD3RKy.js} +1 -1
- package/dist/client/assets/{empty-state-Ck9uwtW-.js → empty-state-L1uIcmaC.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Cm7kjryi.js → extract-connection-data-B2HBCx7f.js} +1 -1
- package/dist/client/assets/{feature-gate-VDho3P9i.js → feature-gate-DPOwo3io.js} +1 -1
- package/dist/client/assets/{feature-paywall-O59PQJQ4.js → feature-paywall-CZbbYxob.js} +1 -1
- package/dist/client/assets/{file-explorer-M_603rD8.js → file-explorer-C6CV7wTj.js} +1 -1
- package/dist/client/assets/{file-preview-DNv-TeY5.js → file-preview-CDV38dJ5.js} +1 -1
- package/dist/client/assets/{file-share-button-CcJT8SCR.js → file-share-button-CcTG-Rnk.js} +1 -1
- package/dist/client/assets/{file-type-icon-buBDg-03.js → file-type-icon-Ec1QqaNx.js} +1 -1
- package/dist/client/assets/flat-project-653S9BeK.js +1 -0
- package/dist/client/assets/{folder-icon-Da9ULcDI.js → folder-icon-D9bi_tlQ.js} +1 -1
- package/dist/client/assets/{form-D5LPXjPj.js → form-CBoGvDdc.js} +1 -1
- package/dist/client/assets/{gateway-client-CeKj8qiL.js → gateway-client-CvISKT37.js} +1 -1
- package/dist/client/assets/{general-BPN087Lc.js → general-DYy7Wql9.js} +1 -1
- package/dist/client/assets/home-F-3beLau.js +1 -0
- package/dist/client/assets/{index-D88JS0Yx.js → index-B3_om_ve.js} +1 -1
- package/dist/client/assets/{index-D8akGTh4.js → index-BQBD06Wh.js} +1 -1
- package/dist/client/assets/{index-D5-xqq3P.js → index-BpSkcbyR.js} +1 -1
- package/dist/client/assets/{index-LgfzCRc4.js → index-BusYqxFz.js} +1 -1
- package/dist/client/assets/index-BxC54emP.js +10 -0
- package/dist/client/assets/{index-H2LrQn17.js → index-CZzi-MMq.js} +1 -1
- package/dist/client/assets/index-CoamuzBl.css +1 -0
- package/dist/client/assets/{index-D3__nJJk.js → index-Cz9ngF1R.js} +1 -1
- package/dist/client/assets/{index-CBLynFUh.js → index-DX_ORy-2.js} +1 -1
- package/dist/client/assets/{index-CeFrI_-f.js → index-DqR5nN5p.js} +8 -8
- package/dist/client/assets/{index-Ct9y-yVl.js → index-DuhdHeRI.js} +1 -1
- package/dist/client/assets/{index-Do5wILaI.js → index-RqXfa7FZ.js} +1 -1
- package/dist/client/assets/{index-MebkKt8H.js → index-SkTn342u.js} +1 -1
- package/dist/client/assets/{index-CY8bQG9C.js → index-VZYC9f6Y.js} +1 -1
- package/dist/client/assets/{index-DFK3AqOd.js → index-Vd7iTgVD.js} +1 -1
- package/dist/client/assets/{index-DJzoBp2L.js → index-cDs0qWSp.js} +1 -1
- package/dist/client/assets/{index-redirect-DNJpUKHR.js → index-redirect-Bq0S9TJ8.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-DX9QHkGe.js → infiniteQueryObserver-Cug9ZMk0.js} +1 -1
- package/dist/client/assets/{infra-billing-CJc_xWtO.js → infra-billing-CeCsQNYD.js} +1 -1
- package/dist/client/assets/{input-C2XryqlS.js → input-05oF9Lbq.js} +1 -1
- package/dist/client/assets/{input-BLNFqzUM.js → input-BAlEkL74.js} +3 -3
- package/dist/client/assets/{input-CQlMbJrR.js → input-Buk-AyEm.js} +1 -1
- package/dist/client/assets/{integration-icon-60YSBd47.js → integration-icon-C2IglhA_.js} +1 -1
- package/dist/client/assets/{label-CTaphTs2.js → label-CerbhQb5.js} +1 -1
- package/dist/client/assets/{last-preview-page-vt2OtvKU.js → last-preview-page-DQXUWH3N.js} +1 -1
- package/dist/client/assets/{layout-COlkqmIQ.js → layout-DBLL0gbn.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-Ctzjouqt.js → legacy-agents-deep-CJWjMQYt.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-BaZYUmuc.js → legacy-main-redirect-BzyT0GCQ.js} +1 -1
- package/dist/client/assets/library-CeMGestS.js +1 -0
- package/dist/client/assets/{library-tab-D4iQdrlE.js → library-tab-CkLCm4AQ.js} +1 -1
- package/dist/client/assets/{login-QNIhU9dz.js → login-BlE85Tt-.js} +1 -1
- package/dist/client/assets/{markdown-Ck-11dhN.js → markdown-DN9FJYvL.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-BemaHPoe.js → mcp-app-renderer-Gt3_oNY0.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DA7uY-37.js → mcp-oauth-D4EkuyvW.js} +1 -1
- package/dist/client/assets/{members-BEhHXB0V.js → members-t7upXcYE.js} +1 -1
- package/dist/client/assets/{message-templates-CX1OJ7C8.js → message-templates-_1ehs9jp.js} +1 -1
- package/dist/client/assets/{mini-report-page-s_c2MmRH.js → mini-report-page-AErQ23Qz.js} +1 -1
- package/dist/client/assets/{mock-board-DPOuVqy_.js → mock-board-3dn_zk_P.js} +1 -1
- package/dist/client/assets/{monaco-editor-CyLZqoPt.js → monaco-editor-YjPjw4dd.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-pkJdXLku.js → monitoring-stats-row-axTaoyNT.js} +1 -1
- package/dist/client/assets/{multi-select-CtEcT2Fm.js → multi-select-oCVVhjFs.js} +1 -1
- package/dist/client/assets/{mustache-BIygiTUj.js → mustache-BGVTVChV.js} +1 -1
- package/dist/client/assets/{new-project-dialog-BJkFsBCH.js → new-project-dialog-Db3wbOfy.js} +1 -1
- package/dist/client/assets/{oauth-callback-DLIV3MGz.js → oauth-callback-CvBiDgeP.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-r46g0CGE.js → oauth-callback-ai-provider-BJJp8tI5.js} +1 -1
- package/dist/client/assets/{onboarding-BdNB509_.js → onboarding-DlTCKcYF.js} +1 -1
- package/dist/client/assets/openai-conversation-BMs24YX9.js +3 -0
- package/dist/client/assets/{optimistic-project-sidebar-views-CTxHKwky.js → optimistic-project-sidebar-views-Dqb0YVzb.js} +1 -1
- package/dist/client/assets/{org-file-open-context-CNhQ4sPa.js → org-file-open-context-0m9nAn5k.js} +1 -1
- package/dist/client/assets/{organization-choice-ClD3tqal.js → organization-choice-xKuRw7bv.js} +1 -1
- package/dist/client/assets/{orgs-bdVnOGJG.js → orgs-DfOHNNY4.js} +1 -1
- package/dist/client/assets/{page-seo-form-B0GpL4jq.js → page-seo-form-B4Q_F9eC.js} +1 -1
- package/dist/client/assets/{pair-BqbLIj1t.js → pair--ffwMsVi.js} +1 -1
- package/dist/client/assets/{plan-ladder-HHjxIVXp.js → plan-ladder-BTuOH_rJ.js} +1 -1
- package/dist/client/assets/{popover-Dp4MK1ls.js → popover-DhlDrafq.js} +1 -1
- package/dist/client/assets/post-calendar-XHFsJXTd.js +1 -0
- package/dist/client/assets/{post-editor-C1RmWFY5.js → post-editor-rZtul2Mk.js} +2 -2
- package/dist/client/assets/{preview-content-CNIJYNak.js → preview-content-BbJuU6df.js} +1 -1
- package/dist/client/assets/{preview-dialog-C7esJb4w.js → preview-dialog-CN5SqfyX.js} +1 -1
- package/dist/client/assets/{profile-CXYVNdpP.js → profile-De6YAqIA.js} +1 -1
- package/dist/client/assets/{project-app-view-CDgS0ywj.js → project-app-view-B5Khqz7f.js} +1 -1
- package/dist/client/assets/project-feed-Xa6qyXJX.js +1 -0
- package/dist/client/assets/{project-icon-BY9kpN8_.js → project-icon-C5xEY8i8.js} +1 -1
- package/dist/client/assets/project-reports-DBs57ScD.js +1 -0
- package/dist/client/assets/project-tasks-sTauAi5t.js +1 -0
- package/dist/client/assets/{projects-evwU_QXd.js → projects-DvXGBhjm.js} +1 -1
- package/dist/client/assets/{projects-empty-state-DfwkZhS9.js → projects-empty-state-CfKzWklQ.js} +1 -1
- package/dist/client/assets/{prompts-CyLjyHbX.js → prompts-Bu1_dfj_.js} +1 -1
- package/dist/client/assets/record-editor-Dbd0VnCw.js +1 -0
- package/dist/client/assets/redirect-editor-CoTmBQAz.js +1 -0
- package/dist/client/assets/{reports-BM-fsbYD.js → reports-6rPnZcpV.js} +1 -1
- package/dist/client/assets/reports-BJK0_clK.js +1 -0
- package/dist/client/assets/{reports-onboarding-BkOfNX6c.js → reports-onboarding-CFVeWEvH.js} +1 -1
- package/dist/client/assets/{reports-tab-akHTbMf0.js → reports-tab-Bt1EL-mi.js} +2 -2
- package/dist/client/assets/{repositories-BhXqf3Sh.js → repositories-D33kHvo2.js} +1 -1
- package/dist/client/assets/{repository-binding-Bye6exhX.js → repository-binding-DaBjdkOf.js} +1 -1
- package/dist/client/assets/{repository-import-picker-9N2XFQro.js → repository-import-picker-BGWkh1A1.js} +1 -1
- package/dist/client/assets/{repository-picker-Hvr1qnSW.js → repository-picker-CmwzBQy1.js} +1 -1
- package/dist/client/assets/{require-capability-BikcW72U.js → require-capability-DDFk2jJq.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DWm1sqaG.js → required-auth-layout-LAfCgKok.js} +1 -1
- package/dist/client/assets/{reset-password-DBUxrz7S.js → reset-password-BP6-J1gf.js} +1 -1
- package/dist/client/assets/{resizable-xSdhf8k8.js → resizable-B-Hd9Zws.js} +1 -1
- package/dist/client/assets/{resolve-tab-icon-BViYoAOc.js → resolve-tab-icon-DwfEk1eS.js} +1 -1
- package/dist/client/assets/{review-settings-CxdhHh4I.js → review-settings-5U78zDHO.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-DNolPdT4.js → rich-text-link-control-Cs8PKwyq.js} +1 -1
- package/dist/client/assets/{roles-CTJqjtAt.js → roles-CGuvhC2z.js} +1 -1
- package/dist/client/assets/route-2nbAqjlk.js +1 -0
- package/dist/client/assets/route-DXCnMQY3.js +1 -0
- package/dist/client/assets/route-ZDM9K_hG.js +1 -0
- package/dist/client/assets/{runnable-block-editor-D_v3Y6XS.js → runnable-block-editor-COBrimGH.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-YRF_Tndn.js → sandbox-lifecycle-context-BC8wxuhd.js} +1 -1
- package/dist/client/assets/{schema-Dx8S5UKv.js → schema-CB-ciFqj.js} +1 -1
- package/dist/client/assets/{scroll-area-Ni1BHDLk.js → scroll-area-CRvpPUz2.js} +1 -1
- package/dist/client/assets/{search-input-C2C6IDR9.js → search-input-Dop1zFXq.js} +1 -1
- package/dist/client/assets/{search-toggle-XrzCP3HU.js → search-toggle-vhj3ytur.js} +1 -1
- package/dist/client/assets/{secret-picker-MfuGbD7z.js → secret-picker-KL5Q_RET.js} +1 -1
- package/dist/client/assets/{secrets-BKa3uo1t.js → secrets-BOAmN8Yi.js} +1 -1
- package/dist/client/assets/sections-editor-BSc_WwD-.js +1 -0
- package/dist/client/assets/{select-CKIWskoO.js → select-l0paibPQ.js} +1 -1
- package/dist/client/assets/{select-model-By0BbJXF.js → select-model-D70HFSdU.js} +1 -1
- package/dist/client/assets/seo-editor-CJOT6SSo.js +1 -0
- package/dist/client/assets/{separator-5ldU5iPA.js → separator-Bx46Hnui.js} +1 -1
- package/dist/client/assets/settings-tab-CaF_cC_h.js +5 -0
- package/dist/client/assets/{sheet-CAco8v5i.js → sheet-DuI8hTNu.js} +1 -1
- package/dist/client/assets/{shell-layout-Dc8bj9Qy.js → shell-layout-BpAT-xed.js} +1 -1
- package/dist/client/assets/{skills-CL3xHerv.js → skills-BYZ7f-kn.js} +1 -1
- package/dist/client/assets/{sso-8H5cn8Jj.js → sso-CSsvneR9.js} +1 -1
- package/dist/client/assets/{suggestion-Bk-rJje-.js → suggestion-Bcihs8ZP.js} +1 -1
- package/dist/client/assets/{switch-DwueOTYO.js → switch-0GCfvPjG.js} +1 -1
- package/dist/client/assets/{synced-repos-CNdTZ24Q.js → synced-repos-B-QJI5P5.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph-h36dkcJK.js → tab-icon-glyph-DnRLlRv0.js} +1 -1
- package/dist/client/assets/{table-hEbek0Ft.js → table-DOK6zr3O.js} +1 -1
- package/dist/client/assets/{tabs-CdtjXlat.js → tabs-CNMiZCNd.js} +1 -1
- package/dist/client/assets/task-board-BShelgWZ.js +1 -0
- package/dist/client/assets/{task-route-DR9eVvuK.js → task-route-ymdu34TZ.js} +1 -1
- package/dist/client/assets/{task-status-Dt_MbhgH.js → task-status-B9gVcAxt.js} +1 -1
- package/dist/client/assets/taskboard-analytics-BClkIHV6.js +1 -0
- package/dist/client/assets/{tasks-DFiZjBSg.js → tasks-BRB-En1H.js} +1 -1
- package/dist/client/assets/tasks-DoNztSvK.js +1 -0
- package/dist/client/assets/{textarea-3tXmq-Wc.js → textarea-C2rYHq-c.js} +1 -1
- package/dist/client/assets/thread-analytics-C7DNUKj1.js +1 -0
- package/dist/client/assets/thread-button-BeI9G--l.js +1 -0
- package/dist/client/assets/{thread-intent-Y1VdgKwx.js → thread-intent-DvIpA8uQ.js} +1 -1
- package/dist/client/assets/{thread-route-BRshsfjF.js → thread-route-3OSBRLJC.js} +1 -1
- package/dist/client/assets/{thread-route-CvFAwFyQ.js → thread-route-BLSSXm6P.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-CuFuqQDP.js → thread-sheet-body-BX2uZd1t.js} +1 -1
- package/dist/client/assets/{toggle-group-BBUMgsw-.js → toggle-group-rUyQhxO1.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-DMjHAwX1.js → toolbar-icon-button-CGADLxvK.js} +1 -1
- package/dist/client/assets/{tooltip-CCq3uglU.js → tooltip-C_zuUaOC.js} +1 -1
- package/dist/client/assets/{track-BQopacYb.js → track-DCeAbYjY.js} +1 -1
- package/dist/client/assets/{types-By6vVcI1.js → types-B4I82BK0.js} +1 -1
- package/dist/client/assets/{usage-stats-CUGPskaJ.js → usage-stats-BSKAHrH7.js} +1 -1
- package/dist/client/assets/{use-ai-providers-BdgkW-rz.js → use-ai-providers-Dq5hmlKk.js} +1 -1
- package/dist/client/assets/{use-automations-DRY01_uG.js → use-automations-BkR51GpW.js} +1 -1
- package/dist/client/assets/{use-autosave-BKedxvfh.js → use-autosave-CBElvX-u.js} +1 -1
- package/dist/client/assets/use-chat-layout-state-sYWhuOwp.js +1 -0
- package/dist/client/assets/{use-connect-companion-BQlD5V75.js → use-connect-companion-CfBam6TA.js} +1 -1
- package/dist/client/assets/{use-connection-B1Onu2Kt.js → use-connection-B7lWDEkg.js} +1 -1
- package/dist/client/assets/{use-copy-DmHXHCnz.js → use-copy-Bxzmp3bO.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-fQ6K6_pG.js → use-create-virtual-mcp-BAxvpf9T.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-C185nROT.js → use-date-fns-locale-tEPwP1Z5.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-BRJCxv7e.js → use-debounced-autosave-CMV-MoWD.js} +1 -1
- package/dist/client/assets/{use-debounced-value-yPMYT1PN.js → use-debounced-value-D-F2ClXC.js} +1 -1
- package/dist/client/assets/{use-deco-credits-CrxCz8CE.js → use-deco-credits-C4SdRl1J.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CypL9wDE.js → use-decopilot-events-RXaXesu8.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BM3IJ70N.js → use-delete-connection-CntLkIur.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DeIDIzSg.js → use-deployment-admin-D-qDDuk1.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-DGgr9dv2.js → use-fast-preview-draft-url-czyVDta1.js} +1 -1
- package/dist/client/assets/{use-file-configs-CLG1iL92.js → use-file-configs-BqBvHsey.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-9-lAGo5q.js → use-infinite-scroll-Mtyk8Q0g.js} +1 -1
- package/dist/client/assets/{use-join-requests-BhpyUEa7.js → use-join-requests-BrLCpupo.js} +1 -1
- package/dist/client/assets/use-main-panel-tabs-QkTFj72o.js +1 -0
- package/dist/client/assets/{use-mcp-auth-status-e-d864j-.js → use-mcp-auth-status-9FqZ1eaO.js} +1 -1
- package/dist/client/assets/{use-mcp-client-CFwJWbBp.js → use-mcp-client-BPL_EWAU.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-Dt5SCeuL.js → use-mcp-prompts-DPQ9PBYp.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Ddw8pP4s.js → use-mcp-tools-DZPcwH6I.js} +1 -1
- package/dist/client/assets/{use-members-o--3mm1V.js → use-members-BznZqHvf.js} +1 -1
- package/dist/client/assets/{use-mobile-BcAqan0X.js → use-mobile-BTq1Cy6A.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CjjoA5M6.js → use-navigate-to-agent-DYjNTZEe.js} +1 -1
- package/dist/client/assets/use-new-blocks-editor-V3EhO6Xe.js +1 -0
- package/dist/client/assets/{use-open-billing-url-m1RP8Kag.js → use-open-billing-url-C42sAajC.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DEUGdiVk.js → use-org-auth-client-SPO1PFOn.js} +1 -1
- package/dist/client/assets/{use-org-fs-BSupMC3v.js → use-org-fs-CHoKBUvQ.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-O-NtvfvJ.js → use-org-repo-syncs-DHnNqghz.js} +1 -1
- package/dist/client/assets/{use-org-sso-C8eq4Vdd.js → use-org-sso-BhqNUA_g.js} +1 -1
- package/dist/client/assets/{use-organization-roles-reY1_o4k.js → use-organization-roles-DMTBMJIb.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DiTNcxQS.js → use-organization-settings-7JQv2bha.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-CFUA8opi.js → use-panel-navigate-BCZgeLOH.js} +1 -1
- package/dist/client/assets/{use-project-scope-nSXqOJGj.js → use-project-scope-CfQAh61-.js} +1 -1
- package/dist/client/assets/use-recent-apps-CIZIMNq3.js +1 -0
- package/dist/client/assets/{use-releases-BbGaY8US.js → use-releases-BXFQEoVJ.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-BT8MtXS3.js → use-reports-diagnostic-BONoWqN1.js} +1 -1
- package/dist/client/assets/{use-secrets-FJu3iWhY.js → use-secrets-BgHZaAe-.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-CxPC0M-d.js → use-section-preview-base-CjxZD1As.js} +1 -1
- package/dist/client/assets/{use-session-runtime-CNsfPJpj.js → use-session-runtime-BhqEJTFD.js} +1 -1
- package/dist/client/assets/{use-tags-BXGxCIku.js → use-tags-D18QiQFO.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-DNKSgirc.js → use-task-board-analytics-CHyrlJdR.js} +1 -1
- package/dist/client/assets/{use-task-board-events-C7j5aBlD.js → use-task-board-events-2DTfUd8b.js} +1 -1
- package/dist/client/assets/{use-task-metadata-D3Ciwarw.js → use-task-metadata-LZhy7A-X.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-D27BLIsa.js → use-thread-analytics-BFFe95Y-.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-D0UmTPT7.js → use-thread-outputs-DHNNx8Ws.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-cbQywZ3L.js +1 -0
- package/dist/client/assets/{useQueries-CrAKGEfH.js → useQueries-3Ghz9to5.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CL-DZoeM.js +1 -0
- package/dist/client/assets/{users-CQYodV6R.js → users-BFlW1Qqv.js} +1 -1
- package/dist/client/assets/{utils-D94emI8J.js → utils-DaYQyxgr.js} +1 -1
- package/dist/client/assets/variant-calendar-pbRcz2zJ.js +1 -0
- package/dist/client/assets/{variant-matcher-override-BFWepI_H.js → variant-matcher-override-Cng-aq7T.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-a9S8LD9H.js → view-mode-toggle-CNo4raIS.js} +1 -1
- package/dist/client/assets/{virtual-mcp-BC9jxxUg.js → virtual-mcp-DPVA40iH.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/agent-analytics-BHngg3aN.js +0 -2
- package/dist/client/assets/agent-app-eih7qmuw.js +0 -1
- package/dist/client/assets/agent-assets-CojSmNaz.js +0 -1
- package/dist/client/assets/agent-automations-BQwnmsqe.js +0 -1
- package/dist/client/assets/agent-connect-sources-DC_snIij.js +0 -1
- package/dist/client/assets/agent-deck-BHvHS_x2.js +0 -1
- package/dist/client/assets/agent-e2e-BScuCsCp.js +0 -1
- package/dist/client/assets/agent-experiments-0ZSUWJyV.js +0 -1
- package/dist/client/assets/agent-file-A2jLB4uh.js +0 -1
- package/dist/client/assets/agent-hosting-C03IBXsD.js +0 -1
- package/dist/client/assets/agent-library-Bndr3ZTh.js +0 -1
- package/dist/client/assets/agent-library-file-DHNrLn15.js +0 -1
- package/dist/client/assets/agent-monitor-C2UpDGeU.js +0 -1
- package/dist/client/assets/agent-overview-vGVfOmzC.js +0 -1
- package/dist/client/assets/agent-settings-CKUunA9x.js +0 -1
- package/dist/client/assets/agent-site-editor-code-DNEtxYix.js +0 -2
- package/dist/client/assets/agent-view-Eu0cDk5o.js +0 -1
- package/dist/client/assets/api-keys-DTPxsqpA.js +0 -1
- package/dist/client/assets/app-editor-OxAoUr_m.js +0 -1
- package/dist/client/assets/category-editor-BX5BNfiN.js +0 -1
- package/dist/client/assets/context-CHxPejUn.js +0 -1
- package/dist/client/assets/discover-1nnz5mE8.js +0 -1
- package/dist/client/assets/flat-project-DxrfpqU8.js +0 -1
- package/dist/client/assets/home-R2M47XKc.js +0 -1
- package/dist/client/assets/index-DFBQfnNq.css +0 -1
- package/dist/client/assets/index-w4vR7oJd.js +0 -10
- package/dist/client/assets/library-CpDr8cUt.js +0 -1
- package/dist/client/assets/match-site-slug-config-D3fUJ6vX.js +0 -1
- package/dist/client/assets/openai-conversation-Bidm8HKX.js +0 -3
- package/dist/client/assets/post-calendar-DVsOpmKX.js +0 -1
- package/dist/client/assets/project-feed-DsVk1K7o.js +0 -1
- package/dist/client/assets/project-reports-DKz6hsTO.js +0 -1
- package/dist/client/assets/project-tasks-DEHeH6xm.js +0 -1
- package/dist/client/assets/record-editor-BG6JZBAo.js +0 -1
- package/dist/client/assets/redirect-editor-BSixOpkn.js +0 -1
- package/dist/client/assets/reports-DQHzs4c2.js +0 -1
- package/dist/client/assets/route-C4g7C29_.js +0 -1
- package/dist/client/assets/route-iDn0dH_W.js +0 -1
- package/dist/client/assets/route-mD1G8miY.js +0 -1
- package/dist/client/assets/sections-editor-DQXGqVXO.js +0 -1
- package/dist/client/assets/seo-editor-BI6yz1SI.js +0 -1
- package/dist/client/assets/settings-tab-DjCUiptn.js +0 -5
- package/dist/client/assets/task-board-X-0Zbika.js +0 -1
- package/dist/client/assets/taskboard-analytics-DGE69gm2.js +0 -1
- package/dist/client/assets/tasks-DEV8yvUO.js +0 -1
- package/dist/client/assets/thread-analytics-Batrg_G6.js +0 -1
- package/dist/client/assets/thread-button-1m1VWTYv.js +0 -1
- package/dist/client/assets/use-chat-layout-state-ffnO3cas.js +0 -1
- package/dist/client/assets/use-main-panel-tabs-Ex0Ebdb5.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-DqR1bcfV.js +0 -1
- package/dist/client/assets/use-project-native-view-presence-xh82wo73.js +0 -1
- package/dist/client/assets/useInfiniteQuery-DXdUQ48R.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BmynEKtw.js +0 -1
- package/dist/client/assets/variant-calendar-Dfcw4asd.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3731,7 +3731,7 @@ ${J.join(`
|
|
|
3731
3731
|
`)}`:X}function mn6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3732
3732
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var qQ8=200,vn6=12,xn6,yn6=300,yC0=3;var BD1=D(()=>{Z7();a$();fC0();xn6={aheadBy:0,behindBy:0,files:[]}});function in6($){if(!$||$.includes(".."))return!1;return dn6.test($)}function IQ8($){return pn6.includes($)}function DD1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!in6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function OD1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var dn6,pn6;var VQ8=D(()=>{dn6=/^[\w./@-]+$/;pn6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function v60($,Z){let Q=$?.repository;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function SQ8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new aE(k7);let J=await kj($.storage,X,Y);if(J&&await HD($.storage,J)){let F=await zU($,J,{forceRefresh:!0}).catch((U)=>{throw new aE(U instanceof Error?U.message:k7)});await kQ8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new aE("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Km({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:k7;throw new aE(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await AU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=bO$(F instanceof Error?F.message:String(F));throw U?new aE(N):F});await kQ8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function kQ8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=zp($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await ZE(K,nn6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var nn6=10485760,aE;var LD1=D(()=>{TW();IC0();G$0();zH0();b00();Z7();aE=class aE extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function on6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!tn6.test(Z))throw Error(`Invalid branch name: ${$}`)}function iy($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(rn6)])}async function an6($,Z){let Q=$.var.studioContext,Y=CU(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=Ef(G?.metadata?.runtime);if(W)return W;let K=ER0(Z.virtualMcpMetadata),H=K==="cms"?await nB1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)W$0(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function en6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await gX($.var.studioContext)}catch{return null}}function py($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function qp($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=v60(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=G0(Y);return Jm(Y,J.id,X)}function jD1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=oB$(Z);if(Y!==void 0)return $.json({error:Q},429,{...G9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof s6)return $.json({error:Q},409,G9);let X=IW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,G9)}return $.json({error:Q},502,G9)}async function wD1($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function bQ8($){try{let Z=await qp($),Q=await gC0(Z,$.get("vmClaim").branch);return $.json(Q,200,G9)}catch(Z){return jD1($,Z)}}function b60($,Z){let Y=(lC0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return lC0.set($,X),X.finally(()=>{if(lC0.get($)===X)lC0.delete($)}),Y}async function NQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,G9);let Y=Q?.runner??py($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...G9}})}}let O=await B.text(),L=Q?.redactRepoDir?$t6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...G9}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function $t6($){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 cC0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function Zt6($){return xQ8.includes($)}var tn6,CQ8=524288,_Q8=65536,rn6=1e4,vQ8=2000,sn6,lC0,G9,xQ8,fQ8=()=>{let $=new Z1;$.use("/:virtualMcpId/:branch/*",sn6),$.post("/:virtualMcpId/:branch/write",(Q)=>NQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:iy(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>NQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:iy(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>NQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:iy(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>NQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:iy(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>NQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:iy(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>NQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:iy(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>NQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:iy(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return NQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return NQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>NQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!Zt6(Y))return Q.json({error:`step must be one of: ${xQ8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await nB1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await en6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,G9);if(Y==="start"){let G=G0(Q.var.studioContext),W=Qd(X.virtualMcpMetadata);try{await OR0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return NQ(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return KO(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return v78(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return bQ8(Q);return Z(Q)});let Z=(Q)=>NQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(vQ8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return bQ8(Q);return NQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(vQ8)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await qp(Q),G=await hC0(J,Y.branch,X.base);return Q.json(G,200,G9)}catch(X){return jD1(Q,X)}return NQ(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,G9);let Y=py(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return b60(X,async()=>{try{await tB1(W,Y,X);let K=v60(J,G);if(K)await SQ8(W,Y,X,K)}catch(K){if(K instanceof aE)return Q.json({error:K.message},403,G9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,G9)}return NQ(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return b60(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,G9);try{let G=await qp(Q);return await MQ8(G,Y.branch,J),Q.json({ok:!0},200,G9)}catch(G){let W=IW(G)===409||G instanceof s6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,G9)}});return b60(Y.claimName,()=>NQ(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return b60(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await qp(Q),H=W.base??await K.getDefaultBranch();return await uC0(K,Y.branch,H),Q.json({ok:!0},200,G9)}catch(W){return jD1(Q,W)}});let X=py(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return b60(J,async()=>{try{await tB1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,G9)}return NQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",v5({maxSize:CQ8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=py(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=sB1(F)&&N?[F,U]:X?await Promise.all([cC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),cC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await qp(Q);return Promise.all([gC0(w,Y.branch),hC0(w,Y.branch)])})();await oG(K,G0(K).id,"suggesting a commit message");let L=await g78(K,B,O);return Q.json(L,200,G9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,G9);return Q.json({error:F},502,G9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",v5({maxSize:CQ8,onError:(Q)=>Q.json({error:"Payload too large"},413,G9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=py(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=sB1(F)&&N?[F,U]:X?await Promise.all([cC0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),cC0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await qp(Q);return Promise.all([gC0(w,Y.branch),hC0(w,Y.branch)])})();await oG(K,G0(K).id,"judging whether a change needs review");let L=await u78(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,G9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,G9);return Q.json({error:F},502,G9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=py(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return wD1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",v5({maxSize:_Q8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=py(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=DD1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=OD1(J,W.resolveType);return wD1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",v5({maxSize:_Q8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let{runner:Y,claimName:X,virtualMcpMetadata:J}=Q.get("vmClaim"),G;try{G=Y?await Y.getPreviewUrl(X):Yd(J)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W;try{W=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!W||typeof W!=="object"||Array.isArray(W))return Q.json({error:"Invalid JSON body"},400);let K=DD1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!IQ8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=OD1(G,K.resolveType);return wD1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var yQ8=D(()=>{J8();eW();Ep();pB1();Zd();S78();xW();Xd();C78();vW();JH();_78();b78();Z71();J$0();$D1();l78();Z7();A5();BD1();VQ8();jR0();LD1();tn6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;sn6=MC0(async($,Z)=>{let Q=$.var.studioContext;try{t(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=p0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=G0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{on6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=H10({orgId:X.id,virtualMcpId:J,branch:G}),H=await q91(Q,G),F=M91(H,Y),U=k78({userId:F,projectRef:K}),N=W.metadata??null,B=await an6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await gX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});lC0=new Map;G9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};xQ8=["clone","install","start"]});function gQ8($,Z,Q){let Y=ED1.get($);if(!Y)Y={pending:null,running:!1},ED1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)Yt6($,Y);return J}async function Yt6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await Xt6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)ED1.delete($)}}async function Xt6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Rp(Z,Q),W=await Z.listDecofileEntries(G,Y),K=FD1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=UD1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3733
3733
|
`;await PQ8(Z.repo,L);let w=O[0]??`${xC0(Y)}/${YD1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of UD1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await AQ8(Z,F.values(),X),{decofile:B,skipped:O}=M60(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:GH(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:Jt6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof s6)||J>=Qt6-1)throw N;await z$(U7(2000,200,J,2,0.5))}}}function Jt6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return J51(Y,$.deps.coAuthor)}var Qt6=3,ED1;var hQ8=D(()=>{lA0();kC0();i4();a$();Z7();fC0();ED1=new Map});import{createHmac as uQ8,randomBytes as Gt6,timingSafeEqual as Wt6}from"crypto";function lQ8(){if(mC0)return mC0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return mC0=$?Buffer.from($):Gt6(32),mC0}function zD1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+Kt6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=uQ8("sha256",lQ8()).update(Y).digest("base64url");return`${Y}.${X}`}function cQ8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(uQ8("sha256",lQ8()).update(Y).digest("base64url"));if(X.length!==J.length||!Wt6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var Kt6=21600000,mC0=null;var mQ8=D(()=>{X$()});function dC0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Ht6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=dC0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function dQ8($){let Z;try{Z=dC0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=Ht6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=dC0(G),K=W&&dC0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as Mp}from"zod";function Ut6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Ft6.test($)}function oQ8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function x60($){let Z=$.get("decofileScope");return Jm($.var.studioContext,Z.organizationId,Z.repository)}function f60($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof s6)return $.json({error:Q},409);let Y=IW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function rQ8(){let $=new Z1;return $.use("/:virtualMcpId/:branch",tQ8),$.use("/:virtualMcpId/:branch/*",tQ8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await x60(Z),X=await TQ8(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(dQ8(X.decofile),200,{...J,"content-type":"application/json"});let G=zD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(oQ8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return f60(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await x60(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return f60(Z,X)}}),$.patch("/:virtualMcpId/:branch",Bt6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Dt6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=I60(X.data)}catch(G){if(G instanceof V60)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{VC0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(QD1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await x60(Z),W=await gQ8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:zp(Y)},J),K=zD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:oQ8(Z)})}catch(G){return f60(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await x60(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(IW(W)!==409)throw W;await uC0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(IW(G)===409)return Z.json({error:"merge-conflict"},409);if(IW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return f60(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await x60(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(IW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return f60(Z,Y)}}),$}var Ft6,iQ8=500,pQ8=1048576,nQ8=1024,Nt6=8388608,Bt6,Dt6,tQ8;var sQ8=D(()=>{jR0();kC0();J8();eW();pB1();IC0();LD1();Z7();hQ8();mQ8();BD1();fC0();JH();Ft6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Bt6=v5({maxSize:Nt6,onError:($)=>$.json({error:"Payload too large"},413)}),Dt6=Mp.object({set:Mp.record(Mp.string(),Mp.unknown()).optional(),delete:Mp.array(Mp.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)<=iQ8,{message:`Patch cannot touch more than ${iQ8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=pQ8),{message:`Each block must be at most ${pQ8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=nQ8),{message:`Each block key must be at most ${nQ8} characters`}),tQ8=MC0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!Ut6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!cQ8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await IJ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Yd(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=v60(K,F);if(!U)return $.json({error:"Project has no repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,repository:U,userId:G}),Z()})});var aQ8=($)=>{let Z=new Z1;if(Z.use("*",si),Z.use("*",T68),Z.route("/",P68($.voiceSessions)),Z.route("/",xS0()),Z.route("/",J58()),Z.route("/",i68()),Z.route("/",D78()),Z.route("/",L78()),Z.route("/",G78()),Z.route("/",N78()),Z.route("/",K78()),Z.route("/",TC0()),Z.route("/tools",T78()),Z.route("/",z78()),Z.route("/",gZ8({kvStorage:$.kvStorage})),Z.route("/",fZ8()),Z.route("/fs",sZ8({getConnection:$.getNatsConnection})),Z.route("/sandbox",fQ8()),Z.route("/decofile",rQ8()),Z.route("/",Y78()),Z.route("/",eZ8()),Z.route("/deco-sites",yS0()),Z.route("/hosting",b68()),Z.route("/monitor",l68()),Z.route("/sso",SS0()),Z.route("/",RC0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",k68()),$.mountDevAssets)Z.route("/dev-assets",lS0({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("/",V$8()),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",Z78()),Z.route("/mcp",VM0()),Z.route("/mcp/self",EC0()),Z.route("/mcp",CM0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var eQ8=D(()=>{J8();A68();R68();jS0();S68();BN1();x68();c68();cS0();pE();KN1();jN1();yZ8();hZ8();aZ8();$78();O80();$N1();_M0();yB1();Q78();X78();W78();H78();uB1();O78();w78();P78();lB1();R78();cB1();kM0();yQ8();sQ8()});import{z as ny}from"zod";class PD1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new QY8.Kvm(iC0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:iC0.StorageType.Memory,ttl:YY8.nanos(AD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}async conversationAgent($){let Z=await this.kv(),Q=`agent.${$.conversationKey}`,Y=Date.now()+45000;while(Date.now()<Y){let X=await Z.get(Q),J=X?.operation==="PUT"?ZY8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await z$(200);continue}let G=$Y8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await z$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,$Y8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new q1(503,{message:"Voice conversation is starting; try again"})}async createSession($){let Z=this.adapter.forConversationModel($.model),Q=await this.conversationAgent(Z);try{return{provider:"elevenlabs",conversationToken:await Z.createConversationToken(Q)}}catch(Y){let X=await this.kv(),J=`agent.${Z.conversationKey}`,G=await X.get(J),W=G?.operation==="PUT"?ZY8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var iC0,QY8,YY8,$Y8,ZY8;var XY8=D(()=>{OJ();vU();a$();iC0=C(BK(),1),QY8=C(e2(),1),YY8=C(jz(),1),$Y8=new TextEncoder,ZY8=ny.discriminatedUnion("state",[ny.object({state:ny.literal("ready"),agentId:ny.string()}),ny.object({state:ny.literal("creating"),expiresAt:ny.number()})])});import{z as Ip}from"zod";function Ot6($){return{model:$.model,instructions:`${qR$}
|
|
3734
|
-
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class AD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:Ot6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:Ip.object({session:Ip.object({id:Ip.string().min(1)}),transport:Ip.object({type:Ip.literal("webrtc"),sdp:Ip.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var JY8=D(()=>{vU()});var GY8;var WY8=D(()=>{GY8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function TD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:TR$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:GY8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:AD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var KY8=D(()=>{vU();WY8()});import{z as nX}from"zod";import{createHash as Lt6,createHmac as wt6}from"crypto";class pC0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Lt6("sha256").update(JSON.stringify(TD1($))).digest("hex"),this.conversationKey=wt6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new pC0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=nX.object({agents:nX.array(nX.object({agent_id:nX.string(),name:nX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return nX.object({platform_settings:nX.object({auth:nX.object({enable_auth:nX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...TD1(this.config)},AbortSignal.timeout(15000));return nX.object({agent_id:nX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var HY8=D(()=>{KY8()});import{createHmac as jt6,timingSafeEqual as Et6}from"crypto";import{z as Vp}from"zod";function UY8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return jt6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function NY8($,Z){let Q=Buffer.from(JSON.stringify(FY8.parse($))).toString("base64url");return`${Q}.${UY8(Q,Z)}`}function BY8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(UY8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Et6(W,G))return null;try{let K=FY8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+AD)return null;return K.data}catch{return null}}var FY8;var DY8=D(()=>{vU();FY8=Vp.object({sessionId:Vp.string().uuid(),organizationId:Vp.string().min(1).max(256),userId:Vp.string().min(1).max(256),threadId:Vp.string().min(1).max(256),expiresAt:Vp.number().int().positive()})});import{z as RD1}from"zod";function OY8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return qD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var qD1;var LY8=D(()=>{qD1=RD1.object({provider:RD1.enum(["elevenlabs","openai"]),model:RD1.string().trim().min(1).max(128)})});import{createHash as zt6}from"crypto";import{z as kp}from"zod";function Sp($){return`user.${zt6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class ID1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new wY8.Kvm(tC0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:tC0.StorageType.Memory,ttl:jY8.nanos(AD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=OY8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+AD},W=NY8(G,this.deps.secret),K=await this.kv(),H=Sp(G),F=await K.get(H),U=F?.operation==="PUT"?nC0.parse(F.json()):null,N=MD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:Sp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=BY8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=Sp(Q),J=await Y.get(X),G=J?.operation==="PUT"?nC0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,MD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=Sp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?nC0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,MD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(Sp($));if(Q?.operation==="PUT"&&nC0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Sp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var tC0,wY8,jY8,nC0,MD1;var EY8=D(()=>{OJ();vU();DY8();LY8();tC0=C(BK(),1),wY8=C(e2(),1),jY8=C(jz(),1),nC0=kp.object({sessionId:kp.string().uuid(),expiresAt:kp.number(),connected:kp.boolean().optional(),conversation:qD1.optional(),characters:kp.number().int().nonnegative(),requests:kp.number().int().nonnegative()}),MD1=new TextEncoder});function Pt6($){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 At6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},zY8=()=>{let $=new Z1;return $.use("*",At6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await QG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Pt6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var PY8=D(()=>{J8();X$();Rk0()});import{z as y1}from"zod";function wN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function _t6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function vt6($,Z,Q){try{return JSON.parse($)}catch{throw new RY8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function bt6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:vt6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function xt6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?mF(Q.function.parameters):mF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function ft6($){if(!$)return;return{openai:{response_format:$}}}function yt6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function AY8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function TY8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Tt6=256,Rt6,qt6,Mt6,It6,Vt6,kt6,St6,Ct6,RY8,qY8,MY8;var IY8=D(()=>{y4();J8();Ep();CH();Rt6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),qt6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Mt6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(qt6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),It6=y1.object({type:y1.literal("text")}),Vt6=y1.object({type:y1.literal("json_object")}),kt6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),St6=y1.union([It6,Vt6,kt6]),Ct6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Mt6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Rt6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:St6.optional(),user:y1.string().optional()});RY8=class RY8 extends Error{constructor($){super($);this.name="MessageConversionError"}};qY8=new Z1;qY8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(wN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(wN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(wN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Ct6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(wN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=_t6(J.model);if(!G)return $.json(wN("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>DP(E.providerId));if(!j)return $.json(wN("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(wN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=bt6(J.messages),N=J.tools?xt6(J.tools):void 0,B=ft6(J.response_format),O=yt6(),L=Math.floor(Date.now()/1000);if(J.stream)return KO($,async(w)=>{let j=AY8(F,U,N,J,B,$.req.raw.signal);try{let E=$d(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=Tt6)await P()}else if(q.type==="tool-call"){await P();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:TY8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=AY8(F,U,N,J,B,$.req.raw.signal),j=await xU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:TY8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(wN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(wN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(wN(X.message,"server_error"),500)}});MY8=qY8});function gt6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function VY8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(UA(U)!==J)continue;if(!gt6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var kY8=D(()=>{J8();aG()});var CY8;var SY8=D(()=>{CY8={name:"decocms",version:"4.425.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":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function lt6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??ut6}}var _Y8,ut6="https://ph.studio.decocms.com",vY8;var bY8=D(()=>{J8();ws();yf();I9();X$();uU1();SY8();_Y8=new Z1;_Y8.get("/",($)=>{let Z={version:CY8.version,theme:b6$(),...dK().logo&&{logo:dK().logo},...vD()&&{internalUrl:Up1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:E48(),posthog:lt6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:zO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});vY8=_Y8});function ty($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function VD1($){return(ty($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function xY8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ty($))}&sz=${Z}`}function ct6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function fY8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=ct6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as E$}from"zod";var mt6,yY8;var gY8=D(()=>{mt6=E$.object({check_id:E$.string(),title:E$.string(),description:E$.string().optional(),impact:E$.string().optional(),why:E$.string().optional(),category:E$.string(),severity:E$.string(),value_band:E$.string().optional(),value_driver:E$.string().optional(),controllability:E$.string().optional(),pages:E$.array(E$.string()),tasks:E$.array(E$.string()),evidence:E$.string(),sample_scope:E$.string().optional(),sources:E$.array(E$.string())}),yY8=E$.object({domain:E$.string(),brand:E$.string(),favicon:E$.string().optional(),scanned_at:E$.string().nullable(),lang:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),totals:E$.object({measured:E$.number(),registry_total:E$.number(),passed:E$.number(),failed:E$.number(),blocked:E$.number()}),buckets:E$.array(E$.object({id:E$.enum(["critical","important","worth"]),label:E$.string(),items:E$.array(mt6)})),passing:E$.object({count:E$.number(),items:E$.array(E$.object({check_id:E$.string(),title:E$.string()}))}),not_measured:E$.object({count:E$.number(),groups:E$.array(E$.object({reason:E$.string(),label:E$.string(),count:E$.number(),checks:E$.array(E$.string())}))}),categories:E$.array(E$.object({key:E$.string(),label:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),pass:E$.number(),fail:E$.number()})),screenshots:E$.array(E$.object({url:E$.string(),page_type:E$.string().optional(),viewport:E$.enum(["desktop","mobile"]),image_url:E$.string()}))})});function hY8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function oC0($,Z={}){let Q=await fetch(hY8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return yY8.parse(await Q.json())}async function uY8($,Z={}){let Q=await fetch(hY8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var kD1=D(()=>{gY8();mB()});import{join as lY8}from"path";async function it6($){try{let Z=await oC0($,{signal:AbortSignal.timeout(dt6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||VD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function GG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function pt6($,Z){let Q=ty($),Y=Z?.brand?.trim()||VD1(Q),X=xY8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=fY8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(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="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(G)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${GG(G)}.md" />`,`<link rel="icon" href="${GG(X)}" sizes="any" />`].join(`
|
|
3734
|
+
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class AD1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:Ot6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:Ip.object({session:Ip.object({id:Ip.string().min(1)}),transport:Ip.object({type:Ip.literal("webrtc"),sdp:Ip.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var JY8=D(()=>{vU()});var GY8;var WY8=D(()=>{GY8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function TD1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:TR$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:GY8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:AD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var KY8=D(()=>{vU();WY8()});import{z as nX}from"zod";import{createHash as Lt6,createHmac as wt6}from"crypto";class pC0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Lt6("sha256").update(JSON.stringify(TD1($))).digest("hex"),this.conversationKey=wt6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new pC0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=nX.object({agents:nX.array(nX.object({agent_id:nX.string(),name:nX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return nX.object({platform_settings:nX.object({auth:nX.object({enable_auth:nX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...TD1(this.config)},AbortSignal.timeout(15000));return nX.object({agent_id:nX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return nX.object({token:nX.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var HY8=D(()=>{KY8()});import{createHmac as jt6,timingSafeEqual as Et6}from"crypto";import{z as Vp}from"zod";function UY8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return jt6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function NY8($,Z){let Q=Buffer.from(JSON.stringify(FY8.parse($))).toString("base64url");return`${Q}.${UY8(Q,Z)}`}function BY8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(UY8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Et6(W,G))return null;try{let K=FY8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+AD)return null;return K.data}catch{return null}}var FY8;var DY8=D(()=>{vU();FY8=Vp.object({sessionId:Vp.string().uuid(),organizationId:Vp.string().min(1).max(256),userId:Vp.string().min(1).max(256),threadId:Vp.string().min(1).max(256),expiresAt:Vp.number().int().positive()})});import{z as RD1}from"zod";function OY8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return qD1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var qD1;var LY8=D(()=>{qD1=RD1.object({provider:RD1.enum(["elevenlabs","openai"]),model:RD1.string().trim().min(1).max(128)})});import{createHash as zt6}from"crypto";import{z as kp}from"zod";function Sp($){return`user.${zt6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class ID1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new wY8.Kvm(tC0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:tC0.StorageType.Memory,ttl:jY8.nanos(AD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=OY8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+AD},W=NY8(G,this.deps.secret),K=await this.kv(),H=Sp(G),F=await K.get(H),U=F?.operation==="PUT"?nC0.parse(F.json()):null,N=MD1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:Sp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=BY8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=Sp(Q),J=await Y.get(X),G=J?.operation==="PUT"?nC0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,MD1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=Sp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?nC0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,MD1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(Sp($));if(Q?.operation==="PUT"&&nC0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Sp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var tC0,wY8,jY8,nC0,MD1;var EY8=D(()=>{OJ();vU();DY8();LY8();tC0=C(BK(),1),wY8=C(e2(),1),jY8=C(jz(),1),nC0=kp.object({sessionId:kp.string().uuid(),expiresAt:kp.number(),connected:kp.boolean().optional(),conversation:qD1.optional(),characters:kp.number().int().nonnegative(),requests:kp.number().int().nonnegative()}),MD1=new TextEncoder});function Pt6($){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 At6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},zY8=()=>{let $=new Z1;return $.use("*",At6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await QG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Pt6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var PY8=D(()=>{J8();X$();Rk0()});import{z as y1}from"zod";function wN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function _t6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function vt6($,Z,Q){try{return JSON.parse($)}catch{throw new RY8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function bt6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:vt6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function xt6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?mF(Q.function.parameters):mF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function ft6($){if(!$)return;return{openai:{response_format:$}}}function yt6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function AY8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function TY8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Tt6=256,Rt6,qt6,Mt6,It6,Vt6,kt6,St6,Ct6,RY8,qY8,MY8;var IY8=D(()=>{y4();J8();Ep();CH();Rt6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),qt6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Mt6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(qt6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),It6=y1.object({type:y1.literal("text")}),Vt6=y1.object({type:y1.literal("json_object")}),kt6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),St6=y1.union([It6,Vt6,kt6]),Ct6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Mt6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Rt6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:St6.optional(),user:y1.string().optional()});RY8=class RY8 extends Error{constructor($){super($);this.name="MessageConversionError"}};qY8=new Z1;qY8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(wN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(wN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(wN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Ct6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(wN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=_t6(J.model);if(!G)return $.json(wN("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>DP(E.providerId));if(!j)return $.json(wN("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(wN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=bt6(J.messages),N=J.tools?xt6(J.tools):void 0,B=ft6(J.response_format),O=yt6(),L=Math.floor(Date.now()/1000);if(J.stream)return KO($,async(w)=>{let j=AY8(F,U,N,J,B,$.req.raw.signal);try{let E=$d(j),z=!1,T=0,A="",P=async()=>{if(A.length===0)return;let q=A;A="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(A+=q.text,A.length>=Tt6)await P()}else if(q.type==="tool-call"){await P();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await P(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:TY8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await P(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=AY8(F,U,N,J,B,$.req.raw.signal),j=await xU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:TY8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(wN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(wN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(wN(X.message,"server_error"),500)}});MY8=qY8});function gt6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function VY8(){let $=new Z1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=p0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!wZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||k9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(UA(U)!==J)continue;if(!gt6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var kY8=D(()=>{J8();aG()});var CY8;var SY8=D(()=>{CY8={name:"decocms",version:"4.426.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":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function lt6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??ut6}}var _Y8,ut6="https://ph.studio.decocms.com",vY8;var bY8=D(()=>{J8();ws();yf();I9();X$();uU1();SY8();_Y8=new Z1;_Y8.get("/",($)=>{let Z={version:CY8.version,theme:b6$(),...dK().logo&&{logo:dK().logo},...vD()&&{internalUrl:Up1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:E48(),posthog:lt6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:zO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});vY8=_Y8});function ty($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function VD1($){return(ty($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function xY8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ty($))}&sz=${Z}`}function ct6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function fY8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=ct6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as E$}from"zod";var mt6,yY8;var gY8=D(()=>{mt6=E$.object({check_id:E$.string(),title:E$.string(),description:E$.string().optional(),impact:E$.string().optional(),why:E$.string().optional(),category:E$.string(),severity:E$.string(),value_band:E$.string().optional(),value_driver:E$.string().optional(),controllability:E$.string().optional(),pages:E$.array(E$.string()),tasks:E$.array(E$.string()),evidence:E$.string(),sample_scope:E$.string().optional(),sources:E$.array(E$.string())}),yY8=E$.object({domain:E$.string(),brand:E$.string(),favicon:E$.string().optional(),scanned_at:E$.string().nullable(),lang:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),totals:E$.object({measured:E$.number(),registry_total:E$.number(),passed:E$.number(),failed:E$.number(),blocked:E$.number()}),buckets:E$.array(E$.object({id:E$.enum(["critical","important","worth"]),label:E$.string(),items:E$.array(mt6)})),passing:E$.object({count:E$.number(),items:E$.array(E$.object({check_id:E$.string(),title:E$.string()}))}),not_measured:E$.object({count:E$.number(),groups:E$.array(E$.object({reason:E$.string(),label:E$.string(),count:E$.number(),checks:E$.array(E$.string())}))}),categories:E$.array(E$.object({key:E$.string(),label:E$.string(),score:E$.number().nullable(),band:E$.string().nullable(),pass:E$.number(),fail:E$.number()})),screenshots:E$.array(E$.object({url:E$.string(),page_type:E$.string().optional(),viewport:E$.enum(["desktop","mobile"]),image_url:E$.string()}))})});function hY8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function oC0($,Z={}){let Q=await fetch(hY8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return yY8.parse(await Q.json())}async function uY8($,Z={}){let Q=await fetch(hY8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var kD1=D(()=>{gY8();mB()});import{join as lY8}from"path";async function it6($){try{let Z=await oC0($,{signal:AbortSignal.timeout(dt6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||VD1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function GG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function pt6($,Z){let Q=ty($),Y=Z?.brand?.trim()||VD1(Q),X=xY8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=fY8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${GG(W)}</title>`,`<meta name="description" content="${GG(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="${GG(W)}" />`,`<meta property="og:description" content="${GG(K)}" />`,`<meta property="og:url" content="${GG(G)}" />`,`<meta property="og:image" content="${GG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${GG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${GG(W)}" />`,`<meta name="twitter:description" content="${GG(K)}" />`,`<meta name="twitter:image" content="${GG(H)}" />`,`<meta name="twitter:image:alt" content="${GG(F)}" />`,`<link rel="canonical" href="${GG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${GG(G)}.md" />`,`<link rel="icon" href="${GG(X)}" sizes="any" />`].join(`
|
|
3735
3735
|
`)}function nt6($,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}
|
|
3736
3736
|
</head>`)}function cY8($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=ty(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(lY8($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${jW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(tt6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let Y=ty(Q.req.param("file").replace(/\.md$/,""));try{let X=await uY8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(ot6)});if(X===null)return Q.text("Deco Score not found",404);return Q.body(X,200,{"Content-Type":"text/markdown; charset=utf-8","Cache-Control":"public, max-age=600, stale-while-revalidate=3600","Access-Control-Allow-Origin":"*"})}catch{return Q.text("Deco Score unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?lY8($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await it6(ty(Y)),K=pt6(Y,W);return Q.html(nt6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var dt6=2500,tt6=1e4,ot6=1e4;var mY8=D(()=>{J8();mB();kD1();X$()});function rC0($,Z){return fetch(`${jW({})}${$}`,Z)}async function rt6($,Z){let Q=await oC0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function at6($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",Y=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:Y}}var st6,FO,dY8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},iY8;var pY8=D(()=>{J8();Z3();mB();kD1();st6=new Set(["complete","errored","terminated","unknown"]);FO=new Z1;FO.use("*",async($,Z)=>{let Q=await x8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});FO.use("/link-token/*",dY8);FO.use("/suggest",dY8);FO.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.req.query("lang")?.trim()||void 0;try{return $.json(await rt6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});FO.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=at6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await rC0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${iw({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});FO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await rC0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${iw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:st6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});FO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await rC0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});FO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await rC0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});iY8=FO});var et6=1048576,SD1;var nY8=D(()=>{J8();eW();X$();qU1();SD1=new Z1;SD1.post("/webhook",v5({maxSize:et6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!_88(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=v88(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await b88(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as $o6}from"crypto";function Yo6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return $o6(Buffer.from(X),Buffer.from(Y))}function Xo6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function tY8($){let Z=new Z1;return Z.post("/webhook",v5({maxSize:Zo6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!Yo6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!Qo6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});return T10().then((U)=>U?.markTenantPoolsDirty(`https://github.com/${F}`,H)).catch((U)=>console.warn(`[github-webhook] tenant pool refresh for ${F}@${H} failed: ${U instanceof Error?U.message:String(U)}`)),Q.json({ok:!0})}let W=Xo6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Jo6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Jo6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await Db$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Zo6=5242880,Qo6;var oY8=D(()=>{J8();eW();vW();C7();Qo6=new Set(["check_suite","issue_comment"])});import{DBOS as _D1,SchedulerMode as Go6}from"@dbos-inc/dbos-sdk";async function Ko6(){try{return await Ho6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function Ho6(){if(!A10())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (O91(),D91)),Promise.resolve().then(() => (B91(),N91))]),Q=await T10(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=D8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=CA$({sandboxes:J,pools:G,records:await _A$(X,J,G),now:W}),{batches:H,failed:F}=await vA$(K,PH0(X,new UX(E0().encryptionKey)),{now:W,orgFsLifetimeMs:ZT0}),U=0,N=0;for(let B of H){let O=await Y.pushCredentials(B);U+=O.stored,N+=O.kept}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F}}async function Fo6($,Z){let Q=await _D1.runStep(Ko6,{name:"pushSandboxCredentials"});if(Q&&(Q.refused>0||Q.failed>0))console.warn(`[sandbox-credential-push] ${Q.sandboxes} sandboxes: pushed ${Q.pushed}, kept ${Q.kept}, refused ${Q.refused}, failed ${Q.failed}`)}function rY8(){if(CD1)return;if(!E0().agentSandboxEnabled||!A10())return;CD1=_D1.registerWorkflow(Fo6,{name:"sandboxCredentialPushWorkflow"}),_D1.registerScheduled(CD1,{name:"sandboxCredentialPushWorkflow",crontab:Wo6,mode:Go6.ExactlyOncePerIntervalWhenActive})}var Wo6="1-59/10 * * * *",CD1=null;var sY8=D(()=>{SG();WL();X41();QT0();vW();X$()});function aY8($){let Z=new sD($.db,new UX($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=k_$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new lQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var eY8=D(()=>{J8();WL();I71();GE();h40()});import{DBOS as eE,SchedulerMode as Uo6}from"@dbos-inc/dbos-sdk";function $X8($){bD1=$}function fD1(){if(!bD1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return bD1}function yD1(){let $=fD1();return new sD($.db,new UX($.encryptionKey))}async function Lo6($){try{let Z=await yD1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await MH(fD1().db,Z.organizationId);if(!Q)return{integrationId:$,started:0};if((await Q.storage.jiraIntegrations.listAutomations(Z.organizationId)).length===0)return{integrationId:$,started:0};let X=new lQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${Bo6}m"`,W=0,K;for(let H=0;H<Do6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await bH1(Q,Z,{issueId:U.id,now:Date.now()})==="started")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,started:W}}catch(Z){return{integrationId:$,started:0,error:Z instanceof Error?Z.message:String(Z)}}}async function wo6($,Z){let Q=await eE.runStep(()=>yD1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>eE.runStep(()=>Lo6(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.started>0)console.log(`[jira-trigger] integration ${X.integrationId} started ${X.started} run(s) the webhook missed`)}async function jo6($,Z){try{let Q=await yD1().getById($);if(!Q?.enabled)return"disabled";let Y=await MH(fD1().db,Q.organizationId);if(!Y)return"disabled";let X=await bH1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="started")console.log(`[jira-trigger] started a run for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no run`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function Eo6($,Z){await eE.sleep(Ik0()+Oo6),await eE.runStep(()=>jo6($,Z),{name:"settleJiraMove"})}async function ZX8($,Z){if(!xD1)throw Error("[jira-trigger] settle workflow is not registered");await eE.startWorkflow(xD1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function QX8(){if(vD1)return;xD1=eE.registerWorkflow(Eo6,{name:"jiraSettleWorkflow"}),vD1=eE.registerWorkflow(wo6,{name:"jiraTriggerSweepWorkflow"}),eE.registerScheduled(vD1,{name:"jiraTriggerSweepWorkflow",crontab:No6,mode:Uo6.ExactlyOncePerIntervalWhenActive})}var No6="7-59/10 * * * *",Bo6=35,Do6=5,Oo6=5000,bD1=null,xD1=null,vD1=null;var gD1=D(()=>{WL();h40();jd();GE();_H1();Vk0()});function YX8($){let Z=new sD($.db,new UX($.encryptionKey));async function Q(X,J){let G=Ye$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await ZX8(W.id,G)}let Y=new Z1;return Y.post("/webhook/:secret",v5({maxSize:zo6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var zo6=1048576;var XX8=D(()=>{J8();eW();WL();gD1();Vk0();h40()});function JX8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var GX8,Po6,Ao6,WX8;var KX8=D(()=>{J8();OJ();Md();hc();GX8=new Z1,Po6=["range","if-none-match","if-modified-since"],Ao6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];GX8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(ri($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q1(401,{message:"Authentication required"})}if(!Q)throw new q1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new q1(400,{message:"Missing file key"});let X=await t$0(Y,Z);if(!X)throw new q1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&PW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new q1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return JX8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of Po6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new q1(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new q1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Ao6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),JX8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});WX8=GX8});var y60=b((oy)=>{var To6=oy&&oy.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),Ro6=oy&&oy.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))To6(Z,$,Q)};Object.defineProperty(oy,"__esModule",{value:!0});Ro6(OG(),oy)});var UX8=b((HX8)=>{Object.defineProperty(HX8,"__esModule",{value:!0});HX8.version=void 0;HX8.version="3.4.0"});var DX8=b((jN)=>{var qo6=jN&&jN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(jN,"__esModule",{value:!0});jN.NodeTransport=jN.VERSION=void 0;jN.nodeResolveHost=Co6;var o5=y60(),Mo6=M0("net"),hD1=M0("tls"),Io6=M0("path"),NX8=M0("fs"),Vo6=qo6(M0("dns")),ko6=UX8();jN.VERSION=ko6.version;var So6="nats.js";class BX8{socket;version;lang;yields=[];signal=(0,o5.deferred)();closedNotification=(0,o5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=So6,this.version=jN.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,o5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw o5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new o5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new o5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,o5.deferred)(),Q,Y=(0,Mo6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,o5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=o5.DataBuffer.concat(...this.yields),X=(0,o5.extractProtocolMessage)(Y);if(X!=="")try{let J=o5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,o5.deferred)();try{if($=(0,Io6.resolve)($),!(0,NX8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,NX8.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,o5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new o5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,o5.deferred)();try{let X=(0,hD1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new o5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,o5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new o5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,o5.deferred)();try{let Y=(0,hD1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new o5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,o5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,o5.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof hD1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,o5.render)($)}`);let Z=(0,o5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,o5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,o5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}jN.NodeTransport=BX8;function Co6($){let Z=(0,o5.deferred)();return Vo6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var EX8=b((jX8)=>{Object.defineProperty(jX8,"__esModule",{value:!0});jX8.connect=_o6;var OX8=DX8(),LX8=y60(),wX8=y60();function _o6($={}){if((0,wX8.hasWsProtocol)($))return Promise.reject(wX8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,LX8.setTransportFactory)({factory:()=>{return new OX8.NodeTransport},dnsResolveFn:OX8.nodeResolveHost}),LX8.NatsConnectionImpl.connect($)}});var zX8=b((UO)=>{var bo6=UO&&UO.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),xo6=UO&&UO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))bo6(Z,$,Q)};Object.defineProperty(UO,"__esModule",{value:!0});UO.connect=void 0;var fo6=EX8();Object.defineProperty(UO,"connect",{enumerable:!0,get:function(){return fo6.connect}});xo6(y60(),UO)});function RX8($){let Z=$?.connectFn??uo6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:ho6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{O++;let L=U7(go6,yo6,O-1,2,0.5);await z$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?PX8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=TX8.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function uo6($){return AX8.connect($)}var PX8,AX8,TX8,yo6=100,go6=3000,ho6=3000;var qX8=D(()=>{a$();PX8=C(jz(),1),AX8=C(zX8(),1),TX8=C(BK(),1)});function sC0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,Y=$?.updateRecencyOnGet??!1,X=new Map;function J(){if(X.size<=Q)return;let G=Date.now();for(let[W,K]of X)if(K.expiresAt<=G)X.delete(W);while(X.size>Q){let W=X.keys().next().value;if(W===void 0)break;X.delete(W)}}return{get(G){let W=X.get(G);if(!W)return;if(W.expiresAt<=Date.now()){X.delete(G);return}if(Y)X.delete(G),X.set(G,W);return W.value},set(G,W){X.delete(G),X.set(G,{value:W,expiresAt:Date.now()+Z}),J()},delete(G){X.delete(G)},clear(){X.clear()},size(){return X.size}}}function aC0($,Z){return`${$}.${Z}`}class uD1{cache;constructor($){this.cache=sC0({ttlMs:$?.ttlMs??lo6,maxSize:$?.maxSize??co6})}async get($,Z){return this.cache.get(aC0($,Z))??null}async set($,Z,Q){this.cache.set(aC0($,Z),Q)}async invalidate($,Z){this.cache.delete(aC0($,Z)),this.cache.delete(aC0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var lo6=600000,co6=5000;var MX8=()=>{};function eC0($,Z){return`${$}:${Z}`}function lD1($){let Z=sC0({ttlMs:$?.ttlMs??mo6,maxSize:$?.maxSize??do6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(IX8,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(eC0(K,H))},set(K,H,F){Z.set(eC0(K,H),F)},invalidate(K,H){Z.delete(eC0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(IX8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(eC0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var IX8="studio.ai-provider-keys.invalidate",mo6=30000,do6=5000;var VX8=()=>{};class cD1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var kX8=($)=>{let Z;return()=>Z??=$()},mD1,dD1;var SX8=D(()=>{k6();mD1=kX8(()=>e1.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),dD1=kX8(()=>e1.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function so6($=vX8){return{name:iU,subjects:[`${vY1}.>`],storage:iH.StorageType.File,max_age:no6,max_bytes:oo6,max_msgs_per_subject:ro6,discard:iH.DiscardPolicy.Old,retention:iH.RetentionPolicy.Limits,duplicate_window:to6,num_replicas:$}}class bX8{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 CX8($){let Z=_X8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function Zr6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,po6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function Qr6($,Z){return $.info?.cluster?Z:1}function Yr6($){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 iD1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Y,X)=>{let J=so6(X);try{await Y.streams.info(iU),await Y.streams.update(iU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(iU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(iU),await Y.streams.add(J);else throw G}},Q=await q8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await iH.jetstreamManager($),X=Qr6($,vX8);try{await Z(Y,X)}catch(J){if(X<=1||!Yr6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:xd});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=Zr6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=af$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=xY1(H,{runId:Z}),N=performance.now()-F;mD1().record(N),dD1().add(1,{"org.id":Y??"unknown"}),$r6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?CX8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),eo6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await q8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:CX8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:xd}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=xY1(Z,{runId:$,dedup:Q});mD1().record(performance.now()-X),dD1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=sf$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?iH.DeliverPolicy.New:iH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=DE($),W;try{W=await q8(async()=>{return(await Y.consumers.get(iU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:xd})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=oq0({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(iq0()).pipeThrough(pq0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){O(),L.close();return}let E=j;if(E.kind==="done"){if(J){O(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(iU,{filter:DE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var iH,_X8,io6=($)=>{let Z;return()=>Z??=$()},po6,no6=86400000000000,to6=120000000000,oo6=4294967296,vX8,ro6=500000,ao6,eo6,$r6;var xX8=D(()=>{a$();fY1();rq0();nq0();k6();SX8();iH=C(BK(),1),_X8=C(jz(),1),po6=io6(()=>e1.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),vX8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);ao6=process.env.STREAM_ENCODE_TRACE==="1",eo6=process.env.DECOPILOT_STREAM_TRACE==="1";$r6=ao6?new bX8:null});function $_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,NF(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var fX8=D(()=>{p8()});class pD1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function Xr6($,Z,Q={}){let Y=$.startsWith("thread:")?AH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function nD1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await _U($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await gm($,{threadId:X,runBranch:G?.branch}),K=await S00($,Q,$41(J)).catch(()=>null);if(!K){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}let H=Xr6(W,await LT0($,X),{flat:Ff(K.repo.provider)});for(let F of H){let U=await K.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:K.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await O3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var yX8=D(()=>{Z7();xW();C7()});async function gX8($,Z,Q){let Y=Z.organizationId;if(!uX(Z))return!1;if(!_f(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=LU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await $5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),L8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var hX8=D(()=>{x4();cY();zd();IH();P9()});function Ur6($){return $ instanceof kX}function uX8($,Z){return Z-$>=Hr6}class tD1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??Jr6;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??Wr6,Q=this.options.itemIntervalMs??Gr6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,Y)}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()-P71),cQ1);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-Fr6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await hQ1(this.taskBoard,X,Y),await uQ1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==R$.progress||uX(W)||W.assigneeId!==T8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await nD1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!uX8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:R$.progress,to:R$.review,reason:H}}).catch(()=>{}),L8(J,F),await VH(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==R$.progress||G.assigneeId!==T8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await kH(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),Ur6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+Kr6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==R$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),L8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!uX8(QD(Q,Z.reviewCycleStartedAt),Date.now()))return;await VH($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!uX(Y))return!1;let X=Y.assigneeId===T8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await nD1(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await Td(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await gX8(G,Y,W))return!0;if(await Zg$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!xQ1(W))return!1;return await Pd(G,Y,{previewMatchesHead:fQ1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await FE($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var Jr6=60000,Gr6=300000,Wr6=50,Kr6=60000,Hr6=900000,Fr6=120000;var lX8=D(()=>{x4();Wq0();yX8();mU();J80();IH();hX8();P9();MW();mQ1();C7();C$0();Ad()});import{readdir as Nr6,rm as Z_0}from"fs/promises";import{join as Q_0}from"path";async function Y_0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Br6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await ry($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await cX8($,X,Z);else if(!X.startsWith(".")){let J=Q_0($,X),G=await ry(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await cX8(J,K,Z)}if((await ry(J)).length===0)await Z_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function cX8($,Z,Q){let Y=0,X=Q_0($,Z),J=await ry(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=Q_0(X,W),H=await ry(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=Q_0(K,U);await Z_0(B,{recursive:!0,force:!0}),Y++}}if((await ry(K)).length===0)await Z_0(K,{recursive:!0,force:!0})}if((await ry(X)).length===0)await Z_0(X,{recursive:!0,force:!0});return Y}async function ry($){try{return(await Nr6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var Br6=30;var oD1=()=>{};import{DBOS as rD1,SchedulerMode as Dr6}from"@dbos-inc/dbos-sdk";async function Lr6(){let $=[JK(),Jg(),qN()],Z=0;for(let Q of $)try{Z+=await Y_0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function wr6($,Z){await rD1.runStep(()=>Lr6(),{name:"monitoringRetention"})}function dX8(){if(mX8)return;mX8=!0;let $=rD1.registerWorkflow(wr6,{name:"monitoringRetentionWorkflow"});rD1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Or6,mode:Dr6.ExactlyOncePerIntervalWhenActive})}var Or6="23 4 * * *",mX8=!1;var iX8=D(()=>{_3();oD1()});function pX8($){return async(Z,Q)=>{let Y=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await cQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await KA($.db,Z,Y.role);return X.boundAuth=wU1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new nP(Q,void 0,X.boundAuth,Y.role,"self"),HE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var nX8=D(()=>{bK();BU()});function jr6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Er6(){return{services:jr6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Pr6(){for(let $ of zr6)$()}function tX8($){let Z=[...sD1.logs,$];sD1={...sD1,logs:Z.length>500?Z.slice(-500):Z},Pr6()}function aD1(){return Ar6}var sD1,zr6,Ar6=!1;var eD1=D(()=>{sD1=Er6(),zr6=new Set});import{EventEmitter as Tr6}from"events";var $O1;var oX8=D(()=>{eD1();$O1=new Tr6;$O1.on("request",($)=>{tX8($)})});function rX8(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=Cp(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>Cp(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${W9.tool}${B}${W9.dim}(${w})${W9.reset}`}else if(N.method)J=`${W9.dim}${Cp(N.method)}${W9.reset}`}}catch{}}let W=Cp(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${W9.mcp}${Cp(F.slice(0,12))}\u2026${W9.reset}`}else if(X==="/mcp")W=`${W9.mcp}/mcp${W9.reset}`;else if(X==="/mcp/registry")W=`${W9.mcp}/mcp/registry${W9.reset}`;let K=qr6(Y),H=G?"\u25C0":"\u2190";if(!aD1())console.log(`${W9.dim}${H}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=Rr6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!aD1())console.log(`${W9.dim}${O}${W9.reset} ${K}${Y}${W9.reset} ${W}${J?` ${J}`:""} ${N}${U}${W9.reset} ${W9.duration}${B}${W9.reset}`);$O1.emit("request",{method:Y,path:Cp(X),status:U,duration:F,timestamp:new Date})}}}var W9,Rr6=($)=>{if($>=500)return W9.serverError;if($>=400)return W9.clientError;if($>=300)return W9.redirect;return W9.ok},qr6=($)=>{return W9[$]||W9.reset},Cp=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var sX8=D(()=>{eD1();oX8();W9={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 ZJ8}from"crypto";import{mkdir as Mr6,readdir as Ir6,rm as aX8,stat as QJ8}from"fs/promises";import{join as QO1,relative as Vr6}from"path";import{z as Q8}from"zod";function XJ8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return QO1(kr6,Z)}function JJ8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function ZO1($,Z){let Q=XJ8($),Y=JJ8(Z);return QO1(Q,Y)}function Sr6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return ZJ8("sha256",X).update(J).digest("hex")}function $J8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=Sr6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${JJ8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function GJ8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${ZJ8("md5","etag").update(Y).digest("hex")}"`}async function WJ8($,Z,Q,Y,X){try{let J=await Ir6($,{withFileTypes:!0});for(let G of J){let W=QO1($,G.name),H=Vr6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await WJ8(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await QJ8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:GJ8(W,F.mtime,F.size)})}catch{}}}}catch{}}function KJ8($,Z){let Y=G0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Q8.object({prefix:Q8.string().optional(),maxKeys:Q8.number().optional().default(1000),continuationToken:Q8.string().optional(),delimiter:Q8.string().optional()}),outputSchema:Q8.object({objects:Q8.array(Q8.object({key:Q8.string(),size:Q8.number(),lastModified:Q8.string(),etag:Q8.string()})),nextContinuationToken:Q8.string().optional(),isTruncated:Q8.boolean(),commonPrefixes:Q8.array(Q8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=XJ8(Y);await Mr6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await WJ8(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),O=N+W<U.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({contentType:Q8.string().optional(),contentLength:Q8.number(),lastModified:Q8.string(),etag:Q8.string(),metadata:Q8.record(Q8.string(),Q8.string()).optional()}),handler:async(X)=>{let J=X,G=ZO1(Y,J.key),W=await QJ8(G);return{contentType:LN1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:GJ8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=pD(J.expiresIn,eX8);return{url:$J8(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional(),contentType:Q8.string().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=pD(J.expiresIn,eX8);return{url:$J8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({success:Q8.boolean(),key:Q8.string()}),handler:async(X)=>{let J=X,G=ZO1(Y,J.key);try{return await aX8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Q8.object({keys:Q8.array(Q8.string()).max(1000)}),outputSchema:Q8.object({deleted:Q8.array(Q8.string()),errors:Q8.array(Q8.object({key:Q8.string(),message:Q8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=ZO1(Y,K);try{await aX8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function YO1($,Z,Q){let Y=KJ8(Z,Q),X=new Zw({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:vZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:Q8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Q8.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new z3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),mW(X,J,$,"mcp:dev-assets")}async function HJ8($,Z,Q,Y){let J=KJ8(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var kr6="./data/assets",eX8=3600,YJ8,FJ8;var UJ8=D(()=>{X$();cd();J8();AJ0();ld();NJ();nD();cS0();YJ8=new Z1;YJ8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return YO1($.req.raw,Z,Y)});FJ8=YJ8});var NJ8={};$6(NJ8,{mountDevRoutes:()=>Cr6});function Cr6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return YO1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await HJ8(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",FJ8);let Q=new Z1;Q.use("*",mH({mountPath:"/api/dev-assets"})),Q.route("/",lS0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var BJ8=D(()=>{J8();HN1();cS0();UJ8()});var TJ8={};$6(TJ8,{watchHandler:()=>AJ8,resolveCorsOrigin:()=>zJ8,isSsoExemptPath:()=>jJ8,isAllowedOAuthRedirectUri:()=>PJ8,createApp:()=>lr6});import{readFileSync as _r6}from"fs";import{PrometheusSerializer as vr6}from"@opentelemetry/exporter-prometheus";import{DBOS as NO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as fr6,oAuthProtectedResourceMetadata as yr6}from"better-auth/plugins";async function br6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,OJ8(DJ8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),OJ8(DJ8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function OJ8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function jJ8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${IS0}/`)||$.startsWith(`${PS0}/`)}function EJ8($){return $==="local.studio.decocms.com"}function zJ8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(EJ8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function PJ8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||EJ8($.hostname)}async function lr6($={}){let Z=$.database??D8(),Q=!1;J9.stop().catch((K0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",K0)});let Y,X,J,G,W=new uD1,K,H,F,U=null;if($.disableNats)K=lD1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new D80,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(K0)=>{return(async()=>{let H0=K0.getReader();try{while(!0){let{done:R0}=await H0.read();if(R0)break}}catch{}finally{H0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=RX8();let K0=E0().natsCredsPath,H0;if(K0)try{H0=_r6(K0,"utf8")}catch(w8){console.error(`[app] failed to read NATS_CREDS at ${K0}; connecting anonymously`,w8)}U.init(E0().natsUrls,H0?{creds:H0}:void 0);let R0=d11()?new I11({getJetStream:()=>U.getJetStream()}):null;R0?.init().catch(()=>{}),Y=R0;let A0=new y91({getJetStream:()=>U.getJetStream()});A0.init().catch(()=>{}),X=A0;let D1=new bf(kQ1,{getJetStream:()=>U.getJetStream()}),x$=new bf(_$0,{getJetStream:()=>U.getJetStream()});D1.init().catch(()=>{}),x$.init().catch(()=>{}),J={reads:D1,cards:x$};let i$=new jJ1({getJetStream:()=>U.getJetStream()});i$.init().catch(()=>{}),G=i$,K=lD1({getConnection:()=>U.getConnection()}),H=new cD1({getConnection:()=>U.getConnection()}),F=new iD1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),$48(U),U.onReady(()=>{R0?.init().catch((w8)=>{console.error("[McpListCache] Deferred init failed:",w8)}),A0.init().catch((w8)=>{console.error("[SkillCatalogCache] Deferred init failed:",w8)}),D1.init().catch((w8)=>{console.error("[PrReadCache] Deferred init failed:",w8)}),x$.init().catch((w8)=>{console.error("[PrCardCache] Deferred init failed:",w8)}),i$.init().catch((w8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",w8)}),K.start(),UN$(()=>U.getConnection()),F.init().catch((w8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",w8)})})}if($z)await $z();V11(Y),h91(X),SQ1(J),EJ1(G);let B={storage:new ih(Z.db),sseHub:J9,onThreadFinished:async(K0,H0)=>qd(new D3(Z.db),K0,H0,new kG(Z.db))},O=new cY1(B),L=new f40(Z.db),w=new pD1(L);w.start(),ey$(H),H.start((K0)=>{bq0(K0),O.execute({type:"CANCEL",taskId:K0}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",H0)})}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast start failed:",K0)}),U?.onReady(()=>{H.start().catch((K0)=>{console.error("[CancelBroadcast] Deferred start failed:",K0)})});let j=()=>U?.getConnection()??null;XN1(j),U?.onReady(()=>XN1(j)),sJ1(j),U?.onReady(()=>sJ1(j)),F.init().catch((K0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",K0)}),$z=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),O68(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),NN$(),G.teardown(),V11(null),h91(null),SQ1(null),EJ1(null)};let E=new Z1;if(E.use("*",OJ1({enabled:(K0)=>oi(K0,"debug")==="1"})),E.use("*",q_0),E.use("/*",o88({origin:(K0,H0)=>zJ8(K0,{baseUrl:E0().baseUrl,requestOrigin:new URL(H0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(K0,H0)=>{if(await H0(),K0.req.path.includes("/files/"))return;if(K0.req.path.includes("/fs/")&&K0.req.path.endsWith("/read"))return;K0.header("X-Frame-Options","DENY"),K0.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",rX8());E.use("*",async(K0,H0)=>{if(await H0(),lp(K0.req.path))return;if(K0.res.status>=500){let A0=await K0.res.clone().text();console.error(`[5xx Response] ${K0.req.method} ${K0.req.path} - ${K0.res.status}:`,A0)}}),E.get(aY.HEALTH,(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);return K0.json({status:"ok"})}),E.get(aY.HEALTH_LIVE,(K0)=>{return K0.json({status:"ok"})}),E.get(aY.HEALTH_READY,async(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);let H0={};if(H0.postgres={status:await br6(Z.pool)?"up":"down"},U)H0.nats=U.isConnected()?{status:"up"}:{status:"down"};else H0.nats={status:"down"};let R0=H0.postgres.status==="up",A0=R0?200:503;return K0.json({status:R0?"ready":"not_ready",services:H0},A0)}),E.get(aY.METRICS,async(K0)=>{try{let H0=await k_0.collect(),R0=xr6.serialize(H0.resourceMetrics);return K0.text(R0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(H0){return console.error("Failed to collect metrics:",H0),K0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${aY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(K0)=>{let H0=K0.req.param("queueName");if(!gr6.has(H0))return K0.json({error:`Unknown queue: ${H0}`},404);let[R0,A0]=await Promise.all([NO.listQueuedWorkflows({queueName:H0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),NO.listQueuedWorkflows({queueName:H0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return K0.json({queue_length:R0.length,in_flight:A0.length})}),E.route("/api/config",vY8),E.route("/api/_reports",iY8),E.route("/api/_stripe",SD1),E.route("/api/_github",tY8({taskBoard:()=>i,contextFactory:()=>g})),E.route("/api/_git",Yp);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",YX8(T)),E.route("/api/_jira",aY8(T)),E.route("/report",cY8($.clientDir)),E.route("/api/auth/custom",z48),E.route("/api/auth/desktop",R48),E.all("/api/auth/admin/*",Q68),E.all("/api/auth/*",async(K0)=>{return await x8.handler(K0.req.raw)});let A=I$8();A.use("/.well-known/oauth-protected-resource/mcp/:connectionId",o40),A.use("/mcp/:connectionId/.well-known/oauth-protected-resource",o40),E.route("/",A),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",_40),E.route("/",_$8()),E.use("/oauth-proxy/:connectionId/*",o40),E.all("/oauth-proxy/:connectionId/*",LJ8);let P=async(K0)=>{let R0=await hr6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",o40),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",P);let q=async(K0)=>{let R0=await ur6()(K0.req.raw),A0=await R0.json();return Response.json(A0,R0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=s88({ttlMs:120000}),_=await A88({db:Z.db,auth:x8,encryption:{key:E0().encryptionKey},observability:{tracer:PO,meter:e1},modelListCache:W,providerKeyCache:K,memberRoleCache:x});cQ.set(_),$p1({db:Z.db,baseUrl:l5()}),T88({db:Z.db}),I88({db:Z.db}),x88({db:Z.db}),$X8({db:Z.db,encryptionKey:E0().encryptionKey}),Cv$({db:Z.db}),l88({db:Z.db}),$b$({db:Z.db});let V=UX0(Z.db),y=new Pr(Z.db),g=pX8({db:Z.db});UJ1({storage:V,studioContextFactory:g}),aY1({systemDatabaseUrl:or0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:J9}}),iY1({dispatchRunFn:df$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:J9}});let l=new ih(Z.db),i=new D3(Z.db),p=new kG(Z.db),U0=new tD1(i,g,p);if(E0().taskBoardReviewSweeperEnabled){U0.start();let K0=$z;$z=async()=>{await K0?.(),U0.dispose()}}Uy$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let K0=U?.getConnection();return K0?await wJ8.jetstreamManager(K0):null},messageParts:l.messageParts(),resolveRun:async(K0)=>{let H0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",K0).executeTakeFirst();return H0?{orgId:H0.organization_id,createdBy:H0.created_by,version:H0.message_storage_version??1,status:H0.status,runFenceToken:H0.run_fence_token,title:H0.title??null}:null},completeRunIfNotCompleted:async(K0,H0)=>{let R0=await l.completeRunIfNotCompleted(K0,H0);if($_0(J9,H0,K0,R0),R0)await qd(i,K0,H0,p);return R0},markRunRequiresAction:async(K0,H0)=>{let R0=await l.requiresActionIfInProgress(K0,H0);return $_0(J9,H0,K0,R0),R0},markRunFailed:async(K0,H0,R0,A0)=>{let D1=await l.markRunFailed(K0,H0,R0,A0);if($_0(J9,H0,K0,D1),D1)await qd(i,K0,H0,p);return D1},clearSynthesizedError:async(K0,H0)=>{await l.messageParts().replaceMessageParts(K0,BE(K0,H0),[])},persistTitle:(K0,H0,R0)=>l.update(K0,H0,{title:R0}),onTitleUpdated:async({runId:K0,orgId:H0,title:R0})=>{let A0=await l.get(K0,H0).catch(()=>null);J9.emit(H0,NF(K0,A0?.status??"in_progress",{title:R0,virtualMcpId:A0?.virtual_mcp_id??void 0,createdBy:A0?.created_by,triggerId:A0?.trigger_id,branch:A0?.branch??null,harnessId:A0?.harness_id??void 0,createdAt:A0?.created_at,updatedAt:A0?.updated_at}))},bumpProgress:async({runId:K0,orgId:H0})=>{await l.bumpProgress(K0,H0)},recordCompleted:async({runId:K0,orgId:H0,distinctId:R0,usage:A0})=>{f1.capture({distinctId:R0,event:"chat_message_completed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",input_tokens:A0.inputTokens,output_tokens:A0.outputTokens,total_tokens:A0.totalTokens}})},recordFailed:async({runId:K0,orgId:H0,distinctId:R0,reason:A0,kind:D1})=>{f1.capture({distinctId:R0,event:"chat_message_failed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",error_category:D1,error_message:A0}})},purgeRun:async(K0)=>{F.purge(K0)}}),Lf$({studioContextFactory:g,systemDatabaseUrl:or0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),dX8(),Zp1(),q88(),k88(),y88(),QX8(),fv$(),m88(),Zb$(),rY8();let v0=async(K0,H0,R0)=>{let A0=await V.findById(K0,H0);if(!A0)throw Error("Automation not found");return DJ1({automationId:A0.id,organizationId:A0.organization_id,triggerId:null})},J0=new Zp(V,({automation:K0,trigger:H0,contextMessages:R0,idempotencyKey:A0})=>B80({automationId:K0.id,organizationId:K0.organization_id,triggerId:H0.id,contextMessages:R0},{idempotencyKey:A0})),N0=[JK(),Jg(),qN()];for(let K0 of N0)Y_0(K0).then(()=>{}).catch((H0)=>console.error("[monitoring] Retention cleanup failed:",H0));let o=()=>x8.api.deleteAllExpiredApiKeys().catch((K0)=>console.error("[auth] Expired API key cleanup failed:",K0));o(),setInterval(o,86400000).unref(),E.use("*",async(K0,H0)=>{if(T_0(K0.req.path))return H0();let R0={measure:async(D1,x$)=>{cW(K0,D1);try{return await x$()}finally{P3(K0,D1)}}},A0=await cQ.create(K0.req.raw,{timings:R0});A0.automationRunner=v0,K0.set("studioContext",A0);try{await H0()}finally{let D1=A0.pendingRevalidations;if(D1.length>0)Promise.race([Promise.allSettled(D1),z$(30000)]).catch((i$)=>console.error("[studio] revalidation cleanup error:",i$))}}),E.use("/api/:org/decopilot/*",si),E.use("/api/:org/v1/*",si),E.use("/api/:org/files/*",si),E.use("*",async(K0,H0)=>{if(jJ8(K0.req.path))return H0();let R0=K0.get("studioContext");if(!R0?.organization?.id||!R0?.auth?.user?.id)return H0();if(!(await R0.storage.orgSsoConfig.getByOrgId(R0.organization.id))?.enforced)return H0();if(!await R0.storage.orgSsoSessions.isValid(R0.auth.user.id,R0.organization.id))return K0.json({error:"SSO authentication required for this organization"},403);return H0()});let $0=new Z1;$0.use("*",mH({mountPath:"/api/org-sso"})),$0.route("/",SS0()),E.route("/api/org-sso",$0),E.get("/api/tools/management",(K0)=>{return K0.json({tools:Sn0,grouped:pP()})}),E.use("/mcp/*",async(K0,H0)=>{cW(K0,"mcp");try{return await H0()}finally{P3(K0,"mcp")}});let Z0=async(K0,H0)=>{let R0=K0.var.studioContext;if(!R0.auth.user?.id&&!R0.auth.apiKey?.id){let A0=new URL(K0.req.url),D1=K0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),x$=D1?`${D1}://${A0.host}`:A0.origin;return K0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${x$}${A0.pathname}/.well-known/oauth-protected-resource"`}})}return await H0()};if(E.use("/mcp/:connectionId?",Z0),E.use("/mcp/gateway/:virtualMcpId?",Z0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Z0),E.use("/mcp/self",Z0),PW()){let{mountDevRoutes:K0}=(BJ8(),U_0(NJ8));K0(E,Z0)}let r=new Z1;r.use("*",mH({mountPath:"/mcp"})),r.route("/",VM0()),E.route("/mcp",r);let Y0=new Z1;Y0.use("*",mH({mountPath:"/mcp/self"})),Y0.route("/",EC0()),E.route("/mcp/self",Y0);let d0=new Z1;d0.use("*",mH({mountPath:"/mcp"})),d0.route("/",CM0()),E.route("/mcp",d0),E.use("/api/:org/models/*",async(K0,H0)=>{cW(K0,"llm_models");try{return await H0()}finally{P3(K0,"llm_models")}});let k0=w68({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",k0),E.route("/api",WX8);let W1=new Z1;W1.use("*",mH({mountPath:"/api"})),W1.route("/",TC0()),E.route("/api",W1),E.route("/api",MY8);let u0=new Z1;u0.use("*",mH({mountPath:"/api"})),u0.route("/",RC0({tokenStorage:y,automationEventDispatcher:J0})),E.route("/api",u0);let L0=new Tr(Z.db),j0=new Z1;j0.use("*",mH({mountPath:"/api"})),j0.route("/",xS0()),E.route("/api",j0),E.route("/api/deco-sites",_68()),E.route("/api/deco-apps",zY8());let l0=new Z1;l0.use("*",mH({mountPath:"/api/deco-sites"})),l0.route("/",yS0()),E.route("/api/deco-sites",l0),E.route(IS0,Y68()),E.route(F78,B78()),E.route("/api/_editor-resolve",VY8()),E.route(M48,I48()),E.route(PS0,y48());let O1=E0(),Q1=O1.elevenlabsApiKey?new pC0({apiKey:O1.elevenlabsApiKey,model:O1.elevenlabsVoiceModel,conversationModel:O1.elevenlabsConversationModel,voiceId:O1.elevenlabsVoiceId}):null,_0={openai:O1.openaiLiveApiKey?new AD1({apiKey:O1.openaiLiveApiKey,voice:O1.openaiLiveVoice}):null,elevenlabs:Q1?new PD1(Q1,()=>U?.getConnection()??null):null},m0=new ID1({adapter:Q1,conversationAdapters:_0,defaults:O1,secret:O1.studioJwtSecret??O1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),i0=aQ8({voiceSessions:m0,kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:J9,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:J0,mountDevAssets:PW(),mcpAuth:Z0,oauthProxyHandler:LJ8,watchHandler:AJ8,betterAuthProtectedResourceHandler:P,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((K0)=>{return K0.json({error:"Not Found",path:K0.req.path},404)}),E.onError(E68),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([J9.stop(),$z?Promise.resolve($z()).finally(()=>{$z=null}):Promise.resolve()]),U)await U.drain().catch((K0)=>console.error("[shutdown] NATS drain error:",K0));console.log("[shutdown] Flushing telemetry..."),await oX().catch((K0)=>console.error("[shutdown] Telemetry flush error:",K0)),console.log("[shutdown] Closing database..."),await r9$(Z).catch((K0)=>console.error("[shutdown] Database close error:",K0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await NO.registerQueue(C3,{partitionQueue:!0,concurrency:KJ1,minPollingIntervalMs:HJ1}),await NO.registerQueue(S3,{partitionQueue:!0,concurrency:rY1,priorityEnabled:!0}),await NO.registerQueue(TN,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await NO.registerQueue(RN,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await NO.registerQueue(EO,{partitionQueue:!0,concurrency:Of$}),await NO.registerQueue(Jz,ev$),await FN1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((K0)=>NO.deleteQueue(K0))),await FJ1(Z.pool),wY$().catch((K0)=>{console.error("[studio-pack-backfill] failed:",K0)}),Qp1().catch((K0)=>{console.error("[org-fs] public-sets boot sync kick failed:",K0)})}})}var wJ8,DJ8=5000,$z=null,LJ8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),Y=Q[Q.length-1],X=$.get("studioContext");if(!X)X=await cQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await ii(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=H.origin;let N=await v40(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(Y==="authorize")O=B.authorization_endpoint;else if(Y==="token")O=B.token_endpoint;else if(Y==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=C$8(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!PJ8(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(i88(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let T=$.req.header("Authorization");if(T)E.Authorization=T;let A,P=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let p=atob(T.slice(6).trim()),U0=p.indexOf(":");if(U0!==-1){let v0=decodeURIComponent(p.slice(0,U0)),J0=decodeURIComponent(p.slice(U0+1));P=v0||null,q=J0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)P=g;if(typeof l==="string"&&l)q=l;let i=new URLSearchParams;for(let[p,U0]of y.entries())i.append(p,U0.toString());A=i.toString()}else if(Y==="register"&&z?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),l={};try{l=g?JSON.parse(g):{}}catch{A=g}let i=typeof l==="object"&&l!==null&&!Array.isArray(l);if(A===void 0&&!i)A=g;if(A===void 0){let p=l,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},A=JSON.stringify(p),E["Content-Type"]="application/json"}}else A=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:A,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,i=null;try{i=await pi(G.connection_url)??O}catch{i=O}let p={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:l,clientId:P,clientSecret:q,tokenEndpoint:i};await new w9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},AJ8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let Y=Z.organization?.id;if(!Y)return $.json({error:"organization id missing"},400);let X=$.req.query("types"),J=X?X.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!lU(Y)||!await cU(Z)))return $.json({error:"forbidden"},403);let W=G?iR0:Y;if(G)SD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return KO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!J9.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{J9.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),J9.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),J9.remove(W,K),N()})})})},xr6,gr6,hr6=()=>yr6(x8),ur6=()=>fr6(x8);var RJ8=D(()=>{a$();X$();Yp1();M88();S88();g88();E80();NQ1();d88();C$0();I9();hc();p8();J8();LS0();r88();LJ1();Z3();BU();vU1();SG();k6();G6();uU1();q48();V48();g48();pU1();X68();$N1();WN1();KN1();HH();$S0();HN1();z68();jS0();eQ8();XY8();JY8();HY8();EY8();BN1();PY8();kM0();O80();IY8();_M0();cB1();kY8();uB1();bY8();mY8();pY8();nY8();oY8();sY8();eY8();XX8();gD1();jN1();KX8();lB1();yB1();e60();qX8();SJ();kT0();_Q1();me();ie();PJ1();MX8();VX8();JN1();xX8();mY1();fX8();Yo();qr();kD();P9();$U1();lX8();iX8();oG0();oD1();_3();UN1();VD();uY1();oG0();dq0();jn0();En0();nX8();iu();sX8();Ep();vU1();wd();vd();xq0();wJ8=C(BK(),1);xr6=new vr6,gr6=new Set([C3,S3,TN,RN,EO,Jz])});var VJ8={};$6(VJ8,{resolveClientDir:()=>tr6,resolveAssetPathWithTraversalCheck:()=>IJ8,isPathWithinDirectory:()=>MJ8,createAssetHandler:()=>or6});import{resolve as g60,dirname as cr6,join as mr6,extname as dr6,basename as ir6,sep as qJ8}from"path";function pr6($,Z){if($===Z||ir6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${qJ8}assets${qJ8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function MJ8($,Z){let Q=g60(Z),Y=g60($);return Y===Q||Y.startsWith(Q+"/")}function IJ8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=g60(Z,Q);if(!MJ8(Y,Z))return null;return Y}function tr6($,Z="../client"){let Q=new URL($),Y=cr6(Q.pathname);return g60(Y,Z)}function or6($={}){let{env:Z="production",clientDir:Q=nr6,isServerPath:Y=()=>!1}=$;if(Z==="development")return async function(J){return null};return async function(J){if(J.method!=="GET")return null;let G=new URL(J.url),W;try{W=decodeURIComponent(G.pathname)}catch{return null}if(Y(W))return null;let K=IJ8({requestPath:W,clientDir:Q});if(!K)return null;let H=mr6(K,"index.html"),F=g60(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(dr6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:pr6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var nr6="./dist/client";var kJ8=()=>{};var SJ8={};$6(SJ8,{tryUpgradePreviewWs:()=>Qs6,tryHandlePreviewHttp:()=>Zs6,previewWebSocketHandler:()=>Ys6,parsePreviewBaseDomain:()=>$s6,isPreviewWsData:()=>X_0,extractHandleFromHost:()=>XO1});function ar6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function er6(){return new Response(sr6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function $s6($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let Y=Q.hostname;if($.includes("{handle}")){let X=Y.indexOf(".");if(X<=0||X===Y.length-1)return null;return Y.slice(X+1)}return Y}function XO1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),Y=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!Y.endsWith(J))return null;let G=Y.slice(0,Y.length-J.length);if(!G||G.includes("."))return null;return G}async function Zs6($,Z){let Q=XO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return u60(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Sm)&&ar6($))return er6();return X.headers.delete(Sm),X}function u60($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function X_0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function Qs6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=XO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return u60(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return u60(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return u60(404,"not found");let W=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,K=$.headers.get("sec-websocket-protocol"),H=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return u60(426,"upgrade failed");return}function h60($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var rr6=256,sr6='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',Ys6;var CJ8=D(()=>{D10();Ys6={open($){let Z=$.data;if(!X_0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),h60($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let Y=Z.pending.shift();if(Y!==void 0)Q.send(Y)}}),Q.addEventListener("message",(Y)=>{if(Z.closed)return;$.send(Y.data)}),Q.addEventListener("close",(Y)=>{h60($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{h60($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!X_0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=rr6){h60($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!X_0(Z))return;h60($,Z,1000,"")}}});var xJ8={};$6(xJ8,{printBanner:()=>Js6,bannerLines:()=>bJ8,BANNER_LINES:()=>_J8,BANNER_GRADIENT:()=>vJ8});function Xs6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function bJ8($){let Z=_J8.map((Q,Y)=>{let[X,J,G]=Xs6(vJ8[Y]);return`\x1B[38;2;${X};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function Js6($){console.log("");for(let Z of bJ8($))console.log(Z);console.log("")}var _J8,vJ8;var fJ8=D(()=>{_J8=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],vJ8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});a$();var wO1="13";function jO1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:wO1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}a$();import $G8 from"pg";var EO1=8314027461559302n,ZG8=600000,QG8=500;async function zO1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=ZG8}=$,X=$.log??((K)=>console.log(K)),J=new $G8.Client({connectionString:Q});await J.connect();let G=Date.now(),W=!1;try{while(!W){if(W=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[EO1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=Y)throw Error(`Timed out after ${Y}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await z$(QG8)}let K=Date.now()-G;if(K>1000)X(`[dbos] waited ${K}ms for the migration lock; another process migrated first`);return await Z()}finally{if(W)try{await J.query("SELECT pg_advisory_unlock($1)",[EO1.toString()])}catch{}await J.end().catch(()=>{})}}X$();O_0();k6();function $38(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function __0($,Z){for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Y===void 0)continue;if(Y===Z)return $[Q+1];if(Y.startsWith(`${Z}=`))return Y.slice(Z.length+1)}return}function YL1(){let $=$38();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:__0($,"--cpu-prof-dir")??process.cwd(),name:__0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(__0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}x_0();var Q50;function NL1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Kz();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...Y}))};return Z().catch(()=>{}),Q50=setInterval(()=>void Z().catch(()=>{}),$),Q50.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),Y=typeof Q==="string"?Q:JSON.stringify(Q),X=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(X,Y),console.log(JSON.stringify({msg:"heap-snapshot-written",path:X}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(Q50)clearInterval(Q50)}}import*as Y38 from"bun:jsc";var{startSamplingProfiler:X38,samplingProfilerStackTraces:J38}=Y38;function BL1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{X38()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,Y=performance.now()+Z,X=()=>{let J=performance.now(),G=J-Y;Y=J+Z;let W=[];try{W=J38()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function DL1(){YL1();let $=[NL1(),UL1(),BL1()];return()=>{for(let Z of $)Z()}}import{existsSync as Bs6}from"fs";var WG=E0();$L1();var{DBOS:l60,DBOSClient:Gs6}=await import("@dbos-inc/dbos-sdk");function FO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var Ws6=[C3,S3,TN,RN,EO,Jz],Ks6=WG.dispatchRole==="worker"?Ws6:WG.dispatchRole==="api"?[]:void 0;l60.setConfig(jO1({systemDatabaseUrl:FO1(WG.databaseUrl,WG.databasePgSsl),poolSize:WG.dbosPoolSize,executorID:WG.podName,listenQueues:Ks6}));var{createApp:Hs6}=await Promise.resolve().then(() => (RJ8(),TJ8)),{isServerPath:Fs6}=await Promise.resolve().then(() => (e60(),yO1)),{createAssetHandler:Us6,resolveClientDir:lJ8}=await Promise.resolve().then(() => (kJ8(),VJ8)),Ns6=WG.port,yJ8=lJ8(import.meta.url,"../client"),cJ8=Bs6(yJ8)?yJ8:lJ8(import.meta.url,"../dist/client"),Ds6=Us6({clientDir:cJ8,isServerPath:Fs6}),Os6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function Ls6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Os6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:ws6,tryHandlePreviewHttp:js6,tryUpgradePreviewWs:Es6,previewWebSocketHandler:JO1,isPreviewWsData:GO1}=await Promise.resolve().then(() => (CJ8(),SJ8)),{getOrInitSharedRunner:mJ8}=await Promise.resolve().then(() => (vW(),oT$)),dJ8=ws6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),gJ8={baseDomain:dJ8??"",getRunner:mJ8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())mJ8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var J_0=await Hs6({clientDir:cJ8}),WO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),hJ8=process.env.DBOS_CONDUCTOR_URL?.trim();await zO1({databaseUrl:FO1(WG.databaseUrl,WG.databasePgSsl)},()=>l60.launch({...WO1?{conductorKey:WO1}:{},...WO1&&hJ8?{conductorURL:hJ8}:{}}));console.log(`[dbos] application version: ${l60.applicationVersion}`);var KO1=5,HO1=0;await q8(async()=>{HO1++;try{return await J_0.initDbos()}catch($){let Z=HO1>=KO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${HO1}/${KO1} failed, ${Z}`,$),$}},{maxAttempts:KO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!WG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (fJ8(),xJ8));console.log("");for(let Z of $())console.log(Z)}var zs6=Bun.serve({idleTimeout:0,port:Ns6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(dJ8){let Y=await Es6($,Z,gJ8);if(Y===void 0)return;if(Y)return Y;let X=await js6($,gJ8);if(X)return X}let Q=await Ds6($);if(Q)return Ls6(Q);return J_0.fetch($,{server:Z})},websocket:{open($){if(GO1($.data))JO1.open($)},message($,Z){if(GO1($.data))JO1.message($,Z)},close($){if(GO1($.data))JO1.close($)}},development:!1}),Ps6=DL1();if(WG.localMode)Promise.resolve().then(() => (yf(),Aq0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let Y=await Q();if(Y>0)console.log(`[local-mode] cleared ${Y} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let X=await $()}catch(Y){console.error("Failed to seed local mode:",Y)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (yf(),Aq0));Z()}catch{}});var uJ8=!1;async function As6($){let Z;try{Z=await Gs6.create({systemDatabaseUrl:FO1(WG.databaseUrl,WG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:S3,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let Y=Q.map((X)=>X.workflowID);await Z.resumeWorkflows(Y,{queueName:S3}),console.log(`[shutdown] re-enqueued ${Y.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,Y)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function G_0($){if(uJ8)return;uJ8=!0,console.log(`
|
|
3737
3737
|
[shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),Y=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);Y.unref?.();let X=0;try{Ps6(),J_0.markShuttingDown();let J=AO1(WG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await z$(J),await zs6.stop(!0);let G=l60.executorID;await l60.shutdown(),await As6(G),await J_0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>G_0("SIGTERM"));process.on("SIGINT",()=>G_0("SIGINT"));process.on("SIGHUP",()=>G_0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),G_0("uncaughtException")});
|