decocms 4.500.7 → 4.501.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/{ActiveShapeUtils-DHLjYBHG.js → ActiveShapeUtils-D-fL_h7g.js} +1 -1
- package/dist/client/assets/{AlertCircle-BILwGqjV.js → AlertCircle-D3bAofoi.js} +1 -1
- package/dist/client/assets/{AreaChart-MBaQ2sXA.js → AreaChart-BkD3ldvt.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DlRqrbst.js → ArrowLeft-Cdobx1UV.js} +1 -1
- package/dist/client/assets/{ArrowUp-CFc2wNu3.js → ArrowUp-D_3dn5Sd.js} +1 -1
- package/dist/client/assets/{BarChart-ip63zVKP.js → BarChart-DdPh9tNP.js} +1 -1
- package/dist/client/assets/{Building02-QB_UI3sB.js → Building02-Bh6iwr2R.js} +1 -1
- package/dist/client/assets/{CategoricalChart-CD4E_XC5.js → CategoricalChart-tLM_K2Lc.js} +1 -1
- package/dist/client/assets/{CheckCircle-CG1RvCMD.js → CheckCircle-BQiYUYV1.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-23OZgHQl.js → ChevronSelectorVertical-CpMmf6o-.js} +1 -1
- package/dist/client/assets/{ChevronUp-BrMcnDd0.js → ChevronUp-CfnfCq3M.js} +1 -1
- package/dist/client/assets/{Copy01-QpufVNbj.js → Copy01-CKF8jrEa.js} +1 -1
- package/dist/client/assets/{CreditCard01-W1zS1W7o.js → CreditCard01-B4jz404y.js} +1 -1
- package/dist/client/assets/{DotsVertical-E-CAHxZx.js → DotsVertical-BVuRRGqu.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-DoXCMhKl.js → ErrorBarContext-D3QRg5_X.js} +1 -1
- package/dist/client/assets/{Globe04-C2IFbCwJ.js → Globe04-CfnS-Tur.js} +1 -1
- package/dist/client/assets/{Image01-D8Dg78Ju.js → Image01-C6EZAhw4.js} +1 -1
- package/dist/client/assets/{Key01-CCpcNn9J.js → Key01-C3bTgL7y.js} +1 -1
- package/dist/client/assets/{Link01-Dw-VkUVV.js → Link01-Bb9ZHTO8.js} +1 -1
- package/dist/client/assets/{LinkBroken01-BBYM52IU.js → LinkBroken01-BbLhCJ9C.js} +1 -1
- package/dist/client/assets/{Monitor01-596xyLh3.js → Monitor01-BT48-O3V.js} +1 -1
- package/dist/client/assets/{Play-CIe1tupB.js → Play-DlM8u9Zn.js} +1 -1
- package/dist/client/assets/{Plus-DTyq8wfJ.js → Plus-h-7fG8-i.js} +1 -1
- package/dist/client/assets/{SearchMd-DnZ_sK_U.js → SearchMd-DdAgg3kt.js} +1 -1
- package/dist/client/assets/{Sector-iSjEHRg-.js → Sector-udGfVqY9.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-Brrt7Bh6.js → ShoppingBag01-gtt6oc_g.js} +1 -1
- package/dist/client/assets/{Sun-BmhcFIJl.js → Sun-D0bMmBqD.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-B5sfCWHV.js → SwitchHorizontal01-mzV8h1Yb.js} +1 -1
- package/dist/client/assets/{Tool01-BSpg9N8Q.js → Tool01-BOGFE1PW.js} +1 -1
- package/dist/client/assets/{Trash01-uPItCfKQ.js → Trash01-BKZKll81.js} +1 -1
- package/dist/client/assets/{Upload01-ClSeM0gf.js → Upload01-ClJbirSb.js} +1 -1
- package/dist/client/assets/{User01-DabbLHAZ.js → User01-jcmfLZ4a.js} +1 -1
- package/dist/client/assets/{UserSquare-BXjBRbTF.js → UserSquare-Dnl3alN_.js} +1 -1
- package/dist/client/assets/{Users01-Dt36FENA.js → Users01-DBt3BOu-.js} +1 -1
- package/dist/client/assets/{XAxis-BQtU7n4v.js → XAxis-DWTEKRSO.js} +1 -1
- package/dist/client/assets/{XClose-BMDlg-34.js → XClose-DtCD4hEo.js} +1 -1
- package/dist/client/assets/{ZoomOut-Bnst3wtU.js → ZoomOut-C-oiWFtM.js} +1 -1
- package/dist/client/assets/{access-gate-BnarIuC9.js → access-gate-Bs83GnN9.js} +1 -1
- package/dist/client/assets/add-connection-dialog-CkfM8RAE.js +1 -0
- package/dist/client/assets/agent-analytics-PkbYclRB.js +2 -0
- package/dist/client/assets/agent-app-Dq_KNzND.js +1 -0
- package/dist/client/assets/agent-assets-BSNQs1Q4.js +1 -0
- package/dist/client/assets/agent-automation-CYLhaLQV.js +20 -0
- package/dist/client/assets/agent-automations-CylXZmQz.js +1 -0
- package/dist/client/assets/agent-connect-sources-gehkSGol.js +1 -0
- package/dist/client/assets/agent-deck-CB0RXEGe.js +1 -0
- package/dist/client/assets/agent-e2e-gcrRg7hM.js +1 -0
- package/dist/client/assets/agent-experiments-CMJUnUoe.js +1 -0
- package/dist/client/assets/agent-file-JLVKcoj6.js +1 -0
- package/dist/client/assets/agent-hosting-AV1ldWsd.js +1 -0
- package/dist/client/assets/{agent-icon-BdZdLCky.js → agent-icon-D1bIPwJ9.js} +1 -1
- package/dist/client/assets/agent-library-ChYqVk94.js +1 -0
- package/dist/client/assets/agent-library-file-5NiMKcJU.js +1 -0
- package/dist/client/assets/agent-monitor-DCEK-_YE.js +1 -0
- package/dist/client/assets/agent-overview-Bq6iylVc.js +1 -0
- package/dist/client/assets/agent-releases-0JQ-pNIw.js +2 -0
- package/dist/client/assets/agent-settings-DutqpeLT.js +1 -0
- package/dist/client/assets/agent-site-editor-DUVPLgUJ.js +27 -0
- package/dist/client/assets/agent-site-editor-code-Bs5iWgah.js +2 -0
- package/dist/client/assets/agent-site-editor-content-DG0PHKu_.js +1 -0
- package/dist/client/assets/agent-site-editor-preview-IbSFpbgz.js +1 -0
- package/dist/client/assets/agent-view-BMSjk6sE.js +1 -0
- package/dist/client/assets/agent-view-guard-B0ssprgS.js +1 -0
- package/dist/client/assets/{agents-list-qSpN3sGU.js → agents-list-CL_HbBRx.js} +1 -1
- package/dist/client/assets/{ai-providers-DwrXOrzh.js → ai-providers-mazNpep3.js} +1 -1
- package/dist/client/assets/{alert-Tk2m0Iz_.js → alert-Bo4bO9Yj.js} +1 -1
- package/dist/client/assets/{alert-dialog-By0HRTrM.js → alert-dialog-BEUBWKqO.js} +2 -2
- package/dist/client/assets/{analytics-sections-BjYHHt7V.js → analytics-sections-DM3YuBYq.js} +1 -1
- package/dist/client/assets/api-keys-BfQZh5eV.js +1 -0
- package/dist/client/assets/{api-keys-DaMqNdv1.js → api-keys-DVwB6mPs.js} +1 -1
- package/dist/client/assets/app-editor-6HFiMwKn.js +1 -0
- package/dist/client/assets/{asset-utils-Cne_zeGQ.js → asset-utils-f7af-ti1.js} +1 -1
- package/dist/client/assets/{auth-CTn9OsYL.js → auth-CpMllKKy.js} +1 -1
- package/dist/client/assets/{auth-catchall-CMbAfThb.js → auth-catchall-s5AR8jnh.js} +1 -1
- package/dist/client/assets/auth-entry-DhhGCuwo.js +1 -0
- package/dist/client/assets/{auth-split-layout--aU7QLNo.js → auth-split-layout-CVNIUCsf.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-bcqFV5Ih.js → authenticate-and-persist-oauth-B45I3cgI.js} +1 -1
- package/dist/client/assets/{automation-list-row-3u6JAmgN.js → automation-list-row-sOJZ4uwa.js} +1 -1
- package/dist/client/assets/{automation-runs-Cy2qWf8T.js → automation-runs-CR9XH4Bt.js} +1 -1
- package/dist/client/assets/{automations-B06cv6_Q.js → automations-KO9N3LUU.js} +1 -1
- package/dist/client/assets/{autosend-Cr5TlS-x.js → autosend-BPCdEy8S.js} +1 -1
- package/dist/client/assets/{avatar-DNs314ny.js → avatar-BwGV1yBo.js} +1 -1
- package/dist/client/assets/{badge-BDMYkxf_.js → badge-DZi2puxG.js} +1 -1
- package/dist/client/assets/{block-document-BkfPgGlg.js → block-document-DKS5cj35.js} +3 -3
- package/dist/client/assets/{blocks-preview-workspace-context-D5JWaTS4.js → blocks-preview-workspace-context-CDjfxqPx.js} +1 -1
- package/dist/client/assets/blocks-tab-states-CdRfYXjG.js +20 -0
- package/dist/client/assets/blog-schema-DQu9FHji.js +1 -0
- package/dist/client/assets/{board-analytics-B8AHF8AB.js → board-analytics-Br92I9NK.js} +1 -1
- package/dist/client/assets/{buckets-CUa7QjX3.js → buckets-BJOMOAgi.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-l6jHAadC.js → build-improve-prompt-doc-DrFz7LF_.js} +1 -1
- package/dist/client/assets/{calendar-9HE_r4Hw.js → calendar-evfJy3uJ.js} +1 -1
- package/dist/client/assets/{capability-load-error-DVDKy7cm.js → capability-load-error-vW3f0aqj.js} +1 -1
- package/dist/client/assets/category-editor-QytvoXKo.js +1 -0
- package/dist/client/assets/{chart-n7qVLeZu.js → chart-yXoVtu1q.js} +1 -1
- package/dist/client/assets/chat-context-lAP9vX1C.js +39 -0
- package/dist/client/assets/{chat-draft-Bi-CpEK_.js → chat-draft-DVJc17WV.js} +1 -1
- package/dist/client/assets/{checkbox-jukyyas4.js → checkbox-DcDvQwKW.js} +1 -1
- package/dist/client/assets/{choose-editor-BpukaXWx.js → choose-editor-B0ViIXN7.js} +1 -1
- package/dist/client/assets/{cli-auth-success-ZwkiiHM_.js → cli-auth-success-CKu92ul9.js} +1 -1
- package/dist/client/assets/{client-icons-CI6qGlDq.js → client-icons-DV_DZLb3.js} +1 -1
- package/dist/client/assets/cms-settings-editor-Cz5yTS8J.js +1 -0
- package/dist/client/assets/{collapsible-CSMgVqT4.js → collapsible-BvvJbkUN.js} +1 -1
- package/dist/client/assets/collection-detail-gDWElNf6.js +1 -0
- package/dist/client/assets/{collection-display-button-DfzaspAg.js → collection-display-button-CX9hkCzp.js} +1 -1
- package/dist/client/assets/{collection-search-q0ogFMFh.js → collection-search-ChJFrp7I.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-Dnaf2KFs.js → collection-table-wrapper-S14li0ck.js} +1 -1
- package/dist/client/assets/{collection-tabs-CYgVG041.js → collection-tabs-CSxs3D41.js} +1 -1
- package/dist/client/assets/{column-rules-BDs9HTxP.js → column-rules-GXfmm3XY.js} +2 -2
- package/dist/client/assets/{combobox-BTfHieW4.js → combobox-C7I8ANxO.js} +1 -1
- package/dist/client/assets/{command-DFd1c5Z5.js → command-3UFu4XzT.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-4lkaw_O0.js → companion-mcps-section-B4r6rXjT.js} +1 -1
- package/dist/client/assets/{config-CtmGoERx.js → config-CXc91so8.js} +1 -1
- package/dist/client/assets/{connect-CmDZNw9R.js → connect-CyItQRMN.js} +3 -3
- package/dist/client/assets/{connect-layout-CC9olkOl.js → connect-layout-C_C_fSz7.js} +1 -1
- package/dist/client/assets/{connection-DSkv8Cg1.js → connection-C37KtOpn.js} +1 -1
- package/dist/client/assets/{connection-card-C7Yq5GHs.js → connection-card-BZTmMkIC.js} +1 -1
- package/dist/client/assets/connection-detail-D0FXWtUX.js +1 -0
- package/dist/client/assets/{connection-form-helpers-BsU6F-s_.js → connection-form-helpers-DxBwDmAB.js} +1 -1
- package/dist/client/assets/connections-D-s5sSvb.js +1 -0
- package/dist/client/assets/content-tab-zP6Y355z.js +8 -0
- package/dist/client/assets/context-CXih-hDd.js +1 -0
- package/dist/client/assets/{context-menu-CYa4PKRJ.js → context-menu-BVwispbr.js} +1 -1
- package/dist/client/assets/{core.esm-lZvNzlYc.js → core.esm-CmRvLUZs.js} +2 -2
- package/dist/client/assets/{create-organization-dialog-D-9YlOhY.js → create-organization-dialog-MkYGLytC.js} +1 -1
- package/dist/client/assets/daily-pulse-C5ZpC1Ja.js +1 -0
- package/dist/client/assets/device-hint-SeLRi17j.js +1 -0
- package/dist/client/assets/discover-CnNtsI6p.js +1 -0
- package/dist/client/assets/{domain-settings-BDouaDKh.js → domain-settings-C-ul_GpW.js} +1 -1
- package/dist/client/assets/{drawer-UzGeZrmC.js → drawer-BnxsVk9h.js} +1 -1
- package/dist/client/assets/{editor-KeKsFC14.js → editor-BcMzCvWI.js} +1 -1
- package/dist/client/assets/editor-classes-qOc25VDM.js +1 -0
- package/dist/client/assets/{empty-state-CvDYWxOG.js → empty-state-CLULH17h.js} +1 -1
- package/dist/client/assets/{empty-state-DdJZ_leg.js → empty-state-Csd3ZQCl.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CJhjAx3s.js → extract-connection-data-QezQYJtA.js} +1 -1
- package/dist/client/assets/{feature-gate-D5KGpIQ3.js → feature-gate-X9j31WTs.js} +1 -1
- package/dist/client/assets/{feature-paywall-nTUHasXJ.js → feature-paywall-CVHEJqfB.js} +1 -1
- package/dist/client/assets/{file-explorer-CcZkMQK3.js → file-explorer-CzlgH02W.js} +2 -2
- package/dist/client/assets/{file-preview-Ct2165jc.js → file-preview-Ddg0WJAM.js} +1 -1
- package/dist/client/assets/{file-share-button-DnzCcmZ2.js → file-share-button-D2qOTxL8.js} +2 -2
- package/dist/client/assets/{file-type-icon-C-_1hLql.js → file-type-icon-Bqf9C4DT.js} +1 -1
- package/dist/client/assets/flat-project-EkkB9kye.js +1 -0
- package/dist/client/assets/{folder-icon-CksigScx.js → folder-icon-CktDjbyx.js} +2 -2
- package/dist/client/assets/{form-D6DHFxsw.js → form-BLRuutWX.js} +1 -1
- package/dist/client/assets/format-time-CAj8AQXM.js +1 -0
- package/dist/client/assets/general-DAKv-uYe.js +1 -0
- package/dist/client/assets/home-BtntFMXr.js +1 -0
- package/dist/client/assets/hosted-publish-feedback-DnbP_2C-.js +1 -0
- package/dist/client/assets/{icon-button-d9uOvdxM.js → icon-button-08xWmNqW.js} +1 -1
- package/dist/client/assets/{index-BGz-w6Gg.js → index-3um-0YWE.js} +1 -1
- package/dist/client/assets/index-3yvbELIe.js +1 -0
- package/dist/client/assets/{index-COV2t6Wc.js → index-9WXzzgOS.js} +2 -2
- package/dist/client/assets/{index-MZuRM-ap.js → index-BOjNGNvg.js} +1 -1
- package/dist/client/assets/index-BgxfZN5I.js +243 -0
- package/dist/client/assets/index-BiU97Vx4.js +1 -0
- package/dist/client/assets/index-BvCsVc8L.js +2 -0
- package/dist/client/assets/{index-B0rouRMk.js → index-Ct9bVcsr.js} +1 -1
- package/dist/client/assets/{index-DCmQGiOV.js → index-DIK8YZFn.js} +2 -2
- package/dist/client/assets/{index-Dhdyv2s0.js → index-DJTmuPQQ.js} +1 -1
- package/dist/client/assets/{index-Cw6J2Hl5.js → index-DT37BMIF.js} +5 -5
- package/dist/client/assets/{index-JuyO8Sz3.js → index-Dhveikge.js} +1 -1
- package/dist/client/assets/index-Dss8yn2Y.js +1 -0
- package/dist/client/assets/{index-DyaBZBxm.js → index-DyeE93ho.js} +14 -14
- package/dist/client/assets/{index-B5IA1qMq.js → index-lUChgCue.js} +1 -1
- package/dist/client/assets/index-m9hX09uY.css +1 -0
- package/dist/client/assets/{index-redirect-CdLcLUA4.js → index-redirect-CHE6u4Cv.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-rUCOtzeA.js → infiniteQueryObserver-ClCiPTXN.js} +1 -1
- package/dist/client/assets/{infra-billing-CNFpdYUt.js → infra-billing-ChfVikin.js} +1 -1
- package/dist/client/assets/input-BSxNJ_GL.js +17 -0
- package/dist/client/assets/input-BwymrIPS.js +1 -0
- package/dist/client/assets/{integration-icon-DogZfPWq.js → integration-icon-DmnIXoLv.js} +1 -1
- package/dist/client/assets/{jira-icon-Bkx-ixmo.js → jira-icon-BLL3j9jm.js} +1 -1
- package/dist/client/assets/{label-Bqj_xjz9.js → label-CXUY_vfR.js} +1 -1
- package/dist/client/assets/{layout-z7Pz7phr.js → layout-DIeTUTU5.js} +1 -1
- package/dist/client/assets/legacy-agents-deep-BKyQMU33.js +1 -0
- package/dist/client/assets/legacy-main-redirect-BsoX6iN0.js +1 -0
- package/dist/client/assets/library-j3CGQ36X.js +1 -0
- package/dist/client/assets/{library-tab-0FXiesZx.js → library-tab-D2qgQui6.js} +4 -4
- package/dist/client/assets/{login-B4wTb5ls.js → login-E4QHNGwe.js} +1 -1
- package/dist/client/assets/{markdown-5DzLzA6E.js → markdown-b3WNjA4d.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-DuGbCe-D.js → mcp-app-renderer-Cn4aCsu6.js} +2 -2
- package/dist/client/assets/{mcp-oauth-D_oaXY6E.js → mcp-oauth-C3NWluK_.js} +1 -1
- package/dist/client/assets/{mcp-oauth-tCidCN-u.js → mcp-oauth-RicpD0nY.js} +1 -1
- package/dist/client/assets/{members-CDM-83p9.js → members-BxD5PzHF.js} +1 -1
- package/dist/client/assets/{memory-0faJ-8hP.js → memory-C9XODnnD.js} +2 -2
- package/dist/client/assets/{mini-report-page-CrKZ4okq.js → mini-report-page-BIc8DpQB.js} +1 -1
- package/dist/client/assets/{mock-board-N392Vku2.js → mock-board-ohQUjnsi.js} +1 -1
- package/dist/client/assets/{monaco-editor-2Ci5R71u.js → monaco-editor-sh4I5RUd.js} +2 -2
- package/dist/client/assets/{monitoring-stats-row-BbxkYAB2.js → monitoring-stats-row-DV6G65vc.js} +1 -1
- package/dist/client/assets/{multi-select-CNHwKIXn.js → multi-select-B-4k-Bqg.js} +1 -1
- package/dist/client/assets/mustache-Ds0VW1db.js +4 -0
- package/dist/client/assets/{new-project-dialog-C5lJfUJ3.js → new-project-dialog-B1YWyUQY.js} +1 -1
- package/dist/client/assets/{oauth-callback-DGtqmz9D.js → oauth-callback-Dk0amXzl.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Bhuh08e8.js → oauth-callback-ai-provider-yxTXgHsL.js} +1 -1
- package/dist/client/assets/{onboarding-D55kfuiq.js → onboarding-WAcQlT34.js} +1 -1
- package/dist/client/assets/openai-conversation-DdRGYa72.js +3 -0
- package/dist/client/assets/optimistic-project-sidebar-views-CX9xIBGl.js +1 -0
- package/dist/client/assets/{organization-choice-CUxHZSL3.js → organization-choice-ByF9jLiX.js} +1 -1
- package/dist/client/assets/{orgs-CPCdS87I.js → orgs-BQHW_eGH.js} +1 -1
- package/dist/client/assets/page-seo-form-CHn8Xad5.js +1 -0
- package/dist/client/assets/{pair-DjM6V7aG.js → pair-CUEfObr7.js} +8 -8
- package/dist/client/assets/{plan-ladder-gwROOTzi.js → plan-ladder-DCjrzFrn.js} +1 -1
- package/dist/client/assets/{popover-MLSOZysn.js → popover-C7Cokk1g.js} +1 -1
- package/dist/client/assets/post-calendar-8u0J9Dxw.js +1 -0
- package/dist/client/assets/post-editor-BzyUnSeO.js +2 -0
- package/dist/client/assets/{preview-content-Cuq13S1x.js → preview-content-DvIKkdby.js} +1 -1
- package/dist/client/assets/{preview-dialog-CP7wwQxY.js → preview-dialog-l7y7EMMl.js} +1 -1
- package/dist/client/assets/{preview-panel-DFRYD57I.js → preview-panel-BVF8JvLU.js} +1 -1
- package/dist/client/assets/preview-source-BsRLGWUP.js +1 -0
- package/dist/client/assets/preview-tab-DSXQiNWB.js +551 -0
- package/dist/client/assets/product-picker-dialog-D1HSCZY-.js +1 -0
- package/dist/client/assets/{profile-E9E7lNqo.js → profile-DLHHp5WU.js} +1 -1
- package/dist/client/assets/{project-app-view-CqnnpjCc.js → project-app-view-BwoWS8NM.js} +1 -1
- package/dist/client/assets/{project-feed-DI26nV5j.js → project-feed-Bb_IIsXz.js} +1 -1
- package/dist/client/assets/{project-icon-DsUbDdQC.js → project-icon-Dgrl5qpw.js} +1 -1
- package/dist/client/assets/project-reports-C-bRcSvJ.js +1 -0
- package/dist/client/assets/project-tasks-DDJFKuGl.js +1 -0
- package/dist/client/assets/{projects-CdLu99l3.js → projects-DRVKv_2I.js} +1 -1
- package/dist/client/assets/{projects-empty-state-CO-mNXLv.js → projects-empty-state-CtZ_2AQk.js} +1 -1
- package/dist/client/assets/{prompts-CGIibyOn.js → prompts-BeeaQU8h.js} +1 -1
- package/dist/client/assets/record-editor-5RvQSHc4.js +1 -0
- package/dist/client/assets/redirect-editor-B1Nkj9GS.js +1 -0
- package/dist/client/assets/reports-BGfmbbJs.js +1 -0
- package/dist/client/assets/{reports-CKJQ8Zdg.js → reports-C5l1V9UL.js} +1 -1
- package/dist/client/assets/{reports-onboarding-UAs51Fs-.js → reports-onboarding-DP7Vd0T2.js} +1 -1
- package/dist/client/assets/{reports-tab-D-UL6Cu0.js → reports-tab-CtVbVcib.js} +2 -2
- package/dist/client/assets/{repositories-8LjwXVAZ.js → repositories-CbAg-Btm.js} +1 -1
- package/dist/client/assets/repository-binding-BFm9AVly.js +1 -0
- package/dist/client/assets/{repository-import-picker-D5xDiyD_.js → repository-import-picker-EyjACjb3.js} +1 -1
- package/dist/client/assets/{repository-picker-DExxlkis.js → repository-picker-CIkU8AaT.js} +1 -1
- package/dist/client/assets/{require-capability-DJr1iBd_.js → require-capability-BHXvQx1F.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Dzef4Ao1.js → required-auth-layout-BWy4wi63.js} +1 -1
- package/dist/client/assets/{reset-password-CWozFngH.js → reset-password-BmnWobO1.js} +1 -1
- package/dist/client/assets/{resizable-UTJFKDGm.js → resizable-ojZdlQ3J.js} +1 -1
- package/dist/client/assets/resolve-tab-icon-CQA14gzS.js +1 -0
- package/dist/client/assets/review-settings-HBrPojjW.js +1 -0
- package/dist/client/assets/{roles-D_wIHL0X.js → roles-Dtyn_BZq.js} +1 -1
- package/dist/client/assets/route-BnPcnvQE.js +1 -0
- package/dist/client/assets/route-FIzJ_P0a.js +1 -0
- package/dist/client/assets/route-tGmKNjFY.js +1 -0
- package/dist/client/assets/sandbox-git-api-CRxdlhrN.js +1 -0
- package/dist/client/assets/sandbox-lifecycle-context-BiADnqP0.js +1 -0
- package/dist/client/assets/{schema-kVE-1hbs.js → schema-C2wKusx1.js} +1 -1
- package/dist/client/assets/{schema-BKM3gR2B.js → schema-CP7YDlC2.js} +1 -1
- package/dist/client/assets/{scroll-area-1S72VGW0.js → scroll-area-eDDZTCNn.js} +1 -1
- package/dist/client/assets/{search-input-pTAwOtCG.js → search-input-Uw0JKwfe.js} +1 -1
- package/dist/client/assets/{search-toggle-DAU6nVmU.js → search-toggle-sm1qzFKh.js} +1 -1
- package/dist/client/assets/secret-ciphertext-CONJpmu9.js +1 -0
- package/dist/client/assets/{secret-picker-CDYFp1fc.js → secret-picker-60Shu074.js} +1 -1
- package/dist/client/assets/{secrets-B0srIKJq.js → secrets-BoqLiEya.js} +1 -1
- package/dist/client/assets/sections-editor-vaJsT4Ye.js +4 -0
- package/dist/client/assets/{select-WviNHwZD.js → select-BFEZcGSl.js} +1 -1
- package/dist/client/assets/{select-model-cTObTD6V.js → select-model-DqlWeDem.js} +1 -1
- package/dist/client/assets/seo-editor-CH8U1dHr.js +1 -0
- package/dist/client/assets/{separator-DHqK6uc1.js → separator-B8-QmvpR.js} +1 -1
- package/dist/client/assets/settings-tab-CKwbS1hi.js +4 -0
- package/dist/client/assets/{sheet-CZiDNUQZ.js → sheet-Nq7jp8TZ.js} +1 -1
- package/dist/client/assets/shell-layout-D6cRROrP.js +1 -0
- package/dist/client/assets/site-editor-BZvWDg3I.js +1 -0
- package/dist/client/assets/site-editor-toast-DKv6_ydN.js +1 -0
- package/dist/client/assets/{skills-Bhf5PJUl.js → skills-D12rIMUM.js} +1 -1
- package/dist/client/assets/{slider-gvEbcdOp.js → slider-DDXbeLEV.js} +1 -1
- package/dist/client/assets/{sortable.esm-h3AYG-u7.js → sortable.esm-B6I_GSlr.js} +1 -1
- package/dist/client/assets/{sso-B6q4MTEL.js → sso-BlG3mIxu.js} +1 -1
- package/dist/client/assets/{suggestion-C591DFAx.js → suggestion-BDdps7f5.js} +2 -2
- package/dist/client/assets/{switch-CUK4V52q.js → switch-fTPKFxtt.js} +1 -1
- package/dist/client/assets/{symbol-BQaHJ_MF.js → symbol-DzslO63t.js} +1 -1
- package/dist/client/assets/{synced-repos-BbxE1rvi.js → synced-repos-BoksOfkS.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph-D8Um0oDf.js → tab-icon-glyph-B_Nx9b90.js} +1 -1
- package/dist/client/assets/{table-Dsl6wBVe.js → table-DM6c5ztx.js} +1 -1
- package/dist/client/assets/{tabs-BXhvcQgN.js → tabs-_ffnq5EI.js} +1 -1
- package/dist/client/assets/{task-board-kbcRVMI1.js → task-board-3mxTKXc4.js} +1 -1
- package/dist/client/assets/{task-route-BPrIj9mX.js → task-route-Bd7_oRze.js} +1 -1
- package/dist/client/assets/{task-status-codqNsI7.js → task-status-DobFUFUP.js} +1 -1
- package/dist/client/assets/taskboard-analytics-BqoskKtI.js +1 -0
- package/dist/client/assets/{tasks-J75byAMf.js → tasks-8erS0IrD.js} +3 -3
- package/dist/client/assets/tasks-SfkUPw6i.js +1 -0
- package/dist/client/assets/{textarea-DvoMwt1e.js → textarea-DuXoEX68.js} +1 -1
- package/dist/client/assets/thread-analytics-DRN0lWXv.js +1 -0
- package/dist/client/assets/{thread-intent-CG-CCDLs.js → thread-intent-CNERxhpd.js} +6 -6
- package/dist/client/assets/{thread-route-DvTW6luy.js → thread-route-B1yKR26I.js} +1 -1
- package/dist/client/assets/{thread-route-CR0TIP8s.js → thread-route-Ctf783T8.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-BAmHmw0m.js → thread-sheet-body-BOzE-wDr.js} +1 -1
- package/dist/client/assets/{time-range-picker-CPMdzMas.js → time-range-picker-CTRRThMq.js} +1 -1
- package/dist/client/assets/{toggle-group-Q9SREgL7.js → toggle-group-Cfs_-SSG.js} +1 -1
- package/dist/client/assets/{tool-namespace-uRsPbj-p.js → tool-namespace-D2ik4cAJ.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-Djr5zvaV.js → toolbar-icon-button-CPspdKt4.js} +1 -1
- package/dist/client/assets/{tooltip-COqLwkid.js → tooltip-IZurjemL.js} +1 -1
- package/dist/client/assets/{tooltipContext-DDD6cP5q.js → tooltipContext-D100ISAz.js} +1 -1
- package/dist/client/assets/{track-DG4JP_WA.js → track-Dgx71QRR.js} +1 -1
- package/dist/client/assets/{types-C5SQt0XZ.js → types-BE1SardL.js} +10 -10
- package/dist/client/assets/{url-slug-CUhgOgGc.js → url-slug-CwNPw3b4.js} +1 -1
- package/dist/client/assets/{usage-stats-CAukzrpg.js → usage-stats-CG9oV0kb.js} +34 -34
- package/dist/client/assets/{use-ai-providers-IjG3zzka.js → use-ai-providers-CPzOGdQy.js} +1 -1
- package/dist/client/assets/use-app-takeover-l9YncUZ0.js +1 -0
- package/dist/client/assets/{use-automations-Dt8Ypk0g.js → use-automations-B6o4Nbzc.js} +1 -1
- package/dist/client/assets/{use-autosave-CiBl7wSO.js → use-autosave-DPNBZc_p.js} +1 -1
- package/dist/client/assets/use-chat-navigation-Do_KkN8I.js +1 -0
- package/dist/client/assets/{use-clock-tick-zaL95TTy.js → use-clock-tick-BnfclhFE.js} +1 -1
- package/dist/client/assets/{use-connect-companion-CRI0nNcp.js → use-connect-companion-BPMXolOl.js} +1 -1
- package/dist/client/assets/{use-connection-gMb_8zEe.js → use-connection-DS1VAR5N.js} +1 -1
- package/dist/client/assets/{use-copy-2j0k06rN.js → use-copy-C8TWXH-H.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Bz6TE2Qz.js → use-create-virtual-mcp-CeEuYNMP.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-BPq8VLDt.js → use-date-fns-locale-D3qFWxxv.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-CMA_1eXM.js → use-debounced-autosave-DsoI68di.js} +1 -1
- package/dist/client/assets/{use-debounced-value-Dju-tMu1.js → use-debounced-value-KpwtUdsd.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BtvhFk4m.js → use-deco-credits-DscUzXq9.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-D8zpT0sX.js → use-decopilot-events-D8UIooCs.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BXDiC_mk.js → use-delete-connection-Dnzv3Wbz.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-CXT7CFHy.js → use-deployment-admin-P_SogPj1.js} +1 -1
- package/dist/client/assets/use-ensure-project-folder-Dom2nmkC.js +1 -0
- package/dist/client/assets/use-fast-preview-draft-url-DnHFw81T.js +1 -0
- package/dist/client/assets/use-file-configs-Cv2mXUdp.js +1 -0
- package/dist/client/assets/{use-infinite-scroll-CtScOz_h.js → use-infinite-scroll-CuKgvt7b.js} +1 -1
- package/dist/client/assets/{use-join-requests-CccLwL3-.js → use-join-requests-cLAvpRra.js} +1 -1
- package/dist/client/assets/use-main-panel-tabs-B0dFgvCE.js +1 -0
- package/dist/client/assets/{use-mcp-auth-status-Is2pR00q.js → use-mcp-auth-status-DaPeILTX.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DuTNn1dc.js → use-mcp-client-CU2kDBXP.js} +2 -2
- package/dist/client/assets/{use-mcp-prompts-3vLSpQqZ.js → use-mcp-prompts-CdDXQMlf.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CA6Ri5UK.js → use-mcp-tools-CyHq-JFp.js} +1 -1
- package/dist/client/assets/{use-members-BqWTpMNp.js → use-members-CkpNHwM6.js} +1 -1
- package/dist/client/assets/{use-mobile-Di3PCVWm.js → use-mobile-DNDEd3kt.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-Cu9cZhs8.js → use-navigate-to-agent-JTDphVE0.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-sjDwQSEM.js → use-open-billing-url-2Iqpie3T.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DIUzAE5u.js → use-org-auth-client-Bwzj9WuC.js} +1 -1
- package/dist/client/assets/{use-org-fs-DOu4nQSr.js → use-org-fs-Cg7EJCYS.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-BhJEcVcm.js → use-org-repo-syncs-D4j72pCa.js} +1 -1
- package/dist/client/assets/{use-org-sso-B57pfGVG.js → use-org-sso-CMfwXvs9.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DDnFx_jd.js → use-organization-roles-DPDTJ01F.js} +1 -1
- package/dist/client/assets/use-organization-settings-BMIqQlbM.js +1 -0
- package/dist/client/assets/{use-panel-navigate-c5H4a21L.js → use-panel-navigate-CL5hztR3.js} +1 -1
- package/dist/client/assets/use-project-native-view-presence-CBbSdoTE.js +1 -0
- package/dist/client/assets/{use-project-scope-A4YCdR4N.js → use-project-scope-DqbIN7fa.js} +1 -1
- package/dist/client/assets/use-recent-apps-Beu6vFHw.js +1 -0
- package/dist/client/assets/use-releases-Bfs5MNEe.js +1 -0
- package/dist/client/assets/{use-reports-diagnostic-Dw_QzpEb.js → use-reports-diagnostic-QSfTgm94.js} +1 -1
- package/dist/client/assets/{use-secrets-BwPjhWC0.js → use-secrets-BaG_Hkwz.js} +1 -1
- package/dist/client/assets/use-section-preview-base-DUXeQAGw.js +1 -0
- package/dist/client/assets/{use-tags-Ce3D-sM7.js → use-tags-BWRD1El7.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-BR7NSR26.js → use-task-board-analytics-Bkf73btp.js} +1 -1
- package/dist/client/assets/{use-task-board-events-BBlz-cBe.js → use-task-board-events-CLNIzDoN.js} +1 -1
- package/dist/client/assets/{use-task-board-item-prs-BzAFAQp8.js → use-task-board-item-prs-Bh5krZjb.js} +1 -1
- package/dist/client/assets/{use-task-board-items-DTbT7rEp.js → use-task-board-items-zobNU9xE.js} +1 -1
- package/dist/client/assets/use-task-metadata-Bsl_Cezz.js +1 -0
- package/dist/client/assets/{use-thread-analytics-CeuE3odS.js → use-thread-analytics-CdWNwDDd.js} +1 -1
- package/dist/client/assets/use-thread-outputs-BkgKa2EX.js +1 -0
- package/dist/client/assets/useInfiniteQuery-pEq0vd9s.js +1 -0
- package/dist/client/assets/{useQueries-BliyNTtT.js → useQueries-E-2AGLRt.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BQsEFgzv.js +1 -0
- package/dist/client/assets/{users-CsvLtEUJ.js → users-L9Rh2Jo7.js} +1 -1
- package/dist/client/assets/{utils-DHYRJNUn.js → utils-Dx9iFvKJ.js} +1 -1
- package/dist/client/assets/variant-calendar-CkKYqTGY.js +1 -0
- package/dist/client/assets/variant-draft-pointer-CSAndyah.js +1 -0
- package/dist/client/assets/{view-mode-toggle-B55pxnK_.js → view-mode-toggle-DxuIXC_C.js} +1 -1
- package/dist/client/assets/virtual-mcp-D7evpUlE.js +1 -0
- package/dist/client/assets/{watch-sse-pool-B66Eygyb.js → watch-sse-pool-Bs34dRKl.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +1 -1
- package/dist/server/migrate-dbos.js +1 -1
- package/dist/server/migrate.js +42 -42
- package/dist/server/server.js +777 -737
- package/package.json +2 -1
- package/dist/client/assets/add-connection-dialog-BB_zBu7s.js +0 -1
- package/dist/client/assets/agent-analytics-DJ6OqUua.js +0 -2
- package/dist/client/assets/agent-app-6ZZFFR6d.js +0 -1
- package/dist/client/assets/agent-assets-BHKSbhmH.js +0 -1
- package/dist/client/assets/agent-automation-BEmy5bSr.js +0 -20
- package/dist/client/assets/agent-automations-p8P_f3PC.js +0 -1
- package/dist/client/assets/agent-connect-sources-DHxXXvzx.js +0 -1
- package/dist/client/assets/agent-deck-kxbwQZGK.js +0 -1
- package/dist/client/assets/agent-e2e-BPE2bY36.js +0 -1
- package/dist/client/assets/agent-experiments-ChC-SJXX.js +0 -1
- package/dist/client/assets/agent-file-BFxmR6QX.js +0 -1
- package/dist/client/assets/agent-hosting-BV7C2pVl.js +0 -1
- package/dist/client/assets/agent-library-dgFnuWrg.js +0 -1
- package/dist/client/assets/agent-library-file-LGRVpT_Z.js +0 -1
- package/dist/client/assets/agent-monitor-CbF33zT0.js +0 -1
- package/dist/client/assets/agent-overview-CiiRxzYe.js +0 -1
- package/dist/client/assets/agent-settings-CFC23BeV.js +0 -1
- package/dist/client/assets/agent-site-editor-Dq16bHz8.js +0 -25
- package/dist/client/assets/agent-site-editor-code-B3URMZgm.js +0 -2
- package/dist/client/assets/agent-site-editor-content-CbMNndHb.js +0 -8
- package/dist/client/assets/agent-site-editor-preview-Dy_HN_0a.js +0 -551
- package/dist/client/assets/agent-view-AaYNRrLl.js +0 -1
- package/dist/client/assets/agent-view-guard-CShYlKBB.js +0 -1
- package/dist/client/assets/api-keys-CvurWoww.js +0 -1
- package/dist/client/assets/app-editor-Dtvslmpt.js +0 -1
- package/dist/client/assets/auth-entry-CcnG-745.js +0 -1
- package/dist/client/assets/blog-schema-Qz918NIm.js +0 -1
- package/dist/client/assets/category-editor-w7_HM15g.js +0 -1
- package/dist/client/assets/chat-context-DszOftwV.js +0 -39
- package/dist/client/assets/claim-phase-copy-gKkPnPW4.js +0 -1
- package/dist/client/assets/collection-detail-D7Eq0q0A.js +0 -1
- package/dist/client/assets/connection-detail-DVH9ilyh.js +0 -1
- package/dist/client/assets/connections-BMBv6B3A.js +0 -1
- package/dist/client/assets/context-B_2GuX3F.js +0 -1
- package/dist/client/assets/daily-pulse-CSM9zceR.js +0 -1
- package/dist/client/assets/device-hint-DPN31B5L.js +0 -1
- package/dist/client/assets/discover-DvrfCZMt.js +0 -1
- package/dist/client/assets/flat-project-Dhd407Mb.js +0 -1
- package/dist/client/assets/format-time-CjIPQhCN.js +0 -1
- package/dist/client/assets/general-CeTNWbSz.js +0 -1
- package/dist/client/assets/home-B3luwcfX.js +0 -1
- package/dist/client/assets/index-DHd9v6HB.js +0 -1
- package/dist/client/assets/index-DQO0lnZr.css +0 -1
- package/dist/client/assets/index-bl_DQ3mH.js +0 -243
- package/dist/client/assets/index-zYf8hP69.js +0 -1
- package/dist/client/assets/input-B6YAOx07.js +0 -17
- package/dist/client/assets/input-C1msyAUz.js +0 -1
- package/dist/client/assets/legacy-agents-deep-fygb-JNd.js +0 -1
- package/dist/client/assets/legacy-main-redirect-BKIEGtd4.js +0 -1
- package/dist/client/assets/library-BgLLAz_1.js +0 -1
- package/dist/client/assets/mustache-B7TZyK91.js +0 -4
- package/dist/client/assets/openai-conversation-C4Qt6S-l.js +0 -3
- package/dist/client/assets/optimistic-project-sidebar-views-CoZosNmn.js +0 -1
- package/dist/client/assets/page-seo-form-DdXyS1MG.js +0 -1
- package/dist/client/assets/post-calendar-Dr7XWigd.js +0 -1
- package/dist/client/assets/post-editor-CKCVg_my.js +0 -2
- package/dist/client/assets/product-picker-dialog-DuFOtAE-.js +0 -1
- package/dist/client/assets/project-reports-UVwSbHHJ.js +0 -1
- package/dist/client/assets/project-tasks-DuMsfpY5.js +0 -1
- package/dist/client/assets/record-editor-ceYt0p4C.js +0 -1
- package/dist/client/assets/redirect-editor-Ca575ToY.js +0 -1
- package/dist/client/assets/reports-y_yDpDn4.js +0 -1
- package/dist/client/assets/repository-binding-BTsmo_dA.js +0 -1
- package/dist/client/assets/resolve-tab-icon-DqCiaIA7.js +0 -1
- package/dist/client/assets/review-settings-THwrc5M3.js +0 -1
- package/dist/client/assets/rich-text-link-control-CNQ92nZ4.js +0 -1
- package/dist/client/assets/route-CfEJDbbT.js +0 -1
- package/dist/client/assets/route-DD4978oF.js +0 -1
- package/dist/client/assets/route-e2YuR4Xl.js +0 -1
- package/dist/client/assets/runnable-block-editor-fWbFWGvz.js +0 -17
- package/dist/client/assets/sandbox-git-api-C7JbVL7R.js +0 -1
- package/dist/client/assets/sandbox-lifecycle-context-C25F7mSK.js +0 -1
- package/dist/client/assets/sections-editor-B5MFR1yl.js +0 -4
- package/dist/client/assets/seo-editor-DCKDCOQr.js +0 -1
- package/dist/client/assets/settings-tab-fdKZYnq9.js +0 -4
- package/dist/client/assets/shell-layout-Bk6uPKMe.js +0 -1
- package/dist/client/assets/taskboard-analytics-xeHAgwnO.js +0 -1
- package/dist/client/assets/tasks-Ba-oyyIK.js +0 -1
- package/dist/client/assets/thread-analytics-C0BM4p9K.js +0 -1
- package/dist/client/assets/thread-button-DKjUerzt.js +0 -1
- package/dist/client/assets/use-chat-layout-state-CVkPEEUs.js +0 -1
- package/dist/client/assets/use-chat-navigation-DLnmXNT9.js +0 -1
- package/dist/client/assets/use-ensure-project-folder-CqaPdVz-.js +0 -1
- package/dist/client/assets/use-fast-preview-draft-url-DlLnA8PJ.js +0 -1
- package/dist/client/assets/use-file-configs-BSnoYr1R.js +0 -1
- package/dist/client/assets/use-main-panel-tabs-O3Jy3Qh8.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-D9sV9o2T.js +0 -1
- package/dist/client/assets/use-organization-settings-BOGRgJjV.js +0 -1
- package/dist/client/assets/use-releases-BmeSCMgM.js +0 -1
- package/dist/client/assets/use-sandbox-events-hhwp2IWJ.js +0 -2
- package/dist/client/assets/use-section-preview-base-B7bjCuOw.js +0 -1
- package/dist/client/assets/use-task-metadata-CBQ5Muu5.js +0 -1
- package/dist/client/assets/use-thread-outputs-c6b1HaAz.js +0 -1
- package/dist/client/assets/useInfiniteQuery-DeMEFTdd.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CUkGf5w6.js +0 -1
- package/dist/client/assets/variant-calendar-CKqGYdH4.js +0 -1
- package/dist/client/assets/variant-matcher-override-uklREcGs.js +0 -1
- package/dist/client/assets/virtual-mcp-DFjD0qBz.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{bW as w,aG as T,aF as _}from"./index-BgxfZN5I.js";import{T as L,a as R,b as P,c as O,d as N}from"./task-board-3mxTKXc4.js";import{e as g}from"./backoff-CrEUbyZT.js";const S={STEP:"decopilot.step",FINISH:"decopilot.finish",THREAD_STATUS:"decopilot.thread.status"},y=Object.values(S),v="notification.created",F=60,H=100,j=2e3,E=w(T().min(1)).max(j),$=_({id:T().min(1).max(64),name:T().trim().min(1).max(F),projectIds:E}),x=w($).max(H),Y=_({pinned:E,hidden:E,dismissed:E,hiddenFolders:E}),Z={pinned:[],hidden:[],dismissed:[],hiddenFolders:[]};_({folders:x,preferences:Y,joinedAt:T().nullable()});const V="project-folders.updated",K=3e4,X=1e3;function I(n){const{buildUrl:f,eventTypes:p,name:l,crossTab:h=!1}=n,o=new Map,d=h&&typeof BroadcastChannel<"u"&&typeof navigator<"u"&&typeof navigator.locks<"u";if(d&&!l)throw new Error("createSSESubscription: `name` is required when crossTab");function u(e,t){e.bootDone=!0;for(const s of e.handlers)try{s(t)}catch{}}function A(e){for(const t of e.reconnectHandlers)try{t()}catch{}}function m(e){const t=new EventSource(f(e.key));e.es=t,t.onopen=()=>{e.reconnectAttempt=0,e.bootDone&&(A(e),e.channel?.postMessage({kind:"reconnect"})),e.bootDone=!0},t.onerror=()=>{e.es===t&&t.readyState===EventSource.CLOSED&&k(e)};const s=a=>{e.channel?.postMessage({kind:"event",type:a.type,data:a.data}),u(e,a)};for(const a of p)t.addEventListener(a,s)}function k(e){if(e.refCount<=0||e.reconnectTimer)return;const t=g(K,X,e.reconnectAttempt,2,.5);e.reconnectAttempt++,e.reconnectTimer=setTimeout(()=>{e.reconnectTimer=null,!(e.refCount<=0||!e.isLeader)&&(e.es?.close(),m(e))},t)}function b(e){if(e.refCount<=0){e.releaseLeadership?.(),e.releaseLeadership=null;return}e.isLeader=!0,m(e)}function U(e){if(!d){b(e);return}e.lockAbort=new AbortController,navigator.locks.request(`sse-leader:${l}:${e.key}`,{signal:e.lockAbort.signal},()=>new Promise(t=>{e.releaseLeadership=t,b(e)})).catch(()=>{})}function B(e,t){t.kind==="event"?u(e,new MessageEvent(t.type,{data:t.data})):t.kind==="reconnect"&&A(e)}function W(e){const t=o.get(e);if(t)return t;const s={key:e,refCount:0,handlers:new Set,reconnectHandlers:new Set,bootDone:!1,es:null,isLeader:!1,reconnectAttempt:0,reconnectTimer:null,channel:null,lockAbort:null,releaseLeadership:null};if(o.set(e,s),d){const a=new BroadcastChannel(`sse:${l}:${e}`);a.onmessage=r=>B(s,r.data),s.channel=a}return s}function D(e){e.reconnectTimer&&(clearTimeout(e.reconnectTimer),e.reconnectTimer=null),e.es?.close(),e.es=null,e.releaseLeadership?.(),e.releaseLeadership=null,e.lockAbort?.abort(),e.lockAbort=null,e.channel?.close(),e.channel=null,o.delete(e.key)}return{dispose(){for(const e of[...o.values()])D(e)},subscribe(e,t,s){const a=!o.has(e),r=W(e);r.refCount++,r.handlers.add(t),s&&r.reconnectHandlers.add(s),a&&U(r);let C=!1;return()=>{C||(C=!0,r.handlers.delete(t),s&&r.reconnectHandlers.delete(s),r.refCount--,r.refCount<=0&&D(r))}}}}function i(n,f){const p=new Set(f);return{dispose:()=>n.dispose(),subscribe(l,h,o){const d=u=>{p.has(u.type)&&h(u)};return n.subscribe(l,d,o)}}}const M=[...y,L,R,P,O,N,v,V],q=M,J=M,c=I({name:"watch",buildUrl:n=>`/api/${encodeURIComponent(n)}/watch?types=${q.join(",")}`,eventTypes:J,crossTab:!0}),ee=i(c,[...y]),te=i(c,[L,R]),se=i(c,[P]),re=i(c,[O]),ae=i(c,[N]),ne=i(c,[v]),oe=i(c,[V]),ie=I({buildUrl:n=>`/api/${encodeURIComponent(n)}/watch?scope=all&types=${S.THREAD_STATUS}`,eventTypes:[S.THREAD_STATUS]});export{S as D,Z as E,F as P,ie as a,ae as b,re as c,ee as d,se as e,ne as n,oe as p,te as t};
|
package/dist/client/index.html
CHANGED
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
<meta name="twitter:description" content="Hire specialized agents, give them access to your tools, and let them deliver real projects — with planning, verification, and observability built in." />
|
|
51
51
|
<meta name="twitter:image" content="/og-image.png" />
|
|
52
52
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
53
|
-
<script type="module" crossorigin src="/assets/index-
|
|
54
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
53
|
+
<script type="module" crossorigin src="/assets/index-BgxfZN5I.js"></script>
|
|
54
|
+
<link rel="stylesheet" crossorigin href="/assets/index-m9hX09uY.css">
|
|
55
55
|
</head>
|
|
56
56
|
<body>
|
|
57
57
|
<div id="root"></div>
|
package/dist/server/cli.js
CHANGED
|
@@ -78,7 +78,7 @@ _deco_commands() {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
_deco "$@"
|
|
81
|
-
`}async function Wv(t){let e=t||process.env.SHELL?.split("/").pop()||"bash",s,r;switch(e){case"bash":{s=Lv(),r=_2(k2(),".local/share/bash-completion/completions/deco");break}case"zsh":{s=zv(),r=_2(k2(),".zsh/completions/_deco");break}default:console.error(`Unsupported shell: ${e}`),console.log("Supported shells: bash, zsh"),process.exit(1)}if(Mv(l2(r),{recursive:!0}),await Uv(r,s,"utf8"),console.log(`Completion script installed to: ${r}`),console.log(""),e==="bash")console.log("To enable completions, add to your ~/.bashrc:"),console.log(` source "${r}"`);else console.log("To enable completions, add to your ~/.zshrc:"),console.log(` fpath=("${l2(r)}" $fpath)`),console.log(" autoload -U compinit && compinit");console.log(""),console.log("Then restart your shell.")}var v2=()=>{};import{homedir as qv}from"os";function Qv(t){let e=(t??"").trim();return dv.has(e)?e:"all"}function Hv(t){let e=(t??"").trim();return Jv.has(e)?e:"development"}function gt(t){return t==="true"||t==="1"}function g3(t,e,s){if(e===void 0||e==="")return;let r=Number(e);if(!Number.isSafeInteger(r)||r<=0)throw Error(`${t} must be a positive integer`);if(s!==void 0&&r>s)throw Error(`${t} must be at most ${s}`);return r}function Ke(t,e,s,r){return g3(t,e,r)??s}function Gv(t){let e={};for(let s of(t??"").split(",")){let r=s.trim();if(!r)continue;let n=r.indexOf("="),c=n>0?r.slice(0,n).trim():"",o=n>0?r.slice(n+1).trim():"";if(!c||!o){console.warn(`STRIPE_PLAN_PRICE_IDS: ignoring unparseable entry "${r}" \u2014 expected price_xxx=planId`);continue}e[c]=o}return e}function Kv(t,e,s,r){if(e===void 0||e==="")return s;let n=Number(e);if(!Number.isSafeInteger(n)||n<0)throw Error(`${t} must be a non-negative integer`);if(r!==void 0&&n>r)throw Error(`${t} must be at most ${r}`);return n}function v3(t,e){if(t===void 0||t==="")return e;return t==="true"||t==="1"}function Xv(t){return t===void 0||t===""||t==="true"||t==="1"}function po(t,e){return t||e}function g2(t){let e=t.DATA_DIR||t.DECOCMS_HOME||`${qv()}/deco`,s=Hv(t.NODE_ENV),r=t.VOICE_CONVERSATION_PROVIDER?.trim()||"elevenlabs",n={nodeEnv:s,port:Ke("PORT",t.PORT,3000,65535),baseUrl:t.BASE_URL,publicUrl:po(t.STUDIO_PUBLIC_URL,t.MESH_PUBLIC_URL),dataDir:e,voiceConversationProvider:r==="elevenlabs"||r==="openai"?r:null,openaiLiveApiKey:t.OPENAI_LIVE_API_KEY,openaiLiveModel:t.OPENAI_LIVE_MODEL?.trim()||"gpt-live-1",openaiLiveVoice:t.OPENAI_LIVE_VOICE?.trim()||"marin",elevenlabsApiKey:t.ELEVENLABS_API_KEY,elevenlabsVoiceId:t.ELEVENLABS_VOICE_ID||"JBFqnCBsd6RMkjVDRZzb",elevenlabsVoiceModel:t.ELEVENLABS_VOICE_MODEL||"eleven_v4_turbo",elevenlabsConversationModel:t.ELEVENLABS_CONVERSATION_MODEL?.trim()||"gemini-2.5-flash",databaseUrl:t.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",databasePgSsl:gt(t.DATABASE_PG_SSL),databasePoolMax:Ke("DATABASE_POOL_MAX",t.DATABASE_POOL_MAX,5),dbosPoolSize:Ke("DBOS_POOL_SIZE",t.DBOS_POOL_SIZE,5),betterAuthSecret:t.BETTER_AUTH_SECRET||"",encryptionKey:t.ENCRYPTION_KEY||"",studioJwtSecret:po(t.STUDIO_JWT_SECRET,t.MESH_JWT_SECRET),localMode:gt(t.DECOCMS_LOCAL_MODE),disableRateLimit:gt(t.DISABLE_RATE_LIMIT),jiraAllowLocalSiteUrl:gt(t.JIRA_ALLOW_LOCAL_SITE_URL),jiraSettleSeconds:Ke("JIRA_SETTLE_SECONDS",t.JIRA_SETTLE_SECONDS,20,3600),studioProvisionSecretKey:t.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(t.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((c)=>c.trim().toLowerCase()).filter(Boolean),taskBoardAdminOrgIds:(t.STUDIO_ADMIN_ORG_IDS??"").split(",").map((c)=>c.trim()).filter(Boolean),deploymentAdminToken:t.DEPLOYMENT_ADMIN_TOKEN||void 0,clickhouseUrl:t.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:g3("CLICKHOUSE_MAX_MEMORY_USAGE",t.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:t.MONITORING_OTLP_ENDPOINT,otelServiceName:t.OTEL_SERVICE_NAME||"studio",natsUrls:(t.NATS_URL||"nats://localhost:4222").split(",").map((c)=>c.trim()).filter(Boolean),natsCredsPath:t.NATS_CREDS,natsUser:t.NATS_USER||void 0,natsPassword:t.NATS_PASSWORD||void 0,configPath:t.CONFIG_PATH||"./config.json",aiGatewayEnabled:gt(t.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:t.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:t.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:t.STRIPE_WEBHOOK_SECRET,stripeSecretKey:t.STRIPE_SECRET_KEY,stripeOrgPriceId:t.STRIPE_ORG_PRICE_ID,stripePlanPriceIds:Gv(t.STRIPE_PLAN_PRICE_IDS),stripePortalConfigurationId:t.STRIPE_PORTAL_CONFIGURATION_ID,stripeTopupProductId:t.STRIPE_TOPUP_PRODUCT_ID,topupFeePercent:Kv("STUDIO_TOPUP_FEE_PERCENT",t.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:gt(t.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:Ke("STUDIO_FREE_TASKS",t.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:Ke("STUDIO_MONTHLY_TASKS",t.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:Ke("STUDIO_MAX_RUNS_PER_TASK",t.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:gt(t.ENABLE_DECO_IMPORT),hostingControlPlaneGa:gt(t.HOSTING_CONTROL_PLANE_GA),monitorGa:gt(t.MONITOR_GA),plansEnabled:gt(t.STUDIO_PLANS_ENABLED),mcpCacheEnabled:v3(t.MCP_CACHE_ENABLED,s!=="development"),orgFsPublicSetsJson:t.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:gt(t.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:Ke("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",t.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:Ke("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",t.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:v3(t.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),boardTransitionSettleSeconds:Ke("BOARD_TRANSITION_SETTLE_SECONDS",t.BOARD_TRANSITION_SETTLE_SECONDS,20,3600),sandboxMaxConcurrentHostedRuns:Ke("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",t.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:t.S3_ENDPOINT,s3Bucket:t.S3_BUCKET,s3Region:t.S3_REGION||"auto",s3AccessKeyId:t.S3_ACCESS_KEY_ID,s3SecretAccessKey:t.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:Xv(t.S3_FORCE_PATH_STYLE),monitoringS3Bucket:t.MONITORING_S3_BUCKET,monitoringS3Endpoint:t.MONITORING_S3_ENDPOINT,monitoringS3Region:t.MONITORING_S3_REGION,monitoringS3AccessKeyId:t.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:t.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:t.MONITORING_S3_PREFIX,duckdbExtensionDirectory:t.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:t.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:g3("DUCKDB_THREADS",t.DUCKDB_THREADS),podName:t.POD_NAME||crypto.randomUUID(),dispatchRole:Qv(po(t.STUDIO_DISPATCH_ROLE,t.MESH_DISPATCH_ROLE)),agentSandboxEnabled:gt(t.STUDIO_AGENT_SANDBOX_ENABLED),sandboxStickyHeadRefEnabled:gt(t.SANDBOX_STICKY_HEAD_REF),taskBoardRerunReusesPrBranch:v3(t.TASK_BOARD_RERUN_REUSES_PR_BRANCH,!0),sandboxReleaseOnRunEndEnabled:gt(t.SANDBOX_RELEASE_ON_RUN_END),sandboxPrewarmOnThreadCreateEnabled:gt(t.SANDBOX_PREWARM_ON_THREAD_CREATE),sandboxPersistentHarnessEnabled:gt(t.SANDBOX_PERSISTENT_HARNESS),sandboxReleaseGraceMs:Ke("SANDBOX_RELEASE_GRACE_MS",t.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:t.DECO_SUPABASE_URL,decoSupabaseServiceKey:t.DECO_SUPABASE_SERVICE_KEY,controlplaneRestUrl:t.CONTROLPLANE_REST_URL,controlplaneServiceToken:t.CONTROLPLANE_SERVICE_TOKEN,analyticsDataUrl:t.ANALYTICS_URL,analyticsMasterToken:t.ANALYTICS_MASTER_TOKEN,clickhouseAnalyticsUrl:t.CLICKHOUSE_ANALYTICS_ADDRESS,clickhouseAnalyticsUsername:t.CLICKHOUSE_ANALYTICS_USERNAME||"admin_monitor",clickhouseAnalyticsPassword:t.CLICKHOUSE_ANALYTICS_PASSWORD,oneDollarStatsApiKey:t.ONEDOLLAR_BACKEND_API_KEY,reportsInternalApiUrl:po(t.REPORTS_INTERNAL_API_URL,t.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:po(t.REPORTS_INTERNAL_API_KEY,t.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:t.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:t.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:t.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:t.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:t.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:t.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:t.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY};if(Boolean(n.natsUser)!==Boolean(n.natsPassword))throw Error("NATS_USER and NATS_PASSWORD must be set together");if(n.natsCredsPath&&n.natsUser)throw Error("Use either NATS_CREDS or NATS_USER/NATS_PASSWORD");if(n.plansEnabled&&!n.studioJwtSecret)throw Error("STUDIO_PLANS_ENABLED requires an explicit gateway JWT secret. Set STUDIO_JWT_SECRET (or its legacy alias MESH_JWT_SECRET) to the same value as the gateway's MESH_JWT_SECRET. Refusing to fall back to BETTER_AUTH_SECRET: that mismatch 401s every entitlements call, which every feature gate reads as 'no answer' and fails OPEN.");if(n.plansEnabled&&!n.studioProvisionSecretKey)throw Error("STUDIO_PLANS_ENABLED requires STUDIO_PROVISION_SECRET_KEY, set to the same value as the gateway's STUDIO_PROVISION_KEY. Without it the gateway cannot identify this server, falls back to a per-user membership callback that 401s for any user who never completed the gateway OAuth flow, and every feature gate then fails OPEN.");if(n.plansEnabled&&!n.aiGatewayEnabled)throw Error("STUDIO_PLANS_ENABLED requires DECO_AI_GATEWAY_ENABLED=true. Plans are read from the gateway; with it disabled there is no adapter to ask, so every feature gate fails OPEN on both server and client and the paid product is free fleet-wide.");if(n.plansEnabled&&Object.keys(n.stripePlanPriceIds).length>0&&!n.aiGatewayAdminToken)throw Error("STRIPE_PLAN_PRICE_IDS is set but DECO_AI_GATEWAY_ADMIN_TOKEN is not. The Stripe webhook places the paid tier through the gateway's admin API, so without the token a customer is charged and the entitlement "+"is never granted \u2014 and AI_PLAN_SET cannot repair it, it accepts only "+"'free'.");if(n.plansEnabled&&Object.keys(n.stripePlanPriceIds).length>1&&!n.stripePortalConfigurationId)console.warn("STRIPE_PLAN_PRICE_IDS maps more than one plan but STRIPE_PORTAL_CONFIGURATION_ID is unset. An org that already has a subscription cannot change tier: the account's default portal configuration lists only the legacy plans, not the tiers, so Stripe refuses the update flow. First-time checkout is unaffected.");return n}var dv,Jv;var a2=A(()=>{dv=new Set(["all","worker","api"]);Jv=new Set(["production","development","test"])});function ge(){return Zv??=Object.freeze(g2(process.env))}var Zv=null;var Rc=A(()=>{a2()});import{context as KBt,propagation as XBt,SpanKind as ZBt,SpanStatusCode as FBt}from"@opentelemetry/api";var fBt;var p2=A(()=>{tu();fBt=globalThis.fetch});var eu=A(()=>{Rc()});import{ExportResultCode as $i}from"@opentelemetry/core";import{mkdir as Fv,rename as jv,writeFile as fv}from"fs/promises";import{join as Bi}from"path";class Di{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(t){this.basePath=t.basePath,this.flushThreshold=t.flushThreshold??1000,this.maxBufferBytes=t.maxBufferBytes??10485760,this.partitionKey=t.partitionKey;let e=t.flushIntervalMs??60000;if(e>0&&e<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((s)=>{console.error("[NDJSONExporter] Timer flush failed:",s)})},e),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(t){if(this.isShutdown)return Promise.resolve({code:$i.FAILED});for(let e of t){let s=JSON.stringify(e),r=this.partitionKey?this.partitionKey(e):"";this.bufferItems.push({partition:r,json:s}),this.bufferBytes+=Buffer.byteLength(s,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:$i.SUCCESS})).catch((e)=>{return console.error("[NDJSONExporter] Flush failed:",e),{code:$i.FAILED}});return Promise.resolve({code:$i.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let e=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=e,e}async doFlush(){if(this.bufferItems.length===0)return;let t=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let e=new Map;for(let n of t){let c=e.get(n.partition);if(!c)c=[],e.set(n.partition,c);c.push(n.json)}let s=await Promise.allSettled(Array.from(e.entries()).map(([n,c])=>this.writeNDJSON(c,n).then(()=>n))),r=s.find((n)=>n.status==="rejected");if(r){let n=new Set;for(let o of s)if(o.status==="fulfilled")n.add(o.value);let c=t.filter((o)=>!n.has(o.partition));this.bufferItems=c.concat(this.bufferItems),this.bufferBytes=0;for(let o of this.bufferItems)this.bufferBytes+=Buffer.byteLength(o.json,"utf8")+1;throw r.reason}}async writeNDJSON(t,e){let s=new Date,r=[String(s.getUTCFullYear()),String(s.getUTCMonth()+1).padStart(2,"0"),String(s.getUTCDate()).padStart(2,"0"),String(s.getUTCHours()).padStart(2,"0")],n=e?Bi(this.basePath,e,...r):Bi(this.basePath,...r);if(!this.knownDirs.has(n))await Fv(n,{recursive:!0,mode:448}),this.knownDirs.add(n);let c=`${crypto.randomUUID()}.ndjson`,o=Bi(n,`.${c}.tmp`),u=Bi(n,c),i=t.join(`
|
|
81
|
+
`}async function Wv(t){let e=t||process.env.SHELL?.split("/").pop()||"bash",s,r;switch(e){case"bash":{s=Lv(),r=_2(k2(),".local/share/bash-completion/completions/deco");break}case"zsh":{s=zv(),r=_2(k2(),".zsh/completions/_deco");break}default:console.error(`Unsupported shell: ${e}`),console.log("Supported shells: bash, zsh"),process.exit(1)}if(Mv(l2(r),{recursive:!0}),await Uv(r,s,"utf8"),console.log(`Completion script installed to: ${r}`),console.log(""),e==="bash")console.log("To enable completions, add to your ~/.bashrc:"),console.log(` source "${r}"`);else console.log("To enable completions, add to your ~/.zshrc:"),console.log(` fpath=("${l2(r)}" $fpath)`),console.log(" autoload -U compinit && compinit");console.log(""),console.log("Then restart your shell.")}var v2=()=>{};import{homedir as qv}from"os";function Qv(t){let e=(t??"").trim();return dv.has(e)?e:"all"}function Hv(t){let e=(t??"").trim();return Jv.has(e)?e:"development"}function gt(t){return t==="true"||t==="1"}function g3(t,e,s){if(e===void 0||e==="")return;let r=Number(e);if(!Number.isSafeInteger(r)||r<=0)throw Error(`${t} must be a positive integer`);if(s!==void 0&&r>s)throw Error(`${t} must be at most ${s}`);return r}function Ke(t,e,s,r){return g3(t,e,r)??s}function Gv(t){let e={};for(let s of(t??"").split(",")){let r=s.trim();if(!r)continue;let n=r.indexOf("="),c=n>0?r.slice(0,n).trim():"",o=n>0?r.slice(n+1).trim():"";if(!c||!o){console.warn(`STRIPE_PLAN_PRICE_IDS: ignoring unparseable entry "${r}" \u2014 expected price_xxx=planId`);continue}e[c]=o}return e}function Kv(t,e,s,r){if(e===void 0||e==="")return s;let n=Number(e);if(!Number.isSafeInteger(n)||n<0)throw Error(`${t} must be a non-negative integer`);if(r!==void 0&&n>r)throw Error(`${t} must be at most ${r}`);return n}function v3(t,e){if(t===void 0||t==="")return e;return t==="true"||t==="1"}function Xv(t){return t===void 0||t===""||t==="true"||t==="1"}function po(t,e){return t||e}function g2(t){let e=t.DATA_DIR||t.DECOCMS_HOME||`${qv()}/deco`,s=Hv(t.NODE_ENV),r=t.VOICE_CONVERSATION_PROVIDER?.trim()||"elevenlabs",n={nodeEnv:s,port:Ke("PORT",t.PORT,3000,65535),baseUrl:t.BASE_URL,publicUrl:po(t.STUDIO_PUBLIC_URL,t.MESH_PUBLIC_URL),dataDir:e,voiceConversationProvider:r==="elevenlabs"||r==="openai"?r:null,openaiLiveApiKey:t.OPENAI_LIVE_API_KEY,openaiLiveModel:t.OPENAI_LIVE_MODEL?.trim()||"gpt-live-1",openaiLiveVoice:t.OPENAI_LIVE_VOICE?.trim()||"marin",elevenlabsApiKey:t.ELEVENLABS_API_KEY,elevenlabsVoiceId:t.ELEVENLABS_VOICE_ID||"JBFqnCBsd6RMkjVDRZzb",elevenlabsVoiceModel:t.ELEVENLABS_VOICE_MODEL||"eleven_v4_turbo",elevenlabsConversationModel:t.ELEVENLABS_CONVERSATION_MODEL?.trim()||"gemini-2.5-flash",databaseUrl:t.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",databasePgSsl:gt(t.DATABASE_PG_SSL),databasePoolMax:Ke("DATABASE_POOL_MAX",t.DATABASE_POOL_MAX,5),dbosPoolSize:Ke("DBOS_POOL_SIZE",t.DBOS_POOL_SIZE,5),betterAuthSecret:t.BETTER_AUTH_SECRET||"",encryptionKey:t.ENCRYPTION_KEY||"",studioJwtSecret:po(t.STUDIO_JWT_SECRET,t.MESH_JWT_SECRET),localMode:gt(t.DECOCMS_LOCAL_MODE),disableRateLimit:gt(t.DISABLE_RATE_LIMIT),jiraAllowLocalSiteUrl:gt(t.JIRA_ALLOW_LOCAL_SITE_URL),jiraSettleSeconds:Ke("JIRA_SETTLE_SECONDS",t.JIRA_SETTLE_SECONDS,20,3600),studioProvisionSecretKey:t.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(t.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((c)=>c.trim().toLowerCase()).filter(Boolean),taskBoardAdminOrgIds:(t.STUDIO_ADMIN_ORG_IDS??"").split(",").map((c)=>c.trim()).filter(Boolean),deploymentAdminToken:t.DEPLOYMENT_ADMIN_TOKEN||void 0,clickhouseUrl:t.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:g3("CLICKHOUSE_MAX_MEMORY_USAGE",t.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:t.MONITORING_OTLP_ENDPOINT,otelServiceName:t.OTEL_SERVICE_NAME||"studio",natsUrls:(t.NATS_URL||"nats://localhost:4222").split(",").map((c)=>c.trim()).filter(Boolean),natsCredsPath:t.NATS_CREDS,natsUser:t.NATS_USER||void 0,natsPassword:t.NATS_PASSWORD||void 0,configPath:t.CONFIG_PATH||"./config.json",aiGatewayEnabled:gt(t.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:t.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:t.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:t.STRIPE_WEBHOOK_SECRET,stripeSecretKey:t.STRIPE_SECRET_KEY,stripeOrgPriceId:t.STRIPE_ORG_PRICE_ID,stripePlanPriceIds:Gv(t.STRIPE_PLAN_PRICE_IDS),stripePortalConfigurationId:t.STRIPE_PORTAL_CONFIGURATION_ID,stripeTopupProductId:t.STRIPE_TOPUP_PRODUCT_ID,topupFeePercent:Kv("STUDIO_TOPUP_FEE_PERCENT",t.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:gt(t.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:Ke("STUDIO_FREE_TASKS",t.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:Ke("STUDIO_MONTHLY_TASKS",t.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:Ke("STUDIO_MAX_RUNS_PER_TASK",t.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:gt(t.ENABLE_DECO_IMPORT),hostingControlPlaneGa:gt(t.HOSTING_CONTROL_PLANE_GA),monitorGa:gt(t.MONITOR_GA),plansEnabled:gt(t.STUDIO_PLANS_ENABLED),mcpCacheEnabled:v3(t.MCP_CACHE_ENABLED,s!=="development"),orgFsPublicSetsJson:t.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:gt(t.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:Ke("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",t.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:Ke("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",t.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:v3(t.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),boardTransitionSettleSeconds:Ke("BOARD_TRANSITION_SETTLE_SECONDS",t.BOARD_TRANSITION_SETTLE_SECONDS,20,3600),sandboxMaxConcurrentHostedRuns:Ke("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",t.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:t.S3_ENDPOINT,s3Bucket:t.S3_BUCKET,s3Region:t.S3_REGION||"auto",s3AccessKeyId:t.S3_ACCESS_KEY_ID,s3SecretAccessKey:t.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:Xv(t.S3_FORCE_PATH_STYLE),monitoringS3Bucket:t.MONITORING_S3_BUCKET,monitoringS3Endpoint:t.MONITORING_S3_ENDPOINT,monitoringS3Region:t.MONITORING_S3_REGION,monitoringS3AccessKeyId:t.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:t.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:t.MONITORING_S3_PREFIX,duckdbExtensionDirectory:t.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:t.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:g3("DUCKDB_THREADS",t.DUCKDB_THREADS),podName:t.POD_NAME||crypto.randomUUID(),dispatchRole:Qv(po(t.STUDIO_DISPATCH_ROLE,t.MESH_DISPATCH_ROLE)),agentSandboxEnabled:gt(t.STUDIO_AGENT_SANDBOX_ENABLED),sandboxStickyHeadRefEnabled:gt(t.SANDBOX_STICKY_HEAD_REF),taskBoardRerunReusesPrBranch:v3(t.TASK_BOARD_RERUN_REUSES_PR_BRANCH,!0),sandboxReleaseOnRunEndEnabled:gt(t.SANDBOX_RELEASE_ON_RUN_END),sandboxPrewarmOnThreadCreateEnabled:gt(t.SANDBOX_PREWARM_ON_THREAD_CREATE),sandboxPersistentHarnessEnabled:gt(t.SANDBOX_PERSISTENT_HARNESS),sandboxReleaseGraceMs:Ke("SANDBOX_RELEASE_GRACE_MS",t.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:t.DECO_SUPABASE_URL,decoSupabaseServiceKey:t.DECO_SUPABASE_SERVICE_KEY,controlplaneRestUrl:t.CONTROLPLANE_REST_URL,controlplaneServiceToken:t.CONTROLPLANE_SERVICE_TOKEN,analyticsDataUrl:t.ANALYTICS_URL,analyticsMasterToken:t.ANALYTICS_MASTER_TOKEN,clickhouseAnalyticsUrl:t.CLICKHOUSE_ANALYTICS_ADDRESS,clickhouseAnalyticsUsername:t.CLICKHOUSE_ANALYTICS_USERNAME||"admin_monitor",clickhouseAnalyticsPassword:t.CLICKHOUSE_ANALYTICS_PASSWORD,oneDollarStatsApiKey:t.ONEDOLLAR_BACKEND_API_KEY,reportsInternalApiUrl:po(t.REPORTS_INTERNAL_API_URL,t.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:po(t.REPORTS_INTERNAL_API_KEY,t.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:t.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:t.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:t.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:t.S3_TENANT_PUBLIC_URL_BASE||"https://assets.decocms.com",awsS3TenantRoleArn:t.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:t.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:t.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY,deliveryR2AccountId:t.DELIVERY_R2_ACCOUNT_ID,deliveryR2AccessKeyId:t.DELIVERY_R2_ACCESS_KEY_ID,deliveryR2SecretAccessKey:t.DELIVERY_R2_SECRET_ACCESS_KEY,deliveryR2Bucket:t.DELIVERY_R2_BUCKET,deliveryR2Endpoint:t.DELIVERY_R2_ENDPOINT,deliveryPublicOrigin:t.DELIVERY_PUBLIC_ORIGIN,siteTokenSigningKey:t.DECO_SITE_TOKEN_SIGNING_KEY,cfDeliveryZoneId:t.CF_DELIVERY_ZONE_ID,cfPurgeApiToken:t.CF_PURGE_API_TOKEN};if(Boolean(n.natsUser)!==Boolean(n.natsPassword))throw Error("NATS_USER and NATS_PASSWORD must be set together");if(n.natsCredsPath&&n.natsUser)throw Error("Use either NATS_CREDS or NATS_USER/NATS_PASSWORD");if(n.plansEnabled&&!n.studioJwtSecret)throw Error("STUDIO_PLANS_ENABLED requires an explicit gateway JWT secret. Set STUDIO_JWT_SECRET (or its legacy alias MESH_JWT_SECRET) to the same value as the gateway's MESH_JWT_SECRET. Refusing to fall back to BETTER_AUTH_SECRET: that mismatch 401s every entitlements call, which every feature gate reads as 'no answer' and fails OPEN.");if(n.plansEnabled&&!n.studioProvisionSecretKey)throw Error("STUDIO_PLANS_ENABLED requires STUDIO_PROVISION_SECRET_KEY, set to the same value as the gateway's STUDIO_PROVISION_KEY. Without it the gateway cannot identify this server, falls back to a per-user membership callback that 401s for any user who never completed the gateway OAuth flow, and every feature gate then fails OPEN.");if(n.plansEnabled&&!n.aiGatewayEnabled)throw Error("STUDIO_PLANS_ENABLED requires DECO_AI_GATEWAY_ENABLED=true. Plans are read from the gateway; with it disabled there is no adapter to ask, so every feature gate fails OPEN on both server and client and the paid product is free fleet-wide.");if(n.plansEnabled&&Object.keys(n.stripePlanPriceIds).length>0&&!n.aiGatewayAdminToken)throw Error("STRIPE_PLAN_PRICE_IDS is set but DECO_AI_GATEWAY_ADMIN_TOKEN is not. The Stripe webhook places the paid tier through the gateway's admin API, so without the token a customer is charged and the entitlement "+"is never granted \u2014 and AI_PLAN_SET cannot repair it, it accepts only "+"'free'.");if(n.plansEnabled&&Object.keys(n.stripePlanPriceIds).length>1&&!n.stripePortalConfigurationId)console.warn("STRIPE_PLAN_PRICE_IDS maps more than one plan but STRIPE_PORTAL_CONFIGURATION_ID is unset. An org that already has a subscription cannot change tier: the account's default portal configuration lists only the legacy plans, not the tiers, so Stripe refuses the update flow. First-time checkout is unaffected.");return n}var dv,Jv;var a2=A(()=>{dv=new Set(["all","worker","api"]);Jv=new Set(["production","development","test"])});function ge(){return Zv??=Object.freeze(g2(process.env))}var Zv=null;var Rc=A(()=>{a2()});import{context as KBt,propagation as XBt,SpanKind as ZBt,SpanStatusCode as FBt}from"@opentelemetry/api";var fBt;var p2=A(()=>{tu();fBt=globalThis.fetch});var eu=A(()=>{Rc()});import{ExportResultCode as $i}from"@opentelemetry/core";import{mkdir as Fv,rename as jv,writeFile as fv}from"fs/promises";import{join as Bi}from"path";class Di{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(t){this.basePath=t.basePath,this.flushThreshold=t.flushThreshold??1000,this.maxBufferBytes=t.maxBufferBytes??10485760,this.partitionKey=t.partitionKey;let e=t.flushIntervalMs??60000;if(e>0&&e<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((s)=>{console.error("[NDJSONExporter] Timer flush failed:",s)})},e),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(t){if(this.isShutdown)return Promise.resolve({code:$i.FAILED});for(let e of t){let s=JSON.stringify(e),r=this.partitionKey?this.partitionKey(e):"";this.bufferItems.push({partition:r,json:s}),this.bufferBytes+=Buffer.byteLength(s,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:$i.SUCCESS})).catch((e)=>{return console.error("[NDJSONExporter] Flush failed:",e),{code:$i.FAILED}});return Promise.resolve({code:$i.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let e=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=e,e}async doFlush(){if(this.bufferItems.length===0)return;let t=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let e=new Map;for(let n of t){let c=e.get(n.partition);if(!c)c=[],e.set(n.partition,c);c.push(n.json)}let s=await Promise.allSettled(Array.from(e.entries()).map(([n,c])=>this.writeNDJSON(c,n).then(()=>n))),r=s.find((n)=>n.status==="rejected");if(r){let n=new Set;for(let o of s)if(o.status==="fulfilled")n.add(o.value);let c=t.filter((o)=>!n.has(o.partition));this.bufferItems=c.concat(this.bufferItems),this.bufferBytes=0;for(let o of this.bufferItems)this.bufferBytes+=Buffer.byteLength(o.json,"utf8")+1;throw r.reason}}async writeNDJSON(t,e){let s=new Date,r=[String(s.getUTCFullYear()),String(s.getUTCMonth()+1).padStart(2,"0"),String(s.getUTCDate()).padStart(2,"0"),String(s.getUTCHours()).padStart(2,"0")],n=e?Bi(this.basePath,e,...r):Bi(this.basePath,...r);if(!this.knownDirs.has(n))await Fv(n,{recursive:!0,mode:448}),this.knownDirs.add(n);let c=`${crypto.randomUUID()}.ndjson`,o=Bi(n,`.${c}.tmp`),u=Bi(n,c),i=t.join(`
|
|
82
82
|
`)+`
|
|
83
83
|
`;await fv(o,i,{mode:384}),await jv(o,u)}}var Ci=()=>{};import{ExportResultCode as eDt}from"@opentelemetry/core";var eI=A(()=>{eu();Ci()});import{ExportResultCode as oDt}from"@opentelemetry/core";import{AggregationTemporality as iDt,DataPointType as mDt}from"@opentelemetry/sdk-metrics";var sI=A(()=>{eu();Ci()});import{ExportResultCode as ODt}from"@opentelemetry/core";var rI=A(()=>{eu();Ci()});var PDt;var nI=A(()=>{PDt=Buffer.byteLength("... [TRUNCATED]","utf8")});import{NOOP_LOGGER as RDt}from"@opentelemetry/api-logs";var cI=()=>{};var oI=()=>{};import{SpanStatusCode as UDt}from"@opentelemetry/api";var uI=A(()=>{tu();oI()});import{createContextKey as lv,metrics as _v,propagation as YDt,ROOT_CONTEXT as VDt,SpanStatusCode as lDt,trace as kv}from"@opentelemetry/api";import{logs as bv,SeverityNumber as a3}from"@opentelemetry/api-logs";import{OTLPLogExporter as bDt}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as vv}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as aDt}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as t9t}from"@opentelemetry/instrumentation-runtime-node";import{BatchLogRecordProcessor as m9t,LoggerProvider as w9t}from"@opentelemetry/sdk-logs";import{detectResources as E9t,envDetector as h9t,hostDetector as y9t,osDetector as O9t,processDetector as x9t,resourceFromAttributes as T9t}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as P9t}from"@opentelemetry/sdk-metrics";import{NodeSDK as R9t}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as B9t,SamplingDecision as $c}from"@opentelemetry/sdk-trace-base";class mI{inner;constructor(t){this.inner=t}shouldSample(t,e,s,r,n,c){let o=t.getValue(av);if(!o){if(this.inner)return this.inner.shouldSample(t,e,s,r,n,c);return{decision:$c.RECORD_AND_SAMPLED}}let u=iI(o);if(u)return{decision:$c.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":u}};if(this.inner){let i=this.inner.shouldSample(t,e,s,r,n,c);if(i.decision===$c.RECORD_AND_SAMPLED){let w=crypto.randomUUID();i.attributes={...i.attributes??{},"trace.debug.id":w}}return i}return{decision:$c.NOT_RECORD}}toString(){return"DebugSampler"}}class wI{ratio;constructor(t){this.ratio=t}shouldSample(){if(Math.random()<this.ratio)return{decision:$c.RECORD_AND_SAMPLED};return{decision:$c.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}var gv="__d",av,pv=1,iI=(t)=>{let s=new URL(t.url).searchParams.get(gv);if(s==="")return crypto.randomUUID();if(!s)s=t.headers.get("x-trace-debug-id");return s},C9t,U9t,tI,su,tg,p3=(t,e,s)=>{let r={},n=s,c=s[s.length-1];if(c!==null&&typeof c==="object"&&!Array.isArray(c)&&!(c instanceof Error)&&Object.getPrototypeOf(c)===Object.prototype)r=c,n=s.slice(0,-1);let o=n.map((u)=>{if(u instanceof Error)return`${u.name}: ${u.message}`;if(typeof u==="object")try{return JSON.stringify(u)}catch{return"[Object]"}return String(u)}).join(" ");tg.emit({severityNumber:t,severityText:e,body:o,attributes:{"log.source":"console",...r}})},tE;var tu=A(()=>{p2();eI();sI();rI();eu();nI();Rc();cI();uI();av=lv("Current request");C9t=new vv({preventServerStart:!0}),U9t=new mI(new wI(pv)),tI=kv.getTracer("studio","1.0.0"),su=_v.getMeter("studio","1.0.0"),tg=bv.getLogger("studio","1.0.0"),tE={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...t)=>{p3(a3.ERROR,"ERROR",t),tE.error(...t)};console.warn=(...t)=>{p3(a3.WARN,"WARN",t),tE.warn(...t)};console.debug=(...t)=>{p3(a3.DEBUG,"DEBUG",t),tE.debug(...t)}});var SI=()=>{};function eg(){if(eE)return;let t=performance.now()+sE;eE=setInterval(()=>{let e=performance.now();EI=Math.max(0,e-t),t=e+sE},sE),eE.unref?.()}function hI(){return eg(),EI}var eE,EI=0,sE=500;var yI=A(()=>{tu();SI()});import{Kysely as sg,PostgresDialect as rg}from"kysely";import{Pool as ng}from"pg";function mg(t){let e=t.connect.bind(t);return t.connect=(s)=>{if(typeof s==="function")return e(s);let r=performance.now(),n=rE(),c=t.idleCount===0&&t.totalCount>=n,o=t.idleCount;return e().then((u)=>{let i=performance.now()-r;if(OI().record(i,{"db.pool.outcome":c?"contended":"available"}),i>og)if(c)console.error("Slow db pool acquire \u2014 pool saturated:",{waitMs:i,total:t.totalCount,idle:t.idleCount,waiting:t.waitingCount,max:n});else console.warn("Slow db pool acquire \u2014 event-loop lag (not pool):",{waitMs:i,idleAtStart:o,total:t.totalCount,max:n});return u},(u)=>{throw OI().record(performance.now()-r,{"db.pool.outcome":"error"}),u})},t}function Sg(){try{return ge().databasePgSsl}catch{return!1}}function rE(){try{return ge().databasePoolMax}catch{return 10}}function Eg(t){let e=mg(new ng({connectionString:t,max:rE(),ssl:Sg(),...wg})),s=new rg({pool:e});return{type:"postgres",db:new sg({dialect:s,log:ig(e)}),pool:e}}function TI(){return ge().databaseUrl}function hg(t){let e=t||TI();return Eg(e)}async function nE(t){if(await t.db.destroy(),!t.pool.ended)await t.pool.end();if(t===ru)ru=null}function AI(){if(!ru)ru=hg(TI());return ru}var cg=()=>su.createHistogram("db.query.duration",{description:"Database query execution duration in milliseconds",unit:"ms"}),OI=()=>su.createHistogram("db.pool.acquire.duration",{description:"Time spent waiting to acquire a connection from the pool",unit:"ms"}),xI=400,og=100,ug=(t)=>({"db.status":t.level==="error"?"error":"success"}),ig=(t)=>(e)=>{let s=ug(e);if(e.queryDurationMillis>xI){let r=hI(),n=r>xI/2;console.error(n?"Slow query measurement \u2014 likely event-loop lag, not slow SQL:":"Slow query detected:",{durationMs:e.queryDurationMillis,eventLoopLagMs:Math.round(r),sql:e.query.sql,pool:{total:t.totalCount,idle:t.idleCount,waiting:t.waitingCount,max:rE()}})}if(cg().record(e.queryDurationMillis,s),e.level==="error")console.error("Query failed:",{durationMs:e.queryDurationMillis,error:e.error,sql:e.query.sql})},wg,ru=null;var PI=A(()=>{Rc();tu();yI();wg={keepAlive:!0,keepAliveInitialDelayMillis:1e4,idleTimeoutMillis:300000,connectionTimeoutMillis:30000,allowExitOnIdle:!0}});var rn=D((Pg)=>{Pg.HttpAuthLocation=void 0;(function(t){t.HEADER="header",t.QUERY="query"})(Pg.HttpAuthLocation||(Pg.HttpAuthLocation={}));Pg.HttpApiKeyAuthLocation=void 0;(function(t){t.HEADER="header",t.QUERY="query"})(Pg.HttpApiKeyAuthLocation||(Pg.HttpApiKeyAuthLocation={}));Pg.EndpointURLScheme=void 0;(function(t){t.HTTP="http",t.HTTPS="https"})(Pg.EndpointURLScheme||(Pg.EndpointURLScheme={}));Pg.AlgorithmId=void 0;(function(t){t.MD5="md5",t.CRC32="crc32",t.CRC32C="crc32c",t.SHA1="sha1",t.SHA256="sha256"})(Pg.AlgorithmId||(Pg.AlgorithmId={}));var yg=(t)=>{let e=[];if(t.sha256!==void 0)e.push({algorithmId:()=>Pg.AlgorithmId.SHA256,checksumConstructor:()=>t.sha256});if(t.md5!=null)e.push({algorithmId:()=>Pg.AlgorithmId.MD5,checksumConstructor:()=>t.md5});return{addChecksumAlgorithm(s){e.push(s)},checksumAlgorithms(){return e}}},Og=(t)=>{let e={};return t.checksumAlgorithms().forEach((s)=>{e[s.algorithmId()]=s.checksumConstructor()}),e},xg=(t)=>{return yg(t)},Tg=(t)=>{return Og(t)};Pg.FieldPosition=void 0;(function(t){t[t.HEADER=0]="HEADER",t[t.TRAILER=1]="TRAILER"})(Pg.FieldPosition||(Pg.FieldPosition={}));var Ag="__smithy_context";Pg.IniSectionType=void 0;(function(t){t.PROFILE="profile",t.SSO_SESSION="sso-session",t.SERVICES="services"})(Pg.IniSectionType||(Pg.IniSectionType={}));Pg.RequestHandlerProtocol=void 0;(function(t){t.HTTP_0_9="http/0.9",t.HTTP_1_0="http/1.0",t.TDS_8_0="tds/8.0"})(Pg.RequestHandlerProtocol||(Pg.RequestHandlerProtocol={}));Pg.SMITHY_CONTEXT_KEY=Ag;Pg.getDefaultClientConfiguration=xg;Pg.resolveDefaultRuntimeConfig=Tg});var mt=D((Mg)=>{var $g=rn(),Bg=(t)=>{return{setHttpHandler(e){t.httpHandler=e},httpHandler(){return t.httpHandler},updateHttpClientConfig(e,s){t.httpHandler?.updateHttpClientConfig(e,s)},httpHandlerConfigs(){return t.httpHandler.httpHandlerConfigs()}}},Dg=(t)=>{return{httpHandler:t.httpHandler()}};class II{name;kind;values;constructor({name:t,kind:e=$g.FieldPosition.HEADER,values:s=[]}){this.name=t,this.kind=e,this.values=s}add(t){this.values.push(t)}set(t){this.values=t}remove(t){this.values=this.values.filter((e)=>e!==t)}toString(){return this.values.map((t)=>t.includes(",")||t.includes(" ")?`"${t}"`:t).join(", ")}get(){return this.values}}class NI{entries={};encoding;constructor({fields:t=[],encoding:e="utf-8"}){t.forEach(this.setField.bind(this)),this.encoding=e}setField(t){this.entries[t.name.toLowerCase()]=t}getField(t){return this.entries[t.toLowerCase()]}removeField(t){delete this.entries[t.toLowerCase()]}getByType(t){return Object.values(this.entries).filter((e)=>e.kind===t)}}class Ui{method;protocol;hostname;port;path;query;headers;username;password;fragment;body;constructor(t){this.method=t.method||"GET",this.hostname=t.hostname||"localhost",this.port=t.port,this.query=t.query||{},this.headers=t.headers||{},this.body=t.body,this.protocol=t.protocol?t.protocol.slice(-1)!==":"?`${t.protocol}:`:t.protocol:"https:",this.path=t.path?t.path.charAt(0)!=="/"?`/${t.path}`:t.path:"/",this.username=t.username,this.password=t.password,this.fragment=t.fragment}static clone(t){let e=new Ui({...t,headers:{...t.headers}});if(e.query)e.query=Cg(e.query);return e}static isInstance(t){if(!t)return!1;let e=t;return"method"in e&&"protocol"in e&&"hostname"in e&&"path"in e&&typeof e.query==="object"&&typeof e.headers==="object"}clone(){return Ui.clone(this)}}function Cg(t){return Object.keys(t).reduce((e,s)=>{let r=t[s];return{...e,[s]:Array.isArray(r)?[...r]:r}},{})}class RI{statusCode;reason;headers;body;constructor(t){this.statusCode=t.statusCode,this.reason=t.reason,this.headers=t.headers||{},this.body=t.body}static isInstance(t){if(!t)return!1;let e=t;return typeof e.statusCode==="number"&&typeof e.headers==="object"}}function Ug(t){return/^[a-z0-9][a-z0-9\.\-]*[a-z0-9]$/.test(t)}Mg.Field=II;Mg.Fields=NI;Mg.HttpRequest=Ui;Mg.HttpResponse=RI;Mg.getHttpHandlerExtensionConfiguration=Bg;Mg.isValidHostname=Ug;Mg.resolveHttpHandlerRuntimeConfig=Dg});function Hg(t){return(e)=>async(s)=>{let{request:r}=s;if(t.expectContinueHeader!==!1&&$I.HttpRequest.isInstance(r)&&r.body&&t.runtime==="node"&&t.requestHandler?.constructor?.name!=="FetchHttpHandler"){let n=!0;if(typeof t.expectContinueHeader==="number")try{n=(Number(r.headers?.["content-length"])??t.bodyLengthChecker?.(r.body)??1/0)>=t.expectContinueHeader}catch(c){}else n=!!t.expectContinueHeader;if(n)r.headers.Expect="100-continue"}return e({...s,request:r})}}var $I,Gg,BI=(t)=>({applyToStack:(e)=>{e.add(Hg(t),Gg)}});var DI=A(()=>{$I=y(mt(),1);Gg={step:"build",tags:["SET_EXPECT_HEADER","EXPECT_HEADER"],name:"addExpectContinueMiddleware",override:!0}});var Xe,Mi,nn,Li,p,CI,cu;var Ze=A(()=>{Xe={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},Mi=Xe.WHEN_SUPPORTED,nn={WHEN_SUPPORTED:"WHEN_SUPPORTED",WHEN_REQUIRED:"WHEN_REQUIRED"},Li=Xe.WHEN_SUPPORTED;(function(t){t.MD5="MD5",t.CRC32="CRC32",t.CRC32C="CRC32C",t.CRC64NVME="CRC64NVME",t.SHA1="SHA1",t.SHA256="SHA256"})(p||(p={}));(function(t){t.HEADER="header",t.TRAILER="trailer"})(CI||(CI={}));cu=p.CRC32});var Sr,Bc=(t,e,s,r)=>{if(!(e in t))return;let n=t[e].toUpperCase();if(!Object.values(s).includes(n))throw TypeError(`Cannot load ${r} '${e}'. Expected one of ${Object.values(s)}, got '${t[e]}'.`);return n};var SE=A(()=>{(function(t){t.ENV="env",t.CONFIG="shared config entry"})(Sr||(Sr={}))});var Kg="AWS_REQUEST_CHECKSUM_CALCULATION",Xg="request_checksum_calculation",UI;var MI=A(()=>{Ze();SE();UI={environmentVariableSelector:(t)=>Bc(t,Kg,Xe,Sr.ENV),configFileSelector:(t)=>Bc(t,Xg,Xe,Sr.CONFIG),default:Mi}});var Zg="AWS_RESPONSE_CHECKSUM_VALIDATION",Fg="response_checksum_validation",LI;var zI=A(()=>{Ze();SE();LI={environmentVariableSelector:(t)=>Bc(t,Zg,nn,Sr.ENV),configFileSelector:(t)=>Bc(t,Fg,nn,Sr.CONFIG),default:Li}});var hE=D((gg)=>{var jg=["AuthFailure","InvalidSignatureException","RequestExpired","RequestInTheFuture","RequestTimeTooSkewed","SignatureDoesNotMatch"],fg=["BandwidthLimitExceeded","EC2ThrottledException","LimitExceededException","PriorRequestNotComplete","ProvisionedThroughputExceededException","RequestLimitExceeded","RequestThrottled","RequestThrottledException","SlowDown","ThrottledException","Throttling","ThrottlingException","TooManyRequestsException","TransactionInProgressException"],Yg=["TimeoutError","RequestTimeout","RequestTimeoutException"],Vg=[500,502,503,504],lg=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT"],_g=["EHOSTUNREACH","ENETUNREACH","ENOTFOUND"],WI=(t)=>t?.$retryable!==void 0,kg=(t)=>jg.includes(t.name),qI=(t)=>t.$metadata?.clockSkewCorrected,dI=(t)=>{let e=new Set(["Failed to fetch","NetworkError when attempting to fetch resource","The Internet connection appears to be offline","Load failed","Network request failed"]);if(!(t&&t instanceof TypeError))return!1;return e.has(t.message)},bg=(t)=>t.$metadata?.httpStatusCode===429||fg.includes(t.name)||t.$retryable?.throttling==!0,EE=(t,e=0)=>WI(t)||qI(t)||t.name==="InvalidSignatureException"&&t.message?.includes("Signature expired")||Yg.includes(t.name)||lg.includes(t?.code||"")||_g.includes(t?.code||"")||Vg.includes(t.$metadata?.httpStatusCode||0)||dI(t)||QI(t)||t.cause!==void 0&&e<=10&&EE(t.cause,e+1),vg=(t)=>{if(t.$metadata?.httpStatusCode!==void 0){let e=t.$metadata.httpStatusCode;if(500<=e&&e<=599&&!EE(t))return!0;return!1}return!1};function QI(t){return t.code==="ERR_HTTP2_STREAM_ERROR"&&t.message.includes("NGHTTP2_REFUSED_STREAM")}gg.isBrowserNetworkError=dI;gg.isClockSkewCorrectedError=qI;gg.isClockSkewError=kg;gg.isNodeJsHttp2TransientError=QI;gg.isRetryableByTrait=WI;gg.isServerError=vg;gg.isThrottlingError=bg;gg.isTransientError=EE});var Ms=D((ya)=>{var oa=hE();ya.RETRY_MODES=void 0;(function(t){t.STANDARD="standard",t.ADAPTIVE="adaptive"})(ya.RETRY_MODES||(ya.RETRY_MODES={}));var Wi=3,ua=ya.RETRY_MODES.STANDARD;class qi{static setTimeoutFn=setTimeout;beta;minCapacity;minFillRate;scaleConstant;smooth;enabled=!1;availableTokens=0;lastMaxRate=0;measuredTxRate=0;requestCount=0;fillRate;lastThrottleTime;lastTimestamp=0;lastTxRateBucket;maxCapacity;timeWindow=0;constructor(t){this.beta=t?.beta??0.7,this.minCapacity=t?.minCapacity??1,this.minFillRate=t?.minFillRate??0.5,this.scaleConstant=t?.scaleConstant??0.4,this.smooth=t?.smooth??0.8,this.lastThrottleTime=this.getCurrentTimeInSeconds(),this.lastTxRateBucket=Math.floor(this.getCurrentTimeInSeconds()),this.fillRate=this.minFillRate,this.maxCapacity=this.minCapacity}async getSendToken(){return this.acquireTokenBucket(1)}updateClientSendingRate(t){let e;this.updateMeasuredRate();let s=t;if(s?.errorType==="THROTTLING"||oa.isThrottlingError(s?.error??t)){let c=!this.enabled?this.measuredTxRate:Math.min(this.measuredTxRate,this.fillRate);this.lastMaxRate=c,this.calculateTimeWindow(),this.lastThrottleTime=this.getCurrentTimeInSeconds(),e=this.cubicThrottle(c),this.enableTokenBucket()}else this.calculateTimeWindow(),e=this.cubicSuccess(this.getCurrentTimeInSeconds());let n=Math.min(e,2*this.measuredTxRate);this.updateTokenBucketRate(n)}getCurrentTimeInSeconds(){return Date.now()/1000}async acquireTokenBucket(t){if(!this.enabled)return;if(this.refillTokenBucket(),t>this.availableTokens){let e=(t-this.availableTokens)/this.fillRate*1000;await new Promise((s)=>qi.setTimeoutFn(s,e))}this.availableTokens=this.availableTokens-t}refillTokenBucket(){let t=this.getCurrentTimeInSeconds();if(!this.lastTimestamp){this.lastTimestamp=t;return}let e=(t-this.lastTimestamp)*this.fillRate;this.availableTokens=Math.min(this.maxCapacity,this.availableTokens+e),this.lastTimestamp=t}calculateTimeWindow(){this.timeWindow=this.getPrecise(Math.pow(this.lastMaxRate*(1-this.beta)/this.scaleConstant,0.3333333333333333))}cubicThrottle(t){return this.getPrecise(t*this.beta)}cubicSuccess(t){return this.getPrecise(this.scaleConstant*Math.pow(t-this.lastThrottleTime-this.timeWindow,3)+this.lastMaxRate)}enableTokenBucket(){this.enabled=!0}updateTokenBucketRate(t){this.refillTokenBucket(),this.fillRate=Math.max(t,this.minFillRate),this.maxCapacity=Math.max(t,this.minCapacity),this.availableTokens=Math.min(this.availableTokens,this.maxCapacity)}updateMeasuredRate(){let t=this.getCurrentTimeInSeconds(),e=Math.floor(t*2)/2;if(this.requestCount++,e>this.lastTxRateBucket){let s=this.requestCount/(e-this.lastTxRateBucket);this.measuredTxRate=this.getPrecise(s*this.smooth+this.measuredTxRate*(1-this.smooth)),this.requestCount=0,this.lastTxRateBucket=e}}getPrecise(t){return parseFloat(t.toFixed(8))}}var ia=100,xE=20000,ma=500,yE=500,wa=5,Sa=10,JI=1,Ea="amz-sdk-invocation-id",ha="amz-sdk-request";class Ft{static v2026=typeof process<"u"&&process.env?.SMITHY_NEW_RETRIES_2026==="true";static delay(){return Ft.v2026?50:100}static throttlingDelay(){return Ft.v2026?1000:500}static cost(){return Ft.v2026?14:5}static throttlingCost(){return Ft.v2026?5:10}static modifiedCostType(){return Ft.v2026?"THROTTLING":"TRANSIENT"}}class HI{x=Ft.delay();computeNextBackoffDelay(t){let e=Math.random(),s=2,r=e*Math.min(this.x*2**t,xE);return Math.floor(r)}setDelayBase(t){this.x=t}}class OE{delay;count;cost;longPoll;constructor(t,e,s,r){this.delay=t,this.count=e,this.cost=s,this.longPoll=r}getRetryCount(){return this.count}getRetryDelay(){return Math.min(xE,this.delay)}getRetryCost(){return this.cost}isLongPoll(){return this.longPoll}}var zi={incompatible:1,attempts:2,capacity:3};class ou{mode=ya.RETRY_MODES.STANDARD;capacity=yE;retryBackoffStrategy;maxAttemptsProvider;baseDelay;constructor(t){if(typeof t==="number")this.maxAttemptsProvider=async()=>t;else if(typeof t==="function")this.maxAttemptsProvider=t;else if(t&&typeof t==="object")this.maxAttemptsProvider=async()=>t.maxAttempts,this.baseDelay=t.baseDelay,this.retryBackoffStrategy=t.backoff;this.maxAttemptsProvider??=async()=>Wi,this.baseDelay??=Ft.delay(),this.retryBackoffStrategy??=new HI}async acquireInitialRetryToken(t){return new OE(Ft.delay(),0,void 0,Ft.v2026&&t.includes(":longpoll"))}async refreshRetryTokenForRetry(t,e){let s=await this.getMaxAttempts(),r=this.retryCode(t,e,s),n=r===0,c=t.isLongPoll?.();if(n||c){let o=e.errorType;this.retryBackoffStrategy.setDelayBase(o==="THROTTLING"?Ft.throttlingDelay():this.baseDelay);let u=this.retryBackoffStrategy.computeNextBackoffDelay(t.getRetryCount()),i=u;if(e.retryAfterHint instanceof Date)i=Math.max(u,Math.min(e.retryAfterHint.getTime()-Date.now(),u+5000));if(!n)throw Object.assign(Error("No retry token available"),{$backoff:Ft.v2026&&r===zi.capacity&&c?i:0});else{let w=this.getCapacityCost(o);return this.capacity-=w,new OE(i,t.getRetryCount()+1,w,t.isLongPoll?.()??!1)}}throw Error("No retry token available")}recordSuccess(t){this.capacity=Math.min(yE,this.capacity+(t.getRetryCost()??JI))}getCapacity(){return this.capacity}async maxAttempts(){return this.maxAttemptsProvider()}async getMaxAttempts(){try{return await this.maxAttemptsProvider()}catch(t){return console.warn(`Max attempts provider could not resolve. Using default of ${Wi}`),Wi}}retryCode(t,e,s){let r=t.getRetryCount()+1,n=this.isRetryableError(e.errorType)?0:zi.incompatible,c=r<s?0:zi.attempts,o=this.capacity>=this.getCapacityCost(e.errorType)?0:zi.capacity;return n||c||o}getCapacityCost(t){return t===Ft.modifiedCostType()?Ft.throttlingCost():Ft.cost()}isRetryableError(t){return t==="THROTTLING"||t==="TRANSIENT"}}class GI{mode=ya.RETRY_MODES.ADAPTIVE;rateLimiter;standardRetryStrategy;constructor(t,e){let{rateLimiter:s}=e??{};this.rateLimiter=s??new qi,this.standardRetryStrategy=e?new ou({maxAttempts:typeof t==="number"?t:3,...e}):new ou(t)}async acquireInitialRetryToken(t){return await this.rateLimiter.getSendToken(),this.standardRetryStrategy.acquireInitialRetryToken(t)}async refreshRetryTokenForRetry(t,e){return this.rateLimiter.updateClientSendingRate(e),this.standardRetryStrategy.refreshRetryTokenForRetry(t,e)}recordSuccess(t){this.rateLimiter.updateClientSendingRate({}),this.standardRetryStrategy.recordSuccess(t)}async maxAttemptsProvider(){return this.standardRetryStrategy.maxAttempts()}}class KI extends ou{computeNextBackoffDelay;constructor(t,e=Ft.delay()){super(typeof t==="function"?t:async()=>t);if(typeof e==="number")this.computeNextBackoffDelay=()=>e;else this.computeNextBackoffDelay=e}async refreshRetryTokenForRetry(t,e){let s=await super.refreshRetryTokenForRetry(t,e);return s.getRetryDelay=()=>this.computeNextBackoffDelay(s.getRetryCount()),s}}ya.AdaptiveRetryStrategy=GI;ya.ConfiguredRetryStrategy=KI;ya.DEFAULT_MAX_ATTEMPTS=Wi;ya.DEFAULT_RETRY_DELAY_BASE=ia;ya.DEFAULT_RETRY_MODE=ua;ya.DefaultRateLimiter=qi;ya.INITIAL_RETRY_TOKENS=yE;ya.INVOCATION_ID_HEADER=Ea;ya.MAXIMUM_RETRY_DELAY=xE;ya.NO_RETRY_INCREMENT=JI;ya.REQUEST_HEADER=ha;ya.RETRY_COST=wa;ya.Retry=Ft;ya.StandardRetryStrategy=ou;ya.THROTTLING_RETRY_DELAY_BASE=ma;ya.TIMEOUT_RETRY_COST=Sa});var ht=D((Xa)=>{var Wa=Ms(),TE={warningEmitted:!1},qa=(t)=>{if(t&&!TE.warningEmitted&&parseInt(t.substring(1,t.indexOf(".")))<20)TE.warningEmitted=!0,process.emitWarning(`NodeDeprecationWarning: The AWS SDK for JavaScript (v3) will
|
|
84
84
|
no longer support Node.js ${t} in January 2026.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var _=import.meta.require;var E="13";function R(h){return{name:"decocms",systemDatabaseUrl:h.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:h.poolSize,runAdminServer:!1,executorID:h.executorID,applicationVersion:E,...h.listenQueues!==void 0?{listenQueues:h.listenQueues}:{}}}function U(h,w={}){let{signal:f}=w;if(f?.aborted)return Promise.reject(f.reason);return new Promise((J,c)=>{let y=()=>{clearTimeout(+d),c(f?.reason)},d=b(()=>{f?.removeEventListener("abort",y),J()},h);f?.addEventListener("abort",y,{once:!0})})}var j=2147483647;function b(h,w){if(w=Math.trunc(Math.max(w,0)||0),w<=j){let y=Number(setTimeout(h,w));return{valueOf:()=>y}}let f=Date.now(),J,c=()=>{let y=w-(Date.now()-f);J=y>j?Number(setTimeout(c,j)):Number(setTimeout(h,y))};return c(),{valueOf:()=>J}}import M from"pg";var q=8314027461559302n,P=600000,g=500;async function G(h,w){let{databaseUrl:f,lockTimeoutMs:J=P}=h,c=h.log??((N)=>console.log(N)),y=new M.Client({connectionString:f});await y.connect();let m=Date.now(),d=!1;try{while(!d){if(d=(await y.query("SELECT pg_try_advisory_lock($1) AS locked",[q.toString()])).rows[0]?.locked===!0,d)break;if(Date.now()-m>=J)throw Error(`Timed out after ${J}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await U(g)}let N=Date.now()-m;if(N>1000)c(`[dbos] waited ${N}ms for the migration lock; another process migrated first`);return await w()}finally{if(d)try{await y.query("SELECT pg_advisory_unlock($1)",[q.toString()])}catch{}await y.end().catch(()=>{})}}import{homedir as A}from"os";var p=new Set(["all","worker","api"]);function u(h){let w=(h??"").trim();return p.has(w)?w:"all"}var I=new Set(["production","development","test"]);function t(h){let w=(h??"").trim();return I.has(w)?w:"development"}function k(h){return h==="true"||h==="1"}function Y(h,w,f){if(w===void 0||w==="")return;let J=Number(w);if(!Number.isSafeInteger(J)||J<=0)throw Error(`${h} must be a positive integer`);if(f!==void 0&&J>f)throw Error(`${h} must be at most ${f}`);return J}function z(h,w,f,J){return Y(h,w,J)??f}function V(h){let w={};for(let f of(h??"").split(",")){let J=f.trim();if(!J)continue;let c=J.indexOf("="),y=c>0?J.slice(0,c).trim():"",m=c>0?J.slice(c+1).trim():"";if(!y||!m){console.warn(`STRIPE_PLAN_PRICE_IDS: ignoring unparseable entry "${J}" \u2014 expected price_xxx=planId`);continue}w[y]=m}return w}function n(h,w,f,J){if(w===void 0||w==="")return f;let c=Number(w);if(!Number.isSafeInteger(c)||c<0)throw Error(`${h} must be a non-negative integer`);if(J!==void 0&&c>J)throw Error(`${h} must be at most ${J}`);return c}function X(h,w){if(h===void 0||h==="")return w;return h==="true"||h==="1"}function l(h){return h===void 0||h===""||h==="true"||h==="1"}function Z(h,w){return h||w}function O(h){let w=h.DATA_DIR||h.DECOCMS_HOME||`${A()}/deco`,f=t(h.NODE_ENV),J=h.VOICE_CONVERSATION_PROVIDER?.trim()||"elevenlabs",c={nodeEnv:f,port:z("PORT",h.PORT,3000,65535),baseUrl:h.BASE_URL,publicUrl:Z(h.STUDIO_PUBLIC_URL,h.MESH_PUBLIC_URL),dataDir:w,voiceConversationProvider:J==="elevenlabs"||J==="openai"?J:null,openaiLiveApiKey:h.OPENAI_LIVE_API_KEY,openaiLiveModel:h.OPENAI_LIVE_MODEL?.trim()||"gpt-live-1",openaiLiveVoice:h.OPENAI_LIVE_VOICE?.trim()||"marin",elevenlabsApiKey:h.ELEVENLABS_API_KEY,elevenlabsVoiceId:h.ELEVENLABS_VOICE_ID||"JBFqnCBsd6RMkjVDRZzb",elevenlabsVoiceModel:h.ELEVENLABS_VOICE_MODEL||"eleven_v4_turbo",elevenlabsConversationModel:h.ELEVENLABS_CONVERSATION_MODEL?.trim()||"gemini-2.5-flash",databaseUrl:h.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",databasePgSsl:k(h.DATABASE_PG_SSL),databasePoolMax:z("DATABASE_POOL_MAX",h.DATABASE_POOL_MAX,5),dbosPoolSize:z("DBOS_POOL_SIZE",h.DBOS_POOL_SIZE,5),betterAuthSecret:h.BETTER_AUTH_SECRET||"",encryptionKey:h.ENCRYPTION_KEY||"",studioJwtSecret:Z(h.STUDIO_JWT_SECRET,h.MESH_JWT_SECRET),localMode:k(h.DECOCMS_LOCAL_MODE),disableRateLimit:k(h.DISABLE_RATE_LIMIT),jiraAllowLocalSiteUrl:k(h.JIRA_ALLOW_LOCAL_SITE_URL),jiraSettleSeconds:z("JIRA_SETTLE_SECONDS",h.JIRA_SETTLE_SECONDS,20,3600),studioProvisionSecretKey:h.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(h.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((y)=>y.trim().toLowerCase()).filter(Boolean),taskBoardAdminOrgIds:(h.STUDIO_ADMIN_ORG_IDS??"").split(",").map((y)=>y.trim()).filter(Boolean),deploymentAdminToken:h.DEPLOYMENT_ADMIN_TOKEN||void 0,clickhouseUrl:h.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:Y("CLICKHOUSE_MAX_MEMORY_USAGE",h.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:h.MONITORING_OTLP_ENDPOINT,otelServiceName:h.OTEL_SERVICE_NAME||"studio",natsUrls:(h.NATS_URL||"nats://localhost:4222").split(",").map((y)=>y.trim()).filter(Boolean),natsCredsPath:h.NATS_CREDS,natsUser:h.NATS_USER||void 0,natsPassword:h.NATS_PASSWORD||void 0,configPath:h.CONFIG_PATH||"./config.json",aiGatewayEnabled:k(h.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:h.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:h.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:h.STRIPE_WEBHOOK_SECRET,stripeSecretKey:h.STRIPE_SECRET_KEY,stripeOrgPriceId:h.STRIPE_ORG_PRICE_ID,stripePlanPriceIds:V(h.STRIPE_PLAN_PRICE_IDS),stripePortalConfigurationId:h.STRIPE_PORTAL_CONFIGURATION_ID,stripeTopupProductId:h.STRIPE_TOPUP_PRODUCT_ID,topupFeePercent:n("STUDIO_TOPUP_FEE_PERCENT",h.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:k(h.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:z("STUDIO_FREE_TASKS",h.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:z("STUDIO_MONTHLY_TASKS",h.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:z("STUDIO_MAX_RUNS_PER_TASK",h.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:k(h.ENABLE_DECO_IMPORT),hostingControlPlaneGa:k(h.HOSTING_CONTROL_PLANE_GA),monitorGa:k(h.MONITOR_GA),plansEnabled:k(h.STUDIO_PLANS_ENABLED),mcpCacheEnabled:X(h.MCP_CACHE_ENABLED,f!=="development"),orgFsPublicSetsJson:h.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:k(h.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:z("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",h.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:z("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",h.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:X(h.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),boardTransitionSettleSeconds:z("BOARD_TRANSITION_SETTLE_SECONDS",h.BOARD_TRANSITION_SETTLE_SECONDS,20,3600),sandboxMaxConcurrentHostedRuns:z("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",h.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:h.S3_ENDPOINT,s3Bucket:h.S3_BUCKET,s3Region:h.S3_REGION||"auto",s3AccessKeyId:h.S3_ACCESS_KEY_ID,s3SecretAccessKey:h.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:l(h.S3_FORCE_PATH_STYLE),monitoringS3Bucket:h.MONITORING_S3_BUCKET,monitoringS3Endpoint:h.MONITORING_S3_ENDPOINT,monitoringS3Region:h.MONITORING_S3_REGION,monitoringS3AccessKeyId:h.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:h.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:h.MONITORING_S3_PREFIX,duckdbExtensionDirectory:h.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:h.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:Y("DUCKDB_THREADS",h.DUCKDB_THREADS),podName:h.POD_NAME||crypto.randomUUID(),dispatchRole:u(Z(h.STUDIO_DISPATCH_ROLE,h.MESH_DISPATCH_ROLE)),agentSandboxEnabled:k(h.STUDIO_AGENT_SANDBOX_ENABLED),sandboxStickyHeadRefEnabled:k(h.SANDBOX_STICKY_HEAD_REF),taskBoardRerunReusesPrBranch:X(h.TASK_BOARD_RERUN_REUSES_PR_BRANCH,!0),sandboxReleaseOnRunEndEnabled:k(h.SANDBOX_RELEASE_ON_RUN_END),sandboxPrewarmOnThreadCreateEnabled:k(h.SANDBOX_PREWARM_ON_THREAD_CREATE),sandboxPersistentHarnessEnabled:k(h.SANDBOX_PERSISTENT_HARNESS),sandboxReleaseGraceMs:z("SANDBOX_RELEASE_GRACE_MS",h.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:h.DECO_SUPABASE_URL,decoSupabaseServiceKey:h.DECO_SUPABASE_SERVICE_KEY,controlplaneRestUrl:h.CONTROLPLANE_REST_URL,controlplaneServiceToken:h.CONTROLPLANE_SERVICE_TOKEN,analyticsDataUrl:h.ANALYTICS_URL,analyticsMasterToken:h.ANALYTICS_MASTER_TOKEN,clickhouseAnalyticsUrl:h.CLICKHOUSE_ANALYTICS_ADDRESS,clickhouseAnalyticsUsername:h.CLICKHOUSE_ANALYTICS_USERNAME||"admin_monitor",clickhouseAnalyticsPassword:h.CLICKHOUSE_ANALYTICS_PASSWORD,oneDollarStatsApiKey:h.ONEDOLLAR_BACKEND_API_KEY,reportsInternalApiUrl:Z(h.REPORTS_INTERNAL_API_URL,h.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:Z(h.REPORTS_INTERNAL_API_KEY,h.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:h.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:h.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:h.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:h.S3_TENANT_PUBLIC_URL_BASE||"https://decoims.com",awsS3TenantRoleArn:h.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:h.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:h.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY};if(Boolean(c.natsUser)!==Boolean(c.natsPassword))throw Error("NATS_USER and NATS_PASSWORD must be set together");if(c.natsCredsPath&&c.natsUser)throw Error("Use either NATS_CREDS or NATS_USER/NATS_PASSWORD");if(c.plansEnabled&&!c.studioJwtSecret)throw Error("STUDIO_PLANS_ENABLED requires an explicit gateway JWT secret. Set STUDIO_JWT_SECRET (or its legacy alias MESH_JWT_SECRET) to the same value as the gateway's MESH_JWT_SECRET. Refusing to fall back to BETTER_AUTH_SECRET: that mismatch 401s every entitlements call, which every feature gate reads as 'no answer' and fails OPEN.");if(c.plansEnabled&&!c.studioProvisionSecretKey)throw Error("STUDIO_PLANS_ENABLED requires STUDIO_PROVISION_SECRET_KEY, set to the same value as the gateway's STUDIO_PROVISION_KEY. Without it the gateway cannot identify this server, falls back to a per-user membership callback that 401s for any user who never completed the gateway OAuth flow, and every feature gate then fails OPEN.");if(c.plansEnabled&&!c.aiGatewayEnabled)throw Error("STUDIO_PLANS_ENABLED requires DECO_AI_GATEWAY_ENABLED=true. Plans are read from the gateway; with it disabled there is no adapter to ask, so every feature gate fails OPEN on both server and client and the paid product is free fleet-wide.");if(c.plansEnabled&&Object.keys(c.stripePlanPriceIds).length>0&&!c.aiGatewayAdminToken)throw Error("STRIPE_PLAN_PRICE_IDS is set but DECO_AI_GATEWAY_ADMIN_TOKEN is not. The Stripe webhook places the paid tier through the gateway's admin API, so without the token a customer is charged and the entitlement "+"is never granted \u2014 and AI_PLAN_SET cannot repair it, it accepts only "+"'free'.");if(c.plansEnabled&&Object.keys(c.stripePlanPriceIds).length>1&&!c.stripePortalConfigurationId)console.warn("STRIPE_PLAN_PRICE_IDS maps more than one plan but STRIPE_PORTAL_CONFIGURATION_ID is unset. An org that already has a subscription cannot change tier: the account's default portal configuration lists only the legacy plans, not the tiers, so Stripe refuses the update flow. First-time checkout is unaffected.");return c}var v=null;function $(){return v??=Object.freeze(O(process.env))}import{Kysely as Pc,PostgresDialect as gc}from"kysely";import{Pool as pc}from"pg";import{createContextKey as wh,metrics as ch,propagation as Aw,ROOT_CONTEXT as pw,SpanStatusCode as uw,trace as fh}from"@opentelemetry/api";import{logs as yh,SeverityNumber as o}from"@opentelemetry/api-logs";import{OTLPLogExporter as Vw}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as Jh}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as vw}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as sw}from"@opentelemetry/instrumentation-runtime-node";import{context as Th,propagation as _h,SpanKind as bh,SpanStatusCode as Mh}from"@opentelemetry/api";var gh=globalThis.fetch;import{ExportResultCode as eh}from"@opentelemetry/core";import{ExportResultCode as D}from"@opentelemetry/core";import{mkdir as r,rename as s,writeFile as e}from"fs/promises";import{join as F}from"path";class Q{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(h){this.basePath=h.basePath,this.flushThreshold=h.flushThreshold??1000,this.maxBufferBytes=h.maxBufferBytes??10485760,this.partitionKey=h.partitionKey;let w=h.flushIntervalMs??60000;if(w>0&&w<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((f)=>{console.error("[NDJSONExporter] Timer flush failed:",f)})},w),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(h){if(this.isShutdown)return Promise.resolve({code:D.FAILED});for(let w of h){let f=JSON.stringify(w),J=this.partitionKey?this.partitionKey(w):"";this.bufferItems.push({partition:J,json:f}),this.bufferBytes+=Buffer.byteLength(f,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:D.SUCCESS})).catch((w)=>{return console.error("[NDJSONExporter] Flush failed:",w),{code:D.FAILED}});return Promise.resolve({code:D.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let w=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=w,w}async doFlush(){if(this.bufferItems.length===0)return;let h=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let w=new Map;for(let c of h){let y=w.get(c.partition);if(!y)y=[],w.set(c.partition,y);y.push(c.json)}let f=await Promise.allSettled(Array.from(w.entries()).map(([c,y])=>this.writeNDJSON(y,c).then(()=>c))),J=f.find((c)=>c.status==="rejected");if(J){let c=new Set;for(let m of f)if(m.status==="fulfilled")c.add(m.value);let y=h.filter((m)=>!c.has(m.partition));this.bufferItems=y.concat(this.bufferItems),this.bufferBytes=0;for(let m of this.bufferItems)this.bufferBytes+=Buffer.byteLength(m.json,"utf8")+1;throw J.reason}}async writeNDJSON(h,w){let f=new Date,J=[String(f.getUTCFullYear()),String(f.getUTCMonth()+1).padStart(2,"0"),String(f.getUTCDate()).padStart(2,"0"),String(f.getUTCHours()).padStart(2,"0")],c=w?F(this.basePath,w,...J):F(this.basePath,...J);if(!this.knownDirs.has(c))await r(c,{recursive:!0,mode:448}),this.knownDirs.add(c);let y=`${crypto.randomUUID()}.ndjson`,m=F(c,`.${y}.tmp`),d=F(c,y),N=h.join(`
|
|
2
|
+
var _=import.meta.require;var E="13";function R(h){return{name:"decocms",systemDatabaseUrl:h.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:h.poolSize,runAdminServer:!1,executorID:h.executorID,applicationVersion:E,...h.listenQueues!==void 0?{listenQueues:h.listenQueues}:{}}}function U(h,w={}){let{signal:f}=w;if(f?.aborted)return Promise.reject(f.reason);return new Promise((J,c)=>{let y=()=>{clearTimeout(+d),c(f?.reason)},d=b(()=>{f?.removeEventListener("abort",y),J()},h);f?.addEventListener("abort",y,{once:!0})})}var j=2147483647;function b(h,w){if(w=Math.trunc(Math.max(w,0)||0),w<=j){let y=Number(setTimeout(h,w));return{valueOf:()=>y}}let f=Date.now(),J,c=()=>{let y=w-(Date.now()-f);J=y>j?Number(setTimeout(c,j)):Number(setTimeout(h,y))};return c(),{valueOf:()=>J}}import M from"pg";var q=8314027461559302n,P=600000,g=500;async function G(h,w){let{databaseUrl:f,lockTimeoutMs:J=P}=h,c=h.log??((N)=>console.log(N)),y=new M.Client({connectionString:f});await y.connect();let m=Date.now(),d=!1;try{while(!d){if(d=(await y.query("SELECT pg_try_advisory_lock($1) AS locked",[q.toString()])).rows[0]?.locked===!0,d)break;if(Date.now()-m>=J)throw Error(`Timed out after ${J}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await U(g)}let N=Date.now()-m;if(N>1000)c(`[dbos] waited ${N}ms for the migration lock; another process migrated first`);return await w()}finally{if(d)try{await y.query("SELECT pg_advisory_unlock($1)",[q.toString()])}catch{}await y.end().catch(()=>{})}}import{homedir as A}from"os";var p=new Set(["all","worker","api"]);function u(h){let w=(h??"").trim();return p.has(w)?w:"all"}var I=new Set(["production","development","test"]);function t(h){let w=(h??"").trim();return I.has(w)?w:"development"}function k(h){return h==="true"||h==="1"}function Y(h,w,f){if(w===void 0||w==="")return;let J=Number(w);if(!Number.isSafeInteger(J)||J<=0)throw Error(`${h} must be a positive integer`);if(f!==void 0&&J>f)throw Error(`${h} must be at most ${f}`);return J}function z(h,w,f,J){return Y(h,w,J)??f}function l(h){let w={};for(let f of(h??"").split(",")){let J=f.trim();if(!J)continue;let c=J.indexOf("="),y=c>0?J.slice(0,c).trim():"",m=c>0?J.slice(c+1).trim():"";if(!y||!m){console.warn(`STRIPE_PLAN_PRICE_IDS: ignoring unparseable entry "${J}" \u2014 expected price_xxx=planId`);continue}w[y]=m}return w}function V(h,w,f,J){if(w===void 0||w==="")return f;let c=Number(w);if(!Number.isSafeInteger(c)||c<0)throw Error(`${h} must be a non-negative integer`);if(J!==void 0&&c>J)throw Error(`${h} must be at most ${J}`);return c}function X(h,w){if(h===void 0||h==="")return w;return h==="true"||h==="1"}function n(h){return h===void 0||h===""||h==="true"||h==="1"}function Z(h,w){return h||w}function O(h){let w=h.DATA_DIR||h.DECOCMS_HOME||`${A()}/deco`,f=t(h.NODE_ENV),J=h.VOICE_CONVERSATION_PROVIDER?.trim()||"elevenlabs",c={nodeEnv:f,port:z("PORT",h.PORT,3000,65535),baseUrl:h.BASE_URL,publicUrl:Z(h.STUDIO_PUBLIC_URL,h.MESH_PUBLIC_URL),dataDir:w,voiceConversationProvider:J==="elevenlabs"||J==="openai"?J:null,openaiLiveApiKey:h.OPENAI_LIVE_API_KEY,openaiLiveModel:h.OPENAI_LIVE_MODEL?.trim()||"gpt-live-1",openaiLiveVoice:h.OPENAI_LIVE_VOICE?.trim()||"marin",elevenlabsApiKey:h.ELEVENLABS_API_KEY,elevenlabsVoiceId:h.ELEVENLABS_VOICE_ID||"JBFqnCBsd6RMkjVDRZzb",elevenlabsVoiceModel:h.ELEVENLABS_VOICE_MODEL||"eleven_v4_turbo",elevenlabsConversationModel:h.ELEVENLABS_CONVERSATION_MODEL?.trim()||"gemini-2.5-flash",databaseUrl:h.DATABASE_URL||"postgresql://postgres:postgres@localhost:5432/postgres",databasePgSsl:k(h.DATABASE_PG_SSL),databasePoolMax:z("DATABASE_POOL_MAX",h.DATABASE_POOL_MAX,5),dbosPoolSize:z("DBOS_POOL_SIZE",h.DBOS_POOL_SIZE,5),betterAuthSecret:h.BETTER_AUTH_SECRET||"",encryptionKey:h.ENCRYPTION_KEY||"",studioJwtSecret:Z(h.STUDIO_JWT_SECRET,h.MESH_JWT_SECRET),localMode:k(h.DECOCMS_LOCAL_MODE),disableRateLimit:k(h.DISABLE_RATE_LIMIT),jiraAllowLocalSiteUrl:k(h.JIRA_ALLOW_LOCAL_SITE_URL),jiraSettleSeconds:z("JIRA_SETTLE_SECONDS",h.JIRA_SETTLE_SECONDS,20,3600),studioProvisionSecretKey:h.STUDIO_PROVISION_SECRET_KEY,deploymentAdminEmails:(h.DEPLOYMENT_ADMIN_EMAILS??"").split(",").map((y)=>y.trim().toLowerCase()).filter(Boolean),taskBoardAdminOrgIds:(h.STUDIO_ADMIN_ORG_IDS??"").split(",").map((y)=>y.trim()).filter(Boolean),deploymentAdminToken:h.DEPLOYMENT_ADMIN_TOKEN||void 0,clickhouseUrl:h.CLICKHOUSE_URL,clickhouseMaxMemoryUsage:Y("CLICKHOUSE_MAX_MEMORY_USAGE",h.CLICKHOUSE_MAX_MEMORY_USAGE),monitoringOtlpEndpoint:h.MONITORING_OTLP_ENDPOINT,otelServiceName:h.OTEL_SERVICE_NAME||"studio",natsUrls:(h.NATS_URL||"nats://localhost:4222").split(",").map((y)=>y.trim()).filter(Boolean),natsCredsPath:h.NATS_CREDS,natsUser:h.NATS_USER||void 0,natsPassword:h.NATS_PASSWORD||void 0,configPath:h.CONFIG_PATH||"./config.json",aiGatewayEnabled:k(h.DECO_AI_GATEWAY_ENABLED),aiGatewayUrl:h.DECO_AI_GATEWAY_URL||"https://ai-site.deco.site",aiGatewayAdminToken:h.DECO_AI_GATEWAY_ADMIN_TOKEN,stripeWebhookSecret:h.STRIPE_WEBHOOK_SECRET,stripeSecretKey:h.STRIPE_SECRET_KEY,stripeOrgPriceId:h.STRIPE_ORG_PRICE_ID,stripePlanPriceIds:l(h.STRIPE_PLAN_PRICE_IDS),stripePortalConfigurationId:h.STRIPE_PORTAL_CONFIGURATION_ID,stripeTopupProductId:h.STRIPE_TOPUP_PRODUCT_ID,topupFeePercent:V("STUDIO_TOPUP_FEE_PERCENT",h.STUDIO_TOPUP_FEE_PERCENT,15,100),taskQuotaEnforced:k(h.STUDIO_TASK_QUOTA_ENFORCED),freeTaskExecutions:z("STUDIO_FREE_TASKS",h.STUDIO_FREE_TASKS,3),monthlyTaskExecutions:z("STUDIO_MONTHLY_TASKS",h.STUDIO_MONTHLY_TASKS,10),maxRunsPerTask:z("STUDIO_MAX_RUNS_PER_TASK",h.STUDIO_MAX_RUNS_PER_TASK,5),enableDecoImport:k(h.ENABLE_DECO_IMPORT),hostingControlPlaneGa:k(h.HOSTING_CONTROL_PLANE_GA),monitorGa:k(h.MONITOR_GA),plansEnabled:k(h.STUDIO_PLANS_ENABLED),mcpCacheEnabled:X(h.MCP_CACHE_ENABLED,f!=="development"),orgFsPublicSetsJson:h.ORGFS_PUBLIC_SETS,orgFsMountsDisabled:k(h.DISABLE_ORGFS_MOUNTS),decopilotMaxConcurrentSubagents:z("DECOPILOT_MAX_CONCURRENT_SUBAGENTS",h.DECOPILOT_MAX_CONCURRENT_SUBAGENTS,4),decopilotMaxConcurrentHostedRuns:z("DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS",h.DECOPILOT_MAX_CONCURRENT_HOSTED_RUNS,3),taskBoardReviewSweeperEnabled:X(h.TASK_BOARD_REVIEW_SWEEPER_ENABLED,!0),boardTransitionSettleSeconds:z("BOARD_TRANSITION_SETTLE_SECONDS",h.BOARD_TRANSITION_SETTLE_SECONDS,20,3600),sandboxMaxConcurrentHostedRuns:z("SANDBOX_MAX_CONCURRENT_HOSTED_RUNS",h.SANDBOX_MAX_CONCURRENT_HOSTED_RUNS,12),s3Endpoint:h.S3_ENDPOINT,s3Bucket:h.S3_BUCKET,s3Region:h.S3_REGION||"auto",s3AccessKeyId:h.S3_ACCESS_KEY_ID,s3SecretAccessKey:h.S3_SECRET_ACCESS_KEY,s3ForcePathStyle:n(h.S3_FORCE_PATH_STYLE),monitoringS3Bucket:h.MONITORING_S3_BUCKET,monitoringS3Endpoint:h.MONITORING_S3_ENDPOINT,monitoringS3Region:h.MONITORING_S3_REGION,monitoringS3AccessKeyId:h.MONITORING_S3_ACCESS_KEY_ID,monitoringS3SecretAccessKey:h.MONITORING_S3_SECRET_ACCESS_KEY,monitoringS3Prefix:h.MONITORING_S3_PREFIX,duckdbExtensionDirectory:h.DUCKDB_EXTENSION_DIRECTORY||"/opt/duckdb/extensions",duckdbMemoryLimit:h.DUCKDB_MEMORY_LIMIT||void 0,duckdbThreads:Y("DUCKDB_THREADS",h.DUCKDB_THREADS),podName:h.POD_NAME||crypto.randomUUID(),dispatchRole:u(Z(h.STUDIO_DISPATCH_ROLE,h.MESH_DISPATCH_ROLE)),agentSandboxEnabled:k(h.STUDIO_AGENT_SANDBOX_ENABLED),sandboxStickyHeadRefEnabled:k(h.SANDBOX_STICKY_HEAD_REF),taskBoardRerunReusesPrBranch:X(h.TASK_BOARD_RERUN_REUSES_PR_BRANCH,!0),sandboxReleaseOnRunEndEnabled:k(h.SANDBOX_RELEASE_ON_RUN_END),sandboxPrewarmOnThreadCreateEnabled:k(h.SANDBOX_PREWARM_ON_THREAD_CREATE),sandboxPersistentHarnessEnabled:k(h.SANDBOX_PERSISTENT_HARNESS),sandboxReleaseGraceMs:z("SANDBOX_RELEASE_GRACE_MS",h.SANDBOX_RELEASE_GRACE_MS,120000),decoSupabaseUrl:h.DECO_SUPABASE_URL,decoSupabaseServiceKey:h.DECO_SUPABASE_SERVICE_KEY,controlplaneRestUrl:h.CONTROLPLANE_REST_URL,controlplaneServiceToken:h.CONTROLPLANE_SERVICE_TOKEN,analyticsDataUrl:h.ANALYTICS_URL,analyticsMasterToken:h.ANALYTICS_MASTER_TOKEN,clickhouseAnalyticsUrl:h.CLICKHOUSE_ANALYTICS_ADDRESS,clickhouseAnalyticsUsername:h.CLICKHOUSE_ANALYTICS_USERNAME||"admin_monitor",clickhouseAnalyticsPassword:h.CLICKHOUSE_ANALYTICS_PASSWORD,oneDollarStatsApiKey:h.ONEDOLLAR_BACKEND_API_KEY,reportsInternalApiUrl:Z(h.REPORTS_INTERNAL_API_URL,h.COMMERCE_DISCOVERY_INTERNAL_API_URL),reportsInternalApiKey:Z(h.REPORTS_INTERNAL_API_KEY,h.COMMERCE_DISCOVERY_INTERNAL_API_KEY),s3TenantBucket:h.S3_TENANT_BUCKET||"new-deco-sites-assets",s3TenantRegion:h.S3_TENANT_REGION||"us-west-2",s3TenantEndpoint:h.S3_TENANT_ENDPOINT,s3TenantPublicUrlBase:h.S3_TENANT_PUBLIC_URL_BASE||"https://assets.decocms.com",awsS3TenantRoleArn:h.AWS_S3_TENANT_ROLE_ARN,awsS3TenantProvisionerAccessKeyId:h.AWS_S3_TENANT_PROVISIONER_ACCESS_KEY_ID,awsS3TenantProvisionerSecretAccessKey:h.AWS_S3_TENANT_PROVISIONER_SECRET_ACCESS_KEY,deliveryR2AccountId:h.DELIVERY_R2_ACCOUNT_ID,deliveryR2AccessKeyId:h.DELIVERY_R2_ACCESS_KEY_ID,deliveryR2SecretAccessKey:h.DELIVERY_R2_SECRET_ACCESS_KEY,deliveryR2Bucket:h.DELIVERY_R2_BUCKET,deliveryR2Endpoint:h.DELIVERY_R2_ENDPOINT,deliveryPublicOrigin:h.DELIVERY_PUBLIC_ORIGIN,siteTokenSigningKey:h.DECO_SITE_TOKEN_SIGNING_KEY,cfDeliveryZoneId:h.CF_DELIVERY_ZONE_ID,cfPurgeApiToken:h.CF_PURGE_API_TOKEN};if(Boolean(c.natsUser)!==Boolean(c.natsPassword))throw Error("NATS_USER and NATS_PASSWORD must be set together");if(c.natsCredsPath&&c.natsUser)throw Error("Use either NATS_CREDS or NATS_USER/NATS_PASSWORD");if(c.plansEnabled&&!c.studioJwtSecret)throw Error("STUDIO_PLANS_ENABLED requires an explicit gateway JWT secret. Set STUDIO_JWT_SECRET (or its legacy alias MESH_JWT_SECRET) to the same value as the gateway's MESH_JWT_SECRET. Refusing to fall back to BETTER_AUTH_SECRET: that mismatch 401s every entitlements call, which every feature gate reads as 'no answer' and fails OPEN.");if(c.plansEnabled&&!c.studioProvisionSecretKey)throw Error("STUDIO_PLANS_ENABLED requires STUDIO_PROVISION_SECRET_KEY, set to the same value as the gateway's STUDIO_PROVISION_KEY. Without it the gateway cannot identify this server, falls back to a per-user membership callback that 401s for any user who never completed the gateway OAuth flow, and every feature gate then fails OPEN.");if(c.plansEnabled&&!c.aiGatewayEnabled)throw Error("STUDIO_PLANS_ENABLED requires DECO_AI_GATEWAY_ENABLED=true. Plans are read from the gateway; with it disabled there is no adapter to ask, so every feature gate fails OPEN on both server and client and the paid product is free fleet-wide.");if(c.plansEnabled&&Object.keys(c.stripePlanPriceIds).length>0&&!c.aiGatewayAdminToken)throw Error("STRIPE_PLAN_PRICE_IDS is set but DECO_AI_GATEWAY_ADMIN_TOKEN is not. The Stripe webhook places the paid tier through the gateway's admin API, so without the token a customer is charged and the entitlement "+"is never granted \u2014 and AI_PLAN_SET cannot repair it, it accepts only "+"'free'.");if(c.plansEnabled&&Object.keys(c.stripePlanPriceIds).length>1&&!c.stripePortalConfigurationId)console.warn("STRIPE_PLAN_PRICE_IDS maps more than one plan but STRIPE_PORTAL_CONFIGURATION_ID is unset. An org that already has a subscription cannot change tier: the account's default portal configuration lists only the legacy plans, not the tiers, so Stripe refuses the update flow. First-time checkout is unaffected.");return c}var v=null;function $(){return v??=Object.freeze(O(process.env))}import{Kysely as Pc,PostgresDialect as gc}from"kysely";import{Pool as pc}from"pg";import{createContextKey as wh,metrics as ch,propagation as Aw,ROOT_CONTEXT as pw,SpanStatusCode as uw,trace as fh}from"@opentelemetry/api";import{logs as yh,SeverityNumber as o}from"@opentelemetry/api-logs";import{OTLPLogExporter as lw}from"@opentelemetry/exporter-logs-otlp-proto";import{PrometheusExporter as Jh}from"@opentelemetry/exporter-prometheus";import{OTLPTraceExporter as vw}from"@opentelemetry/exporter-trace-otlp-proto";import{RuntimeNodeInstrumentation as sw}from"@opentelemetry/instrumentation-runtime-node";import{context as Th,propagation as _h,SpanKind as bh,SpanStatusCode as Mh}from"@opentelemetry/api";var gh=globalThis.fetch;import{ExportResultCode as eh}from"@opentelemetry/core";import{ExportResultCode as D}from"@opentelemetry/core";import{mkdir as r,rename as s,writeFile as e}from"fs/promises";import{join as F}from"path";class Q{bufferItems=[];bufferBytes=0;flushTimer=null;flushQueue=Promise.resolve();basePath;flushThreshold;maxBufferBytes;isShutdown=!1;knownDirs=new Set;partitionKey;constructor(h){this.basePath=h.basePath,this.flushThreshold=h.flushThreshold??1000,this.maxBufferBytes=h.maxBufferBytes??10485760,this.partitionKey=h.partitionKey;let w=h.flushIntervalMs??60000;if(w>0&&w<3600000){if(this.flushTimer=setInterval(()=>{this.flush().catch((f)=>{console.error("[NDJSONExporter] Timer flush failed:",f)})},w),this.flushTimer&&typeof this.flushTimer==="object"&&"unref"in this.flushTimer)this.flushTimer.unref()}}exportRows(h){if(this.isShutdown)return Promise.resolve({code:D.FAILED});for(let w of h){let f=JSON.stringify(w),J=this.partitionKey?this.partitionKey(w):"";this.bufferItems.push({partition:J,json:f}),this.bufferBytes+=Buffer.byteLength(f,"utf8")+1}if(this.bufferItems.length>=this.flushThreshold||this.bufferBytes>=this.maxBufferBytes)return this.flush().then(()=>({code:D.SUCCESS})).catch((w)=>{return console.error("[NDJSONExporter] Flush failed:",w),{code:D.FAILED}});return Promise.resolve({code:D.SUCCESS})}async shutdown(){if(this.isShutdown=!0,this.flushTimer)clearInterval(this.flushTimer),this.flushTimer=null;try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}async forceFlush(){try{await this.flushQueue}catch{}if(this.bufferItems.length>0)await this.flush()}flush(){let w=this.flushQueue.catch(()=>{}).then(()=>this.doFlush());return this.flushQueue=w,w}async doFlush(){if(this.bufferItems.length===0)return;let h=this.bufferItems;this.bufferItems=[],this.bufferBytes=0;let w=new Map;for(let c of h){let y=w.get(c.partition);if(!y)y=[],w.set(c.partition,y);y.push(c.json)}let f=await Promise.allSettled(Array.from(w.entries()).map(([c,y])=>this.writeNDJSON(y,c).then(()=>c))),J=f.find((c)=>c.status==="rejected");if(J){let c=new Set;for(let m of f)if(m.status==="fulfilled")c.add(m.value);let y=h.filter((m)=>!c.has(m.partition));this.bufferItems=y.concat(this.bufferItems),this.bufferBytes=0;for(let m of this.bufferItems)this.bufferBytes+=Buffer.byteLength(m.json,"utf8")+1;throw J.reason}}async writeNDJSON(h,w){let f=new Date,J=[String(f.getUTCFullYear()),String(f.getUTCMonth()+1).padStart(2,"0"),String(f.getUTCDate()).padStart(2,"0"),String(f.getUTCHours()).padStart(2,"0")],c=w?F(this.basePath,w,...J):F(this.basePath,...J);if(!this.knownDirs.has(c))await r(c,{recursive:!0,mode:448}),this.knownDirs.add(c);let y=`${crypto.randomUUID()}.ndjson`,m=F(c,`.${y}.tmp`),d=F(c,y),N=h.join(`
|
|
3
3
|
`)+`
|
|
4
4
|
`;await e(m,N,{mode:384}),await s(m,d)}}import{ExportResultCode as fw}from"@opentelemetry/core";import{AggregationTemporality as Jw,DataPointType as mw}from"@opentelemetry/sdk-metrics";import{ExportResultCode as Zw}from"@opentelemetry/core";var Qw=Buffer.byteLength("... [TRUNCATED]","utf8");import{BatchLogRecordProcessor as mc,LoggerProvider as dc}from"@opentelemetry/sdk-logs";import{detectResources as zc,envDetector as Nc,hostDetector as Wc,osDetector as Zc,processDetector as $c,resourceFromAttributes as Dc}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as Qc}from"@opentelemetry/sdk-metrics";import{NOOP_LOGGER as Xw}from"@opentelemetry/api-logs";import{NodeSDK as Xc}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as Kc,SamplingDecision as W}from"@opentelemetry/sdk-trace-base";import{SpanStatusCode as Bw}from"@opentelemetry/api";var mh="__d",dh=wh("Current request"),kh=1;var S=(h)=>{let f=new URL(h.url).searchParams.get(mh);if(f==="")return crypto.randomUUID();if(!f)f=h.headers.get("x-trace-debug-id");return f};class i{inner;constructor(h){this.inner=h}shouldSample(h,w,f,J,c,y){let m=h.getValue(dh);if(!m){if(this.inner)return this.inner.shouldSample(h,w,f,J,c,y);return{decision:W.RECORD_AND_SAMPLED}}let d=S(m);if(d)return{decision:W.RECORD_AND_SAMPLED,attributes:{"trace.debug.id":d}};if(this.inner){let N=this.inner.shouldSample(h,w,f,J,c,y);if(N.decision===W.RECORD_AND_SAMPLED){let C=crypto.randomUUID();N.attributes={...N.attributes??{},"trace.debug.id":C}}return N}return{decision:W.NOT_RECORD}}toString(){return"DebugSampler"}}class T{ratio;constructor(h){this.ratio=h}shouldSample(){if(Math.random()<this.ratio)return{decision:W.RECORD_AND_SAMPLED};return{decision:W.NOT_RECORD}}toString(){return`RatioSampler(${this.ratio})`}}var xc=new Jh({preventServerStart:!0}),Bc=new i(new T(kh));var L=fh.getTracer("studio","1.0.0"),K=ch.getMeter("studio","1.0.0"),zh=yh.getLogger("studio","1.0.0"),x=(h,w,f)=>{let J={},c=f,y=f[f.length-1];if(y!==null&&typeof y==="object"&&!Array.isArray(y)&&!(y instanceof Error)&&Object.getPrototypeOf(y)===Object.prototype)J=y,c=f.slice(0,-1);let m=c.map((d)=>{if(d instanceof Error)return`${d.name}: ${d.message}`;if(typeof d==="object")try{return JSON.stringify(d)}catch{return"[Object]"}return String(d)}).join(" ");zh.emit({severityNumber:h,severityText:w,body:m,attributes:{"log.source":"console",...J}})},B={error:console.error.bind(console),warn:console.warn.bind(console),debug:console.debug.bind(console)};console.error=(...h)=>{x(o.ERROR,"ERROR",h),B.error(...h)};console.warn=(...h)=>{x(o.WARN,"WARN",h),B.warn(...h)};console.debug=(...h)=>{x(o.DEBUG,"DEBUG",h),B.debug(...h)};function H(h,w){if(!w)return h;let f=new URL(h);if(!f.searchParams.has("sslmode"))f.searchParams.set("sslmode","verify-full");return f.toString()}async function Nh(){let h=$(),{DBOS:w}=await import("@dbos-inc/dbos-sdk");w.setConfig(R({systemDatabaseUrl:H(h.databaseUrl,h.databasePgSsl),poolSize:h.dbosPoolSize,executorID:h.podName,listenQueues:[]})),await G({databaseUrl:H(h.databaseUrl,h.databasePgSsl)},async()=>{await w.launch(),await w.shutdown()})}if(import.meta.main)(async()=>{try{await Nh(),console.log("DBOS system-schema migrations completed."),process.exit(0)}catch(h){console.error("DBOS system-schema migration failed:",h),process.exit(1)}})();export{Nh as migrateDbos};
|