decocms 4.414.0 → 4.415.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-DaJjYzK7.js → AlertCircle-CvaSOOO8.js} +1 -1
- package/dist/client/assets/AreaChart-C1zWMN3A.js +1 -0
- package/dist/client/assets/{ArrowLeft-CwZA6hhm.js → ArrowLeft-BsqlBCdi.js} +1 -1
- package/dist/client/assets/{ArrowRight-DlEEL0oL.js → ArrowRight-B6VZdTtP.js} +1 -1
- package/dist/client/assets/{ArrowUp-BVYCIIGM.js → ArrowUp-C1c3cSMN.js} +1 -1
- package/dist/client/assets/CartesianChart-DT33HVeq.js +6 -0
- package/dist/client/assets/{Check-OcoBiXmm.js → Check-ClKm876e.js} +1 -1
- package/dist/client/assets/{CheckCircle-Dd90iqND.js → CheckCircle-B38I9lsp.js} +1 -1
- package/dist/client/assets/{ChevronUp-CD5mSK7Y.js → ChevronUp-BBBSFlle.js} +1 -1
- package/dist/client/assets/{Copy01-BJqw8z9b.js → Copy01-kb1901QR.js} +1 -1
- package/dist/client/assets/{CreditCard01-BWWARSB9.js → CreditCard01-DkYuXaNf.js} +1 -1
- package/dist/client/assets/{DotsVertical-Chnn0E-M.js → DotsVertical-OXZ2C8qE.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-CWEL9dCO.js → ErrorBarContext-CSFQ9ttu.js} +1 -1
- package/dist/client/assets/Image01-xbxm22_Y.js +1 -0
- package/dist/client/assets/{Key01-CD0lgLSw.js → Key01-ZIYydTtn.js} +1 -1
- package/dist/client/assets/{Line-Bg6fTk0a.js → Line-C_txxRhK.js} +1 -1
- package/dist/client/assets/{Link01-CDLS3D8E.js → Link01-cXYRJQde.js} +1 -1
- package/dist/client/assets/{LinkExternal01-ClZInLaB.js → LinkExternal01-UxTfoueY.js} +1 -1
- package/dist/client/assets/{Monitor01-BdQ0e4n3.js → Monitor01-CINH3FWT.js} +1 -1
- package/dist/client/assets/{Globe04-BrBw0Avb.js → Palette-C2svjF4J.js} +1 -1
- package/dist/client/assets/{Plus-Du1X0BSn.js → Plus-Bv10xzXZ.js} +1 -1
- package/dist/client/assets/{SearchMd-BhrVtQgO.js → SearchMd-DRAIsS0-.js} +1 -1
- package/dist/client/assets/{Sector-qDv_EV21.js → Sector-TihpQ2pX.js} +5 -5
- package/dist/client/assets/{ShoppingBag01-DTuXZ14Y.js → ShoppingBag01-DsBku-zP.js} +1 -1
- package/dist/client/assets/{Sun-BOBnFu4U.js → Sun-CJOAGa8i.js} +1 -1
- package/dist/client/assets/{Tool01-B1l7rMbN.js → Tool01-gY-gdMF4.js} +1 -1
- package/dist/client/assets/{Trash01-5dU05cxX.js → Trash01-DUhLvzYZ.js} +1 -1
- package/dist/client/assets/{Upload01-HggPmwVR.js → Upload01-BsdejHE0.js} +1 -1
- package/dist/client/assets/{User01-DCaSZH6y.js → User01-B4dCU7oy.js} +1 -1
- package/dist/client/assets/{UserSquare-oitDkmCz.js → UserSquare-BA1qsXhU.js} +1 -1
- package/dist/client/assets/{Users01-C5KisUmx.js → Users01-BLSNtVXz.js} +1 -1
- package/dist/client/assets/{X-C_n07v-r.js → X-BTpPaU7c.js} +1 -1
- package/dist/client/assets/XAxis-Cj_1oR4W.js +1 -0
- package/dist/client/assets/{XClose-CH7JGbnX.js → XClose-DnZUIdlK.js} +1 -1
- package/dist/client/assets/{ZoomOut-CE1oJlBX.js → ZoomOut-DvQpsf4w.js} +1 -1
- package/dist/client/assets/{access-gate-djSuo48h.js → access-gate-BYf0rE33.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-ks_Gm8LK.js → add-connection-dialog-BdXnmDrQ.js} +1 -1
- package/dist/client/assets/agent-analytics-DQZgiL7L.js +2 -0
- package/dist/client/assets/agent-app-C7k2151J.js +1 -0
- package/dist/client/assets/agent-assets-B-r7ioGn.js +1 -0
- package/dist/client/assets/agent-automation-BkxL2BIZ.js +20 -0
- package/dist/client/assets/agent-automations-pf_bDZZ5.js +1 -0
- package/dist/client/assets/agent-connect-sources-Do412j4U.js +1 -0
- package/dist/client/assets/agent-deck-CYuHMzf-.js +1 -0
- package/dist/client/assets/agent-e2e-Db1tY-Py.js +1 -0
- package/dist/client/assets/agent-experiments-a-194CZ0.js +1 -0
- package/dist/client/assets/agent-file-DcPThm01.js +1 -0
- package/dist/client/assets/{agent-git-BTa_DVHj.js → agent-git-I5DAbFxV.js} +2 -2
- package/dist/client/assets/agent-hosting-8wURqYK1.js +1 -0
- package/dist/client/assets/agent-icon-BvDKYGuI.js +1 -0
- package/dist/client/assets/agent-library-DP9jULfe.js +1 -0
- package/dist/client/assets/agent-library-file-C2CuO8zG.js +1 -0
- package/dist/client/assets/agent-monitor-DU5E9xAR.js +1 -0
- package/dist/client/assets/agent-overview-BBH7XkKk.js +1 -0
- package/dist/client/assets/agent-settings-DBkRHp58.js +1 -0
- package/dist/client/assets/{agent-site-editor-CHHHOnLg.js → agent-site-editor-DSbFppgh.js} +4 -4
- package/dist/client/assets/agent-site-editor-code-CGBlhTFD.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-D7eFLsTa.js → agent-site-editor-content-C6CyUicz.js} +6 -6
- package/dist/client/assets/{agent-site-editor-preview-CU4mKdzV.js → agent-site-editor-preview-Bm6vi5GO.js} +3 -3
- package/dist/client/assets/{agent-view-guard-Dc-tIwiR.js → agent-view-guard-BHFZQ084.js} +1 -1
- package/dist/client/assets/agent-view-iS5vUDqd.js +1 -0
- package/dist/client/assets/agents-list-BmcrOH9K.js +1 -0
- package/dist/client/assets/{ai-providers-dlDhTyuB.js → ai-providers-D07lihCf.js} +2 -2
- package/dist/client/assets/{alert-CwBw9dro.js → alert-CbVRyYdn.js} +1 -1
- package/dist/client/assets/{alert-dialog-DIB7QD28.js → alert-dialog-D5AYweb7.js} +1 -1
- package/dist/client/assets/analytics-sections-C7kQuinp.js +1 -0
- package/dist/client/assets/{api-keys-3zmZWwRN.js → api-keys-CRcL5tuf.js} +1 -1
- package/dist/client/assets/api-keys-DrGX-MFg.js +1 -0
- package/dist/client/assets/app-editor-BH13ZfO_.js +1 -0
- package/dist/client/assets/{asset-utils-DwWjXWho.js → asset-utils-DxlUH6fM.js} +1 -1
- package/dist/client/assets/{auth-D5I2s61A.js → auth-DqmsEfIB.js} +1 -1
- package/dist/client/assets/{auth-catchall-WSWKM_Gq.js → auth-catchall-BMmDsnzK.js} +1 -1
- package/dist/client/assets/auth-entry-B26Aq39u.js +1 -0
- package/dist/client/assets/{auth-split-layout-DWTgZBat.js → auth-split-layout-D5nNb-G8.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-hhMpxZ3e.js → authenticate-and-persist-oauth-CtghXoSr.js} +1 -1
- package/dist/client/assets/{automation-list-row-DdEGsJ2i.js → automation-list-row-CkyFpQMb.js} +1 -1
- package/dist/client/assets/automation-runs-CoqjOPyS.js +1 -0
- package/dist/client/assets/automations-2UeJll3f.js +1 -0
- package/dist/client/assets/{autosend-Cxmy5f7O.js → autosend-D__v3v-c.js} +1 -1
- package/dist/client/assets/{avatar-foon9v7B.js → avatar-JoRElFKl.js} +1 -1
- package/dist/client/assets/badge-B0yp_bFb.js +1 -0
- package/dist/client/assets/{block-document-B8Nfg62J.js → block-document-iObAvspI.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-BaVmSFTq.js → blocks-preview-workspace-context-CroMcTkl.js} +1 -1
- package/dist/client/assets/{buckets-CUx3pPZV.js → buckets-CdF9xMMp.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-BygXIWi2.js → build-improve-prompt-doc-CXnpM7kh.js} +1 -1
- package/dist/client/assets/{calendar-G6mILgu2.js → calendar-_lAvk6Nt.js} +1 -1
- package/dist/client/assets/{capability-load-error-CO1VC4nF.js → capability-load-error-8qZRldzC.js} +1 -1
- package/dist/client/assets/category-editor-fWmRfYwN.js +1 -0
- package/dist/client/assets/{chart-oCBL-j7a.js → chart-B8A_E9YA.js} +5 -5
- package/dist/client/assets/{chat-context-Cugy5hDa.js → chat-context-DCpRbJmR.js} +5 -5
- package/dist/client/assets/{chat-draft-BdIaAbi7.js → chat-draft-BiPOqsxD.js} +1 -1
- package/dist/client/assets/{checkbox-Catn0jym.js → checkbox-DYn5BX_y.js} +1 -1
- package/dist/client/assets/choose-editor-9psJgCK3.js +1 -0
- package/dist/client/assets/{claim-phase-copy-BQxiL9ur.js → claim-phase-copy-CaNBNXR7.js} +1 -1
- package/dist/client/assets/{cli-auth-success-C8L7TKTw.js → cli-auth-success-B-HmvL0Z.js} +1 -1
- package/dist/client/assets/{client-icons-wx82VsS4.js → client-icons-DRAmgBv8.js} +1 -1
- package/dist/client/assets/{collapsible-BW-qIR3J.js → collapsible-Bg1MAa8S.js} +1 -1
- package/dist/client/assets/collection-detail-CzcE81KP.js +1 -0
- package/dist/client/assets/{collection-display-button-C7gBvlDS.js → collection-display-button-BbOo6z7N.js} +1 -1
- package/dist/client/assets/{collection-search-Bq1nxKvP.js → collection-search-EssCGlF9.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DVdtt0cC.js → collection-table-wrapper-BktaVXNL.js} +1 -1
- package/dist/client/assets/{collection-tabs-C36RG4Vf.js → collection-tabs-C2dMZ-Yz.js} +1 -1
- package/dist/client/assets/{combobox-DCIUJ1uY.js → combobox-DnOhf0WD.js} +1 -1
- package/dist/client/assets/command-DljL6hzf.js +1 -0
- package/dist/client/assets/{companion-mcps-section-DWDTtMpt.js → companion-mcps-section-DHfjmvo2.js} +1 -1
- package/dist/client/assets/config-BRt8XM2Q.js +1 -0
- package/dist/client/assets/{connect-jOPX0XiI.js → connect-COAAkNAe.js} +2 -2
- package/dist/client/assets/{connect-layout-CyFIUESs.js → connect-layout-D_XB9JJD.js} +1 -1
- package/dist/client/assets/{connection-CPFeF6nm.js → connection-DZucsf0o.js} +1 -1
- package/dist/client/assets/{connection-card-CTMJB3fp.js → connection-card-DrvsNBSo.js} +1 -1
- package/dist/client/assets/connection-detail-DELb5RqN.js +1 -0
- package/dist/client/assets/{connection-form-helpers-C5t2ERoW.js → connection-form-helpers-BOYwqVWG.js} +1 -1
- package/dist/client/assets/connections-BTjmigpS.js +1 -0
- package/dist/client/assets/context-t3HzYqzN.js +1 -0
- package/dist/client/assets/{create-organization-dialog-CZ1lcSy0.js → create-organization-dialog-BCIcZ5Ce.js} +1 -1
- package/dist/client/assets/{decopilot-BbmoQjBz.js → decopilot-BbS9GPYA.js} +2 -2
- package/dist/client/assets/{dialog-D5ye6U_D.js → dialog-CfIoHDlJ.js} +1 -1
- package/dist/client/assets/discover-C6NL6AwE.js +1 -0
- package/dist/client/assets/{domain-settings-BzTmzHwn.js → domain-settings-I8HFU1tc.js} +1 -1
- package/dist/client/assets/download-app-dialog-bvP5yIID.js +1 -0
- package/dist/client/assets/{drawer-CgCvwNdV.js → drawer-gbdrTv3r.js} +1 -1
- package/dist/client/assets/{editor-DCI3ZH5o.js → editor-CUtbeyZe.js} +1 -1
- package/dist/client/assets/{empty-state-DSA1rktW.js → empty-state-B7JCSTCX.js} +1 -1
- package/dist/client/assets/{empty-state-BpRvqX3b.js → empty-state-B_xAVz84.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DIQFM_Rl.js → extract-connection-data-CHpjURut.js} +1 -1
- package/dist/client/assets/feature-gate-CSCbG-02.js +1 -0
- package/dist/client/assets/feature-paywall-BK6fjPbO.js +1 -0
- package/dist/client/assets/file-explorer-BEA-kxcu.js +2 -0
- package/dist/client/assets/file-preview-Bk7_4BhT.js +1 -0
- package/dist/client/assets/file-share-button-CtEMEEnP.js +3 -0
- package/dist/client/assets/{file-type-icon-w64MSOpN.js → file-type-icon-C_2K-vjQ.js} +1 -1
- package/dist/client/assets/flat-project-Bp2uxu0m.js +1 -0
- package/dist/client/assets/folder-icon-D2srQ6r8.js +1 -0
- package/dist/client/assets/{form-F3knQ3ef.js → form-Bw-12Nua.js} +1 -1
- package/dist/client/assets/format-time-CjIPQhCN.js +1 -0
- package/dist/client/assets/{gateway-client-BkDoJc3i.js → gateway-client-DDRZPNgE.js} +1 -1
- package/dist/client/assets/{general-DRrG1HLu.js → general-DFurEwpf.js} +1 -1
- package/dist/client/assets/github-repo-22x8y8Tm.js +1 -0
- package/dist/client/assets/home-BEfet_Bo.js +1 -0
- package/dist/client/assets/{index-D9Qjyoct.js → index-B1gW_UZi.js} +12 -12
- package/dist/client/assets/index-BADnYX4j.css +1 -0
- package/dist/client/assets/{index-1xlnSxuL.js → index-BBClJhS5.js} +1 -1
- package/dist/client/assets/{index-B_6_b10B.js → index-BBn8QmOY.js} +1 -1
- package/dist/client/assets/{index-PWbqH2G3.js → index-BGw3HTPr.js} +1 -1
- package/dist/client/assets/index-C23QqnY4.js +1 -0
- package/dist/client/assets/{index-C1LXcrdL.js → index-CBJQH72Z.js} +1 -1
- package/dist/client/assets/{index-CQTi57zC.js → index-CP9MPNu2.js} +2 -2
- package/dist/client/assets/{index-DwGlegEL.js → index-Cc_Zqhkn.js} +1 -1
- package/dist/client/assets/{index-799YT1X7.js → index-Ccktnu9A.js} +1 -1
- package/dist/client/assets/index-CdYIy8eY.js +1 -0
- package/dist/client/assets/index-DRvgWruv.js +1 -0
- package/dist/client/assets/{index-BxbJS58j.js → index-DTVMnS9R.js} +1 -1
- package/dist/client/assets/{index-DXncJrGS.js → index-TvCpAFy_.js} +15 -15
- package/dist/client/assets/index-Ty5Jzwnf.js +10 -0
- package/dist/client/assets/{index-DUhG4tsR.js → index-oPco2Z7Q.js} +36 -36
- package/dist/client/assets/{index-redirect-W-CDsNw_.js → index-redirect-D8rObEfr.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-CnSA8MF_.js → infiniteQueryObserver-BiKAGWol.js} +1 -1
- package/dist/client/assets/infra-billing-DM30eRIB.js +1 -0
- package/dist/client/assets/{input-DY62oxPZ.js → input-Dk8ExXFi.js} +1 -1
- package/dist/client/assets/{input-DaUsOzcS.js → input-MYwET4H0.js} +1 -1
- package/dist/client/assets/input-ZcuegaFq.js +1 -0
- package/dist/client/assets/{integration-icon-Didv4P2d.js → integration-icon-cSotbhTg.js} +1 -1
- package/dist/client/assets/{label-BypgdEhS.js → label-9S9F78nK.js} +1 -1
- package/dist/client/assets/{last-preview-page-BGLkyqI1.js → last-preview-page-BqZ-yKjx.js} +1 -1
- package/dist/client/assets/{layout-CPzExRWR.js → layout-XmYuHyUp.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-GQn_HHLF.js → legacy-agents-deep-Cos55l5T.js} +1 -1
- package/dist/client/assets/legacy-main-redirect-SvbBzQfx.js +1 -0
- package/dist/client/assets/library-DwuPF4v9.js +1 -0
- package/dist/client/assets/library-tab-jc2e6zcQ.js +168 -0
- package/dist/client/assets/location-DBePU4bz.js +1 -0
- package/dist/client/assets/{login-BRrTc0gG.js → login-Dk9tmaQV.js} +1 -1
- package/dist/client/assets/{markdown-Bc3TbOnL.js → markdown-D8NZ8Hcx.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-x41adwrD.js → mcp-app-renderer-CMM_xZGY.js} +1 -1
- package/dist/client/assets/{mcp-oauth-jFxfSUra.js → mcp-oauth-Rwm2gO51.js} +1 -1
- package/dist/client/assets/members-C7CWAgRC.js +1 -0
- package/dist/client/assets/{message-templates-nlH50gJ2.js → message-templates-LZ9bQOkh.js} +1 -1
- package/dist/client/assets/{mini-report-page-CxePAPTE.js → mini-report-page-Djd5YLq-.js} +1 -1
- package/dist/client/assets/mock-board-wLpRW8bx.js +1 -0
- package/dist/client/assets/{monaco-editor-D8GdrnPh.js → monaco-editor-gMJT6cpK.js} +2 -2
- package/dist/client/assets/monitoring-stats-row-DGiOnVB-.js +1 -0
- package/dist/client/assets/{multi-select-DhVdXTHb.js → multi-select-CgJiEc6d.js} +1 -1
- package/dist/client/assets/{mustache-Da5_vbMS.js → mustache-C_QlIzWy.js} +1 -1
- package/dist/client/assets/new-project-dialog-BaZdnvse.js +1 -0
- package/dist/client/assets/{oauth-callback-DTAJ88cJ.js → oauth-callback-DKlgv_Gu.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-zQxL0ybs.js → oauth-callback-ai-provider-bpHWEFSR.js} +1 -1
- package/dist/client/assets/onboarding-BCfoU2BS.js +1 -0
- package/dist/client/assets/optimistic-project-sidebar-views-CmwJxzI1.js +1 -0
- package/dist/client/assets/{org-file-open-context-CRfULtcz.js → org-file-open-context-Bv73tl5K.js} +1 -1
- package/dist/client/assets/{organization-choice-DrNVkNJX.js → organization-choice-1eorpCYU.js} +1 -1
- package/dist/client/assets/{orgs-CRvqTOkY.js → orgs-zhbMCzP-.js} +1 -1
- package/dist/client/assets/{page-seo-form-VepXUh7G.js → page-seo-form-CshajZtl.js} +1 -1
- package/dist/client/assets/{pair-CIPjczyu.js → pair-C-k8zr2J.js} +7 -7
- package/dist/client/assets/plan-ladder-BlKhVXlg.js +1 -0
- package/dist/client/assets/{popover-CLlJmv-M.js → popover-BgkxtrX7.js} +1 -1
- package/dist/client/assets/post-calendar-B-WdFfky.js +1 -0
- package/dist/client/assets/post-editor-CsDksmyM.js +2 -0
- package/dist/client/assets/preview-content-C6mifSrd.js +1 -0
- package/dist/client/assets/{preview-dialog-oInIOpgo.js → preview-dialog-CIYvMHEx.js} +1 -1
- package/dist/client/assets/profile-C0w8Yfz5.js +1 -0
- package/dist/client/assets/project-app-view-Sevz3SK2.js +1 -0
- package/dist/client/assets/project-feed-BMtZcRjf.js +1 -0
- package/dist/client/assets/{project-icon-BzJ0b0Ay.js → project-icon-C29pLjaM.js} +1 -1
- package/dist/client/assets/project-profile-B8BUGXs3.js +1 -0
- package/dist/client/assets/project-reports-DLR8Px_E.js +1 -0
- package/dist/client/assets/project-tasks-BpKda9bF.js +1 -0
- package/dist/client/assets/projects-B_9wM2AG.js +1 -0
- package/dist/client/assets/projects-empty-state-D2roHEQS.js +1 -0
- package/dist/client/assets/{prompts-DDV76PD8.js → prompts-SqPXo2ej.js} +1 -1
- package/dist/client/assets/record-editor-DwoOuklP.js +1 -0
- package/dist/client/assets/redirect-editor-BROySec3.js +1 -0
- package/dist/client/assets/reports-7388ESEV.js +1 -0
- package/dist/client/assets/{reports-x7ZW7jY1.js → reports-BAoHRlcZ.js} +1 -1
- package/dist/client/assets/reports-onboarding-DuXWRm1J.js +1 -0
- package/dist/client/assets/reports-tab-BTG8fjPp.js +2 -0
- package/dist/client/assets/repositories-dyiTYnan.js +1 -0
- package/dist/client/assets/{repository-import-picker-DdC8LWMV.js → repository-import-picker-OR5DGZp9.js} +1 -1
- package/dist/client/assets/repository-picker-BSwi4b8i.js +1 -0
- package/dist/client/assets/require-capability-Bqc8OMTK.js +1 -0
- package/dist/client/assets/{required-auth-layout-BeA6YeYQ.js → required-auth-layout-Byop8Zzr.js} +1 -1
- package/dist/client/assets/{reset-password-CZB-h_dr.js → reset-password-BJ7ek2C_.js} +1 -1
- package/dist/client/assets/{resizable-ChG3qNIS.js → resizable-3VTCAPsm.js} +1 -1
- package/dist/client/assets/resolve-tab-icon-CmlW-pVX.js +1 -0
- package/dist/client/assets/{review-settings-1_C-_b80.js → review-settings-DV0Kgix-.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-B4JFOCzI.js → rich-text-link-control-DHguSqou.js} +2 -2
- package/dist/client/assets/roles-BddVa5rc.js +1 -0
- package/dist/client/assets/route-BTyvu5tm.js +1 -0
- package/dist/client/assets/route-Dv07Kl62.js +1 -0
- package/dist/client/assets/route-wKh3eUlH.js +1 -0
- package/dist/client/assets/{runnable-block-editor-DZC0Baz4.js → runnable-block-editor-Do2tVSLe.js} +4 -4
- package/dist/client/assets/{sandbox-lifecycle-context-BonuevCJ.js → sandbox-lifecycle-context-DqykpNrC.js} +1 -1
- package/dist/client/assets/{schema-GqB2SNE_.js → schema-DN-s_HG6.js} +1 -1
- package/dist/client/assets/{scroll-area-9EhbhV4n.js → scroll-area--yTJQfnp.js} +1 -1
- package/dist/client/assets/{search-input-B84gMTxu.js → search-input-BNUWPEYj.js} +1 -1
- package/dist/client/assets/search-toggle-QxOnD3UE.js +1 -0
- package/dist/client/assets/{secret-picker-FZs_qkUu.js → secret-picker-B-IAzUKw.js} +1 -1
- package/dist/client/assets/{secrets-DQnlXKqx.js → secrets-BfsxO5FG.js} +1 -1
- package/dist/client/assets/sections-editor-BSMpRRaP.js +1 -0
- package/dist/client/assets/{select-CcGyx8ty.js → select-BSSRUEpK.js} +1 -1
- package/dist/client/assets/{select-model-BXKVjHOx.js → select-model-BpoA_wtD.js} +1 -1
- package/dist/client/assets/seo-editor-BLMg-jAb.js +1 -0
- package/dist/client/assets/{separator-CIgATGUR.js → separator-B-ZEExAQ.js} +1 -1
- package/dist/client/assets/settings-tab-Bjk0NW75.js +5 -0
- package/dist/client/assets/{sheet-HsqEW5k_.js → sheet--8zhfSHm.js} +1 -1
- package/dist/client/assets/shell-layout-DE5WStxe.js +1 -0
- package/dist/client/assets/skills-5oEukgyq.js +1 -0
- package/dist/client/assets/{sso-w-CGny8A.js → sso-p_1To1BG.js} +1 -1
- package/dist/client/assets/{suggestion-YJaAoX7G.js → suggestion-tikPUWB4.js} +1 -1
- package/dist/client/assets/{switch-BVaVIxoj.js → switch-XXcZ9CO9.js} +1 -1
- package/dist/client/assets/synced-repos-6N09TwCW.js +1 -0
- package/dist/client/assets/{tab-icon-glyph-D7xp64UN.js → tab-icon-glyph-Cg30pNjq.js} +1 -1
- package/dist/client/assets/{table-C4wC7jcA.js → table-UDk1rGCz.js} +1 -1
- package/dist/client/assets/{tabs-CtBDwYTw.js → tabs-DddEqGpk.js} +1 -1
- package/dist/client/assets/{task-board-DTEg_hTj.js → task-board-BQC0qjBI.js} +1 -1
- package/dist/client/assets/task-route-BIVpLzI_.js +1 -0
- package/dist/client/assets/{task-status-yZrVtsEU.js → task-status-5qx4S30L.js} +1 -1
- package/dist/client/assets/taskboard-analytics-BUkhCXum.js +1 -0
- package/dist/client/assets/{tasks-Ay-mjiXF.js → tasks-B2IZJpCB.js} +2 -2
- package/dist/client/assets/tasks-JL_Q5QmF.js +1 -0
- package/dist/client/assets/{textarea-Bd9BZaa2.js → textarea-mkcrN5g-.js} +1 -1
- package/dist/client/assets/thread-analytics-BL_w94D4.js +1 -0
- package/dist/client/assets/thread-button-DwWAsFW7.js +1 -0
- package/dist/client/assets/{hooks-C-YaiNLT.js → thread-intent-1MB6k5b2.js} +6 -6
- package/dist/client/assets/thread-route-BCeXxLYH.js +1 -0
- package/dist/client/assets/{thread-route-BfqlgN7w.js → thread-route-CRhZ1osu.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-C8gQ6cXL.js → thread-sheet-body-Bo7LPBv_.js} +1 -1
- package/dist/client/assets/{toggle-group-BgFCagKD.js → toggle-group-Cz7RSOBM.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-CFttHyWN.js → toolbar-icon-button-CiJmHymh.js} +1 -1
- package/dist/client/assets/{tooltip-CGhrZMes.js → tooltip-CF6AcK-h.js} +1 -1
- package/dist/client/assets/{track-ZExbUuzl.js → track-OWWDrnQ-.js} +1 -1
- package/dist/client/assets/{types-pZX4k5UI.js → types-C-gwtfMH.js} +2 -2
- package/dist/client/assets/usage-stats-CBSbrOk_.js +1 -0
- package/dist/client/assets/{use-ai-providers-CFjUtZPr.js → use-ai-providers-B1JZFVlj.js} +1 -1
- package/dist/client/assets/{use-automations-C8WXPSJY.js → use-automations-D_9NQm3c.js} +1 -1
- package/dist/client/assets/{use-autosave-vgysQ9m_.js → use-autosave-DlgDe-Tc.js} +1 -1
- package/dist/client/assets/use-chat-layout-state-D4JUtDU_.js +1 -0
- package/dist/client/assets/use-connect-companion-DeEhFjbg.js +1 -0
- package/dist/client/assets/{use-connection-mxLfDMRW.js → use-connection-BSRKwy2j.js} +1 -1
- package/dist/client/assets/{use-copy-DUJ6ltm0.js → use-copy-BOgEqZMm.js} +1 -1
- package/dist/client/assets/use-create-virtual-mcp-zRgZOr46.js +1 -0
- package/dist/client/assets/{use-date-fns-locale-DyxqZQPj.js → use-date-fns-locale-DLQqaR-J.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DuPXl9wb.js → use-debounced-autosave-D_28bChm.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BUDe5Br2.js → use-debounced-value-DD9mnPT_.js} +1 -1
- package/dist/client/assets/{use-deco-credits-xeUqHdn1.js → use-deco-credits-BVTpTeQe.js} +1 -1
- package/dist/client/assets/use-decopilot-events-DrrVrYNR.js +1 -0
- package/dist/client/assets/{use-delete-connection-CATogPT_.js → use-delete-connection-XxANt-J1.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-BDkUFo0H.js → use-deployment-admin-2URfC53G.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-DPJWXzMA.js → use-fast-preview-draft-url-DEazNknV.js} +1 -1
- package/dist/client/assets/{use-file-configs-CaiCm4YC.js → use-file-configs-CoaidzsY.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CaPw6C-5.js → use-infinite-scroll-BPqj-R_X.js} +1 -1
- package/dist/client/assets/{use-join-requests-Dpz06WqH.js → use-join-requests-Drw7IeW0.js} +1 -1
- package/dist/client/assets/use-main-panel-tabs-qFkwsuao.js +1 -0
- package/dist/client/assets/use-mcp-auth-status-CZ-0Pvu1.js +1 -0
- package/dist/client/assets/{use-mcp-client-Bax4L87A.js → use-mcp-client-DDH2Tr05.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-DjwM3Aih.js → use-mcp-prompts-CogjK1bQ.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CbB7jVMv.js → use-mcp-tools-B7MXLlq3.js} +1 -1
- package/dist/client/assets/{use-members-D9drExEq.js → use-members-BLvVhz4X.js} +1 -1
- package/dist/client/assets/{use-mobile-BkNVLn-e.js → use-mobile-BCSnRACa.js} +1 -1
- package/dist/client/assets/use-navigate-to-agent-DYNDpstL.js +1 -0
- package/dist/client/assets/use-new-blocks-editor-DGdBBbiW.js +1 -0
- package/dist/client/assets/{use-open-billing-url-YekIfrRD.js → use-open-billing-url-Dq7moyEm.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-BFMVTZYa.js → use-org-auth-client-BaoVl8Zl.js} +1 -1
- package/dist/client/assets/use-org-fs-gM-Wauv_.js +1 -0
- package/dist/client/assets/use-org-repo-syncs-DFgGELdf.js +1 -0
- package/dist/client/assets/{use-org-sso-TEOX56yY.js → use-org-sso-GwZiS-qS.js} +1 -1
- package/dist/client/assets/{use-organization-roles-C2hucAQ7.js → use-organization-roles-CqvDOd51.js} +1 -1
- package/dist/client/assets/{use-organization-settings-3QYUfCpW.js → use-organization-settings-mKOaKHuY.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-KvJ_j5rh.js → use-panel-navigate-CQHE_TAW.js} +1 -1
- package/dist/client/assets/use-project-native-view-presence-CjADt2wx.js +1 -0
- package/dist/client/assets/use-project-scope-UozAP0t-.js +1 -0
- package/dist/client/assets/use-releases-D-iqlxR6.js +1 -0
- package/dist/client/assets/{use-reports-diagnostic-B7R_a5Kv.js → use-reports-diagnostic-CknaDfb_.js} +1 -1
- package/dist/client/assets/{use-secrets-CNuvKS59.js → use-secrets-Bl8vA-cD.js} +1 -1
- package/dist/client/assets/use-section-preview-base-BqbdcWw1.js +1 -0
- package/dist/client/assets/use-session-runtime-B5XfJc8H.js +1 -0
- package/dist/client/assets/{use-tags-DSm1Zgi6.js → use-tags-C0g04rDb.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-Bt0Ix7m9.js → use-task-board-analytics-DQMIr-R3.js} +1 -1
- package/dist/client/assets/use-task-metadata--2QUxhiK.js +1 -0
- package/dist/client/assets/use-thread-analytics-CVoZDp6i.js +1 -0
- package/dist/client/assets/{use-thread-outputs-C38ocjxH.js → use-thread-outputs-CYriWIIs.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-U12d5VJc.js +1 -0
- package/dist/client/assets/{useQueries-CLsJAj_M.js → useQueries-tUSXojRG.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-B912YJiX.js +1 -0
- package/dist/client/assets/{users-Db27IK-5.js → users-DFvmfIoV.js} +1 -1
- package/dist/client/assets/{utils-CwpmExkA.js → utils-BaPwSBi2.js} +1 -1
- package/dist/client/assets/variant-calendar-sxqpD_Oi.js +1 -0
- package/dist/client/assets/{variant-matcher-override-szW3kzoV.js → variant-matcher-override-C-94qzoj.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-BBcGKlDx.js → view-mode-toggle-DrlZskFH.js} +1 -1
- package/dist/client/assets/{virtual-mcp-COzLXyrd.js → virtual-mcp-DBFF2brO.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/AreaChart-C8Vo_8Ig.js +0 -1
- package/dist/client/assets/CartesianChart-l7Ajhkvs.js +0 -6
- package/dist/client/assets/Eye-DR1l_Pl4.js +0 -1
- package/dist/client/assets/Image01-DMj_7b2c.js +0 -1
- package/dist/client/assets/LayoutLeft-7YdGH3zt.js +0 -1
- package/dist/client/assets/Palette-CJ_H2Ji8.js +0 -1
- package/dist/client/assets/Share07-3t9nqqkD.js +0 -1
- package/dist/client/assets/Zap-D3wZltKp.js +0 -1
- package/dist/client/assets/agent-analytics-By50bpU5.js +0 -2
- package/dist/client/assets/agent-app-CcBru_Dc.js +0 -1
- package/dist/client/assets/agent-assets-CoBq8gk-.js +0 -1
- package/dist/client/assets/agent-automation-YwmQKN06.js +0 -20
- package/dist/client/assets/agent-automations-Cq5KP2f5.js +0 -1
- package/dist/client/assets/agent-connect-sources-DxRi8BCM.js +0 -1
- package/dist/client/assets/agent-deck-DVLEuDhA.js +0 -1
- package/dist/client/assets/agent-e2e-5IoZIrla.js +0 -1
- package/dist/client/assets/agent-experiments-Int37iX5.js +0 -1
- package/dist/client/assets/agent-file-Ch99Gr0p.js +0 -1
- package/dist/client/assets/agent-hosting-DELLHkBv.js +0 -1
- package/dist/client/assets/agent-icon-CJ1up34I.js +0 -1
- package/dist/client/assets/agent-library-file-CS1rjRRh.js +0 -1
- package/dist/client/assets/agent-monitor-Ciy1E_-Q.js +0 -1
- package/dist/client/assets/agent-overview-BC_RAnEB.js +0 -1
- package/dist/client/assets/agent-settings-DTx-4cAY.js +0 -1
- package/dist/client/assets/agent-site-editor-code-DMrXO_8H.js +0 -2
- package/dist/client/assets/agent-view-CorDejXP.js +0 -1
- package/dist/client/assets/agents-list-CfDIHVDD.js +0 -1
- package/dist/client/assets/analytics-sections-C5_87xUx.js +0 -1
- package/dist/client/assets/api-keys-DmjbbAZ9.js +0 -1
- package/dist/client/assets/app-editor-Dk5jSXjv.js +0 -1
- package/dist/client/assets/auth-entry-BJ1WxKvH.js +0 -1
- package/dist/client/assets/automation-runs-CRr7g14c.js +0 -1
- package/dist/client/assets/automations-PMz-u3eU.js +0 -1
- package/dist/client/assets/badge-B8dizlCT.js +0 -1
- package/dist/client/assets/cards-ByVpaFgO.js +0 -8
- package/dist/client/assets/category-editor-BVzm0zUq.js +0 -1
- package/dist/client/assets/choose-editor-DwovNL0Y.js +0 -1
- package/dist/client/assets/collection-detail-Djse0DNa.js +0 -1
- package/dist/client/assets/command-DBqQ-b8W.js +0 -1
- package/dist/client/assets/config-9m7obEVv.js +0 -1
- package/dist/client/assets/connection-detail-CtFxBJog.js +0 -1
- package/dist/client/assets/connections-DYm-50T2.js +0 -1
- package/dist/client/assets/context-Cen00PJ2.js +0 -1
- package/dist/client/assets/discover-f-IlJYkY.js +0 -1
- package/dist/client/assets/download-app-dialog-CK-GvdAK.js +0 -1
- package/dist/client/assets/feature-gate-CEAThaDY.js +0 -1
- package/dist/client/assets/feature-paywall-DCqda5W4.js +0 -1
- package/dist/client/assets/file-explorer-IsG6Ynrb.js +0 -2
- package/dist/client/assets/file-preview-DkTtYjnK.js +0 -1
- package/dist/client/assets/file-share-button-BhqfoTyo.js +0 -3
- package/dist/client/assets/folder-icon-0KKPDvC_.js +0 -1
- package/dist/client/assets/format-time-BtXRrtv4.js +0 -1
- package/dist/client/assets/github-icon-BPkd3ouG.js +0 -1
- package/dist/client/assets/github-repo-B15wwZ1g.js +0 -1
- package/dist/client/assets/home-WT_7dde5.js +0 -1
- package/dist/client/assets/icon-button-C4M15Chh.js +0 -1
- package/dist/client/assets/index-B7QeXpyw.css +0 -1
- package/dist/client/assets/index-BlluJU8T.js +0 -1
- package/dist/client/assets/index-BvEM-dvH.js +0 -1
- package/dist/client/assets/index-CKALiP-j.js +0 -1
- package/dist/client/assets/infra-billing-IOD9NeWW.js +0 -1
- package/dist/client/assets/input-BM0pNmJR.js +0 -1
- package/dist/client/assets/legacy-main-redirect-Btysr0GK.js +0 -1
- package/dist/client/assets/library-BS4jnPds.js +0 -161
- package/dist/client/assets/location-oTTXFrSF.js +0 -1
- package/dist/client/assets/members-BkUMEbBZ.js +0 -1
- package/dist/client/assets/mock-board-CxZ6IfnT.js +0 -10
- package/dist/client/assets/monitoring-stats-row-B4HKQfEd.js +0 -1
- package/dist/client/assets/onboarding-C-Uu6LDz.js +0 -1
- package/dist/client/assets/optimistic-project-sidebar-views-QwaUX4Nu.js +0 -1
- package/dist/client/assets/plan-ladder-Io6vIIsL.js +0 -1
- package/dist/client/assets/post-calendar-DTivbJGd.js +0 -1
- package/dist/client/assets/post-editor-hRUF_q7o.js +0 -2
- package/dist/client/assets/preview-content-qYsw7P88.js +0 -1
- package/dist/client/assets/profile-DKiSx-md.js +0 -1
- package/dist/client/assets/project-app-view-BXbadkka.js +0 -1
- package/dist/client/assets/project-feed-CWlgSYJd.js +0 -1
- package/dist/client/assets/project-reports-D27FVZrO.js +0 -1
- package/dist/client/assets/project-tasks-BlwINbrD.js +0 -1
- package/dist/client/assets/record-editor-D0FEEilz.js +0 -1
- package/dist/client/assets/redirect-editor-8U0kYp-L.js +0 -1
- package/dist/client/assets/reports-SHBoIX6T.js +0 -1
- package/dist/client/assets/reports-onboarding-lz-YekBw.js +0 -1
- package/dist/client/assets/reports-tab-CQsFI9AI.js +0 -2
- package/dist/client/assets/repositories-B78A5I4U.js +0 -1
- package/dist/client/assets/repository-picker-DiXvXP64.js +0 -1
- package/dist/client/assets/require-capability-D3lYzq6i.js +0 -1
- package/dist/client/assets/resolve-tab-icon-H5U8-G1F.js +0 -1
- package/dist/client/assets/roles-BaCjCp-z.js +0 -1
- package/dist/client/assets/route-CkeTHcT5.js +0 -1
- package/dist/client/assets/route-D4LTJlBf.js +0 -1
- package/dist/client/assets/route-RUwqIRQf.js +0 -1
- package/dist/client/assets/route-page-header-BvgE0q5Z.js +0 -1
- package/dist/client/assets/search-toggle-Dllmt4oB.js +0 -1
- package/dist/client/assets/sections-editor-IVuj1qGO.js +0 -1
- package/dist/client/assets/seo-editor-DWMKmSd9.js +0 -1
- package/dist/client/assets/settings-tab-qIGPe64v.js +0 -5
- package/dist/client/assets/shell-layout-PsOcpnj-.js +0 -1
- package/dist/client/assets/skill-preview-DDuXNYxe.js +0 -1
- package/dist/client/assets/skills-C9zl4SYU.js +0 -1
- package/dist/client/assets/synced-repos-OeYTgI30.js +0 -1
- package/dist/client/assets/task-route-D8AxgdXG.js +0 -1
- package/dist/client/assets/taskboard-analytics-SldboJtr.js +0 -1
- package/dist/client/assets/tasks-B2JqGigR.js +0 -1
- package/dist/client/assets/thread-analytics-JrMutHmT.js +0 -1
- package/dist/client/assets/thread-button-CjEacYmJ.js +0 -1
- package/dist/client/assets/thread-intent-CNQdM8Ho.js +0 -1
- package/dist/client/assets/thread-route-CSSVlTLS.js +0 -1
- package/dist/client/assets/usage-stats-ClwItUaQ.js +0 -1
- package/dist/client/assets/use-chat-layout-state-Dr584zB8.js +0 -1
- package/dist/client/assets/use-connect-companion-Cgv0bZBV.js +0 -1
- package/dist/client/assets/use-create-virtual-mcp-ZvRac8CV.js +0 -1
- package/dist/client/assets/use-decopilot-events-Dy5N8Y9f.js +0 -1
- package/dist/client/assets/use-entitlements-CLVdcWhS.js +0 -1
- package/dist/client/assets/use-in-settings-Bi1UGPlh.js +0 -1
- package/dist/client/assets/use-main-panel-tabs-D0Ib6HQf.js +0 -1
- package/dist/client/assets/use-mcp-auth-status-DHVKLIQk.js +0 -1
- package/dist/client/assets/use-navigate-to-agent-DWCyMlYN.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-CCZwmfNr.js +0 -1
- package/dist/client/assets/use-org-fs-tnSIwx8e.js +0 -1
- package/dist/client/assets/use-project-native-view-presence-CWXr40Pf.js +0 -1
- package/dist/client/assets/use-project-scope-DhGOPpT1.js +0 -1
- package/dist/client/assets/use-releases-DDoVPY5_.js +0 -1
- package/dist/client/assets/use-section-preview-base-VmECEpeP.js +0 -1
- package/dist/client/assets/use-session-runtime-CiLk98Je.js +0 -1
- package/dist/client/assets/use-task-metadata-DsWPSHLO.js +0 -1
- package/dist/client/assets/use-thread-analytics-CNx40-hY.js +0 -1
- package/dist/client/assets/use-virtual-mcp-C2m1pRHH.js +0 -1
- package/dist/client/assets/useInfiniteQuery-rQtGLM3y.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DPJ-gshr.js +0 -1
- package/dist/client/assets/variant-calendar-ZscKzDf5.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3709,7 +3709,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
3709
3709
|
${J.join(`
|
|
3710
3710
|
`)}`:X}function Tc6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3711
3711
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var f58=200,Bc6=12,Oc6,wc6=300,IS0=3;var GN1=D(()=>{oZ();K8();MS0();Oc6={aheadBy:0,behindBy:0,files:[]}});function qc6($){if(!$||$.includes(".."))return!1;return Rc6.test($)}function g58($){return Mc6.includes($)}function WN1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!qc6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function KN1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Rc6,Mc6;var h58=D(()=>{Rc6=/^[\w./@-]+$/;Mc6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function k40($,Z){let Q=$?.githubRepo;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function l58($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new CE(A7);let J=await Uj($.storage,X,Y);if(J&&await iB($.storage,J)){let F=await XU($,J,{forceRefresh:!0}).catch((U)=>{throw new CE(U instanceof Error?U.message:A7)});await u58($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new CE("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await yc({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:A7;throw new CE(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await GU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=wB$(F instanceof Error?F.message:String(F));throw U?new CE(N):F});await u58($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function u58($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=gi($),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 xj(K,Ic6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Ic6=10485760,CE;var HN1=D(()=>{NW();wS0();J10();LK0();pe();oZ();CE=class CE extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function kc6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Vc6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Py($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Sc6)])}async function _c6($,Z){let Q=$.var.studioContext,Y=OU(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=nx(G?.metadata?.runtime);if(W)return W;let K=BT0(Z.virtualMcpMetadata),H=K==="cms"?await uU1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)G10(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 vc6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await SX($.var.studioContext)}catch{return null}}function zy($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function mi($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=k40(Z,Q);if(!X)throw new x0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=G0(Y);return bc(Y,J.id,X)}function UN1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=vU$(Z);if(Y!==void 0)return $.json({error:Q},429,{...Z9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof o6)return $.json({error:Q},409,Z9);let X=LW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,Z9)}return $.json({error:Q},502,Z9)}async function FN1($,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 i58($){try{let Z=await mi($),Q=await VS0(Z,$.get("vmClaim").branch);return $.json(Q,200,Z9)}catch(Z){return UN1($,Z)}}function S40($,Z){let Y=(CS0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return CS0.set($,X),X.finally(()=>{if(CS0.get($)===X)CS0.delete($)}),Y}async function JQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,Z9);let Y=Q?.runner??zy($);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",...Z9}})}}let O=await B.text(),L=Q?.redactRepoDir?bc6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...Z9}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function bc6($){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 _S0($,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 xc6($){return p58.includes($)}var Vc6,c58=524288,m58=65536,Sc6=1e4,d58=2000,Cc6,CS0,Z9,p58,n58=()=>{let $=new e0;$.use("/:virtualMcpId/:branch/*",Cc6),$.post("/:virtualMcpId/:branch/write",(Q)=>JQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:Py(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>JQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Py(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>JQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Py(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>JQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:Py(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>JQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:Py(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>JQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:Py(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>JQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:Py(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 JQ(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 JQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>JQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>JQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!xc6(Y))return Q.json({error:`step must be one of: ${p58.join(", ")}`},400);let X=Q.get("vmClaim"),J=await uU1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await vc6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,Z9);if(Y==="start"){let G=G0(Q.var.studioContext),W=Am(X.virtualMcpMetadata);try{await HT0({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 JQ(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 iD(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 d68(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 i58(Q);return Z(Q)});let Z=(Q)=>JQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(d58)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return i58(Q);return JQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(d58)])})}),$.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 mi(Q),G=await kS0(J,Y.branch,X.base);return Q.json(G,200,Z9)}catch(X){return UN1(Q,X)}return JQ(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,Z9);let Y=zy(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return S40(X,async()=>{try{await lU1(W,Y,X);let K=k40(J,G);if(K)await l58(W,Y,X,K)}catch(K){if(K instanceof CE)return Q.json({error:K.message},403,Z9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,Z9)}return JQ(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 S40(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,Z9);try{let G=await mi(Q);return await y58(G,Y.branch,J),Q.json({ok:!0},200,Z9)}catch(G){let W=LW(G)===409||G instanceof o6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,Z9)}});return S40(Y.claimName,()=>JQ(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 S40(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await mi(Q),H=W.base??await K.getDefaultBranch();return await SS0(K,Y.branch,H),Q.json({ok:!0},200,Z9)}catch(W){return UN1(Q,W)}});let X=zy(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return S40(J,async()=>{try{await lU1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,Z9)}return JQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k5({maxSize:c58,onError:(Q)=>Q.json({error:"Payload too large"},413,Z9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=zy(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=dU1(F)&&N?[F,U]:X?await Promise.all([_S0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),_S0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await mi(Q);return Promise.all([VS0(w,Y.branch),kS0(w,Y.branch)])})();await hG(K,G0(K).id,"suggesting a commit message");let L=await o68(K,B,O);return Q.json(L,200,Z9)}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,Z9);return Q.json({error:F},502,Z9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k5({maxSize:c58,onError:(Q)=>Q.json({error:"Payload too large"},413,Z9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=zy(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=dU1(F)&&N?[F,U]:X?await Promise.all([_S0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),_S0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await mi(Q);return Promise.all([VS0(w,Y.branch),kS0(w,Y.branch)])})();await hG(K,G0(K).id,"judging whether a change needs review");let L=await s68(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,Z9)}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,Z9);return Q.json({error:F},502,Z9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=zy(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 FN1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",k5({maxSize:m58,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=zy(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=WN1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=KN1(J,W.resolveType);return FN1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",k5({maxSize:m58,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):Tm(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=WN1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!g58(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=KN1(G,K.resolveType);return FN1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var t58=D(()=>{Q8();cW();yi();hU1();Q10();l68();RW();Rm();c68();AW();iK();m68();i68();s51();X10();nU1();a68();oZ();j5();GN1();h58();NT0();HN1();Vc6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Cc6=LS0(async($,Z)=>{let Q=$.var.studioContext;try{r(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=i0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=G0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{kc6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=se({orgId:X.id,virtualMcpId:J,branch:G}),H=await T61(Q,G),F=R61(H,Y),U=u68({userId:F,projectRef:K}),N=W.metadata??null,B=await _c6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await SX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});CS0=new Map;Z9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};p58=["clone","install","start"]});function o58($,Z,Q){let Y=NN1.get($);if(!Y)Y={pending:null,running:!1},NN1.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)yc6($,Y);return J}async function yc6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await gc6(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)NN1.delete($)}}async function gc6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await ci(Z,Q),W=await Z.listDecofileEntries(G,Y),K=YN1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=XN1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3712
|
-
`;await _58(Z.repo,L);let w=O[0]??`${qS0(Y)}/${rU1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of XN1(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 v58(Z,F.values(),X),{decofile:B,skipped:O}=A40(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:pK(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:hc6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof o6)||J>=fc6-1)throw N;await h$(X7(2000,200,J,2,0.5))}}}function hc6($){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 s$1(Y,$.deps.coAuthor)}var fc6=3,NN1;var r58=D(()=>{PK0();ES0();W6();K8();oZ();MS0();NN1=new Map});import{createHmac as s58,randomBytes as uc6,timingSafeEqual as lc6}from"crypto";function a58(){if(vS0)return vS0;let $;try{let Z=w0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return vS0=$?Buffer.from($):uc6(32),vS0}function BN1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+cc6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=s58("sha256",a58()).update(Y).digest("base64url");return`${Y}.${X}`}function e58($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(s58("sha256",a58()).update(Y).digest("base64url"));if(X.length!==J.length||!lc6(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 cc6=21600000,vS0=null;var $98=D(()=>{Q$()});function bS0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function mc6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=bS0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function Z98($){let Z;try{Z=bS0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=mc6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=bS0(G),K=W&&bS0(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 di}from"zod";function ic6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&dc6.test($)}function G98($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function C40($){let Z=$.get("decofileScope");return bc($.var.studioContext,Z.organizationId,Z.githubRepo)}function _40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof o6)return $.json({error:Q},409);let Y=LW(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 W98(){let $=new e0;return $.use("/:virtualMcpId/:branch",J98),$.use("/:virtualMcpId/:branch/*",J98),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await C40(Z),X=await b58(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(Z98(X.decofile),200,{...J,"content-type":"application/json"});let G=BN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(G98(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return _40(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 C40(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 _40(Z,X)}}),$.patch("/:virtualMcpId/:branch",nc6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=tc6.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=T40(X.data)}catch(G){if(G instanceof R40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{jS0(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(oU1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await C40(Z),W=await o58(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:gi(Y)},J),K=BN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:G98(Z)})}catch(G){return _40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await C40(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(LW(W)!==409)throw W;await SS0(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(LW(G)===409)return Z.json({error:"merge-conflict"},409);if(LW(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 _40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await C40(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(LW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return _40(Z,Y)}}),$}var dc6,Q98=500,Y98=1048576,X98=1024,pc6=8388608,nc6,tc6,J98;var K98=D(()=>{NT0();ES0();Q8();cW();hU1();wS0();HN1();oZ();r58();$98();GN1();MS0();iK();dc6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;nc6=k5({maxSize:pc6,onError:($)=>$.json({error:"Payload too large"},413)}),tc6=di.object({set:di.record(di.string(),di.unknown()).optional(),delete:di.array(di.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)<=Q98,{message:`Patch cannot touch more than ${Q98} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Y98),{message:`Each block must be at most ${Y98} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=X98),{message:`Each block key must be at most ${X98} characters`}),J98=LS0(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(!ic6(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||!e58(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await LJ(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(!Tm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=k40(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var H98=($)=>{let Z=new e0;if(Z.use("*",Oi),Z.use("*",b18),Z.route("/",_18($.voiceSessions)),Z.route("/",qk0()),Z.route("/",L$8()),Z.route("/",Q$8()),Z.route("/",q68()),Z.route("/",I68()),Z.route("/",w68()),Z.route("/",T68()),Z.route("/",E68()),Z.route("/",BS0()),Z.route("/tools",b68()),Z.route("/",C68()),Z.route("/",o48({kvStorage:$.kvStorage})),Z.route("/",n48()),Z.route("/fs",K68({getConnection:$.getNatsConnection})),Z.route("/sandbox",n58()),Z.route("/decofile",W98()),Z.route("/",D68()),Z.route("/",F68()),Z.route("/deco-sites",Ik0()),Z.route("/hosting",i18()),Z.route("/monitor",a18()),Z.route("/sso",Pk0()),Z.route("/",DS0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",u18()),$.mountDevAssets)Z.route("/dev-assets",Ck0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ha$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",N68()),Z.route("/mcp",jq0()),Z.route("/mcp/self",HS0()),Z.route("/mcp",zq0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var F98=D(()=>{Q8();v18();x18();Kk0();l18();GF1();p18();e18();_k0();qE();ZF1();UF1();t48();r48();H68();U68();D$0();nH1();Aq0();SU1();B68();O68();j68();P68();vU1();M68();V68();_68();bU1();x68();xU1();Eq0();t58();K98()});import{z as U98}from"zod";class DN1{config;constructor($){this.config=$}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:"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 createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return U98.object({token:U98.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 N98=()=>{};import{createHmac as oc6,timingSafeEqual as rc6}from"crypto";import{z as ii}from"zod";function D98($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return oc6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function O98($,Z){let Q=Buffer.from(JSON.stringify(B98.parse($))).toString("base64url");return`${Q}.${D98(Q,Z)}`}function L98($,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(D98(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!rc6(W,G))return null;try{let K=B98.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+_00)return null;return K.data}catch{return null}}var B98;var w98=D(()=>{Nm();B98=ii.object({sessionId:ii.string().uuid(),organizationId:ii.string().min(1).max(256),userId:ii.string().min(1).max(256),threadId:ii.string().min(1).max(256),expiresAt:ii.number().int().positive()})});import{createHash as sc6}from"crypto";import{z as v40}from"zod";function xS0($){return`user.${sc6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class LN1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new g1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new E98.Kvm(fS0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:fS0.StorageType.Memory,ttl:P98.nanos(_00),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new g1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($){let Z=this.adapter(),Q={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+_00},Y=O98(Q,this.deps.secret),X=await this.kv(),J=xS0(Q),G=await X.get(J),W=G?.operation==="PUT"?ON1.parse(G.json()):null,K=j98.encode(JSON.stringify({sessionId:Q.sessionId,expiresAt:Q.expiresAt,characters:0,requests:0}));try{if(G&&W&&W.expiresAt<=Date.now())await X.update(J,K,G.revision);else await X.create(J,K)}catch{throw new g1(409,{message:"Close your other voice session before starting a new one"})}try{let H=await Z.createTranscriptionToken();return{token:Y,transcriptionToken:H,expiresAt:Q.expiresAt}}catch(H){throw await this.release(Q),H}}authorize($,Z){let Q=L98(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new g1(403,{message:"Invalid voice session"});return Q}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=xS0(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?ON1.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new g1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new g1(429,{message:"Voice session speech limit reached"});try{await J.update(G,j98.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new g1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(xS0($));if(Q?.operation==="PUT"&&ON1.parse(Q.json()).sessionId===$.sessionId)await Z.delete(xS0($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var fS0,E98,P98,ON1,j98;var z98=D(()=>{EG();Nm();w98();fS0=C(fH(),1),E98=C(Wc(),1),P98=C(ry(),1),ON1=v40.object({sessionId:v40.string().uuid(),expiresAt:v40.number(),characters:v40.number().int().nonnegative(),requests:v40.number().int().nonnegative()}),j98=new TextEncoder});function ac6($){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 ec6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},A98=()=>{let $=new e0;return $.use("*",ec6),$.get("/",async(Z)=>{let Q=w0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await pJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:ac6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var T98=D(()=>{Q8();Q$();DV0()});import{z as x1}from"zod";function eU($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Hm6($){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 Fm6($,Z,Q){try{return JSON.parse($)}catch{throw new M98(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Um6($){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:Fm6(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 Nm6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?VF(Q.function.parameters):VF({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Bm6($){if(!$)return;return{openai:{response_format:$}}}function Dm6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function R98($,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 q98($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var $m6=256,Zm6,Qm6,Ym6,Xm6,Jm6,Gm6,Wm6,Km6,M98,I98,V98;var k98=D(()=>{x4();Q8();yi();OH();Zm6=x1.object({type:x1.literal("function"),function:x1.object({name:x1.string(),description:x1.string().optional(),parameters:x1.record(x1.string(),x1.unknown()).optional()})}),Qm6=x1.object({id:x1.string(),type:x1.literal("function"),function:x1.object({name:x1.string(),arguments:x1.string()})}),Ym6=x1.discriminatedUnion("role",[x1.object({role:x1.literal("system"),content:x1.string(),name:x1.string().optional()}),x1.object({role:x1.literal("user"),content:x1.union([x1.string(),x1.array(x1.union([x1.object({type:x1.literal("text"),text:x1.string()}),x1.object({type:x1.literal("image_url"),image_url:x1.object({url:x1.string(),detail:x1.string().optional()})})]))]),name:x1.string().optional()}),x1.object({role:x1.literal("assistant"),content:x1.string().nullable().optional(),name:x1.string().optional(),tool_calls:x1.array(Qm6).optional()}),x1.object({role:x1.literal("tool"),content:x1.string(),tool_call_id:x1.string()})]),Xm6=x1.object({type:x1.literal("text")}),Jm6=x1.object({type:x1.literal("json_object")}),Gm6=x1.object({type:x1.literal("json_schema"),json_schema:x1.object({name:x1.string(),description:x1.string().optional(),schema:x1.record(x1.string(),x1.unknown()),strict:x1.boolean().optional()})}),Wm6=x1.union([Xm6,Jm6,Gm6]),Km6=x1.object({model:x1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:x1.array(Ym6),stream:x1.boolean().optional().default(!1),temperature:x1.number().min(0).max(2).optional(),max_tokens:x1.number().positive().optional(),top_p:x1.number().min(0).max(1).optional(),frequency_penalty:x1.number().min(-2).max(2).optional(),presence_penalty:x1.number().min(-2).max(2).optional(),stop:x1.union([x1.string(),x1.array(x1.string())]).optional(),tools:x1.array(Zm6).optional(),tool_choice:x1.union([x1.literal("auto"),x1.literal("none"),x1.literal("required"),x1.object({type:x1.literal("function"),function:x1.object({name:x1.string()})})]).optional(),response_format:Wm6.optional(),user:x1.string().optional()});M98=class M98 extends Error{constructor($){super($);this.name="MessageConversionError"}};I98=new e0;I98.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(eU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(eU("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(eU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Km6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(eU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Hm6(J.model);if(!G)return $.json(eU("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)=>iP(E.providerId));if(!j)return $.json(eU("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(eU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Um6(J.messages),N=J.tools?Nm6(J.tools):void 0,B=Bm6(J.response_format),O=Dm6(),L=Math.floor(Date.now()/1000);if(J.stream)return iD($,async(w)=>{let j=R98(F,U,N,J,B,$.req.raw.signal);try{let E=zm(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=$m6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:q98(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=R98(F,U,N,J,B,$.req.raw.signal),j=await jU(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:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:q98(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(eU("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(eU(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(eU(X.message,"server_error"),500)}});V98=I98});function Om6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function S98(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=i0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!UZ(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||T9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(c2(U)!==J)continue;if(!Om6(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 C98=D(()=>{Q8();mG()});var v98;var _98=D(()=>{v98={name:"decocms",version:"4.414.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function jm6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??wm6}}var b98,wm6="https://ph.studio.decocms.com",x98;var f98=D(()=>{Q8();Sr();Nf();z9();Q$();vH1();_98();b98=new e0;b98.get("/",($)=>{let Z={version:v98.version,theme:j8$(),...SK().logo&&{logo:SK().logo},...LD()&&{internalUrl:rm1()},...w0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!w0().firecrawlApiKey,hostingEnabled:!!w0().controlplaneRestUrl&&!!w0().controlplaneServiceToken,hostingControlPlaneGa:w0().hostingControlPlaneGa,monitorEnabled:!!w0().clickhouseAnalyticsUrl&&!!w0().clickhouseAnalyticsPassword,monitorGa:w0().monitorGa,plansEnabled:w0().plansEnabled,auth:k08(),posthog:jm6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:YO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});x98=b98});function Ay($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function wN1($){return(Ay($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function y98($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ay($))}&sz=${Z}`}function Em6($,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 g98($){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=Em6(`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 j$}from"zod";var Pm6,h98;var u98=D(()=>{Pm6=j$.object({check_id:j$.string(),title:j$.string(),description:j$.string().optional(),impact:j$.string().optional(),why:j$.string().optional(),category:j$.string(),severity:j$.string(),value_band:j$.string().optional(),value_driver:j$.string().optional(),controllability:j$.string().optional(),pages:j$.array(j$.string()),tasks:j$.array(j$.string()),evidence:j$.string(),sample_scope:j$.string().optional(),sources:j$.array(j$.string())}),h98=j$.object({domain:j$.string(),brand:j$.string(),favicon:j$.string().optional(),scanned_at:j$.string().nullable(),lang:j$.string(),score:j$.number().nullable(),band:j$.string().nullable(),totals:j$.object({measured:j$.number(),registry_total:j$.number(),passed:j$.number(),failed:j$.number(),blocked:j$.number()}),buckets:j$.array(j$.object({id:j$.enum(["critical","important","worth"]),label:j$.string(),items:j$.array(Pm6)})),passing:j$.object({count:j$.number(),items:j$.array(j$.object({check_id:j$.string(),title:j$.string()}))}),not_measured:j$.object({count:j$.number(),groups:j$.array(j$.object({reason:j$.string(),label:j$.string(),count:j$.number(),checks:j$.array(j$.string())}))}),categories:j$.array(j$.object({key:j$.string(),label:j$.string(),score:j$.number().nullable(),band:j$.string().nullable(),pass:j$.number(),fail:j$.number()})),screenshots:j$.array(j$.object({url:j$.string(),page_type:j$.string().optional(),viewport:j$.enum(["desktop","mobile"]),image_url:j$.string()}))})});function l98($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${WW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function yS0($,Z={}){let Q=await fetch(l98($,"",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 h98.parse(await Q.json())}async function c98($,Z={}){let Q=await fetch(l98($,".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 jN1=D(()=>{u98();RB()});import{join as m98}from"path";async function Am6($){try{let Z=await yS0($,{signal:AbortSignal.timeout(zm6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||wN1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function rJ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function Tm6($,Z){let Q=Ay($),Y=Z?.brand?.trim()||wN1(Q),X=y98(Q,128),G=`${(w0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=g98({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${rJ(W)}</title>`,`<meta name="description" content="${rJ(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="${rJ(W)}" />`,`<meta property="og:description" content="${rJ(K)}" />`,`<meta property="og:url" content="${rJ(G)}" />`,`<meta property="og:image" content="${rJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${rJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${rJ(W)}" />`,`<meta name="twitter:description" content="${rJ(K)}" />`,`<meta name="twitter:image" content="${rJ(H)}" />`,`<meta name="twitter:image:alt" content="${rJ(F)}" />`,`<link rel="canonical" href="${rJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${rJ(G)}.md" />`,`<link rel="icon" href="${rJ(X)}" sizes="any" />`].join(`
|
|
3712
|
+
`;await _58(Z.repo,L);let w=O[0]??`${qS0(Y)}/${rU1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of XN1(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 v58(Z,F.values(),X),{decofile:B,skipped:O}=A40(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:pK(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:hc6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof o6)||J>=fc6-1)throw N;await h$(X7(2000,200,J,2,0.5))}}}function hc6($){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 s$1(Y,$.deps.coAuthor)}var fc6=3,NN1;var r58=D(()=>{PK0();ES0();W6();K8();oZ();MS0();NN1=new Map});import{createHmac as s58,randomBytes as uc6,timingSafeEqual as lc6}from"crypto";function a58(){if(vS0)return vS0;let $;try{let Z=w0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return vS0=$?Buffer.from($):uc6(32),vS0}function BN1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+cc6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=s58("sha256",a58()).update(Y).digest("base64url");return`${Y}.${X}`}function e58($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(s58("sha256",a58()).update(Y).digest("base64url"));if(X.length!==J.length||!lc6(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 cc6=21600000,vS0=null;var $98=D(()=>{Q$()});function bS0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function mc6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=bS0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function Z98($){let Z;try{Z=bS0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=mc6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=bS0(G),K=W&&bS0(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 di}from"zod";function ic6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&dc6.test($)}function G98($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function C40($){let Z=$.get("decofileScope");return bc($.var.studioContext,Z.organizationId,Z.githubRepo)}function _40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof o6)return $.json({error:Q},409);let Y=LW(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 W98(){let $=new e0;return $.use("/:virtualMcpId/:branch",J98),$.use("/:virtualMcpId/:branch/*",J98),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await C40(Z),X=await b58(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(Z98(X.decofile),200,{...J,"content-type":"application/json"});let G=BN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(G98(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return _40(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 C40(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 _40(Z,X)}}),$.patch("/:virtualMcpId/:branch",nc6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=tc6.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=T40(X.data)}catch(G){if(G instanceof R40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{jS0(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(oU1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await C40(Z),W=await o58(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:gi(Y)},J),K=BN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:G98(Z)})}catch(G){return _40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await C40(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(LW(W)!==409)throw W;await SS0(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(LW(G)===409)return Z.json({error:"merge-conflict"},409);if(LW(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 _40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await C40(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(LW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return _40(Z,Y)}}),$}var dc6,Q98=500,Y98=1048576,X98=1024,pc6=8388608,nc6,tc6,J98;var K98=D(()=>{NT0();ES0();Q8();cW();hU1();wS0();HN1();oZ();r58();$98();GN1();MS0();iK();dc6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;nc6=k5({maxSize:pc6,onError:($)=>$.json({error:"Payload too large"},413)}),tc6=di.object({set:di.record(di.string(),di.unknown()).optional(),delete:di.array(di.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)<=Q98,{message:`Patch cannot touch more than ${Q98} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Y98),{message:`Each block must be at most ${Y98} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=X98),{message:`Each block key must be at most ${X98} characters`}),J98=LS0(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(!ic6(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||!e58(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await LJ(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(!Tm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=k40(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var H98=($)=>{let Z=new e0;if(Z.use("*",Oi),Z.use("*",b18),Z.route("/",_18($.voiceSessions)),Z.route("/",qk0()),Z.route("/",L$8()),Z.route("/",Q$8()),Z.route("/",q68()),Z.route("/",I68()),Z.route("/",w68()),Z.route("/",T68()),Z.route("/",E68()),Z.route("/",BS0()),Z.route("/tools",b68()),Z.route("/",C68()),Z.route("/",o48({kvStorage:$.kvStorage})),Z.route("/",n48()),Z.route("/fs",K68({getConnection:$.getNatsConnection})),Z.route("/sandbox",n58()),Z.route("/decofile",W98()),Z.route("/",D68()),Z.route("/",F68()),Z.route("/deco-sites",Ik0()),Z.route("/hosting",i18()),Z.route("/monitor",a18()),Z.route("/sso",Pk0()),Z.route("/",DS0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",u18()),$.mountDevAssets)Z.route("/dev-assets",Ck0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ha$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",N68()),Z.route("/mcp",jq0()),Z.route("/mcp/self",HS0()),Z.route("/mcp",zq0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var F98=D(()=>{Q8();v18();x18();Kk0();l18();GF1();p18();e18();_k0();qE();ZF1();UF1();t48();r48();H68();U68();D$0();nH1();Aq0();SU1();B68();O68();j68();P68();vU1();M68();V68();_68();bU1();x68();xU1();Eq0();t58();K98()});import{z as U98}from"zod";class DN1{config;constructor($){this.config=$}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:"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 createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return U98.object({token:U98.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 N98=()=>{};import{createHmac as oc6,timingSafeEqual as rc6}from"crypto";import{z as ii}from"zod";function D98($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return oc6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function O98($,Z){let Q=Buffer.from(JSON.stringify(B98.parse($))).toString("base64url");return`${Q}.${D98(Q,Z)}`}function L98($,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(D98(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!rc6(W,G))return null;try{let K=B98.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+_00)return null;return K.data}catch{return null}}var B98;var w98=D(()=>{Nm();B98=ii.object({sessionId:ii.string().uuid(),organizationId:ii.string().min(1).max(256),userId:ii.string().min(1).max(256),threadId:ii.string().min(1).max(256),expiresAt:ii.number().int().positive()})});import{createHash as sc6}from"crypto";import{z as v40}from"zod";function xS0($){return`user.${sc6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class LN1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new g1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new E98.Kvm(fS0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:fS0.StorageType.Memory,ttl:P98.nanos(_00),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new g1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($){let Z=this.adapter(),Q={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+_00},Y=O98(Q,this.deps.secret),X=await this.kv(),J=xS0(Q),G=await X.get(J),W=G?.operation==="PUT"?ON1.parse(G.json()):null,K=j98.encode(JSON.stringify({sessionId:Q.sessionId,expiresAt:Q.expiresAt,characters:0,requests:0}));try{if(G&&W&&W.expiresAt<=Date.now())await X.update(J,K,G.revision);else await X.create(J,K)}catch{throw new g1(409,{message:"Close your other voice session before starting a new one"})}try{let H=await Z.createTranscriptionToken();return{token:Y,transcriptionToken:H,expiresAt:Q.expiresAt}}catch(H){throw await this.release(Q),H}}authorize($,Z){let Q=L98(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new g1(403,{message:"Invalid voice session"});return Q}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=xS0(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?ON1.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new g1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new g1(429,{message:"Voice session speech limit reached"});try{await J.update(G,j98.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new g1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(xS0($));if(Q?.operation==="PUT"&&ON1.parse(Q.json()).sessionId===$.sessionId)await Z.delete(xS0($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var fS0,E98,P98,ON1,j98;var z98=D(()=>{EG();Nm();w98();fS0=C(fH(),1),E98=C(Wc(),1),P98=C(ry(),1),ON1=v40.object({sessionId:v40.string().uuid(),expiresAt:v40.number(),characters:v40.number().int().nonnegative(),requests:v40.number().int().nonnegative()}),j98=new TextEncoder});function ac6($){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 ec6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},A98=()=>{let $=new e0;return $.use("*",ec6),$.get("/",async(Z)=>{let Q=w0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await pJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:ac6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var T98=D(()=>{Q8();Q$();DV0()});import{z as x1}from"zod";function eU($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Hm6($){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 Fm6($,Z,Q){try{return JSON.parse($)}catch{throw new M98(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Um6($){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:Fm6(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 Nm6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?VF(Q.function.parameters):VF({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Bm6($){if(!$)return;return{openai:{response_format:$}}}function Dm6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function R98($,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 q98($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var $m6=256,Zm6,Qm6,Ym6,Xm6,Jm6,Gm6,Wm6,Km6,M98,I98,V98;var k98=D(()=>{x4();Q8();yi();OH();Zm6=x1.object({type:x1.literal("function"),function:x1.object({name:x1.string(),description:x1.string().optional(),parameters:x1.record(x1.string(),x1.unknown()).optional()})}),Qm6=x1.object({id:x1.string(),type:x1.literal("function"),function:x1.object({name:x1.string(),arguments:x1.string()})}),Ym6=x1.discriminatedUnion("role",[x1.object({role:x1.literal("system"),content:x1.string(),name:x1.string().optional()}),x1.object({role:x1.literal("user"),content:x1.union([x1.string(),x1.array(x1.union([x1.object({type:x1.literal("text"),text:x1.string()}),x1.object({type:x1.literal("image_url"),image_url:x1.object({url:x1.string(),detail:x1.string().optional()})})]))]),name:x1.string().optional()}),x1.object({role:x1.literal("assistant"),content:x1.string().nullable().optional(),name:x1.string().optional(),tool_calls:x1.array(Qm6).optional()}),x1.object({role:x1.literal("tool"),content:x1.string(),tool_call_id:x1.string()})]),Xm6=x1.object({type:x1.literal("text")}),Jm6=x1.object({type:x1.literal("json_object")}),Gm6=x1.object({type:x1.literal("json_schema"),json_schema:x1.object({name:x1.string(),description:x1.string().optional(),schema:x1.record(x1.string(),x1.unknown()),strict:x1.boolean().optional()})}),Wm6=x1.union([Xm6,Jm6,Gm6]),Km6=x1.object({model:x1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:x1.array(Ym6),stream:x1.boolean().optional().default(!1),temperature:x1.number().min(0).max(2).optional(),max_tokens:x1.number().positive().optional(),top_p:x1.number().min(0).max(1).optional(),frequency_penalty:x1.number().min(-2).max(2).optional(),presence_penalty:x1.number().min(-2).max(2).optional(),stop:x1.union([x1.string(),x1.array(x1.string())]).optional(),tools:x1.array(Zm6).optional(),tool_choice:x1.union([x1.literal("auto"),x1.literal("none"),x1.literal("required"),x1.object({type:x1.literal("function"),function:x1.object({name:x1.string()})})]).optional(),response_format:Wm6.optional(),user:x1.string().optional()});M98=class M98 extends Error{constructor($){super($);this.name="MessageConversionError"}};I98=new e0;I98.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(eU("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(eU("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(eU("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Km6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(eU(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Hm6(J.model);if(!G)return $.json(eU("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)=>iP(E.providerId));if(!j)return $.json(eU("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(eU(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Um6(J.messages),N=J.tools?Nm6(J.tools):void 0,B=Bm6(J.response_format),O=Dm6(),L=Math.floor(Date.now()/1000);if(J.stream)return iD($,async(w)=>{let j=R98(F,U,N,J,B,$.req.raw.signal);try{let E=zm(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=$m6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:q98(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=R98(F,U,N,J,B,$.req.raw.signal),j=await jU(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:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:q98(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(eU("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(eU(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(eU(X.message,"server_error"),500)}});V98=I98});function Om6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function S98(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=i0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!UZ(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||T9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(c2(U)!==J)continue;if(!Om6(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 C98=D(()=>{Q8();mG()});var v98;var _98=D(()=>{v98={name:"decocms",version:"4.415.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function jm6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??wm6}}var b98,wm6="https://ph.studio.decocms.com",x98;var f98=D(()=>{Q8();Sr();Nf();z9();Q$();vH1();_98();b98=new e0;b98.get("/",($)=>{let Z={version:v98.version,theme:j8$(),...SK().logo&&{logo:SK().logo},...LD()&&{internalUrl:rm1()},...w0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!w0().firecrawlApiKey,hostingEnabled:!!w0().controlplaneRestUrl&&!!w0().controlplaneServiceToken,hostingControlPlaneGa:w0().hostingControlPlaneGa,monitorEnabled:!!w0().clickhouseAnalyticsUrl&&!!w0().clickhouseAnalyticsPassword,monitorGa:w0().monitorGa,plansEnabled:w0().plansEnabled,auth:k08(),posthog:jm6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:YO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});x98=b98});function Ay($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function wN1($){return(Ay($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function y98($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ay($))}&sz=${Z}`}function Em6($,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 g98($){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=Em6(`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 j$}from"zod";var Pm6,h98;var u98=D(()=>{Pm6=j$.object({check_id:j$.string(),title:j$.string(),description:j$.string().optional(),impact:j$.string().optional(),why:j$.string().optional(),category:j$.string(),severity:j$.string(),value_band:j$.string().optional(),value_driver:j$.string().optional(),controllability:j$.string().optional(),pages:j$.array(j$.string()),tasks:j$.array(j$.string()),evidence:j$.string(),sample_scope:j$.string().optional(),sources:j$.array(j$.string())}),h98=j$.object({domain:j$.string(),brand:j$.string(),favicon:j$.string().optional(),scanned_at:j$.string().nullable(),lang:j$.string(),score:j$.number().nullable(),band:j$.string().nullable(),totals:j$.object({measured:j$.number(),registry_total:j$.number(),passed:j$.number(),failed:j$.number(),blocked:j$.number()}),buckets:j$.array(j$.object({id:j$.enum(["critical","important","worth"]),label:j$.string(),items:j$.array(Pm6)})),passing:j$.object({count:j$.number(),items:j$.array(j$.object({check_id:j$.string(),title:j$.string()}))}),not_measured:j$.object({count:j$.number(),groups:j$.array(j$.object({reason:j$.string(),label:j$.string(),count:j$.number(),checks:j$.array(j$.string())}))}),categories:j$.array(j$.object({key:j$.string(),label:j$.string(),score:j$.number().nullable(),band:j$.string().nullable(),pass:j$.number(),fail:j$.number()})),screenshots:j$.array(j$.object({url:j$.string(),page_type:j$.string().optional(),viewport:j$.enum(["desktop","mobile"]),image_url:j$.string()}))})});function l98($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${WW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function yS0($,Z={}){let Q=await fetch(l98($,"",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 h98.parse(await Q.json())}async function c98($,Z={}){let Q=await fetch(l98($,".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 jN1=D(()=>{u98();RB()});import{join as m98}from"path";async function Am6($){try{let Z=await yS0($,{signal:AbortSignal.timeout(zm6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||wN1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function rJ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function Tm6($,Z){let Q=Ay($),Y=Z?.brand?.trim()||wN1(Q),X=y98(Q,128),G=`${(w0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=g98({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${rJ(W)}</title>`,`<meta name="description" content="${rJ(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="${rJ(W)}" />`,`<meta property="og:description" content="${rJ(K)}" />`,`<meta property="og:url" content="${rJ(G)}" />`,`<meta property="og:image" content="${rJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${rJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${rJ(W)}" />`,`<meta name="twitter:description" content="${rJ(K)}" />`,`<meta name="twitter:image" content="${rJ(H)}" />`,`<meta name="twitter:image:alt" content="${rJ(F)}" />`,`<link rel="canonical" href="${rJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${rJ(G)}.md" />`,`<link rel="icon" href="${rJ(X)}" sizes="any" />`].join(`
|
|
3713
3713
|
`)}function Rm6($,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}
|
|
3714
3714
|
</head>`)}function d98($){let Z=new e0;return Z.get("/:domain/og.png",async(Q)=>{let Y=Ay(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(m98($,"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(`${WW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(qm6)}),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=Ay(Q.req.param("file").replace(/\.md$/,""));try{let X=await c98(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(Mm6)});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=$?m98($,"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 Am6(Ay(Y)),K=Tm6(Y,W);return Q.html(Rm6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var zm6=2500,qm6=1e4,Mm6=1e4;var i98=D(()=>{Q8();RB();jN1();Q$()});function gS0($,Z){return fetch(`${WW({})}${$}`,Z)}async function Im6($,Z){let Q=await yS0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function km6($){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 Vm6,nD,p98=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},n98;var t98=D(()=>{Q8();pG();RB();jN1();Vm6=new Set(["complete","errored","terminated","unknown"]);nD=new e0;nD.use("*",async($,Z)=>{let Q=await v8.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});nD.use("/link-token/*",p98);nD.use("/suggest",p98);nD.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 Im6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});nD.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}=km6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await gS0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Iw({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});nD.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await gS0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${Iw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Vm6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});nD.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await gS0(`/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)}});nD.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await gS0(`/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:[]})}});n98=nD});var Sm6=1048576,EN1;var o98=D(()=>{Q8();cW();Q$();jH1();EN1=new e0;EN1.post("/webhook",k5({maxSize:Sm6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=w0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!ce$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=me$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await de$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as Cm6}from"crypto";function bm6($,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 Cm6(Buffer.from(X),Buffer.from(Y))}function xm6($,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 r98($){let Z=new e0;return Z.post("/webhook",k5({maxSize:_m6,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(!bm6(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"&&!vm6.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 T00().then((U)=>U?.markTenantPoolsDirty(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=xm6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await fm6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function fm6($,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 kS$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var _m6=5242880,vm6;var s98=D(()=>{Q8();cW();AW();R7();vm6=new Set(["check_suite","issue_comment"])});import{DBOS as zN1,SchedulerMode as ym6}from"@dbos-inc/dbos-sdk";async function hm6(){try{return await um6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function um6(){if(!A00())return null;let $=await T00(),{RemoteSandboxProvider:Z}=await Promise.resolve().then(() => (G81(),J81));if(!($ instanceof Z))return null;let{db:Q}=O8(),Y=ZA0(process.env.STUDIO_SANDBOX_TENANT_POOLS),X=await $.listSandboxes(),J=Date.now(),G=yB$({sandboxes:X,pools:Y,records:await gB$(Q,X,Y),now:J}),{batches:W,failed:K}=await hB$(G,wK0(Q,new JX(w0().encryptionKey)),{now:J,orgFsLifetimeMs:jK0}),H=0,F=0;for(let U of W){let N=await $.pushCredentials(U);H+=N.stored,F+=N.kept}return{sandboxes:X.length,pushed:H,kept:F,refused:G.refused,failed:K}}async function lm6($,Z){let Q=await zN1.runStep(hm6,{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 a98(){if(PN1)return;if(!w0().agentSandboxEnabled||!A00())return;PN1=zN1.registerWorkflow(lm6,{name:"sandboxCredentialPushWorkflow"}),zN1.registerScheduled(PN1,{name:"sandboxCredentialPushWorkflow",crontab:gm6,mode:ym6.ExactlyOncePerIntervalWhenActive})}var gm6="1-59/10 * * * *",PN1=null;var e98=D(()=>{JA0();PG();dO();m$1();EK0();AW();Q$()});function $Z8($){let Z=new bD($.db,new JX($.encryptionKey)),Q=new e0;return Q.get("/attachments/:token",async(Y)=>{let X=dV$(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 xQ(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 ZZ8=D(()=>{Q8();dO();T91();hj()});function QZ8($){let Z=new bD($.db,new JX($.encryptionKey));async function Q(X,J){let G=No$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await IW($.db,W.organizationId);if(!K)return;if(await wV0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new e0;return Y.post("/webhook/:secret",k5({maxSize:cm6}),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 cm6=1048576;var YZ8=D(()=>{Q8();cW();dO();jV0();Gf()});import{DBOS as hS0,SchedulerMode as mm6}from"@dbos-inc/dbos-sdk";function JZ8($){TN1=$}function GZ8(){if(!TN1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return TN1}function WZ8(){let $=GZ8();return new bD($.db,new JX($.encryptionKey))}async function pm6($,Z){try{let Q=await WZ8().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await IW(GZ8().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new xQ(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${XZ8}m"`,K=0,H;for(let F=0;F<im6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=Bo$(N,N.changelog?.histories??[],Z);for(let O of B)if(await wV0(Y,Q,O)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function nm6($,Z){let Q=new Date($.getTime()-XZ8*60000),Y=await hS0.runStep(()=>WZ8().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>hS0.runStep(()=>pm6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function KZ8(){if(AN1)return;AN1=hS0.registerWorkflow(nm6,{name:"jiraTriggerSweepWorkflow"}),hS0.registerScheduled(AN1,{name:"jiraTriggerSweepWorkflow",crontab:dm6,mode:mm6.ExactlyOncePerIntervalWhenActive})}var dm6="7-59/10 * * * *",XZ8=35,im6=5,TN1=null,AN1=null;var HZ8=D(()=>{dO();Gf();hj();jV0()});function FZ8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var UZ8,tm6,om6,NZ8;var BZ8=D(()=>{Q8();EG();im();Dc();UZ8=new e0,tm6=["range","if-none-match","if-modified-since"],om6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];UZ8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Di($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new g1(401,{message:"Authentication required"})}if(!Q)throw new g1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new g1(400,{message:"Missing file key"});let X=await n10(Y,Z);if(!X)throw new g1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&FW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new g1(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 FZ8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of tm6){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 g1(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 g1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of om6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),FZ8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});NZ8=UZ8});var b40=b((Ty)=>{var rm6=Ty&&Ty.__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]}),sm6=Ty&&Ty.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))rm6(Z,$,Q)};Object.defineProperty(Ty,"__esModule",{value:!0});sm6(XG(),Ty)});var LZ8=b((DZ8)=>{Object.defineProperty(DZ8,"__esModule",{value:!0});DZ8.version=void 0;DZ8.version="3.4.0"});var EZ8=b(($N)=>{var am6=$N&&$N.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty($N,"__esModule",{value:!0});$N.NodeTransport=$N.VERSION=void 0;$N.nodeResolveHost=Xd6;var d5=b40(),em6=q0("net"),RN1=q0("tls"),$d6=q0("path"),wZ8=q0("fs"),Zd6=am6(q0("dns")),Qd6=LZ8();$N.VERSION=Qd6.version;var Yd6="nats.js";class jZ8{socket;version;lang;yields=[];signal=(0,d5.deferred)();closedNotification=(0,d5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=Yd6,this.version=$N.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,d5.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 d5.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 d5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new d5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,d5.deferred)(),Q,Y=(0,em6.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,d5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=d5.DataBuffer.concat(...this.yields),X=(0,d5.extractProtocolMessage)(Y);if(X!=="")try{let J=d5.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,d5.deferred)();try{if($=(0,$d6.resolve)($),!(0,wZ8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,wZ8.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,d5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new d5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,d5.deferred)();try{let X=(0,RN1.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 d5.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,d5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new d5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,d5.deferred)();try{let Y=(0,RN1.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 d5.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,d5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,d5.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 RN1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,d5.render)($)}`);let Z=(0,d5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,d5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,d5.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}}$N.NodeTransport=jZ8;function Xd6($){let Z=(0,d5.deferred)();return Zd6.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 RZ8=b((TZ8)=>{Object.defineProperty(TZ8,"__esModule",{value:!0});TZ8.connect=Jd6;var PZ8=EZ8(),zZ8=b40(),AZ8=b40();function Jd6($={}){if((0,AZ8.hasWsProtocol)($))return Promise.reject(AZ8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,zZ8.setTransportFactory)({factory:()=>{return new PZ8.NodeTransport},dnsResolveFn:PZ8.nodeResolveHost}),zZ8.NatsConnectionImpl.connect($)}});var qZ8=b((tD)=>{var Wd6=tD&&tD.__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]}),Kd6=tD&&tD.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Wd6(Z,$,Q)};Object.defineProperty(tD,"__esModule",{value:!0});tD.connect=void 0;var Hd6=RZ8();Object.defineProperty(tD,"connect",{enumerable:!0,get:function(){return Hd6.connect}});Kd6(b40(),tD)});function kZ8($){let Z=$?.connectFn??Bd6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:Nd6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{O++;let L=X7(Ud6,Fd6,O-1,2,0.5);await h$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?MZ8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=VZ8.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 Bd6($){return IZ8.connect($)}var MZ8,IZ8,VZ8,Fd6=100,Ud6=3000,Nd6=3000;var SZ8=D(()=>{K8();MZ8=C(ry(),1),IZ8=C(qZ8(),1),VZ8=C(fH(),1)});function uS0($){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 lS0($,Z){return`${$}.${Z}`}class qN1{cache;constructor($){this.cache=uS0({ttlMs:$?.ttlMs??Dd6,maxSize:$?.maxSize??Od6})}async get($,Z){return this.cache.get(lS0($,Z))??null}async set($,Z,Q){this.cache.set(lS0($,Z),Q)}async invalidate($,Z){this.cache.delete(lS0($,Z)),this.cache.delete(lS0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Dd6=600000,Od6=5000;var CZ8=()=>{};function cS0($,Z){return`${$}:${Z}`}function MN1($){let Z=uS0({ttlMs:$?.ttlMs??Ld6,maxSize:$?.maxSize??wd6}),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(_Z8,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(cS0(K,H))},set(K,H,F){Z.set(cS0(K,H),F)},invalidate(K,H){Z.delete(cS0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(_Z8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(cS0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var _Z8="studio.ai-provider-keys.invalidate",Ld6=30000,wd6=5000;var vZ8=()=>{};class IN1{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 bZ8=($)=>{let Z;return()=>Z??=$()},VN1,kN1;var xZ8=D(()=>{_6();VN1=bZ8(()=>T$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),kN1=bZ8(()=>T$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function Rd6($=gZ8){return{name:IU,subjects:[`${C71}.>`],storage:kH.StorageType.File,max_age:Pd6,max_bytes:Ad6,max_msgs_per_subject:Td6,discard:kH.DiscardPolicy.Old,retention:kH.RetentionPolicy.Limits,duplicate_window:zd6,num_replicas:$}}class hZ8{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 fZ8($){let Z=yZ8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function Vd6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Ed6().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 kd6($,Z){return $.info?.cluster?Z:1}function Sd6($){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 SN1{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=Rd6(X);try{await Y.streams.info(IU),await Y.streams.update(IU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(IU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(IU),await Y.streams.add(J);else throw G}},Q=await I8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await kH.jetstreamManager($),X=kd6($,gZ8);try{await Z(Y,X)}catch(J){if(X<=1||!Sd6(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:$d});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=Vd6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=Bv$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=v71(H,{runId:Z}),N=performance.now()-F;VN1().record(N),kN1().add(1,{"org.id":Y??"unknown"}),Id6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?fZ8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),Md6)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 I8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:fZ8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:$d}),!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=v71(Z,{runId:$,dedup:Q});VN1().record(performance.now()-X),kN1().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=Nv$({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"?kH.DeliverPolicy.New:kH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=nj($),W;try{W=await I8(async()=>{return(await Y.consumers.get(IU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:$d})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=lR0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(yR0()).pipeThrough(gR0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){O(),L.close();return}let E=j;if(E.kind==="done"){if(J){O(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(IU,{filter:nj($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var kH,yZ8,jd6=($)=>{let Z;return()=>Z??=$()},Ed6,Pd6=86400000000000,zd6=120000000000,Ad6=4294967296,gZ8,Td6=500000,qd6,Md6,Id6;var uZ8=D(()=>{K8();b71();cR0();hR0();_6();xZ8();kH=C(fH(),1),yZ8=C(ry(),1),Ed6=jd6(()=>T$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),gZ8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);qd6=process.env.STREAM_ENCODE_TRACE==="1",Md6=process.env.DECOPILOT_STREAM_TRACE==="1";Id6=qd6?new hZ8:null});function mS0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,sH(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 lZ8=D(()=>{d8()});class CN1{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 Cd6($,Z,Q={}){let Y=$.startsWith("thread:")?GH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function _N1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await LU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await Xm($,{threadId:X,runBranch:G?.branch}),K=await ce($,Q,h$1(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=Cd6(W,await KA0($,X),{flat:yx(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 X3(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 cZ8=D(()=>{oZ();RW();R7()});async function mZ8($,Z,Q){let Y=Z.organizationId;if(!CX(Z))return!1;if(!Wf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=$U(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await r6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),B8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var dZ8=D(()=>{v4();xY();hm();FH();O9()});function gd6($){return $ instanceof TX}function iZ8($,Z){return Z-$>=fd6}class vN1{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??_d6;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??bd6,Q=this.options.itemIntervalMs??vd6,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()-w91),uZ1);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()-yd6));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 yZ1(this.taskBoard,X,Y),await gZ1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==R$.progress||CX(W)||W.assigneeId!==z8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await _N1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!iZ8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:R$.progress,to:R$.review,reason:H}}).catch(()=>{}),B8(J,F),await UH(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==R$.progress||G.assigneeId!==z8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await NH(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),gd6(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()+xd6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==R$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),B8(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(!iZ8(gB(Q,Z.reviewCycleStartedAt),Date.now()))return;await UH($,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(!CX(Y))return!1;let X=Y.assigneeId===z8,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 _N1(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 cm(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 mZ8(G,Y,W))return!0;if(await wb$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!vZ1(W))return!1;return await um(G,Y,{previewMatchesHead:bZ1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await mj($,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 _d6=60000,vd6=300000,bd6=50,xd6=60000,fd6=900000,yd6=120000;var pZ8=D(()=>{v4();eT0();cZ8();qU();X$0();FH();dZ8();O9();OW();lZ1();R7();S10();lm()});import{readdir as hd6,rm as dS0}from"fs/promises";import{join as iS0}from"path";async function pS0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-ud6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Ry($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await nZ8($,X,Z);else if(!X.startsWith(".")){let J=iS0($,X),G=await Ry(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await nZ8(J,K,Z)}if((await Ry(J)).length===0)await dS0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function nZ8($,Z,Q){let Y=0,X=iS0($,Z),J=await Ry(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=iS0(X,W),H=await Ry(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=iS0(K,U);await dS0(B,{recursive:!0,force:!0}),Y++}}if((await Ry(K)).length===0)await dS0(K,{recursive:!0,force:!0})}if((await Ry(X)).length===0)await dS0(X,{recursive:!0,force:!0});return Y}async function Ry($){try{return(await hd6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var ud6=30;var bN1=()=>{};import{DBOS as xN1,SchedulerMode as ld6}from"@dbos-inc/dbos-sdk";async function md6(){let $=[nW(),vy(),WN()],Z=0;for(let Q of $)try{Z+=await pS0(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 dd6($,Z){await xN1.runStep(()=>md6(),{name:"monitoringRetention"})}function oZ8(){if(tZ8)return;tZ8=!0;let $=xN1.registerWorkflow(dd6,{name:"monitoringRetentionWorkflow"});xN1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:cd6,mode:ld6.ExactlyOncePerIntervalWhenActive})}var cd6="23 4 * * *",tZ8=!1;var rZ8=D(()=>{z3();bN1()});function sZ8($){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 fQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await h2($.db,Z,Y.role);return X.boundAuth=FH1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new Rz(Q,void 0,X.boundAuth,Y.role,"self"),cj(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var aZ8=D(()=>{PK();sF()});function id6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function pd6(){return{services:id6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function td6(){for(let $ of nd6)$()}function eZ8($){let Z=[...fN1.logs,$];fN1={...fN1,logs:Z.length>500?Z.slice(-500):Z},td6()}function yN1(){return od6}var fN1,nd6,od6=!1;var gN1=D(()=>{fN1=pd6(),nd6=new Set});import{EventEmitter as rd6}from"events";var hN1;var $78=D(()=>{gN1();hN1=new rd6;hN1.on("request",($)=>{eZ8($)})});function Z78(){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=pi(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>pi(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${Q9.tool}${B}${Q9.dim}(${w})${Q9.reset}`}else if(N.method)J=`${Q9.dim}${pi(N.method)}${Q9.reset}`}}catch{}}let W=pi(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${Q9.mcp}${pi(F.slice(0,12))}\u2026${Q9.reset}`}else if(X==="/mcp")W=`${Q9.mcp}/mcp${Q9.reset}`;else if(X==="/mcp/registry")W=`${Q9.mcp}/mcp/registry${Q9.reset}`;let K=ad6(Y),H=G?"\u25C0":"\u2190";if(!yN1())console.log(`${Q9.dim}${H}${Q9.reset} ${K}${Y}${Q9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=sd6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!yN1())console.log(`${Q9.dim}${O}${Q9.reset} ${K}${Y}${Q9.reset} ${W}${J?` ${J}`:""} ${N}${U}${Q9.reset} ${Q9.duration}${B}${Q9.reset}`);hN1.emit("request",{method:Y,path:pi(X),status:U,duration:F,timestamp:new Date})}}}var Q9,sd6=($)=>{if($>=500)return Q9.serverError;if($>=400)return Q9.clientError;if($>=300)return Q9.redirect;return Q9.ok},ad6=($)=>{return Q9[$]||Q9.reset},pi=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Q78=D(()=>{gN1();$78();Q9={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 G78}from"crypto";import{mkdir as ed6,readdir as $i6,rm as Y78,stat as W78}from"fs/promises";import{join as lN1,relative as Zi6}from"path";import{z as e$}from"zod";function H78($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return lN1(Qi6,Z)}function F78($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function uN1($,Z){let Q=H78($),Y=F78(Z);return lN1(Q,Y)}function Yi6($,Z,Q,Y){let X=w0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return G78("sha256",X).update(J).digest("hex")}function J78($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=Yi6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${F78(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function U78($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${G78("md5","etag").update(Y).digest("hex")}"`}async function N78($,Z,Q,Y,X){try{let J=await $i6($,{withFileTypes:!0});for(let G of J){let W=lN1($,G.name),H=Zi6(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 N78(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 W78(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:U78(W,F.mtime,F.size)})}catch{}}}}catch{}}function B78($,Z){let Y=G0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:e$.object({prefix:e$.string().optional(),maxKeys:e$.number().optional().default(1000),continuationToken:e$.string().optional(),delimiter:e$.string().optional()}),outputSchema:e$.object({objects:e$.array(e$.object({key:e$.string(),size:e$.number(),lastModified:e$.string(),etag:e$.string()})),nextContinuationToken:e$.string().optional(),isTruncated:e$.boolean(),commonPrefixes:e$.array(e$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=H78(Y);await ed6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await N78(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),O=N+W<U.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:e$.object({key:e$.string()}),outputSchema:e$.object({contentType:e$.string().optional(),contentLength:e$.number(),lastModified:e$.string(),etag:e$.string(),metadata:e$.record(e$.string(),e$.string()).optional()}),handler:async(X)=>{let J=X,G=uN1(Y,J.key),W=await W78(G);return{contentType:HF1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:U78(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:e$.object({key:e$.string(),expiresIn:e$.number().optional()}),outputSchema:e$.object({url:e$.string(),expiresIn:e$.number()}),handler:async(X)=>{let J=X,G=kD(J.expiresIn,X78);return{url:J78(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:e$.object({key:e$.string(),expiresIn:e$.number().optional(),contentType:e$.string().optional()}),outputSchema:e$.object({url:e$.string(),expiresIn:e$.number()}),handler:async(X)=>{let J=X,G=kD(J.expiresIn,X78);return{url:J78(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:e$.object({key:e$.string()}),outputSchema:e$.object({success:e$.boolean(),key:e$.string()}),handler:async(X)=>{let J=X,G=uN1(Y,J.key);try{return await Y78(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:e$.object({keys:e$.array(e$.string()).max(1000)}),outputSchema:e$.object({deleted:e$.array(e$.string()),errors:e$.array(e$.object({key:e$.string(),message:e$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=uN1(Y,K);try{await Y78(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function cN1($,Z,Q){let Y=B78(Z,Q),X=new gL({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:IZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:e$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:e$.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 H3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),_W(X,J,$,"mcp:dev-assets")}async function D78($,Z,Q,Y){let J=B78(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 Qi6="./data/assets",X78=3600,K78,O78;var L78=D(()=>{Q$();Wd();Q8();jX0();Gd();QJ();SD();_k0();K78=new e0;K78.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return cN1($.req.raw,Z,Y)});O78=K78});var w78={};T6(w78,{mountDevRoutes:()=>Xi6});function Xi6($,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 cN1(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 D78(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",O78);let Q=new e0;Q.use("*",IH({mountPath:"/api/dev-assets"})),Q.route("/",Ck0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var j78=D(()=>{Q8();QF1();_k0();L78()});var V78={};T6(V78,{watchHandler:()=>I78,resolveCorsOrigin:()=>q78,isSsoExemptPath:()=>T78,isAllowedOAuthRedirectUri:()=>M78,createApp:()=>Di6});import{readFileSync as Ji6}from"fs";import{PrometheusSerializer as Gi6}from"@opentelemetry/exporter-prometheus";import{DBOS as oD}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Hi6,oAuthProtectedResourceMetadata as Fi6}from"better-auth/plugins";async function Wi6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,P78(E78)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),P78(E78)]),Q.release(),!0}catch{return Q.release(!0),!1}}function P78($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function T78($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${wk0}/`)||$.startsWith(`${Uk0}/`)}function R78($){return $==="local.studio.decocms.com"}function q78($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(R78(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function M78($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||R78($.hostname)}async function Di6($={}){let Z=$.database??O8(),Q=!1;$9.stop().catch((h)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",h)});let Y,X,J,G,W=new qN1,K,H,F,U=null;if($.disableNats)K=MN1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new B$0,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(h)=>{return(async()=>{let m=h.getReader();try{while(!0){let{done:M0}=await m.read();if(M0)break}}catch{}finally{m.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=kZ8();let h=w0().natsCredsPath,m;if(h)try{m=Ji6(h,"utf8")}catch(z$){console.error(`[app] failed to read NATS_CREDS at ${h}; connecting anonymously`,z$)}U.init(w0().natsUrls,m?{creds:m}:void 0);let M0=S01()?new B01({getJetStream:()=>U.getJetStream()}):null;M0?.init().catch(()=>{}),Y=M0;let D0=new v61({getJetStream:()=>U.getJetStream()});D0.init().catch(()=>{}),X=D0;let h0=new Hf(IZ1,{getJetStream:()=>U.getJetStream()}),g0=new Hf(C10,{getJetStream:()=>U.getJetStream()});h0.init().catch(()=>{}),g0.init().catch(()=>{}),J={reads:h0,cards:g0};let T1=new OY1({getJetStream:()=>U.getJetStream()});T1.init().catch(()=>{}),G=T1,K=MN1({getConnection:()=>U.getConnection()}),H=new IN1({getConnection:()=>U.getConnection()}),F=new SN1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),F08(U),U.onReady(()=>{M0?.init().catch((z$)=>{console.error("[McpListCache] Deferred init failed:",z$)}),D0.init().catch((z$)=>{console.error("[SkillCatalogCache] Deferred init failed:",z$)}),h0.init().catch((z$)=>{console.error("[PrReadCache] Deferred init failed:",z$)}),g0.init().catch((z$)=>{console.error("[PrCardCache] Deferred init failed:",z$)}),T1.init().catch((z$)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",z$)}),K.start(),rH$(()=>U.getConnection()),F.init().catch((z$)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",z$)})})}if(_E)await _E();D01(Y),x61(X),VZ1(J),LY1(G);let B={storage:new Ph(Z.db),sseHub:$9,onThreadFinished:async(h,m)=>dm(new Y3(Z.db),h,m,new jG(Z.db))},O=new u71(B),L=new b80(Z.db),w=new CN1(L);w.start(),Ob$(H),H.start((h)=>{MR0(h),O.execute({type:"CANCEL",taskId:h}).catch((m)=>{console.error("[Decopilot] CancelBroadcast execute failed:",m)})}).catch((h)=>{console.error("[Decopilot] CancelBroadcast start failed:",h)}),U?.onReady(()=>{H.start().catch((h)=>{console.error("[CancelBroadcast] Deferred start failed:",h)})});let j=()=>U?.getConnection()??null;sH1(j),U?.onReady(()=>sH1(j)),tY1(j),U?.onReady(()=>tY1(j)),F.init().catch((h)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",h)}),_E=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),q18(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),sH$(),G.teardown(),D01(null),x61(null),VZ1(null),LY1(null)};let E=new e0;if(E.use("*",NY1({enabled:(h)=>Bi(h,"debug")==="1"})),E.use("*",DC0),E.use("/*",J08({origin:(h,m)=>q78(h,{baseUrl:w0().baseUrl,requestOrigin:new URL(m.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(h,m)=>{if(await m(),h.req.path.includes("/files/"))return;if(h.req.path.includes("/fs/")&&h.req.path.endsWith("/read"))return;h.header("X-Frame-Options","DENY"),h.header("Content-Security-Policy","frame-ancestors 'none'")}),!w0().noTui)E.use("*",Z78());E.use("*",async(h,m)=>{if(await m(),Qp(h.req.path))return;if(h.res.status>=500){let D0=await h.res.clone().text();console.error(`[5xx Response] ${h.req.method} ${h.req.path} - ${h.res.status}:`,D0)}}),E.get(pY.HEALTH,(h)=>{if(Q)return h.json({status:"shutting_down"},503);return h.json({status:"ok"})}),E.get(pY.HEALTH_LIVE,(h)=>{return h.json({status:"ok"})}),E.get(pY.HEALTH_READY,async(h)=>{if(Q)return h.json({status:"shutting_down"},503);let m={};if(m.postgres={status:await Wi6(Z.pool)?"up":"down"},U)m.nats=U.isConnected()?{status:"up"}:{status:"down"};else m.nats={status:"down"};let M0=m.postgres.status==="up",D0=M0?200:503;return h.json({status:M0?"ready":"not_ready",services:m},D0)}),E.get(pY.METRICS,async(h)=>{try{let m=await jC0.collect(),M0=Ki6.serialize(m.resourceMetrics);return h.text(M0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(m){return console.error("Failed to collect metrics:",m),h.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${pY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(h)=>{let m=h.req.param("queueName");if(!Ui6.has(m))return h.json({error:`Unknown queue: ${m}`},404);let[M0,D0]=await Promise.all([oD.listQueuedWorkflows({queueName:m,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),oD.listQueuedWorkflows({queueName:m,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return h.json({queue_length:M0.length,in_flight:D0.length})}),E.route("/api/config",x98),E.route("/api/_reports",n98),E.route("/api/_stripe",EN1),E.route("/api/_github",r98({taskBoard:()=>t,contextFactory:()=>g})),E.route("/api/_git",zi);let T={db:Z.db,encryptionKey:w0().encryptionKey};E.route("/api/_jira",QZ8(T)),E.route("/api/_jira",$Z8(T)),E.route("/report",d98($.clientDir)),E.route("/api/auth/custom",S08),E.route("/api/auth/desktop",b08),E.all("/api/auth/admin/*",N18),E.all("/api/auth/*",async(h)=>{return await v8.handler(h.req.raw)});let z=ga$();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",p80),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",p80),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",S80),E.route("/",ma$()),E.use("/oauth-proxy/:connectionId/*",p80),E.all("/oauth-proxy/:connectionId/*",z78);let A=async(h)=>{let M0=await Ni6()(h.req.raw),D0=await M0.json();return Response.json(D0,M0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",p80),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(h)=>{let M0=await Bi6()(h.req.raw),D0=await M0.json();return Response.json(D0,M0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=W08({ttlMs:120000}),_=await _e$({db:Z.db,auth:v8,encryption:{key:w0().encryptionKey},observability:{tracer:XO,meter:T$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});fQ.set(_),hm1({db:Z.db,baseUrl:y5()}),ve$({db:Z.db}),ye$({db:Z.db}),ie$({db:Z.db}),JZ8({db:Z.db,encryptionKey:w0().encryptionKey}),pk$({db:Z.db}),se$({db:Z.db}),OS$({db:Z.db});let V=WY0(Z.db),y=new vo(Z.db),g=sZ8({db:Z.db});KY1({storage:V,studioContextFactory:g}),r71({systemDatabaseUrl:vo0(w0().databaseUrl,w0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$9}}),m71({dispatchRunFn:Jv$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$9}});let c=new Ph(Z.db),t=new Y3(Z.db),n=new jG(Z.db),J0=new vN1(t,g,n);if(w0().taskBoardReviewSweeperEnabled){J0.start();let h=_E;_E=async()=>{await h?.(),J0.dispose()}}Mv$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let h=U?.getConnection();return h?await A78.jetstreamManager(h):null},messageParts:c.messageParts(),resolveRun:async(h)=>{let m=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",h).executeTakeFirst();return m?{orgId:m.organization_id,createdBy:m.created_by,version:m.message_storage_version??1,status:m.status,runFenceToken:m.run_fence_token,title:m.title??null}:null},completeRunIfNotCompleted:async(h,m)=>{let M0=await c.completeRunIfNotCompleted(h,m);if(mS0($9,m,h,M0),M0)await dm(t,h,m,n);return M0},markRunRequiresAction:async(h,m)=>{let M0=await c.requiresActionIfInProgress(h,m);return mS0($9,m,h,M0),M0},markRunFailed:async(h,m,M0,D0)=>{let h0=await c.markRunFailed(h,m,M0,D0);if(mS0($9,m,h,h0),h0)await dm(t,h,m,n);return h0},clearSynthesizedError:async(h,m)=>{await c.messageParts().replaceMessageParts(h,pj(h,m),[])},persistTitle:(h,m,M0)=>c.update(h,m,{title:M0}),onTitleUpdated:async({runId:h,orgId:m,title:M0})=>{let D0=await c.get(h,m).catch(()=>null);$9.emit(m,sH(h,D0?.status??"in_progress",{title:M0,virtualMcpId:D0?.virtual_mcp_id??void 0,createdBy:D0?.created_by,triggerId:D0?.trigger_id,branch:D0?.branch??null,harnessId:D0?.harness_id??void 0,createdAt:D0?.created_at,updatedAt:D0?.updated_at}))},bumpProgress:async({runId:h,orgId:m})=>{await c.bumpProgress(h,m)},recordCompleted:async({runId:h,orgId:m,distinctId:M0,usage:D0})=>{b1.capture({distinctId:M0,event:"chat_message_completed",groups:{organization:m},properties:{organization_id:m,thread_id:h,transport:"projector",input_tokens:D0.inputTokens,output_tokens:D0.outputTokens,total_tokens:D0.totalTokens}})},recordFailed:async({runId:h,orgId:m,distinctId:M0,reason:D0,kind:h0})=>{b1.capture({distinctId:M0,event:"chat_message_failed",groups:{organization:m},properties:{organization_id:m,thread_id:h,transport:"projector",error_category:h0,error_message:D0}})},purgeRun:async(h)=>{F.purge(h)}}),C_$({studioContextFactory:g,systemDatabaseUrl:vo0(w0().databaseUrl,w0().databasePgSsl),streamBuffer:F}),oZ8(),um1(),xe$(),he$(),ne$(),KZ8(),sk$(),ee$(),LS$(),a98();let F0=async(h,m,M0)=>{let D0=await V.findById(h,m);if(!D0)throw Error("Automation not found");return UY1({automationId:D0.id,organizationId:D0.organization_id,triggerId:null})},K0=new Ei(V,({automation:h,trigger:m,contextMessages:M0,idempotencyKey:D0})=>N$0({automationId:h.id,organizationId:h.organization_id,triggerId:m.id,contextMessages:M0},{idempotencyKey:D0})),E0=[nW(),vy(),WN()];for(let h of E0)pS0(h).then(()=>{}).catch((m)=>console.error("[monitoring] Retention cleanup failed:",m));let X0=()=>v8.api.deleteAllExpiredApiKeys().catch((h)=>console.error("[auth] Expired API key cleanup failed:",h));X0(),setInterval(X0,86400000).unref(),E.use("*",async(h,m)=>{if(NC0(h.req.path))return m();let M0={measure:async(h0,g0)=>{CW(h,h0);try{return await g0()}finally{F3(h,h0)}}},D0=await fQ.create(h.req.raw,{timings:M0});D0.automationRunner=F0,h.set("studioContext",D0);try{await m()}finally{let h0=D0.pendingRevalidations;if(h0.length>0)Promise.race([Promise.allSettled(h0),h$(30000)]).catch((T1)=>console.error("[studio] revalidation cleanup error:",T1))}}),E.use("/api/:org/decopilot/*",Oi),E.use("/api/:org/v1/*",Oi),E.use("/api/:org/files/*",Oi),E.use("*",async(h,m)=>{if(T78(h.req.path))return m();let M0=h.get("studioContext");if(!M0?.organization?.id||!M0?.auth?.user?.id)return m();if(!(await M0.storage.orgSsoConfig.getByOrgId(M0.organization.id))?.enforced)return m();if(!await M0.storage.orgSsoSessions.isValid(M0.auth.user.id,M0.organization.id))return h.json({error:"SSO authentication required for this organization"},403);return m()});let Z0=new e0;Z0.use("*",IH({mountPath:"/api/org-sso"})),Z0.route("/",Pk0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(h)=>{return h.json({tools:Dp0,grouped:Tz()})}),E.use("/mcp/*",async(h,m)=>{CW(h,"mcp");try{return await m()}finally{F3(h,"mcp")}});let Q0=async(h,m)=>{let M0=h.var.studioContext;if(!M0.auth.user?.id&&!M0.auth.apiKey?.id){let D0=new URL(h.req.url),h0=h.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),g0=h0?`${h0}://${D0.host}`:D0.origin;return h.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${g0}${D0.pathname}/.well-known/oauth-protected-resource"`}})}return await m()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),FW()){let{mountDevRoutes:h}=(j78(),$C0(w78));h(E,Q0)}let s=new e0;s.use("*",IH({mountPath:"/mcp"})),s.route("/",jq0()),E.route("/mcp",s);let Y0=new e0;Y0.use("*",IH({mountPath:"/mcp/self"})),Y0.route("/",HS0()),E.route("/mcp/self",Y0);let l0=new e0;l0.use("*",IH({mountPath:"/mcp"})),l0.route("/",zq0()),E.route("/mcp",l0),E.use("/api/:org/models/*",async(h,m)=>{CW(h,"llm_models");try{return await m()}finally{F3(h,"llm_models")}});let v0=I18({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",v0),E.route("/api",NZ8);let P1=new e0;P1.use("*",IH({mountPath:"/api"})),P1.route("/",BS0()),E.route("/api",P1),E.route("/api",V98);let d0=new e0;d0.use("*",IH({mountPath:"/api"})),d0.route("/",DS0({tokenStorage:y,automationEventDispatcher:K0})),E.route("/api",d0);let j0=new xo(Z.db),L0=new e0;L0.use("*",IH({mountPath:"/api"})),L0.route("/",qk0()),E.route("/api",L0),E.route("/api/deco-sites",m18()),E.route("/api/deco-apps",A98());let s0=new e0;s0.use("*",IH({mountPath:"/api/deco-sites"})),s0.route("/",Ik0()),E.route("/api/deco-sites",s0),E.route(wk0,B18()),E.route(z68,R68()),E.route("/api/_editor-resolve",S98()),E.route(f08,y08()),E.route(Uk0,n08());let E1=w0(),K1=new LN1({adapter:E1.elevenlabsApiKey?new DN1({apiKey:E1.elevenlabsApiKey,model:E1.elevenlabsVoiceModel,voiceId:E1.elevenlabsVoiceId}):null,secret:E1.studioJwtSecret??E1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),C0=H98({voiceSessions:K1,kvStorage:j0,runRegistry:O,streamBuffer:F,sseHub:$9,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:K0,mountDevAssets:FW(),mcpAuth:Q0,oauthProxyHandler:z78,watchHandler:I78,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",C0),E.notFound((h)=>{return h.json({error:"Not Found",path:h.req.path},404)}),E.onError(k18),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([$9.stop(),_E?Promise.resolve(_E()).finally(()=>{_E=null}):Promise.resolve()]),U)await U.drain().catch((h)=>console.error("[shutdown] NATS drain error:",h));console.log("[shutdown] Flushing telemetry..."),await uX().catch((h)=>console.error("[shutdown] Telemetry flush error:",h)),console.log("[shutdown] Closing database..."),await b6$(Z).catch((h)=>console.error("[shutdown] Database close error:",h)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await oD.registerQueue(P3,{partitionQueue:!0,concurrency:JY1,minPollingIntervalMs:GY1}),await oD.registerQueue(E3,{partitionQueue:!0,concurrency:t71,priorityEnabled:!0}),await oD.registerQueue(JN,{workerConcurrency:w0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await oD.registerQueue(GN,{workerConcurrency:w0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await oD.registerQueue(QO,{partitionQueue:!0,concurrency:S_$}),await oD.registerQueue(yE,DS$),await YF1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((h)=>oD.deleteQueue(h))),await WY1(Z.pool),Z7$().catch((h)=>{console.error("[studio-pack-backfill] failed:",h)}),lm1().catch((h)=>{console.error("[org-fs] public-sets boot sync kick failed:",h)})}})}var A78,E78=5000,_E=null,z78=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 fQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await Hi(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 C80(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(Y==="authorize")O=B.authorization_endpoint;else if(Y==="token")O=B.token_endpoint;else if(Y==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=ca$(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=w0().baseUrl??j.origin;try{if(!M78(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(Z08(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},P=$.req.header("Content-Type");if(P)E["Content-Type"]=P;let T=$.req.header("Authorization");if(T)E.Authorization=T;let z,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&P?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let n=atob(T.slice(6).trim()),J0=n.indexOf(":");if(J0!==-1){let F0=decodeURIComponent(n.slice(0,J0)),K0=decodeURIComponent(n.slice(J0+1));A=F0||null,q=K0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),c=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof c==="string"&&c)q=c;let t=new URLSearchParams;for(let[n,J0]of y.entries())t.append(n,J0.toString());z=t.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),c={};try{c=g?JSON.parse(g):{}}catch{z=g}let t=typeof c==="object"&&c!==null&&!Array.isArray(c);if(z===void 0&&!t)z=g;if(z===void 0){let n=c,J0=n.metadata&&typeof n.metadata==="object"?n.metadata:{};n.metadata={...J0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},z=JSON.stringify(n),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let x=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[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let c=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,t=null;try{t=await Fi(G.connection_url)??O}catch{t=O}let n={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:c,clientId:A,clientSecret:q,tokenEndpoint:t};await new U9(X.db,X.vault).upsert(n)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},I78=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&&(!TU(Y)||!await RU(Z)))return $.json({error:"forbidden"},403);let W=G?yT0:Y;if(G)BD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return iD($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!$9.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(()=>{$9.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),$9.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),$9.remove(W,K),N()})})})},Ki6,Ui6,Ni6=()=>Fi6(v8),Bi6=()=>Hi6(v8);var k78=D(()=>{K8();Q$();cm1();fe$();ue$();te$();j$0();FZ1();$08();S10();z9();Dc();d8();Q8();Gk0();G08();BY1();pG();sF();MH1();PG();_6();Y6();vH1();x08();g08();t08();hH1();D18();nH1();$F1();ZF1();oK();dV0();QF1();S18();Kk0();F98();N98();z98();GF1();T98();Eq0();D$0();k98();Aq0();xU1();C98();vU1();f98();i98();t98();o98();s98();e98();ZZ8();YZ8();HZ8();UF1();BZ8();bU1();SU1();r40();SZ8();EJ();AA0();SZ1();Ze();Ye();jY1();CZ8();vZ8();aH1();uZ8();l71();lZ8();Lt();yo();ND();O9();nK1();pZ8();rZ8();iJ0();bN1();z3();XF1();UD();g71();iJ0();fR0();Qp0();Yp0();aZ8();Pu();Q78();yi();MH1();ym();am();IR0();A78=C(fH(),1);Ki6=new Gi6,Ui6=new Set([P3,E3,JN,GN,QO,yE])});var v78={};T6(v78,{resolveClientDir:()=>zi6,resolveAssetPathWithTraversalCheck:()=>_78,isPathWithinDirectory:()=>C78,createAssetHandler:()=>Ai6});import{resolve as x40,dirname as Oi6,join as Li6,extname as wi6,basename as ji6,sep as S78}from"path";function Ei6($,Z){if($===Z||ji6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${S78}assets${S78}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function C78($,Z){let Q=x40(Z),Y=x40($);return Y===Q||Y.startsWith(Q+"/")}function _78({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=x40(Z,Q);if(!C78(Y,Z))return null;return Y}function zi6($,Z="../client"){let Q=new URL($),Y=Oi6(Q.pathname);return x40(Y,Z)}function Ai6($={}){let{env:Z="production",clientDir:Q=Pi6,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=_78({requestPath:W,clientDir:Q});if(!K)return null;let H=Li6(K,"index.html"),F=x40(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(wi6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:Ei6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var Pi6="./dist/client";var b78=()=>{};var x78={};T6(x78,{tryUpgradePreviewWs:()=>ki6,tryHandlePreviewHttp:()=>Vi6,previewWebSocketHandler:()=>Si6,parsePreviewBaseDomain:()=>Ii6,isPreviewWsData:()=>nS0,extractHandleFromHost:()=>mN1});function qi6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function Mi6(){return new Response(Ri6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function Ii6($){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 mN1($,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 Vi6($,Z){let Q=mN1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return y40(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(uc)&&qi6($))return Mi6();return X.headers.delete(uc),X}function y40($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function nS0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function ki6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=mN1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return y40(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return y40(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return y40(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 y40(426,"upgrade failed");return}function f40($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var Ti6=256,Ri6='<!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>',Si6;var f78=D(()=>{JA0();Si6={open($){let Z=$.data;if(!nS0(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)}`),f40($,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)=>{f40($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{f40($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!nS0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=Ti6){f40($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!nS0(Z))return;f40($,Z,1000,"")}}});var u78={};T6(u78,{printBanner:()=>_i6,bannerLines:()=>h78,BANNER_LINES:()=>y78,BANNER_GRADIENT:()=>g78});function Ci6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function h78($){let Z=y78.map((Q,Y)=>{let[X,J,G]=Ci6(g78[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 _i6($){console.log("");for(let Z of h78($))console.log(Z);console.log("")}var y78,g78;var l78=D(()=>{y78=[" \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 "],g78=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});K8();var QB1="13";function YB1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:QB1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}K8();import JQ8 from"pg";var XB1=8314027461559302n,GQ8=600000,WQ8=500;async function JB1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=GQ8}=$,X=$.log??((K)=>console.log(K)),J=new JQ8.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",[XB1.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 h$(WQ8)}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)",[XB1.toString()])}catch{}await J.end().catch(()=>{})}}Q$();XC0();_6();function JY8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function zC0($,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 cB1(){let $=JY8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:zC0($,"--cpu-prof-dir")??process.cwd(),name:zC0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(zC0($,"--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.'}))}RC0();var e40;function sB1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=uE();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(()=>{}),e40=setInterval(()=>void Z().catch(()=>{}),$),e40.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(e40)clearInterval(e40)}}import*as KY8 from"bun:jsc";var{startSamplingProfiler:HY8,samplingProfilerStackTraces:FY8}=KY8;function aB1(){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{HY8()}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=FY8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function eB1(){cB1();let $=[sB1(),rB1(),aB1()];return()=>{for(let Z of $)Z()}}import{existsSync as ui6}from"fs";var sJ=w0();hB1();var{DBOS:g40,DBOSClient:vi6}=await import("@dbos-inc/dbos-sdk");function oN1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var bi6=[P3,E3,JN,GN,QO,yE],xi6=sJ.dispatchRole==="worker"?bi6:sJ.dispatchRole==="api"?[]:void 0;g40.setConfig(YB1({systemDatabaseUrl:oN1(sJ.databaseUrl,sJ.databasePgSsl),poolSize:sJ.dbosPoolSize,executorID:sJ.podName,listenQueues:xi6}));var{createApp:fi6}=await Promise.resolve().then(() => (k78(),V78)),{isServerPath:yi6}=await Promise.resolve().then(() => (r40(),AB1)),{createAssetHandler:gi6,resolveClientDir:p78}=await Promise.resolve().then(() => (b78(),v78)),hi6=sJ.port,c78=p78(import.meta.url,"../client"),n78=ui6(c78)?c78:p78(import.meta.url,"../dist/client"),li6=gi6({clientDir:n78,isServerPath:yi6}),ci6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function mi6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(ci6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:di6,tryHandlePreviewHttp:ii6,tryUpgradePreviewWs:pi6,previewWebSocketHandler:dN1,isPreviewWsData:iN1}=await Promise.resolve().then(() => (f78(),x78)),{getOrInitSharedRunner:t78}=await Promise.resolve().then(() => (AW(),zz$)),o78=di6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),m78={baseDomain:o78??"",getRunner:t78};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())t78().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var tS0=await fi6({clientDir:n78}),pN1=process.env.DBOS_CONDUCTOR_KEY?.trim(),d78=process.env.DBOS_CONDUCTOR_URL?.trim();await JB1({databaseUrl:oN1(sJ.databaseUrl,sJ.databasePgSsl)},()=>g40.launch({...pN1?{conductorKey:pN1}:{},...pN1&&d78?{conductorURL:d78}:{}}));console.log(`[dbos] application version: ${g40.applicationVersion}`);var nN1=5,tN1=0;await I8(async()=>{tN1++;try{return await tS0.initDbos()}catch($){let Z=tN1>=nN1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${tN1}/${nN1} failed, ${Z}`,$),$}},{maxAttempts:nN1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!sJ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (l78(),u78));console.log("");for(let Z of $())console.log(Z)}var ni6=Bun.serve({idleTimeout:0,port:hi6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(o78){let Y=await pi6($,Z,m78);if(Y===void 0)return;if(Y)return Y;let X=await ii6($,m78);if(X)return X}let Q=await li6($);if(Q)return mi6(Q);return tS0.fetch($,{server:Z})},websocket:{open($){if(iN1($.data))dN1.open($)},message($,Z){if(iN1($.data))dN1.message($,Z)},close($){if(iN1($.data))dN1.close($)}},development:!1}),ti6=eB1();if(sJ.localMode)Promise.resolve().then(() => (Nf(),DR0)).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(() => (Nf(),DR0));Z()}catch{}});var i78=!1;async function oi6($){let Z;try{Z=await vi6.create({systemDatabaseUrl:oN1(sJ.databaseUrl,sJ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:E3,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:E3}),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 oS0($){if(i78)return;i78=!0,console.log(`
|
|
3715
3715
|
[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{ti6(),tS0.markShuttingDown();let J=WB1(sJ.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await h$(J),await ni6.stop(!0);let G=g40.executorID;await g40.shutdown(),await oi6(G),await tS0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>oS0("SIGTERM"));process.on("SIGINT",()=>oS0("SIGINT"));process.on("SIGHUP",()=>oS0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),oS0("uncaughtException")});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as s,f5 as de}from"./index-DUhG4tsR.js";import{d as J,a as z,s as G,b as pe,e as ve,f as U,g as Q,h as me,i as ee,j as X,k as he,l as fe,p as ye,r as xe,D as Ae,u as ae,R as ge,S as Ie,m as be,n as Pe,o as te,q as Ee,t as Ce,v as ke,x as Se,y as Oe,z as De,A as Le,B as Ne,E as we,Z as We,L as R,G as Te,F as $,H as Y,I as H,J as T,K as _e,M as je,N as Re,O as w,P as Me,Q as Ke,T as ze,U as Be,V as re,W as Ge,_ as B,$ as Fe,a0 as M,a1 as Ve,a2 as Xe}from"./CartesianChart-l7Ajhkvs.js";function F(a,e){var t,r;return(t=(r=a.graphicalItems.cartesianItems.find(n=>n.id===e))===null||r===void 0?void 0:r.xAxisId)!==null&&t!==void 0?t:J}function V(a,e){var t,r;return(t=(r=a.graphicalItems.cartesianItems.find(n=>n.id===e))===null||r===void 0?void 0:r.yAxisId)!==null&&t!==void 0?t:J}var ie=(a,e,t)=>U(a,"xAxis",F(a,e),t),ne=(a,e,t)=>Q(a,"xAxis",F(a,e),t),le=(a,e,t)=>U(a,"yAxis",V(a,e),t),se=(a,e,t)=>Q(a,"yAxis",V(a,e),t),$e=z([G,ie,le,ne,se],(a,e,t,r,n)=>ee(a,"xAxis")?X(e,r,!1):X(t,n,!1)),Ye=(a,e)=>e,oe=z([he,Ye],(a,e)=>a.filter(t=>t.type==="area").find(t=>t.id===e)),ue=a=>{var e=G(a),t=ee(e,"xAxis");return t?"yAxis":"xAxis"},He=(a,e)=>{var t=ue(a);return t==="yAxis"?V(a,e):F(a,e)},Ze=(a,e,t)=>fe(a,ue(a),He(a,e),t),qe=z([oe,Ze],(a,e)=>{var t;if(!(a==null||e==null)){var{stackId:r}=a,n=me(a);if(!(r==null||n==null)){var l=(t=e[r])===null||t===void 0?void 0:t.stackedData,o=l?.find(i=>i.key===n);if(o!=null)return o.map(i=>[i[0],i[1]])}}}),Je=z([G,ie,le,ne,se,qe,pe,$e,oe,ve],(a,e,t,r,n,l,o,i,u,d)=>{var{chartData:c,dataStartIndex:v,dataEndIndex:x}=o;if(!(u==null||a!=="horizontal"&&a!=="vertical"||e==null||t==null||r==null||n==null||r.length===0||n.length===0||i==null)){var{data:m}=u,h;if(m&&m.length>0?h=m:h=c?.slice(v,x+1),h!=null)return ya({layout:a,xAxis:e,yAxis:t,xAxisTicks:r,yAxisTicks:n,dataStartIndex:v,areaSettings:u,stackedData:l,displayedData:h,chartBaseValue:d,bandSize:i})}}),Ue=["id"],Qe=["activeDot","animationBegin","animationDuration","animationEasing","connectNulls","dot","fill","fillOpacity","hide","isAnimationActive","legendType","stroke","xAxisId","yAxisId"];function N(){return N=Object.assign?Object.assign.bind():function(a){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(a[r]=t[r])}return a},N.apply(null,arguments)}function ce(a,e){if(a==null)return{};var t,r,n=ea(a,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(a);for(r=0;r<l.length;r++)t=l[r],e.indexOf(t)===-1&&{}.propertyIsEnumerable.call(a,t)&&(n[t]=a[t])}return n}function ea(a,e){if(a==null)return{};var t={};for(var r in a)if({}.hasOwnProperty.call(a,r)){if(e.indexOf(r)!==-1)continue;t[r]=a[r]}return t}function Z(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(a);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(a,n).enumerable})),t.push.apply(t,r)}return t}function W(a){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?Z(Object(t),!0).forEach(function(r){aa(a,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(t)):Z(Object(t)).forEach(function(r){Object.defineProperty(a,r,Object.getOwnPropertyDescriptor(t,r))})}return a}function aa(a,e,t){return(e=ta(e))in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function ta(a){var e=ra(a,"string");return typeof e=="symbol"?e:e+""}function ra(a,e){if(typeof a!="object"||!a)return a;var t=a[Symbol.toPrimitive];if(t!==void 0){var r=t.call(a,e);if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(a)}function K(a,e){return a&&a!=="none"?a:e}var ia=a=>{var{dataKey:e,name:t,stroke:r,fill:n,legendType:l,hide:o}=a;return[{inactive:o,dataKey:e,type:l,color:K(r,n),value:te(t,e),payload:a}]},na=s.memo(a=>{var{dataKey:e,data:t,stroke:r,strokeWidth:n,fill:l,name:o,hide:i,unit:u,tooltipType:d,id:c}=a,v={dataDefinedOnItem:t,getPosition:Ce,settings:{stroke:r,strokeWidth:n,fill:l,dataKey:e,nameKey:void 0,name:te(o,e),hide:i,type:d,color:K(r,l),unit:u,graphicalItemId:c}};return s.createElement(Ee,{tooltipEntrySettings:v})});function la(a){var{clipPathId:e,points:t,props:r}=a,{needClip:n,dot:l,dataKey:o}=r,i=re(r);return s.createElement(Fe,{points:t,dot:l,className:"recharts-area-dots",dotClassName:"recharts-area-dot",dataKey:o,baseProps:i,needClip:n,clipPathId:e})}function sa(a){var{showLabels:e,children:t,points:r}=a,n=r.map(l=>{var o,i,u={x:(o=l.x)!==null&&o!==void 0?o:0,y:(i=l.y)!==null&&i!==void 0?i:0,width:0,lowerWidth:0,upperWidth:0,height:0};return W(W({},u),{},{value:l.value,payload:l.payload,parentViewBox:void 0,viewBox:u,fill:void 0})});return s.createElement(Be,{value:e?n:void 0},t)}function q(a){var{points:e,baseLine:t,needClip:r,clipPathId:n,props:l}=a,{layout:o,type:i,stroke:u,connectNulls:d,isRange:c}=l,{id:v}=l,x=ce(l,Ue),m=re(x),h=Ge(x);return s.createElement(s.Fragment,null,e?.length>1&&s.createElement(R,{clipPath:r?"url(#clipPath-".concat(n,")"):void 0},s.createElement(B,N({},h,{id:v,points:e,connectNulls:d,type:i,baseLine:t,layout:o,stroke:"none",className:"recharts-area-area"})),u!=="none"&&s.createElement(B,N({},m,{className:"recharts-area-curve",layout:o,type:i,connectNulls:d,fill:"none",points:e})),u!=="none"&&c&&Array.isArray(t)&&s.createElement(B,N({},m,{className:"recharts-area-curve",layout:o,type:i,connectNulls:d,fill:"none",points:t}))),s.createElement(la,{points:e,props:x,clipPathId:n}))}function oa(a){var e,t,{alpha:r,baseLine:n,points:l,strokeWidth:o}=a,i=(e=l[0])===null||e===void 0?void 0:e.y,u=(t=l[l.length-1])===null||t===void 0?void 0:t.y;if(!M(i)||!M(u))return null;var d=r*Math.abs(i-u),c=Math.max(...l.map(v=>v.x||0));return T(n)?c=Math.max(n,c):n&&Array.isArray(n)&&n.length&&(c=Math.max(...n.map(v=>v.x||0),c)),T(c)?s.createElement("rect",{x:0,y:i<u?i:i-d,width:c+(o?parseInt("".concat(o),10):1),height:Math.floor(d)}):null}function ua(a){var e,t,{alpha:r,baseLine:n,points:l,strokeWidth:o}=a,i=(e=l[0])===null||e===void 0?void 0:e.x,u=(t=l[l.length-1])===null||t===void 0?void 0:t.x;if(!M(i)||!M(u))return null;var d=r*Math.abs(i-u),c=Math.max(...l.map(v=>v.y||0));return T(n)?c=Math.max(n,c):n&&Array.isArray(n)&&n.length&&(c=Math.max(...n.map(v=>v.y||0),c)),T(c)?s.createElement("rect",{x:i<u?i:i-d,y:0,width:d,height:Math.floor(c+(o?parseInt("".concat(o),10):1))}):null}function ca(a){var{alpha:e,layout:t,points:r,baseLine:n,strokeWidth:l}=a;return t==="vertical"?s.createElement(oa,{alpha:e,points:r,baseLine:n,strokeWidth:l}):s.createElement(ua,{alpha:e,points:r,baseLine:n,strokeWidth:l})}function da(a){var{needClip:e,clipPathId:t,props:r,previousPointsRef:n,previousBaselineRef:l}=a,{points:o,baseLine:i,isAnimationActive:u,animationBegin:d,animationDuration:c,animationEasing:v,onAnimationStart:x,onAnimationEnd:m}=r,h=s.useMemo(()=>({points:o,baseLine:i}),[o,i]),E=_e(h,"recharts-area-"),b=je(),[C,O]=s.useState(!1),P=!C,p=s.useCallback(()=>{typeof m=="function"&&m(),O(!1)},[m]),y=s.useCallback(()=>{typeof x=="function"&&x(),O(!0)},[x]);if(b==null)return null;var A=n.current,g=l.current;return s.createElement(sa,{showLabels:P,points:o},r.children,s.createElement(Re,{animationId:E,begin:d,duration:c,isActive:u,easing:v,onAnimationEnd:p,onAnimationStart:y,key:E},f=>{if(A){var k=A.length/o.length,L=f===1?o:o.map((I,D)=>{var _=Math.floor(D*k);if(A[_]){var j=A[_];return W(W({},I),{},{x:w(j.x,I.x,f),y:w(j.y,I.y,f)})}return I}),S;return T(i)?S=w(g,i,f):Me(i)||Ke(i)?S=w(g,0,f):S=i.map((I,D)=>{var _=Math.floor(D*k);if(Array.isArray(g)&&g[_]){var j=g[_];return W(W({},I),{},{x:w(j.x,I.x,f),y:w(j.y,I.y,f)})}return I}),f>0&&(n.current=L,l.current=S),s.createElement(q,{points:L,baseLine:S,needClip:e,clipPathId:t,props:r})}return f>0&&(n.current=o,l.current=i),s.createElement(R,null,u&&s.createElement("defs",null,s.createElement("clipPath",{id:"animationClipPath-".concat(t)},s.createElement(ca,{alpha:f,points:o,baseLine:i,layout:b,strokeWidth:r.strokeWidth}))),s.createElement(R,{clipPath:"url(#animationClipPath-".concat(t,")")},s.createElement(q,{points:o,baseLine:i,needClip:e,clipPathId:t,props:r})))}),s.createElement(ze,{label:r.label}))}function pa(a){var{needClip:e,clipPathId:t,props:r}=a,n=s.useRef(null),l=s.useRef();return s.createElement(da,{needClip:e,clipPathId:t,props:r,previousPointsRef:n,previousBaselineRef:l})}class va extends s.PureComponent{render(){var{hide:e,dot:t,points:r,className:n,top:l,left:o,needClip:i,xAxisId:u,yAxisId:d,width:c,height:v,id:x,baseLine:m,zIndex:h}=this.props;if(e)return null;var E=de("recharts-area",n),b=x,{r:C,strokeWidth:O}=Ne(t),P=we(t),p=C*2+O,y=i?"url(#clipPath-".concat(P?"":"dots-").concat(b,")"):void 0;return s.createElement(We,{zIndex:h},s.createElement(R,{className:E},i&&s.createElement("defs",null,s.createElement(Te,{clipPathId:b,xAxisId:u,yAxisId:d}),!P&&s.createElement("clipPath",{id:"clipPath-dots-".concat(b)},s.createElement("rect",{x:o-p/2,y:l-p/2,width:c+p,height:v+p}))),s.createElement(pa,{needClip:i,clipPathId:b,props:this.props})),s.createElement($,{points:r,mainColor:K(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:y}),this.props.isRange&&Array.isArray(m)&&s.createElement($,{points:m,mainColor:K(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:y}))}}var ma={activeDot:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",connectNulls:!1,dot:!1,fill:"#3182bd",fillOpacity:.6,hide:!1,isAnimationActive:"auto",legendType:"line",stroke:"#3182bd",strokeWidth:1,type:"linear",label:!1,xAxisId:0,yAxisId:0,zIndex:Ae.area};function ha(a){var e,{activeDot:t,animationBegin:r,animationDuration:n,animationEasing:l,connectNulls:o,dot:i,fill:u,fillOpacity:d,hide:c,isAnimationActive:v,legendType:x,stroke:m,xAxisId:h,yAxisId:E}=a,b=ce(a,Qe),C=ke(),O=Se(),{needClip:P}=Oe(h,E),p=ae(),{points:y,isRange:A,baseLine:g}=(e=De(D=>Je(D,a.id,p)))!==null&&e!==void 0?e:{},f=Le();if(C!=="horizontal"&&C!=="vertical"||f==null||O!=="AreaChart"&&O!=="ComposedChart")return null;var{height:k,width:L,x:S,y:I}=f;return!y||!y.length?null:s.createElement(va,N({},b,{activeDot:t,animationBegin:r,animationDuration:n,animationEasing:l,baseLine:g,connectNulls:o,dot:i,fill:u,fillOpacity:d,height:k,hide:c,layout:C,isAnimationActive:v,isRange:A,legendType:x,needClip:P,points:y,stroke:m,width:L,left:S,top:I,xAxisId:h,yAxisId:E}))}var fa=(a,e,t,r,n)=>{var l=t??e;if(T(l))return l;var o=a==="horizontal"?n:r,i=o.scale.domain();if(o.type==="number"){var u=Math.max(i[0],i[1]),d=Math.min(i[0],i[1]);return l==="dataMin"?d:l==="dataMax"||u<0?u:Math.max(Math.min(i[0],i[1]),0)}return l==="dataMin"?i[0]:l==="dataMax"?i[1]:i[0]};function ya(a){var{areaSettings:{connectNulls:e,baseValue:t,dataKey:r},stackedData:n,layout:l,chartBaseValue:o,xAxis:i,yAxis:u,displayedData:d,dataStartIndex:c,xAxisTicks:v,yAxisTicks:x,bandSize:m}=a,h=n&&n.length,E=fa(l,o,t,i,u),b=l==="horizontal",C=!1,O=d.map((p,y)=>{var A,g,f,k;if(h)k=n[c+y];else{var L=Y(p,r);Array.isArray(L)?(k=L,C=!0):k=[E,L]}var S=(A=(g=k)===null||g===void 0?void 0:g[1])!==null&&A!==void 0?A:null,I=S==null||h&&!e&&Y(p,r)==null;if(b){var D;return{x:H({axis:i,ticks:v,bandSize:m,entry:p,index:y}),y:I?null:(D=u.scale.map(S))!==null&&D!==void 0?D:null,value:k,payload:p}}return{x:I?null:(f=i.scale.map(S))!==null&&f!==void 0?f:null,y:H({axis:u,ticks:x,bandSize:m,entry:p,index:y}),value:k,payload:p}}),P;return h||C?P=O.map(p=>{var y,A=Array.isArray(p.value)?p.value[0]:null;if(b){var g;return{x:p.x,y:A!=null&&p.y!=null&&(g=u.scale.map(A))!==null&&g!==void 0?g:null,payload:p.payload}}return{x:A!=null&&(y=i.scale.map(A))!==null&&y!==void 0?y:null,y:p.y,payload:p.payload}}):P=b?u.scale.map(E):i.scale.map(E),{points:O,baseLine:P??0,isRange:C}}function xa(a){var e=xe(a,ma),t=ae();return s.createElement(ge,{id:e.id,type:"area"},r=>s.createElement(s.Fragment,null,s.createElement(Ie,{legendPayload:ia(e)}),s.createElement(na,{dataKey:e.dataKey,data:e.data,stroke:e.stroke,strokeWidth:e.strokeWidth,fill:e.fill,name:e.name,hide:e.hide,unit:e.unit,tooltipType:e.tooltipType,id:r}),s.createElement(be,{type:"area",id:r,data:e.data,dataKey:e.dataKey,xAxisId:e.xAxisId,yAxisId:e.yAxisId,zAxisId:0,stackId:Pe(e.stackId),hide:e.hide,barSize:void 0,baseValue:e.baseValue,isPanorama:t,connectNulls:e.connectNulls}),s.createElement(ha,N({},e,{id:r}))))}var Aa=s.memo(xa,ye);Aa.displayName="Area";var ga=["axis"],Pa=s.forwardRef((a,e)=>s.createElement(Ve,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:ga,tooltipPayloadSearcher:Xe,categoricalChartProps:a,ref:e}));export{Aa as A,Pa as a,V as b,F as s};
|