decocms 4.463.0 → 4.463.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-DWiDp-f1.js → AlertCircle-B5TmAHNM.js} +1 -1
- package/dist/client/assets/{AreaChart-wG4ny1PS.js → AreaChart-CVuOnHQX.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BMW9utAL.js → ArrowLeft-9GJFW4LS.js} +1 -1
- package/dist/client/assets/{ArrowUp-BuOxK3Pf.js → ArrowUp-Cib8ewx4.js} +1 -1
- package/dist/client/assets/{Building02-Dyi9ronc.js → Building02-CEVEDOME.js} +1 -1
- package/dist/client/assets/{CartesianChart-vlTqQf6R.js → CartesianChart-BTuTtPIG.js} +1 -1
- package/dist/client/assets/{Check-CXicUAOa.js → Check-BvCNBJe8.js} +1 -1
- package/dist/client/assets/{CheckCircle-YnBoZGaI.js → CheckCircle-DpemfJ5S.js} +1 -1
- package/dist/client/assets/{ChevronUp-DBFnJWSs.js → ChevronUp-BwSgHBqC.js} +1 -1
- package/dist/client/assets/{Copy01-Dr3v4gYp.js → Copy01-B3CEXdpv.js} +1 -1
- package/dist/client/assets/{CreditCard01-C2A37qQR.js → CreditCard01-DFj0HUwR.js} +1 -1
- package/dist/client/assets/{DotsVertical-OvfvRPcf.js → DotsVertical-CvByrwlw.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-CzSXgWcn.js → ErrorBarContext-nupiMjtH.js} +1 -1
- package/dist/client/assets/{Image01-nUj6_DO-.js → Image01-CPJAhPOP.js} +1 -1
- package/dist/client/assets/{Key01-HuTENYPy.js → Key01-D3KdqQRK.js} +1 -1
- package/dist/client/assets/{Line-C_bImwm0.js → Line-BPqpw5U0.js} +1 -1
- package/dist/client/assets/{Link01-cjx77r4E.js → Link01-VVuQkQsn.js} +1 -1
- package/dist/client/assets/{LinkBroken01-CaB2I9G0.js → LinkBroken01-CjBq0lbN.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CSoQ_DGP.js → LinkExternal01-CLi_LJ2y.js} +1 -1
- package/dist/client/assets/{Monitor01-D19plyaf.js → Monitor01-DO03hBU2.js} +1 -1
- package/dist/client/assets/{Palette-DA_Dzon5.js → Palette-uTBuV6eG.js} +1 -1
- package/dist/client/assets/{Plus-CuK8nNcu.js → Plus-DLW5olp7.js} +1 -1
- package/dist/client/assets/{SearchMd-24zvxDRs.js → SearchMd-BNPYUXLP.js} +1 -1
- package/dist/client/assets/{Sector-C0T4f5Eo.js → Sector-Dx6NP_My.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-DUKvQNmb.js → ShoppingBag01-b9-BhwDR.js} +1 -1
- package/dist/client/assets/{Sun-Dl2R87Eo.js → Sun-BF4Eks2R.js} +1 -1
- package/dist/client/assets/{Tool01-BrjR3c4R.js → Tool01-3oVxsToy.js} +1 -1
- package/dist/client/assets/{Trash01-CuaXxM5C.js → Trash01-D7ylqCya.js} +1 -1
- package/dist/client/assets/{Upload01-DrihoScl.js → Upload01-DNxaQbwq.js} +1 -1
- package/dist/client/assets/{User01-BDAGl75t.js → User01-Bsraudto.js} +1 -1
- package/dist/client/assets/{UserSquare-DdE8MrwD.js → UserSquare-DeLx8WzD.js} +1 -1
- package/dist/client/assets/{Users01-BjhYFiAu.js → Users01-iXRnCXY-.js} +1 -1
- package/dist/client/assets/{X-Dv9AnRlg.js → X-BQNprmBf.js} +1 -1
- package/dist/client/assets/{XAxis-DXXRhBFV.js → XAxis-h1--j8He.js} +1 -1
- package/dist/client/assets/{XClose-BCVhz-Kf.js → XClose-BpmmlEY3.js} +1 -1
- package/dist/client/assets/{ZoomOut-DGJt2ZOH.js → ZoomOut-C7AJpRh5.js} +1 -1
- package/dist/client/assets/{access-gate-E54qpcq4.js → access-gate-DtOf3EFS.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-D8GNVhEw.js → add-connection-dialog-Cs7zmh4q.js} +1 -1
- package/dist/client/assets/{agent-analytics-CVJIJ1Qw.js → agent-analytics-_8EkEzff.js} +1 -1
- package/dist/client/assets/agent-app-yXeZxYeB.js +1 -0
- package/dist/client/assets/{agent-assets-Cfox23r3.js → agent-assets-KsfZNiX2.js} +1 -1
- package/dist/client/assets/{agent-automation-D9cSpEhM.js → agent-automation-BbzR1k2i.js} +1 -1
- package/dist/client/assets/{agent-automations-COtVvppU.js → agent-automations-BCo8Ch44.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-BEMCbzGF.js → agent-connect-sources-C9x8XmMh.js} +1 -1
- package/dist/client/assets/agent-deck-B2pNzx_r.js +1 -0
- package/dist/client/assets/{agent-e2e-Wqxn9jg8.js → agent-e2e-XMCI0UQl.js} +1 -1
- package/dist/client/assets/{agent-experiments-BASXy9kl.js → agent-experiments-B6l4hX1w.js} +1 -1
- package/dist/client/assets/{agent-file-BOh5OW0h.js → agent-file-DH_lUKXM.js} +1 -1
- package/dist/client/assets/{agent-hosting-BIJRB3GM.js → agent-hosting-B9W8d0kn.js} +1 -1
- package/dist/client/assets/{agent-icon-B_AZohhm.js → agent-icon-CbXn8VZK.js} +1 -1
- package/dist/client/assets/agent-library-ZfS11Ca2.js +1 -0
- package/dist/client/assets/agent-library-file-Dt5WQhqR.js +1 -0
- package/dist/client/assets/{agent-monitor-CJmv9IPY.js → agent-monitor-AbeIW_Ai.js} +1 -1
- package/dist/client/assets/{agent-overview-BEv7N4NA.js → agent-overview-CP7eXdGD.js} +1 -1
- package/dist/client/assets/agent-settings-Cksb01KL.js +1 -0
- package/dist/client/assets/{agent-site-editor-BtM-oYes.js → agent-site-editor-CXjzupfF.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-yaxPYyX2.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-DIb9jcK9.js → agent-site-editor-content-DVxq2O4-.js} +3 -3
- package/dist/client/assets/{agent-site-editor-preview-DjU9ncCA.js → agent-site-editor-preview-5OyybmdQ.js} +3 -3
- package/dist/client/assets/agent-view-DIIzNnG2.js +1 -0
- package/dist/client/assets/{agent-view-guard-BwQRC7Wk.js → agent-view-guard-BELRPlW2.js} +1 -1
- package/dist/client/assets/{agents-list-UliOXq_N.js → agents-list-BFuTgO9u.js} +1 -1
- package/dist/client/assets/{ai-providers-D2IUVIa0.js → ai-providers-sAl5iN13.js} +1 -1
- package/dist/client/assets/{alert-DbQbBKPW.js → alert-Ckg4hU0z.js} +1 -1
- package/dist/client/assets/{alert-dialog-DNPqbgpS.js → alert-dialog-BR8K4NXo.js} +1 -1
- package/dist/client/assets/{analytics-sections-SJnL8lbj.js → analytics-sections-DF3Z3b79.js} +1 -1
- package/dist/client/assets/{api-keys-BoG6C1mH.js → api-keys-DNNJK348.js} +1 -1
- package/dist/client/assets/api-keys-Dfu07QXr.js +1 -0
- package/dist/client/assets/app-editor-DPt5aHSL.js +1 -0
- package/dist/client/assets/{asset-utils-BY1ew-Kc.js → asset-utils-B3OWlMwT.js} +1 -1
- package/dist/client/assets/{auth-DDpWnpgU.js → auth-cALcTtmh.js} +1 -1
- package/dist/client/assets/{auth-catchall-BZKEkBRf.js → auth-catchall-RnxJnMWm.js} +1 -1
- package/dist/client/assets/{auth-entry-iEMBYP-8.js → auth-entry-RJjANTAz.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BlHy1ceM.js → auth-split-layout-BzqlAJfR.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BnkSFHoe.js → authenticate-and-persist-oauth-D4ybQZrl.js} +1 -1
- package/dist/client/assets/{automation-list-row-BqrGkFet.js → automation-list-row-C8pHu8df.js} +1 -1
- package/dist/client/assets/{automation-runs-2GByVaGU.js → automation-runs-DbMMtDPh.js} +1 -1
- package/dist/client/assets/{automations-B6vr6PHF.js → automations-Bs5g1ha0.js} +1 -1
- package/dist/client/assets/{autosend-xivc0lOT.js → autosend-05UC4VjF.js} +1 -1
- package/dist/client/assets/{avatar-Ctu5Wczb.js → avatar-D8csOeeF.js} +1 -1
- package/dist/client/assets/{badge-BHUGKNWs.js → badge-Hx3u6P7O.js} +1 -1
- package/dist/client/assets/{block-document-CQvkKfRq.js → block-document-Ku1oysrM.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-CjmwOatj.js → blocks-preview-workspace-context-Ddh7SseB.js} +1 -1
- package/dist/client/assets/{blog-schema-Cjm5UW7b.js → blog-schema-DHwYJOyB.js} +1 -1
- package/dist/client/assets/{buckets-CckyUpV8.js → buckets-pKKwZjvN.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-mQFDIfqK.js → build-improve-prompt-doc-CnVRLk9u.js} +1 -1
- package/dist/client/assets/{calendar-C5AAXd6o.js → calendar-TwuiVpjf.js} +1 -1
- package/dist/client/assets/{capability-load-error-Dd-CbUlr.js → capability-load-error-BmxCCm5y.js} +1 -1
- package/dist/client/assets/{category-editor-Cn3peeDB.js → category-editor-BZw-XttL.js} +1 -1
- package/dist/client/assets/{chart-Cckr6Rhu.js → chart-YvkP6Rx2.js} +1 -1
- package/dist/client/assets/{chat-context-BOhnLSkM.js → chat-context-CikhzUxM.js} +1 -1
- package/dist/client/assets/{chat-draft-DGXb0HEl.js → chat-draft-DMMAinxT.js} +1 -1
- package/dist/client/assets/{checkbox-B6iJHz55.js → checkbox-Bo7NjQSg.js} +1 -1
- package/dist/client/assets/{choose-editor-CUuoO_B4.js → choose-editor-CrJY1sxE.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-BPQnqmjZ.js → claim-phase-copy-DnP-cI_8.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DMprEBtN.js → cli-auth-success-978JfJBE.js} +1 -1
- package/dist/client/assets/{client-icons-CitpbYhD.js → client-icons-ma8_2UIe.js} +1 -1
- package/dist/client/assets/{collapsible-BKVhHdmh.js → collapsible-DVB6AYNV.js} +1 -1
- package/dist/client/assets/{collection-detail-CkhetvNl.js → collection-detail-CSot03uC.js} +1 -1
- package/dist/client/assets/{collection-display-button-CkYwx2c-.js → collection-display-button-Bd647egA.js} +1 -1
- package/dist/client/assets/{collection-search-Ca5RdqHn.js → collection-search-D5sWxiI_.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DVKvHA40.js → collection-table-wrapper-BTjhjNWL.js} +1 -1
- package/dist/client/assets/{collection-tabs-DvLdBj3Z.js → collection-tabs-C89tqghq.js} +1 -1
- package/dist/client/assets/{column-rules-BJsI1Zvq.js → column-rules-BMCfx_gP.js} +1 -1
- package/dist/client/assets/{combobox-PZk6KTm8.js → combobox-sNdZN9XI.js} +1 -1
- package/dist/client/assets/{command-__KQqh6Y.js → command-H0OtsxUs.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-BmUUkMTw.js → companion-mcps-section-vQA3DOhf.js} +1 -1
- package/dist/client/assets/{config-BUhboKJz.js → config-maKPj7tB.js} +1 -1
- package/dist/client/assets/{connect-CLgSvuZK.js → connect-BRZ2U-RU.js} +1 -1
- package/dist/client/assets/{connect-layout-Bef3Vcoz.js → connect-layout-BCUOkWSA.js} +1 -1
- package/dist/client/assets/{connection-B_CnJB72.js → connection-D_rVWA-L.js} +1 -1
- package/dist/client/assets/{connection-card-COXkS8Eb.js → connection-card-lEfV14ps.js} +1 -1
- package/dist/client/assets/{connection-detail-CqAB54TD.js → connection-detail-Bkpj1hPa.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CmM6esb0.js → connection-form-helpers-DzSY7y5N.js} +1 -1
- package/dist/client/assets/{connections-ctwClS3Y.js → connections-D2ChZKJ9.js} +1 -1
- package/dist/client/assets/{context-BrMbDozZ.js → context-BYAhF2ih.js} +1 -1
- package/dist/client/assets/{context-menu-D5LE-zYl.js → context-menu-54o-CErg.js} +1 -1
- package/dist/client/assets/{core.esm-Bm8Mdq22.js → core.esm-DbtknlhF.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-j0D-TCSt.js → create-organization-dialog-Cr3N9hYb.js} +1 -1
- package/dist/client/assets/{daily-pulse-Cd5PQB45.js → daily-pulse-CcX5tKuX.js} +1 -1
- package/dist/client/assets/{decopilot-XH4QWeAH.js → decopilot-CBk7MsQQ.js} +1 -1
- package/dist/client/assets/{device-hint-sfxTtdjc.js → device-hint-BPZC2UIh.js} +1 -1
- package/dist/client/assets/{dialog-BaUTSxMN.js → dialog-Cx4yDOtp.js} +1 -1
- package/dist/client/assets/{discover-CDpA1vFz.js → discover-BJ8uKTXr.js} +1 -1
- package/dist/client/assets/{domain-settings-B-7NWnKQ.js → domain-settings-5_gXdfZO.js} +1 -1
- package/dist/client/assets/{download-app-dialog-Do4LLhVR.js → download-app-dialog-CddOOzn5.js} +1 -1
- package/dist/client/assets/{drawer-B9dwTNY5.js → drawer-lUKd8lKU.js} +1 -1
- package/dist/client/assets/{editor-ByUsSScY.js → editor-CDzOZBXR.js} +1 -1
- package/dist/client/assets/{empty-state-C3ObDFbb.js → empty-state-B5RpF5dw.js} +1 -1
- package/dist/client/assets/{empty-state-BLBbHDRF.js → empty-state-CRgX-H4d.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BKPLoQfG.js → extract-connection-data-DKbP-JSI.js} +1 -1
- package/dist/client/assets/{feature-gate-DIRzfv1T.js → feature-gate-DYDN-f8K.js} +1 -1
- package/dist/client/assets/{feature-paywall-Bj36swPZ.js → feature-paywall-CwJeuIRd.js} +1 -1
- package/dist/client/assets/{file-explorer-CTmYwWxQ.js → file-explorer-Dy6k9N2q.js} +1 -1
- package/dist/client/assets/{file-preview-DKsb5sxq.js → file-preview--_ce6-u1.js} +1 -1
- package/dist/client/assets/{file-share-button-CAJ6q_i3.js → file-share-button-DkX33WID.js} +1 -1
- package/dist/client/assets/{file-type-icon-BslTQPeb.js → file-type-icon-z_VVXBs0.js} +1 -1
- package/dist/client/assets/flat-project-D11si8ND.js +1 -0
- package/dist/client/assets/{folder-icon-DI8RbZE8.js → folder-icon-Dl76i-NI.js} +1 -1
- package/dist/client/assets/{form-CX1qK1yv.js → form-PsTlToCZ.js} +1 -1
- package/dist/client/assets/{gateway-client-BvHlKdmu.js → gateway-client-O3BwGZz4.js} +1 -1
- package/dist/client/assets/{general-B3HHRd07.js → general-DWo8L8D2.js} +1 -1
- package/dist/client/assets/{home-BJBtZM7W.js → home-DCoYzUty.js} +1 -1
- package/dist/client/assets/{icon-button-BBOHlA6G.js → icon-button-CtkCoho4.js} +1 -1
- package/dist/client/assets/{index-Df0sPq1p.js → index-B92tQhk2.js} +1 -1
- package/dist/client/assets/{index-DDpEXUJ_.js → index-BZOFys5V.js} +1 -1
- package/dist/client/assets/{index-CO_AXaPm.js → index-BuPiMHa9.js} +1 -1
- package/dist/client/assets/{index-BuCSZoG-.js → index-CNKB9BLC.js} +1 -1
- package/dist/client/assets/{index-_Sxk3cnc.js → index-CNlcFUXI.js} +1 -1
- package/dist/client/assets/{index-BqIvBG3L.js → index-CX9nJVrp.js} +1 -1
- package/dist/client/assets/{index-CEnW1hdR.js → index-Cehs1FbF.js} +1 -1
- package/dist/client/assets/{index-BMDxYXCC.js → index-CqROczuR.js} +1 -1
- package/dist/client/assets/{index-DAsfUatQ.js → index-CqoWQKAL.js} +1 -1
- package/dist/client/assets/{index-BER7cxzg.js → index-DbInOaDT.js} +3 -3
- package/dist/client/assets/{index-CU39nsZn.js → index-DkbR1nSx.js} +1 -1
- package/dist/client/assets/{index-LBqA-ZwS.js → index-Dp_K-tWq.js} +4 -4
- package/dist/client/assets/{index-C3kLhdFk.js → index-atJuiikW.js} +1 -1
- package/dist/client/assets/{index-GtGSryeO.js → index-oQ2UbXRU.js} +1 -1
- package/dist/client/assets/{index-redirect-O6bjnqnz.js → index-redirect-CuIBqkGB.js} +1 -1
- package/dist/client/assets/{index-royPJMuT.js → index-s00oD-Jd.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-BOfNlSlD.js → infiniteQueryObserver-cPdLUo2i.js} +1 -1
- package/dist/client/assets/{infra-billing-C01AiIAF.js → infra-billing-CMOusNuI.js} +1 -1
- package/dist/client/assets/{input-BaULnlTy.js → input-CuvBF_Ph.js} +1 -1
- package/dist/client/assets/{input-B5aqwsZt.js → input-DMPfmuCm.js} +1 -1
- package/dist/client/assets/{input-NGWnA1zm.js → input-Dz9vjpZr.js} +3 -3
- package/dist/client/assets/{integration-icon-DBB4e_3T.js → integration-icon-C4a6DmNa.js} +1 -1
- package/dist/client/assets/{label-B_gun1QM.js → label-IzmYRV1z.js} +1 -1
- package/dist/client/assets/{layout-CroKjGpx.js → layout-B3a4jG3v.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-CoX6cUW4.js → legacy-agents-deep-2AHQu7JX.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-BICndawD.js → legacy-main-redirect-QbN2kRww.js} +1 -1
- package/dist/client/assets/library-CkyuDdBe.js +1 -0
- package/dist/client/assets/{library-tab-BR0DXbhB.js → library-tab-CTbP1WqV.js} +1 -1
- package/dist/client/assets/{login-DOWqx3ut.js → login-DFPUDsmw.js} +1 -1
- package/dist/client/assets/{markdown-U5k2vy3J.js → markdown-CbWncYsp.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-CKBkqc3B.js → mcp-app-renderer-dVJ57955.js} +1 -1
- package/dist/client/assets/{mcp-oauth-HStEMAmd.js → mcp-oauth-CaFmRQFB.js} +1 -1
- package/dist/client/assets/{members-DNyZa-XF.js → members-C66PZkTp.js} +1 -1
- package/dist/client/assets/{memory-OOka5CRZ.js → memory-COrpidSd.js} +1 -1
- package/dist/client/assets/{mini-report-page-COzp9QDI.js → mini-report-page-BIpwSm2B.js} +1 -1
- package/dist/client/assets/{mock-board-CfkC340s.js → mock-board-I7CG5ZZk.js} +1 -1
- package/dist/client/assets/{monaco-editor-39OIr0EW.js → monaco-editor-BfDinEqB.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-hFVlSsvr.js → monitoring-stats-row-DpliLE6w.js} +1 -1
- package/dist/client/assets/{multi-select-Dq20jLV8.js → multi-select-CdUvVLnd.js} +1 -1
- package/dist/client/assets/{mustache-Cp6gU8R-.js → mustache-BCjs42fS.js} +1 -1
- package/dist/client/assets/{new-project-dialog-GBb33kNc.js → new-project-dialog-BrBcYgwV.js} +1 -1
- package/dist/client/assets/{oauth-callback-Bm96J_76.js → oauth-callback-VghnKX5V.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Bw_B2ld4.js → oauth-callback-ai-provider-CHo0gJqB.js} +1 -1
- package/dist/client/assets/{onboarding-DidfktKN.js → onboarding-CCfkb-5i.js} +1 -1
- package/dist/client/assets/{openai-conversation-BKeUiEz7.js → openai-conversation-CBNQtuep.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-D6hnV0TB.js → optimistic-project-sidebar-views-DO48tEtU.js} +1 -1
- package/dist/client/assets/{org-file-open-context-BtoXgtv0.js → org-file-open-context-CTB-BA9v.js} +1 -1
- package/dist/client/assets/{organization-choice-BoiiDDpR.js → organization-choice-B_JYNF9C.js} +1 -1
- package/dist/client/assets/{orgs-BMfaOlil.js → orgs-CEe5T0Jp.js} +1 -1
- package/dist/client/assets/{page-seo-form-l195NMEg.js → page-seo-form-ZXtL1SS1.js} +1 -1
- package/dist/client/assets/{pair-DrA4hmPx.js → pair-DK0B0mc4.js} +1 -1
- package/dist/client/assets/{plan-ladder-raSzhtyN.js → plan-ladder-DV7XXfLd.js} +1 -1
- package/dist/client/assets/{popover-CeeSO9_9.js → popover-CTR7iqtU.js} +1 -1
- package/dist/client/assets/{post-calendar-BaiUUJmh.js → post-calendar-Cj6mtuXm.js} +1 -1
- package/dist/client/assets/{post-editor-BQ1ukEYL.js → post-editor-CkUCYO4l.js} +1 -1
- package/dist/client/assets/{preview-content-CIoLsvsV.js → preview-content-BYxJoP40.js} +1 -1
- package/dist/client/assets/{preview-dialog-9biwdpbK.js → preview-dialog-CYLdM3p6.js} +1 -1
- package/dist/client/assets/{preview-panel-DAYrsAZ_.js → preview-panel-CuZzv1pv.js} +1 -1
- package/dist/client/assets/{profile-BrT6Fi4g.js → profile-BCXXDsmg.js} +1 -1
- package/dist/client/assets/{project-app-view-eDaYLCna.js → project-app-view-CDuxE_ml.js} +1 -1
- package/dist/client/assets/{project-feed-BuPVvKIN.js → project-feed-DIsrBxNw.js} +1 -1
- package/dist/client/assets/{project-icon-RPHlWMLn.js → project-icon-TzEHFIiY.js} +1 -1
- package/dist/client/assets/project-reports-CtWvQy-H.js +1 -0
- package/dist/client/assets/project-tasks-CpBAPqu4.js +1 -0
- package/dist/client/assets/{projects-Cgs0BGd1.js → projects-D87yg2cy.js} +1 -1
- package/dist/client/assets/{projects-empty-state-D6K9KKqm.js → projects-empty-state-EB5DtkKb.js} +1 -1
- package/dist/client/assets/{prompts-Bj9DEWHy.js → prompts-BskO422j.js} +1 -1
- package/dist/client/assets/record-editor-RPRDtY57.js +1 -0
- package/dist/client/assets/{redirect-editor-CFDCaCx_.js → redirect-editor-BKJweHyd.js} +1 -1
- package/dist/client/assets/{reports-BgW9aNAq.js → reports-BLAtFH6q.js} +1 -1
- package/dist/client/assets/reports-BtbcBBMJ.js +1 -0
- package/dist/client/assets/{reports-onboarding-KuQ-B5Nd.js → reports-onboarding-wPSrs32l.js} +1 -1
- package/dist/client/assets/{reports-tab-Bof1mzjv.js → reports-tab-B72VUoH-.js} +2 -2
- package/dist/client/assets/{repositories-DmphBx57.js → repositories-Bl2pBl-f.js} +1 -1
- package/dist/client/assets/{repository-binding-D1nnAWYo.js → repository-binding-CzSKWD7H.js} +1 -1
- package/dist/client/assets/{repository-import-picker-DRqtS9NW.js → repository-import-picker-D0LwcFNO.js} +1 -1
- package/dist/client/assets/{repository-picker-Dg10f9--.js → repository-picker-DQFzR9xt.js} +1 -1
- package/dist/client/assets/{require-capability-Dfqs0tLP.js → require-capability-CMxqoohm.js} +1 -1
- package/dist/client/assets/{required-auth-layout-CfNBeMt4.js → required-auth-layout-Cketary5.js} +1 -1
- package/dist/client/assets/{reset-password-ZSZOruiu.js → reset-password-DxGEn2uN.js} +1 -1
- package/dist/client/assets/{resizable-BrB6X38q.js → resizable-DCMgjOKZ.js} +1 -1
- package/dist/client/assets/{resolve-tab-icon-CXpd70Ay.js → resolve-tab-icon-Bn2NKJjD.js} +1 -1
- package/dist/client/assets/{review-settings-BMWXlktJ.js → review-settings-BDC004dc.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-BiLYq_Ss.js → rich-text-link-control-oDq426wL.js} +1 -1
- package/dist/client/assets/{roles-DYnLkqNH.js → roles-D2mAbmyg.js} +1 -1
- package/dist/client/assets/{route-Dom1EKxW.js → route-CItSJgD4.js} +1 -1
- package/dist/client/assets/route-_gNd_u_g.js +1 -0
- package/dist/client/assets/{route-Dza1mPMZ.js → route-n1Sub2zH.js} +1 -1
- package/dist/client/assets/{runnable-block-editor-CX0ovMOm.js → runnable-block-editor-CWjhiXNQ.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-B1Nt4uWC.js → sandbox-lifecycle-context-DfJeOjj9.js} +1 -1
- package/dist/client/assets/{schema-BuM44BeJ.js → schema-Ca8VbB6Z.js} +1 -1
- package/dist/client/assets/{scroll-area-CwucKMgJ.js → scroll-area-B7qC_9nb.js} +1 -1
- package/dist/client/assets/{search-input-DNCPqRQn.js → search-input-B1vfwvsf.js} +1 -1
- package/dist/client/assets/{search-toggle-QfO4rJO-.js → search-toggle-bwYqrVmX.js} +1 -1
- package/dist/client/assets/{secret-picker-CPcltp8E.js → secret-picker-BpYrwXvM.js} +1 -1
- package/dist/client/assets/{secrets-Dj3-an7_.js → secrets-DQZRb7E3.js} +1 -1
- package/dist/client/assets/{sections-editor-CDa_uUSk.js → sections-editor-Db9a1-Bt.js} +1 -1
- package/dist/client/assets/{select-imMlkJoM.js → select-CoyCwgyB.js} +1 -1
- package/dist/client/assets/{select-model-cT4UKPXZ.js → select-model-CNFYkJTw.js} +1 -1
- package/dist/client/assets/{seo-editor-D_2QNoVA.js → seo-editor-FBgQQ6Ao.js} +1 -1
- package/dist/client/assets/{separator-BZ4lzGmd.js → separator-B3bsYN0c.js} +1 -1
- package/dist/client/assets/settings-tab-DkTXor6H.js +4 -0
- package/dist/client/assets/{sheet-AzJgkdm-.js → sheet-CcwsfSuf.js} +1 -1
- package/dist/client/assets/{shell-layout-CSJSyeoD.js → shell-layout-D0qEeQ00.js} +1 -1
- package/dist/client/assets/{skills-BOZArdy5.js → skills-D_NPHApF.js} +1 -1
- package/dist/client/assets/{sso-B5yqnj7z.js → sso--qAyKDeI.js} +1 -1
- package/dist/client/assets/{suggestion-CcJQPlSS.js → suggestion-BZACoewj.js} +1 -1
- package/dist/client/assets/{switch-xoTVq7WM.js → switch-BsrLPJk-.js} +1 -1
- package/dist/client/assets/{synced-repos-BMmzq47r.js → synced-repos-BBnTf72q.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph-vQF0_Xqb.js → tab-icon-glyph-BpobhcK9.js} +1 -1
- package/dist/client/assets/{table-MT321DSd.js → table-CDAJcCRP.js} +1 -1
- package/dist/client/assets/{tabs-CicgJ10_.js → tabs-_ZXrvPf9.js} +1 -1
- package/dist/client/assets/{task-board-Cs1-7PpN.js → task-board-Be84bQr5.js} +1 -1
- package/dist/client/assets/{task-route-m4lCwB0h.js → task-route-BVDlBu3j.js} +1 -1
- package/dist/client/assets/{task-status-XbY5QJOl.js → task-status-w_ipGIcW.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-DVoQg8Rb.js → taskboard-analytics-DZIIOtRa.js} +1 -1
- package/dist/client/assets/{tasks-D5XhFaqg.js → tasks-DfnBdP8M.js} +1 -1
- package/dist/client/assets/tasks-JiH0eBli.js +1 -0
- package/dist/client/assets/{textarea-CJdXmj_-.js → textarea-D_qYz289.js} +1 -1
- package/dist/client/assets/{thread-analytics-R7Zql4Jr.js → thread-analytics-DUtz7u4O.js} +1 -1
- package/dist/client/assets/{thread-button-CbH7XjU-.js → thread-button-e1WPL34D.js} +1 -1
- package/dist/client/assets/{thread-intent-B1ICFt86.js → thread-intent-CQTmnksY.js} +1 -1
- package/dist/client/assets/{thread-route-Bb8c02GG.js → thread-route-BqkWVw2J.js} +1 -1
- package/dist/client/assets/{thread-route-BcHLmvou.js → thread-route-DDpItDrx.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-DUB9B_nE.js → thread-sheet-body-jgcoBFMz.js} +1 -1
- package/dist/client/assets/{toggle-group-C9ZX2RgM.js → toggle-group-C6cnvdcW.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-Daq-5ocJ.js → toolbar-icon-button-C3ZwIJAh.js} +1 -1
- package/dist/client/assets/{tooltip-BwTRkM37.js → tooltip-volhiTDm.js} +1 -1
- package/dist/client/assets/{track-pLWJ-wXy.js → track-CHLcK5Xr.js} +1 -1
- package/dist/client/assets/{types-6q3fiU58.js → types-BfHWRRMs.js} +1 -1
- package/dist/client/assets/{usage-stats-DqkDEQoU.js → usage-stats-u1xk4pvh.js} +1 -1
- package/dist/client/assets/{use-ai-providers-B1J7ouSE.js → use-ai-providers-DSD7VYyN.js} +1 -1
- package/dist/client/assets/{use-automations-m8Hu0y6o.js → use-automations-DxuURK9w.js} +1 -1
- package/dist/client/assets/{use-autosave-BXMlnNye.js → use-autosave-BXGIoabR.js} +1 -1
- package/dist/client/assets/{use-chat-layout-state-D_r1YjBG.js → use-chat-layout-state-CD_0Irhr.js} +1 -1
- package/dist/client/assets/{use-chat-navigation-NXmBPBJ5.js → use-chat-navigation-jtlOMVJv.js} +1 -1
- package/dist/client/assets/{use-clock-tick-Ce_NiOa_.js → use-clock-tick-B9pwHzMq.js} +1 -1
- package/dist/client/assets/{use-connect-companion-CMe2Cke9.js → use-connect-companion-1m-Flriq.js} +1 -1
- package/dist/client/assets/{use-connection-D9TU1G8g.js → use-connection-BxvBZ4tG.js} +1 -1
- package/dist/client/assets/{use-copy-CwGCL7_G.js → use-copy-FUDPi7ru.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BEb1SxP-.js → use-create-virtual-mcp-BMOl2YsQ.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-CncfJZ-Y.js → use-date-fns-locale-CZfaxMtC.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-V9REzK1K.js → use-debounced-autosave-DyqWcQ6u.js} +1 -1
- package/dist/client/assets/{use-debounced-value-TVa8ke9i.js → use-debounced-value-2SotiCO2.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BxH5tRJq.js → use-deco-credits-B3LiNfwz.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-ByD6TF3m.js → use-decopilot-events-D3zb74bk.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DwzWoBly.js → use-delete-connection-DiRBraYP.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-C2pzXDr2.js → use-deployment-admin-hh-oYei0.js} +1 -1
- package/dist/client/assets/{use-ensure-project-folder-AK-c3A_w.js → use-ensure-project-folder-C8p35UA1.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-CyfuYiZy.js → use-fast-preview-draft-url-BKk6i5QK.js} +1 -1
- package/dist/client/assets/{use-file-configs-HSDXp3dR.js → use-file-configs-BHY4DaxL.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Di73ngUh.js → use-infinite-scroll-CbWvVc4J.js} +1 -1
- package/dist/client/assets/{use-join-requests-SyFADpZF.js → use-join-requests-DbAhSRzF.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-C9rsMyw4.js → use-main-panel-tabs-CYEpq4x2.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-DKj9l4Q_.js → use-mcp-auth-status-B94ukkEm.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DEGTm1W0.js → use-mcp-client-BUFdpLoI.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-CZuYjuRv.js → use-mcp-prompts-PtK6U83h.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-DGilpnId.js → use-mcp-tools-fP36UUt2.js} +1 -1
- package/dist/client/assets/{use-members-nuYKaBVx.js → use-members-CfUgcELO.js} +1 -1
- package/dist/client/assets/{use-mobile-D86gQiqH.js → use-mobile-D_zVYgcY.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-C1uAfvXQ.js → use-navigate-to-agent-D3FqrHHq.js} +1 -1
- package/dist/client/assets/use-new-blocks-editor-B2vcRo3Z.js +1 -0
- package/dist/client/assets/{use-open-billing-url-DrFUthpb.js → use-open-billing-url-D9fhhg-C.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-Ctvz1VPK.js → use-org-auth-client-uVDfk1J4.js} +1 -1
- package/dist/client/assets/{use-org-fs-BK-5u4MR.js → use-org-fs-BIChLUk1.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-DCT7Auvn.js → use-org-repo-syncs-USNvar5i.js} +1 -1
- package/dist/client/assets/{use-org-sso-Dvki5yin.js → use-org-sso-BeqR2AAG.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CdiXw9NI.js → use-organization-roles-Bx8bGE-Q.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BB1edQnb.js → use-organization-settings-BScH3qwG.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-FaJ2R6On.js → use-panel-navigate-f5p30JNB.js} +1 -1
- package/dist/client/assets/{use-project-scope-CJdExTjB.js → use-project-scope-Bc3Mf8u8.js} +1 -1
- package/dist/client/assets/{use-releases-CkCV1BPi.js → use-releases-C_be6yuh.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-BjS1JWZX.js → use-reports-diagnostic-C3lq-p41.js} +1 -1
- package/dist/client/assets/{use-secrets-BLWrq5Zi.js → use-secrets-Bg6EZdq0.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-DtBKzuHi.js → use-section-preview-base-DIGhBQOo.js} +1 -1
- package/dist/client/assets/{use-session-runtime-Ciro8eXk.js → use-session-runtime-D-oBtWdP.js} +1 -1
- package/dist/client/assets/{use-tags-CZ_bS51l.js → use-tags-CW71Fix3.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-Caaew7r_.js → use-task-board-analytics-D5zyKXHr.js} +1 -1
- package/dist/client/assets/{use-task-board-events-nMb8vMzh.js → use-task-board-events-CGpFuIoH.js} +1 -1
- package/dist/client/assets/{use-task-metadata-DdniinOi.js → use-task-metadata-BB48G_ju.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-D7pEB2b_.js → use-thread-analytics-DglDjnAj.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-BvePWXQr.js → use-thread-outputs-DOxiz9iU.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-LSeshq9l.js +1 -0
- package/dist/client/assets/{useQueries-CqRixoL5.js → useQueries-Bf6inKuU.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DDa2NwUG.js +1 -0
- package/dist/client/assets/{users-DqUzzC71.js → users-Bhyogzga.js} +1 -1
- package/dist/client/assets/{utils-CVtWzP8U.js → utils-CbyoMcko.js} +1 -1
- package/dist/client/assets/{variant-calendar-B-8vmp-z.js → variant-calendar-DccOv2cj.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-BHQrQ-er.js → variant-matcher-override-0eTJWiNi.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-C6y0Ak_X.js → view-mode-toggle-BBW6uQ5m.js} +1 -1
- package/dist/client/assets/{virtual-mcp-BnTPAygc.js → virtual-mcp-DyQGypdD.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/agent-app-Cv42eUOK.js +0 -1
- package/dist/client/assets/agent-deck-CkaxqPyQ.js +0 -1
- package/dist/client/assets/agent-library-e9R2mrHA.js +0 -1
- package/dist/client/assets/agent-library-file-CWWZkSXi.js +0 -1
- package/dist/client/assets/agent-settings-xa5u31eL.js +0 -1
- package/dist/client/assets/agent-site-editor-code-BGhosgRZ.js +0 -2
- package/dist/client/assets/agent-view-B5JwJu5a.js +0 -1
- package/dist/client/assets/api-keys-B8m8i5RY.js +0 -1
- package/dist/client/assets/app-editor-C9lJAIxk.js +0 -1
- package/dist/client/assets/flat-project-Dm5v-WoJ.js +0 -1
- package/dist/client/assets/library-CJbNbaaz.js +0 -1
- package/dist/client/assets/project-reports-BX_a8I4H.js +0 -1
- package/dist/client/assets/project-tasks-D4VJ7ObB.js +0 -1
- package/dist/client/assets/record-editor-BXHnPoZS.js +0 -1
- package/dist/client/assets/reports-CsbUc9gb.js +0 -1
- package/dist/client/assets/route-yo_gVgXO.js +0 -1
- package/dist/client/assets/settings-tab-B-9vMsZ9.js +0 -5
- package/dist/client/assets/tasks-BhdUS3SM.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-NIzs9JOH.js +0 -1
- package/dist/client/assets/useInfiniteQuery-fv1BKri9.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BRIV-VAB.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3729,7 +3729,7 @@ ${J.join(`
|
|
|
3729
3729
|
`)}`:X}function ba6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3730
3730
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var KG8=200,Ra6=12,Ma6,Va6=300,$v0=3;var kO1=D(()=>{G7();r$();e_0();Ma6={aheadBy:0,behindBy:0,files:[]}});function fa6($){if(!$||$.includes(".."))return!1;return xa6.test($)}function FG8($){return ya6.includes($)}function SO1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!fa6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function CO1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var xa6,ya6;var UG8=D(()=>{xa6=/^[\w./@-]+$/;ya6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function v50($,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 BG8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new TP(x7);let J=await rj($.storage,X,Y);if(J&&await VD($.storage,J)){let F=await cU($,J,{forceRefresh:!0}).catch((U)=>{throw new TP(U instanceof Error?U.message:x7)});await NG8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new TP("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await mm({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:x7;throw new TP(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await dU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=xj$(F instanceof Error?F.message:String(F));throw U?new TP(N):F});await NG8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function NG8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Hn($),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 NE(K,ga6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var ga6=10485760,TP;var _O1=D(()=>{uW();d_0();R$0();AF0();M10();G7();TP=class TP extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function ua6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!ha6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Ag($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(ca6)])}async function da6($,Z){let Q=$.var.studioContext,Y=sY(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=yf(G?.metadata?.runtime);if(W)return W;let K=qR0(Z.virtualMcpMetadata),H=K==="cms"?await UO1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)q$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 ia6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await y7($.var.studioContext)}catch{return null}}function Dn($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function x50($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=v50(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=X0(Y);return um(Y,J.id,X)}function bO1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=rO$(Z);if(Y!==void 0)return $.json({error:Q},429,{...SZ,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof e6)return $.json({error:Q},409,SZ);let X=pW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,SZ)}return $.json({error:Q},502,SZ)}async function vO1($,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 OG8($){try{let Z=await x50($),Q=await IO1(Z,$.get("vmClaim").branch);return $.json(Q,200,SZ)}catch(Z){return bO1($,Z)}}function b50($,Z){let Y=(Qv0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return Qv0.set($,X),X.finally(()=>{if(Qv0.get($)===X)Qv0.delete($)}),Y}async function PQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,SZ);let Y=Q?.runner??Dn($);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",...SZ}})}}let L=await B.text(),O=Q?.redactRepoDir?pa6(L):L,w=B.headers.get("content-type")??"application/json";return new Response(O,{status:B.status,headers:{"content-type":w,...SZ}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((O,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let L=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${L}`},502)}}function pa6($){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 wG8($,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 na6($){return jG8.includes($)}var ha6,la6=524288,DG8=65536,ca6=1e4,LG8=2000,ma6,Qv0,SZ,jG8,EG8=()=>{let $=new Z1;$.use("/:virtualMcpId/:branch/*",ma6),$.post("/:virtualMcpId/:branch/write",(Q)=>PQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Ag(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>PQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Ag(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>PQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Ag(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>PQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Ag(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>PQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Ag(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>PQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Ag(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>PQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Ag(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 PQ(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 PQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>PQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>PQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!na6(Y))return Q.json({error:`step must be one of: ${jG8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await UO1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await ia6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,SZ);if(Y==="start"){let G=X0(Q.var.studioContext),W=zd(X.virtualMcpMetadata);try{await zR0({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 PQ(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 IL(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 wJ8(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 OG8(Q);return Z(Q)});let Z=(Q)=>PQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(LG8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return OG8(Q);return PQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(LG8)])})}),$.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 x50(Q),G=await VO1(J,Y.branch,X.base);return Q.json(G,200,SZ)}catch(X){return bO1(Q,X)}return PQ(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,SZ);let Y=Dn(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return b50(X,async()=>{try{await NO1(W,Y,X);let K=v50(J,G);if(K)await BG8(W,Y,X,K)}catch(K){if(K instanceof TP)return Q.json({error:K.message},403,SZ);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,SZ)}return PQ(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 b50(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,SZ);try{let G=await x50(Q);return await HG8(G,Y.branch,J),Q.json({ok:!0},200,SZ)}catch(G){let W=pW(G)===409||G instanceof e6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,SZ)}});return b50(Y.claimName,()=>PQ(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 b50(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await x50(Q),H=W.base??await K.getDefaultBranch();return await Zv0(K,Y.branch,H),Q.json({ok:!0},200,SZ)}catch(W){return bO1(Q,W)}});let X=Dn(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return b50(J,async()=>{try{await NO1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,SZ)}return PQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/judge-review",a5({maxSize:la6,onError:(Q)=>Q.json({error:"Payload too large"},413,SZ)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Dn(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,L]=PJ8(F)&&N?[F,U]:X?await Promise.all([wG8(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),wG8(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await x50(Q);return Promise.all([IO1(w,Y.branch),VO1(w,Y.branch)])})();await bW(K,X0(K).id,"judging whether a change needs review");let O=await TJ8(K,B,L,typeof H.language==="string"?H.language:void 0);return Q.json(O,200,SZ)}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,SZ);return Q.json({error:F},502,SZ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=Dn(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 vO1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",a5({maxSize:DG8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=Dn(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=SO1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=CO1(J,W.resolveType);return vO1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",a5({maxSize:DG8,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):Ad(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=SO1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!FG8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=CO1(G,K.resolveType);return vO1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var PG8=D(()=>{G8();wK();Kn();FO1();Pd();DJ8();rY();Td();LJ8();GG();AH();OJ8();jJ8();H71();T$0();RJ8();G7();q5();kO1();UG8();RR0();_O1();ha6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;ma6=m_0(async($,Z)=>{let Q=$.var.studioContext;try{p(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=g0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=X0(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{ua6(G)}catch(O){let w=O instanceof Error?O.message:String(O);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=Z$0({orgId:X.id,virtualMcpId:J,branch:G}),H=await L71(Q,G),F=O71(H,Y),U=BJ8({userId:F,projectRef:K}),N=W.metadata??null,B=await da6($,{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((O)=>O.connection_id)??[],runtime:B}),Z();let L;try{L=await y7(Q)}catch{L=null}if(!L)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:L,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],runtime:B}),Z()});Qv0=new Map;SZ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};jG8=["clone","install","start"]});function zG8($,Z,Q){let Y=xO1.get($);if(!Y)Y={pending:null,running:!1},xO1.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)oa6($,Y);return J}async function oa6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await ra6(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)xO1.delete($)}}async function ra6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Bn(Z,Q),W=await Z.listDecofileEntries(G,Y),K=RO1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let L=qO1(K,N),O=`${JSON.stringify(B,null,2)}
|
|
3731
3731
|
`;await XG8(Z.repo,O);let w=L[0]??`${a_0(Y)}/${wO1(N)}.json`;H.push({path:w,content:O});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:O});for(let E of L.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of qO1(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 JG8(Z,F.values(),X),{decofile:B,skipped:L}=M50(N);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:TH(Z.repo),branch:Q,packagePath:Y,blocks:L.map((O)=>O.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:sa6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof e6)||J>=ta6-1)throw N;await U$(O7(2000,200,J,2,0.5))}}}function sa6($){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 g91(Y,$.deps.coAuthor)}var ta6=3,xO1;var AG8=D(()=>{mT0();p_0();i4();r$();G7();e_0();xO1=new Map});import{createHmac as TG8,randomBytes as aa6,timingSafeEqual as ea6}from"crypto";function RG8(){if(Yv0)return Yv0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Yv0=$?Buffer.from($):aa6(32),Yv0}function fO1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+$e6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=TG8("sha256",RG8()).update(Y).digest("base64url");return`${Y}.${X}`}function qG8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(TG8("sha256",RG8()).update(Y).digest("base64url"));if(X.length!==J.length||!ea6(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 $e6=21600000,Yv0=null;var MG8=D(()=>{s1()});function Xv0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Ze6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=Xv0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function IG8($){let Z;try{Z=Xv0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=Ze6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=Xv0(G),K=W&&Xv0(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 Ln}from"zod";function Ye6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Qe6.test($)}function _G8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function f50($){let Z=$.get("decofileScope");return um($.var.studioContext,Z.organizationId,Z.repository)}function y50($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof e6)return $.json({error:Q},409);let Y=pW(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 vG8(){let $=new Z1;return $.use("/:virtualMcpId/:branch",CG8),$.use("/:virtualMcpId/:branch/*",CG8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await f50(Z),X=await GG8(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(IG8(X.decofile),200,{...J,"content-type":"application/json"});let G=fO1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(_G8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return y50(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 f50(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 y50(Z,X)}}),$.patch("/:virtualMcpId/:branch",Je6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Ge6.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=I50(X.data)}catch(G){if(G instanceof V50)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{i_0(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(OO1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await f50(Z),W=await zG8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Hn(Y)},J),K=fO1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:_G8(Z)})}catch(G){return y50(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await f50(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(pW(W)!==409)throw W;await Zv0(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(pW(G)===409)return Z.json({error:"merge-conflict"},409);if(pW(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 y50(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await f50(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(pW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return y50(Z,Y)}}),$}var Qe6,VG8=500,kG8=1048576,SG8=1024,Xe6=8388608,Je6,Ge6,CG8;var bG8=D(()=>{RR0();p_0();G8();wK();FO1();d_0();_O1();G7();AG8();MG8();kO1();e_0();AH();Qe6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Je6=a5({maxSize:Xe6,onError:($)=>$.json({error:"Payload too large"},413)}),Ge6=Ln.object({set:Ln.record(Ln.string(),Ln.unknown()).optional(),delete:Ln.array(Ln.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)<=VG8,{message:`Patch cannot touch more than ${VG8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=kG8),{message:`Each block must be at most ${kG8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=SG8),{message:`Each block key must be at most ${SG8} characters`}),CG8=m_0(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(!Ye6(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||!qG8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await pJ(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(!Ad(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=v50(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 xG8=($)=>{let Z=new Z1;if(Z.use("*",hp),Z.use("*",W78),Z.route("/",J78($.voiceSessions)),Z.route("/",aC0()),Z.route("/",m78()),Z.route("/",k78()),Z.route("/",aX8()),Z.route("/",$J8()),Z.route("/",dX8()),Z.route("/",rX8()),Z.route("/",pX8()),Z.route("/",u_0()),Z.route("/tools",WJ8()),Z.route("/",XJ8()),Z.route("/",AX8({kvStorage:$.kvStorage})),Z.route("/",PX8()),Z.route("/fs",xX8({getConnection:$.getNatsConnection})),Z.route("/sandbox",EG8()),Z.route("/decofile",vG8()),Z.route("/",lX8()),Z.route("/",yX8()),Z.route("/deco-sites",$_0()),Z.route("/hosting",j78()),Z.route("/monitor",q78()),Z.route("/sso",pC0()),Z.route("/",l_0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",B78()),$.mountDevAssets)Z.route("/dev-assets",X_0({orgFromPath:!0}));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);for(let Q of ZO1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",r68()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of ZO1)Z.route(Q,hX8());return Z.route("/mcp",iI0()),Z.route("/mcp/self",f_0()),Z.route("/mcp",tI0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var fG8=D(()=>{G8();G78();K78();xC0();D78();kD1();E78();M78();J_0();OP();RD1();bD1();zX8();TX8();fX8();gX8();L40();LD1();oI0();$O1();uX8();cX8();iX8();nX8();XO1();eX8();ZJ8();JJ8();JO1();KJ8();GO1();pI0();PG8();bG8()});import{z as Tg}from"zod";class yO1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new hG8.Kvm(Jv0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Jv0.StorageType.Memory,ttl:uG8.nanos(lD),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"?gG8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await U$(200);continue}let G=yG8.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 U$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,yG8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new R1(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"?gG8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var Jv0,hG8,uG8,yG8,gG8;var lG8=D(()=>{bJ();$N();r$();Jv0=C(CK(),1),hG8=C(qA(),1),uG8=C(mP(),1),yG8=new TextEncoder,gG8=Tg.discriminatedUnion("state",[Tg.object({state:Tg.literal("ready"),agentId:Tg.string()}),Tg.object({state:Tg.literal("creating"),expiresAt:Tg.number()})])});import{z as On}from"zod";function We6($){return{model:$.model,instructions:`${tI$}
|
|
3732
|
-
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class gO1{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:We6({...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:On.object({session:On.object({id:On.string().min(1)}),transport:On.object({type:On.literal("webrtc"),sdp:On.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var cG8=D(()=>{$N()});var mG8;var dG8=D(()=>{mG8=[{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 hO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:pI$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:mG8.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:lD/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 iG8=D(()=>{$N();dG8()});import{z as NJ}from"zod";import{createHash as Ke6,createHmac as He6}from"crypto";class Gv0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Ke6("sha256").update(JSON.stringify(hO1($))).digest("hex"),this.conversationKey=He6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Gv0({...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}=NJ.object({agents:NJ.array(NJ.object({agent_id:NJ.string(),name:NJ.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 NJ.object({platform_settings:NJ.object({auth:NJ.object({enable_auth:NJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...hO1(this.config)},AbortSignal.timeout(15000));return NJ.object({agent_id:NJ.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 NJ.object({token:NJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return NJ.object({token:NJ.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 pG8=D(()=>{iG8()});import{createHmac as Fe6,timingSafeEqual as Ue6}from"crypto";import{z as wn}from"zod";function tG8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Fe6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function oG8($,Z){let Q=Buffer.from(JSON.stringify(nG8.parse($))).toString("base64url");return`${Q}.${tG8(Q,Z)}`}function rG8($,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(tG8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Ue6(W,G))return null;try{let K=nG8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+lD)return null;return K.data}catch{return null}}var nG8;var sG8=D(()=>{$N();nG8=wn.object({sessionId:wn.string().uuid(),organizationId:wn.string().min(1).max(256),userId:wn.string().min(1).max(256),threadId:wn.string().min(1).max(256),expiresAt:wn.number().int().positive()})});import{z as uO1}from"zod";function aG8($,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 lO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var lO1;var eG8=D(()=>{lO1=uO1.object({provider:uO1.enum(["elevenlabs","openai"]),model:uO1.string().trim().min(1).max(128)})});import{createHash as Ne6}from"crypto";import{z as jn}from"zod";function En($){return`user.${Ne6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mO1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new $38.Kvm(Kv0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Kv0.StorageType.Memory,ttl:Z38.nanos(lD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(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=aG8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+lD},W=oG8(G,this.deps.secret),K=await this.kv(),H=En(G),F=await K.get(H),U=F?.operation==="PUT"?Wv0.parse(F.json()):null,N=cO1.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 R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let L=await J.createSession({language:Q,model:X.model,safetyIdentifier:En($)});return{token:W,...L,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=rG8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=En(Q),J=await Y.get(X),G=J?.operation==="PUT"?Wv0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,cO1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(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=En(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Wv0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,cO1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(En($));if(Q?.operation==="PUT"&&Wv0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(En($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Kv0,$38,Z38,Wv0,cO1;var Q38=D(()=>{bJ();$N();sG8();eG8();Kv0=C(CK(),1),$38=C(qA(),1),Z38=C(mP(),1),Wv0=jn.object({sessionId:jn.string().uuid(),expiresAt:jn.number(),connected:jn.boolean().optional(),conversation:lO1.optional(),characters:jn.number().int().nonnegative(),requests:jn.number().int().nonnegative()}),cO1=new TextEncoder});function Be6($){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 De6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Y38=()=>{let $=new Z1;return $.use("*",De6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await jG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Be6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var X38=D(()=>{G8();s1();hS0()});import{z as y1}from"zod";function xN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Re6($){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 qe6($,Z,Q){try{return JSON.parse($)}catch{throw new W38(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Me6($){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:qe6(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 Ie6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?NU(Q.function.parameters):NU({type:"object",properties:{}});return[Q.function.name,p$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Ve6($){if(!$)return;return{openai:{response_format:$}}}function ke6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function J38($,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 G38($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Le6=256,Oe6,we6,je6,Ee6,Pe6,ze6,Ae6,Te6,W38,K38,H38;var F38=D(()=>{n4();G8();Kn();oH();Oe6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),we6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),je6=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(we6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Ee6=y1.object({type:y1.literal("text")}),Pe6=y1.object({type:y1.literal("json_object")}),ze6=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()})}),Ae6=y1.union([Ee6,Pe6,ze6]),Te6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(je6),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(Oe6).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:Ae6.optional(),user:y1.string().optional()});W38=class W38 extends Error{constructor($){super($);this.name="MessageConversionError"}};K38=new Z1;K38.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(xN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(xN("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(xN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Te6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(xN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Re6(J.model);if(!G)return $.json(xN("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)=>yz(E.providerId));if(!j)return $.json(xN("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(xN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Me6(J.messages),N=J.tools?Ie6(J.tools):void 0,B=Ve6(J.response_format),L=ke6(),O=Math.floor(Date.now()/1000);if(J.stream)return IL($,async(w)=>{let j=J38(F,U,N,J,B,$.req.raw.signal);try{let E=cd(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=Le6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:G38(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 A(),await w.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=J38(F,U,N,J,B,$.req.raw.signal),j=await AE(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:L,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:G38(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(xN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(xN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(xN(X.message,"server_error"),500)}});H38=K38});function Se6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function U38(){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=g0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!AZ(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||_9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(hA(U)!==J)continue;if(!Se6(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 N38=D(()=>{G8();U3()});var D38;var B38=D(()=>{D38={name:"decocms",version:"4.463.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 ve6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_e6}}var L38,_e6="https://ph.studio.decocms.com",O38;var w38=D(()=>{G8();Ka();Ly();S9();s1();$D1();B38();L38=new Z1;L38.get("/",($)=>{let Z={version:D38.version,theme:DZ$(),...WH().logo&&{logo:WH().logo},...aD()&&{internalUrl:Ct1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:i98(),posthog:ve6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:NF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});O38=L38});function Rg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function dO1($){return(Rg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function j38($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Rg($))}&sz=${Z}`}function be6($,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 E38($){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=be6(`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 A$}from"zod";var xe6,P38;var z38=D(()=>{xe6=A$.object({check_id:A$.string(),title:A$.string(),description:A$.string().optional(),impact:A$.string().optional(),why:A$.string().optional(),category:A$.string(),severity:A$.string(),value_band:A$.string().optional(),value_driver:A$.string().optional(),controllability:A$.string().optional(),pages:A$.array(A$.string()),tasks:A$.array(A$.string()),evidence:A$.string(),sample_scope:A$.string().optional(),sources:A$.array(A$.string())}),P38=A$.object({domain:A$.string(),brand:A$.string(),favicon:A$.string().optional(),scanned_at:A$.string().nullable(),lang:A$.string(),score:A$.number().nullable(),band:A$.string().nullable(),totals:A$.object({measured:A$.number(),registry_total:A$.number(),passed:A$.number(),failed:A$.number(),blocked:A$.number()}),buckets:A$.array(A$.object({id:A$.enum(["critical","important","worth"]),label:A$.string(),items:A$.array(xe6)})),passing:A$.object({count:A$.number(),items:A$.array(A$.object({check_id:A$.string(),title:A$.string()}))}),not_measured:A$.object({count:A$.number(),groups:A$.array(A$.object({reason:A$.string(),label:A$.string(),count:A$.number(),checks:A$.array(A$.string())}))}),categories:A$.array(A$.object({key:A$.string(),label:A$.string(),score:A$.number().nullable(),band:A$.string().nullable(),pass:A$.number(),fail:A$.number()})),screenshots:A$.array(A$.object({url:A$.string(),page_type:A$.string().optional(),viewport:A$.enum(["desktop","mobile"]),image_url:A$.string()}))})});function A38($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Hv0($,Z={}){let Q=await fetch(A38($,"",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 P38.parse(await Q.json())}async function T38($,Z={}){let Q=await fetch(A38($,".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 iO1=D(()=>{z38();WD()});import{join as R38}from"path";async function ye6($){try{let Z=await Hv0($,{signal:AbortSignal.timeout(fe6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||dO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function AG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ge6($,Z){let Q=Rg($),Y=Z?.brand?.trim()||dO1(Q),X=j38(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=E38({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${AG(W)}</title>`,`<meta name="description" content="${AG(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="${AG(W)}" />`,`<meta property="og:description" content="${AG(K)}" />`,`<meta property="og:url" content="${AG(G)}" />`,`<meta property="og:image" content="${AG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${AG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${AG(W)}" />`,`<meta name="twitter:description" content="${AG(K)}" />`,`<meta name="twitter:image" content="${AG(H)}" />`,`<meta name="twitter:image:alt" content="${AG(F)}" />`,`<link rel="canonical" href="${AG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${AG(G)}.md" />`,`<link rel="icon" href="${AG(X)}" sizes="any" />`].join(`
|
|
3732
|
+
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class gO1{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:We6({...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:On.object({session:On.object({id:On.string().min(1)}),transport:On.object({type:On.literal("webrtc"),sdp:On.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var cG8=D(()=>{$N()});var mG8;var dG8=D(()=>{mG8=[{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 hO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:pI$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:mG8.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:lD/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 iG8=D(()=>{$N();dG8()});import{z as NJ}from"zod";import{createHash as Ke6,createHmac as He6}from"crypto";class Gv0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Ke6("sha256").update(JSON.stringify(hO1($))).digest("hex"),this.conversationKey=He6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new Gv0({...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}=NJ.object({agents:NJ.array(NJ.object({agent_id:NJ.string(),name:NJ.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 NJ.object({platform_settings:NJ.object({auth:NJ.object({enable_auth:NJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...hO1(this.config)},AbortSignal.timeout(15000));return NJ.object({agent_id:NJ.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 NJ.object({token:NJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return NJ.object({token:NJ.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 pG8=D(()=>{iG8()});import{createHmac as Fe6,timingSafeEqual as Ue6}from"crypto";import{z as wn}from"zod";function tG8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Fe6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function oG8($,Z){let Q=Buffer.from(JSON.stringify(nG8.parse($))).toString("base64url");return`${Q}.${tG8(Q,Z)}`}function rG8($,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(tG8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Ue6(W,G))return null;try{let K=nG8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+lD)return null;return K.data}catch{return null}}var nG8;var sG8=D(()=>{$N();nG8=wn.object({sessionId:wn.string().uuid(),organizationId:wn.string().min(1).max(256),userId:wn.string().min(1).max(256),threadId:wn.string().min(1).max(256),expiresAt:wn.number().int().positive()})});import{z as uO1}from"zod";function aG8($,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 lO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var lO1;var eG8=D(()=>{lO1=uO1.object({provider:uO1.enum(["elevenlabs","openai"]),model:uO1.string().trim().min(1).max(128)})});import{createHash as Ne6}from"crypto";import{z as jn}from"zod";function En($){return`user.${Ne6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mO1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new R1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new $38.Kvm(Kv0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:Kv0.StorageType.Memory,ttl:Z38.nanos(lD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new R1(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=aG8(this.deps.defaults,Y)}catch{throw new R1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new R1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+lD},W=oG8(G,this.deps.secret),K=await this.kv(),H=En(G),F=await K.get(H),U=F?.operation==="PUT"?Wv0.parse(F.json()):null,N=cO1.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 R1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let L=await J.createSession({language:Q,model:X.model,safetyIdentifier:En($)});return{token:W,...L,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=rG8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new R1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=En(Q),J=await Y.get(X),G=J?.operation==="PUT"?Wv0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new R1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new R1(409,{message:"Voice session already connected"});try{await Y.update(X,cO1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new R1(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=En(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?Wv0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new R1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new R1(429,{message:"Voice session speech limit reached"});try{await J.update(G,cO1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new R1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(En($));if(Q?.operation==="PUT"&&Wv0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(En($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var Kv0,$38,Z38,Wv0,cO1;var Q38=D(()=>{bJ();$N();sG8();eG8();Kv0=C(CK(),1),$38=C(qA(),1),Z38=C(mP(),1),Wv0=jn.object({sessionId:jn.string().uuid(),expiresAt:jn.number(),connected:jn.boolean().optional(),conversation:lO1.optional(),characters:jn.number().int().nonnegative(),requests:jn.number().int().nonnegative()}),cO1=new TextEncoder});function Be6($){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 De6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Y38=()=>{let $=new Z1;return $.use("*",De6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await jG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Be6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var X38=D(()=>{G8();s1();hS0()});import{z as y1}from"zod";function xN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Re6($){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 qe6($,Z,Q){try{return JSON.parse($)}catch{throw new W38(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Me6($){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:qe6(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 Ie6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?NU(Q.function.parameters):NU({type:"object",properties:{}});return[Q.function.name,p$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Ve6($){if(!$)return;return{openai:{response_format:$}}}function ke6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function J38($,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 G38($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Le6=256,Oe6,we6,je6,Ee6,Pe6,ze6,Ae6,Te6,W38,K38,H38;var F38=D(()=>{n4();G8();Kn();oH();Oe6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),we6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),je6=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(we6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),Ee6=y1.object({type:y1.literal("text")}),Pe6=y1.object({type:y1.literal("json_object")}),ze6=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()})}),Ae6=y1.union([Ee6,Pe6,ze6]),Te6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(je6),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(Oe6).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:Ae6.optional(),user:y1.string().optional()});W38=class W38 extends Error{constructor($){super($);this.name="MessageConversionError"}};K38=new Z1;K38.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(xN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(xN("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(xN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Te6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(xN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Re6(J.model);if(!G)return $.json(xN("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)=>yz(E.providerId));if(!j)return $.json(xN("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(xN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Me6(J.messages),N=J.tools?Ie6(J.tools):void 0,B=Ve6(J.response_format),L=ke6(),O=Math.floor(Date.now()/1000);if(J.stream)return IL($,async(w)=>{let j=J38(F,U,N,J,B,$.req.raw.signal);try{let E=cd(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=Le6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:L,object:"chat.completion.chunk",created:O,model:J.model,choices:[{index:0,delta:{},finish_reason:G38(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 A(),await w.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=J38(F,U,N,J,B,$.req.raw.signal),j=await AE(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:L,object:"chat.completion",created:O,model:J.model,choices:[{index:0,message:E,finish_reason:G38(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(xN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(xN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(xN(X.message,"server_error"),500)}});H38=K38});function Se6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function U38(){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=g0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!AZ(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||_9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(hA(U)!==J)continue;if(!Se6(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 N38=D(()=>{G8();U3()});var D38;var B38=D(()=>{D38={name:"decocms",version:"4.463.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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 ve6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??_e6}}var L38,_e6="https://ph.studio.decocms.com",O38;var w38=D(()=>{G8();Ka();Ly();S9();s1();$D1();B38();L38=new Z1;L38.get("/",($)=>{let Z={version:D38.version,theme:DZ$(),...WH().logo&&{logo:WH().logo},...aD()&&{internalUrl:Ct1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:i98(),posthog:ve6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:NF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});O38=L38});function Rg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function dO1($){return(Rg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function j38($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Rg($))}&sz=${Z}`}function be6($,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 E38($){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=be6(`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 A$}from"zod";var xe6,P38;var z38=D(()=>{xe6=A$.object({check_id:A$.string(),title:A$.string(),description:A$.string().optional(),impact:A$.string().optional(),why:A$.string().optional(),category:A$.string(),severity:A$.string(),value_band:A$.string().optional(),value_driver:A$.string().optional(),controllability:A$.string().optional(),pages:A$.array(A$.string()),tasks:A$.array(A$.string()),evidence:A$.string(),sample_scope:A$.string().optional(),sources:A$.array(A$.string())}),P38=A$.object({domain:A$.string(),brand:A$.string(),favicon:A$.string().optional(),scanned_at:A$.string().nullable(),lang:A$.string(),score:A$.number().nullable(),band:A$.string().nullable(),totals:A$.object({measured:A$.number(),registry_total:A$.number(),passed:A$.number(),failed:A$.number(),blocked:A$.number()}),buckets:A$.array(A$.object({id:A$.enum(["critical","important","worth"]),label:A$.string(),items:A$.array(xe6)})),passing:A$.object({count:A$.number(),items:A$.array(A$.object({check_id:A$.string(),title:A$.string()}))}),not_measured:A$.object({count:A$.number(),groups:A$.array(A$.object({reason:A$.string(),label:A$.string(),count:A$.number(),checks:A$.array(A$.string())}))}),categories:A$.array(A$.object({key:A$.string(),label:A$.string(),score:A$.number().nullable(),band:A$.string().nullable(),pass:A$.number(),fail:A$.number()})),screenshots:A$.array(A$.object({url:A$.string(),page_type:A$.string().optional(),viewport:A$.enum(["desktop","mobile"]),image_url:A$.string()}))})});function A38($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function Hv0($,Z={}){let Q=await fetch(A38($,"",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 P38.parse(await Q.json())}async function T38($,Z={}){let Q=await fetch(A38($,".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 iO1=D(()=>{z38();WD()});import{join as R38}from"path";async function ye6($){try{let Z=await Hv0($,{signal:AbortSignal.timeout(fe6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||dO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function AG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function ge6($,Z){let Q=Rg($),Y=Z?.brand?.trim()||dO1(Q),X=j38(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=E38({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${AG(W)}</title>`,`<meta name="description" content="${AG(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="${AG(W)}" />`,`<meta property="og:description" content="${AG(K)}" />`,`<meta property="og:url" content="${AG(G)}" />`,`<meta property="og:image" content="${AG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${AG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${AG(W)}" />`,`<meta name="twitter:description" content="${AG(K)}" />`,`<meta name="twitter:image" content="${AG(H)}" />`,`<meta name="twitter:image:alt" content="${AG(F)}" />`,`<link rel="canonical" href="${AG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${AG(G)}.md" />`,`<link rel="icon" href="${AG(X)}" sizes="any" />`].join(`
|
|
3733
3733
|
`)}function he6($,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}
|
|
3734
3734
|
</head>`)}function q38($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Rg(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(R38($,"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(`${xW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(ue6)}),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=Rg(Q.req.param("file").replace(/\.md$/,""));try{let X=await T38(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(le6)});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=$?R38($,"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 ye6(Rg(Y)),K=ge6(Y,W);return Q.html(he6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var fe6=2500,ue6=1e4,le6=1e4;var M38=D(()=>{G8();WD();iO1();s1()});function Fv0($,Z){return fetch(`${xW({})}${$}`,Z)}async function ce6($,Z){let Q=await Hv0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function de6($){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 me6,kL,I38=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},V38;var k38=D(()=>{G8();D3();WD();iO1();me6=new Set(["complete","errored","terminated","unknown"]);kL=new Z1;kL.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});kL.use("/link-token/*",I38);kL.use("/suggest",I38);kL.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 ce6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});kL.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}=de6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await Fv0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Bj({})}`},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)}});kL.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await Fv0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${Bj({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:me6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});kL.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await Fv0(`/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)}});kL.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await Fv0(`/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:[]})}});V38=kL});var ie6=1048576,pO1;var S38=D(()=>{G8();wK();s1();hB1();pO1=new Z1;pO1.post("/webhook",a5({maxSize:ie6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=O0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!X98(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=J98(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await G98(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as pe6}from"crypto";function oe6($,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 pe6(Buffer.from(X),Buffer.from(Y))}function re6($,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 C38($){let Z=new Z1;return Z.post("/webhook",a5({maxSize:ne6,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(!oe6(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"&&!te6.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 w$0().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=re6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await se6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function se6($,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 wy$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var ne6=5242880,te6;var _38=D(()=>{G8();wK();GG();h7();te6=new Set(["check_suite","issue_comment"])});import{DBOS as tO1,SchedulerMode as ae6}from"@dbos-inc/dbos-sdk";async function $05(){try{return await Z05()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function Z05(){if(!O$0())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (sZ1(),rZ1)),Promise.resolve().then(() => (oZ1(),tZ1))]),Q=await w$0(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=L8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=xq$({sandboxes:J,pools:G,records:await fq$(X,J,G),legacyPools:QR0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await yq$(K,TF0(X,new IX(O0().encryptionKey)),{now:W,orgFsLifetimeMs:JR0}),U=0,N=0,B=0;for(let L of H)try{let O=await Y.pushCredentials(L);U+=O.stored,N+=O.kept}catch(O){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${O instanceof Error?O.message:String(O)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function Q05($,Z){let Q=await tO1.runStep($05,{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 v38(){if(nO1)return;if(!O0().agentSandboxEnabled||!O$0())return;nO1=tO1.registerWorkflow(Q05,{name:"sandboxCredentialPushWorkflow"}),tO1.registerScheduled(nO1,{name:"sandboxCredentialPushWorkflow",crontab:ee6,mode:ae6.ExactlyOncePerIntervalWhenActive})}var ee6="1-59/10 * * * *",nO1=null;var b38=D(()=>{iG();MO();y61();GR0();YR0();GG();s1()});function x38($){let Z=new OL($.db,new IX($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=qx$(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 sQ(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 f38=D(()=>{G8();MO();OY1();VE();h60()});import{DBOS as RP,SchedulerMode as Y05}from"@dbos-inc/dbos-sdk";function y38($){rO1=$}function aO1(){if(!rO1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return rO1}function eO1(){let $=aO1();return new OL($.db,new IX($.encryptionKey))}async function K05($){try{let Z=await eO1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await dH(aO1().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 sQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${J05}m"`,W=0,K;for(let H=0;H<G05;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await mU1(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 H05($,Z){let Q=await RP.runStep(()=>eO1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>RP.runStep(()=>K05(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 F05($,Z){try{let Q=await eO1().getById($);if(!Q?.enabled)return"disabled";let Y=await dH(aO1().db,Q.organizationId);if(!Y)return"disabled";let X=await mU1(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 U05($,Z){await RP.sleep(cS0()+W05),await RP.runStep(()=>F05($,Z),{name:"settleJiraMove"})}async function g38($,Z){if(!sO1)throw Error("[jira-trigger] settle workflow is not registered");await RP.startWorkflow(sO1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function h38(){if(oO1)return;sO1=RP.registerWorkflow(U05,{name:"jiraSettleWorkflow"}),oO1=RP.registerWorkflow(H05,{name:"jiraTriggerSweepWorkflow"}),RP.registerScheduled(oO1,{name:"jiraTriggerSweepWorkflow",crontab:X05,mode:Y05.ExactlyOncePerIntervalWhenActive})}var X05="*/5 * * * *",J05=20,G05=5,W05=5000,rO1=null,sO1=null,oO1=null;var $w1=D(()=>{MO();h60();Yi();VE();lU1();mS0()});function u38($){let Z=new OL($.db,new IX($.encryptionKey));async function Q(X,J){let G=j$8(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await g38(W.id,G)}let Y=new Z1;return Y.post("/webhook/:secret",a5({maxSize:N05}),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 N05=1048576;var l38=D(()=>{G8();wK();MO();$w1();mS0();h60()});function c38($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var m38,B05,D05,d38;var i38=D(()=>{G8();bJ();Ni();Em();m38=new Z1,B05=["range","if-none-match","if-modified-since"],D05=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];m38.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(gp($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new R1(401,{message:"Authentication required"})}if(!Q)throw new R1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new R1(400,{message:"Missing file key"});let X=await n80(Y,Z);if(!X)throw new R1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&gW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new R1(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 c38(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of B05){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 R1(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 R1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of D05){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),c38(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});d38=m38});var g50=b((qg)=>{var L05=qg&&qg.__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]}),O05=qg&&qg.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))L05(Z,$,Q)};Object.defineProperty(qg,"__esModule",{value:!0});O05(SG(),qg)});var t38=b((p38)=>{Object.defineProperty(p38,"__esModule",{value:!0});p38.version=void 0;p38.version="3.4.0"});var s38=b((fN)=>{var w05=fN&&fN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(fN,"__esModule",{value:!0});fN.NodeTransport=fN.VERSION=void 0;fN.nodeResolveHost=T05;var e5=g50(),j05=M0("net"),Zw1=M0("tls"),E05=M0("path"),o38=M0("fs"),P05=w05(M0("dns")),z05=t38();fN.VERSION=z05.version;var A05="nats.js";class r38{socket;version;lang;yields=[];signal=(0,e5.deferred)();closedNotification=(0,e5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=A05,this.version=fN.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,e5.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 e5.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 e5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new e5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,e5.deferred)(),Q,Y=(0,j05.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,e5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=e5.DataBuffer.concat(...this.yields),X=(0,e5.extractProtocolMessage)(Y);if(X!=="")try{let J=e5.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,e5.deferred)();try{if($=(0,E05.resolve)($),!(0,o38.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,o38.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,e5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new e5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,e5.deferred)();try{let X=(0,Zw1.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 e5.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,e5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new e5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,e5.deferred)();try{let Y=(0,Zw1.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 e5.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,e5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,e5.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 Zw1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,e5.render)($)}`);let Z=(0,e5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,e5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,e5.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}}fN.NodeTransport=r38;function T05($){let Z=(0,e5.deferred)();return P05.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 QW8=b((ZW8)=>{Object.defineProperty(ZW8,"__esModule",{value:!0});ZW8.connect=R05;var a38=s38(),e38=g50(),$W8=g50();function R05($={}){if((0,$W8.hasWsProtocol)($))return Promise.reject($W8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,e38.setTransportFactory)({factory:()=>{return new a38.NodeTransport},dnsResolveFn:a38.nodeResolveHost}),e38.NatsConnectionImpl.connect($)}});var YW8=b((SL)=>{var M05=SL&&SL.__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]}),I05=SL&&SL.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))M05(Z,$,Q)};Object.defineProperty(SL,"__esModule",{value:!0});SL.connect=void 0;var V05=QW8();Object.defineProperty(SL,"connect",{enumerable:!0,get:function(){return V05.connect}});I05(g50(),SL)});function WW8($){let Z=$?.connectFn??_05,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 L=0;while(!J)try{Q=await Z({servers:N,timeout:C05,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${L} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{L++;let O=O7(S05,k05,L-1,2,0.5);await U$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let L=B?.creds?XW8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,L).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=GW8.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 _05($){return JW8.connect($)}var XW8,JW8,GW8,k05=100,S05=3000,C05=3000;var KW8=D(()=>{r$();XW8=C(mP(),1),JW8=C(YW8(),1),GW8=C(CK(),1)});function Uv0($){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 Nv0($,Z){return`${$}.${Z}`}class Qw1{cache;constructor($){this.cache=Uv0({ttlMs:$?.ttlMs??v05,maxSize:$?.maxSize??b05})}async get($,Z){return this.cache.get(Nv0($,Z))??null}async set($,Z,Q){this.cache.set(Nv0($,Z),Q)}async invalidate($,Z){this.cache.delete(Nv0($,Z)),this.cache.delete(Nv0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var v05=600000,b05=5000;var HW8=()=>{};function Bv0($,Z){return`${$}:${Z}`}function Yw1($){let Z=Uv0({ttlMs:$?.ttlMs??x05,maxSize:$?.maxSize??f05}),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(FW8,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(Bv0(K,H))},set(K,H,F){Z.set(Bv0(K,H),F)},invalidate(K,H){Z.delete(Bv0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(FW8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(Bv0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var FW8="studio.ai-provider-keys.invalidate",x05=30000,f05=5000;var UW8=()=>{};class Xw1{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 NW8=($)=>{let Z;return()=>Z??=$()},Jw1,Gw1;var BW8=D(()=>{S6();Jw1=NW8(()=>Q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),Gw1=NW8(()=>Q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function m05($=OW8){return{name:FN,subjects:[`${nJ1}.>`],storage:HF.StorageType.File,max_age:h05,max_bytes:l05,max_msgs_per_subject:c05,discard:HF.DiscardPolicy.Old,retention:HF.RetentionPolicy.Limits,duplicate_window:u05,num_replicas:$}}class wW8{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 DW8($){let Z=LW8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function n05($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,g05().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 t05($,Z){return $.info?.cluster?Z:1}function o05($){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 Ww1{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=m05(X);try{await Y.streams.info(FN),await Y.streams.update(FN,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(FN,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(FN),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await HF.jetstreamManager($),X=t05($,OW8);try{await Z(Y,X)}catch(J){if(X<=1||!o05(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:Ti});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=n05(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=ju$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=oJ1(H,{runId:Z}),N=performance.now()-F;Jw1().record(N),Gw1().add(1,{"org.id":Y??"unknown"}),p05?.record(N,U.reduce((B,L)=>B+L.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?DW8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:L}=await H.read();if(B)break;if(K(L),U++,++F>=64)F=0,await new Promise((O)=>setImmediate(O))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),i05)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 E8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:DW8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Ti}),!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=oJ1(Z,{runId:$,dedup:Q});Jw1().record(performance.now()-X),Gw1().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=wu$({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"?HF.DeliverPolicy.New:HF.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=yE($),W;try{W=await E8(async()=>{return(await Y.consumers.get(FN,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Ti})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=BI0({messages:async function*(){try{for await(let O of W)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(HI0()).pipeThrough(FI0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,L=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",L,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:w,value:j}=await F.read();if(w){L(),O.close();return}let E=j;if(E.kind==="done"){if(J){L(),O.close();return}continue}O.enqueue(E.chunk);return}},cancel(){L()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(FN,{filter:yE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var HF,LW8,y05=($)=>{let Z;return()=>Z??=$()},g05,h05=86400000000000,u05=120000000000,l05=4294967296,OW8,c05=500000,d05,i05,p05;var jW8=D(()=>{r$();rJ1();DI0();UI0();S6();BW8();HF=C(CK(),1),LW8=C(mP(),1),g05=y05(()=>Q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),OW8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);d05=process.env.STREAM_ENCODE_TRACE==="1",i05=process.env.DECOPILOT_STREAM_TRACE==="1";p05=d05?new wW8:null});function Dv0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,bF(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 EW8=D(()=>{p8()});class Kw1{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 r05($,Z,Q={}){let Y=$.startsWith("thread:")?gH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function Hw1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await eU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await DE($,{threadId:X,runBranch:G?.branch}),K=await A10($,Q,v61(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=r05(W,await MR0($,X),{flat:gf(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 V3(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 PW8=D(()=>{G7();rY();h7()});async function zW8($,Z,Q){let Y=Z.organizationId;if(!GJ(Z))return!1;if(!Fy(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=gU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await Q5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),w8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var AW8=D(()=>{P4();eQ();Ji();iH();T9()});function Y15($){return $ instanceof nX}function TW8($,Z){return Z-$>=Z15}class Fw1{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??s05;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??e05,Q=this.options.itemIntervalMs??a05,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()-FY1),bX1);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()-Q15));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 CX1(this.taskBoard,X,Y),await _X1(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!==$$.progress||GJ(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await Hw1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!TW8(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:$$.progress,to:$$.review,reason:H}}).catch(()=>{}),w8(J,F),await pH(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!==$$.progress||G.assigneeId!==R8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await nH(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),Y15(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()+$15)).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!==$$.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(()=>{}),w8(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(!TW8(zD(Q,Z.reviewCycleStartedAt),Date.now()))return;await pH($,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(!GJ(Y))return!1;let X=Y.assigneeId===R8,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 Hw1(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 Ki(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 zW8(G,Y,W))return!0;if(await Gl$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!IX1(W))return!1;return await Gi(G,Y,{previewMatchesHead:VX1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await vE($,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 s05=60000,a05=300000,e05=50,$15=60000,Z15=900000,Q15=120000;var RW8=D(()=>{P4();wM0();PW8();KN();J40();iH();AW8();T9();iW();xX1();h7();A80();Wi()});import{readdir as X15,rm as Lv0}from"fs/promises";import{join as Ov0}from"path";async function wv0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-J15),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Mg($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await qW8($,X,Z);else if(!X.startsWith(".")){let J=Ov0($,X),G=await Mg(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await qW8(J,K,Z)}if((await Mg(J)).length===0)await Lv0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function qW8($,Z,Q){let Y=0,X=Ov0($,Z),J=await Mg(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=Ov0(X,W),H=await Mg(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=Ov0(K,U);await Lv0(B,{recursive:!0,force:!0}),Y++}}if((await Mg(K)).length===0)await Lv0(K,{recursive:!0,force:!0})}if((await Mg(X)).length===0)await Lv0(X,{recursive:!0,force:!0});return Y}async function Mg($){try{return(await X15($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var J15=30;var Uw1=()=>{};import{DBOS as Nw1,SchedulerMode as G15}from"@dbos-inc/dbos-sdk";async function K15(){let $=[TK(),xg(),mN()],Z=0;for(let Q of $)try{Z+=await wv0(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 H15($,Z){await Nw1.runStep(()=>K15(),{name:"monitoringRetention"})}function IW8(){if(MW8)return;MW8=!0;let $=Nw1.registerWorkflow(H15,{name:"monitoringRetentionWorkflow"});Nw1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:W15,mode:G15.ExactlyOncePerIntervalWhenActive})}var W15="23 4 * * *",MW8=!1;var VW8=D(()=>{n3();Uw1()});function kW8($){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 aQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await xA($.db,Z,Y.role);return X.boundAuth=CB1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new j2(Q,void 0,X.boundAuth,Y.role,"self"),_E(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var SW8=D(()=>{OW();fU()});function F15(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function U15(){return{services:F15(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function B15(){for(let $ of N15)$()}function CW8($){let Z=[...Bw1.logs,$];Bw1={...Bw1,logs:Z.length>500?Z.slice(-500):Z},B15()}function Dw1(){return D15}var Bw1,N15,D15=!1;var Lw1=D(()=>{Bw1=U15(),N15=new Set});import{EventEmitter as L15}from"events";var Ow1;var _W8=D(()=>{Lw1();Ow1=new L15;Ow1.on("request",($)=>{CW8($)})});function vW8(){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=Pn(N.params.name),L=N.params.arguments||{},O=Object.keys(L).map((j)=>Pn(j)),w=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";J=`${K9.tool}${B}${K9.dim}(${w})${K9.reset}`}else if(N.method)J=`${K9.dim}${Pn(N.method)}${K9.reset}`}}catch{}}let W=Pn(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${K9.mcp}${Pn(F.slice(0,12))}\u2026${K9.reset}`}else if(X==="/mcp")W=`${K9.mcp}/mcp${K9.reset}`;else if(X==="/mcp/registry")W=`${K9.mcp}/mcp/registry${K9.reset}`;let K=w15(Y),H=G?"\u25C0":"\u2190";if(!Dw1())console.log(`${K9.dim}${H}${K9.reset} ${K}${Y}${K9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=O15(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,L=G?"\u25B6":"\u2192";if(!Dw1())console.log(`${K9.dim}${L}${K9.reset} ${K}${Y}${K9.reset} ${W}${J?` ${J}`:""} ${N}${U}${K9.reset} ${K9.duration}${B}${K9.reset}`);Ow1.emit("request",{method:Y,path:Pn(X),status:U,duration:F,timestamp:new Date})}}}var K9,O15=($)=>{if($>=500)return K9.serverError;if($>=400)return K9.clientError;if($>=300)return K9.redirect;return K9.ok},w15=($)=>{return K9[$]||K9.reset},Pn=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var bW8=D(()=>{Lw1();_W8();K9={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 gW8}from"crypto";import{mkdir as j15,readdir as E15,rm as xW8,stat as hW8}from"fs/promises";import{join as jw1,relative as P15}from"path";import{z as Y8}from"zod";function lW8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return jw1(z15,Z)}function cW8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function ww1($,Z){let Q=lW8($),Y=cW8(Z);return jw1(Q,Y)}function A15($,Z,Q,Y){let X=O0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return gW8("sha256",X).update(J).digest("hex")}function yW8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=A15(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${cW8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function mW8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${gW8("md5","etag").update(Y).digest("hex")}"`}async function dW8($,Z,Q,Y,X){try{let J=await E15($,{withFileTypes:!0});for(let G of J){let W=jw1($,G.name),H=P15(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 dW8(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 hW8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:mW8(W,F.mtime,F.size)})}catch{}}}}catch{}}function iW8($,Z){let Y=X0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Y8.object({prefix:Y8.string().optional(),maxKeys:Y8.number().optional().default(1000),continuationToken:Y8.string().optional(),delimiter:Y8.string().optional()}),outputSchema:Y8.object({objects:Y8.array(Y8.object({key:Y8.string(),size:Y8.number(),lastModified:Y8.string(),etag:Y8.string()})),nextContinuationToken:Y8.string().optional(),isTruncated:Y8.boolean(),commonPrefixes:Y8.array(Y8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=lW8(Y);await j15(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await dW8(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),L=N+W<U.objects.length,O=L?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:L,nextContinuationToken:O,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Y8.object({key:Y8.string()}),outputSchema:Y8.object({contentType:Y8.string().optional(),contentLength:Y8.number(),lastModified:Y8.string(),etag:Y8.string(),metadata:Y8.record(Y8.string(),Y8.string()).optional()}),handler:async(X)=>{let J=X,G=ww1(Y,J.key),W=await hW8(G);return{contentType:_D1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:mW8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Y8.object({key:Y8.string(),expiresIn:Y8.number().optional()}),outputSchema:Y8.object({url:Y8.string(),expiresIn:Y8.number()}),handler:async(X)=>{let J=X,G=UL(J.expiresIn,fW8);return{url:yW8(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:Y8.object({key:Y8.string(),expiresIn:Y8.number().optional(),contentType:Y8.string().optional()}),outputSchema:Y8.object({url:Y8.string(),expiresIn:Y8.number()}),handler:async(X)=>{let J=X,G=UL(J.expiresIn,fW8);return{url:yW8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Y8.object({key:Y8.string()}),outputSchema:Y8.object({success:Y8.boolean(),key:Y8.string()}),handler:async(X)=>{let J=X,G=ww1(Y,J.key);try{return await xW8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Y8.object({keys:Y8.array(Y8.string()).max(1000)}),outputSchema:Y8.object({deleted:Y8.array(Y8.string()),errors:Y8.array(Y8.object({key:Y8.string(),message:Y8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=ww1(Y,K);try{await xW8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function Ew1($,Z,Q){let Y=iW8(Z,Q),X=new Tw({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:yZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:Y8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Y8.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 v3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),WK(X,J,$,"mcp:dev-assets")}async function pW8($,Z,Q,Y){let J=iW8(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 z15="./data/assets",fW8=3600,uW8,nW8;var tW8=D(()=>{s1();Ci();G8();MG0();Si();CJ();NL();J_0();uW8=new Z1;uW8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return Ew1($.req.raw,Z,Y)});nW8=uW8});var oW8={};Q6(oW8,{mountDevRoutes:()=>T15});function T15($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return Ew1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await pW8(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",nW8);let Q=new Z1;Q.use("*",WF({mountPath:"/api/dev-assets"})),Q.route("/",X_0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var rW8=D(()=>{G8();qD1();J_0();tW8()});var GK8={};Q6(GK8,{watchHandler:()=>JK8,resolveCorsOrigin:()=>YK8,isSsoExemptPath:()=>ZK8,isAllowedOAuthRedirectUri:()=>XK8,createApp:()=>v15});import{readFileSync as R15}from"fs";import{PrometheusSerializer as q15}from"@opentelemetry/exporter-prometheus";import{DBOS as CL}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as V15,oAuthProtectedResourceMetadata as k15}from"better-auth/plugins";async function M15($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,aW8(sW8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),aW8(sW8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function aW8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function ZK8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${mC0}/`)||$.startsWith(`${yC0}/`)}function QK8($){return $==="local.studio.decocms.com"}function YK8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(QK8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function XK8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||QK8($.hostname)}async function v15($={}){let Z=$.database??L8(),Q=!1;x6.stop().catch((J0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",J0)});let Y,X,J,G,W=new Qw1,K,H,F,U=null;if($.disableNats)K=Yw1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new D40,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(J0)=>{return(async()=>{let K0=J0.getReader();try{while(!0){let{done:A0}=await K0.read();if(A0)break}}catch{}finally{K0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=WW8();let J0=O0().natsCredsPath,K0;if(J0)try{K0=R15(J0,"utf8")}catch(H8){console.error(`[app] failed to read NATS_CREDS at ${J0}; connecting anonymously`,H8)}U.init(O0().natsUrls,K0?{creds:K0}:void 0);let A0=H81()?new p$1({getJetStream:()=>U.getJetStream()}):null;A0?.init().catch(()=>{}),Y=A0;let T0=new I81({getJetStream:()=>U.getJetStream()});T0.init().catch(()=>{}),X=T0;let H1=new Ny(zX1,{getJetStream:()=>U.getJetStream()}),c$=new Ny(T80,{getJetStream:()=>U.getJetStream()});H1.init().catch(()=>{}),c$.init().catch(()=>{}),J={reads:H1,cards:c$};let t$=new R31({getJetStream:()=>U.getJetStream()});t$.init().catch(()=>{}),G=t$,K=Yw1({getConnection:()=>U.getConnection()}),H=new Xw1({getConnection:()=>U.getConnection()}),F=new Ww1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),M98(U),U.onReady(()=>{A0?.init().catch((H8)=>{console.error("[McpListCache] Deferred init failed:",H8)}),T0.init().catch((H8)=>{console.error("[SkillCatalogCache] Deferred init failed:",H8)}),H1.init().catch((H8)=>{console.error("[PrReadCache] Deferred init failed:",H8)}),c$.init().catch((H8)=>{console.error("[PrCardCache] Deferred init failed:",H8)}),t$.init().catch((H8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",H8)}),K.start(),iD$(()=>U.getConnection()),F.init().catch((H8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",H8)})})}if(qP)await qP();n$1(Y),k81(X),C81(()=>U?.getConnection()??null),AX1(J),q31(G);let B={storage:new zu(Z.db),sseHub:x6,onThreadFinished:async(J0,K0)=>Fi(new I3(Z.db),J0,K0,new dG(Z.db))},L=new wJ1(B),O=new f60(Z.db),w=new Kw1(O);w.start(),Xl$(H),H.start((J0)=>{eM0(J0),L.execute({type:"CANCEL",taskId:J0}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",K0)})}).catch((J0)=>{console.error("[Decopilot] CancelBroadcast start failed:",J0)}),U?.onReady(()=>{H.start().catch((J0)=>{console.error("[CancelBroadcast] Deferred start failed:",J0)})});let j=()=>U?.getConnection()??null;ED1(j),U?.onReady(()=>ED1(j)),JW1(j),U?.onReady(()=>JW1(j)),F.init().catch((J0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",J0)}),qP=async()=>{await L.stopAll(),L.dispose(),w.dispose(),H.stop().catch(()=>{}),tZ8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),pD$(),G.teardown(),n$1(null),k81(null),C81(null),AX1(null),q31(null)};let E=new Z1;if(E.use("*",z31({enabled:(J0)=>yp(J0,"debug")==="1"})),E.use("*",hv0),E.use("/*",z98({origin:(J0,K0)=>YK8(J0,{baseUrl:O0().baseUrl,requestOrigin:new URL(K0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(J0,K0)=>{if(await K0(),J0.req.path.includes("/files/"))return;if(J0.req.path.includes("/fs/")&&J0.req.path.endsWith("/read"))return;J0.header("X-Frame-Options","DENY"),J0.header("Content-Security-Policy","frame-ancestors 'none'")}),!O0().noTui)E.use("*",vW8());E.use("*",async(J0,K0)=>{if(await K0(),Sn(J0.req.path))return;if(J0.res.status>=500){let T0=await J0.res.clone().text();console.error(`[5xx Response] ${J0.req.method} ${J0.req.path} - ${J0.res.status}:`,T0)}}),E.get(DX.HEALTH,(J0)=>{if(Q)return J0.json({status:"shutting_down"},503);return J0.json({status:"ok"})}),E.get(DX.HEALTH_LIVE,(J0)=>{return J0.json({status:"ok"})}),E.get(DX.HEALTH_READY,async(J0)=>{if(Q)return J0.json({status:"shutting_down"},503);let K0={};if(K0.postgres={status:await M15(Z.pool)?"up":"down"},U)K0.nats=U.isConnected()?{status:"up"}:{status:"down"};else K0.nats={status:"down"};let A0=K0.postgres.status==="up",T0=A0?200:503;return J0.json({status:A0?"ready":"not_ready",services:K0},T0)}),E.get(DX.METRICS,async(J0)=>{try{let K0=await mv0.collect(),A0=I15.serialize(K0.resourceMetrics);return J0.text(A0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(K0){return console.error("Failed to collect metrics:",K0),J0.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${DX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(J0)=>{let K0=J0.req.param("queueName");if(!S15.has(K0))return J0.json({error:`Unknown queue: ${K0}`},404);let[A0,T0]=await Promise.all([CL.listQueuedWorkflows({queueName:K0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),CL.listQueuedWorkflows({queueName:K0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return J0.json({queue_length:A0.length,in_flight:T0.length})}),E.route("/api/config",O38),E.route("/api/_reports",V38),E.route("/api/_stripe",pO1),E.route("/api/_github",C38({taskBoard:()=>i,contextFactory:()=>y})),E.route("/api/_git",ip);let T={db:Z.db,encryptionKey:O0().encryptionKey};E.route("/api/_jira",u38(T)),E.route("/api/_jira",x38(T)),E.route("/report",q38($.clientDir)),E.route("/api/auth/custom",p98),E.route("/api/auth/desktop",r98),E.all("/api/auth/admin/*",xZ8),E.all("/api/auth/*",async(J0)=>{return await x8.handler(J0.req.raw)});let z=o68();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",r60),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",r60),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",b60),E.route("/",$58()),E.use("/oauth-proxy/:connectionId/*",r60),E.all("/oauth-proxy/:connectionId/*",eW8);let A=async(J0)=>{let A0=await C15()(J0.req.raw),T0=await A0.json();return Response.json(T0,A0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",r60),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(J0)=>{let A0=await _15()(J0.req.raw),T0=await A0.json();return Response.json(T0,A0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let f=T98({ttlMs:120000}),_=await t58({db:Z.db,auth:x8,encryption:{key:O0().encryptionKey},observability:{tracer:hL,meter:Q$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});aQ.set(_),Pt1({db:Z.db,baseUrl:m5()}),o58({db:Z.db}),e58({db:Z.db}),W98({db:Z.db}),y38({db:Z.db,encryptionKey:O0().encryptionKey}),Vf$({db:Z.db}),B98({db:Z.db}),Yy$({db:Z.db});let V=BJ0(Z.db),g=new Fs(Z.db),y=kW8({db:Z.db});w31({storage:V,studioContextFactory:y}),HG1({systemDatabaseUrl:Da0(O0().databaseUrl,O0().databasePgSsl),studioContextFactory:y,deps:{runRegistry:L,cancelBroadcast:H,streamBuffer:F,sseHub:x6}}),QG1({dispatchRunFn:Fu$,studioContextFactory:y,deps:{runRegistry:L,cancelBroadcast:H,streamBuffer:F,sseHub:x6}});let l=new zu(Z.db),i=new I3(Z.db),n=new dG(Z.db),U0=new Fw1(i,y,n);if(O0().taskBoardReviewSweeperEnabled){U0.start();let J0=qP;qP=async()=>{await J0?.(),U0.dispose()}}Cu$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let J0=U?.getConnection();return J0?await $K8.jetstreamManager(J0):null},messageParts:l.messageParts(),resolveRun:async(J0)=>{let K0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",J0).executeTakeFirst();return K0?{orgId:K0.organization_id,createdBy:K0.created_by,version:K0.message_storage_version??1,status:K0.status,runFenceToken:K0.run_fence_token,title:K0.title??null}:null},completeRunIfNotCompleted:async(J0,K0)=>{let A0=await l.completeRunIfNotCompleted(J0,K0);if(Dv0(x6,K0,J0,A0),A0)await Fi(i,J0,K0,n);return A0},markRunRequiresAction:async(J0,K0)=>{let A0=await l.requiresActionIfInProgress(J0,K0);return Dv0(x6,K0,J0,A0),A0},markRunFailed:async(J0,K0,A0,T0)=>{let H1=await l.markRunFailed(J0,K0,A0,T0);if(Dv0(x6,K0,J0,H1),H1)await Fi(i,J0,K0,n);return H1},clearSynthesizedError:async(J0,K0)=>{await l.messageParts().replaceMessageParts(J0,fE(J0,K0),[])},persistTitle:(J0,K0,A0)=>l.update(J0,K0,{title:A0}),onTitleUpdated:async({runId:J0,orgId:K0,title:A0})=>{let T0=await l.get(J0,K0).catch(()=>null);x6.emit(K0,bF(J0,T0?.status??"in_progress",{title:A0,virtualMcpId:T0?.virtual_mcp_id??void 0,createdBy:T0?.created_by,triggerId:T0?.trigger_id,branch:T0?.branch??null,harnessId:T0?.harness_id??void 0,createdAt:T0?.created_at,updatedAt:T0?.updated_at}))},bumpProgress:async({runId:J0,orgId:K0})=>{await l.bumpProgress(J0,K0)},recordCompleted:async({runId:J0,orgId:K0,distinctId:A0,usage:T0})=>{f1.capture({distinctId:A0,event:"chat_message_completed",groups:{organization:K0},properties:{organization_id:K0,thread_id:J0,transport:"projector",input_tokens:T0.inputTokens,output_tokens:T0.outputTokens,total_tokens:T0.totalTokens}})},recordFailed:async({runId:J0,orgId:K0,distinctId:A0,reason:T0,kind:H1})=>{f1.capture({distinctId:A0,event:"chat_message_failed",groups:{organization:K0},properties:{organization_id:K0,thread_id:J0,transport:"projector",error_category:H1,error_message:T0}})},purgeRun:async(J0)=>{F.purge(J0)}}),fh$({studioContextFactory:y,systemDatabaseUrl:Da0(O0().databaseUrl,O0().databasePgSsl),streamBuffer:F}),IW8(),zt1(),s58(),Z98(),H98(),h38(),vf$(),L98(),Xy$(),v38();let v0=async(J0,K0,A0)=>{let T0=await V.findById(J0,K0);if(!T0)throw Error("Automation not found");return P31({automationId:T0.id,organizationId:T0.organization_id,triggerId:null})},G0=new mp(V,({automation:J0,trigger:K0,contextMessages:A0,idempotencyKey:T0})=>B40({automationId:J0.id,organizationId:J0.organization_id,triggerId:K0.id,contextMessages:A0},{idempotencyKey:T0})),N0=[TK(),xg(),mN()];for(let J0 of N0)wv0(J0).then(()=>{}).catch((K0)=>console.error("[monitoring] Retention cleanup failed:",K0));let o=()=>x8.api.deleteAllExpiredApiKeys().catch((J0)=>console.error("[auth] Expired API key cleanup failed:",J0));o(),setInterval(o,86400000).unref(),E.use("*",async(J0,K0)=>{if(yv0(J0.req.path))return K0();let A0={measure:async(H1,c$)=>{GK(J0,H1);try{return await c$()}finally{b3(J0,H1)}}},T0=await aQ.create(J0.req.raw,{timings:A0});T0.automationRunner=v0,J0.set("studioContext",T0);try{await K0()}finally{let H1=T0.pendingRevalidations;if(H1.length>0)Promise.race([Promise.allSettled(H1),U$(30000)]).catch((t$)=>console.error("[studio] revalidation cleanup error:",t$))}}),E.use("/api/:org/decopilot/*",hp),E.use("/api/:org/v1/*",hp),E.use("/api/:org/files/*",hp),E.use("*",async(J0,K0)=>{if(ZK8(J0.req.path))return K0();let A0=J0.get("studioContext");if(!A0?.organization?.id||!A0?.auth?.user?.id)return K0();if(!(await A0.storage.orgSsoConfig.getByOrgId(A0.organization.id))?.enforced)return K0();if(!await A0.storage.orgSsoSessions.isValid(A0.auth.user.id,A0.organization.id))return J0.json({error:"SSO authentication required for this organization"},403);return K0()});let e=new Z1;e.use("*",WF({mountPath:"/api/org-sso"})),e.route("/",pC0()),E.route("/api/org-sso",e),E.get("/api/tools/management",(J0)=>{return J0.json({tools:Os,grouped:w2()})}),E.use("/mcp/*",async(J0,K0)=>{GK(J0,"mcp");try{return await K0()}finally{b3(J0,"mcp")}});let Q0=async(J0,K0)=>{let A0=J0.var.studioContext;if(!A0.auth.user?.id&&!A0.auth.apiKey?.id){let T0=new URL(J0.req.url),H1=J0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),c$=H1?`${H1}://${T0.host}`:T0.origin;return J0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${c$}${T0.pathname}/.well-known/oauth-protected-resource"`}})}return await K0()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),gW()){let{mountDevRoutes:J0}=(rW8(),qv0(oW8));J0(E,Q0)}let $0=new Z1;$0.use("*",WF({mountPath:"/mcp"})),$0.route("/",iI0()),E.route("/mcp",$0);let Y0=new Z1;Y0.use("*",WF({mountPath:"/mcp/self"})),Y0.route("/",f_0()),E.route("/mcp/self",Y0);let h0=new Z1;h0.use("*",WF({mountPath:"/mcp"})),h0.route("/",tI0()),E.route("/mcp",h0),E.use("/api/:org/models/*",async(J0,K0)=>{GK(J0,"llm_models");try{return await K0()}finally{b3(J0,"llm_models")}});let V0=Z78({cancelBroadcast:H,streamBuffer:F,runRegistry:L});E.route("/api",V0),E.route("/api",d38);let G1=new Z1;G1.use("*",WF({mountPath:"/api"})),G1.route("/",u_0()),E.route("/api",G1),E.route("/api",H38);let c0=new Z1;c0.use("*",WF({mountPath:"/api"})),c0.route("/",l_0({tokenStorage:g,automationEventDispatcher:G0})),E.route("/api",c0);let w0=new Ns(Z.db),E0=new Z1;E0.use("*",WF({mountPath:"/api"})),E0.route("/",aC0()),E.route("/api",E0),E.route("/api/deco-sites",O78()),E.route("/api/deco-apps",Y38());let n0=new Z1;n0.use("*",WF({mountPath:"/api/deco-sites"})),n0.route("/",$_0()),E.route("/api/deco-sites",n0),E.route(mC0,fZ8()),E.route(tX8,sX8()),E.route("/api/_editor-resolve",U38()),E.route($Z8,ZZ8()),E.route(yC0,OZ8());let N1=O0(),o0=N1.elevenlabsApiKey?new Gv0({apiKey:N1.elevenlabsApiKey,model:N1.elevenlabsVoiceModel,conversationModel:N1.elevenlabsConversationModel,voiceId:N1.elevenlabsVoiceId}):null,_0={openai:N1.openaiLiveApiKey?new gO1({apiKey:N1.openaiLiveApiKey,voice:N1.openaiLiveVoice}):null,elevenlabs:o0?new yO1(o0,()=>U?.getConnection()??null):null},d0=new mO1({adapter:o0,conversationAdapters:_0,defaults:N1,secret:N1.studioJwtSecret??N1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),i0=xG8({voiceSessions:d0,kvStorage:w0,runRegistry:L,streamBuffer:F,sseHub:x6,cancelBroadcast:H,tokenStorage:g,automationEventDispatcher:G0,mountDevAssets:gW(),mcpAuth:Q0,oauthProxyHandler:eW8,watchHandler:JK8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",i0),E.notFound((J0)=>{return J0.json({error:"Not Found",path:J0.req.path},404)}),E.onError(Y78),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([x6.stop(),qP?Promise.resolve(qP()).finally(()=>{qP=null}):Promise.resolve()]),U)await U.drain().catch((J0)=>console.error("[shutdown] NATS drain error:",J0));console.log("[shutdown] Flushing telemetry..."),await DJ().catch((J0)=>console.error("[shutdown] Telemetry flush error:",J0)),console.log("[shutdown] Closing database..."),await SQ$(Z).catch((J0)=>console.error("[shutdown] Database close error:",J0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await CL.registerQueue(p3,{partitionQueue:!0,concurrency:D31,minPollingIntervalMs:L31}),await CL.registerQueue(i3,{partitionQueue:!0,concurrency:WG1,priorityEnabled:!0}),await CL.registerQueue(lN,{workerConcurrency:O0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await CL.registerQueue(cN,{workerConcurrency:O0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await CL.registerQueue(gL,{partitionQueue:!0,concurrency:xh$}),await CL.registerQueue(SP,Qy$),await MD1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((J0)=>CL.deleteQueue(J0))),await O31(Z.pool),sJ$().catch((J0)=>{console.error("[studio-pack-backfill] failed:",J0)}),At1().catch((J0)=>{console.error("[org-fs] public-sets boot sync kick failed:",J0)})}})}var $K8,sW8=5000,qP=null,eW8=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 aQ.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 g=await $.req.json().catch(()=>({}));return $.json({...typeof g==="object"&&g!==null?g:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await vp(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 x60(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),L;if(Y==="authorize")L=B.authorization_endpoint;else if(Y==="token")L=B.token_endpoint;else if(Y==="register")L=B.registration_endpoint;if(!L)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let O=e68(L);if(O)return O;let w=new URL(L),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let g=w.searchParams.get("redirect_uri");if(g){let y=O0().baseUrl??j.origin;try{if(!XK8(new URL(g),y))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",g)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(w98(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"},P=$.req.header("Content-Type");if(P)E["Content-Type"]=P;let T=$.req.header("Authorization");if(T)E.Authorization=T;let z,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&P?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let n=atob(T.slice(6).trim()),U0=n.indexOf(":");if(U0!==-1){let v0=decodeURIComponent(n.slice(0,U0)),G0=decodeURIComponent(n.slice(U0+1));A=v0||null,q=G0||null}}catch{}let g=await $.req.formData();if(g.has("resource"))g.set("resource",U);let y=g.get("client_id"),l=g.get("client_secret");if(typeof y==="string"&&y)A=y;if(typeof l==="string"&&l)q=l;let i=new URLSearchParams;for(let[n,U0]of g.entries())i.append(n,U0.toString());z=i.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let g=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),y=await $.req.text(),l={};try{l=y?JSON.parse(y):{}}catch{z=y}let i=typeof l==="object"&&l!==null&&!Array.isArray(l);if(z===void 0&&!i)z=y;if(z===void 0){let n=l,U0=n.metadata&&typeof n.metadata==="object"?n.metadata:{};n.metadata={...U0,organization_id:G.organization_id,...g?.slug?{organization_slug:g.slug}:{},...g?.name?{organization_name:g.name}:{}},z=JSON.stringify(n),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let f=await fetch(w.toString(),{method:$.req.method,headers:E,body:z,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[g,y]of f.headers.entries())if(!V.includes(g.toLowerCase()))_.set(g,y);if(Y==="token"&&f.ok){let g=await f.text();try{let y=JSON.parse(g);if(typeof y.access_token==="string"&&y.access_token){let l=typeof y.expires_in==="number"?new Date(Date.now()+y.expires_in*1000):null,i=null;try{i=await bp(G.connection_url)??L}catch{i=L}let n={connectionId:Z,accessToken:y.access_token,refreshToken:typeof y.refresh_token==="string"?y.refresh_token:null,scope:typeof y.scope==="string"?y.scope:null,expiresAt:l,clientId:A,clientSecret:q,tokenEndpoint:i};await new j9(X.db,X.vault).upsert(n)}}catch(y){console.error("[oauth-proxy] failed to persist downstream token:",y)}return new Response(g,{status:f.status,statusText:f.statusText,headers:_})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:_})},JK8=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&&(!GN(Y)||!await WN(Z)))return $.json({error:"forbidden"},403);let W=G?ZM0:Y;if(G)oD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return IL($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!x6.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(()=>{x6.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),x6.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),x6.remove(W,K),N()})})})},I15,S15,C15=()=>k15(x8),_15=()=>V15(x8);var WK8=D(()=>{r$();s1();Tt1();a58();Q98();F98();z40();XX1();O98();A80();S9();Em();p8();G8();vC0();A98();A31();D3();fU();nB1();iG();S6();$6();$D1();s98();QZ8();wZ8();GD1();yZ8();LD1();TD1();RD1();MH();LC0();qD1();X78();xC0();fG8();lG8();cG8();pG8();Q38();kD1();X38();pI0();L40();F38();oI0();GO1();N38();XO1();w38();M38();k38();S38();_38();b38();f38();l38();$w1();bD1();i38();JO1();$O1();$90();KW8();dX();kH0();SH0();RX1();v00();x00();I31();HW8();UW8();PD1();jW8();mM0();EW8();no();Ls();tD();T9();BB1();RW8();VW8();s30();Uw1();n3();ID1();nD();$G1();s30();KI0();bt0();xt0();SW8();Nw();bW8();Kn();nB1();Qi();zi();$I0();$K8=C(CK(),1);I15=new q15,S15=new Set([p3,i3,lN,cN,gL,SP])});var UK8={};Q6(UK8,{resolveClientDir:()=>u15,resolveAssetPathWithTraversalCheck:()=>FK8,isPathWithinDirectory:()=>HK8,createAssetHandler:()=>l15});import{resolve as h50,dirname as b15,join as x15,extname as f15,basename as y15,sep as KK8}from"path";function g15($,Z){if($===Z||y15($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${KK8}assets${KK8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function HK8($,Z){let Q=h50(Z),Y=h50($);return Y===Q||Y.startsWith(Q+"/")}function FK8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=h50(Z,Q);if(!HK8(Y,Z))return null;return Y}function u15($,Z="../client"){let Q=new URL($),Y=b15(Q.pathname);return h50(Y,Z)}function l15($={}){let{env:Z="production",clientDir:Q=h15,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=FK8({requestPath:W,clientDir:Q});if(!K)return null;let H=x15(K,"index.html"),F=h50(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(f15(K))?[H,F]:[];for(let L of[K,...B])try{let O=Bun.file(L);if(await O.exists())return new Response(O,{headers:g15(L,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var h15="./dist/client";var NK8=()=>{};var BK8={};Q6(BK8,{tryUpgradePreviewWs:()=>t15,tryHandlePreviewHttp:()=>n15,previewWebSocketHandler:()=>o15,parsePreviewBaseDomain:()=>p15,isPreviewWsData:()=>jv0,extractHandleFromHost:()=>Pw1});function d15($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function i15(){return new Response(m15,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function p15($){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 Pw1($,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 n15($,Z){let Q=Pw1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return l50(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Ud)&&d15($))return i15();return X.headers.delete(Ud),X}function l50($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function jv0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function t15($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=Pw1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return l50(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return l50(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return l50(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 l50(426,"upgrade failed");return}function u50($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var c15=256,m15='<!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>',o15;var DK8=D(()=>{G$0();o15={open($){let Z=$.data;if(!jv0(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)}`),u50($,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)=>{u50($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{u50($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!jv0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=c15){u50($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!jv0(Z))return;u50($,Z,1000,"")}}});var jK8={};Q6(jK8,{printBanner:()=>s15,bannerLines:()=>wK8,BANNER_LINES:()=>LK8,BANNER_GRADIENT:()=>OK8});function r15($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function wK8($){let Z=LK8.map((Q,Y)=>{let[X,J,G]=r15(OK8[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 s15($){console.log("");for(let Z of wK8($))console.log(Z);console.log("")}var LK8,OK8;var EK8=D(()=>{LK8=[" \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 "],OK8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});r$();var vw1="13";function bw1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:vw1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}r$();import yK8 from"pg";var xw1=8314027461559302n,gK8=600000,hK8=500;async function fw1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=gK8}=$,X=$.log??((K)=>console.log(K)),J=new yK8.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",[xw1.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 U$(hK8)}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)",[xw1.toString()])}catch{}await J.end().catch(()=>{})}}s1();kv0();S6();function yH8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function pv0($,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 Ej1(){let $=yH8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:pv0($,"--cpu-prof-dir")??process.cwd(),name:pv0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(pv0($,"--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.'}))}ov0();var Y90;function Vj1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=vP();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(()=>{}),Y90=setInterval(()=>void Z().catch(()=>{}),$),Y90.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(Y90)clearInterval(Y90)}}import*as uH8 from"bun:jsc";var{startSamplingProfiler:lH8,samplingProfilerStackTraces:cH8}=uH8;function kj1(){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{lH8()}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=cH8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((L)=>L.sourceURL&&!/Unknown Executable/.test(L.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 Sj1(){Ej1();let $=[Vj1(),Ij1(),kj1()];return()=>{for(let Z of $)Z()}}import{existsSync as J$5}from"fs";var TG=O0();Oj1();var{DBOS:c50,DBOSClient:a15}=await import("@dbos-inc/dbos-sdk");function Mw1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var e15=[p3,i3,lN,cN,gL,SP],$$5=TG.dispatchRole==="worker"?e15:TG.dispatchRole==="api"?[]:void 0;c50.setConfig(bw1({systemDatabaseUrl:Mw1(TG.databaseUrl,TG.databasePgSsl),poolSize:TG.dbosPoolSize,executorID:TG.podName,listenQueues:$$5}));var{createApp:Z$5}=await Promise.resolve().then(() => (WK8(),GK8)),{isServerPath:Q$5}=await Promise.resolve().then(() => ($90(),ew1)),{createAssetHandler:Y$5,resolveClientDir:RK8}=await Promise.resolve().then(() => (NK8(),UK8)),X$5=TG.port,PK8=RK8(import.meta.url,"../client"),qK8=J$5(PK8)?PK8:RK8(import.meta.url,"../dist/client"),G$5=Y$5({clientDir:qK8,isServerPath:Q$5}),W$5={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function K$5($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(W$5))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:H$5,tryHandlePreviewHttp:F$5,tryUpgradePreviewWs:U$5,previewWebSocketHandler:zw1,isPreviewWsData:Aw1}=await Promise.resolve().then(() => (DK8(),BK8)),{getOrInitSharedRunner:MK8}=await Promise.resolve().then(() => (GG(),tM$)),IK8=H$5(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),zK8={baseDomain:IK8??"",getRunner:MK8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())MK8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var Ev0=await Z$5({clientDir:qK8}),Tw1=process.env.DBOS_CONDUCTOR_KEY?.trim(),AK8=process.env.DBOS_CONDUCTOR_URL?.trim();await fw1({databaseUrl:Mw1(TG.databaseUrl,TG.databasePgSsl)},()=>c50.launch({...Tw1?{conductorKey:Tw1}:{},...Tw1&&AK8?{conductorURL:AK8}:{}}));console.log(`[dbos] application version: ${c50.applicationVersion}`);var Rw1=5,qw1=0;await E8(async()=>{qw1++;try{return await Ev0.initDbos()}catch($){let Z=qw1>=Rw1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${qw1}/${Rw1} failed, ${Z}`,$),$}},{maxAttempts:Rw1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!TG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (EK8(),jK8));console.log("");for(let Z of $())console.log(Z)}var N$5=Bun.serve({idleTimeout:0,port:X$5,hostname:"0.0.0.0",fetch:async($,Z)=>{if(IK8){let Y=await U$5($,Z,zK8);if(Y===void 0)return;if(Y)return Y;let X=await F$5($,zK8);if(X)return X}let Q=await G$5($);if(Q)return K$5(Q);return Ev0.fetch($,{server:Z})},websocket:{open($){if(Aw1($.data))zw1.open($)},message($,Z){if(Aw1($.data))zw1.message($,Z)},close($){if(Aw1($.data))zw1.close($)}},development:!1}),B$5=Sj1();if(TG.localMode)Promise.resolve().then(() => (Ly(),yM0)).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(() => (Ly(),yM0));Z()}catch{}});var TK8=!1;async function D$5($){let Z;try{Z=await a15.create({systemDatabaseUrl:Mw1(TG.databaseUrl,TG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:i3,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:i3}),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 Pv0($){if(TK8)return;TK8=!0,console.log(`
|
|
3735
3735
|
[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{B$5(),Ev0.markShuttingDown();let J=gw1(TG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await U$(J),await N$5.stop(!0);let G=c50.executorID;await c50.shutdown(),await D$5(G),await Ev0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>Pv0("SIGTERM"));process.on("SIGINT",()=>Pv0("SIGINT"));process.on("SIGHUP",()=>Pv0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),Pv0("uncaughtException")});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as s,M as u}from"./index-LBqA-ZwS.js";import{C as f}from"./index-_Sxk3cnc.js";import{a as x}from"./thread-route-BcHLmvou.js";import{u as g}from"./use-task-metadata-DdniinOi.js";import{AppViewContent as h}from"./project-app-view-eDaYLCna.js";import"./use-mobile-D86gQiqH.js";import"./thread-button-CbH7XjU-.js";import"./agent-icon-B_AZohhm.js";import"./AlertCircle-DWiDp-f1.js";import"./Tool01-BrjR3c4R.js";import"./ArrowUp-BuOxK3Pf.js";import"./ArrowLeft-BMW9utAL.js";import"./LinkBroken01-CaB2I9G0.js";import"./ShoppingBag01-DUKvQNmb.js";import"./ZoomOut-DGJt2ZOH.js";import"./Building02-Dyi9ronc.js";import"./CheckCircle-YnBoZGaI.js";import"./Check-CXicUAOa.js";import"./ChevronUp-DBFnJWSs.js";import"./UserSquare-DdE8MrwD.js";import"./Copy01-Dr3v4gYp.js";import"./CreditCard01-C2A37qQR.js";import"./DotsVertical-OvfvRPcf.js";import"./Image01-nUj6_DO-.js";import"./Palette-DA_Dzon5.js";import"./XClose-BCVhz-Kf.js";import"./Key01-HuTENYPy.js";import"./Link01-cjx77r4E.js";import"./LinkExternal01-CSoQ_DGP.js";import"./Monitor01-D19plyaf.js";import"./Sun-Dl2R87Eo.js";import"./Plus-CuK8nNcu.js";import"./SearchMd-24zvxDRs.js";import"./Trash01-CuaXxM5C.js";import"./Upload01-DrihoScl.js";import"./User01-BDAGl75t.js";import"./Users01-BjhYFiAu.js";import"./X-Dv9AnRlg.js";import"./use-chat-layout-state-D_r1YjBG.js";import"./use-file-configs-HSDXp3dR.js";import"./use-organization-settings-BB1edQnb.js";import"./schema-BuM44BeJ.js";import"./task-board-Cs1-7PpN.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-FaJ2R6On.js";import"./use-project-scope-CJdExTjB.js";import"./repository-binding-D1nnAWYo.js";import"./use-mcp-client-DEGTm1W0.js";import"./auth-DDpWnpgU.js";import"./thread-intent-B1ICFt86.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-AzJgkdm-.js";import"./tooltip-BwTRkM37.js";import"./index-C3kLhdFk.js";import"./toolbar-icon-button-Daq-5ocJ.js";import"./shell-layout-CSJSyeoD.js";import"./avatar-Ctu5Wczb.js";import"./download-app-dialog-Do4LLhVR.js";import"./dialog-BaUTSxMN.js";import"./use-clock-tick-Ce_NiOa_.js";import"./command-__KQqh6Y.js";import"./index-BMDxYXCC.js";import"./integration-icon-DBB4e_3T.js";import"./project-icon-RPHlWMLn.js";import"./new-project-dialog-GBb33kNc.js";import"./input-B5aqwsZt.js";import"./label-B_gun1QM.js";import"./repository-import-picker-DRqtS9NW.js";import"./use-navigate-to-agent-C1uAfvXQ.js";import"./repository-picker-Dg10f9--.js";import"./useInfiniteQuery-fv1BKri9.js";import"./infiniteQueryObserver-BOfNlSlD.js";import"./collection-search-Ca5RdqHn.js";import"./use-debounced-value-TVa8ke9i.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-CfNBeMt4.js";import"./autosend-xivc0lOT.js";import"./use-org-sso-Dvki5yin.js";import"./resizable-BrB6X38q.js";import"./icon-button-BBOHlA6G.js";import"./gateway-client-BvHlKdmu.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-DGilpnId.js";import"./sandbox-lifecycle-context-B1Nt4uWC.js";import"./use-session-runtime-Ciro8eXk.js";import"./chat-context-BOhnLSkM.js";import"./use-decopilot-events-ByD6TF3m.js";import"./use-ai-providers-B1J7ouSE.js";import"./use-chat-navigation-NXmBPBJ5.js";import"./location-zK0I9Ia6.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-CKBkqc3B.js";import"./types-6q3fiU58.js";import"./task-route-m4lCwB0h.js";import"./core.esm-Bm8Mdq22.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-CMe2Cke9.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-CX1qK1yv.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-CqRixoL5.js";import"./authenticate-and-persist-oauth-BnkSFHoe.js";import"./mcp-oauth-HStEMAmd.js";import"./track-pLWJ-wXy.js";import"./extract-connection-data-BKPLoQfG.js";import"./connection-B_CnJB72.js";const $=u("/shell/$org/org-shell/agent-shell/projects/$agentId/apps/$connectionId/$toolName");function j(){const t=c.c(9),{connectionId:o,toolName:r}=$.useParams(),l=x(),i=g(l);let p;t[0]!==o||t[1]!==i?.expanded_tools||t[2]!==r?(p=i?.expanded_tools?.find(a=>a.appId===o&&a.toolName===r),t[0]=o,t[1]=i?.expanded_tools,t[2]=r,t[3]=p):p=t[3];const d=p,e=`${o}:${r}`,n=d?.args;let m;return t[4]!==o||t[5]!==e||t[6]!==n||t[7]!==r?(m=s.jsx(h,{connectionId:o,toolName:r,args:n},e),t[4]=o,t[5]=e,t[6]=n,t[7]=r,t[8]=m):m=t[8],m}function _o(){const t=c.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(f.Content,{children:s.jsx(j,{})}),t[0]=o):o=t[0],o}export{_o as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as e,aS as b,u as g}from"./index-LBqA-ZwS.js";import{C as j}from"./index-_Sxk3cnc.js";import{F as v,H as S}from"./file-share-button-CAJ6q_i3.js";import{u as k,b as y,e as _}from"./use-org-fs-BK-5u4MR.js";import{S as w}from"./settings-tab-B-9vMsZ9.js";import{b as M}from"./thread-route-BcHLmvou.js";import"./use-mobile-D86gQiqH.js";import"./thread-button-CbH7XjU-.js";import"./agent-icon-B_AZohhm.js";import"./AlertCircle-DWiDp-f1.js";import"./Tool01-BrjR3c4R.js";import"./ArrowUp-BuOxK3Pf.js";import"./ArrowLeft-BMW9utAL.js";import"./LinkBroken01-CaB2I9G0.js";import"./ShoppingBag01-DUKvQNmb.js";import"./ZoomOut-DGJt2ZOH.js";import"./Building02-Dyi9ronc.js";import"./CheckCircle-YnBoZGaI.js";import"./Check-CXicUAOa.js";import"./ChevronUp-DBFnJWSs.js";import"./UserSquare-DdE8MrwD.js";import"./Copy01-Dr3v4gYp.js";import"./CreditCard01-C2A37qQR.js";import"./DotsVertical-OvfvRPcf.js";import"./Image01-nUj6_DO-.js";import"./Palette-DA_Dzon5.js";import"./XClose-BCVhz-Kf.js";import"./Key01-HuTENYPy.js";import"./Link01-cjx77r4E.js";import"./LinkExternal01-CSoQ_DGP.js";import"./Monitor01-D19plyaf.js";import"./Sun-Dl2R87Eo.js";import"./Plus-CuK8nNcu.js";import"./SearchMd-24zvxDRs.js";import"./Trash01-CuaXxM5C.js";import"./Upload01-DrihoScl.js";import"./User01-BDAGl75t.js";import"./Users01-BjhYFiAu.js";import"./X-Dv9AnRlg.js";import"./use-chat-layout-state-D_r1YjBG.js";import"./use-file-configs-HSDXp3dR.js";import"./use-organization-settings-BB1edQnb.js";import"./schema-BuM44BeJ.js";import"./task-board-Cs1-7PpN.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-FaJ2R6On.js";import"./use-project-scope-CJdExTjB.js";import"./repository-binding-D1nnAWYo.js";import"./use-mcp-client-DEGTm1W0.js";import"./auth-DDpWnpgU.js";import"./thread-intent-B1ICFt86.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-AzJgkdm-.js";import"./tooltip-BwTRkM37.js";import"./index-C3kLhdFk.js";import"./toolbar-icon-button-Daq-5ocJ.js";import"./shell-layout-CSJSyeoD.js";import"./avatar-Ctu5Wczb.js";import"./download-app-dialog-Do4LLhVR.js";import"./dialog-BaUTSxMN.js";import"./use-clock-tick-Ce_NiOa_.js";import"./command-__KQqh6Y.js";import"./index-BMDxYXCC.js";import"./integration-icon-DBB4e_3T.js";import"./project-icon-RPHlWMLn.js";import"./new-project-dialog-GBb33kNc.js";import"./input-B5aqwsZt.js";import"./label-B_gun1QM.js";import"./repository-import-picker-DRqtS9NW.js";import"./use-navigate-to-agent-C1uAfvXQ.js";import"./repository-picker-Dg10f9--.js";import"./useInfiniteQuery-fv1BKri9.js";import"./infiniteQueryObserver-BOfNlSlD.js";import"./collection-search-Ca5RdqHn.js";import"./use-debounced-value-TVa8ke9i.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-CfNBeMt4.js";import"./autosend-xivc0lOT.js";import"./use-org-sso-Dvki5yin.js";import"./resizable-BrB6X38q.js";import"./icon-button-BBOHlA6G.js";import"./popover-CeeSO9_9.js";import"./extract-connection-data-BKPLoQfG.js";import"./metadata-D72DunRR.js";import"./connection-B_CnJB72.js";import"./chat-context-BOhnLSkM.js";import"./use-decopilot-events-ByD6TF3m.js";import"./use-ai-providers-B1J7ouSE.js";import"./use-chat-navigation-NXmBPBJ5.js";import"./location-zK0I9Ia6.js";import"./build-improve-prompt-doc-mQFDIfqK.js";import"./empty-state-C3ObDFbb.js";import"./use-date-fns-locale-CncfJZ-Y.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-D9TU1G8g.js";import"./mcp-oauth-HStEMAmd.js";import"./alert-dialog-DNPqbgpS.js";import"./textarea-CJdXmj_-.js";import"./use-debounced-autosave-V9REzK1K.js";import"./add-connection-dialog-D8GNVhEw.js";import"./connection-card-COXkS8Eb.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-B9dwTNY5.js";import"./form-CX1qK1yv.js";import"./select-imMlkJoM.js";import"./connection-form-helpers-CmM6esb0.js";import"./authenticate-and-persist-oauth-BnkSFHoe.js";import"./collection-tabs-DvLdBj3Z.js";import"./badge-BHUGKNWs.js";import"./use-infinite-scroll-Di73ngUh.js";import"./useSuspenseInfiniteQuery-BRIV-VAB.js";import"./file-type-icon-BslTQPeb.js";import"./checkbox-B6iJHz55.js";import"./search-input-DNCPqRQn.js";import"./use-mcp-auth-status-DKj9l4Q_.js";import"./types-6q3fiU58.js";import"./use-mcp-tools-DGilpnId.js";import"./use-mcp-prompts-CZuYjuRv.js";import"./utils-CVEq3hMx.js";import"./switch-xoTVq7WM.js";import"./scroll-area-CwucKMgJ.js";import"./optimistic-project-sidebar-views-D6hnV0TB.js";import"./virtual-mcp-BnTPAygc.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-CPcltp8E.js";import"./use-secrets-BLWrq5Zi.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function P(i){const t=c.c(5),{label:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p=e.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=p):p=t[0];let o;t[1]!==r?(o=r&&e.jsx("p",{className:"text-xs text-muted-foreground",children:r}),t[1]=r,t[2]=o):o=t[2];let m;return t[3]!==o?(m=e.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[p,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p={refetchIntervalWhenAbsent:2e3},t[0]=p):p=t[0];const o=k(x,r,p),m=y(x)(r);if(o.isPending||!o.data){const h=!o.isPending&&!o.data?"Waiting for the deck to sync…":void 0;let l;return t[1]!==h?(l=e.jsx(P,{label:h}),t[1]=h,t[2]=l):l=t[2],l}let s;t[3]!==o.data?(s=_(o.data),t[3]=o.data,t[4]=s):s=t[4];const f=o.data.shareMode??"private",u=o.data.effectivePublic??!1,d=window.location.origin+m;let a;t[5]!==r||t[6]!==f||t[7]!==u||t[8]!==d?(a=e.jsx(v,{volume:x,path:r,shareMode:f,effectivePublic:u,url:d}),t[5]=r,t[6]=f,t[7]=u,t[8]=d,t[9]=a):a=t[9];let n;return t[10]!==r||t[11]!==m||t[12]!==s||t[13]!==a?(n=e.jsx(S,{readUrl:m,marker:s,title:r,savePath:r,trailing:a}),t[10]=r,t[11]=m,t[12]=s,t[13]=a,t[14]=n):n=t[14],n}function C(){const i=c.c(4);let t;i[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},i[0]=t):t=i[0];const r=g(t),p=M(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==p?(m=o?e.jsx(D,{path:o},o):e.jsx(w,{virtualMcpId:p}),i[1]=o,i[2]=p,i[3]=m):m=i[3],m}function Yo(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(j.Content,{children:e.jsx(C,{})}),i[0]=t):t=i[0],t}export{Yo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as s,j as e}from"./index-LBqA-ZwS.js";import{C as a}from"./index-_Sxk3cnc.js";import{L as n}from"./library-tab-BR0DXbhB.js";import{u as c}from"./use-ensure-project-folder-AK-c3A_w.js";import{u}from"./use-project-scope-CJdExTjB.js";import{p as l}from"./location-zK0I9Ia6.js";import"./use-mobile-D86gQiqH.js";import"./thread-button-CbH7XjU-.js";import"./agent-icon-B_AZohhm.js";import"./AlertCircle-DWiDp-f1.js";import"./Tool01-BrjR3c4R.js";import"./ArrowUp-BuOxK3Pf.js";import"./ArrowLeft-BMW9utAL.js";import"./LinkBroken01-CaB2I9G0.js";import"./ShoppingBag01-DUKvQNmb.js";import"./ZoomOut-DGJt2ZOH.js";import"./Building02-Dyi9ronc.js";import"./CheckCircle-YnBoZGaI.js";import"./Check-CXicUAOa.js";import"./ChevronUp-DBFnJWSs.js";import"./UserSquare-DdE8MrwD.js";import"./Copy01-Dr3v4gYp.js";import"./CreditCard01-C2A37qQR.js";import"./DotsVertical-OvfvRPcf.js";import"./Image01-nUj6_DO-.js";import"./Palette-DA_Dzon5.js";import"./XClose-BCVhz-Kf.js";import"./Key01-HuTENYPy.js";import"./Link01-cjx77r4E.js";import"./LinkExternal01-CSoQ_DGP.js";import"./Monitor01-D19plyaf.js";import"./Sun-Dl2R87Eo.js";import"./Plus-CuK8nNcu.js";import"./SearchMd-24zvxDRs.js";import"./Trash01-CuaXxM5C.js";import"./Upload01-DrihoScl.js";import"./User01-BDAGl75t.js";import"./Users01-BjhYFiAu.js";import"./X-Dv9AnRlg.js";import"./use-chat-layout-state-D_r1YjBG.js";import"./use-file-configs-HSDXp3dR.js";import"./use-organization-settings-BB1edQnb.js";import"./schema-BuM44BeJ.js";import"./task-board-Cs1-7PpN.js";import"./site-slug-DebpOoQq.js";import"./thread-route-BcHLmvou.js";import"./use-panel-navigate-FaJ2R6On.js";import"./thread-intent-B1ICFt86.js";import"./use-mcp-client-DEGTm1W0.js";import"./auth-DDpWnpgU.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-AzJgkdm-.js";import"./tooltip-BwTRkM37.js";import"./index-C3kLhdFk.js";import"./toolbar-icon-button-Daq-5ocJ.js";import"./shell-layout-CSJSyeoD.js";import"./avatar-Ctu5Wczb.js";import"./download-app-dialog-Do4LLhVR.js";import"./dialog-BaUTSxMN.js";import"./use-clock-tick-Ce_NiOa_.js";import"./command-__KQqh6Y.js";import"./index-BMDxYXCC.js";import"./integration-icon-DBB4e_3T.js";import"./project-icon-RPHlWMLn.js";import"./new-project-dialog-GBb33kNc.js";import"./input-B5aqwsZt.js";import"./label-B_gun1QM.js";import"./repository-import-picker-DRqtS9NW.js";import"./use-navigate-to-agent-C1uAfvXQ.js";import"./repository-binding-D1nnAWYo.js";import"./repository-picker-Dg10f9--.js";import"./useInfiniteQuery-fv1BKri9.js";import"./infiniteQueryObserver-BOfNlSlD.js";import"./collection-search-Ca5RdqHn.js";import"./use-debounced-value-TVa8ke9i.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-CfNBeMt4.js";import"./autosend-xivc0lOT.js";import"./use-org-sso-Dvki5yin.js";import"./resizable-BrB6X38q.js";import"./icon-button-BBOHlA6G.js";import"./search-toggle-QfO4rJO-.js";import"./alert-dialog-DNPqbgpS.js";import"./use-chat-navigation-NXmBPBJ5.js";import"./use-org-fs-BK-5u4MR.js";import"./use-org-repo-syncs-DCT7Auvn.js";import"./textarea-CJdXmj_-.js";import"./markdown-U5k2vy3J.js";import"./org-file-open-context-BtoXgtv0.js";import"./file-share-button-CAJ6q_i3.js";import"./popover-CeeSO9_9.js";import"./preview-dialog-9biwdpbK.js";import"./preview-content-CIoLsvsV.js";import"./file-preview-DKsb5sxq.js";import"./utils-CVtWzP8U.js";import"./editor-ByUsSScY.js";import"./file-type-icon-BslTQPeb.js";import"./folder-icon-DI8RbZE8.js";import"./skill-md-ChfVs4uF.js";import"./empty-state-BLBbHDRF.js";import"./view-mode-toggle-C6y0Ak_X.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-MT321DSd.js";import"./use-members-nuYKaBVx.js";import"./use-org-auth-client-Ctvz1VPK.js";function lo(){const t=s.c(6),{project:o}=u();c(o);const m=o?.id??"pending";let r;t[0]!==o?(r=o?l(o):void 0,t[0]=o,t[1]=r):r=t[1];const p=o?.title??void 0;let i;return t[2]!==m||t[3]!==r||t[4]!==p?(i=e.jsx(a.Content,{children:e.jsx(n,{root:r,rootLabel:p},m)}),t[2]=m,t[3]=r,t[4]=p,t[5]=i):i=t[5],i}export{lo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as a,j as e,u as n}from"./index-LBqA-ZwS.js";import{C as c}from"./index-_Sxk3cnc.js";import{L as l}from"./preview-panel-DAYrsAZ_.js";import{a as u}from"./use-panel-navigate-FaJ2R6On.js";import{S as f}from"./settings-tab-B-9vMsZ9.js";import{b as h}from"./thread-route-BcHLmvou.js";import"./use-mobile-D86gQiqH.js";import"./thread-button-CbH7XjU-.js";import"./agent-icon-B_AZohhm.js";import"./AlertCircle-DWiDp-f1.js";import"./Tool01-BrjR3c4R.js";import"./ArrowUp-BuOxK3Pf.js";import"./ArrowLeft-BMW9utAL.js";import"./LinkBroken01-CaB2I9G0.js";import"./ShoppingBag01-DUKvQNmb.js";import"./ZoomOut-DGJt2ZOH.js";import"./Building02-Dyi9ronc.js";import"./CheckCircle-YnBoZGaI.js";import"./Check-CXicUAOa.js";import"./ChevronUp-DBFnJWSs.js";import"./UserSquare-DdE8MrwD.js";import"./Copy01-Dr3v4gYp.js";import"./CreditCard01-C2A37qQR.js";import"./DotsVertical-OvfvRPcf.js";import"./Image01-nUj6_DO-.js";import"./Palette-DA_Dzon5.js";import"./XClose-BCVhz-Kf.js";import"./Key01-HuTENYPy.js";import"./Link01-cjx77r4E.js";import"./LinkExternal01-CSoQ_DGP.js";import"./Monitor01-D19plyaf.js";import"./Sun-Dl2R87Eo.js";import"./Plus-CuK8nNcu.js";import"./SearchMd-24zvxDRs.js";import"./Trash01-CuaXxM5C.js";import"./Upload01-DrihoScl.js";import"./User01-BDAGl75t.js";import"./Users01-BjhYFiAu.js";import"./X-Dv9AnRlg.js";import"./use-chat-layout-state-D_r1YjBG.js";import"./use-file-configs-HSDXp3dR.js";import"./use-organization-settings-BB1edQnb.js";import"./schema-BuM44BeJ.js";import"./task-board-Cs1-7PpN.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-B1ICFt86.js";import"./use-mcp-client-DEGTm1W0.js";import"./auth-DDpWnpgU.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-CJdExTjB.js";import"./repository-binding-D1nnAWYo.js";import"./sheet-AzJgkdm-.js";import"./tooltip-BwTRkM37.js";import"./index-C3kLhdFk.js";import"./toolbar-icon-button-Daq-5ocJ.js";import"./shell-layout-CSJSyeoD.js";import"./avatar-Ctu5Wczb.js";import"./download-app-dialog-Do4LLhVR.js";import"./dialog-BaUTSxMN.js";import"./use-clock-tick-Ce_NiOa_.js";import"./command-__KQqh6Y.js";import"./index-BMDxYXCC.js";import"./integration-icon-DBB4e_3T.js";import"./project-icon-RPHlWMLn.js";import"./new-project-dialog-GBb33kNc.js";import"./input-B5aqwsZt.js";import"./label-B_gun1QM.js";import"./repository-import-picker-DRqtS9NW.js";import"./use-navigate-to-agent-C1uAfvXQ.js";import"./repository-picker-Dg10f9--.js";import"./useInfiniteQuery-fv1BKri9.js";import"./infiniteQueryObserver-BOfNlSlD.js";import"./collection-search-Ca5RdqHn.js";import"./use-debounced-value-TVa8ke9i.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-CfNBeMt4.js";import"./autosend-xivc0lOT.js";import"./use-org-sso-Dvki5yin.js";import"./resizable-BrB6X38q.js";import"./icon-button-BBOHlA6G.js";import"./preview-content-CIoLsvsV.js";import"./file-share-button-CAJ6q_i3.js";import"./use-org-fs-BK-5u4MR.js";import"./popover-CeeSO9_9.js";import"./file-preview-DKsb5sxq.js";import"./utils-CVtWzP8U.js";import"./editor-ByUsSScY.js";import"./file-type-icon-BslTQPeb.js";import"./markdown-U5k2vy3J.js";import"./location-zK0I9Ia6.js";import"./org-file-open-context-BtoXgtv0.js";import"./extract-connection-data-BKPLoQfG.js";import"./metadata-D72DunRR.js";import"./connection-B_CnJB72.js";import"./chat-context-BOhnLSkM.js";import"./use-decopilot-events-ByD6TF3m.js";import"./use-ai-providers-B1J7ouSE.js";import"./use-chat-navigation-NXmBPBJ5.js";import"./build-improve-prompt-doc-mQFDIfqK.js";import"./empty-state-C3ObDFbb.js";import"./use-date-fns-locale-CncfJZ-Y.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-D9TU1G8g.js";import"./mcp-oauth-HStEMAmd.js";import"./alert-dialog-DNPqbgpS.js";import"./textarea-CJdXmj_-.js";import"./use-debounced-autosave-V9REzK1K.js";import"./add-connection-dialog-D8GNVhEw.js";import"./connection-card-COXkS8Eb.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-B9dwTNY5.js";import"./form-CX1qK1yv.js";import"./select-imMlkJoM.js";import"./connection-form-helpers-CmM6esb0.js";import"./authenticate-and-persist-oauth-BnkSFHoe.js";import"./collection-tabs-DvLdBj3Z.js";import"./badge-BHUGKNWs.js";import"./use-infinite-scroll-Di73ngUh.js";import"./useSuspenseInfiniteQuery-BRIV-VAB.js";import"./checkbox-B6iJHz55.js";import"./search-input-DNCPqRQn.js";import"./use-mcp-auth-status-DKj9l4Q_.js";import"./types-6q3fiU58.js";import"./use-mcp-tools-DGilpnId.js";import"./use-mcp-prompts-CZuYjuRv.js";import"./utils-CVEq3hMx.js";import"./switch-xoTVq7WM.js";import"./scroll-area-CwucKMgJ.js";import"./optimistic-project-sidebar-views-D6hnV0TB.js";import"./virtual-mcp-BnTPAygc.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-CPcltp8E.js";import"./use-secrets-BLWrq5Zi.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=a.c(5),{path:m}=r,{closePanel:p}=u();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let s;return t[2]!==i||t[3]!==m?(s=e.jsx(l,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=s):s=t[4],s}function x(){const r=a.c(4);let t;r[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},r[0]=t):t=r[0];const m=n(t),p=h(),o="path"in m&&typeof m.path=="string"?m.path:void 0;let i;return r[1]!==o||r[2]!==p?(i=o?e.jsx(b,{path:o},o):e.jsx(f,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Jr(){const r=a.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(c.Content,{children:e.jsx(x,{})}),r[0]=t):t=r[0],t}export{Jr as default};
|