decocms 4.417.4 → 4.417.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-D-RDeHL_.js → AlertCircle-BTsuLwP6.js} +1 -1
- package/dist/client/assets/{AreaChart-Du9fIZyN.js → AreaChart-DKu8CubV.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DVpME15-.js → ArrowLeft-DGzzr8x9.js} +1 -1
- package/dist/client/assets/{ArrowRight-CSNzIA9B.js → ArrowRight-Dl2v_8d5.js} +1 -1
- package/dist/client/assets/{ArrowUp-BzLrItni.js → ArrowUp-By3k3jWG.js} +1 -1
- package/dist/client/assets/{CartesianChart-CWzZG7vp.js → CartesianChart-v1kR2jmL.js} +1 -1
- package/dist/client/assets/{Check-w1vYw5Rn.js → Check-DwW1N07y.js} +1 -1
- package/dist/client/assets/{CheckCircle-Do4HhdGQ.js → CheckCircle-qeiQ8-HP.js} +1 -1
- package/dist/client/assets/{ChevronUp-BWOObG8Z.js → ChevronUp-DZpr5n7U.js} +1 -1
- package/dist/client/assets/{Copy01-uPL40TdR.js → Copy01-DKuB4N5P.js} +1 -1
- package/dist/client/assets/{CreditCard01-DaYOLDOz.js → CreditCard01-DZYNdkIx.js} +1 -1
- package/dist/client/assets/{DotsVertical-vTwE8lBm.js → DotsVertical-DOrvBGTZ.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-DtWLLN0s.js → ErrorBarContext-DmHUMiF6.js} +1 -1
- package/dist/client/assets/{Image01-BObY5rn9.js → Image01-CGZJJhMz.js} +1 -1
- package/dist/client/assets/{Key01-nM1-kqhR.js → Key01-BuNIcjUo.js} +1 -1
- package/dist/client/assets/{Line-ByBYLmfl.js → Line-CwkjG7A0.js} +1 -1
- package/dist/client/assets/{Link01-BS-vCNzQ.js → Link01-DDXPWbHG.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DNLGj9_-.js → LinkExternal01-DtufCa9V.js} +1 -1
- package/dist/client/assets/{Monitor01-Csp3CK4O.js → Monitor01-Cf4vDeJz.js} +1 -1
- package/dist/client/assets/{Palette-tJixmc7V.js → Palette-Dt408Bw-.js} +1 -1
- package/dist/client/assets/{Plus-BvjmhLnx.js → Plus-BAPqh8Dc.js} +1 -1
- package/dist/client/assets/{SearchMd-Btx9xhJc.js → SearchMd-BijYU8F2.js} +1 -1
- package/dist/client/assets/{Sector-BuEtMqWH.js → Sector-DDkKH3q_.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-DQq21IAe.js → ShoppingBag01-BAfU_RaG.js} +1 -1
- package/dist/client/assets/{Sun-BxhQc-kG.js → Sun-eG60Nvt5.js} +1 -1
- package/dist/client/assets/{Tool01-Booc4u0n.js → Tool01-DHqyhqw3.js} +1 -1
- package/dist/client/assets/{Trash01-D0KW49wY.js → Trash01-CfZM8GOt.js} +1 -1
- package/dist/client/assets/{Upload01-B58Org46.js → Upload01-CPR4XZ0W.js} +1 -1
- package/dist/client/assets/{User01-BMX3cjtL.js → User01-CAgei7Hi.js} +1 -1
- package/dist/client/assets/{UserSquare-CaMR-kX2.js → UserSquare-CtS19G8a.js} +1 -1
- package/dist/client/assets/{Users01-Cpn2NFdA.js → Users01-3GyH14E9.js} +1 -1
- package/dist/client/assets/{X-GZ5ISsIL.js → X-oOeqmdV1.js} +1 -1
- package/dist/client/assets/{XAxis-ClV1N0er.js → XAxis-DpDm-1ur.js} +1 -1
- package/dist/client/assets/{XClose-uQDj2qbC.js → XClose-D3fWIqtG.js} +1 -1
- package/dist/client/assets/{ZoomOut-DRn8fB1h.js → ZoomOut-DJEgC7Sb.js} +1 -1
- package/dist/client/assets/{access-gate-BYsqfzIM.js → access-gate-BgL259Tv.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-CRBSt35d.js → add-connection-dialog-BxLMwKcG.js} +1 -1
- package/dist/client/assets/{agent-analytics-DaefJyfz.js → agent-analytics-CMV2ynyC.js} +1 -1
- package/dist/client/assets/agent-app-nfSdY_OQ.js +1 -0
- package/dist/client/assets/{agent-assets-CueXx4F5.js → agent-assets-Ci6MVLf6.js} +1 -1
- package/dist/client/assets/{agent-automation-DkBdrrfU.js → agent-automation-BxBwe0K6.js} +1 -1
- package/dist/client/assets/{agent-automations-C6RRWwz6.js → agent-automations-CcFs_YNk.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-DhDB3N4T.js → agent-connect-sources-D4V48rR7.js} +1 -1
- package/dist/client/assets/agent-deck-BN2gwtOC.js +1 -0
- package/dist/client/assets/{agent-e2e-Dp4u7w2g.js → agent-e2e-BxTZlOFK.js} +1 -1
- package/dist/client/assets/{agent-experiments-DRMTNA2U.js → agent-experiments-CGISH7ir.js} +1 -1
- package/dist/client/assets/{agent-file-CT66eS5w.js → agent-file-BYI3KS2Z.js} +1 -1
- package/dist/client/assets/{agent-git-nSsJj1u6.js → agent-git-D3s49It2.js} +1 -1
- package/dist/client/assets/{agent-hosting-B6fNoXpD.js → agent-hosting-CA4xxoI_.js} +1 -1
- package/dist/client/assets/{agent-icon-DEau6pQP.js → agent-icon-B4pV7MHc.js} +1 -1
- package/dist/client/assets/agent-library-Bt56lxIs.js +1 -0
- package/dist/client/assets/agent-library-file-BuqghMai.js +1 -0
- package/dist/client/assets/{agent-monitor-BDRaIywC.js → agent-monitor-BusUyNzq.js} +1 -1
- package/dist/client/assets/{agent-overview-DFVO6q9A.js → agent-overview-BPL08YgO.js} +1 -1
- package/dist/client/assets/agent-settings-B-YuL73d.js +1 -0
- package/dist/client/assets/{agent-site-editor-BMW5L6IV.js → agent-site-editor-CHGryZAT.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-BqY7geaP.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-CSCyfyeX.js → agent-site-editor-content-Do8tTZlI.js} +3 -3
- package/dist/client/assets/{agent-site-editor-preview-DKOg_i1D.js → agent-site-editor-preview-gbQPj7GB.js} +3 -3
- package/dist/client/assets/{agent-view-guard-BIe92p9j.js → agent-view-guard-CSQfcvP5.js} +1 -1
- package/dist/client/assets/agent-view-nMpkh94x.js +1 -0
- package/dist/client/assets/{agents-list-CSqqNnUO.js → agents-list-CwhTzPGo.js} +1 -1
- package/dist/client/assets/{ai-providers-BFQ1D-GY.js → ai-providers-CHDm09s4.js} +1 -1
- package/dist/client/assets/{alert-RMwgFEjl.js → alert-9YmMwHFW.js} +1 -1
- package/dist/client/assets/{alert-dialog-CfArYE_c.js → alert-dialog-DC9yPqHA.js} +1 -1
- package/dist/client/assets/{analytics-sections-D-1nlDAW.js → analytics-sections-C5H0hGFs.js} +1 -1
- package/dist/client/assets/api-keys-CLZdLIyR.js +1 -0
- package/dist/client/assets/{api-keys-Bhmt-cmg.js → api-keys-wPdoRhJ6.js} +1 -1
- package/dist/client/assets/app-editor-C0hkimvD.js +1 -0
- package/dist/client/assets/{asset-utils-Bqr4qIJe.js → asset-utils-CTWmQh42.js} +1 -1
- package/dist/client/assets/{auth-CQNA1z0f.js → auth-CLy55jd3.js} +1 -1
- package/dist/client/assets/{auth-catchall-BxFOppl4.js → auth-catchall-D4kuDrLS.js} +1 -1
- package/dist/client/assets/{auth-entry-Bbaisicp.js → auth-entry-BwrbPh7N.js} +1 -1
- package/dist/client/assets/{auth-split-layout-49oocHo-.js → auth-split-layout-BxQ_8jTZ.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-BJFQcd7o.js → authenticate-and-persist-oauth-B8pM2pEE.js} +1 -1
- package/dist/client/assets/{automation-list-row-C0famSR9.js → automation-list-row-BYD2EpM9.js} +1 -1
- package/dist/client/assets/{automation-runs-BPy4kIqD.js → automation-runs-CwWBLxCL.js} +1 -1
- package/dist/client/assets/{automations-BFP3Ke2a.js → automations-CD9ugEPb.js} +1 -1
- package/dist/client/assets/{autosend-CbvWggSc.js → autosend-BLsBopsH.js} +1 -1
- package/dist/client/assets/{avatar-Dc1WJG2B.js → avatar-1IZuZCaD.js} +1 -1
- package/dist/client/assets/{badge-BdVhPCHH.js → badge-CKV4vWrX.js} +1 -1
- package/dist/client/assets/{block-document-CVYCq_wv.js → block-document-COQPfnST.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-DdWA6c6d.js → blocks-preview-workspace-context-CCVx88kg.js} +1 -1
- package/dist/client/assets/{buckets-OMAyuLV_.js → buckets-B_1By_p8.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-B8BBh3al.js → build-improve-prompt-doc-V_cSolPH.js} +1 -1
- package/dist/client/assets/{calendar-B8FWjklL.js → calendar-5S8bCZT8.js} +1 -1
- package/dist/client/assets/{capability-load-error-Cq6dc5Ct.js → capability-load-error-DBzLEHg7.js} +1 -1
- package/dist/client/assets/{category-editor-DxRePoxi.js → category-editor-Bcsi75M0.js} +1 -1
- package/dist/client/assets/{chart-BPvWMbLQ.js → chart-P82FG_tK.js} +1 -1
- package/dist/client/assets/{chat-context-C7aSqPqa.js → chat-context-DX4-BYaP.js} +1 -1
- package/dist/client/assets/{chat-draft-BVrhHV88.js → chat-draft-DvxHfIYU.js} +1 -1
- package/dist/client/assets/{checkbox-BO8tS4tV.js → checkbox-Dtla-PS2.js} +1 -1
- package/dist/client/assets/{choose-editor-lrXJ4SHf.js → choose-editor-C7T6qp6e.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-BvrYBprI.js → claim-phase-copy-QDhSVHhM.js} +1 -1
- package/dist/client/assets/{cli-auth-success-D_cyN7MO.js → cli-auth-success-BLUjCgBX.js} +1 -1
- package/dist/client/assets/{client-icons-CAEha1kZ.js → client-icons-Dyah4pEW.js} +1 -1
- package/dist/client/assets/{collapsible-DwKDkmXC.js → collapsible-Ppoaesu6.js} +1 -1
- package/dist/client/assets/{collection-detail-DA3LzFXF.js → collection-detail-jZNrSgCK.js} +1 -1
- package/dist/client/assets/{collection-display-button-lO-CMmO5.js → collection-display-button-Dp6pPm4n.js} +1 -1
- package/dist/client/assets/{collection-search-GlDfWrQl.js → collection-search-BICxywQA.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DusEosLO.js → collection-table-wrapper-CeEhde2o.js} +1 -1
- package/dist/client/assets/{collection-tabs-YP0c1ElX.js → collection-tabs-C3e-Li7r.js} +1 -1
- package/dist/client/assets/{combobox-BQ871r-h.js → combobox-CM6xLmGx.js} +1 -1
- package/dist/client/assets/{command-CyoopJ8K.js → command-ByVvi9_U.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-C2Vb43e4.js → companion-mcps-section-DNZFTJ-a.js} +1 -1
- package/dist/client/assets/{config-DZCXJYIW.js → config-DH8oh3tW.js} +1 -1
- package/dist/client/assets/{connect-qnqLIzRh.js → connect-LFtxQi8s.js} +1 -1
- package/dist/client/assets/{connect-layout-B1jMPAeE.js → connect-layout-E2RBl6Ct.js} +1 -1
- package/dist/client/assets/{connection-Rri6yxlM.js → connection-DvLjK40C.js} +1 -1
- package/dist/client/assets/{connection-card-8TfEtWEH.js → connection-card-C_RVqxjx.js} +1 -1
- package/dist/client/assets/{connection-detail-DBirmZxK.js → connection-detail-B-nn-CJi.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CWZFrP0F.js → connection-form-helpers-Bv3pz0CA.js} +1 -1
- package/dist/client/assets/{connections-D3VDo8nr.js → connections-BinLzD-D.js} +1 -1
- package/dist/client/assets/{context-D3uLAblj.js → context-CiYF-rh5.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-CndqvoVa.js → create-organization-dialog-D33xqgNm.js} +1 -1
- package/dist/client/assets/{decopilot-Ch9InHOw.js → decopilot-LjR6b7ga.js} +1 -1
- package/dist/client/assets/{dialog-xO6pvTgy.js → dialog-BvEJdfIw.js} +1 -1
- package/dist/client/assets/{discover-Cznqo0l3.js → discover-BtjRgKmJ.js} +1 -1
- package/dist/client/assets/{domain-settings-rqOBcY7I.js → domain-settings-hImDtcD5.js} +1 -1
- package/dist/client/assets/{download-app-dialog-CkAPyUJk.js → download-app-dialog-CtAQKMSW.js} +1 -1
- package/dist/client/assets/{drawer-COUS-RMw.js → drawer-BicTll8u.js} +1 -1
- package/dist/client/assets/{editor-BtyNln47.js → editor-CoFAqe2C.js} +1 -1
- package/dist/client/assets/{empty-state-Ya1bFNQl.js → empty-state-CA3ormiX.js} +1 -1
- package/dist/client/assets/{empty-state-DFwLZdoG.js → empty-state-DnhBp1h5.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CIQbUcLs.js → extract-connection-data-axftnFrB.js} +1 -1
- package/dist/client/assets/{feature-gate-CqOYZzVW.js → feature-gate-BcKrbYNy.js} +1 -1
- package/dist/client/assets/{feature-paywall-BbGJmd8V.js → feature-paywall-CB0Qn2Bq.js} +1 -1
- package/dist/client/assets/{file-explorer-DhprT-fW.js → file-explorer-DBxwTTfj.js} +1 -1
- package/dist/client/assets/{file-preview-vkQ_3IRk.js → file-preview-QzRRG48G.js} +1 -1
- package/dist/client/assets/{file-share-button-KyN_ryLY.js → file-share-button-Bawt0Ksq.js} +1 -1
- package/dist/client/assets/{file-type-icon-DnOhlq0D.js → file-type-icon-C6mE9Yr0.js} +1 -1
- package/dist/client/assets/flat-project-smTVMgKV.js +1 -0
- package/dist/client/assets/{folder-icon-OrJJEPYu.js → folder-icon-CdLBcpMj.js} +1 -1
- package/dist/client/assets/{form-DQ9-jmhe.js → form-CaBIgIfp.js} +1 -1
- package/dist/client/assets/{gateway-client-BuRwuqbN.js → gateway-client-C-d1oKsS.js} +1 -1
- package/dist/client/assets/{general-CGXMPZVk.js → general-DO0vQiXx.js} +1 -1
- package/dist/client/assets/{home-D_MaaqNX.js → home-Bj2HgUlH.js} +1 -1
- package/dist/client/assets/{index-DoNiXMF0.js → index-BON9J-ej.js} +1 -1
- package/dist/client/assets/{index-BQaeRUfV.js → index-BZDS7h9V.js} +3 -3
- package/dist/client/assets/{index-B8nxEgaa.js → index-BxNmMjUb.js} +1 -1
- package/dist/client/assets/{index-DEVMcvUD.js → index-C9AmrlMW.js} +1 -1
- package/dist/client/assets/{index-D_S3Goue.js → index-ChCss-xS.js} +1 -1
- package/dist/client/assets/{index-DQP_XHzw.js → index-D25OB5tF.js} +1 -1
- package/dist/client/assets/{index-CM1GEUnU.js → index-D4Ad4oIf.js} +1 -1
- package/dist/client/assets/{index-CucpNGrt.js → index-DT-BgvEY.js} +1 -1
- package/dist/client/assets/{index-D-ZSPXmz.js → index-DTi_8EH9.js} +1 -1
- package/dist/client/assets/{index-CgypgZBb.js → index-DcN4jJDF.js} +1 -1
- package/dist/client/assets/{index-Dh9Stq8K.js → index-Wpbx0F_i.js} +1 -1
- package/dist/client/assets/{index-CkLwsc_p.js → index-XO_IS67E.js} +1 -1
- package/dist/client/assets/{index-Ct7m_fV2.js → index-fYHyhz79.js} +1 -1
- package/dist/client/assets/{index-D5o3MLAb.js → index-iqYZGUMi.js} +1 -1
- package/dist/client/assets/{index-redirect-Cm2cYJFl.js → index-redirect-BaQ1WBT0.js} +1 -1
- package/dist/client/assets/{index-Cif-NWVp.js → index-x77A9vPM.js} +2 -2
- package/dist/client/assets/{infiniteQueryObserver-D0QSVh54.js → infiniteQueryObserver-DBdA2RmG.js} +1 -1
- package/dist/client/assets/{infra-billing-Cb-HjBhK.js → infra-billing-AvwbRAYz.js} +1 -1
- package/dist/client/assets/{input-DbFNrmyy.js → input-D3qm0D_n.js} +1 -1
- package/dist/client/assets/{input-D4o2a2Ep.js → input-DEqxPc0K.js} +1 -1
- package/dist/client/assets/{input-yDOZz3Y8.js → input-DcgPjq_6.js} +1 -1
- package/dist/client/assets/{integration-icon--ugXTzBB.js → integration-icon-BKPFLZgl.js} +1 -1
- package/dist/client/assets/{label-BpW4-JRS.js → label-B-8WnseZ.js} +1 -1
- package/dist/client/assets/{last-preview-page-a8RsgdMb.js → last-preview-page-mwce4AH7.js} +1 -1
- package/dist/client/assets/{layout-DY7R9ACY.js → layout-CQ-8jddO.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-BclzkLc2.js → legacy-agents-deep-DjPRSINS.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-BNn-8HmE.js → legacy-main-redirect-DpzooUgh.js} +1 -1
- package/dist/client/assets/library-Cq_S7tKW.js +1 -0
- package/dist/client/assets/{library-tab-BzjBKwRW.js → library-tab-BjTazv7d.js} +1 -1
- package/dist/client/assets/{login-Cq-Mw7Ax.js → login-Grr59FS1.js} +1 -1
- package/dist/client/assets/{markdown-C6J9WB-u.js → markdown-B_dOnnkA.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-Cx5zXS7D.js → mcp-app-renderer-BfC10crg.js} +1 -1
- package/dist/client/assets/{mcp-oauth-Mdi9G_nm.js → mcp-oauth-BAFbjwj9.js} +1 -1
- package/dist/client/assets/{members-MhRU-q21.js → members-DQoUZtQl.js} +1 -1
- package/dist/client/assets/{message-templates-iONRjWU5.js → message-templates-DHxoiLGB.js} +1 -1
- package/dist/client/assets/{mini-report-page-C-96hM-o.js → mini-report-page-C-ikMRBv.js} +1 -1
- package/dist/client/assets/{mock-board-B5JSRgZV.js → mock-board-DU0skkWP.js} +1 -1
- package/dist/client/assets/{monaco-editor-BfRzXiyl.js → monaco-editor-5jOm7mia.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DCNb-RE6.js → monitoring-stats-row-DWAJcr8G.js} +1 -1
- package/dist/client/assets/{multi-select-BV4-qb8I.js → multi-select-DoVrlO9t.js} +1 -1
- package/dist/client/assets/{mustache-B2_LszoY.js → mustache-wY1rBqKZ.js} +1 -1
- package/dist/client/assets/{new-project-dialog-aG1LmqNx.js → new-project-dialog-CQC_PuUa.js} +1 -1
- package/dist/client/assets/{oauth-callback-BZEF6Vem.js → oauth-callback-DXpZGyRf.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DlkslXGA.js → oauth-callback-ai-provider-CDafbBpJ.js} +1 -1
- package/dist/client/assets/{onboarding-yk8kTMoW.js → onboarding-CL3TUDFt.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-BMOYZ8tf.js → optimistic-project-sidebar-views-CvY-u7mS.js} +1 -1
- package/dist/client/assets/{org-file-open-context-Dl3qgap2.js → org-file-open-context-avzppIYC.js} +1 -1
- package/dist/client/assets/{organization-choice-COhn6ce6.js → organization-choice-DYU6pSwT.js} +1 -1
- package/dist/client/assets/{orgs-DeRm5jIN.js → orgs-BcrOPuyW.js} +1 -1
- package/dist/client/assets/{page-seo-form-DO9uunbk.js → page-seo-form-CCyKtY6t.js} +1 -1
- package/dist/client/assets/{pair-CdNhWiUR.js → pair-5p-OkkFv.js} +1 -1
- package/dist/client/assets/{plan-ladder-CuLZkgBu.js → plan-ladder-Z8Ov45_0.js} +1 -1
- package/dist/client/assets/{popover-Cj-r--VT.js → popover-CGuWZpgs.js} +1 -1
- package/dist/client/assets/{post-calendar-_LPiIrzc.js → post-calendar-CHHA_0eo.js} +1 -1
- package/dist/client/assets/{post-editor-c1Rw9FQt.js → post-editor-DUFFmnys.js} +1 -1
- package/dist/client/assets/{preview-content-kIsMY8Nc.js → preview-content-BeK-qygw.js} +1 -1
- package/dist/client/assets/{preview-dialog-BHY_2jiF.js → preview-dialog-YNRkiNuc.js} +1 -1
- package/dist/client/assets/{profile-CzLV9KrB.js → profile-BQ6MhN9n.js} +1 -1
- package/dist/client/assets/{project-app-view-NADLDtxK.js → project-app-view-KenTc7sj.js} +1 -1
- package/dist/client/assets/{project-feed-IoR6hXa8.js → project-feed-CG0I6Cwi.js} +1 -1
- package/dist/client/assets/{project-icon-Ch4KDtlO.js → project-icon-DuA5BqEx.js} +1 -1
- package/dist/client/assets/project-reports-NUURSteE.js +1 -0
- package/dist/client/assets/project-tasks-VDudazRs.js +1 -0
- package/dist/client/assets/{projects-DDu44jkE.js → projects-Cve5c8oC.js} +1 -1
- package/dist/client/assets/{projects-empty-state-0uyJsqSZ.js → projects-empty-state-CogOcMqy.js} +1 -1
- package/dist/client/assets/{prompts-B_03RJAd.js → prompts-BbxmjW0H.js} +1 -1
- package/dist/client/assets/record-editor-f5Q1rDVw.js +1 -0
- package/dist/client/assets/{redirect-editor-CS_TZTOh.js → redirect-editor-O5_d-RCH.js} +1 -1
- package/dist/client/assets/reports-CbB48IkQ.js +1 -0
- package/dist/client/assets/{reports-UV35Nnxa.js → reports-CisQhIiX.js} +1 -1
- package/dist/client/assets/{reports-onboarding-DaFczo_9.js → reports-onboarding-DoAtxIFD.js} +1 -1
- package/dist/client/assets/{reports-tab-yhT8u52F.js → reports-tab-CT2RhgZr.js} +2 -2
- package/dist/client/assets/{repositories-Xv0E_Jwm.js → repositories-BVx7UkCV.js} +1 -1
- package/dist/client/assets/{repository-binding-DSb755tD.js → repository-binding-DnF7DtPp.js} +1 -1
- package/dist/client/assets/{repository-import-picker-DWKmc173.js → repository-import-picker-DXoExdKi.js} +1 -1
- package/dist/client/assets/{repository-picker-DTSlP9FP.js → repository-picker-DCI5UEX5.js} +1 -1
- package/dist/client/assets/{require-capability-Ds_HoNQH.js → require-capability-DuWmfC8I.js} +1 -1
- package/dist/client/assets/{required-auth-layout-BvMcqF9O.js → required-auth-layout-12WCpi4w.js} +1 -1
- package/dist/client/assets/{reset-password-C6aAd7Al.js → reset-password-CWRu5W7f.js} +1 -1
- package/dist/client/assets/{resizable-DXDqTm9t.js → resizable-BNzmA9qp.js} +1 -1
- package/dist/client/assets/{resolve-tab-icon-DQSu_41c.js → resolve-tab-icon-Lv7PQxZ6.js} +1 -1
- package/dist/client/assets/{review-settings-DAqIZhW5.js → review-settings-CzwijcHm.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-CP22_7Wf.js → rich-text-link-control-CkQ6p8Xx.js} +1 -1
- package/dist/client/assets/{roles-aPjfAf7m.js → roles-BysU3Rpe.js} +1 -1
- package/dist/client/assets/{route-CprvV6pD.js → route-B5oBemI_.js} +1 -1
- package/dist/client/assets/route-CdatK3Bm.js +1 -0
- package/dist/client/assets/{route-D2tFYskN.js → route-DyP5s7nQ.js} +1 -1
- package/dist/client/assets/{runnable-block-editor-D1k-NHHE.js → runnable-block-editor-DGahzIAb.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-Dy4CSxxD.js → sandbox-lifecycle-context-Ccql7Uia.js} +1 -1
- package/dist/client/assets/{schema-Dlgkjiv1.js → schema-CpRKAM53.js} +1 -1
- package/dist/client/assets/{scroll-area-DKF0wIhg.js → scroll-area-B5-mMcCX.js} +1 -1
- package/dist/client/assets/{search-input-D_Dm2H8K.js → search-input-Cbs7g-xg.js} +1 -1
- package/dist/client/assets/{search-toggle-P_agAdHY.js → search-toggle-CzlUPD_G.js} +1 -1
- package/dist/client/assets/{secret-picker-DlRxgG2v.js → secret-picker-7Q6C4NXK.js} +1 -1
- package/dist/client/assets/{secrets-51Ea1npI.js → secrets-B-NAChbp.js} +1 -1
- package/dist/client/assets/{sections-editor-Du3vUpgs.js → sections-editor-BQG_5BK9.js} +1 -1
- package/dist/client/assets/{select-Do8VXC56.js → select-B4XOGZTU.js} +1 -1
- package/dist/client/assets/{select-model-bKw7YzNa.js → select-model-B8wefayg.js} +1 -1
- package/dist/client/assets/{seo-editor-BT4GPyca.js → seo-editor-CDYa0kQa.js} +1 -1
- package/dist/client/assets/{separator-CRZXlLTM.js → separator-BbjRubpq.js} +1 -1
- package/dist/client/assets/{settings-tab-HRB7SJ4_.js → settings-tab-DpKcMylL.js} +1 -1
- package/dist/client/assets/{sheet-Da9g_BHH.js → sheet-bZQ40SkF.js} +1 -1
- package/dist/client/assets/{shell-layout-2lFwLRyB.js → shell-layout-CSsr2uWP.js} +1 -1
- package/dist/client/assets/{skills-DwgxN1Xl.js → skills-Dr6P_rBo.js} +1 -1
- package/dist/client/assets/{sso-BWJiOC7W.js → sso-CDxPw_PA.js} +1 -1
- package/dist/client/assets/{suggestion-CAkZpnvu.js → suggestion-BX4B9avx.js} +1 -1
- package/dist/client/assets/{switch-eabuBncZ.js → switch-DBoTA-Ic.js} +1 -1
- package/dist/client/assets/{synced-repos-DzoT266W.js → synced-repos-BgDcqvEb.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph-BVKulhrq.js → tab-icon-glyph-BCXvAgfR.js} +1 -1
- package/dist/client/assets/{table-Ci0flHqR.js → table-IOARZzKK.js} +1 -1
- package/dist/client/assets/{tabs-oRlU6S30.js → tabs-NLPkjDTl.js} +1 -1
- package/dist/client/assets/{task-board-DIALSeie.js → task-board-rAAXtV0T.js} +1 -1
- package/dist/client/assets/{task-route-CIBFVNSC.js → task-route-CevqfkEg.js} +1 -1
- package/dist/client/assets/{task-status-cZ16StYI.js → task-status-E7m1TXip.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-LqYaRFlI.js → taskboard-analytics-DVDUMRcu.js} +1 -1
- package/dist/client/assets/{tasks-CphA3EYZ.js → tasks-M-rYk1ck.js} +1 -1
- package/dist/client/assets/tasks-dceQAQHn.js +1 -0
- package/dist/client/assets/{textarea--vnsHs3x.js → textarea-CkGodJWZ.js} +1 -1
- package/dist/client/assets/{thread-analytics-DKUlf3RY.js → thread-analytics-Kyno_Q5c.js} +1 -1
- package/dist/client/assets/{thread-button-CsxctT-G.js → thread-button-Br8DvRAA.js} +1 -1
- package/dist/client/assets/{thread-intent-kYQuJDvD.js → thread-intent-B0cvv_hd.js} +1 -1
- package/dist/client/assets/{thread-route-De8K_tz3.js → thread-route-DvqLYqdY.js} +1 -1
- package/dist/client/assets/{thread-route-B3GsxAze.js → thread-route-IczHzLeC.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-C0FrNJ9T.js → thread-sheet-body-DePTnYB6.js} +1 -1
- package/dist/client/assets/{toggle-group-CvgNphfI.js → toggle-group-gpRQDxvg.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-EcMyctyQ.js → toolbar-icon-button-BGzee4fP.js} +1 -1
- package/dist/client/assets/{tooltip-CnfGv3UJ.js → tooltip-BDq0JxVo.js} +1 -1
- package/dist/client/assets/{track-RhLhrXxZ.js → track-BGk_1HvC.js} +1 -1
- package/dist/client/assets/{types-oO8sHi9E.js → types-G8qvfMRt.js} +1 -1
- package/dist/client/assets/{usage-stats-DErvibLB.js → usage-stats-C0Xu5aUP.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DOIgUjwL.js → use-ai-providers-CSZ-2eIg.js} +1 -1
- package/dist/client/assets/{use-automations-uekcK0KY.js → use-automations-CjNevLVU.js} +1 -1
- package/dist/client/assets/{use-autosave-CbOez7Yq.js → use-autosave-P84w8UFM.js} +1 -1
- package/dist/client/assets/{use-chat-layout-state-yrmi1Gwb.js → use-chat-layout-state-C1IHbIkQ.js} +1 -1
- package/dist/client/assets/{use-connect-companion-C_uGVXYr.js → use-connect-companion-cbVbp1PC.js} +1 -1
- package/dist/client/assets/{use-connection-DU4h1ZQw.js → use-connection-CbCOl7kC.js} +1 -1
- package/dist/client/assets/{use-copy-C5kztOhC.js → use-copy-pQiYVNDx.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Dkbt_aoq.js → use-create-virtual-mcp--prM7MSL.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-Hm__LN1k.js → use-date-fns-locale-BZJen5Qk.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-xpZ8auzw.js → use-debounced-autosave-f8aHkA4-.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DLVRUtOm.js → use-debounced-value-BkjYlyjI.js} +1 -1
- package/dist/client/assets/{use-deco-credits-DgLSuY0L.js → use-deco-credits-Fz7zUsZI.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CxBOYWC8.js → use-decopilot-events-Cg3y7_Tw.js} +1 -1
- package/dist/client/assets/{use-delete-connection-Do3hyh3j.js → use-delete-connection-DL6YTlmG.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DbqZpA_r.js → use-deployment-admin-ChDBYioe.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-CsVZwjau.js → use-fast-preview-draft-url-ChtqgHLa.js} +1 -1
- package/dist/client/assets/{use-file-configs-BRJeov5H.js → use-file-configs-C0anASKq.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DGoD9GUl.js → use-infinite-scroll-DDtarZih.js} +1 -1
- package/dist/client/assets/{use-join-requests-C_jjKXlE.js → use-join-requests-CmRy96zy.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-Bc3MZBCb.js → use-main-panel-tabs-DnGGxNlO.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-CBn_Xzmb.js → use-mcp-auth-status-zOqKzja_.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DOo0zS-A.js → use-mcp-client-DjprX9ll.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-DUcez8YA.js → use-mcp-prompts-zdF-r-gP.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CWcvYRA-.js → use-mcp-tools-BM5j4PPF.js} +1 -1
- package/dist/client/assets/{use-members-_nsnfGaz.js → use-members-FTp01BqN.js} +1 -1
- package/dist/client/assets/{use-mobile-DvZ73KtH.js → use-mobile-Dx9-2qYW.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-0EY97I37.js → use-navigate-to-agent-DxqUwHWS.js} +1 -1
- package/dist/client/assets/use-new-blocks-editor-BYhDxY_l.js +1 -0
- package/dist/client/assets/{use-open-billing-url-pGoiHk39.js → use-open-billing-url-CSe3J6zh.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-BlteiQR1.js → use-org-auth-client-Cec6PHzM.js} +1 -1
- package/dist/client/assets/{use-org-fs-BKiHrfqD.js → use-org-fs-BuUyyd61.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-9Jptl7NX.js → use-org-repo-syncs-XLagWIxo.js} +1 -1
- package/dist/client/assets/{use-org-sso-JZsx5RfJ.js → use-org-sso-BEIAieBm.js} +1 -1
- package/dist/client/assets/{use-organization-roles-coC16fOX.js → use-organization-roles-DfvH22_z.js} +1 -1
- package/dist/client/assets/{use-organization-settings--iPsUcy7.js → use-organization-settings-BiHv3s79.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-m1jpn2Q1.js → use-panel-navigate-CU0xHOEb.js} +1 -1
- package/dist/client/assets/{use-project-native-view-presence-Ggsme35p.js → use-project-native-view-presence-Cd8ENLua.js} +1 -1
- package/dist/client/assets/{use-project-scope-BB82FCa8.js → use-project-scope-C7h79vE7.js} +1 -1
- package/dist/client/assets/{use-releases-7cBYcQ4J.js → use-releases-CYpQQ1xE.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-CtsjKgVP.js → use-reports-diagnostic-DCRfhPB6.js} +1 -1
- package/dist/client/assets/{use-secrets-CLR0Et3T.js → use-secrets-BnZHjO5J.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-CBvq-UlV.js → use-section-preview-base-D0gjnGgo.js} +1 -1
- package/dist/client/assets/{use-session-runtime-6x58C-tT.js → use-session-runtime-C8OniTQv.js} +1 -1
- package/dist/client/assets/{use-tags-CDjPhJiP.js → use-tags-BeyBKO9N.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-BKbzkTQP.js → use-task-board-analytics-Dglaw6wU.js} +1 -1
- package/dist/client/assets/{use-task-metadata-CrJp6is8.js → use-task-metadata-GEFpS2Q_.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-1m69hvFD.js → use-thread-analytics-DrCEifJa.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-CTBrB0Pz.js → use-thread-outputs-Cv-5nrNe.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-B5rLKm8X.js +1 -0
- package/dist/client/assets/{useQueries-B5hFaZ0x.js → useQueries-BERB02cW.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BPFdAF6B.js +1 -0
- package/dist/client/assets/{users-DEkYKXng.js → users-tzAbEP65.js} +1 -1
- package/dist/client/assets/{utils-Bqsc15Zx.js → utils-3HfZ006b.js} +1 -1
- package/dist/client/assets/{variant-calendar-45aD1dj3.js → variant-calendar-C_WMoz2r.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-CAjUtJno.js → variant-matcher-override-BdtYW5Ls.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DrC_ZP4l.js → view-mode-toggle-B4lwUKo-.js} +1 -1
- package/dist/client/assets/{virtual-mcp-BH-EbPmd.js → virtual-mcp-DcQbLAsE.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/agent-app-B3k6lFW4.js +0 -1
- package/dist/client/assets/agent-deck-CJsgkjs4.js +0 -1
- package/dist/client/assets/agent-library-auzWKmtl.js +0 -1
- package/dist/client/assets/agent-library-file-C4Bz5yNQ.js +0 -1
- package/dist/client/assets/agent-settings-CFSoK3Dt.js +0 -1
- package/dist/client/assets/agent-site-editor-code-CvT5A6hL.js +0 -2
- package/dist/client/assets/agent-view-BVit-PUC.js +0 -1
- package/dist/client/assets/api-keys-DHQBKkcj.js +0 -1
- package/dist/client/assets/app-editor-DHGSsQUp.js +0 -1
- package/dist/client/assets/flat-project-BpJyiSII.js +0 -1
- package/dist/client/assets/library-B8Gbh-yN.js +0 -1
- package/dist/client/assets/project-reports-C4_AtKq5.js +0 -1
- package/dist/client/assets/project-tasks-sJ3gMJ8p.js +0 -1
- package/dist/client/assets/record-editor-DwYny4Hc.js +0 -1
- package/dist/client/assets/reports-Df5KS3eS.js +0 -1
- package/dist/client/assets/route-9tgTBitD.js +0 -1
- package/dist/client/assets/tasks-DPN3qyXp.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-sTUO1Dvp.js +0 -1
- package/dist/client/assets/useInfiniteQuery-Bvl72KSW.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Cf-lJprJ.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3292,7 +3292,7 @@ These do not communicate intent or scope.
|
|
|
3292
3292
|
- Virtual tools can trigger consequential actions through underlying tools.
|
|
3293
3293
|
- Keep logic constrained and predictable.
|
|
3294
3294
|
- If the code performs destructive operations, the parent agent instructions should require confirmation.
|
|
3295
|
-
`}]});function xV0(){return[...Ur$,...Pr$,...qr$,...wr$,...Dr$,...br$,...Vr$,..._r$]}function yr$(){return[...Tr$,...Nr$,...zr$,...Mr$,...jr$,...Or$,...xr$]}var XK1=O(()=>{Br$();Lr$();Er$();Ar$();Rr$();Ir$();kr$();vr$();fr$()});import{AsyncLocalStorage as _q6}from"async_hooks";import{z as vq6}from"zod";function bq6($){let Z=$.inputSchema&&typeof $.inputSchema==="object"&&"shape"in $.inputSchema?$.inputSchema:vq6.object({}),Q=$.outputSchema&&typeof $.outputSchema==="object"&&"shape"in $.outputSchema?$.outputSchema:void 0;return{config:{description:$.description??"",inputSchema:Z,outputSchema:Q,annotations:$.annotations,_meta:$._meta},handler:async(Y)=>{let X=RD.getStore();if(!X)throw Error(`[managementMCP] tool ${$.name} invoked outside a request context`);X.access.setToolName($.name);try{let J=await $.execute(Y,X);return{content:[{type:"text",text:$.modelSummary?$.modelSummary(J):JSON.stringify(J)}],structuredContent:J}}catch(J){return{content:[{type:"text",text:`Error: ${J.message}`}],isError:!0}}}}}function u80($){let Z=gr$.get($);if(!Z)Z=bq6($),gr$.set($,Z);return Z}var RD,gr$;var fV0=O(()=>{RD=new _q6;gr$=new Map});function cW($){if(!$.objectStorage)throw Error("Object storage is not configured. Ensure S3 credentials are set.");return $.objectStorage}function vD($,Z){let Q=typeof $==="number"&&Number.isFinite($)?$:Z;return Math.min(Math.max(Q,xq6),fq6)}function Ki($){return y2.find((Z)=>Z.name===$)}var xq6=60,fq6=604800,hr$,ur$,lr$,cr$,mr$,dr$,ir$,pr$,nr$,tr$,or$,rr$,sr$,ar$,er$,$s$,Zs$,Qs$;var bD=O(()=>{Xe();hr$=Ki("LIST_OBJECTS"),ur$=hr$.inputSchema,lr$=hr$.outputSchema,cr$=Ki("GET_OBJECT_METADATA"),mr$=cr$.inputSchema,dr$=cr$.outputSchema,ir$=Ki("GET_PRESIGNED_URL"),pr$=ir$.inputSchema,nr$=ir$.outputSchema,tr$=Ki("PUT_PRESIGNED_URL"),or$=tr$.inputSchema,rr$=tr$.outputSchema,sr$=Ki("DELETE_OBJECT"),ar$=sr$.inputSchema,er$=sr$.outputSchema,$s$=Ki("DELETE_OBJECTS"),Zs$=$s$.inputSchema,Qs$=$s$.outputSchema});var JK1;var Ys$=O(()=>{C0();bD();JK1=p({name:"LIST_OBJECTS",description:"List objects in the organization's object storage with pagination and prefix filtering support.",annotations:{title:"List Objects",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ur$,outputSchema:lr$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Y=await cW(Z).list({prefix:$.prefix,maxKeys:$.maxKeys,continuationToken:$.continuationToken,delimiter:$.delimiter});return{objects:Y.objects.map((X)=>({key:X.key,size:X.size,lastModified:X.lastModified?.toISOString?.()??(typeof X.lastModified==="string"?X.lastModified:new Date().toISOString()),etag:X.etag??""})),isTruncated:Y.isTruncated,nextContinuationToken:Y.nextContinuationToken,commonPrefixes:Y.commonPrefixes}}})});var GK1;var Xs$=O(()=>{C0();bD();GK1=p({name:"GET_OBJECT_METADATA",description:"Get metadata for an object in the organization's storage.",annotations:{title:"Get Object Metadata",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:mr$,outputSchema:dr$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Y=await cW(Z).head($.key);return{contentType:Y.contentType,contentLength:Y.size,lastModified:Y.lastModified?.toISOString?.()??(typeof Y.lastModified==="string"?Y.lastModified:new Date().toISOString()),etag:Y.etag??"",metadata:Y.metadata}}})});var yq6=3600,WK1;var Js$=O(()=>{C0();bD();WK1=p({name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading an object from the organization's storage.",annotations:{title:"Get Presigned Download URL",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:pr$,outputSchema:nr$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Q=cW(Z),Y=vD($.expiresIn,yq6);return{url:await Q.presignedGetUrl($.key,Y),expiresIn:Y}}})});var gq6=3600,KK1;var Gs$=O(()=>{C0();bD();KK1=p({name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading an object to the organization's storage.",annotations:{title:"Get Presigned Upload URL",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:or$,outputSchema:rr$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Q=cW(Z),Y=vD($.expiresIn,gq6);return{url:await Q.presignedPutUrl($.key,Y,$.contentType),expiresIn:Y}}})});var HK1;var Ws$=O(()=>{C0();bD();HK1=p({name:"DELETE_OBJECT",description:"Delete a single object from the organization's storage.",annotations:{title:"Delete Object",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ar$,outputSchema:er$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Q=cW(Z);try{return await Q.delete($.key),{success:!0,key:$.key}}catch{return{success:!1,key:$.key}}}})});var FK1;var Ks$=O(()=>{C0();bD();FK1=p({name:"DELETE_OBJECTS",description:"Delete multiple objects from the organization's storage in batch.",annotations:{title:"Delete Objects",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Zs$,outputSchema:Qs$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Q=cW(Z),Y=[],X=[];return await Promise.all($.keys.map(async(J)=>{try{await Q.delete(J),Y.push(J)}catch(G){X.push({key:J,message:G instanceof Error?G.message:"Unknown error"})}})),{deleted:Y,errors:X}}})});var Hs$=O(()=>{Ys$();Xs$();Js$();Gs$();Ws$();Ks$()});import{z as N1}from"zod";var uq6,lq6,Fs$,cq6,Hi,Us$,Ns$,yV0,Bs$,Ds$,Os$,mq6,Ls$;var Hy=O(()=>{zJ();uq6=N1.object({name:N1.string(),title:N1.string().optional(),description:N1.string().optional(),version:N1.string().optional(),websiteUrl:N1.string().optional(),icons:N1.array(N1.object({src:N1.string()}).catchall(N1.unknown())).optional(),remotes:N1.array(N1.object({type:N1.string().optional(),url:N1.string().optional(),name:N1.string().optional(),title:N1.string().optional(),description:N1.string().optional()}).catchall(N1.unknown())).optional(),packages:N1.array(N1.object({identifier:N1.string(),version:N1.string().optional()}).catchall(N1.unknown())).optional(),repository:N1.object({url:N1.string().optional(),source:N1.string().optional(),subfolder:N1.string().optional()}).catchall(N1.unknown()).optional()}).catchall(N1.unknown()),lq6=N1.object({name:N1.string(),description:N1.string().nullable().optional()}).catchall(N1.unknown()),Fs$=N1.object({verified:N1.boolean().optional(),official:N1.boolean().optional(),tags:N1.array(N1.string()).optional(),categories:N1.array(N1.string()).optional(),friendly_name:N1.string().nullable().optional(),short_description:N1.string().max(160).nullable().optional(),owner:N1.string().nullable().optional(),readme:N1.string().max(50000).nullable().optional(),readme_url:N1.string().nullable().optional(),has_remote:N1.boolean().optional(),has_oauth:N1.boolean().optional(),tools:N1.array(lq6).optional()}).catchall(N1.unknown()),cq6=N1.object({"mcp.studio":Fs$.optional(),"mcp.mesh":Fs$.optional()}).catchall(N1.unknown()),Hi=N1.object({id:N1.string(),name:N1.string().optional(),title:N1.string(),description:N1.string().nullable().optional(),_meta:cq6.optional(),server:uq6,is_public:N1.boolean().optional(),is_unlisted:N1.boolean().optional(),created_at:N1.string().optional(),updated_at:N1.string().optional(),created_by:N1.string().optional()}).catchall(N1.unknown()),Us$=sK.extend({tags:N1.array(N1.string()).optional().describe("Filter by tags (AND semantics)"),categories:N1.array(N1.string()).optional().describe("Filter by categories (AND semantics)"),cursor:N1.string().optional().describe("Pagination cursor")}).describe("List registry items with optional filtering and pagination."),Ns$=N1.object({items:N1.array(Hi),totalCount:N1.number(),hasMore:N1.boolean().optional(),nextCursor:N1.string().optional()}),yV0=N1.object({id:N1.string().optional().describe("Registry item ID"),name:N1.string().optional().describe("Registry item name (alias for id)")}).refine(($)=>$.id||$.name,{message:"At least one of 'id' or 'name' is required"}).describe("Get a registry item by ID or name."),Bs$=N1.object({item:Hi.nullable()}),Ds$=N1.object({tags:N1.array(N1.object({value:N1.string(),count:N1.number()})),categories:N1.array(N1.object({value:N1.string(),count:N1.number()}))}),Os$=N1.object({query:N1.string().optional().describe("Free-text search across id, title, description, server name"),tags:N1.array(N1.string()).optional().describe("Filter by tags (AND)"),categories:N1.array(N1.string()).optional().describe("Filter by categories (AND)"),limit:N1.number().int().min(1).max(100).optional().describe("Max results (default 20)"),cursor:N1.string().optional().describe("Pagination cursor")}).describe("Lightweight search returning minimal fields (id, title, tags, categories, is_public)."),mq6=N1.object({id:N1.string(),title:N1.string(),tags:N1.array(N1.string()),categories:N1.array(N1.string()),is_public:N1.boolean(),is_unlisted:N1.boolean()}),Ls$=N1.object({items:N1.array(mq6),totalCount:N1.number(),hasMore:N1.boolean().optional(),nextCursor:N1.string().optional()})});import{z as dq6}from"zod";function tq6($){return nq6.parse($).map((Z)=>({...Z,name:Z.name??Z.server.name}))}async function oq6(){try{let $=await fetch(iq6,{headers:fX?.etag?{"If-None-Match":fX.etag}:{},signal:AbortSignal.timeout(1e4)});if($.status===304&&fX)return fX.fetchedAt=Date.now(),fX.retryAt=Date.now()+UK1,fX.items;if(!$.ok)throw Error(`Deco registry unavailable (${$.status})`);if(!$.body)throw Error("Deco registry returned an empty response");let Z=$.body.getReader(),Q=[],Y=0;try{while(!0){let{done:W,value:K}=await Z.read();if(W)break;if(Y+=K.byteLength,Y>pq6)throw Error("Deco registry exceeds size limit");Q.push(K)}}finally{await Z.cancel()}let X=new Uint8Array(Y),J=0;for(let W of Q)X.set(W,J),J+=W.byteLength;let G=tq6(JSON.parse(new TextDecoder().decode(X)));return fX={items:G,fetchedAt:Date.now(),retryAt:Date.now()+UK1,etag:$.headers.get("etag")},G}catch($){if(fX&&Date.now()-fX.fetchedAt<ws$)return fX.retryAt=Date.now()+UK1,fX.items;throw $}}async function oU(){if(fX&&Date.now()<fX.retryAt&&Date.now()-fX.fetchedAt<ws$)return fX.items;return NK1??=oq6().finally(()=>{NK1=void 0}),NK1}function BK1($,Z){let Q=$;for(let Y of Z){if(Q===null||typeof Q!=="object"||!Object.hasOwn(Q,Y))return;Q=Q[Y]}return Q}function DK1($,Z){if("conditions"in Z){if(Z.operator==="or")return Z.conditions.some((J)=>DK1($,J));let X=Z.conditions.every((J)=>DK1($,J));return Z.operator==="not"?!X:X}let Q=BK1($,Z.field),Y=Z.value;if(Q===void 0)return!1;switch(Z.operator){case"eq":return Q===Y;case"in":return Array.isArray(Y)&&Y.includes(Q);case"contains":return typeof Q==="string"&&typeof Y==="string"&&Q.toLowerCase().includes(Y.toLowerCase());case"like":return typeof Q==="string"&&typeof Y==="string"&&jc(Y).test(Q);default:{if(!(typeof Q==="number"&&typeof Y==="number"||typeof Q==="string"&&typeof Y==="string"))return!1;if(Z.operator==="gt")return Q>Y;if(Z.operator==="gte")return Q>=Y;if(Z.operator==="lt")return Q<Y;return Q<=Y}}}function gV0($,Z){let Q=$.filter((W)=>{let K=UF(W._meta);return(!Z.where||DK1(W,Z.where))&&(Z.tags??[]).every((H)=>K?.tags?.includes(H))&&(Z.categories??[]).every((H)=>K?.categories?.includes(H))});Q.sort((W,K)=>{for(let H of Z.orderBy??[]){let F=BK1(W,H.field),U=BK1(K,H.field);if(F==null||U==null){if(F==null&&U==null)continue;let B=H.nulls==="first";return F==null?B?-1:1:B?1:-1}let N=typeof F==="number"&&typeof U==="number"?F-U:String(F).localeCompare(String(U));if(N)return H.direction==="desc"?-N:N}return W.id.localeCompare(K.id)});let Y=Z.cursor===void 0?Z.offset??0:Number(Z.cursor);if(!Number.isSafeInteger(Y)||Y<0||Z.cursor!==void 0&&!/^\d+$/.test(Z.cursor))throw Error("Invalid registry cursor");let X=Z.limit??24,J=Q.slice(Y,Y+X),G=Y+J.length<Q.length;return{items:J,totalCount:Q.length,hasMore:G,nextCursor:G?String(Y+J.length):void 0}}function hV0($){let Z=$.id??$.name;if(!Z)throw Error("Either 'id' or 'name' is required");return Z}function uV0($,Z){return $.find((Q)=>Q.id===Z)??$.find((Q)=>Q.name===Z||Q.server.name===Z)??null}function js$($){let Z=new Map,Q=new Map;for(let X of $){let J=UF(X._meta);for(let G of new Set(J?.tags??[]))Z.set(G,(Z.get(G)??0)+1);for(let G of new Set(J?.categories??[]))Q.set(G,(Q.get(G)??0)+1)}let Y=(X)=>[...X].map(([J,G])=>({value:J,count:G})).sort((J,G)=>J.value.localeCompare(G.value));return{tags:Y(Z),categories:Y(Q)}}var iq6="https://raw.githubusercontent.com/decocms/mcps/main/registry.json",UK1=300000,ws$=3600000,pq6=10485760,nq6,fX,NK1;var Fi=O(()=>{zJ();Hy();nq6=dq6.array(Hi).max(1e4).superRefine(($,Z)=>{let Q=new Set;for(let Y of $){if(Q.has(Y.id))Z.addIssue({code:"custom",message:`Duplicate registry id: ${Y.id}`});Q.add(Y.id)}})});import{z as rq6}from"zod";var lV0;var OK1=O(()=>{Fi();C0();Hy();lV0=p({name:"REGISTRY_ITEM_FILTERS",description:"List available tag/category filters for Deco registry items",inputSchema:rq6.object({}),outputSchema:Ds$,handler:async($,Z)=>{return G0(Z),await Z.access.check(),js$(await oU())}})});var cV0;var LK1=O(()=>{Fi();C0();Hy();cV0=p({name:"REGISTRY_ITEM_GET",description:"Get a Deco registry item by ID or name",inputSchema:yV0,outputSchema:Bs$,handler:async($,Z)=>{G0(Z),await Z.access.check();let Q=hV0($);return{item:uV0(await oU(),Q)}}})});var mV0;var wK1=O(()=>{Fi();C0();Hy();mV0=p({name:"REGISTRY_ITEM_LIST",description:"List Deco registry items for the current organization",inputSchema:Us$,outputSchema:Ns$,handler:async($,Z)=>{return G0(Z),await Z.access.check(),gV0(await oU(),$)}})});var Es$;var Ps$=O(()=>{Fi();C0();Hy();Es$=p({name:"REGISTRY_ITEM_SEARCH",description:"Search registry items returning minimal data (id, title, tags, categories, is_public, is_unlisted). Use this instead of LIST when you need to find items efficiently without loading full details. Supports free-text search across id, title, description, and server name, plus filtering by tags and categories.",inputSchema:Os$,outputSchema:Ls$,handler:async($,Z)=>{G0(Z),await Z.access.check();let Q=$.query?.trim().split(/\s+/).filter(Boolean)??[],Y=gV0(await oU(),{...$,where:Q.length?{operator:"or",conditions:Q.flatMap((X)=>["id","title","description"].map((J)=>({field:[J],operator:"contains",value:X})).concat([{field:["server","name"],operator:"contains",value:X}]))}:void 0});return{...Y,items:Y.items.map((X)=>({id:X.id,title:X.title,tags:UF(X._meta)?.tags??[],categories:UF(X._meta)?.categories??[],is_public:!0,is_unlisted:!1}))}}})});import{z as zs$}from"zod";var dV0;var jK1=O(()=>{Fi();C0();Hy();dV0=p({name:"REGISTRY_ITEM_VERSIONS",description:"Get available versions of a registry item",inputSchema:yV0,outputSchema:zs$.object({versions:zs$.array(Hi)}),handler:async($,Z)=>{G0(Z),await Z.access.check();let Q=hV0($),Y=uV0(await oU(),Q);return{versions:Y?[Y]:[]}}})});var As$,Ts$,Rs$,qs$;var Ms$=O(()=>{C0();wK1();LK1();jK1();OK1();As$=p({...mV0,name:"COLLECTION_REGISTRY_APP_LIST"}),Ts$=p({...cV0,name:"COLLECTION_REGISTRY_APP_GET"}),Rs$=p({...dV0,name:"COLLECTION_REGISTRY_APP_VERSIONS"}),qs$=p({...lV0,name:"COLLECTION_REGISTRY_APP_FILTERS"})});var Is$;var Vs$=O(()=>{OK1();LK1();wK1();Ps$();jK1();Ms$();Is$=[As$,Ts$,Rs$,qs$,mV0,Es$,cV0,dV0,lV0]});import{z as Ui}from"zod";var EK1;var ks$=O(()=>{C0();TW();P10();CJ();EK1=p({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:Ui.object({virtualMcpId:Ui.string().describe("Virtual MCP ID that owns this VM"),branch:Ui.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),removeWorktree:Ui.boolean().optional().default(!1).describe("Also reclaim the sandbox's workspace (local worktree + disk). Ignored by hosted teardown, whose filesystem is already destroyed.")}),outputSchema:Ui.object({success:Ui.boolean()}),handler:async($,Z)=>{let Q;try{Q=await iI$($,Z)}catch(W){if(W instanceof Error&&W.message==="Virtual MCP not found")return{success:!0};throw W}let{entry:Y,userId:X,sandboxUserId:J}=Q;if(!Y)return{success:!0};let G=await c61(Z);return await Cj(Z.storage.virtualMcps,$.virtualMcpId,X,J,$.branch),await G.delete(Y.sandboxHandle).catch((W)=>console.error(`[SANDBOX_DELETE] ${bQ} ${Y.sandboxHandle}: ${W instanceof Error?W.message:String(W)}`)),{success:!0}}})});var Ss$=O(()=>{T10();ks$()});import{z as xD}from"zod";function ZM6($){try{return JSON.parse($)}catch(Z){throw Error(`GitHub /user/installations returned invalid JSON: ${$.slice(0,300)}`,{cause:Z})}}var eq6="https://api.github.com",$M6=15000,PK1;var Cs$=O(()=>{C0();DW();AJ();aK();xe();bc();PK1=p({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:xD.object({connectionId:xD.string().describe("ID of the mcp-github connection to use")}),outputSchema:xD.object({installations:xD.array(xD.object({installationId:xD.number(),login:xD.string(),avatarUrl:xD.string(),type:xD.string()}))}),handler:async($,Z)=>{await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization context required");let Y=await Z.storage.connections.findById($.connectionId,Q);if(!Y)throw Error("Connection not found");if(c9(Y))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let X=new U9(Z.db,Z.vault),J=await X.get($.connectionId);if(!J)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let G=J.accessToken;if(Dj(J)&&X.isExpired(J,se)){let U=await iV0(J,X);if(!U)throw Error(T7);G=U,J=await X.get($.connectionId)??J}let W=[],K=1,H=100,F=async(U)=>fetch(`${eq6}/user/installations?per_page=${H}&page=${K}`,{headers:{Authorization:`Bearer ${U}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout($M6)});while(!0){let U=await F(G);if(U.status===401){let B=await X.get($.connectionId);if(!B||!Dj(B))throw Error(T7);let D=await iV0(B,X);if(!D)throw Error(T7);if(G=D,U=await F(G),U.status===401)throw Error(T7)}if(Kj(U.headers,{lane:"rest",operation:"list_user_installations",installation:A$1}),Gj(U)){await U.body?.cancel().catch(()=>{});let B=U.headers.get("retry-after")!==null?"secondary":"primary";Hj({lane:"rest",operation:"list_user_installations",installation:A$1,kind:B});let D=Wj(U.headers);throw Error(`GitHub ${B} rate limit reached${D===null?"":`; retry in ${Math.ceil(D/1000)}s`}`)}if(!U.ok)throw await U.body?.cancel().catch(()=>{}),Error(`GitHub /user/installations failed: ${U.status}`);let N=ZM6(await U.text());for(let B of N.installations)W.push({installationId:B.id,login:B.account.login,avatarUrl:B.account.avatar_url,type:B.account.type});if(N.installations.length<H)break;K++}return{installations:W}}})});var _s$=O(()=>{Cs$()});var zK1="deco-sites";import{z as vs$}from"zod";function xs$($){let Z=YM6.find((Q)=>Q.id===$);if(!Z)throw Error(`Unknown site template: ${$}`);return Z}var YM6,bs$,fs$;var ys$=O(()=>{YM6=[{id:"storefront",repo:{owner:zK1,name:"storefront-tanstack"}},{id:"blog",repo:{owner:zK1,name:"blog-tanstack"}}],bs$=vs$.enum(["storefront","blog"]);fs$=vs$.string().trim().min(1).max(100).regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,"Use lower-case letters, numbers and hyphens, starting and ending with a letter or number")});import{z as AK1}from"zod";function pV0($){let Z=null;if($.repoUrl){if(Z=zY($.repoUrl),!Z)throw Error(`Could not recognise the repository URL: ${$.repoUrl}`)}return{repositoryId:$.repositoryId,ref:Z,connectionId:$.connectionId}}var fD,gs$="No credential for this repository \u2014 link it in Settings \u2192 Repositories";var TK1=O(()=>{m4();fD={repositoryId:AK1.string().optional().describe("Connected repository (REPOSITORY_LINK) to act on"),repoUrl:AK1.string().optional().describe("Any URL of the repository \u2014 its provider and host are read from it"),connectionId:AK1.string().optional().describe("Legacy: a repo-scoped mcp-github connection in this org")}});import{z as VH}from"zod";var RK1;var hs$=O(()=>{C0();rZ();TK1();RK1=p({name:"REPOSITORY_SEARCH_BRANCHES",description:"Search a repository's branches by a case-insensitive substring of the branch name, filtered server-side by the provider.",annotations:{title:"Search Repository Branches",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:VH.object({...fD,query:VH.string().describe("Substring to match against branch names. Empty returns the first branches alphabetically."),limit:VH.number().int().min(1).max(100).default(30),cursor:VH.string().nullish().describe("Opaque cursor from a previous call's `nextCursor`, to read the next window")}),outputSchema:VH.object({branches:VH.array(VH.object({name:VH.string(),author:VH.string().nullable()})),totalCount:VH.number(),nextCursor:VH.string().nullable()}),handler:async($,Z)=>{await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization context required");return(await J81(Z,Q,pV0($))).searchBranches({query:$.query,limit:$.limit,cursor:$.cursor})}})});import{z as q$}from"zod";function ls$($){let{credentialConnectionId:Z,installationAuthorizedBy:Q,installationRepositoryIds:Y,...X}=$,J=g$1($);return{...X,servable:J===null,accessIssue:J}}function l80($){let{legacyConnectionId:Z,...Q}=$;return Q}async function qK1($,Z,Q){let Y=await $.storage.gitProviderAccounts.get(Q,Z);if(!Y)throw Error("Git account not found");return Y}var XM6,us$,cs$,ms$,ds$,is$,ps$,ns$,ts$,os$,rs$,ss$;var as$=O(()=>{$00();m4();ys$();C0();rZ();hs$();XM6=q$.object({ref:bK$,externalId:q$.string(),defaultBranch:q$.string().nullable(),webUrl:q$.string(),visibility:q$.enum(["public","private","internal"]),description:q$.string().nullable(),updatedAt:q$.string().nullable()}),us$=xK$.extend({servable:q$.boolean(),accessIssue:q$.enum(["revoked","provider_unavailable","installation_missing","authorization_required","no_repositories"]).nullable(),connectedBy:q$.object({name:q$.string()}).nullable()});cs$=p({name:"GIT_PROVIDER_CAPABILITIES",description:"Which git providers this deployment can connect through Studio-owned credentials, and the URLs that start each connect flow.",annotations:{title:"Git provider capabilities",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({}),outputSchema:q$.object({github:q$.object({configured:q$.boolean(),cliConnectPath:q$.string().nullable(),connectPath:q$.string().nullable(),installPath:q$.string().nullable()}),gitlab:q$.object({oauthHosts:q$.array(q$.string()),connectPath:q$.string().nullable()}),bitbucket:q$.object({oauthHosts:q$.array(q$.string()),connectPath:q$.string().nullable()})}),handler:async($,Z)=>{r(Z);let Q=G0(Z),Y=`/api/${Q.slug??Q.id}/git-providers`,X=RK0(),J=X.github.configured,G=X.github.cli;return{github:{configured:J||G,cliConnectPath:G?`${Y}/github/cli/connect`:null,connectPath:J?`${Y}/github/connect`:null,installPath:J?`${Y}/github/install`:null},gitlab:{oauthHosts:X.gitlab.hosts,connectPath:X.gitlab.configured?`${Y}/gitlab/connect`:null},bitbucket:{oauthHosts:X.bitbucket.hosts,connectPath:X.bitbucket.configured?`${Y}/bitbucket/connect`:null}}}}),ms$=p({name:"GIT_ACCOUNT_LIST",description:"List the git provider accounts connected to this organization.",annotations:{title:"List git accounts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({}),outputSchema:q$.object({accounts:q$.array(us$)}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z);return{accounts:(await Z.storage.gitProviderAccounts.listByOrg(Q.id)).map(ls$)}}}),ds$=p({name:"GIT_ACCOUNT_CONNECT_TOKEN",description:"Connect a git provider account with an access token: a GitLab personal, project or group token, or a Bitbucket Cloud repository, project or workspace access token. Bitbucket also needs the workspace slug, because an access token cannot name itself. Validates the token against the provider before storing it encrypted. Prefer this over OAuth when the account should only reach a subset of repositories: a scoped token is narrowed by the provider, an OAuth grant reaches everything its user can.",annotations:{title:"Connect git account with a token",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({type:ma.describe("Provider; gitlab and bitbucket accept tokens (GitHub connects through the App)"),host:q$.string().min(1).describe("Provider host, e.g. gitlab.com, gitlab.acme.com or bitbucket.org"),token:q$.string().min(1).describe("Access token with api scope"),workspace:q$.string().min(1).optional().describe("Bitbucket workspace slug the token belongs to. Required for Bitbucket: an access token cannot name itself, and the workspace is what Studio verifies it against.")}),outputSchema:q$.object({account:us$}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=$.host.trim().toLowerCase();if(!/^[a-z0-9.-]+(:[0-9]+)?$/.test(Y))throw Error("host must be a bare hostname, optionally with a port");let X=$.workspace?.trim().toLowerCase();if($.type==="bitbucket"&&!X)throw Error("Connecting Bitbucket with a token needs the workspace slug the token belongs to");let J=await IB$($.type,Y,$.token,X),G=await Z.storage.gitProviderAccounts.upsert({organizationId:Q.id,type:$.type,host:Y,authKind:"token",externalAccountId:J.externalAccountId,login:J.login,avatarUrl:J.avatarUrl,createdBy:i0(Z)??null});return await Z.storage.gitProviderAccountCredentials.upsert({connectionId:G.id,accessToken:$.token,refreshToken:null,scope:null,expiresAt:null,clientId:null,clientSecret:null,tokenEndpoint:null}),{account:ls$(G)}}}),is$=p({name:"GIT_ACCOUNT_DELETE",description:"Disconnect a git provider account. Its repositories stay linked but lose credentials (they become anonymous clones) until linked to another account.",annotations:{title:"Disconnect git account",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({id:q$.string()}),outputSchema:q$.object({deleted:q$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z);return{deleted:await Z.storage.gitProviderAccounts.delete($.id,Q.id)}}}),ps$=p({name:"REPOSITORY_LIST",description:"List the repositories linked to this organization.",annotations:{title:"List repositories",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({accountId:q$.string().optional().describe("Only repositories of this account")}),outputSchema:q$.object({repositories:q$.array(da.extend({usable:q$.boolean()}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=await Z.storage.repositories.listByOrg(Q.id,{accountId:$.accountId}),X=await Lj(Z,Q.id),J=new Set(X.map((G)=>G.webUrl.toLowerCase()));return{repositories:Y.map((G)=>({...l80(G),usable:J.has(G.webUrl.toLowerCase())}))}}}),ns$=p({name:"REPOSITORY_SEARCH",description:"Search the repositories an account can reach on its provider (not yet linked). Feeds the repository picker.",annotations:{title:"Search provider repositories",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({accountId:q$.string(),query:q$.string().optional(),page:q$.number().int().min(1).optional(),perPage:q$.number().int().min(1).max(100).optional()}),outputSchema:q$.object({repositories:q$.array(XM6),hasMore:q$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=await qK1(Z,Q.id,$.accountId);return KU({db:Z.db,vault:Z.vault},Y).listRepos({query:$.query,page:$.page,perPage:$.perPage})}}),ts$=p({name:"REPOSITORY_LINK",description:"Link a repository to the organization. With an account, the repository is verified against the provider and its facts (id, default branch, visibility) recorded; without one it is linked as an anonymous public clone.",annotations:{title:"Link repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({url:q$.string().min(1).describe("Repository URL (https or ssh), or a bare path like owner/name when accountId is given"),accountId:q$.string().optional().describe("Account whose credentials access the repository")}),outputSchema:q$.object({repository:da}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=i0(Z)??null;if(!$.accountId){let H=zY($.url);if(!H)throw Error("Could not recognise the repository URL. Use a full https URL from GitHub, GitLab or Bitbucket.");let F=await Z.storage.repositories.upsert({organizationId:Q.id,ref:H,createdBy:Y});return{repository:l80(F)}}let X=await qK1(Z,Q.id,$.accountId),J=zY($.url,{provider:X.type,host:X.host});if(!J)throw Error("Could not recognise the repository URL or path");if(J.host!==X.host)throw Error(`Repository is on ${J.host} but the account is on ${X.host}`);let W=await KU({db:Z.db,vault:Z.vault},X).getRepo(J);if(!W)throw Error(`${J.path} was not found on ${J.host} or the account cannot access it`);let K=await Z.storage.repositories.upsert({organizationId:Q.id,ref:W.ref,accountId:X.id,externalId:W.externalId,defaultBranch:W.defaultBranch,visibility:W.visibility,createdBy:Y});return{repository:l80(K)}}}),os$=p({name:"REPOSITORY_CREATE_FROM_TEMPLATE",description:"Create a new private GitHub repository for a site from one of the site templates, owned by the account's user or organization, and link it to the organization.",annotations:{title:"Create repository from template",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({accountId:q$.string().describe("GitHub account whose user or organization owns the repository"),name:fs$.describe("Name of the new repository"),template:bs$}),outputSchema:q$.object({repository:da}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=await qK1(Z,Q.id,$.accountId),X=KU({db:Z.db,vault:Z.vault},Y);if(!X.createRepoFromTemplate)throw Error("Sites can only be created in a GitHub account");let J=await X.createRepoFromTemplate({template:xs$($.template).repo,owner:Y.login,name:$.name,private:!0});if(Y.installationRepositoryIds)await Z.storage.gitProviderAccounts.grantRepository(Y.id,Q.id,Number(J.externalId));let G=await Z.storage.repositories.upsert({organizationId:Q.id,ref:J.ref,accountId:Y.id,externalId:J.externalId,defaultBranch:J.defaultBranch,visibility:J.visibility,createdBy:i0(Z)??null});return{repository:l80(G)}}}),rs$=p({name:"REPOSITORY_UPDATE",description:"Change a linked repository's settings. Currently the sandbox image its sandboxes boot from: `default`, or the name of a variant the cluster renders (e.g. `android`, for mobile apps an agent should run on an Android emulator). A variant the cluster lacks degrades to `default`.",annotations:{title:"Update repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({id:q$.string(),sandboxImage:oF}),outputSchema:q$.object({repository:da}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=await Z.storage.repositories.setSandboxImage($.id,Q.id,$.sandboxImage);if(!Y)throw Error("Repository not found");return{repository:l80(Y)}}}),ss$=p({name:"REPOSITORY_DELETE",description:"Unlink a repository from the organization. Agents, tasks and syncs that referenced it keep working off their legacy metadata until relinked.",annotations:{title:"Unlink repository",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({id:q$.string()}),outputSchema:q$.object({deleted:q$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z);return{deleted:await Z.storage.repositories.delete($.id,Q.id)}}})});import{z as M$}from"zod";async function Ni($,Z){let Q=$.organization?.id;if(!Q)throw Error("Organization context required");let Y=await ee($,Q,pV0(Z));if(!Y)throw Error(gs$);return Y}var GM6,WM6,nV0,KM6,es$,$a$,Za$,Qa$,Ya$,Xa$;var Ja$=O(()=>{C0();rZ();TK1();GM6=M$.object({id:M$.string().nullable(),name:M$.string(),state:M$.enum(["queued","running","completed"]),conclusion:M$.enum(["success","failure","neutral","cancelled","skipped","timed_out","action_required"]).nullable(),url:M$.string().nullable(),durationMs:M$.number().nullable(),summary:M$.string().nullable()}),WM6=M$.object({id:M$.string(),author:M$.string(),body:M$.string(),createdAt:M$.string(),updatedAt:M$.string(),url:M$.string()}),nV0=M$.object({number:M$.number(),url:M$.string(),title:M$.string(),body:M$.string(),state:M$.enum(["open","closed","merged"]),draft:M$.boolean(),mergedAt:M$.string().nullable(),base:M$.string(),head:M$.string(),headSha:M$.string(),headRepoPath:M$.string().nullable(),author:M$.string(),conflicting:M$.boolean().nullable(),checks:M$.enum(["pending","passing","failing"]).nullable(),changedFiles:M$.number().nullable()}),KM6=nV0.extend({checkRuns:M$.array(GM6),comments:M$.array(WM6),unresolvedConversations:M$.number(),reviewBlocked:M$.boolean()}),es$=p({name:"CHANGE_REQUEST_STATE",description:"Read a branch's change request with its CI runs, review state and comments.",annotations:{title:"Read Change Request State",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,branch:M$.string().describe("Head branch of the change request to read")}),outputSchema:M$.object({changeRequest:KM6.nullable()}),handler:async($,Z)=>{return await Z.access.check(),{changeRequest:await(await Ni(Z,$)).readDetailed({branch:$.branch})}}}),$a$=p({name:"CHANGE_REQUEST_LAST_MERGED",description:"Read the most recently merged change request into a base branch \u2014 in Fast Preview, the last publish.",annotations:{title:"Read Last Merged Change Request",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,base:M$.string().describe("Branch it was merged into")}),outputSchema:M$.object({changeRequest:nV0.nullable()}),handler:async($,Z)=>{return await Z.access.check(),{changeRequest:await(await Ni(Z,$)).lastMergedInto($.base)}}}),Za$=p({name:"CHANGE_REQUEST_LIST_OPEN",description:"List a repository's open change requests, most recently updated first.",annotations:{title:"List Open Change Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,limit:M$.number().int().min(1).max(100).default(50)}),outputSchema:M$.object({changeRequests:M$.array(nV0)}),handler:async($,Z)=>{return await Z.access.check(),{changeRequests:await(await Ni(Z,$)).listOpen($.limit)}}}),Qa$=p({name:"CHANGE_REQUEST_CHECK_LOG",description:"Read one CI run's report \u2014 a GitHub check run's output markdown, or the tail of a GitLab job's trace. Bitbucket commit statuses carry no report, so this answers nothing there.",annotations:{title:"Read CI Run Report",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,checkId:M$.string().describe("Provider id of the run, from its listing")}),outputSchema:M$.object({report:M$.string().nullable()}),handler:async($,Z)=>{return await Z.access.check(),{report:await(await Ni(Z,$)).readCheckLog($.checkId)}}}),Ya$=p({name:"CHANGE_REQUEST_OPEN",description:"Propose a branch onto another. Returns the branch's existing change request instead of failing when it already has one.",annotations:{title:"Open Change Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,head:M$.string().describe("Branch being proposed"),base:M$.string().describe("Branch it should land on"),title:M$.string(),body:M$.string().optional()}),outputSchema:M$.object({changeRequest:nV0,existed:M$.boolean()}),handler:async($,Z)=>{await Z.access.check();let Q=await Ni(Z,$),Y=await Q.readForBranch($.head);if(Y&&Y.state==="open"){if($.body&&$.body!==Y.body)await Q.describe(Y.number,$.body);return{changeRequest:$.body?{...Y,body:$.body}:Y,existed:!0}}return{changeRequest:await Q.open({head:$.head,base:$.base,title:$.title,body:$.body}),existed:!1}}}),Xa$=p({name:"CHANGE_REQUEST_MERGE",description:"Land a change request. Reports why it could not merge rather than throwing.",annotations:{title:"Merge Change Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,number:M$.number().int().positive(),strategy:M$.enum(["any","squash"]).default("any").describe("`squash` when the result must be one commit; `any` uses whatever the repository allows"),commitTitle:M$.string().optional(),commitMessage:M$.string().optional()}),outputSchema:M$.object({merged:M$.boolean(),reason:M$.enum(["conflict","blocked","rate_limited","not_found","error"]).optional(),detail:M$.string().optional()}),handler:async($,Z)=>{await Z.access.check();let Y=await(await Ni(Z,$)).merge($.number,{strategy:$.strategy,commitTitle:$.commitTitle,commitMessage:$.commitMessage});return Y.merged?{merged:!0}:{merged:!1,reason:Y.reason,detail:Y.detail}}})});import{z as H6}from"zod";function tV0($){if(!$)return"";return typeof $==="string"?$:$.toISOString()}function MK1($){let Z=$.trim();return Z.length>0?Z:void 0}function IK1($,Z){return $===void 0||$.includes(Z)}var FM6,UM6,NM6,BM6,DM6,OM6,LM6,VK1;var Ga$=O(()=>{C0();eT0();FM6=["thread","task","connection"],UM6=H6.object({type:H6.literal("thread"),id:H6.string(),title:H6.string(),created_at:H6.string(),updated_at:H6.string(),virtual_mcp_id:H6.string().nullable(),run_config:H6.record(H6.string(),H6.unknown()).nullable(),status:H6.string().nullable()}),NM6=H6.object({type:H6.literal("task"),id:H6.string(),title:H6.string(),created_at:H6.string(),updated_at:H6.string(),key:H6.string().nullable(),status:H6.string().nullable(),repo:H6.string().nullable()}),BM6=H6.object({type:H6.literal("connection"),id:H6.string(),title:H6.string(),icon:H6.string().nullable(),slug:H6.string().nullable()}),DM6=H6.discriminatedUnion("type",[UM6,NM6,BM6]),OM6=H6.object({query:H6.string().max(256).describe("Free-text search query. Empty string returns the most recently updated resources."),limit:H6.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:H6.array(H6.enum(FM6)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),LM6=H6.object({items:H6.array(DM6),totalCount:H6.number()});VK1=p({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads, task-board cards and MCP connections). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:OM6,outputSchema:LM6,handler:async($,Z)=>{await Z.access.check();let Q=G0(Z),Y=$.limit??20,X=IK1($.types,"thread"),J=IK1($.types,"task"),G=IK1($.types,"connection"),W=[],K=0,[H,F,U]=await Promise.all([X?Z.storage.threads.list(void 0,{limit:Y,offset:0,search:MK1($.query),includeArchived:!1}):null,J?Z.storage.taskBoard.searchByTitle(Q.id,MK1($.query)??"",Y):null,G?Z.storage.connections.searchByTitle(Q.id,MK1($.query)??"",Y):null]);if(H){K+=H.total;for(let N of H.threads)W.push({type:"thread",id:N.id,title:N.title??"",created_at:tV0(N.created_at),updated_at:tV0(N.updated_at),virtual_mcp_id:N.virtual_mcp_id??null,run_config:N.run_config??null,status:IW(N).status})}if(F){K+=F.length;for(let N of F)W.push({type:"task",id:N.id,title:N.title??"",created_at:tV0(N.createdAt),updated_at:tV0(N.updatedAt),key:Q.slug?cm(Q.slug,N.keySeq):null,status:N.status??null,repo:N.repo??null})}if(U){K+=U.length;for(let N of U)W.push({type:"connection",id:N.id,title:N.title,icon:N.icon??null,slug:N.slug??null})}return{items:W,totalCount:K}}})});var Wa$=O(()=>{Ga$()});var Ka$=60;function w3($){return I8(async()=>{let{object:Z}=await gj($);return{object:Z}},{maxAttempts:3,minTimeout:300,isRetriable:(Z)=>vY.isInstance(Z)})}var Fy=O(()=>{x4();K8()});import{z as yX}from"zod";var Bi,kH;var Di=O(()=>{Bi=yX.object({name:yX.string().describe("Short phrase naming the rule \u2014 what it is about, not the rule"),value:yX.string().describe("The rule itself, as markdown. One or two paragraphs; use a bullet list only when there are genuinely several cases. No heading \u2014 the name is the heading.")}),kH=yX.object({companyName:yX.string().describe("The store or brand name. Look for the name that recurs across page titles, block `name` props, and post bodies \u2014 not a product or category name."),description:yX.string().describe("What the company sells and who it sells to, 1-3 sentences. Look at the home and institutional pages."),language:yX.string().describe("BCP-47 tag of the language the prose itself is written in, e.g. pt-BR. Read the post bodies, not any locale config."),tone:yX.string().describe("Tone of voice, described so another writer could reproduce it: how the reader is addressed (which pronoun, which person), sentence length, humor, jargon level, formality, and casing conventions. Read the longest run of real prose you can find \u2014 post bodies if they exist, otherwise page copy and meta descriptions."),targetAudience:yX.string().describe("Who reads this brand's content and what they came looking for. Infer from who the copy addresses and what it assumes the reader already cares about. Say so plainly rather than reaching for marketing personas."),values:yX.array(Bi).describe("Brand values the content should carry, as the brand itself states them. `name` is the value ('Biodiversidade brasileira'), `value` explains what the copy actually claims and the evidence for it \u2014 stated numbers, sourcing commitments. Prefer a value the copy argues for over a generic virtue like 'quality' or 'innovation'."),dos:yX.array(Bi).describe("Instructions a blogpost writer must follow for this brand, derived from patterns the copy consistently follows. `name` names the rule ('Abertura do post'), `value` is the imperative instruction \u2014 instructions, not adjectives: 'Open with the customer's problem, never with the company' beats 'customer-focused'. Any brand-specific word for an ordinary thing gets its own rule, quoted in the brand's language \u2014 for a Portuguese site, \"chame a sacola de 'mochila', nunca de 'carrinho'\"."),avoid:yX.array(Bi).describe("Things a blogpost writer must not do \u2014 banned words, claims, formats, topics. `name` names the guardrail, `value` states the prohibition and why the copy suggests it. Derive them from what the copy consistently never does and from claims the brand is visibly careful about. Do not restate a `dos` entry inverted."),categories:yX.array(yX.string()).describe("Content categories that fit this brand's blog, as plain names \u2014 this is a taxonomy, not a rule, so no body. Take existing category blocks first; with no blog, derive them from the themes the site's own pages keep returning to. Editorial subjects, not the product taxonomy."),competitors:yX.array(Bi).describe("Competitors named explicitly in the content. A brand rarely names them in its own copy \u2014 return an empty array unless a name is actually there, and never guess from the market segment. When one is named, `name` is the competitor and `value` is what the content says about it.")})});import{z as rU}from"zod";async function AM6($,Z,Q){if(!Q.companyName.trim())return[];let Y=await SY($,"web_search");if(!Y)return[];try{let X=await $.aiProviders.activate(Y.credentialId,Z),{text:J}=await AU({model:X.aiSdk.languageModel(Y.modelId),prompt:`Who are the main competitors of ${Q.companyName}? Context on the company: ${Q.description}
|
|
3295
|
+
`}]});function xV0(){return[...Ur$,...Pr$,...qr$,...wr$,...Dr$,...br$,...Vr$,..._r$]}function yr$(){return[...Tr$,...Nr$,...zr$,...Mr$,...jr$,...Or$,...xr$]}var XK1=O(()=>{Br$();Lr$();Er$();Ar$();Rr$();Ir$();kr$();vr$();fr$()});import{AsyncLocalStorage as _q6}from"async_hooks";import{z as vq6}from"zod";function bq6($){let Z=$.inputSchema&&typeof $.inputSchema==="object"&&"shape"in $.inputSchema?$.inputSchema:vq6.object({}),Q=$.outputSchema&&typeof $.outputSchema==="object"&&"shape"in $.outputSchema?$.outputSchema:void 0;return{config:{description:$.description??"",inputSchema:Z,outputSchema:Q,annotations:$.annotations,_meta:$._meta},handler:async(Y)=>{let X=RD.getStore();if(!X)throw Error(`[managementMCP] tool ${$.name} invoked outside a request context`);X.access.setToolName($.name);try{let J=await $.execute(Y,X);return{content:[{type:"text",text:$.modelSummary?$.modelSummary(J):JSON.stringify(J)}],structuredContent:J}}catch(J){return{content:[{type:"text",text:`Error: ${J.message}`}],isError:!0}}}}}function u80($){let Z=gr$.get($);if(!Z)Z=bq6($),gr$.set($,Z);return Z}var RD,gr$;var fV0=O(()=>{RD=new _q6;gr$=new Map});function cW($){if(!$.objectStorage)throw Error("Object storage is not configured. Ensure S3 credentials are set.");return $.objectStorage}function vD($,Z){let Q=typeof $==="number"&&Number.isFinite($)?$:Z;return Math.min(Math.max(Q,xq6),fq6)}function Ki($){return y2.find((Z)=>Z.name===$)}var xq6=60,fq6=604800,hr$,ur$,lr$,cr$,mr$,dr$,ir$,pr$,nr$,tr$,or$,rr$,sr$,ar$,er$,$s$,Zs$,Qs$;var bD=O(()=>{Xe();hr$=Ki("LIST_OBJECTS"),ur$=hr$.inputSchema,lr$=hr$.outputSchema,cr$=Ki("GET_OBJECT_METADATA"),mr$=cr$.inputSchema,dr$=cr$.outputSchema,ir$=Ki("GET_PRESIGNED_URL"),pr$=ir$.inputSchema,nr$=ir$.outputSchema,tr$=Ki("PUT_PRESIGNED_URL"),or$=tr$.inputSchema,rr$=tr$.outputSchema,sr$=Ki("DELETE_OBJECT"),ar$=sr$.inputSchema,er$=sr$.outputSchema,$s$=Ki("DELETE_OBJECTS"),Zs$=$s$.inputSchema,Qs$=$s$.outputSchema});var JK1;var Ys$=O(()=>{C0();bD();JK1=p({name:"LIST_OBJECTS",description:"List objects in the organization's object storage with pagination and prefix filtering support.",annotations:{title:"List Objects",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:ur$,outputSchema:lr$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Y=await cW(Z).list({prefix:$.prefix,maxKeys:$.maxKeys,continuationToken:$.continuationToken,delimiter:$.delimiter});return{objects:Y.objects.map((X)=>({key:X.key,size:X.size,lastModified:X.lastModified?.toISOString?.()??(typeof X.lastModified==="string"?X.lastModified:new Date().toISOString()),etag:X.etag??""})),isTruncated:Y.isTruncated,nextContinuationToken:Y.nextContinuationToken,commonPrefixes:Y.commonPrefixes}}})});var GK1;var Xs$=O(()=>{C0();bD();GK1=p({name:"GET_OBJECT_METADATA",description:"Get metadata for an object in the organization's storage.",annotations:{title:"Get Object Metadata",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:mr$,outputSchema:dr$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Y=await cW(Z).head($.key);return{contentType:Y.contentType,contentLength:Y.size,lastModified:Y.lastModified?.toISOString?.()??(typeof Y.lastModified==="string"?Y.lastModified:new Date().toISOString()),etag:Y.etag??"",metadata:Y.metadata}}})});var yq6=3600,WK1;var Js$=O(()=>{C0();bD();WK1=p({name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading an object from the organization's storage.",annotations:{title:"Get Presigned Download URL",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:pr$,outputSchema:nr$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Q=cW(Z),Y=vD($.expiresIn,yq6);return{url:await Q.presignedGetUrl($.key,Y),expiresIn:Y}}})});var gq6=3600,KK1;var Gs$=O(()=>{C0();bD();KK1=p({name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading an object to the organization's storage.",annotations:{title:"Get Presigned Upload URL",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:or$,outputSchema:rr$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Q=cW(Z),Y=vD($.expiresIn,gq6);return{url:await Q.presignedPutUrl($.key,Y,$.contentType),expiresIn:Y}}})});var HK1;var Ws$=O(()=>{C0();bD();HK1=p({name:"DELETE_OBJECT",description:"Delete a single object from the organization's storage.",annotations:{title:"Delete Object",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ar$,outputSchema:er$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Q=cW(Z);try{return await Q.delete($.key),{success:!0,key:$.key}}catch{return{success:!1,key:$.key}}}})});var FK1;var Ks$=O(()=>{C0();bD();FK1=p({name:"DELETE_OBJECTS",description:"Delete multiple objects from the organization's storage in batch.",annotations:{title:"Delete Objects",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Zs$,outputSchema:Qs$,handler:async($,Z)=>{r(Z),G0(Z),await Z.access.check();let Q=cW(Z),Y=[],X=[];return await Promise.all($.keys.map(async(J)=>{try{await Q.delete(J),Y.push(J)}catch(G){X.push({key:J,message:G instanceof Error?G.message:"Unknown error"})}})),{deleted:Y,errors:X}}})});var Hs$=O(()=>{Ys$();Xs$();Js$();Gs$();Ws$();Ks$()});import{z as N1}from"zod";var uq6,lq6,Fs$,cq6,Hi,Us$,Ns$,yV0,Bs$,Ds$,Os$,mq6,Ls$;var Hy=O(()=>{zJ();uq6=N1.object({name:N1.string(),title:N1.string().optional(),description:N1.string().optional(),version:N1.string().optional(),websiteUrl:N1.string().optional(),icons:N1.array(N1.object({src:N1.string()}).catchall(N1.unknown())).optional(),remotes:N1.array(N1.object({type:N1.string().optional(),url:N1.string().optional(),name:N1.string().optional(),title:N1.string().optional(),description:N1.string().optional()}).catchall(N1.unknown())).optional(),packages:N1.array(N1.object({identifier:N1.string(),version:N1.string().optional()}).catchall(N1.unknown())).optional(),repository:N1.object({url:N1.string().optional(),source:N1.string().optional(),subfolder:N1.string().optional()}).catchall(N1.unknown()).optional()}).catchall(N1.unknown()),lq6=N1.object({name:N1.string(),description:N1.string().nullable().optional()}).catchall(N1.unknown()),Fs$=N1.object({verified:N1.boolean().optional(),official:N1.boolean().optional(),tags:N1.array(N1.string()).optional(),categories:N1.array(N1.string()).optional(),friendly_name:N1.string().nullable().optional(),short_description:N1.string().max(160).nullable().optional(),owner:N1.string().nullable().optional(),readme:N1.string().max(50000).nullable().optional(),readme_url:N1.string().nullable().optional(),has_remote:N1.boolean().optional(),has_oauth:N1.boolean().optional(),tools:N1.array(lq6).optional()}).catchall(N1.unknown()),cq6=N1.object({"mcp.studio":Fs$.optional(),"mcp.mesh":Fs$.optional()}).catchall(N1.unknown()),Hi=N1.object({id:N1.string(),name:N1.string().optional(),title:N1.string(),description:N1.string().nullable().optional(),_meta:cq6.optional(),server:uq6,is_public:N1.boolean().optional(),is_unlisted:N1.boolean().optional(),created_at:N1.string().optional(),updated_at:N1.string().optional(),created_by:N1.string().optional()}).catchall(N1.unknown()),Us$=sK.extend({tags:N1.array(N1.string()).optional().describe("Filter by tags (AND semantics)"),categories:N1.array(N1.string()).optional().describe("Filter by categories (AND semantics)"),cursor:N1.string().optional().describe("Pagination cursor")}).describe("List registry items with optional filtering and pagination."),Ns$=N1.object({items:N1.array(Hi),totalCount:N1.number(),hasMore:N1.boolean().optional(),nextCursor:N1.string().optional()}),yV0=N1.object({id:N1.string().optional().describe("Registry item ID"),name:N1.string().optional().describe("Registry item name (alias for id)")}).refine(($)=>$.id||$.name,{message:"At least one of 'id' or 'name' is required"}).describe("Get a registry item by ID or name."),Bs$=N1.object({item:Hi.nullable()}),Ds$=N1.object({tags:N1.array(N1.object({value:N1.string(),count:N1.number()})),categories:N1.array(N1.object({value:N1.string(),count:N1.number()}))}),Os$=N1.object({query:N1.string().optional().describe("Free-text search across id, title, description, server name"),tags:N1.array(N1.string()).optional().describe("Filter by tags (AND)"),categories:N1.array(N1.string()).optional().describe("Filter by categories (AND)"),limit:N1.number().int().min(1).max(100).optional().describe("Max results (default 20)"),cursor:N1.string().optional().describe("Pagination cursor")}).describe("Lightweight search returning minimal fields (id, title, tags, categories, is_public)."),mq6=N1.object({id:N1.string(),title:N1.string(),tags:N1.array(N1.string()),categories:N1.array(N1.string()),is_public:N1.boolean(),is_unlisted:N1.boolean()}),Ls$=N1.object({items:N1.array(mq6),totalCount:N1.number(),hasMore:N1.boolean().optional(),nextCursor:N1.string().optional()})});import{z as dq6}from"zod";function tq6($){return nq6.parse($).map((Z)=>({...Z,name:Z.name??Z.server.name}))}async function oq6(){try{let $=await fetch(iq6,{headers:fX?.etag?{"If-None-Match":fX.etag}:{},signal:AbortSignal.timeout(1e4)});if($.status===304&&fX)return fX.fetchedAt=Date.now(),fX.retryAt=Date.now()+UK1,fX.items;if(!$.ok)throw Error(`Deco registry unavailable (${$.status})`);if(!$.body)throw Error("Deco registry returned an empty response");let Z=$.body.getReader(),Q=[],Y=0;try{while(!0){let{done:W,value:K}=await Z.read();if(W)break;if(Y+=K.byteLength,Y>pq6)throw Error("Deco registry exceeds size limit");Q.push(K)}}finally{await Z.cancel()}let X=new Uint8Array(Y),J=0;for(let W of Q)X.set(W,J),J+=W.byteLength;let G=tq6(JSON.parse(new TextDecoder().decode(X)));return fX={items:G,fetchedAt:Date.now(),retryAt:Date.now()+UK1,etag:$.headers.get("etag")},G}catch($){if(fX&&Date.now()-fX.fetchedAt<ws$)return fX.retryAt=Date.now()+UK1,fX.items;throw $}}async function oU(){if(fX&&Date.now()<fX.retryAt&&Date.now()-fX.fetchedAt<ws$)return fX.items;return NK1??=oq6().finally(()=>{NK1=void 0}),NK1}function BK1($,Z){let Q=$;for(let Y of Z){if(Q===null||typeof Q!=="object"||!Object.hasOwn(Q,Y))return;Q=Q[Y]}return Q}function DK1($,Z){if("conditions"in Z){if(Z.operator==="or")return Z.conditions.some((J)=>DK1($,J));let X=Z.conditions.every((J)=>DK1($,J));return Z.operator==="not"?!X:X}let Q=BK1($,Z.field),Y=Z.value;if(Q===void 0)return!1;switch(Z.operator){case"eq":return Q===Y;case"in":return Array.isArray(Y)&&Y.includes(Q);case"contains":return typeof Q==="string"&&typeof Y==="string"&&Q.toLowerCase().includes(Y.toLowerCase());case"like":return typeof Q==="string"&&typeof Y==="string"&&jc(Y).test(Q);default:{if(!(typeof Q==="number"&&typeof Y==="number"||typeof Q==="string"&&typeof Y==="string"))return!1;if(Z.operator==="gt")return Q>Y;if(Z.operator==="gte")return Q>=Y;if(Z.operator==="lt")return Q<Y;return Q<=Y}}}function gV0($,Z){let Q=$.filter((W)=>{let K=UF(W._meta);return(!Z.where||DK1(W,Z.where))&&(Z.tags??[]).every((H)=>K?.tags?.includes(H))&&(Z.categories??[]).every((H)=>K?.categories?.includes(H))});Q.sort((W,K)=>{for(let H of Z.orderBy??[]){let F=BK1(W,H.field),U=BK1(K,H.field);if(F==null||U==null){if(F==null&&U==null)continue;let B=H.nulls==="first";return F==null?B?-1:1:B?1:-1}let N=typeof F==="number"&&typeof U==="number"?F-U:String(F).localeCompare(String(U));if(N)return H.direction==="desc"?-N:N}return W.id.localeCompare(K.id)});let Y=Z.cursor===void 0?Z.offset??0:Number(Z.cursor);if(!Number.isSafeInteger(Y)||Y<0||Z.cursor!==void 0&&!/^\d+$/.test(Z.cursor))throw Error("Invalid registry cursor");let X=Z.limit??24,J=Q.slice(Y,Y+X),G=Y+J.length<Q.length;return{items:J,totalCount:Q.length,hasMore:G,nextCursor:G?String(Y+J.length):void 0}}function hV0($){let Z=$.id??$.name;if(!Z)throw Error("Either 'id' or 'name' is required");return Z}function uV0($,Z){return $.find((Q)=>Q.id===Z)??$.find((Q)=>Q.name===Z||Q.server.name===Z)??null}function js$($){let Z=new Map,Q=new Map;for(let X of $){let J=UF(X._meta);for(let G of new Set(J?.tags??[]))Z.set(G,(Z.get(G)??0)+1);for(let G of new Set(J?.categories??[]))Q.set(G,(Q.get(G)??0)+1)}let Y=(X)=>[...X].map(([J,G])=>({value:J,count:G})).sort((J,G)=>J.value.localeCompare(G.value));return{tags:Y(Z),categories:Y(Q)}}var iq6="https://raw.githubusercontent.com/decocms/mcps/main/registry.json",UK1=300000,ws$=3600000,pq6=10485760,nq6,fX,NK1;var Fi=O(()=>{zJ();Hy();nq6=dq6.array(Hi).max(1e4).superRefine(($,Z)=>{let Q=new Set;for(let Y of $){if(Q.has(Y.id))Z.addIssue({code:"custom",message:`Duplicate registry id: ${Y.id}`});Q.add(Y.id)}})});import{z as rq6}from"zod";var lV0;var OK1=O(()=>{Fi();C0();Hy();lV0=p({name:"REGISTRY_ITEM_FILTERS",description:"List available tag/category filters for Deco registry items",inputSchema:rq6.object({}),outputSchema:Ds$,handler:async($,Z)=>{return G0(Z),await Z.access.check(),js$(await oU())}})});var cV0;var LK1=O(()=>{Fi();C0();Hy();cV0=p({name:"REGISTRY_ITEM_GET",description:"Get a Deco registry item by ID or name",inputSchema:yV0,outputSchema:Bs$,handler:async($,Z)=>{G0(Z),await Z.access.check();let Q=hV0($);return{item:uV0(await oU(),Q)}}})});var mV0;var wK1=O(()=>{Fi();C0();Hy();mV0=p({name:"REGISTRY_ITEM_LIST",description:"List Deco registry items for the current organization",inputSchema:Us$,outputSchema:Ns$,handler:async($,Z)=>{return G0(Z),await Z.access.check(),gV0(await oU(),$)}})});var Es$;var Ps$=O(()=>{Fi();C0();Hy();Es$=p({name:"REGISTRY_ITEM_SEARCH",description:"Search registry items returning minimal data (id, title, tags, categories, is_public, is_unlisted). Use this instead of LIST when you need to find items efficiently without loading full details. Supports free-text search across id, title, description, and server name, plus filtering by tags and categories.",inputSchema:Os$,outputSchema:Ls$,handler:async($,Z)=>{G0(Z),await Z.access.check();let Q=$.query?.trim().split(/\s+/).filter(Boolean)??[],Y=gV0(await oU(),{...$,where:Q.length?{operator:"or",conditions:Q.flatMap((X)=>["id","title","description"].map((J)=>({field:[J],operator:"contains",value:X})).concat([{field:["server","name"],operator:"contains",value:X}]))}:void 0});return{...Y,items:Y.items.map((X)=>({id:X.id,title:X.title,tags:UF(X._meta)?.tags??[],categories:UF(X._meta)?.categories??[],is_public:!0,is_unlisted:!1}))}}})});import{z as zs$}from"zod";var dV0;var jK1=O(()=>{Fi();C0();Hy();dV0=p({name:"REGISTRY_ITEM_VERSIONS",description:"Get available versions of a registry item",inputSchema:yV0,outputSchema:zs$.object({versions:zs$.array(Hi)}),handler:async($,Z)=>{G0(Z),await Z.access.check();let Q=hV0($),Y=uV0(await oU(),Q);return{versions:Y?[Y]:[]}}})});var As$,Ts$,Rs$,qs$;var Ms$=O(()=>{C0();wK1();LK1();jK1();OK1();As$=p({...mV0,name:"COLLECTION_REGISTRY_APP_LIST"}),Ts$=p({...cV0,name:"COLLECTION_REGISTRY_APP_GET"}),Rs$=p({...dV0,name:"COLLECTION_REGISTRY_APP_VERSIONS"}),qs$=p({...lV0,name:"COLLECTION_REGISTRY_APP_FILTERS"})});var Is$;var Vs$=O(()=>{OK1();LK1();wK1();Ps$();jK1();Ms$();Is$=[As$,Ts$,Rs$,qs$,mV0,Es$,cV0,dV0,lV0]});import{z as Ui}from"zod";var EK1;var ks$=O(()=>{C0();TW();P10();CJ();EK1=p({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:Ui.object({virtualMcpId:Ui.string().describe("Virtual MCP ID that owns this VM"),branch:Ui.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),removeWorktree:Ui.boolean().optional().default(!1).describe("Also reclaim the sandbox's workspace (local worktree + disk). Ignored by hosted teardown, whose filesystem is already destroyed.")}),outputSchema:Ui.object({success:Ui.boolean()}),handler:async($,Z)=>{let Q;try{Q=await iI$($,Z)}catch(W){if(W instanceof Error&&W.message==="Virtual MCP not found")return{success:!0};throw W}let{entry:Y,userId:X,sandboxUserId:J}=Q;if(!Y)return{success:!0};let G=await c61(Z);return await Cj(Z.storage.virtualMcps,$.virtualMcpId,X,J,$.branch),await G.delete(Y.sandboxHandle).catch((W)=>console.error(`[SANDBOX_DELETE] ${bQ} ${Y.sandboxHandle}: ${W instanceof Error?W.message:String(W)}`)),{success:!0}}})});var Ss$=O(()=>{T10();ks$()});import{z as xD}from"zod";function ZM6($){try{return JSON.parse($)}catch(Z){throw Error(`GitHub /user/installations returned invalid JSON: ${$.slice(0,300)}`,{cause:Z})}}var eq6="https://api.github.com",$M6=15000,PK1;var Cs$=O(()=>{C0();DW();AJ();aK();xe();bc();PK1=p({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:xD.object({connectionId:xD.string().describe("ID of the mcp-github connection to use")}),outputSchema:xD.object({installations:xD.array(xD.object({installationId:xD.number(),login:xD.string(),avatarUrl:xD.string(),type:xD.string()}))}),handler:async($,Z)=>{await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization context required");let Y=await Z.storage.connections.findById($.connectionId,Q);if(!Y)throw Error("Connection not found");if(c9(Y))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let X=new U9(Z.db,Z.vault),J=await X.get($.connectionId);if(!J)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let G=J.accessToken;if(Dj(J)&&X.isExpired(J,se)){let U=await iV0(J,X);if(!U)throw Error(T7);G=U,J=await X.get($.connectionId)??J}let W=[],K=1,H=100,F=async(U)=>fetch(`${eq6}/user/installations?per_page=${H}&page=${K}`,{headers:{Authorization:`Bearer ${U}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout($M6)});while(!0){let U=await F(G);if(U.status===401){let B=await X.get($.connectionId);if(!B||!Dj(B))throw Error(T7);let D=await iV0(B,X);if(!D)throw Error(T7);if(G=D,U=await F(G),U.status===401)throw Error(T7)}if(Kj(U.headers,{lane:"rest",operation:"list_user_installations",installation:A$1}),Gj(U)){await U.body?.cancel().catch(()=>{});let B=U.headers.get("retry-after")!==null?"secondary":"primary";Hj({lane:"rest",operation:"list_user_installations",installation:A$1,kind:B});let D=Wj(U.headers);throw Error(`GitHub ${B} rate limit reached${D===null?"":`; retry in ${Math.ceil(D/1000)}s`}`)}if(!U.ok)throw await U.body?.cancel().catch(()=>{}),Error(`GitHub /user/installations failed: ${U.status}`);let N=ZM6(await U.text());for(let B of N.installations)W.push({installationId:B.id,login:B.account.login,avatarUrl:B.account.avatar_url,type:B.account.type});if(N.installations.length<H)break;K++}return{installations:W}}})});var _s$=O(()=>{Cs$()});var zK1="deco-sites";import{z as vs$}from"zod";function xs$($){let Z=YM6.find((Q)=>Q.id===$);if(!Z)throw Error(`Unknown site template: ${$}`);return Z}var YM6,bs$,fs$;var ys$=O(()=>{YM6=[{id:"storefront",repo:{owner:zK1,name:"storefront-tanstack"}},{id:"blog",repo:{owner:zK1,name:"blog-tanstack"}}],bs$=vs$.enum(["storefront","blog"]);fs$=vs$.string().trim().min(1).max(100).regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,"Use lower-case letters, numbers and hyphens, starting and ending with a letter or number")});import{z as AK1}from"zod";function pV0($){let Z=$.repoUrl?zY($.repoUrl):null;if($.repoUrl&&!Z&&!$.repositoryId)throw Error(`Could not recognise the repository URL: ${$.repoUrl}`);return{repositoryId:$.repositoryId,ref:Z,connectionId:$.connectionId}}var fD,gs$="No credential for this repository \u2014 link it in Settings \u2192 Repositories";var TK1=O(()=>{m4();fD={repositoryId:AK1.string().optional().describe("Connected repository (REPOSITORY_LINK) to act on"),repoUrl:AK1.string().optional().describe("Any URL of the repository \u2014 its provider and host are read from it"),connectionId:AK1.string().optional().describe("Legacy: a repo-scoped mcp-github connection in this org")}});import{z as VH}from"zod";var RK1;var hs$=O(()=>{C0();rZ();TK1();RK1=p({name:"REPOSITORY_SEARCH_BRANCHES",description:"Search a repository's branches by a case-insensitive substring of the branch name, filtered server-side by the provider.",annotations:{title:"Search Repository Branches",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:VH.object({...fD,query:VH.string().describe("Substring to match against branch names. Empty returns the first branches alphabetically."),limit:VH.number().int().min(1).max(100).default(30),cursor:VH.string().nullish().describe("Opaque cursor from a previous call's `nextCursor`, to read the next window")}),outputSchema:VH.object({branches:VH.array(VH.object({name:VH.string(),author:VH.string().nullable()})),totalCount:VH.number(),nextCursor:VH.string().nullable()}),handler:async($,Z)=>{await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization context required");return(await J81(Z,Q,pV0($))).searchBranches({query:$.query,limit:$.limit,cursor:$.cursor})}})});import{z as q$}from"zod";function ls$($){let{credentialConnectionId:Z,installationAuthorizedBy:Q,installationRepositoryIds:Y,...X}=$,J=g$1($);return{...X,servable:J===null,accessIssue:J}}function l80($){let{legacyConnectionId:Z,...Q}=$;return Q}async function qK1($,Z,Q){let Y=await $.storage.gitProviderAccounts.get(Q,Z);if(!Y)throw Error("Git account not found");return Y}var XM6,us$,cs$,ms$,ds$,is$,ps$,ns$,ts$,os$,rs$,ss$;var as$=O(()=>{$00();m4();ys$();C0();rZ();hs$();XM6=q$.object({ref:bK$,externalId:q$.string(),defaultBranch:q$.string().nullable(),webUrl:q$.string(),visibility:q$.enum(["public","private","internal"]),description:q$.string().nullable(),updatedAt:q$.string().nullable()}),us$=xK$.extend({servable:q$.boolean(),accessIssue:q$.enum(["revoked","provider_unavailable","installation_missing","authorization_required","no_repositories"]).nullable(),connectedBy:q$.object({name:q$.string()}).nullable()});cs$=p({name:"GIT_PROVIDER_CAPABILITIES",description:"Which git providers this deployment can connect through Studio-owned credentials, and the URLs that start each connect flow.",annotations:{title:"Git provider capabilities",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({}),outputSchema:q$.object({github:q$.object({configured:q$.boolean(),cliConnectPath:q$.string().nullable(),connectPath:q$.string().nullable(),installPath:q$.string().nullable()}),gitlab:q$.object({oauthHosts:q$.array(q$.string()),connectPath:q$.string().nullable()}),bitbucket:q$.object({oauthHosts:q$.array(q$.string()),connectPath:q$.string().nullable()})}),handler:async($,Z)=>{r(Z);let Q=G0(Z),Y=`/api/${Q.slug??Q.id}/git-providers`,X=RK0(),J=X.github.configured,G=X.github.cli;return{github:{configured:J||G,cliConnectPath:G?`${Y}/github/cli/connect`:null,connectPath:J?`${Y}/github/connect`:null,installPath:J?`${Y}/github/install`:null},gitlab:{oauthHosts:X.gitlab.hosts,connectPath:X.gitlab.configured?`${Y}/gitlab/connect`:null},bitbucket:{oauthHosts:X.bitbucket.hosts,connectPath:X.bitbucket.configured?`${Y}/bitbucket/connect`:null}}}}),ms$=p({name:"GIT_ACCOUNT_LIST",description:"List the git provider accounts connected to this organization.",annotations:{title:"List git accounts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({}),outputSchema:q$.object({accounts:q$.array(us$)}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z);return{accounts:(await Z.storage.gitProviderAccounts.listByOrg(Q.id)).map(ls$)}}}),ds$=p({name:"GIT_ACCOUNT_CONNECT_TOKEN",description:"Connect a git provider account with an access token: a GitLab personal, project or group token, or a Bitbucket Cloud repository, project or workspace access token. Bitbucket also needs the workspace slug, because an access token cannot name itself. Validates the token against the provider before storing it encrypted. Prefer this over OAuth when the account should only reach a subset of repositories: a scoped token is narrowed by the provider, an OAuth grant reaches everything its user can.",annotations:{title:"Connect git account with a token",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({type:ma.describe("Provider; gitlab and bitbucket accept tokens (GitHub connects through the App)"),host:q$.string().min(1).describe("Provider host, e.g. gitlab.com, gitlab.acme.com or bitbucket.org"),token:q$.string().min(1).describe("Access token with api scope"),workspace:q$.string().min(1).optional().describe("Bitbucket workspace slug the token belongs to. Required for Bitbucket: an access token cannot name itself, and the workspace is what Studio verifies it against.")}),outputSchema:q$.object({account:us$}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=$.host.trim().toLowerCase();if(!/^[a-z0-9.-]+(:[0-9]+)?$/.test(Y))throw Error("host must be a bare hostname, optionally with a port");let X=$.workspace?.trim().toLowerCase();if($.type==="bitbucket"&&!X)throw Error("Connecting Bitbucket with a token needs the workspace slug the token belongs to");let J=await IB$($.type,Y,$.token,X),G=await Z.storage.gitProviderAccounts.upsert({organizationId:Q.id,type:$.type,host:Y,authKind:"token",externalAccountId:J.externalAccountId,login:J.login,avatarUrl:J.avatarUrl,createdBy:i0(Z)??null});return await Z.storage.gitProviderAccountCredentials.upsert({connectionId:G.id,accessToken:$.token,refreshToken:null,scope:null,expiresAt:null,clientId:null,clientSecret:null,tokenEndpoint:null}),{account:ls$(G)}}}),is$=p({name:"GIT_ACCOUNT_DELETE",description:"Disconnect a git provider account. Its repositories stay linked but lose credentials (they become anonymous clones) until linked to another account.",annotations:{title:"Disconnect git account",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({id:q$.string()}),outputSchema:q$.object({deleted:q$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z);return{deleted:await Z.storage.gitProviderAccounts.delete($.id,Q.id)}}}),ps$=p({name:"REPOSITORY_LIST",description:"List the repositories linked to this organization.",annotations:{title:"List repositories",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({accountId:q$.string().optional().describe("Only repositories of this account")}),outputSchema:q$.object({repositories:q$.array(da.extend({usable:q$.boolean()}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=await Z.storage.repositories.listByOrg(Q.id,{accountId:$.accountId}),X=await Lj(Z,Q.id),J=new Set(X.map((G)=>G.webUrl.toLowerCase()));return{repositories:Y.map((G)=>({...l80(G),usable:J.has(G.webUrl.toLowerCase())}))}}}),ns$=p({name:"REPOSITORY_SEARCH",description:"Search the repositories an account can reach on its provider (not yet linked). Feeds the repository picker.",annotations:{title:"Search provider repositories",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({accountId:q$.string(),query:q$.string().optional(),page:q$.number().int().min(1).optional(),perPage:q$.number().int().min(1).max(100).optional()}),outputSchema:q$.object({repositories:q$.array(XM6),hasMore:q$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=await qK1(Z,Q.id,$.accountId);return KU({db:Z.db,vault:Z.vault},Y).listRepos({query:$.query,page:$.page,perPage:$.perPage})}}),ts$=p({name:"REPOSITORY_LINK",description:"Link a repository to the organization. With an account, the repository is verified against the provider and its facts (id, default branch, visibility) recorded; without one it is linked as an anonymous public clone.",annotations:{title:"Link repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({url:q$.string().min(1).describe("Repository URL (https or ssh), or a bare path like owner/name when accountId is given"),accountId:q$.string().optional().describe("Account whose credentials access the repository")}),outputSchema:q$.object({repository:da}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=i0(Z)??null;if(!$.accountId){let H=zY($.url);if(!H)throw Error("Could not recognise the repository URL. Use a full https URL from GitHub, GitLab or Bitbucket.");let F=await Z.storage.repositories.upsert({organizationId:Q.id,ref:H,createdBy:Y});return{repository:l80(F)}}let X=await qK1(Z,Q.id,$.accountId),J=zY($.url,{provider:X.type,host:X.host});if(!J)throw Error("Could not recognise the repository URL or path");if(J.host!==X.host)throw Error(`Repository is on ${J.host} but the account is on ${X.host}`);let W=await KU({db:Z.db,vault:Z.vault},X).getRepo(J);if(!W)throw Error(`${J.path} was not found on ${J.host} or the account cannot access it`);let K=await Z.storage.repositories.upsert({organizationId:Q.id,ref:W.ref,accountId:X.id,externalId:W.externalId,defaultBranch:W.defaultBranch,visibility:W.visibility,createdBy:Y});return{repository:l80(K)}}}),os$=p({name:"REPOSITORY_CREATE_FROM_TEMPLATE",description:"Create a new private GitHub repository for a site from one of the site templates, owned by the account's user or organization, and link it to the organization.",annotations:{title:"Create repository from template",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({accountId:q$.string().describe("GitHub account whose user or organization owns the repository"),name:fs$.describe("Name of the new repository"),template:bs$}),outputSchema:q$.object({repository:da}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=await qK1(Z,Q.id,$.accountId),X=KU({db:Z.db,vault:Z.vault},Y);if(!X.createRepoFromTemplate)throw Error("Sites can only be created in a GitHub account");let J=await X.createRepoFromTemplate({template:xs$($.template).repo,owner:Y.login,name:$.name,private:!0});if(Y.installationRepositoryIds)await Z.storage.gitProviderAccounts.grantRepository(Y.id,Q.id,Number(J.externalId));let G=await Z.storage.repositories.upsert({organizationId:Q.id,ref:J.ref,accountId:Y.id,externalId:J.externalId,defaultBranch:J.defaultBranch,visibility:J.visibility,createdBy:i0(Z)??null});return{repository:l80(G)}}}),rs$=p({name:"REPOSITORY_UPDATE",description:"Change a linked repository's settings. Currently the sandbox image its sandboxes boot from: `default`, or the name of a variant the cluster renders (e.g. `android`, for mobile apps an agent should run on an Android emulator). A variant the cluster lacks degrades to `default`.",annotations:{title:"Update repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({id:q$.string(),sandboxImage:oF}),outputSchema:q$.object({repository:da}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z),Y=await Z.storage.repositories.setSandboxImage($.id,Q.id,$.sandboxImage);if(!Y)throw Error("Repository not found");return{repository:l80(Y)}}}),ss$=p({name:"REPOSITORY_DELETE",description:"Unlink a repository from the organization. Agents, tasks and syncs that referenced it keep working off their legacy metadata until relinked.",annotations:{title:"Unlink repository",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:q$.object({id:q$.string()}),outputSchema:q$.object({deleted:q$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=G0(Z);return{deleted:await Z.storage.repositories.delete($.id,Q.id)}}})});import{z as M$}from"zod";async function Ni($,Z){let Q=$.organization?.id;if(!Q)throw Error("Organization context required");let Y=await ee($,Q,pV0(Z));if(!Y)throw Error(gs$);return Y}var GM6,WM6,nV0,KM6,es$,$a$,Za$,Qa$,Ya$,Xa$;var Ja$=O(()=>{C0();rZ();TK1();GM6=M$.object({id:M$.string().nullable(),name:M$.string(),state:M$.enum(["queued","running","completed"]),conclusion:M$.enum(["success","failure","neutral","cancelled","skipped","timed_out","action_required"]).nullable(),url:M$.string().nullable(),durationMs:M$.number().nullable(),summary:M$.string().nullable()}),WM6=M$.object({id:M$.string(),author:M$.string(),body:M$.string(),createdAt:M$.string(),updatedAt:M$.string(),url:M$.string()}),nV0=M$.object({number:M$.number(),url:M$.string(),title:M$.string(),body:M$.string(),state:M$.enum(["open","closed","merged"]),draft:M$.boolean(),mergedAt:M$.string().nullable(),base:M$.string(),head:M$.string(),headSha:M$.string(),headRepoPath:M$.string().nullable(),author:M$.string(),conflicting:M$.boolean().nullable(),checks:M$.enum(["pending","passing","failing"]).nullable(),changedFiles:M$.number().nullable()}),KM6=nV0.extend({checkRuns:M$.array(GM6),comments:M$.array(WM6),unresolvedConversations:M$.number(),reviewBlocked:M$.boolean()}),es$=p({name:"CHANGE_REQUEST_STATE",description:"Read a branch's change request with its CI runs, review state and comments.",annotations:{title:"Read Change Request State",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,branch:M$.string().describe("Head branch of the change request to read")}),outputSchema:M$.object({changeRequest:KM6.nullable()}),handler:async($,Z)=>{return await Z.access.check(),{changeRequest:await(await Ni(Z,$)).readDetailed({branch:$.branch})}}}),$a$=p({name:"CHANGE_REQUEST_LAST_MERGED",description:"Read the most recently merged change request into a base branch \u2014 in Fast Preview, the last publish.",annotations:{title:"Read Last Merged Change Request",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,base:M$.string().describe("Branch it was merged into")}),outputSchema:M$.object({changeRequest:nV0.nullable()}),handler:async($,Z)=>{return await Z.access.check(),{changeRequest:await(await Ni(Z,$)).lastMergedInto($.base)}}}),Za$=p({name:"CHANGE_REQUEST_LIST_OPEN",description:"List a repository's open change requests, most recently updated first.",annotations:{title:"List Open Change Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,limit:M$.number().int().min(1).max(100).default(50)}),outputSchema:M$.object({changeRequests:M$.array(nV0)}),handler:async($,Z)=>{return await Z.access.check(),{changeRequests:await(await Ni(Z,$)).listOpen($.limit)}}}),Qa$=p({name:"CHANGE_REQUEST_CHECK_LOG",description:"Read one CI run's report \u2014 a GitHub check run's output markdown, or the tail of a GitLab job's trace. Bitbucket commit statuses carry no report, so this answers nothing there.",annotations:{title:"Read CI Run Report",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,checkId:M$.string().describe("Provider id of the run, from its listing")}),outputSchema:M$.object({report:M$.string().nullable()}),handler:async($,Z)=>{return await Z.access.check(),{report:await(await Ni(Z,$)).readCheckLog($.checkId)}}}),Ya$=p({name:"CHANGE_REQUEST_OPEN",description:"Propose a branch onto another. Returns the branch's existing change request instead of failing when it already has one.",annotations:{title:"Open Change Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,head:M$.string().describe("Branch being proposed"),base:M$.string().describe("Branch it should land on"),title:M$.string(),body:M$.string().optional()}),outputSchema:M$.object({changeRequest:nV0,existed:M$.boolean()}),handler:async($,Z)=>{await Z.access.check();let Q=await Ni(Z,$),Y=await Q.readForBranch($.head);if(Y&&Y.state==="open"){if($.body&&$.body!==Y.body)await Q.describe(Y.number,$.body);return{changeRequest:$.body?{...Y,body:$.body}:Y,existed:!0}}return{changeRequest:await Q.open({head:$.head,base:$.base,title:$.title,body:$.body}),existed:!1}}}),Xa$=p({name:"CHANGE_REQUEST_MERGE",description:"Land a change request. Reports why it could not merge rather than throwing.",annotations:{title:"Merge Change Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:M$.object({...fD,number:M$.number().int().positive(),strategy:M$.enum(["any","squash"]).default("any").describe("`squash` when the result must be one commit; `any` uses whatever the repository allows"),commitTitle:M$.string().optional(),commitMessage:M$.string().optional()}),outputSchema:M$.object({merged:M$.boolean(),reason:M$.enum(["conflict","blocked","rate_limited","not_found","error"]).optional(),detail:M$.string().optional()}),handler:async($,Z)=>{await Z.access.check();let Y=await(await Ni(Z,$)).merge($.number,{strategy:$.strategy,commitTitle:$.commitTitle,commitMessage:$.commitMessage});return Y.merged?{merged:!0}:{merged:!1,reason:Y.reason,detail:Y.detail}}})});import{z as H6}from"zod";function tV0($){if(!$)return"";return typeof $==="string"?$:$.toISOString()}function MK1($){let Z=$.trim();return Z.length>0?Z:void 0}function IK1($,Z){return $===void 0||$.includes(Z)}var FM6,UM6,NM6,BM6,DM6,OM6,LM6,VK1;var Ga$=O(()=>{C0();eT0();FM6=["thread","task","connection"],UM6=H6.object({type:H6.literal("thread"),id:H6.string(),title:H6.string(),created_at:H6.string(),updated_at:H6.string(),virtual_mcp_id:H6.string().nullable(),run_config:H6.record(H6.string(),H6.unknown()).nullable(),status:H6.string().nullable()}),NM6=H6.object({type:H6.literal("task"),id:H6.string(),title:H6.string(),created_at:H6.string(),updated_at:H6.string(),key:H6.string().nullable(),status:H6.string().nullable(),repo:H6.string().nullable()}),BM6=H6.object({type:H6.literal("connection"),id:H6.string(),title:H6.string(),icon:H6.string().nullable(),slug:H6.string().nullable()}),DM6=H6.discriminatedUnion("type",[UM6,NM6,BM6]),OM6=H6.object({query:H6.string().max(256).describe("Free-text search query. Empty string returns the most recently updated resources."),limit:H6.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:H6.array(H6.enum(FM6)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),LM6=H6.object({items:H6.array(DM6),totalCount:H6.number()});VK1=p({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads, task-board cards and MCP connections). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:OM6,outputSchema:LM6,handler:async($,Z)=>{await Z.access.check();let Q=G0(Z),Y=$.limit??20,X=IK1($.types,"thread"),J=IK1($.types,"task"),G=IK1($.types,"connection"),W=[],K=0,[H,F,U]=await Promise.all([X?Z.storage.threads.list(void 0,{limit:Y,offset:0,search:MK1($.query),includeArchived:!1}):null,J?Z.storage.taskBoard.searchByTitle(Q.id,MK1($.query)??"",Y):null,G?Z.storage.connections.searchByTitle(Q.id,MK1($.query)??"",Y):null]);if(H){K+=H.total;for(let N of H.threads)W.push({type:"thread",id:N.id,title:N.title??"",created_at:tV0(N.created_at),updated_at:tV0(N.updated_at),virtual_mcp_id:N.virtual_mcp_id??null,run_config:N.run_config??null,status:IW(N).status})}if(F){K+=F.length;for(let N of F)W.push({type:"task",id:N.id,title:N.title??"",created_at:tV0(N.createdAt),updated_at:tV0(N.updatedAt),key:Q.slug?cm(Q.slug,N.keySeq):null,status:N.status??null,repo:N.repo??null})}if(U){K+=U.length;for(let N of U)W.push({type:"connection",id:N.id,title:N.title,icon:N.icon??null,slug:N.slug??null})}return{items:W,totalCount:K}}})});var Wa$=O(()=>{Ga$()});var Ka$=60;function w3($){return I8(async()=>{let{object:Z}=await gj($);return{object:Z}},{maxAttempts:3,minTimeout:300,isRetriable:(Z)=>vY.isInstance(Z)})}var Fy=O(()=>{x4();K8()});import{z as yX}from"zod";var Bi,kH;var Di=O(()=>{Bi=yX.object({name:yX.string().describe("Short phrase naming the rule \u2014 what it is about, not the rule"),value:yX.string().describe("The rule itself, as markdown. One or two paragraphs; use a bullet list only when there are genuinely several cases. No heading \u2014 the name is the heading.")}),kH=yX.object({companyName:yX.string().describe("The store or brand name. Look for the name that recurs across page titles, block `name` props, and post bodies \u2014 not a product or category name."),description:yX.string().describe("What the company sells and who it sells to, 1-3 sentences. Look at the home and institutional pages."),language:yX.string().describe("BCP-47 tag of the language the prose itself is written in, e.g. pt-BR. Read the post bodies, not any locale config."),tone:yX.string().describe("Tone of voice, described so another writer could reproduce it: how the reader is addressed (which pronoun, which person), sentence length, humor, jargon level, formality, and casing conventions. Read the longest run of real prose you can find \u2014 post bodies if they exist, otherwise page copy and meta descriptions."),targetAudience:yX.string().describe("Who reads this brand's content and what they came looking for. Infer from who the copy addresses and what it assumes the reader already cares about. Say so plainly rather than reaching for marketing personas."),values:yX.array(Bi).describe("Brand values the content should carry, as the brand itself states them. `name` is the value ('Biodiversidade brasileira'), `value` explains what the copy actually claims and the evidence for it \u2014 stated numbers, sourcing commitments. Prefer a value the copy argues for over a generic virtue like 'quality' or 'innovation'."),dos:yX.array(Bi).describe("Instructions a blogpost writer must follow for this brand, derived from patterns the copy consistently follows. `name` names the rule ('Abertura do post'), `value` is the imperative instruction \u2014 instructions, not adjectives: 'Open with the customer's problem, never with the company' beats 'customer-focused'. Any brand-specific word for an ordinary thing gets its own rule, quoted in the brand's language \u2014 for a Portuguese site, \"chame a sacola de 'mochila', nunca de 'carrinho'\"."),avoid:yX.array(Bi).describe("Things a blogpost writer must not do \u2014 banned words, claims, formats, topics. `name` names the guardrail, `value` states the prohibition and why the copy suggests it. Derive them from what the copy consistently never does and from claims the brand is visibly careful about. Do not restate a `dos` entry inverted."),categories:yX.array(yX.string()).describe("Content categories that fit this brand's blog, as plain names \u2014 this is a taxonomy, not a rule, so no body. Take existing category blocks first; with no blog, derive them from the themes the site's own pages keep returning to. Editorial subjects, not the product taxonomy."),competitors:yX.array(Bi).describe("Competitors named explicitly in the content. A brand rarely names them in its own copy \u2014 return an empty array unless a name is actually there, and never guess from the market segment. When one is named, `name` is the competitor and `value` is what the content says about it.")})});import{z as rU}from"zod";async function AM6($,Z,Q){if(!Q.companyName.trim())return[];let Y=await SY($,"web_search");if(!Y)return[];try{let X=await $.aiProviders.activate(Y.credentialId,Z),{text:J}=await AU({model:X.aiSdk.languageModel(Y.modelId),prompt:`Who are the main competitors of ${Q.companyName}? Context on the company: ${Q.description}
|
|
3296
3296
|
|
|
3297
3297
|
For each competitor, say how it positions itself and how it differs from ${Q.companyName}. Name only companies you can actually source. Search in the brand's own market and language (${Q.language||"unknown"}) \u2014 local competitors matter more than global ones.`});if(!J.trim())return[];let G=await M6($,"smart"),W=await $.aiProviders.activate(G.credentialId,Z),{object:K}=await w3({model:W.aiSdk.languageModel(G.modelId),schema:zM6,system:PM6,prompt:`Brand: ${Q.companyName}
|
|
3298
3298
|
Write the values in: ${Q.language||"the brand's own language"}
|
|
@@ -3692,7 +3692,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
3692
3692
|
${J.join(`
|
|
3693
3693
|
`)}`:X}function Om6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3694
3694
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var j98=200,Jm6=12,Wm6,Hm6=300,mS0=3;var vN1=O(()=>{rZ();K8();cS0();Wm6={aheadBy:0,behindBy:0,files:[]}});function wm6($){if(!$||$.includes(".."))return!1;return Lm6.test($)}function P98($){return jm6.includes($)}function bN1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!wm6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function xN1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var Lm6,jm6;var z98=O(()=>{Lm6=/^[\w./@-]+$/;jm6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function i40($,Z){let Q=$?.repository;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function T98($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new fE(T7);let J=await Oj($.storage,X,Y);if(J&&await oB($.storage,J)){let F=await HU($,J,{forceRefresh:!0}).catch((U)=>{throw new fE(U instanceof Error?U.message:T7)});await A98($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new fE("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await mc({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:T7;throw new fE(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await UU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=iB$(F instanceof Error?F.message:String(F));throw U?new fE(N):F});await A98($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function A98($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=pi($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await uj(K,Em6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var Em6=10485760,fE;var fN1=O(()=>{DW();vS0();z10();vK0();Y00();rZ();fE=class fE extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function zm6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!Pm6.test(Z))throw Error(`Invalid branch name: ${$}`)}function qy($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(Am6)])}async function Rm6($,Z){let Q=$.var.studioContext,Y=EU(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=ax(G?.metadata?.runtime);if(W)return W;let K=VT0(Z.virtualMcpMetadata),H=K==="cms"?await BN1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)A10(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function qm6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await CX($.var.studioContext)}catch{return null}}function My($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function si($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=i40(Z,Q);if(!X)throw new x0({provider:"github",status:404,message:"Project has no repository"});let J=G0(Y);return uc(Y,J.id,X)}function gN1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=GN$(Z);if(Y!==void 0)return $.json({error:Q},429,{...Z9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof o6)return $.json({error:Q},409,Z9);let X=jW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,Z9)}return $.json({error:Q},502,Z9)}async function yN1($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function I98($){try{let Z=await si($),Q=await dS0(Z,$.get("vmClaim").branch);return $.json(Q,200,Z9)}catch(Z){return gN1($,Z)}}function p40($,Z){let Y=(nS0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return nS0.set($,X),X.finally(()=>{if(nS0.get($)===X)nS0.delete($)}),Y}async function JQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,Z9);let Y=Q?.runner??My($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...Z9}})}}let D=await B.text(),L=Q?.redactRepoDir?Mm6(D):D,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...Z9}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let D=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${D}`},502)}}function Mm6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function tS0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function Im6($){return V98.includes($)}var Pm6,R98=524288,q98=65536,Am6=1e4,M98=2000,Tm6,nS0,Z9,V98,k98=()=>{let $=new $1;$.use("/:virtualMcpId/:branch/*",Tm6),$.post("/:virtualMcpId/:branch/write",(Q)=>JQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>JQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>JQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>JQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>JQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>JQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>JQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:qy(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return JQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return JQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>JQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>JQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!Im6(Y))return Q.json({error:`step must be one of: ${V98.join(", ")}`},400);let X=Q.get("vmClaim"),J=await BN1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await qm6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,Z9);if(Y==="start"){let G=G0(Q.var.studioContext),W=Sm(X.virtualMcpMetadata);try{await RT0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return JQ(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return oD(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return M58(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return I98(Q);return Z(Q)});let Z=(Q)=>JQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(M98)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return I98(Q);return JQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(M98)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await si(Q),G=await iS0(J,Y.branch,X.base);return Q.json(G,200,Z9)}catch(X){return gN1(Q,X)}return JQ(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,Z9);let Y=My(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return p40(X,async()=>{try{await DN1(W,Y,X);let K=i40(J,G);if(K)await T98(W,Y,X,K)}catch(K){if(K instanceof fE)return Q.json({error:K.message},403,Z9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,Z9)}return JQ(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return p40(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,Z9);try{let G=await si(Q);return await E98(G,Y.branch,J),Q.json({ok:!0},200,Z9)}catch(G){let W=jW(G)===409||G instanceof o6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,Z9)}});return p40(Y.claimName,()=>JQ(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return p40(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await si(Q),H=W.base??await K.getDefaultBranch();return await pS0(K,Y.branch,H),Q.json({ok:!0},200,Z9)}catch(W){return gN1(Q,W)}});let X=My(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return p40(J,async()=>{try{await DN1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,Z9)}return JQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k5({maxSize:R98,onError:(Q)=>Q.json({error:"Payload too large"},413,Z9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=My(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=wN1(F)&&N?[F,U]:X?await Promise.all([tS0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),tS0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await si(Q);return Promise.all([dS0(w,Y.branch),iS0(w,Y.branch)])})();await lG(K,G0(K).id,"suggesting a commit message");let L=await C58(K,B,D);return Q.json(L,200,Z9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,Z9);return Q.json({error:F},502,Z9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k5({maxSize:R98,onError:(Q)=>Q.json({error:"Payload too large"},413,Z9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=My(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=wN1(F)&&N?[F,U]:X?await Promise.all([tS0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),tS0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await si(Q);return Promise.all([dS0(w,Y.branch),iS0(w,Y.branch)])})();await lG(K,G0(K).id,"judging whether a change needs review");let L=await v58(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,Z9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,Z9);return Q.json({error:F},502,Z9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=My(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return yN1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",k5({maxSize:q98,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=My(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=bN1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=xN1(J,W.resolveType);return yN1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",k5({maxSize:q98,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let{runner:Y,claimName:X,virtualMcpMetadata:J}=Q.get("vmClaim"),G;try{G=Y?await Y.getPreviewUrl(X):Cm(J)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W;try{W=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!W||typeof W!=="object"||Array.isArray(W))return Q.json({error:"Invalid JSON body"},400);let K=bN1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!P98(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=xN1(G,K.resolveType);return yN1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var S98=O(()=>{Q8();dW();ii();NN1();j10();T58();qW();_m();R58();TW();tK();q58();I58();R91();P10();PN1();b58();rZ();j5();vN1();z98();IT0();fN1();Pm6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Tm6=_S0(async($,Z)=>{let Q=$.var.studioContext;try{r(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=i0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=G0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{zm6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=C00({orgId:X.id,virtualMcpId:J,branch:G}),H=await t61(Q,G),F=o61(H,Y),U=A58({userId:F,projectRef:K}),N=W.metadata??null,B=await Rm6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let D;try{D=await CX(Q)}catch{D=null}if(!D)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:D,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});nS0=new Map;Z9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};V98=["clone","install","start"]});function C98($,Z,Q){let Y=hN1.get($);if(!Y)Y={pending:null,running:!1},hN1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)km6($,Y);return J}async function km6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await Sm6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)hN1.delete($)}}async function Sm6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await ri(Z,Q),W=await Z.listDecofileEntries(G,Y),K=SN1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let D=CN1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3695
|
-
`;await D98(Z.repo,L);let w=D[0]??`${lS0(Y)}/${TN1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of CN1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await O98(Z,F.values(),X),{decofile:B,skipped:D}=g40(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:oK(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:Cm6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof o6)||J>=Vm6-1)throw N;await h$(J7(2000,200,J,2,0.5))}}}function Cm6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return F61(Y,$.deps.coAuthor)}var Vm6=3,hN1;var _98=O(()=>{$A0();xS0();m4();K8();rZ();cS0();hN1=new Map});import{createHmac as v98,randomBytes as _m6,timingSafeEqual as vm6}from"crypto";function b98(){if(oS0)return oS0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return oS0=$?Buffer.from($):_m6(32),oS0}function uN1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+bm6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=v98("sha256",b98()).update(Y).digest("base64url");return`${Y}.${X}`}function x98($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(v98("sha256",b98()).update(Y).digest("base64url"));if(X.length!==J.length||!vm6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var bm6=21600000,oS0=null;var f98=O(()=>{W$()});function rS0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function xm6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=rS0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function y98($){let Z;try{Z=rS0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=xm6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=rS0(G),K=W&&rS0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as ai}from"zod";function ym6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&fm6.test($)}function c98($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function n40($){let Z=$.get("decofileScope");return uc($.var.studioContext,Z.organizationId,Z.repository)}function t40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof o6)return $.json({error:Q},409);let Y=jW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function m98(){let $=new $1;return $.use("/:virtualMcpId/:branch",l98),$.use("/:virtualMcpId/:branch/*",l98),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await L98(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(y98(X.decofile),200,{...J,"content-type":"application/json"});let G=uN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(c98(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return t40(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await n40(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return t40(Z,X)}}),$.patch("/:virtualMcpId/:branch",hm6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=um6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=h40(X.data)}catch(G){if(G instanceof u40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{bS0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(AN1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await n40(Z),W=await C98(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:pi(Y)},J),K=uN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:c98(Z)})}catch(G){return t40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(jW(W)!==409)throw W;await pS0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(jW(G)===409)return Z.json({error:"merge-conflict"},409);if(jW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return t40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(jW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return t40(Z,Y)}}),$}var fm6,g98=500,h98=1048576,u98=1024,gm6=8388608,hm6,um6,l98;var d98=O(()=>{IT0();xS0();Q8();dW();NN1();vS0();fN1();rZ();_98();f98();vN1();cS0();tK();fm6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;hm6=k5({maxSize:gm6,onError:($)=>$.json({error:"Payload too large"},413)}),um6=ai.object({set:ai.record(ai.string(),ai.unknown()).optional(),delete:ai.array(ai.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=g98,{message:`Patch cannot touch more than ${g98} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=h98),{message:`Each block must be at most ${h98} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=u98),{message:`Each block key must be at most ${u98} characters`}),l98=_S0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!ym6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!x98(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await wJ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Cm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=i40(K,F);if(!U)return $.json({error:"Project has no repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,repository:U,userId:G}),Z()})});var i98=($)=>{let Z=new $1;if(Z.use("*",Ti),Z.use("*",L$8),Z.route("/",D$8($.voiceSessions)),Z.route("/",lk0()),Z.route("/",a$8()),Z.route("/",g$8()),Z.route("/",W58()),Z.route("/",H58()),Z.route("/",e68()),Z.route("/",J58()),Z.route("/",Z58()),Z.route("/",kS0()),Z.route("/tools",L58()),Z.route("/",B58()),Z.route("/",C68({kvStorage:$.kvStorage})),Z.route("/",k68()),Z.route("/fs",d68({getConnection:$.getNatsConnection})),Z.route("/sandbox",k98()),Z.route("/decofile",m98()),Z.route("/",r68()),Z.route("/",p68()),Z.route("/deco-sites",mk0()),Z.route("/hosting",I$8()),Z.route("/monitor",b$8()),Z.route("/sso",fk0()),Z.route("/",SS0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",A$8()),$.mountDevAssets)Z.route("/dev-assets",nk0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ze$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",t68()),Z.route("/mcp",bq0()),Z.route("/mcp/self",qS0()),Z.route("/mcp",yq0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var p98=O(()=>{Q8();O$8();w$8();Rk0();T$8();vF1();V$8();x$8();tk0();SE();VF1();gF1();S68();_68();i68();n68();S$0();PF1();gq0();YN1();o68();s68();$58();Q58();GN1();K58();F58();D58();WN1();w58();KN1();xq0();S98();d98()});import{z as n98}from"zod";class lN1{config;constructor($){this.config=$}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return n98.object({token:n98.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var t98=()=>{};import{createHmac as lm6,timingSafeEqual as cm6}from"crypto";import{z as ei}from"zod";function r98($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return lm6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function s98($,Z){let Q=Buffer.from(JSON.stringify(o98.parse($))).toString("base64url");return`${Q}.${r98(Q,Z)}`}function a98($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(r98(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!cm6(W,G))return null;try{let K=o98.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+n00)return null;return K.data}catch{return null}}var o98;var e98=O(()=>{Pm();o98=ei.object({sessionId:ei.string().uuid(),organizationId:ei.string().min(1).max(256),userId:ei.string().min(1).max(256),threadId:ei.string().min(1).max(256),expiresAt:ei.number().int().positive()})});import{createHash as mm6}from"crypto";import{z as o40}from"zod";function sS0($){return`user.${mm6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mN1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new g1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new ZZ8.Kvm(aS0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:aS0.StorageType.Memory,ttl:QZ8.nanos(n00),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new g1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($){let Z=this.adapter(),Q={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+n00},Y=s98(Q,this.deps.secret),X=await this.kv(),J=sS0(Q),G=await X.get(J),W=G?.operation==="PUT"?cN1.parse(G.json()):null,K=$Z8.encode(JSON.stringify({sessionId:Q.sessionId,expiresAt:Q.expiresAt,characters:0,requests:0}));try{if(G&&W&&W.expiresAt<=Date.now())await X.update(J,K,G.revision);else await X.create(J,K)}catch{throw new g1(409,{message:"Close your other voice session before starting a new one"})}try{let H=await Z.createTranscriptionToken();return{token:Y,transcriptionToken:H,expiresAt:Q.expiresAt}}catch(H){throw await this.release(Q),H}}authorize($,Z){let Q=a98(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new g1(403,{message:"Invalid voice session"});return Q}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=sS0(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?cN1.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new g1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new g1(429,{message:"Voice session speech limit reached"});try{await J.update(G,$Z8.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new g1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(sS0($));if(Q?.operation==="PUT"&&cN1.parse(Q.json()).sessionId===$.sessionId)await Z.delete(sS0($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var aS0,ZZ8,QZ8,cN1,$Z8;var YZ8=O(()=>{zG();Pm();e98();aS0=C(hH(),1),ZZ8=C(Bc(),1),QZ8=C(Zg(),1),cN1=o40.object({sessionId:o40.string().uuid(),expiresAt:o40.number(),characters:o40.number().int().nonnegative(),requests:o40.number().int().nonnegative()}),$Z8=new TextEncoder});function dm6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var im6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},XZ8=()=>{let $=new $1;return $.use("*",im6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await nJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:dm6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var JZ8=O(()=>{Q8();W$();SV0()});import{z as x1}from"zod";function YN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Zd6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Qd6($,Z,Q){try{return JSON.parse($)}catch{throw new KZ8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Yd6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Qd6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function Xd6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?_F(Q.function.parameters):_F({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Jd6($){if(!$)return;return{openai:{response_format:$}}}function Gd6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function GZ8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function WZ8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var pm6=256,nm6,tm6,om6,rm6,sm6,am6,em6,$d6,KZ8,HZ8,FZ8;var UZ8=O(()=>{x4();Q8();ii();jH();nm6=x1.object({type:x1.literal("function"),function:x1.object({name:x1.string(),description:x1.string().optional(),parameters:x1.record(x1.string(),x1.unknown()).optional()})}),tm6=x1.object({id:x1.string(),type:x1.literal("function"),function:x1.object({name:x1.string(),arguments:x1.string()})}),om6=x1.discriminatedUnion("role",[x1.object({role:x1.literal("system"),content:x1.string(),name:x1.string().optional()}),x1.object({role:x1.literal("user"),content:x1.union([x1.string(),x1.array(x1.union([x1.object({type:x1.literal("text"),text:x1.string()}),x1.object({type:x1.literal("image_url"),image_url:x1.object({url:x1.string(),detail:x1.string().optional()})})]))]),name:x1.string().optional()}),x1.object({role:x1.literal("assistant"),content:x1.string().nullable().optional(),name:x1.string().optional(),tool_calls:x1.array(tm6).optional()}),x1.object({role:x1.literal("tool"),content:x1.string(),tool_call_id:x1.string()})]),rm6=x1.object({type:x1.literal("text")}),sm6=x1.object({type:x1.literal("json_object")}),am6=x1.object({type:x1.literal("json_schema"),json_schema:x1.object({name:x1.string(),description:x1.string().optional(),schema:x1.record(x1.string(),x1.unknown()),strict:x1.boolean().optional()})}),em6=x1.union([rm6,sm6,am6]),$d6=x1.object({model:x1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:x1.array(om6),stream:x1.boolean().optional().default(!1),temperature:x1.number().min(0).max(2).optional(),max_tokens:x1.number().positive().optional(),top_p:x1.number().min(0).max(1).optional(),frequency_penalty:x1.number().min(-2).max(2).optional(),presence_penalty:x1.number().min(-2).max(2).optional(),stop:x1.union([x1.string(),x1.array(x1.string())]).optional(),tools:x1.array(nm6).optional(),tool_choice:x1.union([x1.literal("auto"),x1.literal("none"),x1.literal("required"),x1.object({type:x1.literal("function"),function:x1.object({name:x1.string()})})]).optional(),response_format:em6.optional(),user:x1.string().optional()});KZ8=class KZ8 extends Error{constructor($){super($);this.name="MessageConversionError"}};HZ8=new $1;HZ8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(YN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(YN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(YN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=$d6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(YN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Zd6(J.model);if(!G)return $.json(YN("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>rP(E.providerId));if(!j)return $.json(YN("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(YN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Yd6(J.messages),N=J.tools?Xd6(J.tools):void 0,B=Jd6(J.response_format),D=Gd6(),L=Math.floor(Date.now()/1000);if(J.stream)return oD($,async(w)=>{let j=GZ8(F,U,N,J,B,$.req.raw.signal);try{let E=km(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=pm6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:WZ8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=GZ8(F,U,N,J,B,$.req.raw.signal),j=await AU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:WZ8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(YN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(YN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(YN(X.message,"server_error"),500)}});FZ8=HZ8});function Wd6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function NZ8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=i0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!NZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||T9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(p2(U)!==J)continue;if(!Wd6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var BZ8=O(()=>{Q8();dG()});var OZ8;var DZ8=O(()=>{OZ8={name:"decocms",version:"4.417.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function Fd6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Hd6}}var LZ8,Hd6="https://ph.studio.decocms.com",wZ8;var jZ8=O(()=>{Q8();ur();wf();z9();W$();GF1();DZ8();LZ8=new $1;LZ8.get("/",($)=>{let Z={version:OZ8.version,theme:p8$(),...vK().logo&&{logo:vK().logo},...PD()&&{internalUrl:Td1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:U18(),posthog:Fd6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:WO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});wZ8=LZ8});function Iy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function dN1($){return(Iy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function EZ8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Iy($))}&sz=${Z}`}function Ud6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function PZ8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=Ud6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as w$}from"zod";var Nd6,zZ8;var AZ8=O(()=>{Nd6=w$.object({check_id:w$.string(),title:w$.string(),description:w$.string().optional(),impact:w$.string().optional(),why:w$.string().optional(),category:w$.string(),severity:w$.string(),value_band:w$.string().optional(),value_driver:w$.string().optional(),controllability:w$.string().optional(),pages:w$.array(w$.string()),tasks:w$.array(w$.string()),evidence:w$.string(),sample_scope:w$.string().optional(),sources:w$.array(w$.string())}),zZ8=w$.object({domain:w$.string(),brand:w$.string(),favicon:w$.string().optional(),scanned_at:w$.string().nullable(),lang:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),totals:w$.object({measured:w$.number(),registry_total:w$.number(),passed:w$.number(),failed:w$.number(),blocked:w$.number()}),buckets:w$.array(w$.object({id:w$.enum(["critical","important","worth"]),label:w$.string(),items:w$.array(Nd6)})),passing:w$.object({count:w$.number(),items:w$.array(w$.object({check_id:w$.string(),title:w$.string()}))}),not_measured:w$.object({count:w$.number(),groups:w$.array(w$.object({reason:w$.string(),label:w$.string(),count:w$.number(),checks:w$.array(w$.string())}))}),categories:w$.array(w$.object({key:w$.string(),label:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),pass:w$.number(),fail:w$.number()})),screenshots:w$.array(w$.object({url:w$.string(),page_type:w$.string().optional(),viewport:w$.enum(["desktop","mobile"]),image_url:w$.string()}))})});function TZ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function eS0($,Z={}){let Q=await fetch(TZ8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return zZ8.parse(await Q.json())}async function RZ8($,Z={}){let Q=await fetch(TZ8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var iN1=O(()=>{AZ8();kB()});import{join as qZ8}from"path";async function Dd6($){try{let Z=await eS0($,{signal:AbortSignal.timeout(Bd6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||dN1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function sJ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function Od6($,Z){let Q=Iy($),Y=Z?.brand?.trim()||dN1(Q),X=EZ8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=PZ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${sJ(W)}</title>`,`<meta name="description" content="${sJ(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${sJ(W)}" />`,`<meta property="og:description" content="${sJ(K)}" />`,`<meta property="og:url" content="${sJ(G)}" />`,`<meta property="og:image" content="${sJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${sJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${sJ(W)}" />`,`<meta name="twitter:description" content="${sJ(K)}" />`,`<meta name="twitter:image" content="${sJ(H)}" />`,`<meta name="twitter:image:alt" content="${sJ(F)}" />`,`<link rel="canonical" href="${sJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${sJ(G)}.md" />`,`<link rel="icon" href="${sJ(X)}" sizes="any" />`].join(`
|
|
3695
|
+
`;await D98(Z.repo,L);let w=D[0]??`${lS0(Y)}/${TN1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of CN1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await O98(Z,F.values(),X),{decofile:B,skipped:D}=g40(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:oK(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:Cm6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof o6)||J>=Vm6-1)throw N;await h$(J7(2000,200,J,2,0.5))}}}function Cm6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return F61(Y,$.deps.coAuthor)}var Vm6=3,hN1;var _98=O(()=>{$A0();xS0();m4();K8();rZ();cS0();hN1=new Map});import{createHmac as v98,randomBytes as _m6,timingSafeEqual as vm6}from"crypto";function b98(){if(oS0)return oS0;let $;try{let Z=E0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return oS0=$?Buffer.from($):_m6(32),oS0}function uN1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+bm6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=v98("sha256",b98()).update(Y).digest("base64url");return`${Y}.${X}`}function x98($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(v98("sha256",b98()).update(Y).digest("base64url"));if(X.length!==J.length||!vm6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var bm6=21600000,oS0=null;var f98=O(()=>{W$()});function rS0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function xm6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=rS0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function y98($){let Z;try{Z=rS0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=xm6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=rS0(G),K=W&&rS0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as ai}from"zod";function ym6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&fm6.test($)}function c98($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function n40($){let Z=$.get("decofileScope");return uc($.var.studioContext,Z.organizationId,Z.repository)}function t40($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof o6)return $.json({error:Q},409);let Y=jW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function m98(){let $=new $1;return $.use("/:virtualMcpId/:branch",l98),$.use("/:virtualMcpId/:branch/*",l98),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await L98(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(y98(X.decofile),200,{...J,"content-type":"application/json"});let G=uN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(c98(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return t40(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await n40(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return t40(Z,X)}}),$.patch("/:virtualMcpId/:branch",hm6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=um6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=h40(X.data)}catch(G){if(G instanceof u40)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{bS0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(AN1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await n40(Z),W=await C98(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:pi(Y)},J),K=uN1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:c98(Z)})}catch(G){return t40(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(jW(W)!==409)throw W;await pS0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(jW(G)===409)return Z.json({error:"merge-conflict"},409);if(jW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return t40(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await n40(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(jW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return t40(Z,Y)}}),$}var fm6,g98=500,h98=1048576,u98=1024,gm6=8388608,hm6,um6,l98;var d98=O(()=>{IT0();xS0();Q8();dW();NN1();vS0();fN1();rZ();_98();f98();vN1();cS0();tK();fm6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;hm6=k5({maxSize:gm6,onError:($)=>$.json({error:"Payload too large"},413)}),um6=ai.object({set:ai.record(ai.string(),ai.unknown()).optional(),delete:ai.array(ai.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=g98,{message:`Patch cannot touch more than ${g98} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=h98),{message:`Each block must be at most ${h98} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=u98),{message:`Each block key must be at most ${u98} characters`}),l98=_S0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!ym6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!x98(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await wJ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Cm(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=i40(K,F);if(!U)return $.json({error:"Project has no repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,repository:U,userId:G}),Z()})});var i98=($)=>{let Z=new $1;if(Z.use("*",Ti),Z.use("*",L$8),Z.route("/",D$8($.voiceSessions)),Z.route("/",lk0()),Z.route("/",a$8()),Z.route("/",g$8()),Z.route("/",W58()),Z.route("/",H58()),Z.route("/",e68()),Z.route("/",J58()),Z.route("/",Z58()),Z.route("/",kS0()),Z.route("/tools",L58()),Z.route("/",B58()),Z.route("/",C68({kvStorage:$.kvStorage})),Z.route("/",k68()),Z.route("/fs",d68({getConnection:$.getNatsConnection})),Z.route("/sandbox",k98()),Z.route("/decofile",m98()),Z.route("/",r68()),Z.route("/",p68()),Z.route("/deco-sites",mk0()),Z.route("/hosting",I$8()),Z.route("/monitor",b$8()),Z.route("/sso",fk0()),Z.route("/",SS0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",A$8()),$.mountDevAssets)Z.route("/dev-assets",nk0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",ze$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",t68()),Z.route("/mcp",bq0()),Z.route("/mcp/self",qS0()),Z.route("/mcp",yq0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var p98=O(()=>{Q8();O$8();w$8();Rk0();T$8();vF1();V$8();x$8();tk0();SE();VF1();gF1();S68();_68();i68();n68();S$0();PF1();gq0();YN1();o68();s68();$58();Q58();GN1();K58();F58();D58();WN1();w58();KN1();xq0();S98();d98()});import{z as n98}from"zod";class lN1{config;constructor($){this.config=$}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return n98.object({token:n98.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var t98=()=>{};import{createHmac as lm6,timingSafeEqual as cm6}from"crypto";import{z as ei}from"zod";function r98($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return lm6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function s98($,Z){let Q=Buffer.from(JSON.stringify(o98.parse($))).toString("base64url");return`${Q}.${r98(Q,Z)}`}function a98($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(r98(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!cm6(W,G))return null;try{let K=o98.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+n00)return null;return K.data}catch{return null}}var o98;var e98=O(()=>{Pm();o98=ei.object({sessionId:ei.string().uuid(),organizationId:ei.string().min(1).max(256),userId:ei.string().min(1).max(256),threadId:ei.string().min(1).max(256),expiresAt:ei.number().int().positive()})});import{createHash as mm6}from"crypto";import{z as o40}from"zod";function sS0($){return`user.${mm6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class mN1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new g1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new ZZ8.Kvm(aS0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:aS0.StorageType.Memory,ttl:QZ8.nanos(n00),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new g1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($){let Z=this.adapter(),Q={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+n00},Y=s98(Q,this.deps.secret),X=await this.kv(),J=sS0(Q),G=await X.get(J),W=G?.operation==="PUT"?cN1.parse(G.json()):null,K=$Z8.encode(JSON.stringify({sessionId:Q.sessionId,expiresAt:Q.expiresAt,characters:0,requests:0}));try{if(G&&W&&W.expiresAt<=Date.now())await X.update(J,K,G.revision);else await X.create(J,K)}catch{throw new g1(409,{message:"Close your other voice session before starting a new one"})}try{let H=await Z.createTranscriptionToken();return{token:Y,transcriptionToken:H,expiresAt:Q.expiresAt}}catch(H){throw await this.release(Q),H}}authorize($,Z){let Q=a98(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new g1(403,{message:"Invalid voice session"});return Q}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=sS0(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?cN1.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new g1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new g1(429,{message:"Voice session speech limit reached"});try{await J.update(G,$Z8.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new g1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(sS0($));if(Q?.operation==="PUT"&&cN1.parse(Q.json()).sessionId===$.sessionId)await Z.delete(sS0($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var aS0,ZZ8,QZ8,cN1,$Z8;var YZ8=O(()=>{zG();Pm();e98();aS0=C(hH(),1),ZZ8=C(Bc(),1),QZ8=C(Zg(),1),cN1=o40.object({sessionId:o40.string().uuid(),expiresAt:o40.number(),characters:o40.number().int().nonnegative(),requests:o40.number().int().nonnegative()}),$Z8=new TextEncoder});function dm6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var im6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},XZ8=()=>{let $=new $1;return $.use("*",im6),$.get("/",async(Z)=>{let Q=E0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await nJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:dm6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var JZ8=O(()=>{Q8();W$();SV0()});import{z as x1}from"zod";function YN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Zd6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Qd6($,Z,Q){try{return JSON.parse($)}catch{throw new KZ8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Yd6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Qd6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function Xd6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?_F(Q.function.parameters):_F({type:"object",properties:{}});return[Q.function.name,i$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Jd6($){if(!$)return;return{openai:{response_format:$}}}function Gd6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function GZ8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function WZ8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var pm6=256,nm6,tm6,om6,rm6,sm6,am6,em6,$d6,KZ8,HZ8,FZ8;var UZ8=O(()=>{x4();Q8();ii();jH();nm6=x1.object({type:x1.literal("function"),function:x1.object({name:x1.string(),description:x1.string().optional(),parameters:x1.record(x1.string(),x1.unknown()).optional()})}),tm6=x1.object({id:x1.string(),type:x1.literal("function"),function:x1.object({name:x1.string(),arguments:x1.string()})}),om6=x1.discriminatedUnion("role",[x1.object({role:x1.literal("system"),content:x1.string(),name:x1.string().optional()}),x1.object({role:x1.literal("user"),content:x1.union([x1.string(),x1.array(x1.union([x1.object({type:x1.literal("text"),text:x1.string()}),x1.object({type:x1.literal("image_url"),image_url:x1.object({url:x1.string(),detail:x1.string().optional()})})]))]),name:x1.string().optional()}),x1.object({role:x1.literal("assistant"),content:x1.string().nullable().optional(),name:x1.string().optional(),tool_calls:x1.array(tm6).optional()}),x1.object({role:x1.literal("tool"),content:x1.string(),tool_call_id:x1.string()})]),rm6=x1.object({type:x1.literal("text")}),sm6=x1.object({type:x1.literal("json_object")}),am6=x1.object({type:x1.literal("json_schema"),json_schema:x1.object({name:x1.string(),description:x1.string().optional(),schema:x1.record(x1.string(),x1.unknown()),strict:x1.boolean().optional()})}),em6=x1.union([rm6,sm6,am6]),$d6=x1.object({model:x1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:x1.array(om6),stream:x1.boolean().optional().default(!1),temperature:x1.number().min(0).max(2).optional(),max_tokens:x1.number().positive().optional(),top_p:x1.number().min(0).max(1).optional(),frequency_penalty:x1.number().min(-2).max(2).optional(),presence_penalty:x1.number().min(-2).max(2).optional(),stop:x1.union([x1.string(),x1.array(x1.string())]).optional(),tools:x1.array(nm6).optional(),tool_choice:x1.union([x1.literal("auto"),x1.literal("none"),x1.literal("required"),x1.object({type:x1.literal("function"),function:x1.object({name:x1.string()})})]).optional(),response_format:em6.optional(),user:x1.string().optional()});KZ8=class KZ8 extends Error{constructor($){super($);this.name="MessageConversionError"}};HZ8=new $1;HZ8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(YN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(YN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(YN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=$d6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(YN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Zd6(J.model);if(!G)return $.json(YN("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>rP(E.providerId));if(!j)return $.json(YN("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(YN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Yd6(J.messages),N=J.tools?Xd6(J.tools):void 0,B=Jd6(J.response_format),D=Gd6(),L=Math.floor(Date.now()/1000);if(J.stream)return oD($,async(w)=>{let j=GZ8(F,U,N,J,B,$.req.raw.signal);try{let E=km(j),P=!1,T=0,z="",A=async()=>{if(z.length===0)return;let q=z;z="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!P&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),P=!0;if(q.type==="text-delta"){if(z+=q.text,z.length>=pm6)await A()}else if(q.type==="tool-call"){await A();let x=T++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:x,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:WZ8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let P=E;console.error("[openai-compat:stream] Error:",P.message),await w.writeSSE({data:JSON.stringify({error:{message:P.message,type:"server_error"}})})}});else{let w=GZ8(F,U,N,J,B,$.req.raw.signal),j=await AU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((P)=>({id:P.toolCallId,type:"function",function:{name:P.toolName,arguments:JSON.stringify("input"in P?P.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:WZ8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(YN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(YN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(YN(X.message,"server_error"),500)}});FZ8=HZ8});function Wd6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function NZ8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=i0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!NZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||T9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(p2(U)!==J)continue;if(!Wd6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var BZ8=O(()=>{Q8();dG()});var OZ8;var DZ8=O(()=>{OZ8={name:"decocms",version:"4.417.5",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^3.1.0","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^4.0.17","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^7.0.107","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function Fd6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Hd6}}var LZ8,Hd6="https://ph.studio.decocms.com",wZ8;var jZ8=O(()=>{Q8();ur();wf();z9();W$();GF1();DZ8();LZ8=new $1;LZ8.get("/",($)=>{let Z={version:OZ8.version,theme:p8$(),...vK().logo&&{logo:vK().logo},...PD()&&{internalUrl:Td1()},...E0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!E0().firecrawlApiKey,hostingEnabled:!!E0().controlplaneRestUrl&&!!E0().controlplaneServiceToken,hostingControlPlaneGa:E0().hostingControlPlaneGa,monitorEnabled:!!E0().clickhouseAnalyticsUrl&&!!E0().clickhouseAnalyticsPassword,monitorGa:E0().monitorGa,plansEnabled:E0().plansEnabled,auth:U18(),posthog:Fd6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:WO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});wZ8=LZ8});function Iy($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function dN1($){return(Iy($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function EZ8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Iy($))}&sz=${Z}`}function Ud6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function PZ8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=Ud6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as w$}from"zod";var Nd6,zZ8;var AZ8=O(()=>{Nd6=w$.object({check_id:w$.string(),title:w$.string(),description:w$.string().optional(),impact:w$.string().optional(),why:w$.string().optional(),category:w$.string(),severity:w$.string(),value_band:w$.string().optional(),value_driver:w$.string().optional(),controllability:w$.string().optional(),pages:w$.array(w$.string()),tasks:w$.array(w$.string()),evidence:w$.string(),sample_scope:w$.string().optional(),sources:w$.array(w$.string())}),zZ8=w$.object({domain:w$.string(),brand:w$.string(),favicon:w$.string().optional(),scanned_at:w$.string().nullable(),lang:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),totals:w$.object({measured:w$.number(),registry_total:w$.number(),passed:w$.number(),failed:w$.number(),blocked:w$.number()}),buckets:w$.array(w$.object({id:w$.enum(["critical","important","worth"]),label:w$.string(),items:w$.array(Nd6)})),passing:w$.object({count:w$.number(),items:w$.array(w$.object({check_id:w$.string(),title:w$.string()}))}),not_measured:w$.object({count:w$.number(),groups:w$.array(w$.object({reason:w$.string(),label:w$.string(),count:w$.number(),checks:w$.array(w$.string())}))}),categories:w$.array(w$.object({key:w$.string(),label:w$.string(),score:w$.number().nullable(),band:w$.string().nullable(),pass:w$.number(),fail:w$.number()})),screenshots:w$.array(w$.object({url:w$.string(),page_type:w$.string().optional(),viewport:w$.enum(["desktop","mobile"]),image_url:w$.string()}))})});function TZ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function eS0($,Z={}){let Q=await fetch(TZ8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return zZ8.parse(await Q.json())}async function RZ8($,Z={}){let Q=await fetch(TZ8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var iN1=O(()=>{AZ8();kB()});import{join as qZ8}from"path";async function Dd6($){try{let Z=await eS0($,{signal:AbortSignal.timeout(Bd6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||dN1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function sJ($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function Od6($,Z){let Q=Iy($),Y=Z?.brand?.trim()||dN1(Q),X=EZ8(Q,128),G=`${(E0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=PZ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${sJ(W)}</title>`,`<meta name="description" content="${sJ(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${sJ(W)}" />`,`<meta property="og:description" content="${sJ(K)}" />`,`<meta property="og:url" content="${sJ(G)}" />`,`<meta property="og:image" content="${sJ(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${sJ(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${sJ(W)}" />`,`<meta name="twitter:description" content="${sJ(K)}" />`,`<meta name="twitter:image" content="${sJ(H)}" />`,`<meta name="twitter:image:alt" content="${sJ(F)}" />`,`<link rel="canonical" href="${sJ(G)}" />`,`<link rel="alternate" type="text/markdown" href="${sJ(G)}.md" />`,`<link rel="icon" href="${sJ(X)}" sizes="any" />`].join(`
|
|
3696
3696
|
`)}function Ld6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
3697
3697
|
</head>`)}function MZ8($){let Z=new $1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Iy(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(qZ8($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${HW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(wd6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let Y=Iy(Q.req.param("file").replace(/\.md$/,""));try{let X=await RZ8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(jd6)});if(X===null)return Q.text("Deco Score not found",404);return Q.body(X,200,{"Content-Type":"text/markdown; charset=utf-8","Cache-Control":"public, max-age=600, stale-while-revalidate=3600","Access-Control-Allow-Origin":"*"})}catch{return Q.text("Deco Score unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?qZ8($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await Dd6(Iy(Y)),K=Od6(Y,W);return Q.html(Ld6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var Bd6=2500,wd6=1e4,jd6=1e4;var IZ8=O(()=>{Q8();kB();iN1();W$()});function $C0($,Z){return fetch(`${HW({})}${$}`,Z)}async function Ed6($,Z){let Q=await eS0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function zd6($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",Y=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:Y}}var Pd6,sD,VZ8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},kZ8;var SZ8=O(()=>{Q8();nG();kB();iN1();Pd6=new Set(["complete","errored","terminated","unknown"]);sD=new $1;sD.use("*",async($,Z)=>{let Q=await v8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});sD.use("/link-token/*",VZ8);sD.use("/suggest",VZ8);sD.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.req.query("lang")?.trim()||void 0;try{return $.json(await Ed6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});sD.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=zd6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await $C0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Cw({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});sD.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await $C0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${Cw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Pd6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});sD.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await $C0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});sD.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await $C0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});kZ8=sD});var Ad6=1048576,pN1;var CZ8=O(()=>{Q8();dW();W$();iH1();pN1=new $1;pN1.post("/webhook",k5({maxSize:Ad6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=E0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!R08(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=q08(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await M08(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as Td6}from"crypto";function Md6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return Td6(Buffer.from(X),Buffer.from(Y))}function Id6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function _Z8($){let Z=new $1;return Z.post("/webhook",k5({maxSize:Rd6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!Md6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!qd6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});return y00().then((U)=>U?.markTenantPoolsDirty(`https://github.com/${F}`,H)).catch((U)=>console.warn(`[github-webhook] tenant pool refresh for ${F}@${H} failed: ${U instanceof Error?U.message:String(U)}`)),Q.json({ok:!0})}let W=Id6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Vd6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Vd6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await UC$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Rd6=5242880,qd6;var vZ8=O(()=>{Q8();dW();TW();q7();qd6=new Set(["check_suite","issue_comment"])});import{DBOS as tN1,SchedulerMode as kd6}from"@dbos-inc/dbos-sdk";async function Cd6(){try{return await _d6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function _d6(){if(!f00())return null;let $=await y00(),{RemoteSandboxProvider:Z}=await Promise.resolve().then(() => (g61(),y61));if(!($ instanceof Z))return null;let{db:Q}=O8(),{sandboxes:Y,pools:X}=await $.list(),J=Date.now(),G=mz$({sandboxes:Y,pools:X,records:await dz$(Q,Y,X),now:J}),{batches:W,failed:K}=await iz$(G,bK0(Q,new JX(E0().encryptionKey)),{now:J,orgFsLifetimeMs:wA0}),H=0,F=0;for(let U of W){let N=await $.pushCredentials(U);H+=N.stored,F+=N.kept}return{sandboxes:Y.length,pushed:H,kept:F,refused:G.refused,failed:K}}async function vd6($,Z){let Q=await tN1.runStep(Cd6,{name:"pushSandboxCredentials"});if(Q&&(Q.refused>0||Q.failed>0))console.warn(`[sandbox-credential-push] ${Q.sandboxes} sandboxes: pushed ${Q.pushed}, kept ${Q.kept}, refused ${Q.refused}, failed ${Q.failed}`)}function bZ8(){if(nN1)return;if(!E0().agentSandboxEnabled||!f00())return;nN1=tN1.registerWorkflow(vd6,{name:"sandboxCredentialPushWorkflow"}),tN1.registerScheduled(nN1,{name:"sandboxCredentialPushWorkflow",crontab:Sd6,mode:kd6.ExactlyOncePerIntervalWhenActive})}var Sd6="1-59/10 * * * *",nN1=null;var xZ8=O(()=>{AG();tO();F81();jA0();TW();W$()});function fZ8($){let Z=new gD($.db,new JX($.encryptionKey)),Q=new $1;return Q.get("/attachments/:token",async(Y)=>{let X=Mk$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new xQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var yZ8=O(()=>{Q8();tO();r91();dj()});function gZ8($){let Z=new gD($.db,new JX($.encryptionKey));async function Q(X,J){let G=to$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await VW($.db,W.organizationId);if(!K)return;if(await vV0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new $1;return Y.post("/webhook/:secret",k5({maxSize:bd6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var bd6=1048576;var hZ8=O(()=>{Q8();dW();tO();bV0();Uf()});import{DBOS as ZC0,SchedulerMode as xd6}from"@dbos-inc/dbos-sdk";function lZ8($){rN1=$}function cZ8(){if(!rN1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return rN1}function mZ8(){let $=cZ8();return new gD($.db,new JX($.encryptionKey))}async function gd6($,Z){try{let Q=await mZ8().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await VW(cZ8().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new xQ(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${uZ8}m"`,K=0,H;for(let F=0;F<yd6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=oo$(N,N.changelog?.histories??[],Z);for(let D of B)if(await vV0(Y,Q,D)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function hd6($,Z){let Q=new Date($.getTime()-uZ8*60000),Y=await ZC0.runStep(()=>mZ8().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>ZC0.runStep(()=>gd6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function dZ8(){if(oN1)return;oN1=ZC0.registerWorkflow(hd6,{name:"jiraTriggerSweepWorkflow"}),ZC0.registerScheduled(oN1,{name:"jiraTriggerSweepWorkflow",crontab:fd6,mode:xd6.ExactlyOncePerIntervalWhenActive})}var fd6="7-59/10 * * * *",uZ8=35,yd6=5,rN1=null,oN1=null;var iZ8=O(()=>{tO();Uf();dj();bV0()});function pZ8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var nZ8,ud6,ld6,tZ8;var oZ8=O(()=>{Q8();zG();em();Pc();nZ8=new $1,ud6=["range","if-none-match","if-modified-since"],ld6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];nZ8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Ai($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new g1(401,{message:"Authentication required"})}if(!Q)throw new g1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new g1(400,{message:"Missing file key"});let X=await H$0(Y,Z);if(!X)throw new g1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&NW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new g1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return pZ8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of ud6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new g1(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new g1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of ld6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),pZ8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});tZ8=nZ8});var r40=b((Vy)=>{var cd6=Vy&&Vy.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),md6=Vy&&Vy.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))cd6(Z,$,Q)};Object.defineProperty(Vy,"__esModule",{value:!0});md6(GG(),Vy)});var aZ8=b((rZ8)=>{Object.defineProperty(rZ8,"__esModule",{value:!0});rZ8.version=void 0;rZ8.version="3.4.0"});var Z78=b((XN)=>{var dd6=XN&&XN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(XN,"__esModule",{value:!0});XN.NodeTransport=XN.VERSION=void 0;XN.nodeResolveHost=rd6;var d5=r40(),id6=q0("net"),sN1=q0("tls"),pd6=q0("path"),eZ8=q0("fs"),nd6=dd6(q0("dns")),td6=aZ8();XN.VERSION=td6.version;var od6="nats.js";class $78{socket;version;lang;yields=[];signal=(0,d5.deferred)();closedNotification=(0,d5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=od6,this.version=XN.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,d5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw d5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new d5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new d5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,d5.deferred)(),Q,Y=(0,id6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,d5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=d5.DataBuffer.concat(...this.yields),X=(0,d5.extractProtocolMessage)(Y);if(X!=="")try{let J=d5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,d5.deferred)();try{if($=(0,pd6.resolve)($),!(0,eZ8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,eZ8.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,d5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new d5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,d5.deferred)();try{let X=(0,sN1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new d5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,d5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new d5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,d5.deferred)();try{let Y=(0,sN1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new d5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,d5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,d5.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof sN1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,d5.render)($)}`);let Z=(0,d5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,d5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,d5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}XN.NodeTransport=$78;function rd6($){let Z=(0,d5.deferred)();return nd6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var G78=b((J78)=>{Object.defineProperty(J78,"__esModule",{value:!0});J78.connect=sd6;var Q78=Z78(),Y78=r40(),X78=r40();function sd6($={}){if((0,X78.hasWsProtocol)($))return Promise.reject(X78.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Y78.setTransportFactory)({factory:()=>{return new Q78.NodeTransport},dnsResolveFn:Q78.nodeResolveHost}),Y78.NatsConnectionImpl.connect($)}});var W78=b((aD)=>{var ed6=aD&&aD.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),$i6=aD&&aD.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))ed6(Z,$,Q)};Object.defineProperty(aD,"__esModule",{value:!0});aD.connect=void 0;var Zi6=G78();Object.defineProperty(aD,"connect",{enumerable:!0,get:function(){return Zi6.connect}});$i6(r40(),aD)});function U78($){let Z=$?.connectFn??Ji6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let D=0;while(!J)try{Q=await Z({servers:N,timeout:Xi6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let L=J7(Yi6,Qi6,D-1,2,0.5);await h$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?K78.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=F78.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function Ji6($){return H78.connect($)}var K78,H78,F78,Qi6=100,Yi6=3000,Xi6=3000;var N78=O(()=>{K8();K78=C(Zg(),1),H78=C(W78(),1),F78=C(hH(),1)});function QC0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,Y=$?.updateRecencyOnGet??!1,X=new Map;function J(){if(X.size<=Q)return;let G=Date.now();for(let[W,K]of X)if(K.expiresAt<=G)X.delete(W);while(X.size>Q){let W=X.keys().next().value;if(W===void 0)break;X.delete(W)}}return{get(G){let W=X.get(G);if(!W)return;if(W.expiresAt<=Date.now()){X.delete(G);return}if(Y)X.delete(G),X.set(G,W);return W.value},set(G,W){X.delete(G),X.set(G,{value:W,expiresAt:Date.now()+Z}),J()},delete(G){X.delete(G)},clear(){X.clear()},size(){return X.size}}}function YC0($,Z){return`${$}.${Z}`}class aN1{cache;constructor($){this.cache=QC0({ttlMs:$?.ttlMs??Gi6,maxSize:$?.maxSize??Wi6})}async get($,Z){return this.cache.get(YC0($,Z))??null}async set($,Z,Q){this.cache.set(YC0($,Z),Q)}async invalidate($,Z){this.cache.delete(YC0($,Z)),this.cache.delete(YC0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Gi6=600000,Wi6=5000;var B78=()=>{};function XC0($,Z){return`${$}:${Z}`}function eN1($){let Z=QC0({ttlMs:$?.ttlMs??Ki6,maxSize:$?.maxSize??Hi6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(D78,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(XC0(K,H))},set(K,H,F){Z.set(XC0(K,H),F)},invalidate(K,H){Z.delete(XC0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(D78),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(XC0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var D78="studio.ai-provider-keys.invalidate",Ki6=30000,Hi6=5000;var O78=()=>{};class $B1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var L78=($)=>{let Z;return()=>Z??=$()},ZB1,QB1;var w78=O(()=>{_6();ZB1=L78(()=>A$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),QB1=L78(()=>A$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function Li6($=P78){return{name:CU,subjects:[`${XQ1}.>`],storage:_H.StorageType.File,max_age:Ni6,max_bytes:Di6,max_msgs_per_subject:Oi6,discard:_H.DiscardPolicy.Old,retention:_H.RetentionPolicy.Limits,duplicate_window:Bi6,num_replicas:$}}class z78{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function j78($){let Z=E78.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function Pi6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Ui6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function zi6($,Z){return $.info?.cluster?Z:1}function Ai6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class YB1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Y,X)=>{let J=Li6(X);try{await Y.streams.info(CU),await Y.streams.update(CU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(CU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(CU),await Y.streams.add(J);else throw G}},Q=await I8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await _H.jetstreamManager($),X=zi6($,P78);try{await Z(Y,X)}catch(J){if(X<=1||!Ai6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Kd});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=Pi6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=ov$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=GQ1(H,{runId:Z}),N=performance.now()-F;ZB1().record(N),QB1().add(1,{"org.id":Y??"unknown"}),Ei6?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?j78(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),ji6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await I8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:j78(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Kd}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=GQ1(Z,{runId:$,dedup:Q});ZB1().record(performance.now()-X),QB1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=tv$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?_H.DeliverPolicy.New:_H.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=aj($),W;try{W=await I8(async()=>{return(await Y.consumers.get(CU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Kd})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=Qq0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(aR0()).pipeThrough(eR0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){D(),L.close();return}let E=j;if(E.kind==="done"){if(J){D(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(CU,{filter:aj($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var _H,E78,Fi6=($)=>{let Z;return()=>Z??=$()},Ui6,Ni6=86400000000000,Bi6=120000000000,Di6=4294967296,P78,Oi6=500000,wi6,ji6,Ei6;var A78=O(()=>{K8();WQ1();Yq0();$q0();_6();w78();_H=C(hH(),1),E78=C(Zg(),1),Ui6=Fi6(()=>A$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),P78=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);wi6=process.env.STREAM_ENCODE_TRACE==="1",ji6=process.env.DECOPILOT_STREAM_TRACE==="1";Ei6=wi6?new z78:null});function JC0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,ZF(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var T78=O(()=>{d8()});class XB1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function Ti6($,Z,Q={}){let Y=$.startsWith("thread:")?FH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function JB1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await PU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await Nm($,{threadId:X,runBranch:G?.branch}),K=await ee($,Q,G81(J)).catch(()=>null);if(!K){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}let H=Ti6(W,await RA0($,X),{flat:cx(K.repo.provider)});for(let F of H){let U=await K.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:K.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await G3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var R78=O(()=>{rZ();qW();q7()});async function q78($,Z,Q){let Y=Z.organizationId;if(!_X(Z))return!1;if(!Nf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=JU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await r6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),B8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var M78=O(()=>{v4();xY();nm();DH();O9()});function Si6($){return $ instanceof TX}function I78($,Z){return Z-$>=Vi6}class GB1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??Ri6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??Mi6,Q=this.options.itemIntervalMs??qi6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,Y)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-d91),B71);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-ki6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await F71(this.taskBoard,X,Y),await U71(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==T$.progress||_X(W)||W.assigneeId!==z8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await JB1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!I78(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:T$.progress,to:T$.review,reason:H}}).catch(()=>{}),B8(J,F),await OH(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==T$.progress||G.assigneeId!==z8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await LH(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),Si6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+Ii6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==T$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),B8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!I78(cB(Q,Z.reviewCycleStartedAt),Date.now()))return;await OH($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!_X(Y))return!1;let X=Y.assigneeId===z8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await JB1(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await rm(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await q78(G,Y,W))return!0;if(await eb$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!G71(W))return!1;return await tm(G,Y,{previewMatchesHead:W71(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await tj($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var Ri6=60000,qi6=300000,Mi6=50,Ii6=60000,Vi6=900000,ki6=120000;var V78=O(()=>{v4();DR0();R78();kU();P$0();DH();M78();O9();wW();D71();q7();p10();om()});import{readdir as Ci6,rm as GC0}from"fs/promises";import{join as WC0}from"path";async function KC0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-_i6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await ky($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await k78($,X,Z);else if(!X.startsWith(".")){let J=WC0($,X),G=await ky(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await k78(J,K,Z)}if((await ky(J)).length===0)await GC0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function k78($,Z,Q){let Y=0,X=WC0($,Z),J=await ky(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=WC0(X,W),H=await ky(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=WC0(K,U);await GC0(B,{recursive:!0,force:!0}),Y++}}if((await ky(K)).length===0)await GC0(K,{recursive:!0,force:!0})}if((await ky(X)).length===0)await GC0(X,{recursive:!0,force:!0});return Y}async function ky($){try{return(await Ci6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var _i6=30;var WB1=()=>{};import{DBOS as KB1,SchedulerMode as vi6}from"@dbos-inc/dbos-sdk";async function xi6(){let $=[oW(),gy(),UN()],Z=0;for(let Q of $)try{Z+=await KC0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function fi6($,Z){await KB1.runStep(()=>xi6(),{name:"monitoringRetention"})}function C78(){if(S78)return;S78=!0;let $=KB1.registerWorkflow(fi6,{name:"monitoringRetentionWorkflow"});KB1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:bi6,mode:vi6.ExactlyOncePerIntervalWhenActive})}var bi6="23 4 * * *",S78=!1;var _78=O(()=>{T3();WB1()});function v78($){return async(Z,Q)=>{let Y=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await fQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await m2($.db,Z,Y.role);return X.boundAuth=yH1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new kz(Q,void 0,X.boundAuth,Y.role,"self"),nj(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var b78=O(()=>{TK();QU()});function yi6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function gi6(){return{services:yi6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function ui6(){for(let $ of hi6)$()}function x78($){let Z=[...HB1.logs,$];HB1={...HB1,logs:Z.length>500?Z.slice(-500):Z},ui6()}function FB1(){return li6}var HB1,hi6,li6=!1;var UB1=O(()=>{HB1=gi6(),hi6=new Set});import{EventEmitter as ci6}from"events";var NB1;var f78=O(()=>{UB1();NB1=new ci6;NB1.on("request",($)=>{x78($)})});function y78(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=$p(N.params.name),D=N.params.arguments||{},L=Object.keys(D).map((j)=>$p(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${Q9.tool}${B}${Q9.dim}(${w})${Q9.reset}`}else if(N.method)J=`${Q9.dim}${$p(N.method)}${Q9.reset}`}}catch{}}let W=$p(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${Q9.mcp}${$p(F.slice(0,12))}\u2026${Q9.reset}`}else if(X==="/mcp")W=`${Q9.mcp}/mcp${Q9.reset}`;else if(X==="/mcp/registry")W=`${Q9.mcp}/mcp/registry${Q9.reset}`;let K=di6(Y),H=G?"\u25C0":"\u2190";if(!FB1())console.log(`${Q9.dim}${H}${Q9.reset} ${K}${Y}${Q9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=mi6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";if(!FB1())console.log(`${Q9.dim}${D}${Q9.reset} ${K}${Y}${Q9.reset} ${W}${J?` ${J}`:""} ${N}${U}${Q9.reset} ${Q9.duration}${B}${Q9.reset}`);NB1.emit("request",{method:Y,path:$p(X),status:U,duration:F,timestamp:new Date})}}}var Q9,mi6=($)=>{if($>=500)return Q9.serverError;if($>=400)return Q9.clientError;if($>=300)return Q9.redirect;return Q9.ok},di6=($)=>{return Q9[$]||Q9.reset},$p=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var g78=O(()=>{UB1();f78();Q9={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as c78}from"crypto";import{mkdir as ii6,readdir as pi6,rm as h78,stat as m78}from"fs/promises";import{join as DB1,relative as ni6}from"path";import{z as e$}from"zod";function i78($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return DB1(ti6,Z)}function p78($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function BB1($,Z){let Q=i78($),Y=p78(Z);return DB1(Q,Y)}function oi6($,Z,Q,Y){let X=E0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return c78("sha256",X).update(J).digest("hex")}function l78($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=oi6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${p78(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function n78($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${c78("md5","etag").update(Y).digest("hex")}"`}async function t78($,Z,Q,Y,X){try{let J=await pi6($,{withFileTypes:!0});for(let G of J){let W=DB1($,G.name),H=ni6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await t78(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await m78(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:n78(W,F.mtime,F.size)})}catch{}}}}catch{}}function o78($,Z){let Y=G0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:e$.object({prefix:e$.string().optional(),maxKeys:e$.number().optional().default(1000),continuationToken:e$.string().optional(),delimiter:e$.string().optional()}),outputSchema:e$.object({objects:e$.array(e$.object({key:e$.string(),size:e$.number(),lastModified:e$.string(),etag:e$.string()})),nextContinuationToken:e$.string().optional(),isTruncated:e$.boolean(),commonPrefixes:e$.array(e$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=i78(Y);await ii6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await t78(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,L=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:e$.object({key:e$.string()}),outputSchema:e$.object({contentType:e$.string().optional(),contentLength:e$.number(),lastModified:e$.string(),etag:e$.string(),metadata:e$.record(e$.string(),e$.string()).optional()}),handler:async(X)=>{let J=X,G=BB1(Y,J.key),W=await m78(G);return{contentType:fF1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:n78(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:e$.object({key:e$.string(),expiresIn:e$.number().optional()}),outputSchema:e$.object({url:e$.string(),expiresIn:e$.number()}),handler:async(X)=>{let J=X,G=vD(J.expiresIn,u78);return{url:l78(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:e$.object({key:e$.string(),expiresIn:e$.number().optional(),contentType:e$.string().optional()}),outputSchema:e$.object({url:e$.string(),expiresIn:e$.number()}),handler:async(X)=>{let J=X,G=vD(J.expiresIn,u78);return{url:l78(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:e$.object({key:e$.string()}),outputSchema:e$.object({success:e$.boolean(),key:e$.string()}),handler:async(X)=>{let J=X,G=BB1(Y,J.key);try{return await h78(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:e$.object({keys:e$.array(e$.string()).max(1000)}),outputSchema:e$.object({deleted:e$.array(e$.string()),errors:e$.array(e$.object({key:e$.string(),message:e$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=BB1(Y,K);try{await h78(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function OB1($,Z,Q){let Y=o78(Z,Q),X=new cL({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:VZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:e$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:e$.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new U3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),bW(X,J,$,"mcp:dev-assets")}async function r78($,Z,Q,Y){let J=o78(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var ti6="./data/assets",u78=3600,d78,s78;var a78=O(()=>{W$();Od();Q8();xX0();Dd();YJ();bD();tk0();d78=new $1;d78.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return OB1($.req.raw,Z,Y)});s78=d78});var e78={};R6(e78,{mountDevRoutes:()=>ri6});function ri6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return OB1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await r78(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",s78);let Q=new $1;Q.use("*",SH({mountPath:"/api/dev-assets"})),Q.route("/",nk0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var $Q8=O(()=>{Q8();kF1();tk0();a78()});var FQ8={};R6(FQ8,{watchHandler:()=>HQ8,resolveCorsOrigin:()=>WQ8,isSsoExemptPath:()=>JQ8,isAllowedOAuthRedirectUri:()=>KQ8,createApp:()=>Gp6});import{readFileSync as si6}from"fs";import{PrometheusSerializer as ai6}from"@opentelemetry/exporter-prometheus";import{DBOS as eD}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Zp6,oAuthProtectedResourceMetadata as Qp6}from"better-auth/plugins";async function ei6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,QQ8(ZQ8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),QQ8(ZQ8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function QQ8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function JQ8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${vk0}/`)||$.startsWith(`${Ik0}/`)}function GQ8($){return $==="local.studio.decocms.com"}function WQ8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(GQ8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function KQ8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||GQ8($.hostname)}async function Gp6($={}){let Z=$.database??O8(),Q=!1;$9.stop().catch((h)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",h)});let Y,X,J,G,W=new aN1,K,H,F,U=null;if($.disableNats)K=eN1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new k$0,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(h)=>{return(async()=>{let c=h.getReader();try{while(!0){let{done:M0}=await c.read();if(M0)break}}catch{}finally{c.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=U78();let h=E0().natsCredsPath,c;if(h)try{c=si6(h,"utf8")}catch(P$){console.error(`[app] failed to read NATS_CREDS at ${h}; connecting anonymously`,P$)}U.init(E0().natsUrls,c?{creds:c}:void 0);let M0=r01()?new v01({getJetStream:()=>U.getJetStream()}):null;M0?.init().catch(()=>{}),Y=M0;let D0=new G51({getJetStream:()=>U.getJetStream()});D0.init().catch(()=>{}),X=D0;let h0=new Df($71,{getJetStream:()=>U.getJetStream()}),g0=new Df(n10,{getJetStream:()=>U.getJetStream()});h0.init().catch(()=>{}),g0.init().catch(()=>{}),J={reads:h0,cards:g0};let T1=new cY1({getJetStream:()=>U.getJetStream()});T1.init().catch(()=>{}),G=T1,K=eN1({getConnection:()=>U.getConnection()}),H=new $B1({getConnection:()=>U.getConnection()}),F=new YB1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),p08(U),U.onReady(()=>{M0?.init().catch((P$)=>{console.error("[McpListCache] Deferred init failed:",P$)}),D0.init().catch((P$)=>{console.error("[SkillCatalogCache] Deferred init failed:",P$)}),h0.init().catch((P$)=>{console.error("[PrReadCache] Deferred init failed:",P$)}),g0.init().catch((P$)=>{console.error("[PrCardCache] Deferred init failed:",P$)}),T1.init().catch((P$)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",P$)}),K.start(),TF$(()=>U.getConnection()),F.init().catch((P$)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",P$)})})}if(yE)await yE();b01(Y),K51(X),Z71(J),mY1(G);let B={storage:new qh(Z.db),sseHub:$9,onThreadFinished:async(h,c)=>am(new J3(Z.db),h,c,new PG(Z.db))},D=new BQ1(B),L=new r80(Z.db),w=new XB1(L);w.start(),sb$(H),H.start((h)=>{lR0(h),D.execute({type:"CANCEL",taskId:h}).catch((c)=>{console.error("[Decopilot] CancelBroadcast execute failed:",c)})}).catch((h)=>{console.error("[Decopilot] CancelBroadcast start failed:",h)}),U?.onReady(()=>{H.start().catch((h)=>{console.error("[CancelBroadcast] Deferred start failed:",h)})});let j=()=>U?.getConnection()??null;RF1(j),U?.onReady(()=>RF1(j)),zX1(j),U?.onReady(()=>zX1(j)),F.init().catch((h)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",h)}),yE=async()=>{await D.stopAll(),D.dispose(),w.dispose(),H.stop().catch(()=>{}),W$8(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),RF$(),G.teardown(),b01(null),K51(null),Z71(null),mY1(null)};let E=new $1;if(E.use("*",hY1({enabled:(h)=>zi(h,"debug")==="1"})),E.use("*",SC0),E.use("/*",l08({origin:(h,c)=>WQ8(h,{baseUrl:E0().baseUrl,requestOrigin:new URL(c.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(h,c)=>{if(await c(),h.req.path.includes("/files/"))return;if(h.req.path.includes("/fs/")&&h.req.path.endsWith("/read"))return;h.header("X-Frame-Options","DENY"),h.header("Content-Security-Policy","frame-ancestors 'none'")}),!E0().noTui)E.use("*",y78());E.use("*",async(h,c)=>{if(await c(),Fp(h.req.path))return;if(h.res.status>=500){let D0=await h.res.clone().text();console.error(`[5xx Response] ${h.req.method} ${h.req.path} - ${h.res.status}:`,D0)}}),E.get(pY.HEALTH,(h)=>{if(Q)return h.json({status:"shutting_down"},503);return h.json({status:"ok"})}),E.get(pY.HEALTH_LIVE,(h)=>{return h.json({status:"ok"})}),E.get(pY.HEALTH_READY,async(h)=>{if(Q)return h.json({status:"shutting_down"},503);let c={};if(c.postgres={status:await ei6(Z.pool)?"up":"down"},U)c.nats=U.isConnected()?{status:"up"}:{status:"down"};else c.nats={status:"down"};let M0=c.postgres.status==="up",D0=M0?200:503;return h.json({status:M0?"ready":"not_ready",services:c},D0)}),E.get(pY.METRICS,async(h)=>{try{let c=await bC0.collect(),M0=$p6.serialize(c.resourceMetrics);return h.text(M0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(c){return console.error("Failed to collect metrics:",c),h.text("# Error collecting metrics",500)}});let P=1800000;E.get(`${pY.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(h)=>{let c=h.req.param("queueName");if(!Yp6.has(c))return h.json({error:`Unknown queue: ${c}`},404);let[M0,D0]=await Promise.all([eD.listQueuedWorkflows({queueName:c,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),eD.listQueuedWorkflows({queueName:c,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-P).toISOString()})]);return h.json({queue_length:M0.length,in_flight:D0.length})}),E.route("/api/config",wZ8),E.route("/api/_reports",kZ8),E.route("/api/_stripe",pN1),E.route("/api/_github",_Z8({taskBoard:()=>t,contextFactory:()=>g})),E.route("/api/_git",ki);let T={db:Z.db,encryptionKey:E0().encryptionKey};E.route("/api/_jira",gZ8(T)),E.route("/api/_jira",fZ8(T)),E.route("/report",MZ8($.clientDir)),E.route("/api/auth/custom",N18),E.route("/api/auth/desktop",L18),E.all("/api/auth/admin/*",t18),E.all("/api/auth/*",async(h)=>{return await v8.handler(h.req.raw)});let z=Pe$();z.use("/.well-known/oauth-protected-resource/mcp/:connectionId",K40),z.use("/mcp/:connectionId/.well-known/oauth-protected-resource",K40),E.route("/",z),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",p80),E.route("/",qe$()),E.use("/oauth-proxy/:connectionId/*",K40),E.all("/oauth-proxy/:connectionId/*",YQ8);let A=async(h)=>{let M0=await Xp6()(h.req.raw),D0=await M0.json();return Response.json(D0,M0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",K40),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(h)=>{let M0=await Jp6()(h.req.raw),D0=await M0.json();return Response.json(D0,M0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let x=m08({ttlMs:120000}),_=await D08({db:Z.db,auth:v8,encryption:{key:E0().encryptionKey},observability:{tracer:KO,meter:A$},modelListCache:W,providerKeyCache:K,memberRoleCache:x});fQ.set(_),Nd1({db:Z.db,baseUrl:y5()}),O08({db:Z.db}),E08({db:Z.db}),I08({db:Z.db}),lZ8({db:Z.db,encryptionKey:E0().encryptionKey}),VS$({db:Z.db}),v08({db:Z.db}),sS$({db:Z.db});let V=RY0(Z.db),y=new mo(Z.db),g=v78({db:Z.db});xY1({storage:V,studioContextFactory:g}),TQ1({systemDatabaseUrl:$r0(E0().databaseUrl,E0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:$9}}),LQ1({dispatchRunFn:lv$,studioContextFactory:g,deps:{runRegistry:D,cancelBroadcast:H,streamBuffer:F,sseHub:$9}});let m=new qh(Z.db),t=new J3(Z.db),n=new PG(Z.db),K0=new GB1(t,g,n);if(E0().taskBoardReviewSweeperEnabled){K0.start();let h=yE;yE=async()=>{await h?.(),K0.dispose()}}Kb$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let h=U?.getConnection();return h?await XQ8.jetstreamManager(h):null},messageParts:m.messageParts(),resolveRun:async(h)=>{let c=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",h).executeTakeFirst();return c?{orgId:c.organization_id,createdBy:c.created_by,version:c.message_storage_version??1,status:c.status,runFenceToken:c.run_fence_token,title:c.title??null}:null},completeRunIfNotCompleted:async(h,c)=>{let M0=await m.completeRunIfNotCompleted(h,c);if(JC0($9,c,h,M0),M0)await am(t,h,c,n);return M0},markRunRequiresAction:async(h,c)=>{let M0=await m.requiresActionIfInProgress(h,c);return JC0($9,c,h,M0),M0},markRunFailed:async(h,c,M0,D0)=>{let h0=await m.markRunFailed(h,c,M0,D0);if(JC0($9,c,h,h0),h0)await am(t,h,c,n);return h0},clearSynthesizedError:async(h,c)=>{await m.messageParts().replaceMessageParts(h,sj(h,c),[])},persistTitle:(h,c,M0)=>m.update(h,c,{title:M0}),onTitleUpdated:async({runId:h,orgId:c,title:M0})=>{let D0=await m.get(h,c).catch(()=>null);$9.emit(c,ZF(h,D0?.status??"in_progress",{title:M0,virtualMcpId:D0?.virtual_mcp_id??void 0,createdBy:D0?.created_by,triggerId:D0?.trigger_id,branch:D0?.branch??null,harnessId:D0?.harness_id??void 0,createdAt:D0?.created_at,updatedAt:D0?.updated_at}))},bumpProgress:async({runId:h,orgId:c})=>{await m.bumpProgress(h,c)},recordCompleted:async({runId:h,orgId:c,distinctId:M0,usage:D0})=>{b1.capture({distinctId:M0,event:"chat_message_completed",groups:{organization:c},properties:{organization_id:c,thread_id:h,transport:"projector",input_tokens:D0.inputTokens,output_tokens:D0.outputTokens,total_tokens:D0.totalTokens}})},recordFailed:async({runId:h,orgId:c,distinctId:M0,reason:D0,kind:h0})=>{b1.capture({distinctId:M0,event:"chat_message_failed",groups:{organization:c},properties:{organization_id:c,thread_id:h,transport:"projector",error_category:h0,error_message:D0}})},purgeRun:async(h)=>{F.purge(h)}}),Bv$({studioContextFactory:g,systemDatabaseUrl:$r0(E0().databaseUrl,E0().databasePgSsl),streamBuffer:F}),C78(),Bd1(),w08(),z08(),k08(),dZ8(),vS$(),x08(),aS$(),bZ8();let U0=async(h,c,M0)=>{let D0=await V.findById(h,c);if(!D0)throw Error("Automation not found");return gY1({automationId:D0.id,organizationId:D0.organization_id,triggerId:null})},Y0=new Ii(V,({automation:h,trigger:c,contextMessages:M0,idempotencyKey:D0})=>V$0({automationId:h.id,organizationId:h.organization_id,triggerId:c.id,contextMessages:M0},{idempotencyKey:D0})),L0=[oW(),gy(),UN()];for(let h of L0)KC0(h).then(()=>{}).catch((c)=>console.error("[monitoring] Retention cleanup failed:",c));let J0=()=>v8.api.deleteAllExpiredApiKeys().catch((h)=>console.error("[auth] Expired API key cleanup failed:",h));J0(),setInterval(J0,86400000).unref(),E.use("*",async(h,c)=>{if(VC0(h.req.path))return c();let M0={measure:async(h0,g0)=>{vW(h,h0);try{return await g0()}finally{N3(h,h0)}}},D0=await fQ.create(h.req.raw,{timings:M0});D0.automationRunner=U0,h.set("studioContext",D0);try{await c()}finally{let h0=D0.pendingRevalidations;if(h0.length>0)Promise.race([Promise.allSettled(h0),h$(30000)]).catch((T1)=>console.error("[studio] revalidation cleanup error:",T1))}}),E.use("/api/:org/decopilot/*",Ti),E.use("/api/:org/v1/*",Ti),E.use("/api/:org/files/*",Ti),E.use("*",async(h,c)=>{if(JQ8(h.req.path))return c();let M0=h.get("studioContext");if(!M0?.organization?.id||!M0?.auth?.user?.id)return c();if(!(await M0.storage.orgSsoConfig.getByOrgId(M0.organization.id))?.enforced)return c();if(!await M0.storage.orgSsoSessions.isValid(M0.auth.user.id,M0.organization.id))return h.json({error:"SSO authentication required for this organization"},403);return c()});let Z0=new $1;Z0.use("*",SH({mountPath:"/api/org-sso"})),Z0.route("/",fk0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(h)=>{return h.json({tools:xp0,grouped:Vz()})}),E.use("/mcp/*",async(h,c)=>{vW(h,"mcp");try{return await c()}finally{N3(h,"mcp")}});let Q0=async(h,c)=>{let M0=h.var.studioContext;if(!M0.auth.user?.id&&!M0.auth.apiKey?.id){let D0=new URL(h.req.url),h0=h.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),g0=h0?`${h0}://${D0.host}`:D0.origin;return h.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${g0}${D0.pathname}/.well-known/oauth-protected-resource"`}})}return await c()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),NW()){let{mountDevRoutes:h}=($Q8(),LC0(e78));h(E,Q0)}let s=new $1;s.use("*",SH({mountPath:"/mcp"})),s.route("/",bq0()),E.route("/mcp",s);let X0=new $1;X0.use("*",SH({mountPath:"/mcp/self"})),X0.route("/",qS0()),E.route("/mcp/self",X0);let c0=new $1;c0.use("*",SH({mountPath:"/mcp"})),c0.route("/",yq0()),E.route("/mcp",c0),E.use("/api/:org/models/*",async(h,c)=>{vW(h,"llm_models");try{return await c()}finally{N3(h,"llm_models")}});let S0=H$8({cancelBroadcast:H,streamBuffer:F,runRegistry:D});E.route("/api",S0),E.route("/api",tZ8);let B1=new $1;B1.use("*",SH({mountPath:"/api"})),B1.route("/",kS0()),E.route("/api",B1),E.route("/api",FZ8);let d0=new $1;d0.use("*",SH({mountPath:"/api"})),d0.route("/",SS0({tokenStorage:y,automationEventDispatcher:Y0})),E.route("/api",d0);let j0=new po(Z.db),w0=new $1;w0.use("*",SH({mountPath:"/api"})),w0.route("/",lk0()),E.route("/api",w0),E.route("/api/deco-sites",q$8()),E.route("/api/deco-apps",XZ8());let s0=new $1;s0.use("*",SH({mountPath:"/api/deco-sites"})),s0.route("/",mk0()),E.route("/api/deco-sites",s0),E.route(vk0,o18()),E.route(Y58,G58()),E.route("/api/_editor-resolve",NZ8()),E.route(j18,E18()),E.route(Ik0,k18());let P1=E0(),K1=new mN1({adapter:P1.elevenlabsApiKey?new lN1({apiKey:P1.elevenlabsApiKey,model:P1.elevenlabsVoiceModel,voiceId:P1.elevenlabsVoiceId}):null,secret:P1.studioJwtSecret??P1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),_0=i98({voiceSessions:K1,kvStorage:j0,runRegistry:D,streamBuffer:F,sseHub:$9,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:Y0,mountDevAssets:NW(),mcpAuth:Q0,oauthProxyHandler:YQ8,watchHandler:HQ8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",_0),E.notFound((h)=>{return h.json({error:"Not Found",path:h.req.path},404)}),E.onError(U$8),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([$9.stop(),yE?Promise.resolve(yE()).finally(()=>{yE=null}):Promise.resolve()]),U)await U.drain().catch((h)=>console.error("[shutdown] NATS drain error:",h));console.log("[shutdown] Flushing telemetry..."),await uX().catch((h)=>console.error("[shutdown] Telemetry flush error:",h)),console.log("[shutdown] Closing database..."),await K5$(Z).catch((h)=>console.error("[shutdown] Database close error:",h)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await eD.registerQueue(A3,{partitionQueue:!0,concurrency:_Y1,minPollingIntervalMs:vY1}),await eD.registerQueue(z3,{partitionQueue:!0,concurrency:zQ1,priorityEnabled:!0}),await eD.registerQueue(HN,{workerConcurrency:E0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await eD.registerQueue(FN,{workerConcurrency:E0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await eD.registerQueue(GO,{partitionQueue:!0,concurrency:Nv$}),await eD.registerQueue(cE,rS$),await SF1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((h)=>eD.deleteQueue(h))),await bY1(Z.pool),k7$().catch((h)=>{console.error("[studio-pack-backfill] failed:",h)}),Dd1().catch((h)=>{console.error("[org-fs] public-sets boot sync kick failed:",h)})}})}var XQ8,ZQ8=5000,yE=null,YQ8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),Y=Q[Q.length-1],X=$.get("studioContext");if(!X)X=await fQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await wi(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=H.origin;let N=await n80(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),D;if(Y==="authorize")D=B.authorization_endpoint;else if(Y==="token")D=B.token_endpoint;else if(Y==="register")D=B.registration_endpoint;if(!D)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=Re$(D);if(L)return L;let w=new URL(D),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=E0().baseUrl??j.origin;try{if(!KQ8(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(y08(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},P=$.req.header("Content-Type");if(P)E["Content-Type"]=P;let T=$.req.header("Authorization");if(T)E.Authorization=T;let z,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&P?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let n=atob(T.slice(6).trim()),K0=n.indexOf(":");if(K0!==-1){let U0=decodeURIComponent(n.slice(0,K0)),Y0=decodeURIComponent(n.slice(K0+1));A=U0||null,q=Y0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),m=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof m==="string"&&m)q=m;let t=new URLSearchParams;for(let[n,K0]of y.entries())t.append(n,K0.toString());z=t.toString()}else if(Y==="register"&&P?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),m={};try{m=g?JSON.parse(g):{}}catch{z=g}let t=typeof m==="object"&&m!==null&&!Array.isArray(m);if(z===void 0&&!t)z=g;if(z===void 0){let n=m,K0=n.metadata&&typeof n.metadata==="object"?n.metadata:{};n.metadata={...K0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},z=JSON.stringify(n),E["Content-Type"]="application/json"}}else z=$.req.raw.body??void 0;let x=await fetch(w.toString(),{method:$.req.method,headers:E,body:z,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of x.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&x.ok){let y=await x.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let m=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,t=null;try{t=await ji(G.connection_url)??D}catch{t=D}let n={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:m,clientId:A,clientSecret:q,tokenEndpoint:t};await new U9(X.db,X.vault).upsert(n)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:x.status,statusText:x.statusText,headers:_})}return new Response(x.body,{status:x.status,statusText:x.statusText,headers:_})},HQ8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let Y=Z.organization?.id;if(!Y)return $.json({error:"organization id missing"},400);let X=$.req.query("types"),J=X?X.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!IU(Y)||!await VU(Z)))return $.json({error:"forbidden"},403);let W=G?aT0:Y;if(G)wD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return oD($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!$9.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{$9.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),$9.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),$9.remove(W,K),N()})})})},$p6,Yp6,Xp6=()=>Qp6(v8),Jp6=()=>Zp6(v8);var UQ8=O(()=>{K8();W$();Od1();j08();A08();S08();b$0();yZ1();f08();p10();z9();Pc();d8();Q8();Ak0();c08();uY1();nG();QU();eH1();AG();_6();X6();GF1();w18();P18();S18();NF1();r18();PF1();IF1();VF1();aK();Gk0();kF1();N$8();Rk0();p98();t98();YZ8();vF1();JZ8();xq0();S$0();UZ8();gq0();KN1();BZ8();GN1();jZ8();IZ8();SZ8();CZ8();vZ8();xZ8();yZ8();hZ8();iZ8();gF1();oZ8();WN1();YN1();N60();N78();PJ();gA0();Y71();Ne();De();iY1();B78();O78();qF1();A78();DQ1();T78();Mt();to();LD();O9();PH1();V78();_78();KG0();WB1();T3();CF1();OD();UQ1();KG0();sR0();Tp0();Rp0();b78();qu();g78();ii();eH1();im();Gd();cR0();XQ8=C(hH(),1);$p6=new ai6,Yp6=new Set([A3,z3,HN,FN,GO,cE])});var OQ8={};R6(OQ8,{resolveClientDir:()=>Bp6,resolveAssetPathWithTraversalCheck:()=>DQ8,isPathWithinDirectory:()=>BQ8,createAssetHandler:()=>Dp6});import{resolve as s40,dirname as Wp6,join as Kp6,extname as Hp6,basename as Fp6,sep as NQ8}from"path";function Up6($,Z){if($===Z||Fp6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${NQ8}assets${NQ8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function BQ8($,Z){let Q=s40(Z),Y=s40($);return Y===Q||Y.startsWith(Q+"/")}function DQ8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=s40(Z,Q);if(!BQ8(Y,Z))return null;return Y}function Bp6($,Z="../client"){let Q=new URL($),Y=Wp6(Q.pathname);return s40(Y,Z)}function Dp6($={}){let{env:Z="production",clientDir:Q=Np6,isServerPath:Y=()=>!1}=$;if(Z==="development")return async function(J){return null};return async function(J){if(J.method!=="GET")return null;let G=new URL(J.url),W;try{W=decodeURIComponent(G.pathname)}catch{return null}if(Y(W))return null;let K=DQ8({requestPath:W,clientDir:Q});if(!K)return null;let H=Kp6(K,"index.html"),F=s40(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(Hp6(K))?[H,F]:[];for(let D of[K,...B])try{let L=Bun.file(D);if(await L.exists())return new Response(L,{headers:Up6(D,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var Np6="./dist/client";var LQ8=()=>{};var wQ8={};R6(wQ8,{tryUpgradePreviewWs:()=>zp6,tryHandlePreviewHttp:()=>Pp6,previewWebSocketHandler:()=>Ap6,parsePreviewBaseDomain:()=>Ep6,isPreviewWsData:()=>HC0,extractHandleFromHost:()=>LB1});function wp6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function jp6(){return new Response(Lp6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function Ep6($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let Y=Q.hostname;if($.includes("{handle}")){let X=Y.indexOf(".");if(X<=0||X===Y.length-1)return null;return Y.slice(X+1)}return Y}function LB1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),Y=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!Y.endsWith(J))return null;let G=Y.slice(0,Y.length-J.length);if(!G||G.includes("."))return null;return G}async function Pp6($,Z){let Q=LB1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return e40(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(Km)&&wp6($))return jp6();return X.headers.delete(Km),X}function e40($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function HC0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function zp6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=LB1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return e40(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return e40(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return e40(404,"not found");let W=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,K=$.headers.get("sec-websocket-protocol"),H=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return e40(426,"upgrade failed");return}function a40($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var Op6=256,Lp6='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',Ap6;var jQ8=O(()=>{b00();Ap6={open($){let Z=$.data;if(!HC0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),a40($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let Y=Z.pending.shift();if(Y!==void 0)Q.send(Y)}}),Q.addEventListener("message",(Y)=>{if(Z.closed)return;$.send(Y.data)}),Q.addEventListener("close",(Y)=>{a40($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{a40($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!HC0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=Op6){a40($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!HC0(Z))return;a40($,Z,1000,"")}}});var AQ8={};R6(AQ8,{printBanner:()=>Rp6,bannerLines:()=>zQ8,BANNER_LINES:()=>EQ8,BANNER_GRADIENT:()=>PQ8});function Tp6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function zQ8($){let Z=EQ8.map((Q,Y)=>{let[X,J,G]=Tp6(PQ8[Y]);return`\x1B[38;2;${X};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function Rp6($){console.log("");for(let Z of zQ8($))console.log(Z);console.log("")}var EQ8,PQ8;var TQ8=O(()=>{EQ8=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],PQ8=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});K8();var kB1="13";function SB1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:kB1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}K8();import lQ8 from"pg";var CB1=8314027461559302n,cQ8=600000,mQ8=500;async function _B1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=cQ8}=$,X=$.log??((K)=>console.log(K)),J=new lQ8.Client({connectionString:Q});await J.connect();let G=Date.now(),W=!1;try{while(!W){if(W=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[CB1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=Y)throw Error(`Timed out after ${Y}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await h$(mQ8)}let K=Date.now()-G;if(K>1000)X(`[dbos] waited ${K}ms for the migration lock; another process migrated first`);return await Z()}finally{if(W)try{await J.query("SELECT pg_advisory_unlock($1)",[CB1.toString()])}catch{}await J.end().catch(()=>{})}}W$();PC0();_6();function lY8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function yC0($,Z){for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Y===void 0)continue;if(Y===Z)return $[Q+1];if(Y.startsWith(`${Z}=`))return Y.slice(Z.length+1)}return}function OD1(){let $=lY8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:yC0($,"--cpu-prof-dir")??process.cwd(),name:yC0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(yC0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}uC0();var O60;function RD1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=iE();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...Y}))};return Z().catch(()=>{}),O60=setInterval(()=>void Z().catch(()=>{}),$),O60.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),Y=typeof Q==="string"?Q:JSON.stringify(Q),X=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(X,Y),console.log(JSON.stringify({msg:"heap-snapshot-written",path:X}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(O60)clearInterval(O60)}}import*as dY8 from"bun:jsc";var{startSamplingProfiler:iY8,samplingProfilerStackTraces:pY8}=dY8;function qD1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{iY8()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,Y=performance.now()+Z,X=()=>{let J=performance.now(),G=J-Y;Y=J+Z;let W=[];try{W=pY8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function MD1(){OD1();let $=[RD1(),TD1(),qD1()];return()=>{for(let Z of $)Z()}}import{existsSync as _p6}from"fs";var aJ=E0();ND1();var{DBOS:$60,DBOSClient:qp6}=await import("@dbos-inc/dbos-sdk");function AB1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var Mp6=[A3,z3,HN,FN,GO,cE],Ip6=aJ.dispatchRole==="worker"?Mp6:aJ.dispatchRole==="api"?[]:void 0;$60.setConfig(SB1({systemDatabaseUrl:AB1(aJ.databaseUrl,aJ.databasePgSsl),poolSize:aJ.dbosPoolSize,executorID:aJ.podName,listenQueues:Ip6}));var{createApp:Vp6}=await Promise.resolve().then(() => (UQ8(),FQ8)),{isServerPath:kp6}=await Promise.resolve().then(() => (N60(),oB1)),{createAssetHandler:Sp6,resolveClientDir:VQ8}=await Promise.resolve().then(() => (LQ8(),OQ8)),Cp6=aJ.port,RQ8=VQ8(import.meta.url,"../client"),kQ8=_p6(RQ8)?RQ8:VQ8(import.meta.url,"../dist/client"),vp6=Sp6({clientDir:kQ8,isServerPath:kp6}),bp6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function xp6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(bp6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:fp6,tryHandlePreviewHttp:yp6,tryUpgradePreviewWs:gp6,previewWebSocketHandler:wB1,isPreviewWsData:jB1}=await Promise.resolve().then(() => (jQ8(),wQ8)),{getOrInitSharedRunner:SQ8}=await Promise.resolve().then(() => (TW(),X2$)),CQ8=fp6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),qQ8={baseDomain:CQ8??"",getRunner:SQ8};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())SQ8().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var FC0=await Vp6({clientDir:kQ8}),EB1=process.env.DBOS_CONDUCTOR_KEY?.trim(),MQ8=process.env.DBOS_CONDUCTOR_URL?.trim();await _B1({databaseUrl:AB1(aJ.databaseUrl,aJ.databasePgSsl)},()=>$60.launch({...EB1?{conductorKey:EB1}:{},...EB1&&MQ8?{conductorURL:MQ8}:{}}));console.log(`[dbos] application version: ${$60.applicationVersion}`);var PB1=5,zB1=0;await I8(async()=>{zB1++;try{return await FC0.initDbos()}catch($){let Z=zB1>=PB1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${zB1}/${PB1} failed, ${Z}`,$),$}},{maxAttempts:PB1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!aJ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (TQ8(),AQ8));console.log("");for(let Z of $())console.log(Z)}var hp6=Bun.serve({idleTimeout:0,port:Cp6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(CQ8){let Y=await gp6($,Z,qQ8);if(Y===void 0)return;if(Y)return Y;let X=await yp6($,qQ8);if(X)return X}let Q=await vp6($);if(Q)return xp6(Q);return FC0.fetch($,{server:Z})},websocket:{open($){if(jB1($.data))wB1.open($)},message($,Z){if(jB1($.data))wB1.message($,Z)},close($){if(jB1($.data))wB1.close($)}},development:!1}),up6=MD1();if(aJ.localMode)Promise.resolve().then(() => (wf(),kR0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let Y=await Q();if(Y>0)console.log(`[local-mode] cleared ${Y} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let X=await $()}catch(Y){console.error("Failed to seed local mode:",Y)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (wf(),kR0));Z()}catch{}});var IQ8=!1;async function lp6($){let Z;try{Z=await qp6.create({systemDatabaseUrl:AB1(aJ.databaseUrl,aJ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:z3,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let Y=Q.map((X)=>X.workflowID);await Z.resumeWorkflows(Y,{queueName:z3}),console.log(`[shutdown] re-enqueued ${Y.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,Y)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function UC0($){if(IQ8)return;IQ8=!0,console.log(`
|
|
3698
3698
|
[shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),Y=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);Y.unref?.();let X=0;try{up6(),FC0.markShuttingDown();let J=bB1(aJ.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await h$(J),await hp6.stop(!0);let G=$60.executorID;await $60.shutdown(),await lp6(G),await FC0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>UC0("SIGTERM"));process.on("SIGINT",()=>UC0("SIGINT"));process.on("SIGHUP",()=>UC0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),UC0("uncaughtException")});
|