decocms 4.462.1 → 4.462.2
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-BQdX39pt.js → AlertCircle-BOqaZFXA.js} +1 -1
- package/dist/client/assets/{AreaChart-DGA1ooZj.js → AreaChart-BVBZ_mBW.js} +1 -1
- package/dist/client/assets/{ArrowLeft-6EbZWTcH.js → ArrowLeft-BsFMaTJ5.js} +1 -1
- package/dist/client/assets/{ArrowUp-2XhoOsi0.js → ArrowUp-Bi8YJGtE.js} +1 -1
- package/dist/client/assets/{Building02-DkmblV_t.js → Building02-BG4IPwQ3.js} +1 -1
- package/dist/client/assets/{CartesianChart-CBSx0vVi.js → CartesianChart-BROP1iuM.js} +1 -1
- package/dist/client/assets/{Check-DT07hOsy.js → Check-ChBZV9OV.js} +1 -1
- package/dist/client/assets/{CheckCircle-DKVKsPck.js → CheckCircle-D49A5hws.js} +1 -1
- package/dist/client/assets/{ChevronUp-Bf0RRY9i.js → ChevronUp-wB5J5ntl.js} +1 -1
- package/dist/client/assets/{Copy01-onj9VSIV.js → Copy01-C4tt-_AN.js} +1 -1
- package/dist/client/assets/{CreditCard01-CunAqtsE.js → CreditCard01-DCvyy0kz.js} +1 -1
- package/dist/client/assets/{DotsVertical-BlZNH3M2.js → DotsVertical-BWwzMO41.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-DLyMMN4K.js → ErrorBarContext-Ct0GvI3W.js} +1 -1
- package/dist/client/assets/{Image01-D-zCGCY4.js → Image01-B4l0All3.js} +1 -1
- package/dist/client/assets/{Key01-BSZJTaKJ.js → Key01-DNpH0NnO.js} +1 -1
- package/dist/client/assets/{Line-Cu8o9uY5.js → Line-Bq7EY1pw.js} +1 -1
- package/dist/client/assets/{Link01-BgOzUKXX.js → Link01-DZVgeeWe.js} +1 -1
- package/dist/client/assets/{LinkBroken01-CG-HmcZF.js → LinkBroken01-CNbQoBrl.js} +1 -1
- package/dist/client/assets/{LinkExternal01-UbkWQoBv.js → LinkExternal01-D73wyIiU.js} +1 -1
- package/dist/client/assets/{Monitor01-vP9TH_Iv.js → Monitor01-BJ23zU-n.js} +1 -1
- package/dist/client/assets/{Palette-VovT0PnZ.js → Palette-BKZ5R7W4.js} +1 -1
- package/dist/client/assets/{Plus-DQzzAz_7.js → Plus-CP_oegJ7.js} +1 -1
- package/dist/client/assets/{SearchMd-D6hQenCX.js → SearchMd-D2OTQFME.js} +1 -1
- package/dist/client/assets/{Sector-RlVKS-cJ.js → Sector-OlKrChyD.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-Cv1HC6f2.js → ShoppingBag01-BfMGWAwv.js} +1 -1
- package/dist/client/assets/{Sun-4pXqabGH.js → Sun-BAfhxpb-.js} +1 -1
- package/dist/client/assets/{Tool01-R5YlhrWO.js → Tool01-B_dduyQs.js} +1 -1
- package/dist/client/assets/{Trash01-1y1rCSQ7.js → Trash01-C4sE_NGv.js} +1 -1
- package/dist/client/assets/{Upload01-4H_HtY1H.js → Upload01-qBk1AINH.js} +1 -1
- package/dist/client/assets/{User01-Cc8kWxTi.js → User01-DcjCdViP.js} +1 -1
- package/dist/client/assets/{UserSquare-DwmYgSB5.js → UserSquare-CQZbVq0f.js} +1 -1
- package/dist/client/assets/{Users01-CYu_OK-x.js → Users01-DR0sKzFO.js} +1 -1
- package/dist/client/assets/{X-Bix2CJil.js → X-DJN31Nfv.js} +1 -1
- package/dist/client/assets/{XAxis-BRJUR_Yx.js → XAxis-C3Bf1J_u.js} +1 -1
- package/dist/client/assets/{XClose-D1JVUlwn.js → XClose-D0KEw8ZX.js} +1 -1
- package/dist/client/assets/{ZoomOut-DK7mmj_3.js → ZoomOut-UxLkEy8R.js} +1 -1
- package/dist/client/assets/{access-gate-E9akvl7M.js → access-gate-RAaA3S4I.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-C9NnYS0B.js → add-connection-dialog-BY0I55_H.js} +1 -1
- package/dist/client/assets/{agent-analytics-BpvLWqp9.js → agent-analytics-BkAfBBox.js} +1 -1
- package/dist/client/assets/agent-app-BjfUl_0f.js +1 -0
- package/dist/client/assets/{agent-assets-F0nAoteT.js → agent-assets-B3yLb2yB.js} +1 -1
- package/dist/client/assets/{agent-automation-CVWUvLWe.js → agent-automation-B2a9NwZW.js} +1 -1
- package/dist/client/assets/{agent-automations-CP-T_ZYT.js → agent-automations-4swr6ii9.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-Jt-weFtl.js → agent-connect-sources-DScLzDRG.js} +1 -1
- package/dist/client/assets/agent-deck-qy9xDSPf.js +1 -0
- package/dist/client/assets/{agent-e2e-RBJsPRE-.js → agent-e2e-BYVtzJn1.js} +1 -1
- package/dist/client/assets/{agent-experiments-CKwxukPG.js → agent-experiments-BytI8p3-.js} +1 -1
- package/dist/client/assets/{agent-file-BPv1WL5h.js → agent-file-YzyYVZ_N.js} +1 -1
- package/dist/client/assets/{agent-hosting-B1n_QjSO.js → agent-hosting-XjyAni_P.js} +1 -1
- package/dist/client/assets/{agent-icon-zpWPhOfj.js → agent-icon-DGDGzDPg.js} +1 -1
- package/dist/client/assets/agent-library-DmwLcUW5.js +1 -0
- package/dist/client/assets/agent-library-file-BhecoKGR.js +1 -0
- package/dist/client/assets/{agent-monitor-rhzeTPAW.js → agent-monitor-BeZr1N-B.js} +1 -1
- package/dist/client/assets/{agent-overview-DawzNEwc.js → agent-overview-qqA1EvR2.js} +1 -1
- package/dist/client/assets/agent-settings-Cg5Aii0O.js +1 -0
- package/dist/client/assets/{agent-site-editor-CF1Vr1s-.js → agent-site-editor-3yAc0dAv.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-nkVrwBja.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-DybB0nyP.js → agent-site-editor-content-BVsrDzv_.js} +3 -3
- package/dist/client/assets/{agent-site-editor-preview-CYHo-ORA.js → agent-site-editor-preview-CWeO_adL.js} +3 -3
- package/dist/client/assets/agent-view-5udch1Zo.js +1 -0
- package/dist/client/assets/{agent-view-guard-CdHrEVQK.js → agent-view-guard--aoytX6B.js} +1 -1
- package/dist/client/assets/{agents-list-BUtJHEBq.js → agents-list-Bh-3TBuf.js} +1 -1
- package/dist/client/assets/{ai-providers--62RVeJI.js → ai-providers-DKS3l98n.js} +1 -1
- package/dist/client/assets/{alert-D7D03BKP.js → alert-DSsZdX1z.js} +1 -1
- package/dist/client/assets/{alert-dialog-CyLBdAzL.js → alert-dialog-CiySziMD.js} +1 -1
- package/dist/client/assets/{analytics-sections-St-vkcN9.js → analytics-sections-Cl2mCPG9.js} +1 -1
- package/dist/client/assets/{api-keys-8GLO1uKc.js → api-keys-DT79lla9.js} +1 -1
- package/dist/client/assets/api-keys-TdHJQ9tA.js +1 -0
- package/dist/client/assets/app-editor-BMX-mtW-.js +1 -0
- package/dist/client/assets/{asset-utils-BXloR6dL.js → asset-utils-Co49serB.js} +1 -1
- package/dist/client/assets/{auth-ydnDmdni.js → auth-Cs4gU6Jt.js} +1 -1
- package/dist/client/assets/{auth-catchall-DV9J64DV.js → auth-catchall-472LoEBQ.js} +1 -1
- package/dist/client/assets/{auth-entry-oEfwo4SD.js → auth-entry-wcuFRPik.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CnSdMp2k.js → auth-split-layout-wSdRvsPt.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-0pLi3EbJ.js → authenticate-and-persist-oauth-VlIk_G_o.js} +1 -1
- package/dist/client/assets/{automation-list-row-Cs1Mmss0.js → automation-list-row-CuueSCf2.js} +1 -1
- package/dist/client/assets/{automation-runs-DADbYz16.js → automation-runs-BnertJ4X.js} +1 -1
- package/dist/client/assets/{automations-bWRzJt79.js → automations-DdJEP87b.js} +1 -1
- package/dist/client/assets/{autosend-BGaION3N.js → autosend-D7eBSjvh.js} +1 -1
- package/dist/client/assets/{avatar-CmK1yw1p.js → avatar-BeFOPb9J.js} +1 -1
- package/dist/client/assets/{badge-DEsF_1Ia.js → badge-SOygJ_ut.js} +1 -1
- package/dist/client/assets/{block-document-BEKsZQFG.js → block-document-Cu1aHoUW.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-I99wRxXQ.js → blocks-preview-workspace-context-BUj7HSJ8.js} +1 -1
- package/dist/client/assets/{blog-schema-ChdnOShd.js → blog-schema-BMIbFol2.js} +1 -1
- package/dist/client/assets/{buckets-CxWDcQDs.js → buckets-BA7hLRYf.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-CkwvsCJn.js → build-improve-prompt-doc-DRPd_i83.js} +1 -1
- package/dist/client/assets/{calendar-CJu_GHUv.js → calendar-oXQevmTG.js} +1 -1
- package/dist/client/assets/{capability-load-error-Ljpou6Bo.js → capability-load-error-dMTmC9nh.js} +1 -1
- package/dist/client/assets/{category-editor-BP6pLKwh.js → category-editor-1_2fvb3e.js} +1 -1
- package/dist/client/assets/{chart-D88KLoUP.js → chart-VsbCVKFV.js} +1 -1
- package/dist/client/assets/{chat-context-Bx9MVwv5.js → chat-context-DiXJfhIa.js} +1 -1
- package/dist/client/assets/{chat-draft-BY29_iSs.js → chat-draft-Bpba7nd9.js} +1 -1
- package/dist/client/assets/{checkbox-C49TGIp0.js → checkbox-Dz205M-t.js} +1 -1
- package/dist/client/assets/{choose-editor-DB0cnGpT.js → choose-editor-sM1ArvsC.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-C3RYiVe8.js → claim-phase-copy-Dd94Yylk.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DwRQR0Ku.js → cli-auth-success-B9VS9AxW.js} +1 -1
- package/dist/client/assets/{client-icons-DAZktl5s.js → client-icons-pHlGrnda.js} +1 -1
- package/dist/client/assets/{collapsible-syvMi5BG.js → collapsible-CfObde3Q.js} +1 -1
- package/dist/client/assets/{collection-detail-CjilUV-o.js → collection-detail-Db-KUOBe.js} +1 -1
- package/dist/client/assets/{collection-display-button-BeOcroLk.js → collection-display-button-BkekuxeX.js} +1 -1
- package/dist/client/assets/{collection-search-DHFp5D4H.js → collection-search-D2PZ787d.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-ge6vt6wC.js → collection-table-wrapper-CiNVnoGZ.js} +1 -1
- package/dist/client/assets/{collection-tabs-DXzpq1Uc.js → collection-tabs-BPj0wxo8.js} +1 -1
- package/dist/client/assets/{column-rules-BEG-LiIK.js → column-rules-DHSys_Pp.js} +1 -1
- package/dist/client/assets/{combobox-B6ZiAdlR.js → combobox-Cio7ykEV.js} +1 -1
- package/dist/client/assets/{command-D7RcR1At.js → command-CxzepSXP.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-M9JXIs4F.js → companion-mcps-section-Cv04Xa58.js} +1 -1
- package/dist/client/assets/{config-DPgm9uDo.js → config-Ct9Qi8LT.js} +1 -1
- package/dist/client/assets/{connect-DPzJM3Ss.js → connect-CGibdNE5.js} +1 -1
- package/dist/client/assets/{connect-layout-BkW0QYIq.js → connect-layout-BxAxcInI.js} +1 -1
- package/dist/client/assets/{connection-8CqSsDm5.js → connection-DbyDLRig.js} +1 -1
- package/dist/client/assets/{connection-card-XhoPzocB.js → connection-card-DUnGN1LQ.js} +1 -1
- package/dist/client/assets/{connection-detail-C7APaNGj.js → connection-detail-CYpkfAUI.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BmHNz6u_.js → connection-form-helpers-B-IGiex0.js} +1 -1
- package/dist/client/assets/{connections-BWEZddgp.js → connections-8PptZe-N.js} +1 -1
- package/dist/client/assets/{context-BcZ7togB.js → context-CqJX50Y5.js} +1 -1
- package/dist/client/assets/{context-menu-hfM0OJ90.js → context-menu-X12cIwS3.js} +1 -1
- package/dist/client/assets/{core.esm-BDakG4hN.js → core.esm-BND19H8a.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-kX3bAwvy.js → create-organization-dialog-DvoetHmh.js} +1 -1
- package/dist/client/assets/{daily-pulse-DLNh3BNN.js → daily-pulse-VPctcCpq.js} +1 -1
- package/dist/client/assets/{decopilot-BVdjTDzA.js → decopilot-RuTJJBbl.js} +1 -1
- package/dist/client/assets/{device-hint--Pl8erT8.js → device-hint-BJfRFQKk.js} +1 -1
- package/dist/client/assets/{dialog-DfdkHhmb.js → dialog-D_5RxDc9.js} +1 -1
- package/dist/client/assets/{discover-B_YJeQ0t.js → discover-DtRS1x6t.js} +1 -1
- package/dist/client/assets/{domain-settings-BNKv7CG9.js → domain-settings-BGARHR_o.js} +1 -1
- package/dist/client/assets/{download-app-dialog-CfJbVT9R.js → download-app-dialog-RU0ZYOfB.js} +1 -1
- package/dist/client/assets/{drawer-CIqQnl1u.js → drawer-Br_av5UR.js} +1 -1
- package/dist/client/assets/{editor-DPVBnzyg.js → editor-KC3-U1Hv.js} +1 -1
- package/dist/client/assets/{empty-state-DSS4pT1g.js → empty-state-Bzg2RaeW.js} +1 -1
- package/dist/client/assets/{empty-state-BRfCy1KK.js → empty-state-DNTQ1C-X.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BFK1aCsO.js → extract-connection-data-BFG_cq-0.js} +1 -1
- package/dist/client/assets/{feature-gate-lUmvuNGP.js → feature-gate-B2dCnM8L.js} +1 -1
- package/dist/client/assets/{feature-paywall-BHVpt9vY.js → feature-paywall-CVOfOt8x.js} +1 -1
- package/dist/client/assets/{file-explorer-BhvSUItT.js → file-explorer-wKCmBF67.js} +1 -1
- package/dist/client/assets/{file-preview-Pk-Bxrs3.js → file-preview-VEd_A7P9.js} +1 -1
- package/dist/client/assets/{file-share-button-Drokhk1O.js → file-share-button-DkiNZpp9.js} +1 -1
- package/dist/client/assets/{file-type-icon-Dak7C2hB.js → file-type-icon-CfnH9Twn.js} +1 -1
- package/dist/client/assets/flat-project-DkZ9ut26.js +1 -0
- package/dist/client/assets/{folder-icon-BV7RkSpo.js → folder-icon-CzsWuPW5.js} +1 -1
- package/dist/client/assets/{form-L-QwU058.js → form-juLaUBrF.js} +1 -1
- package/dist/client/assets/{gateway-client-DIx8y90K.js → gateway-client-CZQ4II3C.js} +1 -1
- package/dist/client/assets/{general-4i0UazBb.js → general-DxW1EaZc.js} +1 -1
- package/dist/client/assets/{home-DrUnBj11.js → home-m5VhYXeH.js} +1 -1
- package/dist/client/assets/{icon-button-CNx5vjvd.js → icon-button-CMxGCJDP.js} +1 -1
- package/dist/client/assets/{index-D6hcVQMy.js → index-BC7i1Aoz.js} +1 -1
- package/dist/client/assets/{index-DLxL4E4g.js → index-BgwBy5oM.js} +1 -1
- package/dist/client/assets/{index-qxTKzwUa.js → index-C1hd3ai4.js} +1 -1
- package/dist/client/assets/{index-DLUvq6N4.js → index-C5X8q_Pi.js} +1 -1
- package/dist/client/assets/{index-yySMOeUT.js → index-CCXcZJGG.js} +1 -1
- package/dist/client/assets/{index-BBAhA6Le.js → index-CZNblbQa.js} +1 -1
- package/dist/client/assets/{index-BSNgOILO.js → index-CpnRViDi.js} +3 -3
- package/dist/client/assets/{index-CmfXJaKn.js → index-CsKm2ubF.js} +2 -2
- package/dist/client/assets/{index-D-j5tLoV.js → index-CyAv4Ino.js} +1 -1
- package/dist/client/assets/{index-BIS-YXel.js → index-CycACfp6.js} +1 -1
- package/dist/client/assets/{index-hw5atO08.js → index-CzdEzd_G.js} +1 -1
- package/dist/client/assets/{index-Cha6sREf.js → index-DCcjp4nP.js} +1 -1
- package/dist/client/assets/{index-CpCp6flP.js → index-DyC292ZS.js} +1 -1
- package/dist/client/assets/{index-0eJRh8R4.js → index-G0I4ayW-.js} +1 -1
- package/dist/client/assets/{index-slTQzhAF.js → index-WJJsnt-n.js} +1 -1
- package/dist/client/assets/{index-redirect-BsL3Wy60.js → index-redirect-_gwqEShi.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-BV5hUiLD.js → infiniteQueryObserver-DaqTQDCS.js} +1 -1
- package/dist/client/assets/{infra-billing-CTgKPdho.js → infra-billing-DCtNAzlT.js} +1 -1
- package/dist/client/assets/{input-4qEEcM12.js → input-BhJziSQi.js} +1 -1
- package/dist/client/assets/input-DFO5Hmip.js +17 -0
- package/dist/client/assets/{input-BNzPL_iy.js → input-hKftpNOz.js} +1 -1
- package/dist/client/assets/{integration-icon-BonC-ogs.js → integration-icon-CTkfXIOR.js} +1 -1
- package/dist/client/assets/{label-bFgvSx58.js → label-Bfbz6otc.js} +1 -1
- package/dist/client/assets/{layout-C6WqLGyR.js → layout-ZwTrfTZi.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-BBL3IdDh.js → legacy-agents-deep-DMwbwAKI.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-CfhJpa5K.js → legacy-main-redirect-BGY6ia4w.js} +1 -1
- package/dist/client/assets/library-DlOv00rX.js +1 -0
- package/dist/client/assets/{library-tab-BB8_-aXb.js → library-tab-BcgjMyrL.js} +1 -1
- package/dist/client/assets/{login-DHRUorQv.js → login-DCqry8Ay.js} +1 -1
- package/dist/client/assets/{markdown-Bm0EnhxB.js → markdown-Bx2p9OGj.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-DrzyJZxY.js → mcp-app-renderer-d-JulMSx.js} +1 -1
- package/dist/client/assets/{mcp-oauth-NtoAIxeI.js → mcp-oauth-BOCq2t4w.js} +1 -1
- package/dist/client/assets/{members-rL_0NXs3.js → members-xhc9KLWq.js} +1 -1
- package/dist/client/assets/{memory-57liTbov.js → memory-VJT_lSNB.js} +1 -1
- package/dist/client/assets/{mini-report-page-2z90zMGC.js → mini-report-page-YCYdK64Z.js} +1 -1
- package/dist/client/assets/{mock-board-2vyeBIpi.js → mock-board-DcCpR66D.js} +1 -1
- package/dist/client/assets/{monaco-editor-CgPa2BkS.js → monaco-editor-CkJpx19Y.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-B8BCbzN2.js → monitoring-stats-row-Cqs-6_S6.js} +1 -1
- package/dist/client/assets/{multi-select-Eun7kW76.js → multi-select-DW-NLuy4.js} +1 -1
- package/dist/client/assets/{mustache-C8I_o4kv.js → mustache-Q-UGwUPM.js} +1 -1
- package/dist/client/assets/{new-project-dialog-BBDXUa7t.js → new-project-dialog-BR_BdAk-.js} +1 -1
- package/dist/client/assets/{oauth-callback-BRlmMjq0.js → oauth-callback-CRloSDTl.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-dNKGDRz2.js → oauth-callback-ai-provider-2uzVHGZK.js} +1 -1
- package/dist/client/assets/{onboarding-DuoOHH_e.js → onboarding-DkT61UKY.js} +1 -1
- package/dist/client/assets/{openai-conversation-CsZhzcK_.js → openai-conversation-Bo2nNgKY.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-BBCxpQYT.js → optimistic-project-sidebar-views-DfbOaqQl.js} +1 -1
- package/dist/client/assets/{org-file-open-context-B_XQOD8z.js → org-file-open-context-BHXXOOHS.js} +1 -1
- package/dist/client/assets/{organization-choice-CZP-vgCu.js → organization-choice-B8_GAtl-.js} +1 -1
- package/dist/client/assets/{orgs-DqPSkSGZ.js → orgs-BuJtkddf.js} +1 -1
- package/dist/client/assets/{page-seo-form-3EgL9cU4.js → page-seo-form-5o5iVNld.js} +1 -1
- package/dist/client/assets/{pair-BNiFxIdB.js → pair-gpe5yzQs.js} +1 -1
- package/dist/client/assets/{plan-ladder-BJXeUQY6.js → plan-ladder-DionZok_.js} +1 -1
- package/dist/client/assets/{popover-DwltHyyo.js → popover-DH3Sl61q.js} +1 -1
- package/dist/client/assets/{post-calendar-Dn93fgop.js → post-calendar-tH162nXm.js} +1 -1
- package/dist/client/assets/{post-editor-Df-Ydp56.js → post-editor-D1gbYoHN.js} +1 -1
- package/dist/client/assets/{preview-content-llp8A1Fx.js → preview-content-SoUMkfQg.js} +1 -1
- package/dist/client/assets/{preview-dialog-C0rIAVwJ.js → preview-dialog-DPOzbA4Y.js} +1 -1
- package/dist/client/assets/{preview-panel-kwICD-IP.js → preview-panel-CywYdFpJ.js} +1 -1
- package/dist/client/assets/{profile-CKI2V6L4.js → profile-Dmb0eg_9.js} +1 -1
- package/dist/client/assets/{project-app-view-n3cNFnjF.js → project-app-view-gFsgFZJs.js} +1 -1
- package/dist/client/assets/{project-feed-CrcM01NE.js → project-feed-LDtRi-aY.js} +1 -1
- package/dist/client/assets/{project-icon-BbgRznbE.js → project-icon-DxklOC8j.js} +1 -1
- package/dist/client/assets/project-reports-DA_DcXq0.js +1 -0
- package/dist/client/assets/project-tasks-6O_Gw9mX.js +1 -0
- package/dist/client/assets/{projects-C92Fpsys.js → projects-Dq4GZ2RU.js} +1 -1
- package/dist/client/assets/{projects-empty-state-jalgUMXc.js → projects-empty-state-LXUf6lw8.js} +1 -1
- package/dist/client/assets/{prompts-I5dsKQL_.js → prompts-DpoYq-C8.js} +1 -1
- package/dist/client/assets/record-editor-CiRyw1Eu.js +1 -0
- package/dist/client/assets/{redirect-editor-Be2R_jDZ.js → redirect-editor-h2jfnY0r.js} +1 -1
- package/dist/client/assets/{reports-8DYzRzah.js → reports-BkGvj-AQ.js} +1 -1
- package/dist/client/assets/reports-C9YxMpwW.js +1 -0
- package/dist/client/assets/{reports-onboarding-DHU4Avz5.js → reports-onboarding-D2nAyEQg.js} +1 -1
- package/dist/client/assets/{reports-tab-DRzkM6pV.js → reports-tab-C4Iuixxf.js} +2 -2
- package/dist/client/assets/{repositories-CIMUlOvj.js → repositories-CInM2D5H.js} +1 -1
- package/dist/client/assets/{repository-binding-DLsaqYxe.js → repository-binding-ebck0c8n.js} +1 -1
- package/dist/client/assets/{repository-import-picker-BuXUq4VL.js → repository-import-picker-CTs8TUdw.js} +1 -1
- package/dist/client/assets/{repository-picker-BiHs5x47.js → repository-picker-BwC54VM6.js} +1 -1
- package/dist/client/assets/{require-capability-BEya1FVv.js → require-capability-C0TsXxTO.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DxbZpHcW.js → required-auth-layout-D4fpdDYn.js} +1 -1
- package/dist/client/assets/{reset-password-Cka0kEpf.js → reset-password-BW6tqvrs.js} +1 -1
- package/dist/client/assets/{resizable-B88Tf4WJ.js → resizable-DENddsry.js} +1 -1
- package/dist/client/assets/{resolve-tab-icon-B5oufvSh.js → resolve-tab-icon-BGgWJEJh.js} +1 -1
- package/dist/client/assets/{review-settings-CjaZPAVN.js → review-settings-KWioU3vH.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-Bx6xpmAj.js → rich-text-link-control-DdGTIpxo.js} +1 -1
- package/dist/client/assets/{roles-CQY7V_Nv.js → roles-B73i-5IT.js} +1 -1
- package/dist/client/assets/{route-BJUf6dcj.js → route-CwP5bQeO.js} +1 -1
- package/dist/client/assets/{route-Chcgj5js.js → route-Do1Yrs9w.js} +1 -1
- package/dist/client/assets/route-XcpEoNu9.js +1 -0
- package/dist/client/assets/{runnable-block-editor-36tIZdMB.js → runnable-block-editor-Dl0N0zCW.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-C9BC0S3N.js → sandbox-lifecycle-context-B_NAJSjm.js} +1 -1
- package/dist/client/assets/{schema-2UaHsULm.js → schema-bIq2BT73.js} +1 -1
- package/dist/client/assets/{scroll-area-BYHvZ2mI.js → scroll-area-DgvMLOUX.js} +1 -1
- package/dist/client/assets/{search-input-B_YLozB3.js → search-input-Dxc4Q9oE.js} +1 -1
- package/dist/client/assets/{search-toggle-gk1lAOE-.js → search-toggle-BB2lVgeF.js} +1 -1
- package/dist/client/assets/{secret-picker-TXboPuNL.js → secret-picker-CBx3NT_r.js} +1 -1
- package/dist/client/assets/{secrets-B0siWpRR.js → secrets-Bds2fazx.js} +1 -1
- package/dist/client/assets/{sections-editor-DbE334qL.js → sections-editor-BHKheRNV.js} +1 -1
- package/dist/client/assets/{select-CGUBnSdo.js → select-ERtFaSl0.js} +1 -1
- package/dist/client/assets/{select-model-CvAltrce.js → select-model-DMNOi0UH.js} +1 -1
- package/dist/client/assets/{seo-editor-B_4BH5be.js → seo-editor-Cl9glbjm.js} +1 -1
- package/dist/client/assets/{separator-C5Q36va9.js → separator-CuY7Q1Gl.js} +1 -1
- package/dist/client/assets/{settings-tab-BEu6uPlX.js → settings-tab-D7GiwWK4.js} +1 -1
- package/dist/client/assets/{sheet-7Pf6aTpk.js → sheet-nJD4St3t.js} +1 -1
- package/dist/client/assets/{shell-layout-iAP3M_t2.js → shell-layout-CsK_iJoM.js} +1 -1
- package/dist/client/assets/{skills-beo1viZi.js → skills-BpYdnG8K.js} +1 -1
- package/dist/client/assets/{sso-nlgrPDDd.js → sso-CUH5oWF7.js} +1 -1
- package/dist/client/assets/{suggestion-BoHqZ2zm.js → suggestion-CVmYJ2-l.js} +1 -1
- package/dist/client/assets/{switch-DS7j-ERy.js → switch-BhR8nlxD.js} +1 -1
- package/dist/client/assets/{synced-repos--TVpMVGF.js → synced-repos-C5uktY6M.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph-CqKc2Jnq.js → tab-icon-glyph-DDGnTEUb.js} +1 -1
- package/dist/client/assets/{table-B9nrZOlA.js → table-BghtXeZn.js} +1 -1
- package/dist/client/assets/{tabs-C4Ipd_wa.js → tabs-BdEjeb3h.js} +1 -1
- package/dist/client/assets/{task-board-DsbM6d_k.js → task-board-CC3VTzd7.js} +1 -1
- package/dist/client/assets/{task-route-Dw_pjXIQ.js → task-route-CzV6Ggve.js} +1 -1
- package/dist/client/assets/{task-status-Bu8dWbMG.js → task-status-MdR-wgNu.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-CoNiVl0J.js → taskboard-analytics-CjgkuySj.js} +1 -1
- package/dist/client/assets/{tasks-BpRBMq0r.js → tasks-B7Pdi00T.js} +1 -1
- package/dist/client/assets/tasks-Lm1DDtMB.js +1 -0
- package/dist/client/assets/{textarea-5M2oFUCk.js → textarea-CFMwKhM9.js} +1 -1
- package/dist/client/assets/{thread-analytics-DBgLHsuG.js → thread-analytics-BeZ0CZhF.js} +1 -1
- package/dist/client/assets/{thread-button-D6_ujRz8.js → thread-button-DdmUMrmT.js} +1 -1
- package/dist/client/assets/{thread-intent-DYi-88yf.js → thread-intent-Dg3GQUH3.js} +1 -1
- package/dist/client/assets/{thread-route-Ddedz3K3.js → thread-route-BPJPEkBO.js} +1 -1
- package/dist/client/assets/{thread-route-D8jj7JQn.js → thread-route-C5YO0tNH.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-CQZ4Xzqy.js → thread-sheet-body-Ci751mbw.js} +1 -1
- package/dist/client/assets/{toggle-group-B-XGJasE.js → toggle-group-DLp7Wh-7.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-Cme8sKPF.js → toolbar-icon-button-CMClok1k.js} +1 -1
- package/dist/client/assets/{tooltip-CyP-7aI0.js → tooltip-17PKNCMM.js} +1 -1
- package/dist/client/assets/{track-B2INqJw_.js → track-A4Z9PFKK.js} +1 -1
- package/dist/client/assets/{types-BGNIxZfy.js → types-Zt76-Urn.js} +1 -1
- package/dist/client/assets/{usage-stats-DzFZMIXh.js → usage-stats-Di6th6eM.js} +1 -1
- package/dist/client/assets/{use-ai-providers-4F-zKGq7.js → use-ai-providers-DXMywQjn.js} +1 -1
- package/dist/client/assets/{use-automations-CObCkDjZ.js → use-automations-BIkU0R2i.js} +1 -1
- package/dist/client/assets/{use-autosave-lnP7w6IA.js → use-autosave-D7Dc_Y3x.js} +1 -1
- package/dist/client/assets/{use-chat-layout-state-DeR1Tqdr.js → use-chat-layout-state-CcVNkckt.js} +1 -1
- package/dist/client/assets/{use-chat-navigation-B89SfaFP.js → use-chat-navigation-EErRoLjo.js} +1 -1
- package/dist/client/assets/{use-clock-tick-CAj_vE5f.js → use-clock-tick-Bs0g2LMm.js} +1 -1
- package/dist/client/assets/{use-connect-companion-C08Ls9V4.js → use-connect-companion-BV3jBqGw.js} +1 -1
- package/dist/client/assets/{use-connection-DsbJp2WH.js → use-connection-hWK0p_4I.js} +1 -1
- package/dist/client/assets/{use-copy-gILaQNS5.js → use-copy-eIJpbbHo.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-B9llzBQy.js → use-create-virtual-mcp-CFCczIE_.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-JG2XlcuE.js → use-date-fns-locale-CViyxf02.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-BDX075Uf.js → use-debounced-autosave-B4SAaEhH.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CkSh2sdJ.js → use-debounced-value-Dws83Fd6.js} +1 -1
- package/dist/client/assets/{use-deco-credits-B6M50c5m.js → use-deco-credits-YDPWVl4H.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-GRYBUdoh.js → use-decopilot-events-BlCOqvv5.js} +1 -1
- package/dist/client/assets/{use-delete-connection-M4g6mXhR.js → use-delete-connection-CEwDeoWa.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DoRISvgr.js → use-deployment-admin-B2zM8cA7.js} +1 -1
- package/dist/client/assets/{use-ensure-project-folder-BPOBE2S-.js → use-ensure-project-folder-jggJOZhf.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-apV5WYRi.js → use-fast-preview-draft-url-B8A09d5h.js} +1 -1
- package/dist/client/assets/{use-file-configs-BmdGrQgB.js → use-file-configs-WonDx6od.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BhcJa6Dv.js → use-infinite-scroll-CvbHrO1A.js} +1 -1
- package/dist/client/assets/{use-join-requests-B6pi4oC9.js → use-join-requests-Dkum0YOb.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-Bn7Q_nKJ.js → use-main-panel-tabs-DM4i9k_8.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-BwGIXOfQ.js → use-mcp-auth-status-CifzBBCu.js} +1 -1
- package/dist/client/assets/{use-mcp-client-Bm7mYuOR.js → use-mcp-client-C7yhsDUq.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-CSphD1Ew.js → use-mcp-prompts-BZp7FUGA.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Yl5gKY2j.js → use-mcp-tools-B-fAu-Lb.js} +1 -1
- package/dist/client/assets/{use-members-BkFO1Bt8.js → use-members-muYuUKl8.js} +1 -1
- package/dist/client/assets/{use-mobile-D-nsnibB.js → use-mobile-h60o0kDh.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-ilYOi1P6.js → use-navigate-to-agent-DpJjb9Ad.js} +1 -1
- package/dist/client/assets/use-new-blocks-editor-DRLHOxEJ.js +1 -0
- package/dist/client/assets/{use-open-billing-url-BJSxQsX7.js → use-open-billing-url-CqRpsDrV.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-Ch8FFgkf.js → use-org-auth-client-CPl2reDK.js} +1 -1
- package/dist/client/assets/{use-org-fs-D7r3cXXb.js → use-org-fs-DuUomCai.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-YBN6v1a-.js → use-org-repo-syncs-4sBt09GE.js} +1 -1
- package/dist/client/assets/{use-org-sso-ColeXCJP.js → use-org-sso-DHgm8_xi.js} +1 -1
- package/dist/client/assets/{use-organization-roles-5OyxiKHR.js → use-organization-roles-BV3iU524.js} +1 -1
- package/dist/client/assets/{use-organization-settings-Bkbee1TC.js → use-organization-settings-C9LFE9dH.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-CFkRSy6M.js → use-panel-navigate-BoWMxqfw.js} +1 -1
- package/dist/client/assets/{use-project-scope-BhC0oTXz.js → use-project-scope-Bq9_CxnF.js} +1 -1
- package/dist/client/assets/{use-releases-BmqYrGh7.js → use-releases-BBaBeMfL.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-CCwARN0J.js → use-reports-diagnostic-G1zwph_0.js} +1 -1
- package/dist/client/assets/{use-secrets-tjcKGh8r.js → use-secrets-Ct52FR_G.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-BuZjO6fr.js → use-section-preview-base-DOtesyFx.js} +1 -1
- package/dist/client/assets/{use-session-runtime-ComyTd-K.js → use-session-runtime-DCyDQGsH.js} +1 -1
- package/dist/client/assets/{use-tags-oEpdgu7W.js → use-tags-pyv75hiG.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-BAFH41CD.js → use-task-board-analytics-BJyBRcs8.js} +1 -1
- package/dist/client/assets/{use-task-board-events-CJEARXda.js → use-task-board-events-Bz8ommc9.js} +1 -1
- package/dist/client/assets/{use-task-metadata-DNM-o2cs.js → use-task-metadata-C_1RsAj0.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-BsDhHRrs.js → use-thread-analytics-CVwQKqXG.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-Cv0FzPvX.js → use-thread-outputs-Co6FxFAd.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-SgJx2z0R.js +1 -0
- package/dist/client/assets/{useQueries-BtiLqqyQ.js → useQueries-4js0NmfF.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BCL_lLFm.js +1 -0
- package/dist/client/assets/{users-DyQGgOV3.js → users-DFphiLPz.js} +1 -1
- package/dist/client/assets/{utils-C41e_wcL.js → utils-7wkojbq8.js} +1 -1
- package/dist/client/assets/{variant-calendar-B4sM-EEp.js → variant-calendar-hQb_6Knv.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-DYorwBPR.js → variant-matcher-override-B7_BSavX.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-Dqx01hDb.js → view-mode-toggle-I-eGSI3M.js} +1 -1
- package/dist/client/assets/{virtual-mcp-k-QS-zY_.js → virtual-mcp-CZeK9_Zn.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-DCZ8xzM-.js +0 -1
- package/dist/client/assets/agent-deck-D-q8ZKHY.js +0 -1
- package/dist/client/assets/agent-library-DOYiSA2I.js +0 -1
- package/dist/client/assets/agent-library-file-B0o-BaD1.js +0 -1
- package/dist/client/assets/agent-settings-C4N5XRQB.js +0 -1
- package/dist/client/assets/agent-site-editor-code-CzC0UMgl.js +0 -2
- package/dist/client/assets/agent-view-BchMOwqQ.js +0 -1
- package/dist/client/assets/api-keys-WRek4yc5.js +0 -1
- package/dist/client/assets/app-editor-BP33ySjF.js +0 -1
- package/dist/client/assets/flat-project-CqacAsy2.js +0 -1
- package/dist/client/assets/input-C5EZjiM5.js +0 -17
- package/dist/client/assets/library-ChuqB8UQ.js +0 -1
- package/dist/client/assets/project-reports-B7UkSmH1.js +0 -1
- package/dist/client/assets/project-tasks-DRbeO-yg.js +0 -1
- package/dist/client/assets/record-editor-Bb9CxLRe.js +0 -1
- package/dist/client/assets/reports-BpSqXBgV.js +0 -1
- package/dist/client/assets/route-DIenLn_2.js +0 -1
- package/dist/client/assets/tasks-B8Jp1enk.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-BMeMurTo.js +0 -1
- package/dist/client/assets/useInfiniteQuery-CguvOv70.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CjC1GQYU.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3729,7 +3729,7 @@ ${J.join(`
|
|
|
3729
3729
|
`)}`:X}function Qa6($){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 CJ8=200,ps6=12,ts6,rs6=300,m_0=3;var HO1=D(()=>{J7();r$();c_0();ts6={aheadBy:0,behindBy:0,files:[]}});function Xa6($){if(!$||$.includes(".."))return!1;return Ya6.test($)}function vJ8($){return Ja6.includes($)}function FO1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!Xa6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function UO1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Ya6,Ja6;var bJ8=D(()=>{Ya6=/^[\w./@-]+$/;Ja6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function I50($,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 fJ8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new zP(b7);let J=await oj($.storage,X,Y);if(J&&await ID($.storage,J)){let F=await lU($,J,{forceRefresh:!0}).catch((U)=>{throw new zP(U instanceof Error?U.message:b7)});await xJ8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new zP("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await um({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:b7;throw new zP(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await mU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=Gj$(F instanceof Error?F.message:String(F));throw U?new zP(N):F});await xJ8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function xJ8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=Xn($),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 UE(K,Ga6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Ga6=10485760,zP;var NO1=D(()=>{hW();v_0();E$0();LF0();z10();J7();zP=class zP extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function Ka6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Wa6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Eg($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Fa6)])}async function Na6($,Z){let Q=$.var.studioContext,Y=oY(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=vf(G?.metadata?.runtime);if(W)return W;let K=jR0(Z.virtualMcpMetadata),H=K==="cms"?await iL1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)P$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 Ba6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await f7($.var.studioContext)}catch{return null}}function Hn($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function k50($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=I50(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=X0(Y);return ym(Y,J.id,X)}function DO1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=zO$(Z);if(Y!==void 0)return $.json({error:Q},429,{...kZ,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof a6)return $.json({error:Q},409,kZ);let X=iW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,kZ)}return $.json({error:Q},502,kZ)}async function BO1($,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 hJ8($){try{let Z=await k50($),Q=await WO1(Z,$.get("vmClaim").branch);return $.json(Q,200,kZ)}catch(Z){return DO1($,Z)}}function V50($,Z){let Y=(i_0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return i_0.set($,X),X.finally(()=>{if(i_0.get($)===X)i_0.delete($)}),Y}async function EQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,kZ);let Y=Q?.runner??Hn($);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",...kZ}})}}let L=await B.text(),O=Q?.redactRepoDir?Da6(L):L,w=B.headers.get("content-type")??"application/json";return new Response(O,{status:B.status,headers:{"content-type":w,...kZ}})};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 Da6($){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 uJ8($,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 La6($){return lJ8.includes($)}var Wa6,Ha6=524288,yJ8=65536,Fa6=1e4,gJ8=2000,Ua6,i_0,kZ,lJ8,cJ8=()=>{let $=new Z1;$.use("/:virtualMcpId/:branch/*",Ua6),$.post("/:virtualMcpId/:branch/write",(Q)=>EQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Eg(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>EQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Eg(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>EQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Eg(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>EQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Eg(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>EQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Eg(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>EQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Eg(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>EQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Eg(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 EQ(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 EQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>EQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>EQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!La6(Y))return Q.json({error:`step must be one of: ${lJ8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await iL1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await Ba6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,kZ);if(Y==="start"){let G=X0(Q.var.studioContext),W=jd(X.virtualMcpMetadata);try{await DR0({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 EQ(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 ML(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 uX8(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 hJ8(Q);return Z(Q)});let Z=(Q)=>EQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(gJ8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return hJ8(Q);return EQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(gJ8)])})}),$.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 k50(Q),G=await KO1(J,Y.branch,X.base);return Q.json(G,200,kZ)}catch(X){return DO1(Q,X)}return EQ(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,kZ);let Y=Hn(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return V50(X,async()=>{try{await pL1(W,Y,X);let K=I50(J,G);if(K)await fJ8(W,Y,X,K)}catch(K){if(K instanceof zP)return Q.json({error:K.message},403,kZ);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,kZ)}return EQ(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 V50(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,kZ);try{let G=await k50(Q);return await _J8(G,Y.branch,J),Q.json({ok:!0},200,kZ)}catch(G){let W=iW(G)===409||G instanceof a6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,kZ)}});return V50(Y.claimName,()=>EQ(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 V50(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await k50(Q),H=W.base??await K.getDefaultBranch();return await d_0(K,Y.branch,H),Q.json({ok:!0},200,kZ)}catch(W){return DO1(Q,W)}});let X=Hn(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return V50(J,async()=>{try{await pL1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,kZ)}return EQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/judge-review",a5({maxSize:Ha6,onError:(Q)=>Q.json({error:"Payload too large"},413,kZ)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=Hn(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]=mX8(F)&&N?[F,U]:X?await Promise.all([uJ8(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),uJ8(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await k50(Q);return Promise.all([WO1(w,Y.branch),KO1(w,Y.branch)])})();await vW(K,X0(K).id,"judging whether a change needs review");let O=await pX8(K,B,L,typeof H.language==="string"?H.language:void 0);return Q.json(O,200,kZ)}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,kZ);return Q.json({error:F},502,kZ)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=Hn(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 BO1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",a5({maxSize:yJ8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=Hn(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=FO1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=UO1(J,W.resolveType);return BO1(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:yJ8,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):Ed(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=FO1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!vJ8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=UO1(G,K.resolveType);return BO1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var mJ8=D(()=>{G8();OK();Yn();dL1();wd();yX8();tY();Pd();gX8();YG();zH();hX8();lX8();rZ1();j$0();nX8();J7();q5();HO1();bJ8();wR0();NO1();Wa6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Ua6=__0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=u0(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{Ka6(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=r10({orgId:X.id,virtualMcpId:J,branch:G}),H=await Q71(Q,G),F=Y71(H,Y),U=fX8({userId:F,projectRef:K}),N=W.metadata??null,B=await Na6($,{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 f7(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()});i_0=new Map;kZ={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};lJ8=["clone","install","start"]});function dJ8($,Z,Q){let Y=LO1.get($);if(!Y)Y={pending:null,running:!1},LO1.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)wa6($,Y);return J}async function wa6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await ja6(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)LO1.delete($)}}async function ja6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await Kn(Z,Q),W=await Z.listDecofileEntries(G,Y),K=XO1(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=JO1(K,N),O=`${JSON.stringify(B,null,2)}
|
|
3731
3731
|
`;await IJ8(Z.repo,O);let w=L[0]??`${l_0(Y)}/${sL1(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 JO1(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 VJ8(Z,F.values(),X),{decofile:B,skipped:L}=P50(N);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:AH(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:Ea6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof a6)||J>=Oa6-1)throw N;await U$(L7(2000,200,J,2,0.5))}}}function Ea6($){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 q91(Y,$.deps.coAuthor)}var Oa6=3,LO1;var iJ8=D(()=>{fT0();x_0();i4();r$();J7();c_0();LO1=new Map});import{createHmac as pJ8,randomBytes as Pa6,timingSafeEqual as za6}from"crypto";function nJ8(){if(p_0)return p_0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return p_0=$?Buffer.from($):Pa6(32),p_0}function OO1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+Aa6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=pJ8("sha256",nJ8()).update(Y).digest("base64url");return`${Y}.${X}`}function tJ8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(pJ8("sha256",nJ8()).update(Y).digest("base64url"));if(X.length!==J.length||!za6(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 Aa6=21600000,p_0=null;var oJ8=D(()=>{s1()});function n_0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Ta6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=n_0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function rJ8($){let Z;try{Z=n_0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=Ta6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=n_0(G),K=W&&n_0(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 Fn}from"zod";function qa6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Ra6.test($)}function ZG8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function S50($){let Z=$.get("decofileScope");return ym($.var.studioContext,Z.organizationId,Z.repository)}function C50($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof a6)return $.json({error:Q},409);let Y=iW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function QG8(){let $=new Z1;return $.use("/:virtualMcpId/:branch",$G8),$.use("/:virtualMcpId/:branch/*",$G8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await S50(Z),X=await kJ8(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(rJ8(X.decofile),200,{...J,"content-type":"application/json"});let G=OO1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(ZG8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return C50(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 S50(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 C50(Z,X)}}),$.patch("/:virtualMcpId/:branch",Ia6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Va6.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=z50(X.data)}catch(G){if(G instanceof A50)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{b_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(rL1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await S50(Z),W=await dJ8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:Xn(Y)},J),K=OO1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:ZG8(Z)})}catch(G){return C50(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await S50(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(iW(W)!==409)throw W;await d_0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(iW(G)===409)return Z.json({error:"merge-conflict"},409);if(iW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return C50(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await S50(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(iW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return C50(Z,Y)}}),$}var Ra6,sJ8=500,aJ8=1048576,eJ8=1024,Ma6=8388608,Ia6,Va6,$G8;var YG8=D(()=>{wR0();x_0();G8();OK();dL1();v_0();NO1();J7();iJ8();oJ8();HO1();c_0();zH();Ra6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Ia6=a5({maxSize:Ma6,onError:($)=>$.json({error:"Payload too large"},413)}),Va6=Fn.object({set:Fn.record(Fn.string(),Fn.unknown()).optional(),delete:Fn.array(Fn.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)<=sJ8,{message:`Patch cannot touch more than ${sJ8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=aJ8),{message:`Each block must be at most ${aJ8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=eJ8),{message:`Each block key must be at most ${eJ8} characters`}),$G8=__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(!qa6(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||!tJ8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await mJ(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(!Ed(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=I50(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("*",bp),Z.use("*",SZ8),Z.route("/",VZ8($.voiceSessions)),Z.route("/",lC0()),Z.route("/",N78()),Z.route("/",aZ8()),Z.route("/",zX8()),Z.route("/",TX8()),Z.route("/",BX8()),Z.route("/",EX8()),Z.route("/",LX8()),Z.route("/",k_0()),Z.route("/tools",SX8()),Z.route("/",IX8()),Z.route("/",iY8({kvStorage:$.kvStorage})),Z.route("/",mY8()),Z.route("/fs",XX8({getConnection:$.getNatsConnection})),Z.route("/sandbox",cJ8()),Z.route("/decofile",QG8()),Z.route("/",FX8()),Z.route("/",GX8()),Z.route("/deco-sites",mC0()),Z.route("/hosting",lZ8()),Z.route("/monitor",tZ8()),Z.route("/sso",xC0()),Z.route("/",S_0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",fZ8()),$.mountDevAssets)Z.route("/dev-assets",nC0({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 xL1)Z.use(`${Q}/:threadId`,$.mcpAuth);Z.route("/",E68()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler);for(let Q of xL1)Z.route(Q,KX8());return Z.route("/mcp",bI0()),Z.route("/mcp/self",q_0()),Z.route("/mcp",yI0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var JG8=D(()=>{G8();kZ8();CZ8();RC0();yZ8();HD1();cZ8();oZ8();tC0();DP();XD1();DD1();dY8();pY8();JX8();WX8();H40();oB1();gI0();bL1();HX8();UX8();DX8();OX8();gL1();AX8();RX8();VX8();hL1();CX8();uL1();xI0();mJ8();YG8()});import{z as Pg}from"zod";class wO1{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 KG8.Kvm(t_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:t_0.StorageType.Memory,ttl:HG8.nanos(uD),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"?WG8.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=GG8.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,GG8.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"?WG8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var t_0,KG8,HG8,GG8,WG8;var FG8=D(()=>{CJ();eU();r$();t_0=C(SK(),1),KG8=C(zA(),1),HG8=C(lP(),1),GG8=new TextEncoder,WG8=Pg.discriminatedUnion("state",[Pg.object({state:Pg.literal("ready"),agentId:Pg.string()}),Pg.object({state:Pg.literal("creating"),expiresAt:Pg.number()})])});import{z as Un}from"zod";function ka6($){return{model:$.model,instructions:`${EI$}
|
|
3732
|
-
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class jO1{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:ka6({...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:Un.object({session:Un.object({id:Un.string().min(1)}),transport:Un.object({type:Un.literal("webrtc"),sdp:Un.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var UG8=D(()=>{eU()});var NG8;var BG8=D(()=>{NG8=[{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 EO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:wI$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:NG8.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:uD/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 DG8=D(()=>{eU();BG8()});import{z as HJ}from"zod";import{createHash as Sa6,createHmac as Ca6}from"crypto";class o_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Sa6("sha256").update(JSON.stringify(EO1($))).digest("hex"),this.conversationKey=Ca6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new o_0({...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}=HJ.object({agents:HJ.array(HJ.object({agent_id:HJ.string(),name:HJ.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 HJ.object({platform_settings:HJ.object({auth:HJ.object({enable_auth:HJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...EO1(this.config)},AbortSignal.timeout(15000));return HJ.object({agent_id:HJ.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 HJ.object({token:HJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return HJ.object({token:HJ.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 LG8=D(()=>{DG8()});import{createHmac as _a6,timingSafeEqual as va6}from"crypto";import{z as Nn}from"zod";function wG8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return _a6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function jG8($,Z){let Q=Buffer.from(JSON.stringify(OG8.parse($))).toString("base64url");return`${Q}.${wG8(Q,Z)}`}function EG8($,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(wG8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!va6(W,G))return null;try{let K=OG8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+uD)return null;return K.data}catch{return null}}var OG8;var PG8=D(()=>{eU();OG8=Nn.object({sessionId:Nn.string().uuid(),organizationId:Nn.string().min(1).max(256),userId:Nn.string().min(1).max(256),threadId:Nn.string().min(1).max(256),expiresAt:Nn.number().int().positive()})});import{z as PO1}from"zod";function zG8($,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 zO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var zO1;var AG8=D(()=>{zO1=PO1.object({provider:PO1.enum(["elevenlabs","openai"]),model:PO1.string().trim().min(1).max(128)})});import{createHash as ba6}from"crypto";import{z as Bn}from"zod";function Dn($){return`user.${ba6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class TO1{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 TG8.Kvm(s_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:s_0.StorageType.Memory,ttl:RG8.nanos(uD),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=zG8(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()+uD},W=jG8(G,this.deps.secret),K=await this.kv(),H=Dn(G),F=await K.get(H),U=F?.operation==="PUT"?r_0.parse(F.json()):null,N=AO1.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:Dn($)});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=EG8(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=Dn(Q),J=await Y.get(X),G=J?.operation==="PUT"?r_0.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,AO1.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=Dn(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?r_0.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,AO1.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(Dn($));if(Q?.operation==="PUT"&&r_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Dn($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var s_0,TG8,RG8,r_0,AO1;var qG8=D(()=>{CJ();eU();PG8();AG8();s_0=C(SK(),1),TG8=C(zA(),1),RG8=C(lP(),1),r_0=Bn.object({sessionId:Bn.string().uuid(),expiresAt:Bn.number(),connected:Bn.boolean().optional(),conversation:zO1.optional(),characters:Bn.number().int().nonnegative(),requests:Bn.number().int().nonnegative()}),AO1=new TextEncoder});function xa6($){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 fa6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},MG8=()=>{let $=new Z1;return $.use("*",fa6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await wG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:xa6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var IG8=D(()=>{G8();s1();VS0()});import{z as y1}from"zod";function bN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function pa6($){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 na6($,Z,Q){try{return JSON.parse($)}catch{throw new SG8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function ta6($){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:na6(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 oa6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?UU(Q.function.parameters):UU({type:"object",properties:{}});return[Q.function.name,p$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function ra6($){if(!$)return;return{openai:{response_format:$}}}function sa6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function VG8($,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 kG8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var ya6=256,ga6,ha6,ua6,la6,ca6,ma6,da6,ia6,SG8,CG8,_G8;var vG8=D(()=>{n4();G8();Yn();tH();ga6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),ha6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),ua6=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(ha6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),la6=y1.object({type:y1.literal("text")}),ca6=y1.object({type:y1.literal("json_object")}),ma6=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()})}),da6=y1.union([la6,ca6,ma6]),ia6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(ua6),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(ga6).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:da6.optional(),user:y1.string().optional()});SG8=class SG8 extends Error{constructor($){super($);this.name="MessageConversionError"}};CG8=new Z1;CG8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(bN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(bN("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(bN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=ia6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(bN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=pa6(J.model);if(!G)return $.json(bN("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)=>xz(E.providerId));if(!j)return $.json(bN("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(bN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=ta6(J.messages),N=J.tools?oa6(J.tools):void 0,B=ra6(J.response_format),L=sa6(),O=Math.floor(Date.now()/1000);if(J.stream)return ML($,async(w)=>{let j=VG8(F,U,N,J,B,$.req.raw.signal);try{let E=gd(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>=ya6)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:kG8(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=VG8(F,U,N,J,B,$.req.raw.signal),j=await zE(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:kG8(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(bN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(bN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(bN(X.message,"server_error"),500)}});_G8=CG8});function aa6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function bG8(){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=u0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!zZ(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(xA(U)!==J)continue;if(!aa6(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 xG8=D(()=>{G8();F3()});var yG8;var fG8=D(()=>{yG8={name:"decocms",version:"4.462.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 Ze6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??$e6}}var gG8,$e6="https://ph.studio.decocms.com",hG8;var uG8=D(()=>{G8();Ya();Ny();S9();s1();bB1();fG8();gG8=new Z1;gG8.get("/",($)=>{let Z={version:yG8.version,theme:u9$(),...GH().logo&&{logo:GH().logo},...sD()&&{internalUrl:Ut1()},...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:D98(),posthog:Ze6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:UF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});hG8=gG8});function zg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function RO1($){return(zg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function lG8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(zg($))}&sz=${Z}`}function Qe6($,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 cG8($){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=Qe6(`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 Ye6,mG8;var dG8=D(()=>{Ye6=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())}),mG8=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(Ye6)})),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 iG8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${bW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function a_0($,Z={}){let Q=await fetch(iG8($,"",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 mG8.parse(await Q.json())}async function pG8($,Z={}){let Q=await fetch(iG8($,".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 qO1=D(()=>{dG8();GD()});import{join as nG8}from"path";async function Je6($){try{let Z=await a_0($,{signal:AbortSignal.timeout(Xe6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||RO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function zG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function Ge6($,Z){let Q=zg($),Y=Z?.brand?.trim()||RO1(Q),X=lG8(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=cG8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${zG(W)}</title>`,`<meta name="description" content="${zG(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="${zG(W)}" />`,`<meta property="og:description" content="${zG(K)}" />`,`<meta property="og:url" content="${zG(G)}" />`,`<meta property="og:image" content="${zG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${zG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${zG(W)}" />`,`<meta name="twitter:description" content="${zG(K)}" />`,`<meta name="twitter:image" content="${zG(H)}" />`,`<meta name="twitter:image:alt" content="${zG(F)}" />`,`<link rel="canonical" href="${zG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${zG(G)}.md" />`,`<link rel="icon" href="${zG(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 jO1{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:ka6({...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:Un.object({session:Un.object({id:Un.string().min(1)}),transport:Un.object({type:Un.literal("webrtc"),sdp:Un.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var UG8=D(()=>{eU()});var NG8;var BG8=D(()=>{NG8=[{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 EO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:wI$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:NG8.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:uD/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 DG8=D(()=>{eU();BG8()});import{z as HJ}from"zod";import{createHash as Sa6,createHmac as Ca6}from"crypto";class o_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Sa6("sha256").update(JSON.stringify(EO1($))).digest("hex"),this.conversationKey=Ca6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new o_0({...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}=HJ.object({agents:HJ.array(HJ.object({agent_id:HJ.string(),name:HJ.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 HJ.object({platform_settings:HJ.object({auth:HJ.object({enable_auth:HJ.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...EO1(this.config)},AbortSignal.timeout(15000));return HJ.object({agent_id:HJ.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 HJ.object({token:HJ.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return HJ.object({token:HJ.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 LG8=D(()=>{DG8()});import{createHmac as _a6,timingSafeEqual as va6}from"crypto";import{z as Nn}from"zod";function wG8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return _a6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function jG8($,Z){let Q=Buffer.from(JSON.stringify(OG8.parse($))).toString("base64url");return`${Q}.${wG8(Q,Z)}`}function EG8($,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(wG8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!va6(W,G))return null;try{let K=OG8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+uD)return null;return K.data}catch{return null}}var OG8;var PG8=D(()=>{eU();OG8=Nn.object({sessionId:Nn.string().uuid(),organizationId:Nn.string().min(1).max(256),userId:Nn.string().min(1).max(256),threadId:Nn.string().min(1).max(256),expiresAt:Nn.number().int().positive()})});import{z as PO1}from"zod";function zG8($,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 zO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var zO1;var AG8=D(()=>{zO1=PO1.object({provider:PO1.enum(["elevenlabs","openai"]),model:PO1.string().trim().min(1).max(128)})});import{createHash as ba6}from"crypto";import{z as Bn}from"zod";function Dn($){return`user.${ba6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class TO1{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 TG8.Kvm(s_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:s_0.StorageType.Memory,ttl:RG8.nanos(uD),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=zG8(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()+uD},W=jG8(G,this.deps.secret),K=await this.kv(),H=Dn(G),F=await K.get(H),U=F?.operation==="PUT"?r_0.parse(F.json()):null,N=AO1.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:Dn($)});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=EG8(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=Dn(Q),J=await Y.get(X),G=J?.operation==="PUT"?r_0.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,AO1.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=Dn(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?r_0.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,AO1.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(Dn($));if(Q?.operation==="PUT"&&r_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(Dn($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var s_0,TG8,RG8,r_0,AO1;var qG8=D(()=>{CJ();eU();PG8();AG8();s_0=C(SK(),1),TG8=C(zA(),1),RG8=C(lP(),1),r_0=Bn.object({sessionId:Bn.string().uuid(),expiresAt:Bn.number(),connected:Bn.boolean().optional(),conversation:zO1.optional(),characters:Bn.number().int().nonnegative(),requests:Bn.number().int().nonnegative()}),AO1=new TextEncoder});function xa6($){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 fa6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},MG8=()=>{let $=new Z1;return $.use("*",fa6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await wG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:xa6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var IG8=D(()=>{G8();s1();VS0()});import{z as y1}from"zod";function bN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function pa6($){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 na6($,Z,Q){try{return JSON.parse($)}catch{throw new SG8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function ta6($){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:na6(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 oa6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?UU(Q.function.parameters):UU({type:"object",properties:{}});return[Q.function.name,p$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function ra6($){if(!$)return;return{openai:{response_format:$}}}function sa6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function VG8($,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 kG8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var ya6=256,ga6,ha6,ua6,la6,ca6,ma6,da6,ia6,SG8,CG8,_G8;var vG8=D(()=>{n4();G8();Yn();tH();ga6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),ha6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),ua6=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(ha6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),la6=y1.object({type:y1.literal("text")}),ca6=y1.object({type:y1.literal("json_object")}),ma6=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()})}),da6=y1.union([la6,ca6,ma6]),ia6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(ua6),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(ga6).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:da6.optional(),user:y1.string().optional()});SG8=class SG8 extends Error{constructor($){super($);this.name="MessageConversionError"}};CG8=new Z1;CG8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(bN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(bN("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(bN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=ia6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(bN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=pa6(J.model);if(!G)return $.json(bN("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)=>xz(E.providerId));if(!j)return $.json(bN("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(bN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=ta6(J.messages),N=J.tools?oa6(J.tools):void 0,B=ra6(J.response_format),L=sa6(),O=Math.floor(Date.now()/1000);if(J.stream)return ML($,async(w)=>{let j=VG8(F,U,N,J,B,$.req.raw.signal);try{let E=gd(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>=ya6)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:kG8(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=VG8(F,U,N,J,B,$.req.raw.signal),j=await zE(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:kG8(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(bN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(bN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(bN(X.message,"server_error"),500)}});_G8=CG8});function aa6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function bG8(){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=u0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!zZ(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(xA(U)!==J)continue;if(!aa6(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 xG8=D(()=>{G8();F3()});var yG8;var fG8=D(()=>{yG8={name:"decocms",version:"4.462.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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 Ze6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??$e6}}var gG8,$e6="https://ph.studio.decocms.com",hG8;var uG8=D(()=>{G8();Ya();Ny();S9();s1();bB1();fG8();gG8=new Z1;gG8.get("/",($)=>{let Z={version:yG8.version,theme:u9$(),...GH().logo&&{logo:GH().logo},...sD()&&{internalUrl:Ut1()},...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:D98(),posthog:Ze6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:UF()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});hG8=gG8});function zg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function RO1($){return(zg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function lG8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(zg($))}&sz=${Z}`}function Qe6($,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 cG8($){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=Qe6(`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 Ye6,mG8;var dG8=D(()=>{Ye6=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())}),mG8=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(Ye6)})),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 iG8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${bW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function a_0($,Z={}){let Q=await fetch(iG8($,"",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 mG8.parse(await Q.json())}async function pG8($,Z={}){let Q=await fetch(iG8($,".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 qO1=D(()=>{dG8();GD()});import{join as nG8}from"path";async function Je6($){try{let Z=await a_0($,{signal:AbortSignal.timeout(Xe6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||RO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function zG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function Ge6($,Z){let Q=zg($),Y=Z?.brand?.trim()||RO1(Q),X=lG8(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=cG8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${zG(W)}</title>`,`<meta name="description" content="${zG(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="${zG(W)}" />`,`<meta property="og:description" content="${zG(K)}" />`,`<meta property="og:url" content="${zG(G)}" />`,`<meta property="og:image" content="${zG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${zG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${zG(W)}" />`,`<meta name="twitter:description" content="${zG(K)}" />`,`<meta name="twitter:image" content="${zG(H)}" />`,`<meta name="twitter:image:alt" content="${zG(F)}" />`,`<link rel="canonical" href="${zG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${zG(G)}.md" />`,`<link rel="icon" href="${zG(X)}" sizes="any" />`].join(`
|
|
3733
3733
|
`)}function We6($,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 tG8($){let Z=new Z1;return Z.get("/:domain/og.png",async(Q)=>{let Y=zg(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(nG8($,"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(`${bW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(Ke6)}),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=zg(Q.req.param("file").replace(/\.md$/,""));try{let X=await pG8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(He6)});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=$?nG8($,"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 Je6(zg(Y)),K=Ge6(Y,W);return Q.html(We6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Xe6=2500,Ke6=1e4,He6=1e4;var oG8=D(()=>{G8();GD();qO1();s1()});function e_0($,Z){return fetch(`${bW({})}${$}`,Z)}async function Fe6($,Z){let Q=await a_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function Ne6($){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 Ue6,VL,rG8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},sG8;var aG8=D(()=>{G8();B3();GD();qO1();Ue6=new Set(["complete","errored","terminated","unknown"]);VL=new Z1;VL.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});VL.use("/link-token/*",rG8);VL.use("/suggest",rG8);VL.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 Fe6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});VL.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}=Ne6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await e_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Nj({})}`},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)}});VL.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await e_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${Nj({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Ue6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});VL.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await e_0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});VL.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await e_0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});sG8=VL});var Be6=1048576,MO1;var eG8=D(()=>{G8();OK();s1();EB1();MO1=new Z1;MO1.post("/webhook",a5({maxSize:Be6,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(!I58(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=V58(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await k58(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as De6}from"crypto";function we6($,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 De6(Buffer.from(X),Buffer.from(Y))}function je6($,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 $38($){let Z=new Z1;return Z.post("/webhook",a5({maxSize:Le6,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(!we6(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"&&!Oe6.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 N$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=je6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Ee6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Ee6($,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 mf$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Le6=5242880,Oe6;var Z38=D(()=>{G8();OK();YG();g7();Oe6=new Set(["check_suite","issue_comment"])});import{DBOS as VO1,SchedulerMode as Pe6}from"@dbos-inc/dbos-sdk";async function Ae6(){try{return await Te6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function Te6(){if(!U$0())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (gZ1(),yZ1)),Promise.resolve().then(() => (fZ1(),xZ1))]),Q=await N$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=Gq$({sandboxes:J,pools:G,records:await Wq$(X,J,G),legacyPools:oT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await Kq$(K,OF0(X,new qX(O0().encryptionKey)),{now:W,orgFsLifetimeMs:aT0}),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 Re6($,Z){let Q=await VO1.runStep(Ae6,{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 Q38(){if(IO1)return;if(!O0().agentSandboxEnabled||!U$0())return;IO1=VO1.registerWorkflow(Re6,{name:"sandboxCredentialPushWorkflow"}),VO1.registerScheduled(IO1,{name:"sandboxCredentialPushWorkflow",crontab:ze6,mode:Pe6.ExactlyOncePerIntervalWhenActive})}var ze6="1-59/10 * * * *",IO1=null;var Y38=D(()=>{dG();qO();R61();eT0();rT0();YG();s1()});function X38($){let Z=new LL($.db,new qX($.encryptionKey)),Q=new Z1;return Q.get("/attachments/:token",async(Y)=>{let X=rb$(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 oQ(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 J38=D(()=>{G8();qO();YY1();IE();v60()});import{DBOS as AP,SchedulerMode as qe6}from"@dbos-inc/dbos-sdk";function G38($){SO1=$}function _O1(){if(!SO1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return SO1}function vO1(){let $=_O1();return new LL($.db,new qX($.encryptionKey))}async function Se6($){try{let Z=await vO1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await mH(_O1().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 oQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${Ie6}m"`,W=0,K;for(let H=0;H<Ve6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await TU1(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 Ce6($,Z){let Q=await AP.runStep(()=>vO1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>AP.runStep(()=>Se6(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 _e6($,Z){try{let Q=await vO1().getById($);if(!Q?.enabled)return"disabled";let Y=await mH(_O1().db,Q.organizationId);if(!Y)return"disabled";let X=await TU1(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 ve6($,Z){await AP.sleep(CS0()+ke6),await AP.runStep(()=>_e6($,Z),{name:"settleJiraMove"})}async function W38($,Z){if(!CO1)throw Error("[jira-trigger] settle workflow is not registered");await AP.startWorkflow(CO1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function K38(){if(kO1)return;CO1=AP.registerWorkflow(ve6,{name:"jiraSettleWorkflow"}),kO1=AP.registerWorkflow(Ce6,{name:"jiraTriggerSweepWorkflow"}),AP.registerScheduled(kO1,{name:"jiraTriggerSweepWorkflow",crontab:Me6,mode:qe6.ExactlyOncePerIntervalWhenActive})}var Me6="7-59/10 * * * *",Ie6=35,Ve6=5,ke6=5000,SO1=null,CO1=null,kO1=null;var bO1=D(()=>{qO();v60();ed();IE();zU1();_S0()});function H38($){let Z=new LL($.db,new qX($.encryptionKey));async function Q(X,J){let G=l18(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await W38(W.id,G)}let Y=new Z1;return Y.post("/webhook/:secret",a5({maxSize:be6}),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 be6=1048576;var F38=D(()=>{G8();OK();qO();bO1();_S0();v60()});function U38($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var N38,xe6,fe6,B38;var D38=D(()=>{G8();CJ();Wi();Om();N38=new Z1,xe6=["range","if-none-match","if-modified-since"],fe6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];N38.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(vp($))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 l80(Y,Z);if(!X)throw new R1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&yW()){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 U38(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of xe6){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 fe6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),U38(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});B38=N38});var _50=b((Ag)=>{var ye6=Ag&&Ag.__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]}),ge6=Ag&&Ag.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))ye6(Z,$,Q)};Object.defineProperty(Ag,"__esModule",{value:!0});ge6(kG(),Ag)});var w38=b((L38)=>{Object.defineProperty(L38,"__esModule",{value:!0});L38.version=void 0;L38.version="3.4.0"});var P38=b((xN)=>{var he6=xN&&xN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(xN,"__esModule",{value:!0});xN.NodeTransport=xN.VERSION=void 0;xN.nodeResolveHost=ie6;var e5=_50(),ue6=M0("net"),xO1=M0("tls"),le6=M0("path"),j38=M0("fs"),ce6=he6(M0("dns")),me6=w38();xN.VERSION=me6.version;var de6="nats.js";class E38{socket;version;lang;yields=[];signal=(0,e5.deferred)();closedNotification=(0,e5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=de6,this.version=xN.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,ue6.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,le6.resolve)($),!(0,j38.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,j38.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,xO1.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,xO1.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 xO1.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}}xN.NodeTransport=E38;function ie6($){let Z=(0,e5.deferred)();return ce6.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 q38=b((R38)=>{Object.defineProperty(R38,"__esModule",{value:!0});R38.connect=pe6;var z38=P38(),A38=_50(),T38=_50();function pe6($={}){if((0,T38.hasWsProtocol)($))return Promise.reject(T38.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,A38.setTransportFactory)({factory:()=>{return new z38.NodeTransport},dnsResolveFn:z38.nodeResolveHost}),A38.NatsConnectionImpl.connect($)}});var M38=b((kL)=>{var te6=kL&&kL.__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]}),oe6=kL&&kL.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))te6(Z,$,Q)};Object.defineProperty(kL,"__esModule",{value:!0});kL.connect=void 0;var re6=q38();Object.defineProperty(kL,"connect",{enumerable:!0,get:function(){return re6.connect}});oe6(_50(),kL)});function S38($){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:ee6,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=L7(ae6,se6,L-1,2,0.5);await U$(O)}}return{init(N,B){if(X)return;X=!0,J=!1;let L=B?.creds?I38.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=k38.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 V38.connect($)}var I38,V38,k38,se6=100,ae6=3000,ee6=3000;var C38=D(()=>{r$();I38=C(lP(),1),V38=C(M38(),1),k38=C(SK(),1)});function $v0($){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 Zv0($,Z){return`${$}.${Z}`}class fO1{cache;constructor($){this.cache=$v0({ttlMs:$?.ttlMs??Z05,maxSize:$?.maxSize??Q05})}async get($,Z){return this.cache.get(Zv0($,Z))??null}async set($,Z,Q){this.cache.set(Zv0($,Z),Q)}async invalidate($,Z){this.cache.delete(Zv0($,Z)),this.cache.delete(Zv0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Z05=600000,Q05=5000;var _38=()=>{};function Qv0($,Z){return`${$}:${Z}`}function yO1($){let Z=$v0({ttlMs:$?.ttlMs??Y05,maxSize:$?.maxSize??X05}),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(v38,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(Qv0(K,H))},set(K,H,F){Z.set(Qv0(K,H),F)},invalidate(K,H){Z.delete(Qv0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(v38),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(Qv0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var v38="studio.ai-provider-keys.invalidate",Y05=30000,X05=5000;var b38=()=>{};class gO1{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 x38=($)=>{let Z;return()=>Z??=$()},hO1,uO1;var f38=D(()=>{S6();hO1=x38(()=>Q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),uO1=x38(()=>Q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function U05($=h38){return{name:HN,subjects:[`${IJ1}.>`],storage:KF.StorageType.File,max_age:W05,max_bytes:H05,max_msgs_per_subject:F05,discard:KF.DiscardPolicy.Old,retention:KF.RetentionPolicy.Limits,duplicate_window:K05,num_replicas:$}}class u38{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 y38($){let Z=g38.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function L05($,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 O05($,Z){return $.info?.cluster?Z:1}function w05($){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 lO1{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=U05(X);try{await Y.streams.info(HN),await Y.streams.update(HN,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(HN,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(HN),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await KF.jetstreamManager($),X=O05($,h38);try{await Z(Y,X)}catch(J){if(X<=1||!w05(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:ji});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=L05(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=lh$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=kJ1(H,{runId:Z}),N=performance.now()-F;hO1().record(N),uO1().add(1,{"org.id":Y??"unknown"}),D05?.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?y38(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(),B05)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:y38(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:ji}),!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=kJ1(Z,{runId:$,dedup:Q});hO1().record(performance.now()-X),uO1().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=uh$({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"?KF.DeliverPolicy.New:KF.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=xE($),W;try{W=await E8(async()=>{return(await Y.consumers.get(HN,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:ji})}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let F=QI0({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(aM0()).pipeThrough(eM0()).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(HN,{filter:xE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var KF,g38,J05=($)=>{let Z;return()=>Z??=$()},G05,W05=86400000000000,K05=120000000000,H05=4294967296,h38,F05=500000,N05,B05,D05;var l38=D(()=>{r$();SJ1();YI0();$I0();S6();f38();KF=C(SK(),1),g38=C(lP(),1),G05=J05(()=>Q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),h38=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);N05=process.env.STREAM_ENCODE_TRACE==="1",B05=process.env.DECOPILOT_STREAM_TRACE==="1";D05=N05?new u38:null});function Yv0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,vF(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 c38=D(()=>{p8()});class cO1{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 j05($,Z,Q={}){let Y=$.startsWith("thread:")?yH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function mO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await aU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await BE($,{threadId:X,runBranch:G?.branch}),K=await w10($,Q,P61(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=j05(W,await ER0($,X),{flat:bf(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 I3(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 m38=D(()=>{J7();tY();g7()});async function d38($,Z,Q){let Y=Z.organizationId;if(!YJ(Z))return!1;if(!Wy(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=yU(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 i38=D(()=>{I4();$X();Zi();dH();T9()});function q05($){return $ instanceof iX}function p38($,Z){return Z-$>=T05}class dO1{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??E05;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??z05,Q=this.options.itemIntervalMs??P05,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()-sQ1),zX1);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()-R05));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 jX1(this.taskBoard,X,Y),await EX1(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||YJ(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await mO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!p38(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 iH(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 pH(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),q05(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()+A05)).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(!p38(PD(Q,Z.reviewCycleStartedAt),Date.now()))return;await iH($,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(!YJ(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 mO1(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 Xi(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 d38(G,Y,W))return!0;if(await ku$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!DX1(W))return!1;return await Qi(G,Y,{previewMatchesHead:LX1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await CE($,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 E05=60000,P05=300000,z05=50,A05=60000,T05=900000,R05=120000;var n38=D(()=>{I4();HM0();m38();WN();e80();dH();i38();T9();dW();AX1();g7();w80();Yi()});import{readdir as M05,rm as Xv0}from"fs/promises";import{join as Jv0}from"path";async function Gv0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-I05),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Tg($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await t38($,X,Z);else if(!X.startsWith(".")){let J=Jv0($,X),G=await Tg(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await t38(J,K,Z)}if((await Tg(J)).length===0)await Xv0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function t38($,Z,Q){let Y=0,X=Jv0($,Z),J=await Tg(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=Jv0(X,W),H=await Tg(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=Jv0(K,U);await Xv0(B,{recursive:!0,force:!0}),Y++}}if((await Tg(K)).length===0)await Xv0(K,{recursive:!0,force:!0})}if((await Tg(X)).length===0)await Xv0(X,{recursive:!0,force:!0});return Y}async function Tg($){try{return(await M05($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var I05=30;var iO1=()=>{};import{DBOS as pO1,SchedulerMode as V05}from"@dbos-inc/dbos-sdk";async function S05(){let $=[AK(),_g(),cN()],Z=0;for(let Q of $)try{Z+=await Gv0(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 C05($,Z){await pO1.runStep(()=>S05(),{name:"monitoringRetention"})}function r38(){if(o38)return;o38=!0;let $=pO1.registerWorkflow(C05,{name:"monitoringRetentionWorkflow"});pO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:k05,mode:V05.ExactlyOncePerIntervalWhenActive})}var k05="23 4 * * *",o38=!1;var s38=D(()=>{p3();iO1()});function a38($){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 rQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await CA($.db,Z,Y.role);return X.boundAuth=UB1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new D2(Q,void 0,X.boundAuth,Y.role,"self"),SE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var e38=D(()=>{LW();xU()});function _05(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function v05(){return{services:_05(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function x05(){for(let $ of b05)$()}function $W8($){let Z=[...nO1.logs,$];nO1={...nO1,logs:Z.length>500?Z.slice(-500):Z},x05()}function tO1(){return f05}var nO1,b05,f05=!1;var oO1=D(()=>{nO1=v05(),b05=new Set});import{EventEmitter as y05}from"events";var rO1;var ZW8=D(()=>{oO1();rO1=new y05;rO1.on("request",($)=>{$W8($)})});function QW8(){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=Ln(N.params.name),L=N.params.arguments||{},O=Object.keys(L).map((j)=>Ln(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}${Ln(N.method)}${K9.reset}`}}catch{}}let W=Ln(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${K9.mcp}${Ln(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=h05(Y),H=G?"\u25C0":"\u2190";if(!tO1())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=g05(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,L=G?"\u25B6":"\u2192";if(!tO1())console.log(`${K9.dim}${L}${K9.reset} ${K}${Y}${K9.reset} ${W}${J?` ${J}`:""} ${N}${U}${K9.reset} ${K9.duration}${B}${K9.reset}`);rO1.emit("request",{method:Y,path:Ln(X),status:U,duration:F,timestamp:new Date})}}}var K9,g05=($)=>{if($>=500)return K9.serverError;if($>=400)return K9.clientError;if($>=300)return K9.redirect;return K9.ok},h05=($)=>{return K9[$]||K9.reset},Ln=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var YW8=D(()=>{oO1();ZW8();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 WW8}from"crypto";import{mkdir as u05,readdir as l05,rm as XW8,stat as KW8}from"fs/promises";import{join as aO1,relative as c05}from"path";import{z as Y8}from"zod";function FW8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return aO1(m05,Z)}function UW8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function sO1($,Z){let Q=FW8($),Y=UW8(Z);return aO1(Q,Y)}function d05($,Z,Q,Y){let X=O0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return WW8("sha256",X).update(J).digest("hex")}function GW8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=d05(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${UW8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function NW8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${WW8("md5","etag").update(Y).digest("hex")}"`}async function BW8($,Z,Q,Y,X){try{let J=await l05($,{withFileTypes:!0});for(let G of J){let W=aO1($,G.name),H=c05(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 BW8(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 KW8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:NW8(W,F.mtime,F.size)})}catch{}}}}catch{}}function DW8($,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=FW8(Y);await u05(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await BW8(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=sO1(Y,J.key),W=await KW8(G);return{contentType:ND1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:NW8(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=FL(J.expiresIn,JW8);return{url:GW8(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=FL(J.expiresIn,JW8);return{url:GW8(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=sO1(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=sO1(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 eO1($,Z,Q){let Y=DW8(Z,Q),X=new Aw({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:fZ});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 _3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),GK(X,J,$,"mcp:dev-assets")}async function LW8($,Z,Q,Y){let J=DW8(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 m05="./data/assets",JW8=3600,HW8,OW8;var wW8=D(()=>{s1();Mi();G8();EG0();qi();VJ();UL();tC0();HW8=new Z1;HW8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return eO1($.req.raw,Z,Y)});OW8=HW8});var jW8={};Q6(jW8,{mountDevRoutes:()=>i05});function i05($,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 eO1(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 LW8(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",OW8);let Q=new Z1;Q.use("*",GF({mountPath:"/api/dev-assets"})),Q.route("/",nC0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var EW8=D(()=>{G8();JD1();tC0();wW8()});var kW8={};Q6(kW8,{watchHandler:()=>VW8,resolveCorsOrigin:()=>MW8,isSsoExemptPath:()=>RW8,isAllowedOAuthRedirectUri:()=>IW8,createApp:()=>Z15});import{readFileSync as p05}from"fs";import{PrometheusSerializer as n05}from"@opentelemetry/exporter-prometheus";import{DBOS as SL}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as r05,oAuthProtectedResourceMetadata as s05}from"better-auth/plugins";async function t05($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,zW8(PW8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),zW8(PW8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function zW8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function RW8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${_C0}/`)||$.startsWith(`${MC0}/`)}function qW8($){return $==="local.studio.decocms.com"}function MW8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(qW8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function IW8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||qW8($.hostname)}async function Z15($={}){let Z=$.database??L8(),Q=!1;Z5.stop().catch((J0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",J0)});let Y,X,J,G,W=new fO1,K,H,F,U=null;if($.disableNats)K=yO1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new K40,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=S38();let J0=O0().natsCredsPath,K0;if(J0)try{K0=p05(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=r$1()?new v$1({getJetStream:()=>U.getJetStream()}):null;A0?.init().catch(()=>{}),Y=A0;let T0=new D81({getJetStream:()=>U.getJetStream()});T0.init().catch(()=>{}),X=T0;let H1=new Hy(KX1,{getJetStream:()=>U.getJetStream()}),c$=new Hy(j80,{getJetStream:()=>U.getJetStream()});H1.init().catch(()=>{}),c$.init().catch(()=>{}),J={reads:H1,cards:c$};let t$=new X31({getJetStream:()=>U.getJetStream()});t$.init().catch(()=>{}),G=t$,K=yO1({getConnection:()=>U.getConnection()}),H=new gO1({getConnection:()=>U.getConnection()}),F=new lO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),o58(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(),wD$(()=>U.getConnection()),F.init().catch((H8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",H8)})})}if(TP)await TP();b$1(Y),O81(X),j81(()=>U?.getConnection()??null),HX1(J),J31(G);let B={storage:new ju(Z.db),sseHub:Z5,onThreadFinished:async(J0,K0)=>Gi(new M3(Z.db),J0,K0,new mG(Z.db))},L=new sX1(B),O=new S60(Z.db),w=new cO1(O);w.start(),Iu$(H),H.start((J0)=>{cM0(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;eB1(j),U?.onReady(()=>eB1(j)),h31(j),U?.onReady(()=>h31(j)),F.init().catch((J0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",J0)}),TP=async()=>{await L.stopAll(),L.dispose(),w.dispose(),H.stop().catch(()=>{}),wZ8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),jD$(),G.teardown(),b$1(null),O81(null),j81(null),HX1(null),J31(null)};let E=new Z1;if(E.use("*",Z31({enabled:(J0)=>_p(J0,"debug")==="1"})),E.use("*",Vv0),E.use("/*",d58({origin:(J0,K0)=>MW8(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("*",QW8());E.use("*",async(J0,K0)=>{if(await K0(),qn(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(NX.HEALTH,(J0)=>{if(Q)return J0.json({status:"shutting_down"},503);return J0.json({status:"ok"})}),E.get(NX.HEALTH_LIVE,(J0)=>{return J0.json({status:"ok"})}),E.get(NX.HEALTH_READY,async(J0)=>{if(Q)return J0.json({status:"shutting_down"},503);let K0={};if(K0.postgres={status:await t05(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(NX.METRICS,async(J0)=>{try{let K0=await _v0.collect(),A0=o05.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(`${NX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(J0)=>{let K0=J0.req.param("queueName");if(!a05.has(K0))return J0.json({error:`Unknown queue: ${K0}`},404);let[A0,T0]=await Promise.all([SL.listQueuedWorkflows({queueName:K0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),SL.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",hG8),E.route("/api/_reports",sG8),E.route("/api/_stripe",MO1),E.route("/api/_github",$38({taskBoard:()=>i,contextFactory:()=>y})),E.route("/api/_git",up);let T={db:Z.db,encryptionKey:O0().encryptionKey};E.route("/api/_jira",H38(T)),E.route("/api/_jira",X38(T)),E.route("/report",tG8($.clientDir)),E.route("/api/auth/custom",L98),E.route("/api/auth/desktop",E98),E.all("/api/auth/admin/*",XZ8),E.all("/api/auth/*",async(J0)=>{return await x8.handler(J0.req.raw)});let z=j68();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",d60),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",d60),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",V60),E.route("/",T68()),E.use("/oauth-proxy/:connectionId/*",d60),E.all("/oauth-proxy/:connectionId/*",AW8);let A=async(J0)=>{let A0=await e05()(J0.req.raw),T0=await A0.json();return Response.json(T0,A0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",d60),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=p58({ttlMs:120000}),_=await w58({db:Z.db,auth:x8,encryption:{key:O0().encryptionKey},observability:{tracer:gL,meter:Q$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});rQ.set(_),$t1({db:Z.db,baseUrl:m5()}),j58({db:Z.db}),A58({db:Z.db}),S58({db:Z.db}),G38({db:Z.db,encryptionKey:O0().encryptionKey}),ex$({db:Z.db}),f58({db:Z.db}),kf$({db:Z.db});let V=WJ0(Z.db),g=new Js(Z.db),y=a38({db:Z.db});sG1({storage:V,studioContextFactory:y}),mJ1({systemDatabaseUrl:Za0(O0().databaseUrl,O0().databasePgSsl),studioContextFactory:y,deps:{runRegistry:L,cancelBroadcast:H,streamBuffer:F,sseHub:Z5}}),fJ1({dispatchRunFn:vh$,studioContextFactory:y,deps:{runRegistry:L,cancelBroadcast:H,streamBuffer:F,sseHub:Z5}});let l=new ju(Z.db),i=new M3(Z.db),p=new mG(Z.db),U0=new dO1(i,y,p);if(O0().taskBoardReviewSweeperEnabled){U0.start();let J0=TP;TP=async()=>{await J0?.(),U0.dispose()}}$u$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let J0=U?.getConnection();return J0?await TW8.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(Yv0(Z5,K0,J0,A0),A0)await Gi(i,J0,K0,p);return A0},markRunRequiresAction:async(J0,K0)=>{let A0=await l.requiresActionIfInProgress(J0,K0);return Yv0(Z5,K0,J0,A0),A0},markRunFailed:async(J0,K0,A0,T0)=>{let H1=await l.markRunFailed(J0,K0,A0,T0);if(Yv0(Z5,K0,J0,H1),H1)await Gi(i,J0,K0,p);return H1},clearSynthesizedError:async(J0,K0)=>{await l.messageParts().replaceMessageParts(J0,bE(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);Z5.emit(K0,vF(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)}}),Jh$({studioContextFactory:y,systemDatabaseUrl:Za0(O0().databaseUrl,O0().databasePgSsl),streamBuffer:F}),r38(),Zt1(),P58(),R58(),_58(),K38(),Xf$(),g58(),Sf$(),Q38();let v0=async(J0,K0,A0)=>{let T0=await V.findById(J0,K0);if(!T0)throw Error("Automation not found");return $31({automationId:T0.id,organizationId:T0.organization_id,triggerId:null})},G0=new gp(V,({automation:J0,trigger:K0,contextMessages:A0,idempotencyKey:T0})=>W40({automationId:J0.id,organizationId:J0.organization_id,triggerId:K0.id,contextMessages:A0},{idempotencyKey:T0})),N0=[AK(),_g(),cN()];for(let J0 of N0)Gv0(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(Mv0(J0.req.path))return K0();let A0={measure:async(H1,c$)=>{JK(J0,H1);try{return await c$()}finally{v3(J0,H1)}}},T0=await rQ.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/*",bp),E.use("/api/:org/v1/*",bp),E.use("/api/:org/files/*",bp),E.use("*",async(J0,K0)=>{if(RW8(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("*",GF({mountPath:"/api/org-sso"})),e.route("/",xC0()),E.route("/api/org-sso",e),E.get("/api/tools/management",(J0)=>{return J0.json({tools:Us,grouped:B2()})}),E.use("/mcp/*",async(J0,K0)=>{JK(J0,"mcp");try{return await K0()}finally{v3(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),yW()){let{mountDevRoutes:J0}=(EW8(),Dv0(jW8));J0(E,Q0)}let $0=new Z1;$0.use("*",GF({mountPath:"/mcp"})),$0.route("/",bI0()),E.route("/mcp",$0);let Y0=new Z1;Y0.use("*",GF({mountPath:"/mcp/self"})),Y0.route("/",q_0()),E.route("/mcp/self",Y0);let g0=new Z1;g0.use("*",GF({mountPath:"/mcp"})),g0.route("/",yI0()),E.route("/mcp",g0),E.use("/api/:org/models/*",async(J0,K0)=>{JK(J0,"llm_models");try{return await K0()}finally{v3(J0,"llm_models")}});let V0=RZ8({cancelBroadcast:H,streamBuffer:F,runRegistry:L});E.route("/api",V0),E.route("/api",B38);let G1=new Z1;G1.use("*",GF({mountPath:"/api"})),G1.route("/",k_0()),E.route("/api",G1),E.route("/api",_G8);let c0=new Z1;c0.use("*",GF({mountPath:"/api"})),c0.route("/",S_0({tokenStorage:g,automationEventDispatcher:G0})),E.route("/api",c0);let w0=new Ws(Z.db),E0=new Z1;E0.use("*",GF({mountPath:"/api"})),E0.route("/",lC0()),E.route("/api",E0),E.route("/api/deco-sites",hZ8()),E.route("/api/deco-apps",MG8());let n0=new Z1;n0.use("*",GF({mountPath:"/api/deco-sites"})),n0.route("/",mC0()),E.route("/api/deco-sites",n0),E.route(_C0,JZ8()),E.route(wX8,PX8()),E.route("/api/_editor-resolve",bG8()),E.route(T98,R98()),E.route(MC0,h98());let N1=O0(),o0=N1.elevenlabsApiKey?new o_0({apiKey:N1.elevenlabsApiKey,model:N1.elevenlabsVoiceModel,conversationModel:N1.elevenlabsConversationModel,voiceId:N1.elevenlabsVoiceId}):null,_0={openai:N1.openaiLiveApiKey?new jO1({apiKey:N1.openaiLiveApiKey,voice:N1.openaiLiveVoice}):null,elevenlabs:o0?new wO1(o0,()=>U?.getConnection()??null):null},d0=new TO1({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:Z5,cancelBroadcast:H,tokenStorage:g,automationEventDispatcher:G0,mountDevAssets:yW(),mcpAuth:Q0,oauthProxyHandler:AW8,watchHandler:VW8,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(MZ8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([Z5.stop(),TP?Promise.resolve(TP()).finally(()=>{TP=null}):Promise.resolve()]),U)await U.drain().catch((J0)=>console.error("[shutdown] NATS drain error:",J0));console.log("[shutdown] Flushing telemetry..."),await UJ().catch((J0)=>console.error("[shutdown] Telemetry flush error:",J0)),console.log("[shutdown] Closing database..."),await QQ$(Z).catch((J0)=>console.error("[shutdown] Database close error:",J0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await SL.registerQueue(i3,{partitionQueue:!0,concurrency:tG1,minPollingIntervalMs:oG1}),await SL.registerQueue(d3,{partitionQueue:!0,concurrency:lJ1,priorityEnabled:!0}),await SL.registerQueue(uN,{workerConcurrency:O0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await SL.registerQueue(lN,{workerConcurrency:O0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await SL.registerQueue(yL,{partitionQueue:!0,concurrency:Xh$}),await SL.registerQueue(VP,Vf$),await GD1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((J0)=>SL.deleteQueue(J0))),await rG1(Z.pool),TJ$().catch((J0)=>{console.error("[studio-pack-backfill] failed:",J0)}),Qt1().catch((J0)=>{console.error("[org-fs] public-sets boot sync kick failed:",J0)})}})}var TW8,PW8=5000,TP=null,AW8=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 rQ.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 k60(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=A68(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(!IW8(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(u58(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 p=atob(T.slice(6).trim()),U0=p.indexOf(":");if(U0!==-1){let v0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.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[p,U0]of g.entries())i.append(p,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 p=l,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...g?.slug?{organization_slug:g.slug}:{},...g?.name?{organization_name:g.name}:{}},z=JSON.stringify(p),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 kp(G.connection_url)??L}catch{i=L}let p={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(p)}}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:_})},VW8=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&&(!JN(Y)||!await GN(Z)))return $.json({error:"forbidden"},403);let W=G?tq0:Y;if(G)tD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return ML($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!Z5.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(()=>{Z5.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),Z5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),Z5.remove(W,K),N()})})})},o05,a05,e05=()=>s05(x8),$15=()=>r05(x8);var SW8=D(()=>{r$();s1();Yt1();z58();q58();v58();L40();iY1();h58();w80();S9();Om();p8();G8();AC0();i58();Q31();B3();xU();IB1();dG();S6();$6();bB1();P98();q98();u98();uB1();GZ8();oB1();YD1();XD1();qH();XC0();JD1();IZ8();RC0();JG8();FG8();UG8();LG8();qG8();HD1();IG8();xI0();H40();vG8();gI0();uL1();xG8();gL1();uG8();oG8();aG8();eG8();Z38();Y38();J38();F38();bO1();DD1();D38();hL1();bL1();t50();C38();cX();AH0();TH0();UX1();V00();S00();W31();_38();b38();$D1();l38();_M0();c38();lo();Fs();nD();T9();nN1();n38();s38();d30();iO1();p3();WD1();pD();bJ1();d30();sM0();Tt0();Rt0();e38();Uw();YW8();Yn();IB1();ad();Oi();mM0();TW8=C(SK(),1);o05=new n05,a05=new Set([i3,d3,uN,lN,yL,VP])});var bW8={};Q6(bW8,{resolveClientDir:()=>K15,resolveAssetPathWithTraversalCheck:()=>vW8,isPathWithinDirectory:()=>_W8,createAssetHandler:()=>H15});import{resolve as v50,dirname as Q15,join as Y15,extname as X15,basename as J15,sep as CW8}from"path";function G15($,Z){if($===Z||J15($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${CW8}assets${CW8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function _W8($,Z){let Q=v50(Z),Y=v50($);return Y===Q||Y.startsWith(Q+"/")}function vW8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=v50(Z,Q);if(!_W8(Y,Z))return null;return Y}function K15($,Z="../client"){let Q=new URL($),Y=Q15(Q.pathname);return v50(Y,Z)}function H15($={}){let{env:Z="production",clientDir:Q=W15,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=vW8({requestPath:W,clientDir:Q});if(!K)return null;let H=Y15(K,"index.html"),F=v50(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(X15(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 W15="./dist/client";var xW8=()=>{};var fW8={};Q6(fW8,{tryUpgradePreviewWs:()=>O15,tryHandlePreviewHttp:()=>L15,previewWebSocketHandler:()=>w15,parsePreviewBaseDomain:()=>D15,isPreviewWsData:()=>Wv0,extractHandleFromHost:()=>$w1});function N15($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function B15(){return new Response(U15,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function D15($){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 $w1($,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 L15($,Z){let Q=$w1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return x50(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Kd)&&N15($))return B15();return X.headers.delete(Kd),X}function x50($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Wv0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function O15($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=$w1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return x50(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return x50(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return x50(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 x50(426,"upgrade failed");return}function b50($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var F15=256,U15='<!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>',w15;var yW8=D(()=>{Z$0();w15={open($){let Z=$.data;if(!Wv0(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)}`),b50($,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)=>{b50($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{b50($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!Wv0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=F15){b50($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!Wv0(Z))return;b50($,Z,1000,"")}}});var lW8={};Q6(lW8,{printBanner:()=>E15,bannerLines:()=>uW8,BANNER_LINES:()=>gW8,BANNER_GRADIENT:()=>hW8});function j15($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function uW8($){let Z=gW8.map((Q,Y)=>{let[X,J,G]=j15(hW8[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 E15($){console.log("");for(let Z of uW8($))console.log(Z);console.log("")}var gW8,hW8;var cW8=D(()=>{gW8=[" \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 "],hW8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});r$();var Bw1="13";function Dw1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Bw1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}r$();import GK8 from"pg";var Lw1=8314027461559302n,WK8=600000,KK8=500;async function Ow1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=WK8}=$,X=$.log??((K)=>console.log(K)),J=new GK8.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",[Lw1.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$(KK8)}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)",[Lw1.toString()])}catch{}await J.end().catch(()=>{})}}s1();jv0();S6();function GH8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function xv0($,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 ew1(){let $=GH8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:xv0($,"--cpu-prof-dir")??process.cwd(),name:xv0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(xv0($,"--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.'}))}gv0();var s50;function Kj1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=CP();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(()=>{}),s50=setInterval(()=>void Z().catch(()=>{}),$),s50.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(s50)clearInterval(s50)}}import*as HH8 from"bun:jsc";var{startSamplingProfiler:FH8,samplingProfilerStackTraces:UH8}=HH8;function Hj1(){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{FH8()}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=UH8()?.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 Fj1(){ew1();let $=[Kj1(),Wj1(),Hj1()];return()=>{for(let Z of $)Z()}}import{existsSync as I15}from"fs";var AG=O0();rw1();var{DBOS:f50,DBOSClient:P15}=await import("@dbos-inc/dbos-sdk");function Gw1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var z15=[i3,d3,uN,lN,yL,VP],A15=AG.dispatchRole==="worker"?z15:AG.dispatchRole==="api"?[]:void 0;f50.setConfig(Dw1({systemDatabaseUrl:Gw1(AG.databaseUrl,AG.databasePgSsl),poolSize:AG.dbosPoolSize,executorID:AG.podName,listenQueues:A15}));var{createApp:T15}=await Promise.resolve().then(() => (SW8(),kW8)),{isServerPath:R15}=await Promise.resolve().then(() => (t50(),vw1)),{createAssetHandler:q15,resolveClientDir:nW8}=await Promise.resolve().then(() => (xW8(),bW8)),M15=AG.port,mW8=nW8(import.meta.url,"../client"),tW8=I15(mW8)?mW8:nW8(import.meta.url,"../dist/client"),V15=q15({clientDir:tW8,isServerPath:R15}),k15={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function S15($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(k15))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:C15,tryHandlePreviewHttp:_15,tryUpgradePreviewWs:v15,previewWebSocketHandler:Zw1,isPreviewWsData:Qw1}=await Promise.resolve().then(() => (yW8(),fW8)),{getOrInitSharedRunner:oW8}=await Promise.resolve().then(() => (YG(),EM$)),rW8=C15(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),dW8={baseDomain:rW8??"",getRunner:oW8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())oW8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var Kv0=await T15({clientDir:tW8}),Yw1=process.env.DBOS_CONDUCTOR_KEY?.trim(),iW8=process.env.DBOS_CONDUCTOR_URL?.trim();await Ow1({databaseUrl:Gw1(AG.databaseUrl,AG.databasePgSsl)},()=>f50.launch({...Yw1?{conductorKey:Yw1}:{},...Yw1&&iW8?{conductorURL:iW8}:{}}));console.log(`[dbos] application version: ${f50.applicationVersion}`);var Xw1=5,Jw1=0;await E8(async()=>{Jw1++;try{return await Kv0.initDbos()}catch($){let Z=Jw1>=Xw1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${Jw1}/${Xw1} failed, ${Z}`,$),$}},{maxAttempts:Xw1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!AG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (cW8(),lW8));console.log("");for(let Z of $())console.log(Z)}var b15=Bun.serve({idleTimeout:0,port:M15,hostname:"0.0.0.0",fetch:async($,Z)=>{if(rW8){let Y=await v15($,Z,dW8);if(Y===void 0)return;if(Y)return Y;let X=await _15($,dW8);if(X)return X}let Q=await V15($);if(Q)return S15(Q);return Kv0.fetch($,{server:Z})},websocket:{open($){if(Qw1($.data))Zw1.open($)},message($,Z){if(Qw1($.data))Zw1.message($,Z)},close($){if(Qw1($.data))Zw1.close($)}},development:!1}),x15=Fj1();if(AG.localMode)Promise.resolve().then(() => (Ny(),MM0)).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(() => (Ny(),MM0));Z()}catch{}});var pW8=!1;async function f15($){let Z;try{Z=await P15.create({systemDatabaseUrl:Gw1(AG.databaseUrl,AG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:d3,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:d3}),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 Hv0($){if(pW8)return;pW8=!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{x15(),Kv0.markShuttingDown();let J=jw1(AG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await U$(J),await b15.stop(!0);let G=f50.executorID;await f50.shutdown(),await f15(G),await Kv0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>Hv0("SIGTERM"));process.on("SIGINT",()=>Hv0("SIGINT"));process.on("SIGHUP",()=>Hv0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),Hv0("uncaughtException")});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as s,M as u}from"./index-CmfXJaKn.js";import{C as f}from"./index-Cha6sREf.js";import{a as x}from"./thread-route-D8jj7JQn.js";import{u as g}from"./use-task-metadata-DNM-o2cs.js";import{AppViewContent as h}from"./project-app-view-n3cNFnjF.js";import"./use-mobile-D-nsnibB.js";import"./thread-button-D6_ujRz8.js";import"./agent-icon-zpWPhOfj.js";import"./AlertCircle-BQdX39pt.js";import"./Tool01-R5YlhrWO.js";import"./ArrowUp-2XhoOsi0.js";import"./ArrowLeft-6EbZWTcH.js";import"./LinkBroken01-CG-HmcZF.js";import"./ShoppingBag01-Cv1HC6f2.js";import"./ZoomOut-DK7mmj_3.js";import"./Building02-DkmblV_t.js";import"./CheckCircle-DKVKsPck.js";import"./Check-DT07hOsy.js";import"./ChevronUp-Bf0RRY9i.js";import"./UserSquare-DwmYgSB5.js";import"./Copy01-onj9VSIV.js";import"./CreditCard01-CunAqtsE.js";import"./DotsVertical-BlZNH3M2.js";import"./Image01-D-zCGCY4.js";import"./Palette-VovT0PnZ.js";import"./XClose-D1JVUlwn.js";import"./Key01-BSZJTaKJ.js";import"./Link01-BgOzUKXX.js";import"./LinkExternal01-UbkWQoBv.js";import"./Monitor01-vP9TH_Iv.js";import"./Sun-4pXqabGH.js";import"./Plus-DQzzAz_7.js";import"./SearchMd-D6hQenCX.js";import"./Trash01-1y1rCSQ7.js";import"./Upload01-4H_HtY1H.js";import"./User01-Cc8kWxTi.js";import"./Users01-CYu_OK-x.js";import"./X-Bix2CJil.js";import"./use-chat-layout-state-DeR1Tqdr.js";import"./use-file-configs-BmdGrQgB.js";import"./use-organization-settings-Bkbee1TC.js";import"./schema-2UaHsULm.js";import"./task-board-DsbM6d_k.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-CFkRSy6M.js";import"./use-project-scope-BhC0oTXz.js";import"./repository-binding-DLsaqYxe.js";import"./use-mcp-client-Bm7mYuOR.js";import"./auth-ydnDmdni.js";import"./thread-intent-DYi-88yf.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-7Pf6aTpk.js";import"./tooltip-CyP-7aI0.js";import"./index-BBAhA6Le.js";import"./toolbar-icon-button-Cme8sKPF.js";import"./shell-layout-iAP3M_t2.js";import"./avatar-CmK1yw1p.js";import"./download-app-dialog-CfJbVT9R.js";import"./dialog-DfdkHhmb.js";import"./use-clock-tick-CAj_vE5f.js";import"./command-D7RcR1At.js";import"./index-hw5atO08.js";import"./integration-icon-BonC-ogs.js";import"./project-icon-BbgRznbE.js";import"./new-project-dialog-BBDXUa7t.js";import"./input-4qEEcM12.js";import"./label-bFgvSx58.js";import"./repository-import-picker-BuXUq4VL.js";import"./use-navigate-to-agent-ilYOi1P6.js";import"./repository-picker-BiHs5x47.js";import"./useInfiniteQuery-CguvOv70.js";import"./infiniteQueryObserver-BV5hUiLD.js";import"./collection-search-DHFp5D4H.js";import"./use-debounced-value-CkSh2sdJ.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DxbZpHcW.js";import"./autosend-BGaION3N.js";import"./use-org-sso-ColeXCJP.js";import"./resizable-B88Tf4WJ.js";import"./icon-button-CNx5vjvd.js";import"./gateway-client-DIx8y90K.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-Yl5gKY2j.js";import"./sandbox-lifecycle-context-C9BC0S3N.js";import"./use-session-runtime-ComyTd-K.js";import"./chat-context-Bx9MVwv5.js";import"./use-decopilot-events-GRYBUdoh.js";import"./use-ai-providers-4F-zKGq7.js";import"./use-chat-navigation-B89SfaFP.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-DrzyJZxY.js";import"./types-BGNIxZfy.js";import"./task-route-Dw_pjXIQ.js";import"./core.esm-BDakG4hN.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-C08Ls9V4.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-L-QwU058.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-BtiLqqyQ.js";import"./authenticate-and-persist-oauth-0pLi3EbJ.js";import"./mcp-oauth-NtoAIxeI.js";import"./track-B2INqJw_.js";import"./extract-connection-data-BFK1aCsO.js";import"./connection-8CqSsDm5.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-CmfXJaKn.js";import{C as j}from"./index-Cha6sREf.js";import{F as v,H as S}from"./file-share-button-Drokhk1O.js";import{u as k,b as y,e as _}from"./use-org-fs-D7r3cXXb.js";import{S as w}from"./settings-tab-BEu6uPlX.js";import{b as M}from"./thread-route-D8jj7JQn.js";import"./use-mobile-D-nsnibB.js";import"./thread-button-D6_ujRz8.js";import"./agent-icon-zpWPhOfj.js";import"./AlertCircle-BQdX39pt.js";import"./Tool01-R5YlhrWO.js";import"./ArrowUp-2XhoOsi0.js";import"./ArrowLeft-6EbZWTcH.js";import"./LinkBroken01-CG-HmcZF.js";import"./ShoppingBag01-Cv1HC6f2.js";import"./ZoomOut-DK7mmj_3.js";import"./Building02-DkmblV_t.js";import"./CheckCircle-DKVKsPck.js";import"./Check-DT07hOsy.js";import"./ChevronUp-Bf0RRY9i.js";import"./UserSquare-DwmYgSB5.js";import"./Copy01-onj9VSIV.js";import"./CreditCard01-CunAqtsE.js";import"./DotsVertical-BlZNH3M2.js";import"./Image01-D-zCGCY4.js";import"./Palette-VovT0PnZ.js";import"./XClose-D1JVUlwn.js";import"./Key01-BSZJTaKJ.js";import"./Link01-BgOzUKXX.js";import"./LinkExternal01-UbkWQoBv.js";import"./Monitor01-vP9TH_Iv.js";import"./Sun-4pXqabGH.js";import"./Plus-DQzzAz_7.js";import"./SearchMd-D6hQenCX.js";import"./Trash01-1y1rCSQ7.js";import"./Upload01-4H_HtY1H.js";import"./User01-Cc8kWxTi.js";import"./Users01-CYu_OK-x.js";import"./X-Bix2CJil.js";import"./use-chat-layout-state-DeR1Tqdr.js";import"./use-file-configs-BmdGrQgB.js";import"./use-organization-settings-Bkbee1TC.js";import"./schema-2UaHsULm.js";import"./task-board-DsbM6d_k.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-CFkRSy6M.js";import"./use-project-scope-BhC0oTXz.js";import"./repository-binding-DLsaqYxe.js";import"./use-mcp-client-Bm7mYuOR.js";import"./auth-ydnDmdni.js";import"./thread-intent-DYi-88yf.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-7Pf6aTpk.js";import"./tooltip-CyP-7aI0.js";import"./index-BBAhA6Le.js";import"./toolbar-icon-button-Cme8sKPF.js";import"./shell-layout-iAP3M_t2.js";import"./avatar-CmK1yw1p.js";import"./download-app-dialog-CfJbVT9R.js";import"./dialog-DfdkHhmb.js";import"./use-clock-tick-CAj_vE5f.js";import"./command-D7RcR1At.js";import"./index-hw5atO08.js";import"./integration-icon-BonC-ogs.js";import"./project-icon-BbgRznbE.js";import"./new-project-dialog-BBDXUa7t.js";import"./input-4qEEcM12.js";import"./label-bFgvSx58.js";import"./repository-import-picker-BuXUq4VL.js";import"./use-navigate-to-agent-ilYOi1P6.js";import"./repository-picker-BiHs5x47.js";import"./useInfiniteQuery-CguvOv70.js";import"./infiniteQueryObserver-BV5hUiLD.js";import"./collection-search-DHFp5D4H.js";import"./use-debounced-value-CkSh2sdJ.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DxbZpHcW.js";import"./autosend-BGaION3N.js";import"./use-org-sso-ColeXCJP.js";import"./resizable-B88Tf4WJ.js";import"./icon-button-CNx5vjvd.js";import"./popover-DwltHyyo.js";import"./extract-connection-data-BFK1aCsO.js";import"./metadata-D72DunRR.js";import"./connection-8CqSsDm5.js";import"./chat-context-Bx9MVwv5.js";import"./use-decopilot-events-GRYBUdoh.js";import"./use-ai-providers-4F-zKGq7.js";import"./use-chat-navigation-B89SfaFP.js";import"./location-zK0I9Ia6.js";import"./build-improve-prompt-doc-CkwvsCJn.js";import"./empty-state-BRfCy1KK.js";import"./use-date-fns-locale-JG2XlcuE.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-DsbJp2WH.js";import"./mcp-oauth-NtoAIxeI.js";import"./alert-dialog-CyLBdAzL.js";import"./textarea-5M2oFUCk.js";import"./use-debounced-autosave-BDX075Uf.js";import"./add-connection-dialog-C9NnYS0B.js";import"./connection-card-XhoPzocB.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-CIqQnl1u.js";import"./form-L-QwU058.js";import"./select-CGUBnSdo.js";import"./connection-form-helpers-BmHNz6u_.js";import"./authenticate-and-persist-oauth-0pLi3EbJ.js";import"./collection-tabs-DXzpq1Uc.js";import"./badge-DEsF_1Ia.js";import"./use-infinite-scroll-BhcJa6Dv.js";import"./useSuspenseInfiniteQuery-CjC1GQYU.js";import"./file-type-icon-Dak7C2hB.js";import"./checkbox-C49TGIp0.js";import"./search-input-B_YLozB3.js";import"./use-mcp-auth-status-BwGIXOfQ.js";import"./types-BGNIxZfy.js";import"./use-mcp-tools-Yl5gKY2j.js";import"./use-mcp-prompts-CSphD1Ew.js";import"./utils-CVEq3hMx.js";import"./switch-DS7j-ERy.js";import"./scroll-area-BYHvZ2mI.js";import"./optimistic-project-sidebar-views-BBCxpQYT.js";import"./virtual-mcp-k-QS-zY_.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-TXboPuNL.js";import"./use-secrets-tjcKGh8r.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-CmfXJaKn.js";import{C as a}from"./index-Cha6sREf.js";import{L as n}from"./library-tab-BB8_-aXb.js";import{u as c}from"./use-ensure-project-folder-BPOBE2S-.js";import{u}from"./use-project-scope-BhC0oTXz.js";import{p as l}from"./location-zK0I9Ia6.js";import"./use-mobile-D-nsnibB.js";import"./thread-button-D6_ujRz8.js";import"./agent-icon-zpWPhOfj.js";import"./AlertCircle-BQdX39pt.js";import"./Tool01-R5YlhrWO.js";import"./ArrowUp-2XhoOsi0.js";import"./ArrowLeft-6EbZWTcH.js";import"./LinkBroken01-CG-HmcZF.js";import"./ShoppingBag01-Cv1HC6f2.js";import"./ZoomOut-DK7mmj_3.js";import"./Building02-DkmblV_t.js";import"./CheckCircle-DKVKsPck.js";import"./Check-DT07hOsy.js";import"./ChevronUp-Bf0RRY9i.js";import"./UserSquare-DwmYgSB5.js";import"./Copy01-onj9VSIV.js";import"./CreditCard01-CunAqtsE.js";import"./DotsVertical-BlZNH3M2.js";import"./Image01-D-zCGCY4.js";import"./Palette-VovT0PnZ.js";import"./XClose-D1JVUlwn.js";import"./Key01-BSZJTaKJ.js";import"./Link01-BgOzUKXX.js";import"./LinkExternal01-UbkWQoBv.js";import"./Monitor01-vP9TH_Iv.js";import"./Sun-4pXqabGH.js";import"./Plus-DQzzAz_7.js";import"./SearchMd-D6hQenCX.js";import"./Trash01-1y1rCSQ7.js";import"./Upload01-4H_HtY1H.js";import"./User01-Cc8kWxTi.js";import"./Users01-CYu_OK-x.js";import"./X-Bix2CJil.js";import"./use-chat-layout-state-DeR1Tqdr.js";import"./use-file-configs-BmdGrQgB.js";import"./use-organization-settings-Bkbee1TC.js";import"./schema-2UaHsULm.js";import"./task-board-DsbM6d_k.js";import"./site-slug-DebpOoQq.js";import"./thread-route-D8jj7JQn.js";import"./use-panel-navigate-CFkRSy6M.js";import"./thread-intent-DYi-88yf.js";import"./use-mcp-client-Bm7mYuOR.js";import"./auth-ydnDmdni.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-7Pf6aTpk.js";import"./tooltip-CyP-7aI0.js";import"./index-BBAhA6Le.js";import"./toolbar-icon-button-Cme8sKPF.js";import"./shell-layout-iAP3M_t2.js";import"./avatar-CmK1yw1p.js";import"./download-app-dialog-CfJbVT9R.js";import"./dialog-DfdkHhmb.js";import"./use-clock-tick-CAj_vE5f.js";import"./command-D7RcR1At.js";import"./index-hw5atO08.js";import"./integration-icon-BonC-ogs.js";import"./project-icon-BbgRznbE.js";import"./new-project-dialog-BBDXUa7t.js";import"./input-4qEEcM12.js";import"./label-bFgvSx58.js";import"./repository-import-picker-BuXUq4VL.js";import"./use-navigate-to-agent-ilYOi1P6.js";import"./repository-binding-DLsaqYxe.js";import"./repository-picker-BiHs5x47.js";import"./useInfiniteQuery-CguvOv70.js";import"./infiniteQueryObserver-BV5hUiLD.js";import"./collection-search-DHFp5D4H.js";import"./use-debounced-value-CkSh2sdJ.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DxbZpHcW.js";import"./autosend-BGaION3N.js";import"./use-org-sso-ColeXCJP.js";import"./resizable-B88Tf4WJ.js";import"./icon-button-CNx5vjvd.js";import"./search-toggle-gk1lAOE-.js";import"./alert-dialog-CyLBdAzL.js";import"./use-chat-navigation-B89SfaFP.js";import"./use-org-fs-D7r3cXXb.js";import"./use-org-repo-syncs-YBN6v1a-.js";import"./textarea-5M2oFUCk.js";import"./markdown-Bm0EnhxB.js";import"./org-file-open-context-B_XQOD8z.js";import"./file-share-button-Drokhk1O.js";import"./popover-DwltHyyo.js";import"./preview-dialog-C0rIAVwJ.js";import"./preview-content-llp8A1Fx.js";import"./file-preview-Pk-Bxrs3.js";import"./utils-C41e_wcL.js";import"./editor-DPVBnzyg.js";import"./file-type-icon-Dak7C2hB.js";import"./folder-icon-BV7RkSpo.js";import"./skill-md-ChfVs4uF.js";import"./empty-state-DSS4pT1g.js";import"./view-mode-toggle-Dqx01hDb.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-B9nrZOlA.js";import"./use-members-BkFO1Bt8.js";import"./use-org-auth-client-Ch8FFgkf.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-CmfXJaKn.js";import{C as c}from"./index-Cha6sREf.js";import{L as l}from"./preview-panel-kwICD-IP.js";import{a as u}from"./use-panel-navigate-CFkRSy6M.js";import{S as f}from"./settings-tab-BEu6uPlX.js";import{b as h}from"./thread-route-D8jj7JQn.js";import"./use-mobile-D-nsnibB.js";import"./thread-button-D6_ujRz8.js";import"./agent-icon-zpWPhOfj.js";import"./AlertCircle-BQdX39pt.js";import"./Tool01-R5YlhrWO.js";import"./ArrowUp-2XhoOsi0.js";import"./ArrowLeft-6EbZWTcH.js";import"./LinkBroken01-CG-HmcZF.js";import"./ShoppingBag01-Cv1HC6f2.js";import"./ZoomOut-DK7mmj_3.js";import"./Building02-DkmblV_t.js";import"./CheckCircle-DKVKsPck.js";import"./Check-DT07hOsy.js";import"./ChevronUp-Bf0RRY9i.js";import"./UserSquare-DwmYgSB5.js";import"./Copy01-onj9VSIV.js";import"./CreditCard01-CunAqtsE.js";import"./DotsVertical-BlZNH3M2.js";import"./Image01-D-zCGCY4.js";import"./Palette-VovT0PnZ.js";import"./XClose-D1JVUlwn.js";import"./Key01-BSZJTaKJ.js";import"./Link01-BgOzUKXX.js";import"./LinkExternal01-UbkWQoBv.js";import"./Monitor01-vP9TH_Iv.js";import"./Sun-4pXqabGH.js";import"./Plus-DQzzAz_7.js";import"./SearchMd-D6hQenCX.js";import"./Trash01-1y1rCSQ7.js";import"./Upload01-4H_HtY1H.js";import"./User01-Cc8kWxTi.js";import"./Users01-CYu_OK-x.js";import"./X-Bix2CJil.js";import"./use-chat-layout-state-DeR1Tqdr.js";import"./use-file-configs-BmdGrQgB.js";import"./use-organization-settings-Bkbee1TC.js";import"./schema-2UaHsULm.js";import"./task-board-DsbM6d_k.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-DYi-88yf.js";import"./use-mcp-client-Bm7mYuOR.js";import"./auth-ydnDmdni.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-BhC0oTXz.js";import"./repository-binding-DLsaqYxe.js";import"./sheet-7Pf6aTpk.js";import"./tooltip-CyP-7aI0.js";import"./index-BBAhA6Le.js";import"./toolbar-icon-button-Cme8sKPF.js";import"./shell-layout-iAP3M_t2.js";import"./avatar-CmK1yw1p.js";import"./download-app-dialog-CfJbVT9R.js";import"./dialog-DfdkHhmb.js";import"./use-clock-tick-CAj_vE5f.js";import"./command-D7RcR1At.js";import"./index-hw5atO08.js";import"./integration-icon-BonC-ogs.js";import"./project-icon-BbgRznbE.js";import"./new-project-dialog-BBDXUa7t.js";import"./input-4qEEcM12.js";import"./label-bFgvSx58.js";import"./repository-import-picker-BuXUq4VL.js";import"./use-navigate-to-agent-ilYOi1P6.js";import"./repository-picker-BiHs5x47.js";import"./useInfiniteQuery-CguvOv70.js";import"./infiniteQueryObserver-BV5hUiLD.js";import"./collection-search-DHFp5D4H.js";import"./use-debounced-value-CkSh2sdJ.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-DxbZpHcW.js";import"./autosend-BGaION3N.js";import"./use-org-sso-ColeXCJP.js";import"./resizable-B88Tf4WJ.js";import"./icon-button-CNx5vjvd.js";import"./preview-content-llp8A1Fx.js";import"./file-share-button-Drokhk1O.js";import"./use-org-fs-D7r3cXXb.js";import"./popover-DwltHyyo.js";import"./file-preview-Pk-Bxrs3.js";import"./utils-C41e_wcL.js";import"./editor-DPVBnzyg.js";import"./file-type-icon-Dak7C2hB.js";import"./markdown-Bm0EnhxB.js";import"./location-zK0I9Ia6.js";import"./org-file-open-context-B_XQOD8z.js";import"./extract-connection-data-BFK1aCsO.js";import"./metadata-D72DunRR.js";import"./connection-8CqSsDm5.js";import"./chat-context-Bx9MVwv5.js";import"./use-decopilot-events-GRYBUdoh.js";import"./use-ai-providers-4F-zKGq7.js";import"./use-chat-navigation-B89SfaFP.js";import"./build-improve-prompt-doc-CkwvsCJn.js";import"./empty-state-BRfCy1KK.js";import"./use-date-fns-locale-JG2XlcuE.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-DsbJp2WH.js";import"./mcp-oauth-NtoAIxeI.js";import"./alert-dialog-CyLBdAzL.js";import"./textarea-5M2oFUCk.js";import"./use-debounced-autosave-BDX075Uf.js";import"./add-connection-dialog-C9NnYS0B.js";import"./connection-card-XhoPzocB.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-CIqQnl1u.js";import"./form-L-QwU058.js";import"./select-CGUBnSdo.js";import"./connection-form-helpers-BmHNz6u_.js";import"./authenticate-and-persist-oauth-0pLi3EbJ.js";import"./collection-tabs-DXzpq1Uc.js";import"./badge-DEsF_1Ia.js";import"./use-infinite-scroll-BhcJa6Dv.js";import"./useSuspenseInfiniteQuery-CjC1GQYU.js";import"./checkbox-C49TGIp0.js";import"./search-input-B_YLozB3.js";import"./use-mcp-auth-status-BwGIXOfQ.js";import"./types-BGNIxZfy.js";import"./use-mcp-tools-Yl5gKY2j.js";import"./use-mcp-prompts-CSphD1Ew.js";import"./utils-CVEq3hMx.js";import"./switch-DS7j-ERy.js";import"./scroll-area-BYHvZ2mI.js";import"./optimistic-project-sidebar-views-BBCxpQYT.js";import"./virtual-mcp-k-QS-zY_.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-TXboPuNL.js";import"./use-secrets-tjcKGh8r.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};
|