decocms 3.91.0 → 3.92.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-CJRvjf9E.js → AlertCircle-CTPV9V8h.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-C-ASyyy7.js → ArrowUpRight-C3z436np.js} +1 -1
- package/dist/client/assets/{CheckCircle-DHlN5aNG.js → CheckCircle-BcEM-U8z.js} +1 -1
- package/dist/client/assets/{ChevronDown-siikX1CB.js → ChevronDown-h0x45P8o.js} +1 -1
- package/dist/client/assets/{ChevronLeft-BMBu9Rmw.js → ChevronLeft-zdg7Q4jK.js} +1 -1
- package/dist/client/assets/{ChevronRight-bS8zu0mE.js → ChevronRight-qRgV12A9.js} +1 -1
- package/dist/client/assets/{ChevronUp-CazSoL4d.js → ChevronUp-M8W7UfeY.js} +1 -1
- package/dist/client/assets/{DotsVertical--w5kUeSe.js → DotsVertical-5_LyH0_q.js} +1 -1
- package/dist/client/assets/{Eye-evykl5te.js → Eye-C_Xoo8qw.js} +1 -1
- package/dist/client/assets/{FilterLines-CbmfI3qe.js → FilterLines-dJo6BCZ1.js} +1 -1
- package/dist/client/assets/{Globe01-C5qUvOk3.js → Globe01-sY1H67fR.js} +1 -1
- package/dist/client/assets/{Globe04-ayhcWvo6.js → Globe04-DF2MygRC.js} +1 -1
- package/dist/client/assets/{HardDrive-BZnTfRN9.js → HardDrive-rN9rvzTi.js} +1 -1
- package/dist/client/assets/{Key01-BHQPeab7.js → Key01-DdhtrhKo.js} +1 -1
- package/dist/client/assets/{LayoutLeft-eB33hZq-.js → LayoutLeft-BGpgGNzH.js} +1 -1
- package/dist/client/assets/{LinkExternal01-C9BK0yA_.js → LinkExternal01-Qtas2L2N.js} +1 -1
- package/dist/client/assets/{Monitor01-CuUeTTqr.js → Monitor01-Dl_qoJKp.js} +1 -1
- package/dist/client/assets/{Palette-B-wglEVr.js → Palette-tdsAZuuV.js} +1 -1
- package/dist/client/assets/{Play-eP0tvaLl.js → Play-DJ7ZmWZL.js} +1 -1
- package/dist/client/assets/{Plus-DYuvLVJp.js → Plus-C1ojr5M2.js} +1 -1
- package/dist/client/assets/{SearchMd-BqOCkx90.js → SearchMd-DUageA20.js} +1 -1
- package/dist/client/assets/{Settings02-Ca71UgHw.js → Settings02-DozM190y.js} +1 -1
- package/dist/client/assets/{Shield01-DY339kBm.js → Shield01-C9Bch-EG.js} +1 -1
- package/dist/client/assets/{Star01-Cdx4KR4U.js → Star01-DqNKux5E.js} +1 -1
- package/dist/client/assets/{Stars01-DPz6mq_I.js → Stars01-r4i4yvEz.js} +1 -1
- package/dist/client/assets/{Stars02-CGjIjk8V.js → Stars02-DBKqj7gx.js} +1 -1
- package/dist/client/assets/{Sun-C4MaHaW6.js → Sun-CGcK7-RR.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-DqWROiIl.js → SwitchHorizontal01-Bpw0CC0C.js} +1 -1
- package/dist/client/assets/{Tool01-CLVT6zPR.js → Tool01-D6XUAkke.js} +1 -1
- package/dist/client/assets/{Trash01-D3NdLyIt.js → Trash01-dG9X4BY7.js} +1 -1
- package/dist/client/assets/{Upload01-CwAL7vx3.js → Upload01-o5Xeg721.js} +1 -1
- package/dist/client/assets/{User01-CPYMutV0.js → User01-CDDYeeuq.js} +1 -1
- package/dist/client/assets/{Users01-Ih8cqcDu.js → Users01-BrrFQM4e.js} +1 -1
- package/dist/client/assets/{Users03-zuYH9zmO.js → Users03-DZMol2tr.js} +1 -1
- package/dist/client/assets/{X-DFZG0D7q.js → X-kuCvYxfG.js} +1 -1
- package/dist/client/assets/{XCircle-C4Okg4wT.js → XCircle-5-9If2le.js} +1 -1
- package/dist/client/assets/{XClose-CsMYL6lC.js → XClose-BXP3vjGQ.js} +1 -1
- package/dist/client/assets/{Zap-0-1HsH9l.js → Zap-DD_vVHsY.js} +1 -1
- package/dist/client/assets/{ZapSquare-CSwYwLqC.js → ZapSquare-Buvc-Lai.js} +1 -1
- package/dist/client/assets/{ZoomOut-DZZylEjW.js → ZoomOut-CXIGZvFC.js} +1 -1
- package/dist/client/assets/{access-gate-BKEoJm4_.js → access-gate-BR7-vI-o.js} +1 -1
- package/dist/client/assets/{add-section-modal-DcqHegyG.js → add-section-modal-DukcyzZP.js} +1 -1
- package/dist/client/assets/{agent-icon-DyIO38tc.js → agent-icon-y3KUME6u.js} +1 -1
- package/dist/client/assets/{agents-list-CTPBFG-U.js → agents-list-Dva-TMdx.js} +1 -1
- package/dist/client/assets/{ai-providers-BdFdksO5.js → ai-providers-U9Oy1IkQ.js} +1 -1
- package/dist/client/assets/{alert-bxo3sfvI.js → alert-8LZNYhbM.js} +1 -1
- package/dist/client/assets/{alert-dialog-CvkQwL5h.js → alert-dialog-NR8Vy9T7.js} +3 -3
- package/dist/client/assets/{app-editor-B_pm__vT.js → app-editor-DBkxoyvh.js} +1 -1
- package/dist/client/assets/{auth-catchall-CSy0uKFp.js → auth-catchall-DLR6d36r.js} +1 -1
- package/dist/client/assets/{auth-entry-C20r1MAB.js → auth-entry-zDnCGVnz.js} +1 -1
- package/dist/client/assets/{auth-Duwx_iL2.js → auth-fiRjWiax.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BAnr4RmX.js → auth-split-layout-8yYHO1kd.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-C_sfC4y1.js → authenticate-and-persist-oauth-BcWaYu03.js} +1 -1
- package/dist/client/assets/{automation-list-row-CSGFQlGB.js → automation-list-row--vcTFZr3.js} +1 -1
- package/dist/client/assets/{automation-runs-Cg17Xjs9.js → automation-runs-CHpPdKco.js} +1 -1
- package/dist/client/assets/{automations-DzcGR2GP.js → automations-ThLFbl1d.js} +1 -1
- package/dist/client/assets/{avatar-DK4P1R5g.js → avatar-BxyUCT4U.js} +1 -1
- package/dist/client/assets/{badge-BKEWn2TK.js → badge-DLF4nMeJ.js} +1 -1
- package/dist/client/assets/{block-document-NIWGLeAt.js → block-document-DpyUaDcw.js} +1 -1
- package/dist/client/assets/{brand-context-CJDKvZr6.js → brand-context-D0w3WInv.js} +1 -1
- package/dist/client/assets/{buckets-diJYBJDb.js → buckets-ClqHbsD2.js} +1 -1
- package/dist/client/assets/{capability-load-error-CvoDXWMK.js → capability-load-error-rkvVTAvN.js} +1 -1
- package/dist/client/assets/{card-CAloKMup.js → card-qTvvOhTO.js} +1 -1
- package/dist/client/assets/{category-editor-OJRcsrxS.js → category-editor-C5ERe_HJ.js} +1 -1
- package/dist/client/assets/{chat-context-B8Pf9_Ws.js → chat-context-KTj5-AOt.js} +1 -1
- package/dist/client/assets/{checkbox-BQjinmyU.js → checkbox-CuNBBII4.js} +1 -1
- package/dist/client/assets/{cli-auth-success-BUzt6pk1.js → cli-auth-success-Dtu3yTTD.js} +1 -1
- package/dist/client/assets/{collection-detail-BaUmzKIC.js → collection-detail-BPmhu-Hf.js} +1 -1
- package/dist/client/assets/{collection-display-button-DQ41t2NW.js → collection-display-button-5VmkUi41.js} +1 -1
- package/dist/client/assets/{collection-search-oL_WM4rt.js → collection-search-CzWpsVEo.js} +1 -1
- package/dist/client/assets/{collection-tabs-BmqFW71W.js → collection-tabs-ZJSfiPZP.js} +1 -1
- package/dist/client/assets/{command-D3tx4Z-o.js → command-BpJf46EY.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-BdejwHzi.js → commerce-onboarding-2OV0QV1i.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-cYgK2XT4.js → connect-desktop-dialog-DDPFCC29.js} +1 -1
- package/dist/client/assets/{connection-card-DS-KJfkn.js → connection-card-CttTgPIt.js} +1 -1
- package/dist/client/assets/{connection-detail-DS2TWtDQ.js → connection-detail-DQ7R7HUI.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-D6xKQSqh.js → connection-form-helpers-D0IiFAXA.js} +1 -1
- package/dist/client/assets/{connections-C20eJoml.js → connections-BRlfiprC.js} +1 -1
- package/dist/client/assets/{context-menu-Bv_k6cm6.js → context-menu-DVKrNuwG.js} +1 -1
- package/dist/client/assets/{decopilot-7gVBBoRg.js → decopilot-CaqXxVEy.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-85Pin_5c.js → decopilot-sse-pool-SxIYp1o0.js} +1 -1
- package/dist/client/assets/{dialog-C2ETGOlj.js → dialog-De44o6RM.js} +1 -1
- package/dist/client/assets/{domain-settings-DYnLYvkm.js → domain-settings-ChvIy0Wm.js} +1 -1
- package/dist/client/assets/{drawer-CliHEmeh.js → drawer-NLM-7FXB.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DpexHxwz.js → dropdown-menu-BA5vMFVR.js} +1 -1
- package/dist/client/assets/{empty-state-Bttcdn67.js → empty-state-DFBlj7Oy.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CdrxJbbw.js → extract-connection-data-DvTYFZdB.js} +1 -1
- package/dist/client/assets/{file-explorer-KrE43sZb.js → file-explorer-DsHRvYhD.js} +1 -1
- package/dist/client/assets/{file-type-icon-BqeQzn3H.js → file-type-icon-D53u34De.js} +1 -1
- package/dist/client/assets/{files-YqKKAUmX.js → files-CS4u69vv.js} +1 -1
- package/dist/client/assets/{form-Bbk-lY-7.js → form-Sjgg7L1l.js} +1 -1
- package/dist/client/assets/{general-fC_qvwJN.js → general-D8wSedUn.js} +1 -1
- package/dist/client/assets/{github-repo-picker-Cr4ZW67O.js → github-repo-picker-BFtRE41G.js} +1 -1
- package/dist/client/assets/{hooks-BPl3QtCR.js → hooks-CufRYk_8.js} +1 -1
- package/dist/client/assets/{import-from-deco-dialog-CPuC0ABC.js → import-from-deco-dialog-Btg0GawG.js} +1 -1
- package/dist/client/assets/{index-C9HI3IQT.js → index-1sv4-AMe.js} +1 -1
- package/dist/client/assets/{index-CpYfLdbh.js → index-8IVTNNP6.js} +31 -31
- package/dist/client/assets/{index-DUQAYjfP.js → index-9e9TTQwf.js} +1 -1
- package/dist/client/assets/{index-BUBP8yoe.js → index-B9In4A29.js} +1 -1
- package/dist/client/assets/{index-CUkKcI0t.js → index-BHabOdpB.js} +1 -1
- package/dist/client/assets/{index-BHkcyC9T.js → index-Bba1-WC0.js} +1 -1
- package/dist/client/assets/{index-JxN6NNcb.js → index-BgmDXgkB.js} +1 -1
- package/dist/client/assets/index-C81L8B-t.js +26 -0
- package/dist/client/assets/{index-BONY-938.js → index-CtyGaPoF.js} +1 -1
- package/dist/client/assets/{index-CF2fOu8a.js → index-D8MUHYrz.js} +1 -1
- package/dist/client/assets/{index-DiDBx4Jd.js → index-DHIQ-5cy.js} +1 -1
- package/dist/client/assets/{index-B3I-Kacs.js → index-DSt_2A-Z.js} +1 -1
- package/dist/client/assets/{index-Dnojhzzx.js → index-De8cOu3L.js} +1 -1
- package/dist/client/assets/{index-BZ2bAvBZ.js → index-jIVzy9UM.js} +26 -26
- package/dist/client/assets/{index-redirect-DUmXObtL.js → index-redirect-EhTontBM.js} +1 -1
- package/dist/client/assets/{input-CIRD_tZz.js → input-DEW4adst.js} +1 -1
- package/dist/client/assets/{integration-icon-DR2sJls0.js → integration-icon-DRg6drab.js} +1 -1
- package/dist/client/assets/{label-B97xU05r.js → label-DiKcChLe.js} +1 -1
- package/dist/client/assets/{login-aqSvs4xu.js → login-CxnOTKMg.js} +1 -1
- package/dist/client/assets/{mcp-oauth-Djb0mwKI.js → mcp-oauth-D4oN1GD0.js} +1 -1
- package/dist/client/assets/{members-LIiEPwh_.js → members-B_xYxcsB.js} +1 -1
- package/dist/client/assets/{monaco-editor-chBKXgor.js → monaco-editor-BS4nF9vi.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-B2OtnWGL.js → monitoring-stats-row-C_BBIjSY.js} +1 -1
- package/dist/client/assets/{oauth-callback-CPjT2KBB.js → oauth-callback-CQLBs7SS.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CNvn3MnX.js → oauth-callback-ai-provider-WiMYmXXg.js} +1 -1
- package/dist/client/assets/{onboarding-Doy2esp8.js → onboarding-fkSLmT6O.js} +1 -1
- package/dist/client/assets/{org-install-DMtmX55L.js → org-install-DSZrjYGU.js} +1 -1
- package/dist/client/assets/{org-layout-DBS5Dl9D.js → org-layout-B41VWQNh.js} +1 -1
- package/dist/client/assets/{organization-choice-BmyyAVCI.js → organization-choice-jnC4WCjk.js} +1 -1
- package/dist/client/assets/{page-seo-form-Cq4dpyUr.js → page-seo-form-DAOmgLEM.js} +1 -1
- package/dist/client/assets/page-seo-sheet-DM2mzdSm.js +1 -0
- package/dist/client/assets/{popover-Dg4e80gp.js → popover--OXcCKrd.js} +1 -1
- package/dist/client/assets/{post-editor-5nP4PxmA.js → post-editor-S8FcLvTH.js} +1 -1
- package/dist/client/assets/{preview-dialog-CDJVefgZ.js → preview-dialog-D6RImvCH.js} +1 -1
- package/dist/client/assets/{primitives-DUdU_mJX.js → primitives-CdETTpfY.js} +1 -1
- package/dist/client/assets/{profile-kBSMawrR.js → profile-BQCwnbZu.js} +1 -1
- package/dist/client/assets/project-app-view-C7wdVVC-.js +1 -0
- package/dist/client/assets/record-editor-Bc9sycrh.js +1 -0
- package/dist/client/assets/registry-CXYbVCrQ.js +2 -0
- package/dist/client/assets/{registry-layout-CulqOQUe.js → registry-layout-wlGf_Igm.js} +1 -1
- package/dist/client/assets/{require-capability-BmO-FXvQ.js → require-capability-DhJE5Xa9.js} +1 -1
- package/dist/client/assets/{required-auth-layout-k-s2E1Qb.js → required-auth-layout-Fr7G1_os.js} +1 -1
- package/dist/client/assets/{reset-password-zxigX-0y.js → reset-password-De0oku0I.js} +1 -1
- package/dist/client/assets/{roles-CnqkorpG.js → roles-CBq06nUQ.js} +1 -1
- package/dist/client/assets/{save-status-BHYmpruK.js → save-status-faczHAq_.js} +1 -1
- package/dist/client/assets/{scroll-area-D2_mdzGg.js → scroll-area-DtpEC4sX.js} +1 -1
- package/dist/client/assets/{search-input-CIf1Vg9y.js → search-input-q1eD_5_A.js} +1 -1
- package/dist/client/assets/{secrets-Chc4G-P7.js → secrets-BJHqkOjl.js} +1 -1
- package/dist/client/assets/{sections-editor-JadmVfEe.js → sections-editor-DZi5HAI6.js} +1 -1
- package/dist/client/assets/{select-BVI-5ZuA.js → select-DveGPtTs.js} +1 -1
- package/dist/client/assets/{select-model-xkUMgIU9.js → select-model-B9XvZJq8.js} +1 -1
- package/dist/client/assets/{seo-editor-CI81KXn7.js → seo-editor-jmDFQiXH.js} +1 -1
- package/dist/client/assets/{settings-layout-BhTO_Kmx.js → settings-layout-CbS4gDfO.js} +1 -1
- package/dist/client/assets/{settings-section-Cjt1BmIe.js → settings-section-7QSZzGGM.js} +1 -1
- package/dist/client/assets/{sheet-BRZ8PIrM.js → sheet-DotDwyu_.js} +1 -1
- package/dist/client/assets/{shell-controls-pLFf4RJ7.js → shell-controls-CAhd2j7y.js} +1 -1
- package/dist/client/assets/{shell-layout-DRb4EqiB.js → shell-layout-f_7DH_O9.js} +1 -1
- package/dist/client/assets/{shell-route-loading-DuHKXv9P.js → shell-route-loading-9aJk9Hmw.js} +1 -1
- package/dist/client/assets/{sidebar-Bnk9mrkf.js → sidebar-CURGt0uI.js} +1 -1
- package/dist/client/assets/{skeleton-DHujU9w_.js → skeleton-C7KobET9.js} +1 -1
- package/dist/client/assets/{sortable.esm-Cxy3zG7_.js → sortable.esm-ChNxN2l_.js} +1 -1
- package/dist/client/assets/{sso-Bx7AxsDg.js → sso-CuKsNGpr.js} +1 -1
- package/dist/client/assets/{store-B8dfBRZv.js → store-Cm3ytQy5.js} +1 -1
- package/dist/client/assets/store-registry-CdgvqhD2.js +2 -0
- package/dist/client/assets/{studio-tools-DgyOaysE.js → studio-tools-Cs_A_fFf.js} +1 -1
- package/dist/client/assets/{switch-Bkziulms.js → switch-BfP1FSBL.js} +1 -1
- package/dist/client/assets/{table-KIotO0Kc.js → table-BaAa6K56.js} +1 -1
- package/dist/client/assets/{tabs-DHLQ27WW.js → tabs-CzNCi-GX.js} +1 -1
- package/dist/client/assets/{task-status-f5DTkB-J.js → task-status-Du-S_kdA.js} +1 -1
- package/dist/client/assets/{textarea-B3tIZUed.js → textarea-BOuQ8hAr.js} +1 -1
- package/dist/client/assets/{toggle-group-CRyR0oMn.js → toggle-group-g7Pofj3Q.js} +1 -1
- package/dist/client/assets/{toolbar-C_VPmr7n.js → toolbar-B3zorpAW.js} +1 -1
- package/dist/client/assets/{tooltip-CJMltTIZ.js → tooltip-ColKf3vR.js} +1 -1
- package/dist/client/assets/{types-COD2S7bi.js → types-jJ6t0Xlu.js} +1 -1
- package/dist/client/assets/{use-ai-providers-C9TDMEuy.js → use-ai-providers-CRDtHen0.js} +1 -1
- package/dist/client/assets/{use-automations-DJZ5x0Zc.js → use-automations-RE2HC5Hs.js} +1 -1
- package/dist/client/assets/{use-capability-B1kzuPXs.js → use-capability-Dmalupym.js} +1 -1
- package/dist/client/assets/{use-clock-tick-CMT1YGdo.js → use-clock-tick-BLgKQj6G.js} +1 -1
- package/dist/client/assets/{use-collections-BLUmcReO.js → use-collections-83Ppa4v2.js} +1 -1
- package/dist/client/assets/{use-connection-w2D8E4uB.js → use-connection-DvDmo5TH.js} +1 -1
- package/dist/client/assets/{use-copy-B3D09Hxq.js → use-copy-DDVFPKCT.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-Ct9eNtwu.js → use-create-virtual-mcp-CU-3ZPno.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-6krVFdTN.js → use-debounced-autosave-CxjDIf-9.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DFc5oU0M.js → use-delete-connection-1T0rpL6n.js} +1 -1
- package/dist/client/assets/{use-file-configs-2PCi1klw.js → use-file-configs-DsER6W2u.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-_XAuQc_I.js → use-infinite-scroll-DjDhs6Dg.js} +1 -1
- package/dist/client/assets/{use-join-requests-DYWv9410.js → use-join-requests-BXJwJ1GJ.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DN-NMZV3.js → use-mcp-client-B3ayFpDg.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-C617vkSu.js → use-mcp-prompts-C7TKdMuw.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-HiR2aat0.js → use-mcp-tools-CjEY2qt2.js} +1 -1
- package/dist/client/assets/{use-members-C2aOC6i6.js → use-members-Cw6sjYmY.js} +1 -1
- package/dist/client/assets/{use-mobile-Dl3xzohk.js → use-mobile-DtpAlBQq.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-Cv7a1gGO.js → use-navigate-to-agent-CPJoZFzF.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DuB9kXBr.js → use-org-auth-client-nI1SxZvL.js} +1 -1
- package/dist/client/assets/{use-org-sso-DqXQdm0q.js → use-org-sso-DAwQWdJa.js} +1 -1
- package/dist/client/assets/{use-organization-roles-8bKwxyLc.js → use-organization-roles-BZbxfhRO.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CQ99RcOM.js → use-organization-settings-DLeFVLYP.js} +1 -1
- package/dist/client/assets/{use-registry-connections-O8z8zBrP.js → use-registry-connections-CbUctvnH.js} +1 -1
- package/dist/client/assets/{use-secrets-B2tL3Eiw.js → use-secrets-CmRMI5lN.js} +1 -1
- package/dist/client/assets/{use-status-sounds-ChxrQq8Q.js → use-status-sounds-BIOEVUjf.js} +1 -1
- package/dist/client/assets/{use-view-mode-D4efzYWD.js → use-view-mode-CrvIhsqc.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BZBO6fTt.js → use-virtual-mcp-B306vlX1.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-CxWQiSdG.js +1 -0
- package/dist/client/assets/{useQueries-BUNJnzbM.js → useQueries-CcOVMhFe.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BLEicZ3F.js +1 -0
- package/dist/client/assets/{variant-calendar-BRzmbMAw.js → variant-calendar-Bxkf8791.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-FA5jZlaq.js → view-mode-toggle-ClOP_Zq-.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +1 -1
- package/package.json +2 -1
- package/dist/client/assets/index-DkuCmq2i.js +0 -26
- package/dist/client/assets/page-seo-sheet-BchgKYRp.js +0 -1
- package/dist/client/assets/project-app-view-BNdGMa0O.js +0 -1
- package/dist/client/assets/record-editor-BWfKPgxQ.js +0 -1
- package/dist/client/assets/registry-Bj4YS8KM.js +0 -2
- package/dist/client/assets/store-registry-Dw6Kxeid.js +0 -2
- package/dist/client/assets/useInfiniteQuery-D1y00mLl.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BiCq230f.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -13675,7 +13675,7 @@ function rebaseOntoBaseInner(repoDir, base, operator) {
|
|
|
13675
13675
|
}
|
|
13676
13676
|
commitBeforeRebase(repoDir, operator);
|
|
13677
13677
|
try {
|
|
13678
|
-
runGit(repoDir, ["rebase", "-X", "theirs", upstream]);
|
|
13678
|
+
runGit(repoDir, ["rebase", "--autostash", "-X", "theirs", upstream]);
|
|
13679
13679
|
} catch (err) {
|
|
13680
13680
|
if (!isRebaseInProgress(repoDir)) {
|
|
13681
13681
|
throw err;
|
|
@@ -80749,7 +80749,7 @@ ${$}`;_(Z);return}if(E(null,B),t.strategy==="count"){if(w--,w===0)_()}if(t.strat
|
|
|
80749
80749
|
SELECT * FROM link_sandboxes WHERE handle = $handle
|
|
80750
80750
|
`);function _(v){if(t===void 0)return!0;let h=$M(v),D=h&&$M(t)?SVu(t):t,g=h?SVu(v):YVu(v),O=WQt(D,g);return O===""||!O.startsWith("..")&&!SQt(O)}return{upsert(v){f.run({$handle:v.handle,$status:v.status,$sandboxPath:v.sandboxPath,$port:v.port??null,$previewUrl:v.previewUrl??null,$repoCloneUrl:v.repoCloneUrl??null,$branch:v.branch??null,$projectName:v.projectName??null,$error:v.error??null,$now:Date.now()})},list(){return l.all().map(j1i)},reconcile(){let v=Date.now();for(let h of l.all().map(j1i)){if(!_(h.sandboxPath)){c.run({$handle:h.handle,$now:v});continue}if(!$M(h.sandboxPath)){E.run({$handle:h.handle,$now:v});continue}if(h.status==="spawning"||h.status==="ready"||h.status==="failed"||h.status==="missing")$.run({$handle:h.handle,$now:v})}return l.all().map(j1i)},prune(v){let h=[],D=[],g=this.reconcile();for(let O of g){if(!_(O.sandboxPath)){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(v.missing&&O.status==="missing"){w.run({$handle:O.handle}),h.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!v.merged||!$M(O.sandboxPath))continue;if(O.branch===null||O.branch.trim()===""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!p2(O.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let Z=p2(O.sandboxPath,["status","--porcelain"]);if(!Z.ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(Z.stdout.trim()!==""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let B=LVu(O.sandboxPath,O.branch);if(B===null){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!B){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}KQt(O.sandboxPath,{recursive:!0,force:!0}),w.run({$handle:O.handle}),h.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:h,skipped:D}},delete(v){w.run({$handle:v})},inspect(v){let h=d.get({$handle:v});if(h===null)return null;let D=j1i(h),g=0,O=null;if($M(D.sandboxPath)&&p2(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let Z=p2(D.sandboxPath,["status","--porcelain"]);if(Z.ok){let B=Z.stdout.trim();g=B===""?0:B.split(`
|
|
80751
80751
|
`).length}if(D.branch!==null&&D.branch.trim()!=="")O=LVu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:g,merged:O}},close(){u.close()}}}var dHi=()=>{};function QVu(i,u){let t=u?[["umount","-f",i]]:[["fusermount","-u",i],["umount",i]];for(let f of t)if(Bun.spawnSync(f,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}import{existsSync as HQt,readdirSync as bQt}from"fs";import{rm as RQt}from"fs/promises";import{join as HVu}from"path";async function bVu(i,u={}){let t=u.detach??CQt,f=u.exists??HQt,l=u.readdir??(($)=>bQt($)),c=u.rm??(($)=>RQt($,{recursive:!0,force:!0})),E=HVu(i,"org");if(f(E))for(let $ of l(E))t(HVu(E,$));await c(i)}var CQt=(i)=>QVu(i,process.platform==="darwin");var RVu=()=>{};import{join as MQt}from"path";function CVu(i){let u=i.purge??bVu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await u6(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??MQt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof K6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var MVu=N(()=>{Bl();RVu()});import{randomBytes as qQt}from"crypto";import{mkdir as VQt}from"fs/promises";import{createServer as rQt}from"net";import{join as mQt}from"path";function qVu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function eQt(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function VVu(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function aQt(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function oQt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:aQt(i.repo?.cloneUrl)}}function rVu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??sQt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((g,O)=>`http://127.0.0.1:${O}`),E=(g)=>mQt(i.dataDir,"sandboxes",g),$=(g)=>{try{i.registry?.upsert(g)}catch(O){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${g.handle} status=${g.status}:`,O)}},w=(g)=>{try{i.onEvent?.(g)}catch{}},d=async(g)=>{let O=new AbortController,Z=setTimeout(()=>O.abort(),1500);try{let B=await l(`${g}/health`,{signal:O.signal});if(!B.ok)console.warn(`[user-desktop] probe ${g}/health \u2192 ${B.status} (treating as dead)`);return B.ok}catch(B){return console.warn(`[user-desktop] probe ${g}/health failed: ${B instanceof Error?B.message:String(B)} (treating as dead)`),!1}finally{clearTimeout(Z)}},_=(g)=>{console.warn(`[user-desktop] evicting dead daemon handle=${g.handle} port=${g.port}`);try{g.process.kill("SIGTERM")}catch{}if(t.get(g.handle)===g)t.delete(g.handle),$({handle:g.handle,status:"stopped",sandboxPath:E(g.handle),port:null,previewUrl:null,...g.registryMetadata,error:null}),w({handle:g.handle,phase:"evicted"})},v=new Map;function h(){if(t.size<u)return;let g=[...t.values()].filter((Z)=>Z.activeDispatchCount===0).sort((Z,B)=>Z.lastUsedAt-B.lastUsedAt);if(g.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let O=g[0];console.log(`[user-desktop] evicting LRU victim handle=${O.handle} port=${O.port} (cap ${u} reached, size=${t.size})`);try{O.process.kill("SIGTERM")}catch{}t.delete(O.handle),$({handle:O.handle,status:"stopped",sandboxPath:E(O.handle),port:null,previewUrl:null,...O.registryMetadata,error:null}),w({handle:O.handle,phase:"evicted"})}let D=async(g)=>{let O=oQt(g),Z=E(g.handle);$({handle:g.handle,status:"spawning",sandboxPath:Z,port:null,previewUrl:null,...O,error:null}),w({handle:g.handle,phase:"spawning"}),h();let B,F=null,y;try{await VQt(Z,{recursive:!0}),console.log(`[user-desktop] ensure handle=${g.handle} repo=${g.repo?.cloneUrl??"(none)"} branch=${g.repo?.branch??"(none)"} runtime=${g.workload?.runtime??"(autodetect)"} pm=${g.workload?.packageManager??"(autodetect)"}`),y=qQt(24).toString("hex");let[j,A]=await Promise.all([f(),f()]);B=j,console.log(`[user-desktop] spawn handle=${g.handle} port=${B} devPort=${A} workdir=${Z}`),F=await Promise.resolve(i.spawnDaemon({workdir:Z,handle:g.handle,port:B,daemonToken:y,offloadAllowedHosts:g.offloadAllowedHosts??[],offloadAllowSameHostDev:g.offloadAllowSameHostDev??!1,orgFsConfigJson:g.orgFsConfigJson}));try{await i.waitForHealth(B)}catch(n){throw qVu("the sandbox didn't come online in time",n)}console.log(`[user-desktop] healthy handle=${g.handle} port=${B} \u2014 posting config`);try{await i.postConfig(B,A,{repo:g.repo,workload:g.workload,operator:g.operator},y)}catch(n){throw qVu(eQt(n)?"configuration timed out":"the sandbox rejected its configuration",n)}}catch(j){if(console.error(`[user-desktop] sandbox bring-up failed handle=${g.handle} port=${B??"(none)"}${F?" (killing daemon)":""}:`,j),F)try{F.kill("SIGKILL")}catch{}throw w({handle:g.handle,phase:"failed",error:VVu(j)}),$({handle:g.handle,status:"failed",sandboxPath:Z,port:null,previewUrl:null,...O,error:VVu(j)}),j}if(!F||B===void 0)throw Error("sandbox bring-up invariant violated");let T=`http://127.0.0.1:${B}`,U=c(g.handle,B);console.log(`[user-desktop] ready handle=${g.handle} port=${B} sandboxApiUrl=${T} previewUrl=${U}`);let I={handle:g.handle,port:B,process:F,sandboxApiUrl:T,previewUrl:U,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:y,registryMetadata:O};if(t.set(g.handle,I),$({handle:g.handle,status:"ready",sandboxPath:Z,port:B,previewUrl:U,...O,error:null}),w({handle:g.handle,phase:"ready",port:B,previewUrl:U}),F.exited)F.exited.then(()=>{if(t.get(g.handle)===I)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${g.handle} port=${B} \u2014 removing from cache`),t.delete(g.handle),$({handle:g.handle,status:"stopped",sandboxPath:Z,port:null,previewUrl:null,...O,error:null}),w({handle:g.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${g.handle} port=${B} (already replaced/removed)`)});return{sandboxApiUrl:T,previewUrl:U,port:B}};return{async ensureSandbox(g){let O=t.get(g.handle);if(O){if(await d(O.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${g.handle} port=${O.port} (alive)`),O.lastUsedAt=Date.now(),{sandboxApiUrl:O.sandboxApiUrl,previewUrl:O.previewUrl,port:O.port};console.warn(`[user-desktop] cache stale handle=${g.handle} port=${O.port} \u2014 respawning`),_(O)}let Z=v.get(g.handle);if(Z)return console.log(`[user-desktop] joining in-flight ensure handle=${g.handle}`),Z;let B=D(g).finally(()=>{v.delete(g.handle)});return v.set(g.handle,B),B},proxyPort(g){let O=t.get(g);if(O)O.lastUsedAt=Date.now();return O?.port??null},getDaemonToken(g){return t.get(g)?.daemonToken??null},hasHandle(g){return t.has(g)||v.has(g)},recordHit(g){let O=t.get(g);if(O)O.lastUsedAt=Date.now()},acquireDispatch(g){let O=t.get(g);if(!O)return()=>{};O.activeDispatchCount+=1;let Z=!1;return()=>{if(Z)return;Z=!0;let B=t.get(g);if(B)B.activeDispatchCount=Math.max(0,B.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(g){let O=t.get(g);if(!O){console.log(`[user-desktop] delete handle=${g} (not found, no-op)`);return}if(O.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${g} port=${O.port} REFUSED \u2014 ${O.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${g} port=${O.port}`);try{O.process.kill("SIGTERM")}catch{}t.delete(g),$({handle:g,status:"stopped",sandboxPath:E(g),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),w({handle:g,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let g of t.values())try{g.process.kill("SIGTERM")}catch{}t.clear()}}}function sQt(){return new Promise((i,u)=>{let t=rQt();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var mVu=()=>{};import{randomUUID as pQt}from"crypto";import{hostname as iHt}from"os";async function eVu(i){let u=iHt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=jHu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=K1i({path:X1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=rVu({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(n,q)=>E>0?`http://${n}.localhost:${E}`:`http://127.0.0.1:${q}`,spawnDaemon:async(n)=>{let q={DAEMON_BOOT_ID:pQt(),APP_ROOT:n.workdir,PROXY_PORT:String(n.port),DAEMON_TOKEN:n.daemonToken,OFFLOAD_ALLOWED_HOSTS:n.offloadAllowedHosts.join(","),...n.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(n.orgFsConfigJson){let Y=await SHu(i.dataDir);if(Y)q.ORGFS_CONFIG=n.orgFsConfigJson,q.ORGFS_RCLONE_PATH=Y}let S=await t({workdir:n.workdir,env:q,daemonPort:n.port});return{port:n.port,kill:(Y)=>S.kill(Y),exited:S.exited.then(()=>{return})}},postConfig:async(n,q,S,Y)=>{let V={port:q};if(S.workload)V.runtime=S.workload.runtime,V.packageManager={name:S.workload.packageManager,...S.workload.packageManagerPath?{path:S.workload.packageManagerPath}:{}};let L={application:V},Ei=od(S.operator??null);if(Ei)L.operator=Ei;if(S.repo)L.git={repository:{cloneUrl:S.repo.cloneUrl,branch:S.repo.branch},...S.repo.userName&&S.repo.userEmail?{identity:{userName:S.repo.userName,userEmail:S.repo.userEmail}}:{}};await cO(`http://127.0.0.1:${n}`,Y,L)},waitForHealth:async(n)=>{await K4i(`http://127.0.0.1:${n}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await UVu({port:i.port,lookupSandboxPort:(n)=>$.proxyPort(n)});E=w.port,console.log(`Local ingress listening on http://127.0.0.1:${w.port} (use http://<handle>.localhost:${w.port}/)`),i.monitor?.onIngress?.(w.port);let d=WHu({provider:$}),_=async()=>{let n=await R2({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!n)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return n.accessToken},v=await KVu(i.dataDir),h=process.env.npm_package_version??"0.0.0",D=await wHi(),g=jVu(D,{onChange:(n)=>{console.log(`[link-daemon] capabilities detected: +${n.join(",")} (now: ${D.join(",")})`)}}),O=oLi({path:`${i.dataDir}/link/outbox.sqlite`});O.clear();let Z=()=>{},B=new AbortController,F={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:_,provider:$,outbox:O,controlHandler:d,capabilities:D,machineId:v,cliVersion:h,previewPort:w.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>Z(),runLifetimeSignal:B.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let y=await _Vu(F);console.log("[link-daemon] active transport=tunnel");let T,U=new Promise((n)=>{T=n}),I=!1,j=async()=>{if(I)return;I=!0,B.abort(),console.log(`
|
|
80752
|
-
Shutting down\u2026`),g();try{await y.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{O.close()}catch{}c(),T(0)};process.on("SIGINT",()=>void j()),process.on("SIGTERM",()=>void j()),Z=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),j()},y.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!I)console.error("Cluster connection closed permanently; exiting."),j()});let A=CVu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:U,stop:j,stopSandbox:A.stopSandbox,removeSandbox:A.removeSandbox,inspectSandbox:A.inspectSandbox}}catch(E){throw c(),E}}var aVu=N(()=>{MLi();XC();XHu();YHu();LHu();sLi();vVu();PVu();XVu();JVu();jC();dHi();MVu();mVu()});function _Hi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var J1i;var vHi=N(()=>{J1i={name:"decocms",version:"3.91.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.141.0","@openai/codex-darwin-arm64":"npm:@openai/codex@0.141.0-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.141.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.141.0-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.141.0-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.141.0-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.141.0-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@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","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.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",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@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","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var wM={};Qi(wM,{printBanner:()=>fHt,bannerLines:()=>oVu,BANNER_LINES:()=>S1i,BANNER_GRADIENT:()=>Y1i});function tHt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function oVu(i){let u=S1i.map((t,f)=>{let[l,c,E]=tHt(Y1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function fHt(i){console.log("");for(let u of oVu(i))console.log(u);console.log("")}var S1i,Y1i;var FY=N(()=>{S1i=[" \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 "],Y1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as lHt,Text as sVu}from"ink";import{jsx as cHt,jsxs as pVu}from"react/jsx-runtime";function W1i({version:i}){return pVu(lHt,{flexDirection:"column",marginTop:1,children:[S1i.map((u,t)=>cHt(sVu,{color:Y1i[t],children:u},t)),pVu(sVu,{dimColor:!0,children:[" v",i]})]})}var hHi=N(()=>{FY()});function iru(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function yY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function uru(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function tru(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var OHi={};Qi(OHi,{subscribeLinkState:()=>DHi,setSelectedHandle:()=>gHi,setRemoving:()=>Q1i,setPersistedSandboxes:()=>NHt,setPendingConfirm:()=>_M,setMachine:()=>vHt,setLogPath:()=>DHt,setLinkActions:()=>gHt,setIngress:()=>_Ht,setDaemonError:()=>hHt,setClusterUrl:()=>dHt,setCluster:()=>wHt,setActionError:()=>z1i,resetLinkStateForTests:()=>ZHt,removeSandboxRow:()=>NHi,pushSandboxEvent:()=>OHt,getLinkState:()=>dM,applySandboxEvent:()=>fru});function $Ht(i){return i==="spawning"||i==="ready"||i==="failed"}function fru(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:f?.projectName??null,branch:f?.branch??null,sandboxPath:f?.sandboxPath??null}),t}function lru(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:EHt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function X$(){for(let i of L1i)i()}function dM(){return tf}function DHi(i){return L1i.add(i),()=>L1i.delete(i)}function wHt(i){tf={...tf,cluster:i},X$()}function dHt(i){tf={...tf,clusterUrl:i},X$()}function _Ht(i,u){tf={...tf,ingressPort:i,ingressUrl:u},X$()}function vHt(i){tf={...tf,machine:i},X$()}function hHt(i){tf={...tf,daemonError:i},X$()}function DHt(i){tf={...tf,logPath:i},X$()}function gHi(i){tf={...tf,selectedHandle:i},X$()}function _M(i){tf={...tf,pendingConfirm:i},X$()}function z1i(i){tf={...tf,actionError:i},X$()}function Q1i(i,u){if(tf.removingHandles.has(i)===u)return;let t=new Set(tf.removingHandles);if(u)t.add(i);else t.delete(i);tf={...tf,removingHandles:t},X$()}function gHt(i){tf={...tf,actions:i},X$()}function NHi(i){let u=yY(tf.sandboxes),t=tru(u,i,tf.selectedHandle),f=new Map(tf.sandboxes);f.delete(i);let l=new Set(tf.removingHandles);l.delete(i),tf={...tf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},X$()}function NHt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of tf.sandboxes)if($Ht(f.status))u.set(t,f);tf={...tf,sandboxes:u},X$()}function OHt(i){tf={...tf,sandboxes:fru(tf.sandboxes,i)},X$()}function ZHt(){tf=lru(),L1i.clear()}var EHt=20,tf,L1i;var vM=N(()=>{tf=lru(),L1i=new Set});import{spawn as BHt}from"child_process";function FHt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function cru(i,u=process.platform){let t=FHt(u);try{BHt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Eru=()=>{};function $ru(i,u={}){let t=u.openUrl??cru,f=dM(),l=yY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":gHi(uru(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);z1i(null),_M({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(_M(null),$===null||!E)return;Q1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)NHi($.handle);else Q1i($.handle,!1),z1i(w.error)});return}case"confirmNo":_M(null);return;case"quit":if(E)E.quit();return}}var wru=N(()=>{vM();Eru()});function dru(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var _ru={};Qi(_ru,{LinkApp:()=>PHt});import{Box as H1,Text as cl,useInput as yHt}from"ink";import{useSyncExternalStore as THt}from"react";import{jsx as xf,jsxs as w5}from"react/jsx-runtime";function UHt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function PHt(){let i=THt(DHi,dM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=yY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return yHt((l,c)=>{let E=dru(l,c,i.pendingConfirm!==null);if(E!==null)$ru(E)}),w5(H1,{flexDirection:"column",children:[xf(W1i,{version:J1i.version}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:"\u2500".repeat(80)})}),xf(H1,{children:i.cluster==="linked"?w5(cl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?w5(cl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):w5(cl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),xf(H1,{children:i.ingressUrl?w5(cl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):xf(cl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?xf(cl,{dimColor:!0,children:"No previews running yet."}):w5(H1,{flexDirection:"column",children:[w5(H1,{children:[xf(H1,{width:2,flexShrink:0}),xf(H1,{width:TY.project,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),xf(H1,{width:TY.branch,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),xf(H1,{width:TY.status,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=UHt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return w5(H1,{children:[xf(H1,{width:2,flexShrink:0,children:xf(cl,{color:"cyan",children:E?"\u203A":" "})}),xf(H1,{width:TY.project,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),xf(H1,{width:TY.branch,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),xf(H1,{width:TY.status,flexShrink:0,marginRight:1,children:xf(cl,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?xf(H1,{marginTop:1,children:w5(cl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?xf(H1,{marginTop:1,children:w5(cl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?xf(H1,{marginTop:1,children:xf(cl,{color:"yellow",children:iru(i.pendingConfirm)})}):null,i.actionError?xf(H1,{marginTop:1,children:w5(cl,{color:"red",children:["\u2717 ",i.actionError]})}):null,xf(H1,{marginTop:1,children:xf(cl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var TY;var vru=N(()=>{vHi();hHi();wru();vM();TY={project:18,branch:22,status:14}});var hru={};Qi(hru,{runLinkCommand:()=>XHt});import{closeSync as xHt,mkdirSync as IHt,openSync as AHt,writeSync as GHt}from"fs";import{homedir as nHt}from"os";import{join as ZHi}from"path";function kHt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{GHt(u,`${_Hi(l)}
|
|
80752
|
+
Shutting down\u2026`),g();try{await y.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{O.close()}catch{}c(),T(0)};process.on("SIGINT",()=>void j()),process.on("SIGTERM",()=>void j()),Z=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),j()},y.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!I)console.error("Cluster connection closed permanently; exiting."),j()});let A=CVu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:U,stop:j,stopSandbox:A.stopSandbox,removeSandbox:A.removeSandbox,inspectSandbox:A.inspectSandbox}}catch(E){throw c(),E}}var aVu=N(()=>{MLi();XC();XHu();YHu();LHu();sLi();vVu();PVu();XVu();JVu();jC();dHi();MVu();mVu()});function _Hi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var J1i;var vHi=N(()=>{J1i={name:"decocms",version:"3.92.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.141.0","@openai/codex-darwin-arm64":"npm:@openai/codex@0.141.0-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.141.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.141.0-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.141.0-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.141.0-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.141.0-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@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","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.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",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@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","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var wM={};Qi(wM,{printBanner:()=>fHt,bannerLines:()=>oVu,BANNER_LINES:()=>S1i,BANNER_GRADIENT:()=>Y1i});function tHt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function oVu(i){let u=S1i.map((t,f)=>{let[l,c,E]=tHt(Y1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function fHt(i){console.log("");for(let u of oVu(i))console.log(u);console.log("")}var S1i,Y1i;var FY=N(()=>{S1i=[" \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 "],Y1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as lHt,Text as sVu}from"ink";import{jsx as cHt,jsxs as pVu}from"react/jsx-runtime";function W1i({version:i}){return pVu(lHt,{flexDirection:"column",marginTop:1,children:[S1i.map((u,t)=>cHt(sVu,{color:Y1i[t],children:u},t)),pVu(sVu,{dimColor:!0,children:[" v",i]})]})}var hHi=N(()=>{FY()});function iru(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function yY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function uru(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function tru(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var OHi={};Qi(OHi,{subscribeLinkState:()=>DHi,setSelectedHandle:()=>gHi,setRemoving:()=>Q1i,setPersistedSandboxes:()=>NHt,setPendingConfirm:()=>_M,setMachine:()=>vHt,setLogPath:()=>DHt,setLinkActions:()=>gHt,setIngress:()=>_Ht,setDaemonError:()=>hHt,setClusterUrl:()=>dHt,setCluster:()=>wHt,setActionError:()=>z1i,resetLinkStateForTests:()=>ZHt,removeSandboxRow:()=>NHi,pushSandboxEvent:()=>OHt,getLinkState:()=>dM,applySandboxEvent:()=>fru});function $Ht(i){return i==="spawning"||i==="ready"||i==="failed"}function fru(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:f?.projectName??null,branch:f?.branch??null,sandboxPath:f?.sandboxPath??null}),t}function lru(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:EHt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function X$(){for(let i of L1i)i()}function dM(){return tf}function DHi(i){return L1i.add(i),()=>L1i.delete(i)}function wHt(i){tf={...tf,cluster:i},X$()}function dHt(i){tf={...tf,clusterUrl:i},X$()}function _Ht(i,u){tf={...tf,ingressPort:i,ingressUrl:u},X$()}function vHt(i){tf={...tf,machine:i},X$()}function hHt(i){tf={...tf,daemonError:i},X$()}function DHt(i){tf={...tf,logPath:i},X$()}function gHi(i){tf={...tf,selectedHandle:i},X$()}function _M(i){tf={...tf,pendingConfirm:i},X$()}function z1i(i){tf={...tf,actionError:i},X$()}function Q1i(i,u){if(tf.removingHandles.has(i)===u)return;let t=new Set(tf.removingHandles);if(u)t.add(i);else t.delete(i);tf={...tf,removingHandles:t},X$()}function gHt(i){tf={...tf,actions:i},X$()}function NHi(i){let u=yY(tf.sandboxes),t=tru(u,i,tf.selectedHandle),f=new Map(tf.sandboxes);f.delete(i);let l=new Set(tf.removingHandles);l.delete(i),tf={...tf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},X$()}function NHt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of tf.sandboxes)if($Ht(f.status))u.set(t,f);tf={...tf,sandboxes:u},X$()}function OHt(i){tf={...tf,sandboxes:fru(tf.sandboxes,i)},X$()}function ZHt(){tf=lru(),L1i.clear()}var EHt=20,tf,L1i;var vM=N(()=>{tf=lru(),L1i=new Set});import{spawn as BHt}from"child_process";function FHt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function cru(i,u=process.platform){let t=FHt(u);try{BHt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Eru=()=>{};function $ru(i,u={}){let t=u.openUrl??cru,f=dM(),l=yY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":gHi(uru(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);z1i(null),_M({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(_M(null),$===null||!E)return;Q1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)NHi($.handle);else Q1i($.handle,!1),z1i(w.error)});return}case"confirmNo":_M(null);return;case"quit":if(E)E.quit();return}}var wru=N(()=>{vM();Eru()});function dru(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var _ru={};Qi(_ru,{LinkApp:()=>PHt});import{Box as H1,Text as cl,useInput as yHt}from"ink";import{useSyncExternalStore as THt}from"react";import{jsx as xf,jsxs as w5}from"react/jsx-runtime";function UHt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function PHt(){let i=THt(DHi,dM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=yY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return yHt((l,c)=>{let E=dru(l,c,i.pendingConfirm!==null);if(E!==null)$ru(E)}),w5(H1,{flexDirection:"column",children:[xf(W1i,{version:J1i.version}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:"\u2500".repeat(80)})}),xf(H1,{children:i.cluster==="linked"?w5(cl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?w5(cl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):w5(cl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),xf(H1,{children:i.ingressUrl?w5(cl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):xf(cl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?xf(cl,{dimColor:!0,children:"No previews running yet."}):w5(H1,{flexDirection:"column",children:[w5(H1,{children:[xf(H1,{width:2,flexShrink:0}),xf(H1,{width:TY.project,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),xf(H1,{width:TY.branch,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),xf(H1,{width:TY.status,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=UHt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return w5(H1,{children:[xf(H1,{width:2,flexShrink:0,children:xf(cl,{color:"cyan",children:E?"\u203A":" "})}),xf(H1,{width:TY.project,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),xf(H1,{width:TY.branch,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),xf(H1,{width:TY.status,flexShrink:0,marginRight:1,children:xf(cl,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?xf(H1,{marginTop:1,children:w5(cl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?xf(H1,{marginTop:1,children:w5(cl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?xf(H1,{marginTop:1,children:xf(cl,{color:"yellow",children:iru(i.pendingConfirm)})}):null,i.actionError?xf(H1,{marginTop:1,children:w5(cl,{color:"red",children:["\u2717 ",i.actionError]})}):null,xf(H1,{marginTop:1,children:xf(cl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var TY;var vru=N(()=>{vHi();hHi();wru();vM();TY={project:18,branch:22,status:14}});var hru={};Qi(hru,{runLinkCommand:()=>XHt});import{closeSync as xHt,mkdirSync as IHt,openSync as AHt,writeSync as GHt}from"fs";import{homedir as nHt}from"os";import{join as ZHi}from"path";function kHt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{GHt(u,`${_Hi(l)}
|
|
80753
80753
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(_Hi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function jHt(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function XHt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??ZHi(nHt(),"deco"),f=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,c,E,$=()=>{if(E===void 0)return;try{E.close()}catch{}finally{E=void 0}};try{let w=ZHi(t,"sandboxes");E=K1i({path:X1i(t),managedSandboxRoot:w});let d=await n4i({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await jHt(f,d.accessToken);let _=E.reconcile();if(i.prune){let g=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${g.removed.length}, skipped ${g.skipped.length}.`);_=E.reconcile()}let v;if(i.tui){let{render:g}=await import("ink"),{createElement:O}=await import("react"),{LinkApp:Z}=await Promise.resolve().then(() => (vru(),_ru)),{pushSandboxEvent:B,setCluster:F,setClusterUrl:y,setDaemonError:T,setIngress:U,setLogPath:I,setMachine:j,setPersistedSandboxes:A}=await Promise.resolve().then(() => (vM(),OHi));IHt(t,{recursive:!0});let n=ZHi(t,"link.log");c=AHt(n,"w"),I(n),A(_),y(f),F("connecting"),v={onEvent:(q)=>B(q),onIngress:(q)=>U(q,`http://127.0.0.1:${q}`),onCluster:(q)=>F(q),onMachine:(q)=>j(q)},l=kHt(T,c),g(O(Z),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:g}=await Promise.resolve().then(() => (FY(),wM));g(i.version??"0.0.0")}$();let h=process.env.DECOCMS_LINK_MANAGED!=="1",D=await eVu({port:u,clusterBaseUrl:f,dataDir:t,session:d,monitor:v,logFd:c,perSandboxLogs:h,hotReload:i.hotReload});if(i.tui){let{setLinkActions:g}=await Promise.resolve().then(() => (vM(),OHi));g({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{xHt(c)}catch{}$()}}var Dru=N(()=>{CLi();aVu();dHi()});var PHi={};Qi(PHi,{resolveDevLinkClusterUrl:()=>YHt,populateDevLinkToxiProxy:()=>Fru,isDevLinkToxiProxyEnabled:()=>SHt,ensureDevLinkToxiProxy:()=>HHt,buildDevLinkToxiProxyConfig:()=>Zru,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Nru,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Oru});function SHt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function BHi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Zru(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=BHi(i.apiPort,"apiPort"),f=BHi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=BHi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Nru,proxyName:Oru,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:c,clusterUrl:E,logLine:`[dev-link-toxiproxy] ready: ${E} -> ${c}`}}function YHt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function FHi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function UHi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Bru(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Bru(i.cause)}async function yHi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${UHi(l)}`,{cause:l})}}async function Fru(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await yHi(u,"reset",t,{method:"POST"});await FHi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await yHi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await FHi(c,"populate",l)}async function WHt(i,u){let t=`${i.apiUrl}/version`;try{await u6(async()=>{let f=await yHi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(JHt)});await FHi(f,"readiness check",t)},{maxAttempts:KHt,minTimeout:gru,maxTimeout:gru,multiplier:1,jitter:0,isRetriable:(f)=>!Bru(f)})}catch(f){let l=f instanceof K6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${UHi(l)}`,{cause:l})}}async function LHt(i){if(i===null)return"";return await new Response(i).text()}async function THi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${t}): ${UHi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,LHt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let E=c.trim().length>0?`: ${c.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${E}`)}async function zHt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await THi(["rm","-f",t],{ignoreFailure:!0}),await THi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function QHt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await THi(["rm","-f",t],{ignoreFailure:!0})}async function HHt(i){let u=Zru(i),t=i.startDaemon??zHt,f=i.stopDaemon??(i.startDaemon===void 0?QHt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await WHt(u,l),await Fru(u,l)}catch(c){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw c}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var Nru="ToxiProxy",Oru="dev_link_studio",KHt=20,gru=100,JHt=100;var xHi=N(()=>{Bl()});var yru={};Qi(yru,{migrateBetterAuth:()=>IHi});import{getMigrations as bHt}from"better-auth/db";import{sso as RHt}from"@better-auth/sso";import{organization as CHt}from"@decocms/better-auth/plugins";import{admin as MHt,apiKey as qHt,jwt as VHt,magicLink as rHt,mcp as mHt,openAPI as eHt}from"better-auth/plugins";import{emailOTP as aHt}from"better-auth/plugins/email-otp";async function IHi(i){let t={database:xC(i||z2()),plugins:[CHt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),MHt(),qHt(),VHt(),eHt(),mHt({loginPage:"/login"}),RHt(),rHt({sendMagicLink:async()=>{}}),aHt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await bHt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var AHi=N(()=>{zE()});var GHi={};Qi(GHi,{up:()=>oHt,down:()=>sHt});import{sql as V_}from"kysely";async function oHt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function sHt(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var Tru=()=>{};var nHi={};Qi(nHi,{up:()=>pHt,down:()=>ibt});import{sql as Uru}from"kysely";async function pHt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Uru`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Uru`CURRENT_TIMESTAMP`)).execute()}async function ibt(i){await i.schema.dropTable("organization_settings").execute()}var Pru=()=>{};var kHi={};Qi(kHi,{up:()=>ubt,down:()=>tbt});async function ubt(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function tbt(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var jHi={};Qi(jHi,{up:()=>fbt,down:()=>lbt});async function fbt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function lbt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var XHi={};Qi(XHi,{up:()=>cbt,down:()=>Ebt});async function cbt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function Ebt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var KHi={};Qi(KHi,{up:()=>wbt,down:()=>dbt});import{sql as $bt}from"kysely";async function wbt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",$bt`text`).execute()}async function dbt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var xru=()=>{};var JHi={};Qi(JHi,{up:()=>_bt,down:()=>vbt});async function _bt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function vbt(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var SHi={};Qi(SHi,{up:()=>hbt,down:()=>Dbt});import{sql as hM}from"kysely";async function hbt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function Dbt(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var Iru=()=>{};var YHi={};Qi(YHi,{up:()=>Nbt,down:()=>Obt});import{sql as gbt}from"kysely";async function Nbt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Obt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(gbt`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var Aru=()=>{};var WHi={};Qi(WHi,{up:()=>Zbt,down:()=>Bbt});import{sql as H1i}from"kysely";async function Zbt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(H1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(H1i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(H1i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await H1i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function Bbt(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var Gru=()=>{};var LHi={};Qi(LHi,{up:()=>Fbt,down:()=>ybt});async function Fbt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function ybt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var zHi={};Qi(zHi,{up:()=>Tbt,down:()=>Ubt});import{sql as b1i}from"kysely";async function Tbt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await b1i`
|
|
80754
80754
|
UPDATE gateways
|
|
80755
80755
|
SET tool_selection_mode = CASE
|
|
@@ -84194,7 +84194,7 @@ ${l}`:f}}catch{let t=u.split(`
|
|
|
84194
84194
|
Return ONLY valid JSON with this shape:
|
|
84195
84195
|
{"title":"Short imperative commit title (max 72 chars)","body":"1-3 sentence PR description explaining what changed and why"}
|
|
84196
84196
|
|
|
84197
|
-
Use sentence case for the title. No markdown fences.`;var os0=N(()=>{Cf();ca()});function UI4(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:null}function PI4(i){if(!i||i.includes(".."))return!1;return TI4.test(i)}function ss0(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!PI4(u))return null;let t=UI4(i.props);if(t)return{resolveType:u,payload:{props:t}};let{__resolveType:f,...l}=i;return{resolveType:u,payload:l}}function ps0(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${encodeURIComponent(u)}`}var TI4;var ip0=N(()=>{TI4=/^[\w./@-]+$/});function up0(i,u){let t=i?.githubRepo;if(!t?.owner||!t?.name)return null;if(!t.connectionId)return t;if(!u.includes(t.connectionId))return null;return t}async function tp0(i,u,t,f){if(!f.connectionId)throw new pH("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let l=i.organization?.id;if(!l)throw new pH(ZE);await UQ({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(_)=>{let v=_ instanceof Error?_.message:ZE;throw new pH(v)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await PQ(f.connectionId,f.owner,f.name,i.db,i.vault),w=_xi(i),d=await u.proxyDaemonRequest(t,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:c},identity:{userName:E,userEmail:$}},...w?{operator:w}:{}})});if(!d.ok){let _=await d.text().catch(()=>d.statusText);throw Error(`Failed to refresh sandbox git credentials (${d.status}): ${_}`)}}var pH;var fp0=N(()=>{L9();_5u();_Fi();pH=class pH extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function II4(i){if(!i||i.length>255||i.includes("..")||i.startsWith("/")||i.endsWith("/")||i.endsWith(".lock")||!xI4.test(i))throw Error(`Invalid branch name: ${i}`)}function ib(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(nI4)])}function ub(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}async function Rc(i,u,t){let f=ub(i);if(f instanceof Response)return f;let{claimName:l,userId:c,projectRef:E}=i.get("vmClaim"),$=t?.method??"POST",w=null,d=new Headers;if(t?.jsonBody!==void 0)w=t.jsonBody,d.set("content-type","application/json");else if(t?.forwardJsonBody)w=await i.req.text(),d.set("content-type","application/json");let _=t?.signal,v={method:$,headers:d,body:w,..._?{signal:_}:{}},h=async()=>{let D=await f.proxyDaemonRequest(l,u,v);if(t?.map404to410&&D.status===404){try{await D.body?.cancel()}catch{}if(await f.adoptLiveClaim?.({userId:c,projectRef:E},l))D=await f.proxyDaemonRequest(l,u,v);if(D.status===404){try{await D.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",...V8}})}}let g=await D.text(),O=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?jI4(g):g,Z=D.headers.get("content-type")??"application/json";return new Response(O,{status:D.status,headers:{"content-type":Z,...V8}})};try{if(_){let D=h();return D.catch(()=>{}),await Promise.race([D,new Promise((O,Z)=>{if(_.aborted)return Z(_.reason);_.addEventListener("abort",()=>Z(_.reason),{once:!0})})])}return await h()}catch(D){let g=D instanceof Error?D.message:String(D);return i.json({error:`Daemon unreachable: ${g}`},502)}}function jI4(i){try{let u=JSON.parse(i);if(u&&typeof u==="object"&&!Array.isArray(u)&&"repoDir"in u)return JSON.stringify({...u,repoDir:null})}catch{}return i}async function cp0(i,u,t,f="GET",l){let c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null});if(c.status===404&&l){try{await c.body?.cancel()}catch{}if(await i.adoptLiveClaim?.(l,u))c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null})}if(c.status===404){try{await c.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let E=await c.text();if(!c.ok)try{let $=JSON.parse(E);throw Error($.error??`Daemon error (${c.status})`)}catch($){if($ instanceof Error&&$.message!==E)throw $;throw Error(`Daemon error (${c.status})`)}return JSON.parse(E)}function XI4(i){return Ep0.includes(i)}var xI4,AI4=524288,GI4=65536,nI4=1e4,lp0=2000,kI4,V8,Ep0,$p0=()=>{let i=new Hu;return i.use("/:virtualMcpId/:branch/*",kI4),i.post("/:virtualMcpId/:branch/write",(u)=>Rc(u,"/_sandbox/write",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>Rc(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>Rc(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>Rc(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>Rc(u,"/_sandbox/read",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>Rc(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/exec/:script",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}`)}),i.post("/:virtualMcpId/:branch/exec/:script/kill",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/setup/:step",async(u)=>{let t=u.req.param("step");if(!t||!XI4(t))return u.json({error:`step must be one of: ${Ep0.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Bi(u.var.meshContext),c=EFi(f.virtualMcpMetadata);try{await wFi({ctx:u.var.meshContext,runner:f.runner,handle:f.claimName,orgId:l.id,userId:f.userId,entries:c})}catch(E){let $=E instanceof Error?E.message:String(E);return u.json({error:`Failed to push env to daemon: ${$}`},502)}}}return Rc(u,`/_sandbox/setup/${t}`,{signal:u.req.raw.signal,map404to410:!0})}),i.get("/:virtualMcpId/:branch/events",(u)=>{let t=u.get("vmClaim");if(!t.runner)return Wd(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this mesh."})})});return Ms0(u,{ctx:u.var.meshContext,claimName:t.claimName,runner:t.runner,virtualMcpId:t.virtualMcpId,branch:t.branch,userId:t.userId,projectRef:t.projectRef,virtualMcpMetadata:t.virtualMcpMetadata})}),i.get("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(lp0)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(lp0)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>Rc(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.meshContext;try{await v5u(E,t,f);let $=up0(l,c);if($)await tp0(E,t,f,$)}catch($){if($ instanceof pH)return u.json({error:$.message},403,V8);let w=$ instanceof Error?$.message:String($);return u.json({error:w},502,V8)}return Rc(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>Rc(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.meshContext;try{await v5u(l,t,f)}catch(c){let E=c instanceof Error?c.message:String(c);return u.json({error:E},502,V8)}return Rc(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",Bw({maxSize:AI4,onError:(u)=>u.json({error:"Payload too large"},413,V8)}),async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.meshContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,_=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[v,h]=ms0(w)&&_?[w,d]:await Promise.all([cp0(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),cp0(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await as0(E,v,h);return u.json(D,200,V8)}catch($){let w=$ instanceof Error?$.message:String($);if(w==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,V8);return u.json({error:w},502,V8)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(l!=="/.decofile")return u.json({error:"Path not allowed"},403);let c;try{c=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!c)return u.json({error:"Preview not available"},502);let E=c.replace(/\/+$/,""),$;try{$=await fetch(`${E}${l}`)}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",Bw({maxSize:GI4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l;try{l=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!l)return u.json({error:"Preview not available"},502);let c;try{c=await u.req.json()}catch{return u.json({error:"Invalid JSON body"},400)}if(!c||typeof c!=="object"||Array.isArray(c))return u.json({error:"Invalid JSON body"},400);let E=ss0(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $;try{$=await fetch(ps0(l,E.resolveType),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(E.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i};var wp0=N(()=>{sf();WH();$J();Rs0();$3();fPi();yQ();Cs0();qs0();D1u();TQ();os0();ip0();fp0();xI4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;kI4=bs0(async(i,u)=>{let t=i.var.meshContext;try{Si(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return i.json({error:"Organization scope required"},403)}let c=i.req.param("virtualMcpId"),E=i.req.param("branch");if(!c||!E)return i.json({error:"virtualMcpId and branch are required"},400);try{II4(E)}catch(h){let D=h instanceof Error?h.message:String(h);return i.json({error:D},400)}let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return i.json({error:"Virtual MCP not found"},404);let w=D8({orgId:l.id,virtualMcpId:c,branch:E}),d=IH({userId:f,projectRef:w},E),_=$.metadata??null,v;try{v=(await v_(t,{userId:f,branch:E,virtualMcpMetadata:_})).provider}catch{v=null}if(!v)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:d,runner:v,virtualMcpId:c,branch:E,userId:f,projectRef:w,virtualMcpMetadata:_,connectionIds:$.connections?.map((h)=>h.connection_id)??[]}),u()});V8={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Ep0=["clone","install","start"]});var dp0=(i)=>{let u=new Hu;if(u.use("*",sK),u.route("/",GPi()),u.route("/",ze0()),u.route("/",$xi()),u.route("/tools",Ys0()),u.route("/",Ks0()),u.route("/",Bs0({kvStorage:i.kvStorage})),u.route("/",Os0()),u.route("/fs",As0({getConnection:i.getNatsConnection})),u.route("/sandbox",$p0()),u.route("/",ns0()),u.route("/deco-sites",kPi()),u.route("/sso",pUi()),u.route("/",wxi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",ne0()),i.mountDevAssets)u.route("/dev-assets",jPi({orgFromPath:!0}));return u.use("/mcp/:connectionId?",i.mcpAuth),u.use("/mcp/:connectionId/ui-resource",i.mcpAuth),u.use("/mcp/gateway/:virtualMcpId?",i.mcpAuth),u.use("/mcp/virtual-mcp/:virtualMcpId?",i.mcpAuth),u.use("/mcp/self",i.mcpAuth),u.route("/",d70()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.route("/mcp",bFi()),u.route("/mcp/self",Exi()),u.route("/mcp",MFi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var _p0=N(()=>{sf();J3u();ke0();z3u();XPi();Qe0();X3u();Zs0();Fs0();Gs0();Be();Wwu();qFi();l5u();ks0();Js0();c5u();Ws0();E5u();RFi();wp0()});async function vp0(i,u){let t=new Headers({authorization:`Bearer ${i}`,"X-MCP-Session-Auth":"true"}),f=await u.getMcpSession({headers:t}).catch(()=>null);if(f?.userId)return f.userId;let l=await u.verifyApiKey({body:{key:i}}).catch(()=>null);if(l?.valid&&l.key?.userId)return l.key.userId;return null}function N5u(i){try{i?.clear?.()}catch{}}async function hp0({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=Whu(i),$=OAi(E.sub),w=Yb(new TextEncoder().encode(u)),d=qp();try{let _=await Vp(l,d,$,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:c},{algorithm:Vc.v2,exp:Math.floor(t.getTime()/1000),signer:w});return new TextDecoder().decode(rp(_,d))}finally{N5u(d),N5u(w),N5u($)}}var Dp0=N(()=>{UAi()});function KI4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function gp0(){let i=new Hu;return i.post("/links/session",async(u)=>{let f=u.get("meshContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=yu();if(!l.natsTunnelPublicEnabled)return u.json(O5u(),503);if(!l.natsPublicUrl)return u.json(O5u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(O5u(),503)}let c=f5(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await hp0({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:gMu(c),userId:f,allowedConnectionTypes:KI4(l.natsPublicUrl)})}return u.json(NMu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var O5u=()=>({error:"link session unavailable"});var Np0=N(()=>{sf();xt();FQi();Dp0()});async function YI4(i,u){try{return!await i.alive(u)}catch(t){return console.warn(`[vm-events] alive probe failed for ${u}; assuming alive: ${t instanceof Error?t.message:String(t)}`),!1}}async function WI4(i){let{ctx:u,runner:t,claimName:f,userId:l,projectRef:c,sandboxProviderKind:E}=i;try{await t.delete(f)}catch($){console.warn(`[vm-events] runner.delete failed for ${f}: ${$ instanceof Error?$.message:String($)}`)}try{await new tg(u.db).delete({userId:l,projectRef:c},E)}catch($){console.warn(`[vm-events] sandbox_runner_state delete failed for ${l}/${c}/${E}: ${$ instanceof Error?$.message:String($)}`)}}async function LI4(i){let{stream:u,claimName:t,runner:f,signal:l}=i;return new Promise((c)=>{let E=!1,$=!1,w=null,d=(h)=>{if(E)return;E=!0,clearTimeout(_),l.removeEventListener("abort",v),w?.unsubscribe(),c(h)},_=setTimeout(()=>{if($||E)return;u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"claim-never-created",message:"Sandbox claim was never created. The SANDBOX_START call may have failed earlier \u2014 check the start error."})}).catch(()=>{}),d(!1)},JI4),v=()=>d(!1);l.addEventListener("abort",v,{once:!0}),w=ja(f,t,(h)=>{if(E)return;if(h.kind!=="claiming")$=!0;if(u.writeSSE({event:"phase",data:JSON.stringify(h)}).catch(()=>{}),h.kind==="ready")d(!0);else if(h.kind==="failed")d(!1)})})}async function zI4(i){let{stream:u,runner:t,claimName:f,signal:l}=i,c=Date.now(),E=null;while(!l.aborted){let w=null;try{w=await t.proxyDaemonRequest(f,"/_sandbox/events",{method:"GET",headers:new Headers({accept:"text/event-stream"}),body:null,signal:l})}catch(d){if(l.aborted)return;if(Date.now()-c<Op0){await Zt(Zp0,{signal:l}).catch(()=>{});continue}let _=d instanceof Error?d.message:String(d);await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE error: ${_}`})}).catch(()=>{});return}if(w.status===404){try{await w.body?.cancel()}catch{}if(Date.now()-c<Op0){await Zt(Zp0,{signal:l}).catch(()=>{});continue}await u.writeSSE({event:"gone",data:""}).catch(()=>{});return}if(!w.ok||!w.body){try{await w.body?.cancel()}catch{}await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE failed (${w.status}).`})}).catch(()=>{});return}E=w;break}if(!E||!E.body)return;let $=E.body.getReader();try{while(!l.aborted){let{value:w,done:d}=await $.read();if(d)break;if(w)await u.write(w)}}catch{}finally{try{$.releaseLock()}catch{}}}var JI4=90000,SI4=15000,Bp0=()=>{let i=new Hu;return i.get("/",async(u)=>{let t=u.var.meshContext;try{Si(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return u.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return u.json({error:"Organization scope required"},403)}let c=u.req.query("virtualMcpId"),E=u.req.query("branch");if(!c||!E)return u.json({error:"virtualMcpId and branch are required"},400);let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return u.json({error:"Virtual MCP not found"},404);let w=D8({orgId:l.id,virtualMcpId:c,branch:E}),d=IH({userId:f,projectRef:w},E),_=$.metadata??null,v,h=null,D=null;try{let Z=await v_(t,{userId:f,branch:E,virtualMcpMetadata:_});v=Z.provider,h=Z.kind}catch(Z){D=Z instanceof Error?Z:Error(String(Z)),v=null}let g=h&&O8(T6(_),f,E,h),O=!!g&&g.sandboxHandle===d;if(!v)return Wd(u,async(Z)=>{await Z.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:D?.message??"No sandbox runner configured on this mesh."})})});return u.header("X-Accel-Buffering","no"),u.header("Content-Encoding","identity"),Wd(u,async(Z)=>{let B=new AbortController,F=setInterval(()=>{Z.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(F)})},SI4);Z.onAbort(()=>{B.abort(),clearInterval(F)});try{if(O&&h){if(await YI4(v,d)){await WI4({ctx:t,runner:v,claimName:d,userId:f,projectRef:w,sandboxProviderKind:h}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await LI4({stream:Z,claimName:d,runner:v,signal:B.signal})||B.signal.aborted)return;await zI4({stream:Z,runner:v,claimName:d,signal:B.signal})}finally{clearInterval(F)}})}),i},Op0=60000,Zp0=500;var Fp0=N(()=>{sf();$J();$3();Bl();fPi();Xa();yQ();Wdi();Td()});function HI4(i){return i.filter((u)=>u.vendors?.alias).map((u)=>({name:u.name,title:u.title,description:u.description,logo:u.logo,category:u.category,vendor:{alias:u.vendors.alias,url:u.vendors.url}}))}async function bI4(i,u){let t=await fetch(`${i}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:u,Authorization:`Bearer ${u}`,Accept:"application/json"},signal:AbortSignal.timeout(QI4)});if(!t.ok){let f=await t.text().catch(()=>t.statusText);throw console.error(`[deco-apps] Supabase error (${t.status}): ${f.slice(0,200)}`),Error(`External service error (${t.status})`)}return await t.json()}var QI4=1e4,RI4=async(i,u)=>{if(!i.get("meshContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},yp0=()=>{let i=new Hu;return i.use("*",RI4),i.get("/",async(u)=>{let t=yu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await bI4(f,l);return u.json({apps:HI4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var Tp0=N(()=>{sf();xt()});import{z as Lu}from"zod";function Ah(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function sI4(i){if(!i)return null;let u=i.indexOf(":");if(u===-1)return{credentialId:null,modelId:i};let t=i.substring(0,u),f=i.substring(u+1);if(!t||!f)return null;return{credentialId:t,modelId:f}}function pI4(i,u,t){try{return JSON.parse(i)}catch{throw new xp0(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function iA4(i){let u={};for(let t of i)if(t.role==="assistant"&&t.tool_calls)for(let f of t.tool_calls)u[f.id]=f.function.name;return i.map((t)=>{switch(t.role){case"system":return{role:"system",content:t.content};case"user":if(typeof t.content==="string")return{role:"user",content:t.content};return{role:"user",content:t.content.map((l)=>{if(l.type==="text")return{type:"text",text:l.text};return{type:"image",image:l.image_url.url}})};case"assistant":if(t.tool_calls&&t.tool_calls.length>0)return{role:"assistant",content:t.tool_calls.map((l)=>({type:"tool-call",toolCallId:l.id,toolName:l.function.name,input:pI4(l.function.arguments,l.id,l.function.name)}))};return{role:"assistant",content:t.content??""};case"tool":let f=u[t.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:t.tool_call_id,toolName:f,output:{type:"text",value:t.content}}]}}})}function uA4(i){let u=i.map((t)=>{let f=t.function.parameters?aw(t.function.parameters):aw({type:"object",properties:{}});return[t.function.name,ft({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function tA4(i){if(!i)return;return{openai:{response_format:i}}}function fA4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Up0(i,u,t,f,l,c){let E={model:i,messages:u,tools:t,temperature:f.temperature,maxTokens:f.max_tokens,topP:f.top_p,frequencyPenalty:f.frequency_penalty,presencePenalty:f.presence_penalty,stopSequences:f.stop?Array.isArray(f.stop)?f.stop:[f.stop]:void 0,abortSignal:c};return l?{...E,providerOptions:l}:E}function Pp0(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var CI4=256,MI4,qI4,VI4,rI4,mI4,eI4,aI4,oI4,xp0,Ip0,Ap0;var Gp0=N(()=>{Cf();sf();$J();MI4=Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string(),description:Lu.string().optional(),parameters:Lu.record(Lu.string(),Lu.unknown()).optional()})}),qI4=Lu.object({id:Lu.string(),type:Lu.literal("function"),function:Lu.object({name:Lu.string(),arguments:Lu.string()})}),VI4=Lu.discriminatedUnion("role",[Lu.object({role:Lu.literal("system"),content:Lu.string(),name:Lu.string().optional()}),Lu.object({role:Lu.literal("user"),content:Lu.union([Lu.string(),Lu.array(Lu.union([Lu.object({type:Lu.literal("text"),text:Lu.string()}),Lu.object({type:Lu.literal("image_url"),image_url:Lu.object({url:Lu.string(),detail:Lu.string().optional()})})]))]),name:Lu.string().optional()}),Lu.object({role:Lu.literal("assistant"),content:Lu.string().nullable().optional(),name:Lu.string().optional(),tool_calls:Lu.array(qI4).optional()}),Lu.object({role:Lu.literal("tool"),content:Lu.string(),tool_call_id:Lu.string()})]),rI4=Lu.object({type:Lu.literal("text")}),mI4=Lu.object({type:Lu.literal("json_object")}),eI4=Lu.object({type:Lu.literal("json_schema"),json_schema:Lu.object({name:Lu.string(),description:Lu.string().optional(),schema:Lu.record(Lu.string(),Lu.unknown()),strict:Lu.boolean().optional()})}),aI4=Lu.union([rI4,mI4,eI4]),oI4=Lu.object({model:Lu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:Lu.array(VI4),stream:Lu.boolean().optional().default(!1),temperature:Lu.number().min(0).max(2).optional(),max_tokens:Lu.number().positive().optional(),top_p:Lu.number().min(0).max(1).optional(),frequency_penalty:Lu.number().min(-2).max(2).optional(),presence_penalty:Lu.number().min(-2).max(2).optional(),stop:Lu.union([Lu.string(),Lu.array(Lu.string())]).optional(),tools:Lu.array(MI4).optional(),tool_choice:Lu.union([Lu.literal("auto"),Lu.literal("none"),Lu.literal("required"),Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string()})})]).optional(),response_format:aI4.optional(),user:Lu.string().optional()});xp0=class xp0 extends Error{constructor(i){super(i);this.name="MessageConversionError"}};Ip0=new Hu;Ip0.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("meshContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(Ah("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(Ah("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((u.organization.slug??u.organization.id)!==t)return i.json(Ah("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let f=await i.req.json(),l=oI4.safeParse(f);if(!l.success){let Z=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(Ah(`Invalid request: ${Z.message}`,"invalid_request_error",Z.path.length>0?Z.path.join("."):null),400)}let c=l.data,E=sI4(c.model);if(!E)return i.json(Ah("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:$}=E,{modelId:w}=E;if(!$){let Z=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(Z.length===0)return i.json(Ah("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);$=Z[0].id}let d;try{d=await u.aiProviders.activate($,u.organization.id)}catch{return i.json(Ah(`AI provider credential not found or inaccessible: ${$}`,"invalid_request_error","model"),404)}let _=d.aiSdk.languageModel(w),v=iA4(c.messages),h=c.tools?uA4(c.tools):void 0,D=tA4(c.response_format),g=fA4(),O=Math.floor(Date.now()/1000);if(c.stream)return Wd(i,async(Z)=>{let B=Up0(_,v,h,c,D,i.req.raw.signal);try{let F=Fd(B),y=!1,T=0,U="",I=async()=>{if(U.length===0)return;let j=U;U="",await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{content:j},finish_reason:null}]})})};for await(let j of F.fullStream){if(!y&&(j.type==="text-delta"||j.type==="tool-call"))await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),y=!0;if(j.type==="text-delta"){if(U+=j.text,U.length>=CI4)await I()}else if(j.type==="tool-call"){await I();let A=T++;await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{tool_calls:[{index:A,id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify(j.input)}}]},finish_reason:null}]})})}else if(j.type==="finish")await I(),await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{},finish_reason:Pp0(j.finishReason)}],usage:j.totalUsage?{prompt_tokens:j.totalUsage.inputTokens??0,completion_tokens:j.totalUsage.outputTokens??0,total_tokens:j.totalUsage.totalTokens??0}:void 0})})}await I(),await Z.writeSSE({data:"[DONE]"})}catch(F){let y=F;console.error("[openai-compat:stream] Error:",y.message),await Z.writeSSE({data:JSON.stringify({error:{message:y.message,type:"server_error"}})})}});else{let Z=Up0(_,v,h,c,D,i.req.raw.signal),B=await a9(Z),F={role:"assistant",content:B.text||null};if(B.toolCalls&&B.toolCalls.length>0)F.tool_calls=B.toolCalls.map((y)=>({id:y.toolCallId,type:"function",function:{name:y.toolName,arguments:JSON.stringify("input"in y?y.input:{})}})),F.content=null;return i.json({id:g,object:"chat.completion",created:O,model:c.model,choices:[{index:0,message:F,finish_reason:Pp0(B.finishReason)}],usage:{prompt_tokens:B.usage?.inputTokens??0,completion_tokens:B.usage?.outputTokens??0,total_tokens:B.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(Ah("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(Ah(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(Ah(l.message,"server_error"),500)}});Ap0=Ip0});function cA4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??lA4}}var np0,lA4="https://us.i.posthog.com",kp0;var jp0=N(()=>{sf();cri();Bg();HE();xt();Kwu();np0=new Hu;np0.get("/",(i)=>{let u={theme:uf0(),...rO().logo&&{logo:rO().logo},...xd()&&{internalUrl:P4i()},...yu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!yu().firecrawlApiKey,auth:kV0(),posthog:cA4(),runtime:{agentSandbox:!xd()&&yu().sandboxProviderKind==="agent-sandbox"}};return i.json({success:!0,config:u})});kp0=np0});function Xp0(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals")}var Kp0,EA4,$A4,Jp0;var Sp0=N(()=>{sf();n5();AQ();gW();Kp0=new Hu,EA4=["range","if-none-match","if-modified-since"],$A4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Kp0.get("/:org/files/*",async(i)=>{let u=i.get("meshContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(YH(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new P0(401,{message:"Authentication required"})}if(!t)throw new P0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new P0(400,{message:"Missing file key"});let l=await La(f,u);if(!l)throw new P0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&G5()){let w=l.match(/^data:([^;]+);base64,(.+)$/s);if(!w)throw new P0(500,{message:"Invalid data URL from storage"});let[,d,_]=w,v=Buffer.from(_,"base64"),h=new Headers({"Content-Type":d,"Cache-Control":"private, max-age=86400"});return Xp0(h,d),new Response(v,{status:200,headers:h})}let c=new Headers;for(let w of EA4){let d=i.req.header(w);if(d)c.set(w,d)}let E=await fetch(l,{headers:c});if(E.status===403||E.status===404)throw new P0(404,{message:"File not found"});if(!E.ok&&E.status!==304&&E.status!==416)throw console.error(`[files] upstream storage error ${E.status} for key:`,f),new P0(502,{message:"Upstream storage error"});let $=new Headers;for(let w of $A4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),Xp0($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});Jp0=Kp0});function zp0(i){let u=i?.connectFn??vA4,t=null,f=null,l=!1,c=!1,E=!1,$=[];function w(){return t!==null&&!t.isClosed()&&!t.isDraining()&&!E}function d(){console.log(`[NatsProvider] fireReady: ${$.length} callbacks`);for(let h of $)try{h()}catch{}}function _(h){(async()=>{for await(let D of h.status())if(D.type==="disconnect")console.log("[NatsProvider] Disconnected"),E=!0;else if(D.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),E=!1,f=null,d()})().catch(()=>{})}async function v(h,D){let g=0;while(!c)try{t=await u({servers:h,timeout:_A4,reconnect:!0,maxReconnectAttempts:-1,...D?{authenticator:D}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${g} attempt(s)`),f=null,E=!1,_(t),d();return}catch{g++;let O=uc(dA4,wA4,g-1,2,0.5);await Zt(O)}}return{init(h,D){if(l)return;l=!0,c=!1;let g=D?.creds?Yp0.credsAuthenticator(new TextEncoder().encode(D.creds)):void 0;v(h,g).catch(()=>{})},isConnected(){return w()},getConnection(){return w()?t:null},getJetStream(){if(!w())return null;if(!f)f=Lp0.jetstream(t);return f},onReady(h){if($.push(h),w())try{h()}catch{}},async drain(){if(c=!0,l=!1,f=null,E=!1,t){let h=t;t=null,await h.drain().catch(()=>{})}}}}function vA4(i){return Wp0.connect(i)}var Yp0,Wp0,Lp0,wA4=100,dA4=3000,_A4=3000;var Qp0=N(()=>{Bl();Yp0=k(gO(),1),Wp0=k(BQi(),1),Lp0=k(o2(),1)});function tb(i){let u=i?.ttlMs??60000,t=i?.maxSize??1e4,f=i?.updateRecencyOnGet??!1,l=new Map;function c(){if(l.size<=t)return;let E=Date.now();for(let[$,w]of l)if(w.expiresAt<=E)l.delete($);while(l.size>t){let $=l.keys().next().value;if($===void 0)break;l.delete($)}}return{get(E){let $=l.get(E);if(!$)return;if($.expiresAt<=Date.now()){l.delete(E);return}if(f)l.delete(E),l.set(E,$);return $.value},set(E,$){l.delete(E),l.set(E,{value:$,expiresAt:Date.now()+u}),c()},delete(E){l.delete(E)},clear(){l.clear()},size(){return l.size}}}function Z5u(i,u){return`${i}.${u}`}class B5u{cache;constructor(i){this.cache=tb({ttlMs:i?.ttlMs??hA4,maxSize:i?.maxSize??DA4})}async get(i,u){return this.cache.get(Z5u(i,u))??null}async set(i,u,t){this.cache.set(Z5u(i,u),t)}async invalidate(i,u){this.cache.delete(Z5u(i,u))}teardown(){this.cache.clear()}}var hA4=600000,DA4=5000;var Hp0=()=>{};function vxi(i,u){return`${i}:${u}`}function F5u(i){let u=tb({ttlMs:i?.ttlMs??gA4,maxSize:i?.maxSize??NA4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let _=t?.();if(!_)return;try{_.publish(bp0,l.encode(JSON.stringify({organizationId:w,keyId:d,originId:f})))}catch(v){console.warn("[ProviderKeyCache] Publish failed (non-critical):",v)}}return{get(w,d){return u.get(vxi(w,d))},set(w,d,_){u.set(vxi(w,d),_)},invalidate(w,d){u.delete(vxi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(bp0),(async()=>{for await(let d of E)try{let _=JSON.parse(c.decode(d.data));if(_.originId===f)continue;u.delete(vxi(_.organizationId,_.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var bp0="studio.ai-provider-keys.invalidate",gA4=30000,NA4=5000;var Rp0=()=>{};class y5u{options;sub=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor(i){this.options=i}async start(i){if(i)this.onCancel=i;if(this.sub)return;if(!this.onCancel)return;let u=this.options.getConnection();if(!u)return;this.sub=u.subscribe("mesh.decopilot.cancel");let t=new TextDecoder;(async()=>{for await(let f of this.sub)try{let l=JSON.parse(t.decode(f.data));if(l.originId===this.originId)continue;this.onCancel?.(l.taskId)}catch{}})().catch(console.error)}broadcast(i){if(/[.*>\s]/.test(i)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(i);try{let u=this.options.getConnection();if(!u)return;u.publish("mesh.decopilot.cancel",this.encoder.encode(JSON.stringify({taskId:i,originId:this.originId})))}catch(u){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",u)}}publishControlFrame(i,u){}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onCancel=null}}function UA4(){return{name:_8,subjects:[`${VQi}.>`],storage:x_.StorageType.File,max_age:BA4,max_bytes:yA4,max_msgs_per_subject:TA4,discard:x_.DiscardPolicy.Old,retention:x_.RetentionPolicy.Limits,duplicate_window:FA4,num_replicas:1}}class qp0{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(i,u){if(this.chunks++,this.encodeMs+=i,i>this.maxMs)this.maxMs=i;this.bytes+=u}flush(){let i=performance.now(),u=i-this.windowStart;if(this.chunks>0&&u>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(u),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/u*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=i}}function Cp0(i){let u=Mp0.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function AA4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,ZA4().add(1,{"org.id":u??"unknown"}),t===1||t%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${i} (${t} total):`,$)})},get errorCount(){return t}}}class T5u{options;js=null;jsm=null;constructor(i){this.options=i}async init(){let i=this.options.getConnection();if(!i){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let u=this.options.getJetStreamManager?await this.options.getJetStreamManager():await x_.jetstreamManager(i),t=UA4();try{await u.streams.info(_8),await u.streams.update(_8,t)}catch(f){if(f instanceof Error&&f.message.includes("stream not found"))await u.streams.add(t);else if(f instanceof Error&&/can ?not change.*storage|storage type/i.test(f.message))await u.streams.delete(_8),await u.streams.add(t);else throw f}this.js=this.options.getJetStream(),this.jsm=u,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(i,u,t,f){let l=this.js;if(!l){console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`);return}let c=AA4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=Rqu(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let _=performance.now(),v=ZY(d,{runId:u}),h=performance.now()-_;if(cM().record(h),EM().add(1,{"org.id":f??"unknown"}),IA4?.record(h,v.reduce((D,g)=>D+g.data.length,0)),v.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let D of v)c.publish(l,D.subject,D.data,D.headers?Cp0(D.headers):void 0)};(async()=>{let d=i.getReader(),_=0,v=0;try{while(!0){let{done:h,value:D}=await d.read();if(h)break;if(w(D),v++,++_>=64)_=0,await new Promise((g)=>setImmediate(g))}}catch(h){console.warn(`[Decopilot] stream pump error for thread ${u}:`,h?.message??h)}finally{if(d.releaseLock(),$(),xA4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:v,publishErrors:c.errorCount}))}})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),c=ZY(u,{runId:i,dedup:t});if(cM().record(performance.now()-l),EM().add(1),c.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${i} (> MAX_CHUNKED_BYTES)`),!0;for(let E of c)await f.publish(E.subject,E.data,{...E.headers?{headers:Cp0(E.headers)}:{},...E.msgId?{msgID:E.msgId}:{}});return!0}async publishDone(i,u,t){let f=this.js;if(!f)return!1;let l=I1i({runId:i,fenceToken:u,finalSeq:t});return await f.publish(l.subject,l.data,{msgID:l.msgId}),!0}async createTailStream(i,u,t){let f=this.js;if(!f)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${i}; no live tail`),null;let l=t?.deliverPolicy==="new"?x_.DeliverPolicy.New:x_.DeliverPolicy.All,c=t?.closeOnDone??!1,E=s2(i),$;try{$=await(await f.consumers.get(_8,{filter_subjects:E,deliver_policy:l})).consume()}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let _=_di({messages:async function*(){try{for await(let O of $)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{$.stop()}}(),onCancel:()=>$.stop()}).pipeThrough(A1i()).pipeThrough(G1i()).getReader(),v=!1,h=()=>{if(v)return;v=!0;try{_.releaseLock()}catch{}},D=!1,g=()=>{if(D)return;D=!0,$.stop(),_.cancel().catch(()=>{}),h()};return u?.addEventListener("abort",g,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:Z,value:B}=await _.read();if(Z){g(),O.close();return}let F=B;if(F.kind==="done"){if(c){g(),O.close();return}continue}O.enqueue(F.chunk);return}},cancel(){g()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(_8,{filter:s2(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var x_,Mp0,OA4=(i)=>{let u;return()=>u??=i()},ZA4,BA4=86400000000000,FA4=120000000000,yA4=4294967296,TA4=500000,PA4,xA4,IA4;var Vp0=N(()=>{Dtu();gtu();n1i();Q1();aQi();x_=k(o2(),1),Mp0=k(gO(),1),ZA4=OA4(()=>Mt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));PA4=process.env.STREAM_ENCODE_TRACE==="1",xA4=process.env.DECOPILOT_STREAM_TRACE==="1";IA4=PA4?new qp0:null});function rp0(i){let u=i.createFetch??GA4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return U5u;let c=f5(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return U5u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return U5u}}}var U5u,GA4=(i,u)=>C2({connection:i,firstFrameTimeoutMs:u});var mp0=N(()=>{WC();aC();U5u={online:!1,capabilities:[]}});async function*nA4(i){if(!i.body){yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};return}let u=i.body.getReader(),t=!1;try{yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};while(!0){let{done:f,value:l}=await u.read();if(f){t=!0;return}yield{data:Buffer.from(l).toString("base64")}}}finally{try{if(!t)await u.cancel()}catch{}finally{u.releaseLock()}}}function ep0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:kA4}));return async function*(f,l,c){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let $=f5(f),w=u(E),d={method:l.method,headers:l.headers,signal:c?.signal};if(l.body!=null)d.body=l.body;let _=await w(`tunnel://${$}${l.path}`,d);yield*nA4(_)}}var kA4=45000;var ap0=N(()=>{WC();aC()});function op0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:jA4}));return{async publish(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=f5(t),w=await u(c)(`tunnel://${E}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel work publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}function sp0(i){let u=i.createFetch??C2;return{async publishControlFrame(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=f5(t),w=await u(c)(`tunnel://${E}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:lVu(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel control publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}var jA4=45000;var pp0=N(()=>{WC();tHi();aC()});function iit(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function uit(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function tit(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,A5(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,Iq(i,t))}async function XA4(i,u){let{storage:t,streamBuffer:f,sseHub:l}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null});let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at}));return}case"STEP_COMPLETED":l.emit(i.orgId,e6i(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await tit(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await tit(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null});f.purge(i.taskId);let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"failed",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at})),l.emit(i.orgId,Iq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function fit(i,u){for(let{event:t}of i)await XA4(t,u)}var lit=N(()=>{wf()});function cit(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function Eit(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class P5u{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},KA4)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=iit(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=uit(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),JA4.has(l.type))wit().add(1,{"org.id":l.orgId});else if(SA4.has(l.type)&&c?.status.tag==="running")wit().add(-1,{"org.id":l.orgId})}return f}react(i){return fit(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let $=await this.deps.storage.getProgress(t,f.orgId);c=Eit({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!cit({lastProgressAt:c,now:i,idleTimeoutMs:$it}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let $=this.states.get(t);if($?.status.tag==="running")$.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${$it/60000}m) ...`),YA4().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch(($)=>{console.error("[RunRegistry] Reaper execute failed",$)})}}}var KA4=300000,$it=600000,JA4,SA4,dit=(i)=>{let u;return()=>u??=i()},wit,YA4;var _it=N(()=>{lit();Q1();JA4=new Set(["RUN_STARTED","RUN_RESUMED"]),SA4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),wit=dit(()=>Mt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),YA4=dit(()=>Mt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});function hxi(i,u,t,f){if(!f)return!1;return i.emit(u,A5(t,f.status,{title:f.title??void 0,virtualMcpId:f.virtual_mcp_id??void 0,createdBy:f.created_by??void 0,triggerId:f.trigger_id??null,branch:f.branch??null,createdAt:f.created_at,updatedAt:f.updated_at})),!0}var vit=N(()=>{wf()});class x5u{storage;options;timer=null;constructor(i,u={}){this.storage=i;this.options=u}start(){if(this.timer)return;let i=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},i)}async runOnce(){let i=this.options.staleAfterMs??3600000;try{let u=await this.storage.sweepAbandoned(i);if(u>0)console.log(`[async-research-sweeper] marked ${u} stale jobs as abandoned`);return u}catch(u){return console.error("[async-research-sweeper] sweep failed",u),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as WA4,rm as Dxi}from"fs/promises";import{join as gxi}from"path";async function Nxi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-LA4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await wJ(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await hit(i,l,u);else if(!l.startsWith(".")){let c=gxi(i,l),E=await wJ(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await hit(c,w,u)}if((await wJ(c)).length===0)await Dxi(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function hit(i,u,t){let f=0,l=gxi(i,u),c=await wJ(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=gxi(l,$),d=await wJ(w);for(let v of d){if(!/^\d{2}$/.test(v))continue;let h=new Date(`${u}-${$}-${v}T00:00:00Z`);if(isNaN(h.getTime()))continue;if(h<t){let D=gxi(w,v);await Dxi(D,{recursive:!0,force:!0}),f++}}if((await wJ(w)).length===0)await Dxi(w,{recursive:!0,force:!0})}if((await wJ(l)).length===0)await Dxi(l,{recursive:!0,force:!0});return f}async function wJ(i){try{return(await WA4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var LA4=30;var I5u=()=>{};import{DBOS as A5u,SchedulerMode as zA4}from"@dbos-inc/dbos-sdk";async function HA4(){let i=[ad(),mS(),wD()],u=0;for(let t of i)try{u+=await Nxi(t)}catch(f){console.error("[monitoring-retention] cleanup failed:",f)}return console.log(`[monitoring-retention] deleted ${u} day-dir(s) across ${i.length} signal dir(s)`),{deleted:u,dirs:i.length}}async function bA4(i,u){await A5u.runStep(()=>HA4(),{name:"monitoringRetention"})}function git(){if(Dit)return;Dit=!0;let i=A5u.registerWorkflow(bA4,{name:"monitoringRetentionWorkflow"});A5u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:QA4,mode:zA4.ExactlyOncePerIntervalWhenActive})}var QA4="23 4 * * *",Dit=!1;var Nit=N(()=>{jw();I5u()});function Oit(i){return async(u,t)=>{let f=await i.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","=",t).where("member.organizationId","=",u).executeTakeFirst();if(!f)return console.warn(`[automationContextFactory] User ${t} not found in org ${u} \u2014 returning null`),null;let l=await Y9.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let c=await xiu(i.db,u,f.role);return l.boundAuth=Piu({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new KZ(t,void 0,l.boundAuth,f.role,"self"),swi(l,{id:f.orgId,slug:f.orgSlug}),l}}var Zit=N(()=>{JZ();Ne()});import{EventEmitter as RA4}from"events";var G5u;var Bit=N(()=>{UO();G5u=new RA4;G5u.on("request",(i)=>{o_(i)})});function Fit(){return async(i,u)=>{let t=Date.now(),f=i.req.method,l=i.req.path;if(l==="/api/auth/get-session"||l.includes("favicon")){await u();return}let c="",E=!1;if(l.startsWith("/mcp")&&f==="POST"){E=!0;try{if(i.req.header("Content-Type")?.includes("application/json")){let h=await i.req.raw.clone().json();if(h.method==="tools/call"&&h.params?.name){let D=fb(h.params.name),g=h.params.arguments||{},O=Object.keys(g).map((B)=>fb(B)),Z=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";c=`${v1.tool}${D}${v1.dim}(${Z})${v1.reset}`}else if(h.method)c=`${v1.dim}${fb(h.method)}${v1.reset}`}}catch{}}let $=fb(l);if(l.startsWith("/mcp/conn_")){let _=l.split("/")[2]??"";$=`/mcp/${v1.mcp}${fb(_.slice(0,12))}\u2026${v1.reset}`}else if(l==="/mcp")$=`${v1.mcp}/mcp${v1.reset}`;else if(l==="/mcp/registry")$=`${v1.mcp}/mcp/registry${v1.reset}`;let w=MA4(f),d=E?"\u25C0":"\u2190";if(!ili())console.log(`${v1.dim}${d}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""}`);try{await u()}finally{let _=Date.now()-t,v=i.res.status,h=CA4(v),D=_<1000?`${_}ms`:`${(_/1000).toFixed(1)}s`,g=E?"\u25B6":"\u2192";if(!ili())console.log(`${v1.dim}${g}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""} ${h}${v}${v1.reset} ${v1.duration}${D}${v1.reset}`);G5u.emit("request",{method:f,path:fb(l),status:v,duration:_,timestamp:new Date})}}}var v1,CA4=(i)=>{if(i>=500)return v1.serverError;if(i>=400)return v1.clientError;if(i>=300)return v1.redirect;return v1.ok},MA4=(i)=>{return v1[i]||v1.reset},fb=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var yit=N(()=>{UO();Bit();v1={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 xit}from"crypto";import{mkdir as qA4,readdir as VA4,rm as Tit,stat as Iit}from"fs/promises";import{join as k5u,relative as rA4}from"path";import{z as I0}from"zod";function Git(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return k5u(mA4,u)}function nit(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function n5u(i,u){let t=Git(i),f=nit(u);return k5u(t,f)}function eA4(i,u,t,f){let l=yu().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return xit("sha256",l).update(c).digest("hex")}function Pit(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=eA4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${nit(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function kit(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${xit("md5","etag").update(f).digest("hex")}"`}async function jit(i,u,t,f,l){try{let c=await VA4(i,{withFileTypes:!0});for(let E of c){let $=k5u(i,E.name),d=rA4(u,$).replace(/\\/g,"/");if(t&&!d.startsWith(t))continue;if(E.isDirectory())if(f){let _=d+"/";if(!t||_.startsWith(t)){if(!(t?d.slice(t.length):d).includes("/"))l.commonPrefixes.add(_)}}else await jit($,u,t,f,l);else if(E.isFile()){if(f&&t){let _=d.slice(t.length);if(_.includes(f)){let v=_.indexOf(f),h=t+_.slice(0,v+1);l.commonPrefixes.add(h);continue}}try{let _=await Iit($);l.objects.push({key:d,size:_.size,lastModified:_.mtime.toISOString(),etag:kit($,_.mtime,_.size)})}catch{}}}}catch{}}function Xit(i,u){let f=Bi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:I0.object({prefix:I0.string().optional(),maxKeys:I0.number().optional().default(1000),continuationToken:I0.string().optional(),delimiter:I0.string().optional()}),outputSchema:I0.object({objects:I0.array(I0.object({key:I0.string(),size:I0.number(),lastModified:I0.string(),etag:I0.string()})),nextContinuationToken:I0.string().optional(),isTruncated:I0.boolean(),commonPrefixes:I0.array(I0.string()).optional()}),handler:async(l)=>{let c=l,E=c.prefix||"",$=c.maxKeys??1000,w=c.delimiter,d=c.continuationToken,_=Git(f);await qA4(_,{recursive:!0});let v={objects:[],commonPrefixes:new Set};await jit(_,_,E,w,v),v.objects.sort((Z,B)=>Z.key.localeCompare(B.key));let h=0;if(d){if(h=v.objects.findIndex((Z)=>Z.key>d),h===-1)h=v.objects.length}let D=v.objects.slice(h,h+$),g=h+$<v.objects.length,O=g?D[D.length-1]?.key:void 0;return{objects:D,isTruncated:g,nextContinuationToken:O,commonPrefixes:Array.from(v.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({contentType:I0.string().optional(),contentLength:I0.number(),lastModified:I0.string(),etag:I0.string(),metadata:I0.record(I0.string(),I0.string()).optional()}),handler:async(l)=>{let c=l,E=n5u(f,c.key),$=await Iit(E);return{contentType:Q3u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:kit(E,$.mtime,$.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Uit;return{url:Pit(u,f,c.key,E,"GET"),expiresIn:E}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional(),contentType:I0.string().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Uit;return{url:Pit(u,f,c.key,E,"PUT"),expiresIn:E}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({success:I0.boolean(),key:I0.string()}),handler:async(l)=>{let c=l,E=n5u(f,c.key);try{return await Tit(E),{success:!0,key:c.key}}catch{return{success:!1,key:c.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:I0.object({keys:I0.array(I0.string()).max(1000)}),outputSchema:I0.object({deleted:I0.array(I0.string()),errors:I0.array(I0.object({key:I0.string(),message:I0.string()}))}),handler:async(l)=>{let c=l,E=[],$=[];return await Promise.all(c.keys.map(async(w)=>{let d=n5u(f,w);try{await Tit(d),E.push(w)}catch(_){$.push({key:w,message:_ instanceof Error?_.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function j5u(i,u,t){let f=Xit(u,t),l=new nD({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:k1});for(let E of f){let $="shape"in E.inputSchema?E.inputSchema.shape:I0.object({}).shape,w=E.outputSchema&&"shape"in E.outputSchema?E.outputSchema.shape:I0.object({}).shape;l.registerTool(E.name,{description:E.description??"",inputSchema:$,outputSchema:w,annotations:E.annotations,_meta:E._meta},async(d)=>{try{let _=await E.handler(d);return{content:[{type:"text",text:JSON.stringify(_)}],structuredContent:_}}catch(_){return{content:[{type:"text",text:`Error: ${_.message}`}],isError:!0}}})}let c=new g3({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),ch(l,c,i,"mcp:dev-assets")}async function Kit(i,u,t,f){let c=Xit(t,f).find((E)=>E.name===i);if(!c)return{content:[{type:"text",text:`Tool not found: ${i}`}],isError:!0};try{let E=await c.handler(u);return{content:[{type:"text",text:JSON.stringify(E)}]}}catch(E){return{content:[{type:"text",text:E instanceof Error?E.message:String(E)}],isError:!0}}}var mA4="./data/assets",Uit=3600,Ait,Jit;var Sit=N(()=>{xt();ba();sf();Gq();kQ();mE();XPi();Ait=new Hu;Ait.all("/",async(i)=>{let u=i.get("meshContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return j5u(i.req.raw,u,f)});Jit=Ait});var Yit={};Qi(Yit,{mountDevRoutes:()=>aA4});function aA4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`;return j5u(f.req.raw,l,E)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`,$=f.req.param("toolName");if(!$)return f.json({error:"Missing tool name"},400);let w=await f.req.json(),d=await Kit($,w,l,E);if(d.isError)return f.json(d.content,500);return f.json(d.content)}),i.use("/mcp/dev-assets",u),i.route("/mcp/dev-assets",Jit);let t=new Hu;t.use("*",Yd({mountPath:"/api/dev-assets"})),t.route("/",jPi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var Wit=N(()=>{sf();K3u();XPi();Sit()});var Lit=N(()=>{Viu();riu();DB()});var Oxi=N(()=>{Lit()});var Qit={};Qi(Qit,{streamAgent:()=>zit,createDecopilotClient:()=>sA4});async function oA4(i){let{parseJsonEventStream:u,uiMessageChunkSchema:t}=await Promise.resolve().then(() => (Cf(),dtu));return u({stream:i,schema:t}).pipeThrough(new TransformStream({transform(f,l){if(!f.success)throw f.error;l.enqueue(f.value)}}))}async function zit(i,u,t,f,l){let{readUIMessageStream:c}=await Promise.resolve().then(() => (Cf(),dtu)),E=t.value??t.id;if(!E)throw Error("Agent binding has no id or value \u2014 cannot resolve agent");let $=f.credentialId??t.credentialId,w=f.thinking??t.thinking,d=w?.id,_={messages:f.messages,...d?{models:{credentialId:$,thinking:w,...f.fast??t.fast?{fast:f.fast??t.fast}:{}}}:{},agent:{id:E},temperature:f.temperature??t.temperature,toolApprovalLevel:f.toolApprovalLevel??t.toolApprovalLevel,mode:f.mode??t.mode??"default",...f.memory?{memory:f.memory}:{},...f.thread_id?{thread_id:f.thread_id}:{}},v=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","x-mesh-token":u,Authorization:`Bearer ${u}`},body:JSON.stringify(_),signal:l?.signal});if(!v.ok){let D=await v.text().catch(()=>""),g=`HTTP ${v.status}`;try{let O=JSON.parse(D);if(O?.error)g=O.error}catch{if(D)g=D}throw Error(g)}if(!v.body)throw Error("Empty response body from decopilot stream");let h=await oA4(v.body);return c({stream:h})}function sA4(i){let{baseUrl:u,orgSlug:t,token:f}=i,l=`${u}/${t}/decopilot/runtime/stream`;return{stream(c,E){let $={__type:"@deco/agent",id:c.agent.id,credentialId:c.credentialId??"",thinking:c.thinking??{id:"",title:""},fast:c.fast,toolApprovalLevel:c.toolApprovalLevel,mode:c.mode,temperature:c.temperature};return zit(l,f,$,c,E)}}}import{z as yw}from"zod";function Hit(i){let u=i.properties;if(!u)return i;for(let t of Object.values(u)){let f=t.properties;if(!f?.__type?.const)continue;let l=f.__type.const,c=pA4.get(l);if(!c)continue;let E=c.map(($)=>({name:String($.name),...$.inputSchema&&{inputSchema:yw.toJSONSchema($.inputSchema)},...$.outputSchema&&{outputSchema:yw.toJSONSchema($.outputSchema)}}));f.__binding={const:E}}return i}var pA4,$K6,iG4=(i)=>{return typeof i==="object"&&i!==null&&i.__type==="@deco/agent"},K5u=(i)=>{return typeof i==="object"&&i!==null&&typeof i.__type==="string"&&i.__type!=="@deco/agent"&&typeof i.value==="string"},Zxi=(i,u,t)=>{let f=t?{"x-caller-app":t}:void 0;if(u.cookie)f??={},f.cookie=u.cookie;if(u.token)f??={},f["x-mesh-token"]=u.token;return{type:"HTTP",url:new URL(`/mcp/${i}`,u.meshUrl).href,token:u.token,headers:f}},uG4=(i,u,t)=>{let f=Zxi(i,u,t);return new Proxy(Wz.forConnection(f),{get(l,c){if(c==="value")return i;if(c==="__type")return t;return l[c]}})},tG4=(i,u)=>{let t=u.organizationSlug;if(!t)throw Error("organizationSlug is required for agent bindings");let f=`${u.meshUrl}/api/${t}/decopilot/runtime/stream`;return{STREAM:async(l,c)=>{let{streamAgent:E}=await Promise.resolve().then(() => Qit);return E(f,u.token,i,l,c)}}},X5u=(i,u)=>{if(i===null||i===void 0)return i;if(Array.isArray(i))return i.map((t)=>X5u(t,u));if(typeof i==="object"){if(iG4(i))return tG4(i,u);if(K5u(i))return uG4(i.value,u,i.__type);let t={};for(let[f,l]of Object.entries(i))t[f]=X5u(l,u);return t}return i},bit=(i)=>{return X5u(i.state,i)};var lb=N(()=>{Oxi();pA4=new Map;$K6=yw.object({id:yw.string(),title:yw.string(),capabilities:yw.object({vision:yw.boolean().optional(),text:yw.boolean().optional(),tools:yw.boolean().optional(),reasoning:yw.boolean().optional()}).passthrough().optional(),provider:yw.string().optional().nullable(),limits:yw.object({contextWindow:yw.number().optional(),maxOutputTokens:yw.number().optional()}).passthrough().optional()})});var fG4,Rit=(i,u,t)=>{if(!u)return null;if(i===void 0||i==="*")return"*";if(typeof i==="string")return i===u?i:null;if(Array.isArray(i))return i.includes(u)?u:null;if(typeof i==="function")return i(u,t)??null;return null},lG4=(i,u,t)=>{let f=u.headers.get("Origin"),l=Rit(t.origin,f,u);if(l)i.set("Access-Control-Allow-Origin",l);if(t.credentials)i.set("Access-Control-Allow-Credentials","true");if(t.exposeHeaders?.length)i.set("Access-Control-Expose-Headers",t.exposeHeaders.join(", "))},Cit=(i,u)=>{let t=new Headers,f=i.headers.get("Origin"),l=Rit(u.origin,f,i);if(l)t.set("Access-Control-Allow-Origin",l);if(u.credentials)t.set("Access-Control-Allow-Credentials","true");let c=u.allowMethods??fG4;t.set("Access-Control-Allow-Methods",c.join(", "));let E=i.headers.get("Access-Control-Request-Headers");if(u.allowHeaders?.length)t.set("Access-Control-Allow-Headers",u.allowHeaders.join(", "));else if(E)t.set("Access-Control-Allow-Headers",E);if(u.maxAge!==void 0)t.set("Access-Control-Max-Age",u.maxAge.toString());return new Response(null,{status:204,headers:t})},Mit=(i,u,t)=>{let f=new Headers(i.headers);return lG4(f,u,t),new Response(i.body,{status:i.status,statusText:i.statusText,headers:f})};var qit=N(()=>{fG4=["GET","HEAD","PUT","POST","DELETE","PATCH"]});function Vit(i=32){let t=new Uint8Array(i);return crypto.getRandomValues(t),Array.from(t,(f)=>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[f%62]).join("")}function cG4(i){try{let u=new URL(i);return u.protocol==="https:"||u.hostname==="localhost"||u.hostname.endsWith(".localhost")||u.hostname==="127.0.0.1"||!u.protocol.startsWith("http")}catch{return!1}}function rit(i){return btoa(JSON.stringify(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function mit(i){try{let u=i.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(u))}catch{return null}}function eit(i){return{handleProtectedResourceMetadata:(d)=>{let _=Gh(new URL(d.url)),v=`${_.origin}/mcp`;return Response.json({resource:v,authorization_servers:[_.origin],scopes_supported:["*"],bearer_methods_supported:["header"],resource_signing_alg_values_supported:["RS256","none"]})},handleAuthorizationServerMetadata:(d)=>{let v=Gh(new URL(d.url)).origin;return Response.json({issuer:v,authorization_endpoint:`${v}/authorize`,token_endpoint:`${v}/token`,registration_endpoint:`${v}/register`,scopes_supported:["*"],response_types_supported:["code"],response_modes_supported:["query"],grant_types_supported:["authorization_code","refresh_token"],token_endpoint_auth_methods_supported:["none","client_secret_post"],code_challenge_methods_supported:["S256","plain"]})},handleAuthorize:(d)=>{let _=Gh(new URL(d.url)),v=_.searchParams.get("redirect_uri"),h=_.searchParams.get("response_type"),D=_.searchParams.get("state"),g=_.searchParams.get("code_challenge"),O=_.searchParams.get("code_challenge_method");if(!v)return Response.json({error:"invalid_request",error_description:"redirect_uri required"},{status:400});if(h!=="code")return Response.json({error:"unsupported_response_type",error_description:"Only 'code' is supported"},{status:400});let Z=Gh(new URL(`${_.origin}/oauth/callback`)),B=Z.toString(),y=rit({redirectUri:v,clientState:D??void 0,codeChallenge:g??void 0,codeChallengeMethod:O??void 0,oauthCallbackUri:B});Z.searchParams.set("state",y);let T=i.authorizationUrl(Z.toString());return Response.redirect(T,302)},handleOAuthCallback:async(d)=>{let _=Gh(new URL(d.url)),v=_.searchParams.get("code"),h=_.searchParams.get("state"),D=_.searchParams.get("error"),g=h?mit(h):null;if(D){let O=_.searchParams.get("error_description")??"Authorization failed";if(g?.redirectUri){let Z=Gh(new URL(g.redirectUri));if(Z.searchParams.set("error",D),Z.searchParams.set("error_description",O),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}return Response.json({error:D,error_description:O},{status:400})}if(!v||!g)return Response.json({error:"invalid_request",error_description:"Missing code or state"},{status:400});try{let O=g.oauthCallbackUri??Gh(new URL(`${_.origin}/oauth/callback`)).toString(),Z={code:v,redirect_uri:O},B=await i.exchangeCode(Z),F={accessToken:B.access_token,tokenType:B.token_type,refreshToken:B.refresh_token,expiresIn:B.expires_in,scope:B.scope,codeChallenge:g.codeChallenge,codeChallengeMethod:g.codeChallengeMethod},y=rit(F),T=Gh(new URL(g.redirectUri));if(T.searchParams.set("code",y),g.clientState)T.searchParams.set("state",g.clientState);return Response.redirect(T.toString(),302)}catch(O){console.error("OAuth callback error:",O);let Z=Gh(new URL(g.redirectUri));if(Z.searchParams.set("error","server_error"),Z.searchParams.set("error_description","Failed to exchange authorization code"),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}},handleToken:async(d)=>{try{let _=d.headers.get("content-type")??"",v;if(_.includes("application/x-www-form-urlencoded")){let F=await d.formData();v=Object.fromEntries(F.entries())}else{let F=await d.json();if(typeof F!=="object"||F===null||Array.isArray(F))return Response.json({error:"invalid_request",error_description:"Request body must be a JSON object"},{status:400});v=F}let{code:h,code_verifier:D,grant_type:g,refresh_token:O}=v;if(g==="refresh_token"){if(typeof O!=="string"||!O)return Response.json({error:"invalid_request",error_description:"refresh_token is required and must be a string"},{status:400});if(!i.refreshToken)return Response.json({error:"unsupported_grant_type",error_description:"refresh_token grant not supported"},{status:400});let F;try{F=await i.refreshToken(O)}catch(T){if(T instanceof J5u)return Response.json({error:T.error,...T.errorDescription?{error_description:T.errorDescription}:{}},{status:400});throw T}let y={access_token:F.access_token,token_type:F.token_type};if(F.refresh_token)y.refresh_token=F.refresh_token;if(F.expires_in!==void 0)y.expires_in=F.expires_in;if(F.scope)y.scope=F.scope;return Response.json(y,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}if(g!=="authorization_code")return Response.json({error:"unsupported_grant_type",error_description:"Only authorization_code and refresh_token supported"},{status:400});if(typeof h!=="string"||!h)return Response.json({error:"invalid_request",error_description:"code is required and must be a string"},{status:400});let Z=mit(h);if(!Z||!Z.accessToken)return Response.json({error:"invalid_grant",error_description:"Invalid or expired code"},{status:400});if(Z.codeChallenge){if(typeof D!=="string"||!D)return Response.json({error:"invalid_grant",error_description:"code_verifier required and must be a string"},{status:400});let F;if(Z.codeChallengeMethod==="S256"){let T=new TextEncoder().encode(D),U=await crypto.subtle.digest("SHA-256",T);F=btoa(String.fromCharCode(...new Uint8Array(U))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}else F=D;if(F!==Z.codeChallenge)return Response.json({error:"invalid_grant",error_description:"Invalid code_verifier"},{status:400})}let B={access_token:Z.accessToken,token_type:Z.tokenType};if(Z.refreshToken)B.refresh_token=Z.refreshToken;if(Z.expiresIn!==void 0)B.expires_in=Z.expiresIn;if(Z.scope)B.scope=Z.scope;return Response.json(B,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Token exchange error:",_),Response.json({error:"server_error",error_description:"Failed to process token request"},{status:500})}},handleClientRegistration:async(d)=>{try{let _=await d.json();if(!_.redirect_uris||_.redirect_uris.length===0)return Response.json({error:"invalid_redirect_uri",error_description:"At least one redirect_uri is required"},{status:400});for(let O of _.redirect_uris)if(!cG4(O))return Response.json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${O}`},{status:400});let v=Vit(32),h=_.token_endpoint_auth_method!=="none"?Vit(32):void 0,D=Math.floor(Date.now()/1000),g={client_id:v,client_secret:h,client_name:_.client_name,redirect_uris:_.redirect_uris,grant_types:_.grant_types??["authorization_code"],response_types:_.response_types??["code"],token_endpoint_auth_method:_.token_endpoint_auth_method??"client_secret_post",scope:_.scope,client_id_issued_at:D,client_secret_expires_at:0};if(i.persistence)await i.persistence.saveClient(g);return new Response(JSON.stringify(g),{status:201,headers:{"Content-Type":"application/json","Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Client registration error:",_),Response.json({error:"invalid_client_metadata",error_description:"Invalid client registration request"},{status:400})}},createUnauthorizedResponse:(d)=>{let h=`Bearer resource_metadata="${`${Gh(new URL(d.url)).origin}/.well-known/oauth-protected-resource`}", scope="*"`;return Response.json({jsonrpc:"2.0",error:{code:-32000,message:"Unauthorized: Authentication required"},id:null},{status:401,headers:{"WWW-Authenticate":h,"Access-Control-Expose-Headers":"WWW-Authenticate"}})},hasAuth:(d)=>d.headers.has("Authorization")}}var J5u,Gh=(i)=>{if(!(i.hostname==="localhost"||i.hostname.endsWith(".localhost")||i.hostname==="127.0.0.1"))i.protocol="https:";return i};var S5u=N(()=>{J5u=class J5u extends Error{error;errorDescription;constructor(i="invalid_grant",u){super(u??i);this.name="OAuthInvalidGrantError",this.error=i,this.errorDescription=u}}});import{AsyncLocalStorage as EG4}from"async_hooks";var ait,Ls;var Y5u=N(()=>{ait=new EG4,Ls={getStore:()=>{return ait.getStore()},run:(i,u,...t)=>ait.run(i,u,...t)}});var sit="SELF",Fxi=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},pit=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},oit="::",iut=(i)=>{let u=i.indexOf(oit);if(u===-1)return null;let t=i.substring(0,u),f=i.substring(u+oit.length);return[t,f]},$G4=(i)=>{if(!i.startsWith("cron/"))return null;let u=i.substring(5),t=u.indexOf("/");if(t===-1)return null;let f=u.substring(0,t),l=u.substring(t+1);return[f,l]},uut=(i)=>{if(Fxi(i))return[];return Object.keys(i)},wG4=(i,u)=>{if(Fxi(i))return i.events;let t=i[u];if(!t)return[];if(pit(t))return t.events;return Object.keys(t)},Bxi=(i,u,t)=>{if(i===sit){if(!t)return console.warn("[Event] SELF binding used but no connectionId available"),null;return t}let f=u[i];if(!K5u(f))return console.warn(`[Event] Binding "${i}" not found in state`),null;return f.value},dG4=(i,u,t)=>{let f=u;if(Fxi(i)){let c=[];for(let E of i.events){let $=iut(E);if(!$){console.warn(`[Event] Global handler event "${E}" must be prefixed with BINDING:: (e.g., "SELF::${E}" or "DATABASE::${E}")`);continue}let[w,d]=$,_=Bxi(w,f,t);if(!_)continue;c.push({eventType:d,publisher:_})}return c}let l=[];for(let c of uut(i)){let E=Bxi(c,f,t);if(!E)continue;let $=wG4(i,c);for(let w of $)l.push({eventType:w,publisher:E})}return l},_G4=(i)=>{let u=new Map;for(let t of i){let f=t.source,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},vG4=(i)=>{let u=new Map;for(let t of i){let f=t.type,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},hG4=(i)=>{let u={},t={},f=!1,l=0,c=[];for(let E of i){if(E.results)Object.assign(t,E.results);if(E.success===!1){if(f=!0,E.error)c.push(E.error)}if(E.processedCount!==void 0)l+=E.processedCount}if(Object.keys(t).length>0)u.results=t;if(u.success=!f,c.length>0)u.error=c.join("; ");if(l>0)u.processedCount=l;return u},DG4=async(i,u,t,f,l)=>{let c=f;if(Fxi(i)){let _=new Set;for(let h of i.events){let D=iut(h);if(!D)continue;let[g,O]=D,Z=Bxi(g,c,l);if(!Z)continue;_.add(`${Z}:${O}`)}let v=u.filter((h)=>{let D=`${h.source}:${h.type}`;return _.has(D)});if(v.length===0)return{success:!0};try{return await i.handler({events:v},t)}catch(h){return{success:!1,error:h instanceof Error?h.message:String(h)}}}let E=new Map;for(let _ of uut(i)){let v=Bxi(_,c,l);if(v)E.set(v,_)}let $=_G4(u),w=[];for(let[_,v]of $){let h=E.get(_);if(!h)continue;let D=i[h];if(!D)continue;if(pit(D)){w.push((async()=>{try{return await D.handler({events:v},t)}catch(Z){let B={};for(let F of v)B[F.id]={success:!1,error:Z instanceof Error?Z.message:String(Z)};return{results:B}}})());continue}let g=D,O=vG4(v);for(let[Z,B]of O){let F=g[Z];if(!F)continue;w.push((async()=>{try{let y=await F({events:B},t),T={};for(let U of B)T[U.id]=y;return{results:T}}catch(y){let T={};for(let U of B)T[U.id]={success:!1,error:y instanceof Error?y.message:String(y)};return{results:T}}})())}}let d=await Promise.all(w);if(d.length===0)return{success:!0};return hG4(d)},tut;var W5u=N(()=>{lb();tut={subscriptions:dG4,execute:DG4,parseCron:$G4}});function gG4(i,u){let t=Zxi("self",{meshUrl:i,token:u});return Wz.forConnection(t)}function NG4(i,u){switch(u.type){case"cron":return{automation_id:i,type:"cron",cron_expression:u.cron};case"event":return{automation_id:i,type:"event",connection_id:u.connectionId,event_type:u.eventType,params:u.params};case"webhook":return{automation_id:i,type:"webhook"}}}function fut(i,u,t){return async(f)=>{if(!i)throw Error("createAgent: missing meshUrl in MESH_REQUEST_CONTEXT");let l=gG4(i,u),E=(await l.COLLECTION_VIRTUAL_MCP_LIST({where:{operator:"and",conditions:[{field:["title"],operator:"eq",value:f.name}]},limit:1})).items.find((_)=>_.title===f.name);if(E)return{id:E.id,automations:[],automationIds:[],alreadyExisted:!0};let $=f.tools&&f.tools.length>0?f.tools.map((_)=>({connection_id:_.connectionId,selected_tools:_.tools??null,selected_resources:null,selected_prompts:null})):t?[{connection_id:t,selected_tools:null,selected_resources:null,selected_prompts:null}]:[],{item:w}=await l.COLLECTION_VIRTUAL_MCP_CREATE({data:{title:f.name,description:f.description,metadata:f.instructions?{instructions:f.instructions}:void 0,connections:$}}),d=[];for(let _ of f.automations??[]){let v=await l.AUTOMATION_CREATE({name:_.name,virtual_mcp_id:w.id,messages:_.messages,models:_.models,tools:_.tools,active:_.active??!0}),h=[];for(let D of _.triggers??[])try{let g=await l.AUTOMATION_TRIGGER_ADD(NG4(v.id,D));h.push({type:D.type,ok:!0,id:g.id,webhook:g.webhook??void 0})}catch(g){h.push({type:D.type,ok:!1,error:g instanceof Error?g.message:String(g)})}d.push({id:v.id,name:_.name,triggers:h})}return{id:w.id,automations:d,automationIds:d.map((_)=>_.id),alreadyExisted:!1}}}var L5u=N(()=>{lb();Oxi()});import{z as G6}from"zod";function r8(i){return{...i,execute:(u)=>{let t=zs(u.runtimeContext);return i.execute({...u,runtimeContext:t},t)}}}var zs=(i)=>{let u=Ls.getStore();if(!u){if(i)return i;throw Error("Missing context, did you forget to call State.bind?")}return u},lut=(i)=>{let u=i.runtimeContext.env.MESH_REQUEST_CONTEXT;return{connectionId:u?.connectionId,meshUrl:u?.meshUrl,token:u?.token}},OG4=({events:i,configuration:{state:u,scopes:t,onChange:f,onInstall:l}={}}={})=>{let c=u?Hit(G6.toJSONSchema(u)):{type:"object",properties:{}};return[...f||l||i?[r8({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:G6.object({state:u??G6.unknown(),scopes:G6.array(G6.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')"),firstRun:G6.boolean().optional().describe("True on the first configuration save for this connection \u2014 fires onInstall."),vault:G6.object({baseUrl:G6.string(),org:G6.string(),subjectConnectionId:G6.string(),token:G6.string()}).optional()}),outputSchema:G6.object({}),execute:async(E)=>{let $=E.context.state,w=E.context.vault;if(await f?.(E.runtimeContext.env,{state:$,scopes:E.context.scopes,vault:w}),l&&E.context.firstRun){let{meshUrl:d,token:_,connectionId:v}=lut(E);await l(E.runtimeContext.env,{createAgent:fut(d,_,v),vault:w})}return Promise.resolve({})}})]:[],...i?.handlers?[r8({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:y3i,outputSchema:T3i,execute:async(E)=>{let $=E.runtimeContext.env,w=$.MESH_REQUEST_CONTEXT?.state,{connectionId:d}=lut(E);return tut.execute(i.handlers,E.context.events,$,w,d)}})]:[],r8({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:G6.object({}),outputSchema:G6.object({stateSchema:G6.unknown(),scopes:G6.array(G6.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:c,scopes:[...t??[]]})}})]},cut=(i)=>{let u=null,t=null,f=null,l=!1,c=()=>{if(!l)console.warn("[runtime] Passing factory functions to tools/prompts/resources is deprecated. Pass createTool()/createPrompt()/createResource() instances directly."),l=!0},E=(D)=>typeof D==="object"&&D!==null&&(("id"in D)||("name"in D)||("uri"in D));async function $(D,g){if(!D)return[];return(await Promise.all(D.flatMap(async(O)=>{if(E(O))return[O];c();let Z=await O(g);if(Array.isArray(Z))return Z;return[Z]}))).flat()}let w=async(D)=>{if(u)return u;if(t)return t;return t=(async()=>{try{let g;if(typeof i.tools==="function")c(),g=await i.tools(D);else g=await $(i.tools,D);g.push(...OG4({...i}));let O;if(typeof i.prompts==="function")c(),O=await i.prompts(D);else O=await $(i.prompts,D);let Z;if(typeof i.resources==="function")c(),Z=await i.resources(D);else Z=await $(i.resources,D);let B={tools:g,prompts:O,resources:Z};return u=B,B}catch(g){throw t=null,g}})(),t},d=(D,g)=>{for(let O of g.tools)D.registerTool(O.id,{_meta:O._meta,title:O.title,description:O.description,annotations:O.annotations,inputSchema:O.inputSchema&&"shape"in O.inputSchema?O.inputSchema:G6.object({}),outputSchema:O.outputSchema&&typeof O.outputSchema==="object"&&"shape"in O.outputSchema?O.outputSchema:void 0},async(Z)=>{let B=zs(),F=await O.execute({context:Z,runtimeContext:B},B);if(F!=null&&typeof F==="object"&&"content"in F&&Array.isArray(F.content)&&F.content.every((y)=>y!=null&&typeof y==="object"&&("type"in y)&&typeof y.type==="string"))return F;return{structuredContent:F,content:[{type:"text",text:JSON.stringify(F)}]}});for(let O of g.prompts)D.registerPrompt(O.name,{title:O.title,description:O.description,argsSchema:O.argsSchema?O.argsSchema:G6.object({}).shape},async(Z)=>{let B=zs();return await O.execute({args:Z,runtimeContext:B},B)});for(let O of g.resources)D.resource(O.name,O.uri,{description:O.description,mimeType:O.mimeType},async(Z)=>{let B=zs(),F=await O.read({uri:Z,runtimeContext:B},B),y=F._meta??void 0;if(F.text!==void 0)return{contents:[{uri:F.uri,mimeType:F.mimeType,text:F.text,...y!==void 0?{_meta:y}:{}}]};else if(F.blob!==void 0)return{contents:[{uri:F.uri,mimeType:F.mimeType,blob:F.blob,...y!==void 0?{_meta:y}:{}}]};return{contents:[{uri:F.uri,mimeType:F.mimeType,text:""}]}})},_=async(D)=>{await i.before?.(D);let{instructions:g,...O}=i.serverInfo??{},Z=new nD({...O,name:O.name??"@deco/mcp-api",version:O.version??"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:k1,...g&&{instructions:g}}),B=await w(D);d(Z,B);let F="tools/list",y=Z.server._requestHandlers,T=y.get(F);if(T)y.set(F,async(U,I)=>{if(!f)f=await T(U,I);return f});return{server:Z,...B}};return{fetch:async(D,g)=>{let{server:O}=await _(g),Z=new g3;await O.connect(Z);let B=()=>{try{Z.close?.()}catch{}try{O.close?.()}catch{}};try{let F=await Z.handleRequest(D),y=F.headers.get("content-type");if(!(y?.includes("text/event-stream")||y?.includes("application/json-rpc"))||!F.body)return B(),F;let{readable:U,writable:I}=new TransformStream;return F.body.pipeTo(I).catch(()=>{}).finally(B),new Response(U,{status:F.status,statusText:F.statusText,headers:F.headers})}catch(F){throw B(),F}},callTool:async({toolCallId:D,toolCallInput:g})=>{let O=Ls.getStore();if(!O)throw Error("Missing state, did you forget to call State.bind?");let Z=O?.env,{tools:B}=await w(Z),y=B.find((U)=>U.id===D)?.execute;if(!y)throw Error(`Tool ${D} not found or does not have an execute function`);let T=zs();return y({context:g,runtimeContext:T},T)}}};var yxi=N(()=>{oiu();mE();Gq();kQ();lb();W5u();Y5u();L5u();W5u();L5u()});import{decodeJwt as Eut}from"jose";var ZG4=({env:i,server:u,url:t})=>{i.SELF=new Proxy({},{get:(f,l)=>{if(l==="toJSON")return null;return async(c)=>{return await u.callTool({toolCallId:l,toolCallInput:c})}}}),i.IS_LOCAL=(t?.startsWith("http://localhost")||t?.startsWith("http://127.0.0.1"))??!1},$ut=(i)=>()=>{return{...i??{}}},BG4=({env:i,server:u,tokenOrContext:t,url:f,authToken:l})=>{let c=i,E=l?l.split(" ")[1]:void 0,$;if(typeof t==="string"){let w=Eut(t),d=w.metadata??{};$={authorization:E,state:w.state??d.state??{},token:t,meshUrl:w.meshUrl??d.meshUrl,connectionId:w.connectionId??d.connectionId,organizationId:w.organizationId??d.organizationId,organizationName:w.organizationName??d.organizationName,organizationSlug:w.organizationSlug??d.organizationSlug,ensureAuthenticated:$ut(w.user??w.sub)}}else if(typeof t==="object"){$=t;let w=Eut(t.token),d=w.metadata??{},_=w.appName;$.authorization??=E,$.callerApp=_,$.connectionId??=w.connectionId??d.connectionId,$.organizationId??=w.organizationId??d.organizationId,$.organizationName??=w.organizationName??d.organizationName,$.organizationSlug??=w.organizationSlug??d.organizationSlug,$.ensureAuthenticated=$ut(w.user??w.sub)}else $={state:{},authorization:E,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return c.MESH_REQUEST_CONTEXT=$,$.state=bit($),ZG4({env:c,server:u,url:f}),c},FG4,wut=(i)=>{let u=cut(i),t=i.cors??FG4,f=i.oauth,l=f?eit(f):null,c=async(E,$,w)=>{let d=new URL(E.url);if(l){if(d.pathname==="/.well-known/oauth-protected-resource"||d.pathname==="/mcp/.well-known/oauth-protected-resource")return l.handleProtectedResourceMetadata(E);if(d.pathname==="/.well-known/oauth-authorization-server")return l.handleAuthorizationServerMetadata(E);if(d.pathname==="/authorize")return l.handleAuthorize(E);if(d.pathname==="/oauth/callback")return l.handleOAuthCallback(E);if(d.pathname==="/token"&&E.method==="POST")return l.handleToken(E);if((d.pathname==="/register"||d.pathname==="/mcp/register")&&E.method==="POST")return l.handleClientRegistration(E)}if(d.pathname==="/mcp"){if(E.method==="GET")return new Response("Method not allowed",{status:405});if(l&&!l.hasAuth(E)){let _=E.clone();try{if((await _.json())?.method!=="tools/list")return l.createUnauthorizedResponse(E)}catch{return l.createUnauthorizedResponse(E)}}return u.fetch(E,$,w)}if(d.pathname.startsWith("/mcp/call-tool")){let _=d.pathname.split("/").pop();if(!_)return new Response("Not found",{status:404});let v=await E.json(),h=await u.callTool({toolCallId:_,toolCallInput:v});return new Response(JSON.stringify(h),{headers:{"Content-Type":"application/json"}})}return i.fetch?.(E,$,w)||new Response("Not found",{status:404})};return{fetch:async(E,$,w)=>{if(new URL(E.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(t!==!1&&E.method==="OPTIONS")return Cit(E,t??{});let d=BG4({authToken:E.headers.get("authorization")??null,env:{...process.env,...$},server:u,tokenOrContext:E.headers.get("x-mesh-token")??void 0,url:E.url}),_=await Ls.run({req:E,env:d,ctx:w},async()=>await c(E,d,w));if(t!==!1)return Mit(_,E,t??{});return _}}};var dut=N(()=>{lb();qit();S5u();S5u();Y5u();yxi();yxi();lb();Oxi();FG4={origin:(i)=>{if(i.includes("localhost")||i.includes("127.0.0.1"))return i;return i},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});import{z as z5u}from"zod";function UG4(i,u){let t=r8({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:yH,outputSchema:TH,execute:async({context:$})=>{let w={limit:$.limit,offset:$.offset,cursor:$.cursor,tags:$.tags,categories:$.categories,where:$.where},d=`${u}:${JSON.stringify(w)}`,_=_ut.get(d);if(_)return _;let v=await i.listPublic(u,w);return _ut.set(d,v),v}}),f=r8({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Bh,outputSchema:rK,execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{item:null};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{item:d};return{item:null}}}),l=r8({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Bh,outputSchema:z5u.object({versions:z5u.array(rK.shape.item)}),execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{versions:[]};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{versions:[d]};return{versions:[]}}}),c=r8({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:QUi,outputSchema:HUi,execute:async({context:$})=>{return await i.search(u,$,{publicOnly:!0})}}),E=r8({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:z5u.object({}),outputSchema:UH,execute:async()=>{return await i.getFilters(u,{publicOnly:!0})}});return[t,c,f,l,E]}function vut(i){let u=i.db,t=new LL(u);return async(f)=>{let l=f.req.param("orgSlug")??f.req.param("org");if(!l)return f.json({error:"Organization not found"},404);let c=await u.selectFrom("organization").select(["id","slug","name"]).where("slug","=",l).executeTakeFirst();if(!c)return f.json({error:"Organization not found"},404);let E=UG4(t,c.id),$=wut({tools:E}),w=new URL(f.req.url),d=f.req.path.indexOf("/registry"),_=d>=0?f.req.path.slice(d+9):"",v=new URL(_||"/",w.origin);w.searchParams.forEach((g,O)=>{v.searchParams.set(O,g)});let h=new Request(v.toString(),{method:f.req.method,headers:f.req.raw.headers,body:f.req.method!=="GET"&&f.req.method!=="HEAD"?f.req.raw.body:void 0}),D={organizationId:c.id,db:u,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await $.fetch(h,D,f)}}var yG4=3600000,TG4=500,_ut;var hut=N(()=>{dut();yxi();ioi();Ol();_ut=tb({ttlMs:yG4,maxSize:TG4,updateRecencyOnGet:!0})});import{sql as PG4}from"kysely";import{randomUUID as Dut}from"crypto";import{z as xG4}from"zod";async function AG4(i){let u=new Date().toISOString(),t=Dut(),f=U4.SELF(i.organizationId),l="registry.publish_request.created",c={requestId:i.request.id,requestedId:i.request.requested_id,title:i.request.title,status:i.request.status,createdAt:i.request.created_at,requester:{name:i.request.requester_name,email:i.request.requester_email}};await i.db.insertInto("events").values({id:t,organization_id:i.organizationId,type:"registry.publish_request.created",source:f,specversion:"1.0",subject:i.request.id,time:u,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(c),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:u,updated_at:u}).execute();let E=await i.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",i.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where(($)=>$.or([$("publisher","is",null),$("publisher","=",f)])).execute();if(E.length>0)await i.db.insertInto("event_deliveries").values(E.map(($)=>({id:Dut(),event_id:t,subscription_id:$.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:u}))).execute();try{await PG4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function GG4(i,u){let f=(await i.selectFrom("organization").select(["id"]).where("id","=",u).execute())[0];if(f?.id)return f.id;return(await i.selectFrom("organization").select(["id"]).where("slug","=",u).execute())[0]?.id??null}async function nG4(i,u){let t=await i.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",mK).execute();for(let f of t){let l=f.settings,c=typeof l==="string"?(()=>{try{return JSON.parse(l)}catch{return{}}})():l??{};if(c.acceptPublishRequests===!0){let E=c.rateLimitWindow==="minute"?"minute":"hour",$=c.rateLimitMax,w=typeof $==="number"&&Number.isFinite($)&&$>=1?Math.floor($):Nut;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?gut:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:gut,rateLimitWindow:IG4,rateLimitMax:Nut}}async function kG4(i,u,t){let f=t==="minute"?60000:3600000,l=new Date(Date.now()-f).toISOString(),c=await i.selectFrom("private_registry_publish_request").select((E)=>E.fn.countAll().as("count")).where("organization_id","=",u).where("created_at",">=",l).executeTakeFirst();return Number(c?.count??0)}async function jG4(i,u,t,f){let l=await i.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",u).where((c)=>c.or([c("id","=",t),c("title","=",f)])).executeTakeFirst();return l?{id:String(l.id),title:String(l.title)}:null}function Out(i){let{db:u,db:t}=i,f=new zL(t),l=new QL(t);return async(c)=>{let E=c.req.param("orgRef")??c.req.param("org");if(!E)return c.json({error:"Organization not found"},404);let $=await GG4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await nG4(u,$);if(!w.acceptPublishRequests)return c.json({error:"Publish requests are not enabled for this registry."},403);if(w.requireApiToken){let D=c.req.header("Authorization"),g=D?.startsWith("Bearer ")?D.slice(7).trim():null;if(!g)return c.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await l.validate($,g))return c.json({error:"Invalid API key"},401)}if(w.rateLimitEnabled){if(await kG4(t,$,w.rateLimitWindow)>=w.rateLimitMax)return c.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:w.rateLimitWindow==="minute"?60:3600},429)}let d;try{d=await c.req.json()}catch{return c.json({error:"Invalid JSON body"},400)}let _=zC0.safeParse(d);if(!_.success)return c.json({error:"Invalid publish request payload",details:xG4.treeifyError(_.error)},400);let v=await jG4(t,$,_.data.data.id,_.data.data.title);if(v)return c.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:v},409);let h=await f.createOrUpdate({organization_id:$,requested_id:_.data.data.id,title:_.data.data.title,description:_.data.data.description??null,_meta:_.data.data._meta,server:_.data.data.server,requester_name:_.data.requester?.name??null,requester_email:_.data.requester?.email??null});try{await AG4({db:u,organizationId:$,request:h})}catch(D){console.warn("[private-registry] failed to emit publish-request event:",D)}return ou.capture({distinctId:_.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:h.id,requested_id:h.requested_id,title:_.data.data.title,requester_email:_.data.requester?.email??null}}),c.json({id:h.id,requested_id:h.requested_id,status:h.status},201)}}var gut=!0,IG4="hour",Nut=100;var Zut=N(()=>{e4();wf();PH();uoi();toi();Ol()});var But={};Qi(But,{createPublishRequestHandler:()=>Out,createPublicMCPHandler:()=>vut});var Fut=N(()=>{hut();Zut()});var _1u={};Qi(_1u,{watchHandler:()=>xut,getProxyDispatch:()=>SG4,createApp:()=>RG4});import{readFileSync as XG4}from"fs";import{PrometheusSerializer as KG4}from"@opentelemetry/exporter-prometheus";import{DBOS as Qs}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as zG4,oAuthProtectedResourceMetadata as QG4}from"better-auth/plugins";async function JG4(i){let u=i.connect(),t;try{t=await Promise.race([u,Tut(yut)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),Tut(yut)]),t.release(),!0}catch{return t.release(!0),!1}}function Tut(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function SG4(){if(!Q5u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return Q5u}async function YG4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${Et0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function WG4(i){let u=new URLSearchParams;if(i){let[t,f]=i.split("/");if(t)u.set("workspace_hint",t);if(f)u.set("project_hint",f)}else u.set("auto_personal","true");return u.set("force_new","true"),u}async function RG4(i={}){let u=i.database??qt(),t=!1;A6.stop().catch((M)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",M)});let f,l,c=new B5u,E,$,w,d,_,v=null;if(i.disableNats)E=F5u(),f={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},l=new Ra,$={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},_=void 0,w={init:async()=>{},pump:(M)=>{(async()=>{let e=M.getReader();try{while(!0){let{done:Ki}=await e.read();if(Ki)break}}catch{}finally{e.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{v=zp0();let M=yu().natsCredsPath,e;if(M)try{e=XG4(M,"utf8")}catch(zu){console.error(`[app] failed to read NATS_CREDS at ${M}; connecting anonymously`,zu)}v.init(yu().natsUrls,e?{creds:e}:void 0);let Ki=woi()?new pmi({getJetStream:()=>v.getJetStream()}):null;Ki?.init().catch(()=>{}),f=Ki;let Li=new flu({getJetStream:()=>v.getJetStream()});Li.init().catch(()=>{}),l=Li,E=F5u({getConnection:()=>v.getConnection()}),$=new y5u({getConnection:()=>v.getConnection()}),w=new T5u({getConnection:()=>v.getConnection(),getJetStream:()=>v.getJetStream()}),d=rp0({getConnection:()=>v.getConnection()}),_=op0({getConnection:()=>v.getConnection()});let oi=sp0({getConnection:()=>v.getConnection()}),iu=$;$={start:(zu)=>iu.start(zu),broadcast:(zu)=>iu.broadcast(zu),publishControlFrame:(zu,ht)=>{oi.publishControlFrame(zu,ht).catch((X4)=>{console.warn("[TunnelControl] publishControlFrame failed (non-critical):",X4)})},stop:()=>iu.stop()},dV0(v),v.onReady(()=>{Ki?.init().catch((zu)=>{console.error("[McpListCache] Deferred init failed:",zu)}),Li.init().catch((zu)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",zu)}),E.start(),z50(()=>v.getConnection()),w.init().catch((zu)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",zu)})})}if(cb)await cb();iei(f),llu(l);let D={storage:new qL(u.db),streamBuffer:w,sseHub:A6},g=new P5u(D),O=new Rr(u.db),Z=new x5u(O);Z.start(),$.start((M)=>{Udi(M),g.execute({type:"CANCEL",taskId:M}).catch((e)=>{console.error("[Decopilot] CancelBroadcast execute failed:",e)})}).catch((M)=>{console.error("[Decopilot] CancelBroadcast start failed:",M)}),v?.onReady(()=>{$.start().catch((M)=>{console.error("[CancelBroadcast] Deferred start failed:",M)})}),w.init().catch((M)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",M)}),cb=async()=>{await g.stopAll(),g.dispose(),Z.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),Q50(),l.teardown(),iei(null),llu(null)};let B=new Hu;if(B.use("*",pVi({enabled:(M)=>ZW(M,"debug")==="1"})),B.use("*",PLi),B.use("/*",qt0({origin:(M)=>{if(M.includes("localhost")||M.includes("127.0.0.1"))return M;return M},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),B.use("*",async(M,e)=>{if(await e(),M.req.path.includes("/files/"))return;if(M.req.path.includes("/fs/")&&M.req.path.endsWith("/read"))return;M.header("X-Frame-Options","DENY"),M.header("Content-Security-Policy","frame-ancestors 'none'")}),!yu().noTui)B.use("*",Fit());B.use("*",async(M,e)=>{if(await e(),OC(M.req.path))return;if(M.res.status>=500){let Li=await M.res.clone().text();console.error(`[5xx Response] ${M.req.method} ${M.req.path} - ${M.res.status}:`,Li)}}),B.get(Xw.HEALTH,(M)=>{if(t)return M.json({status:"shutting_down"},503);return M.json({status:"ok"})}),B.get(Xw.HEALTH_LIVE,(M)=>{return M.json({status:"ok"})}),B.get(Xw.HEALTH_READY,async(M)=>{if(t)return M.json({status:"shutting_down"},503);let e={};if(e.postgres={status:await JG4(u.pool)?"up":"down"},v)e.nats=v.isConnected()?{status:"up"}:{status:"down"};else e.nats={status:"down"};let Ki=e.postgres.status==="up",Li=Ki?200:503;return M.json({status:Ki?"ready":"not_ready",services:e},Li)}),B.get(Xw.METRICS,async(M)=>{try{let e=await GLi.collect(),Ki=LG4.serialize(e.resourceMetrics);return M.text(Ki,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(e){return console.error("Failed to collect metrics:",e),M.text("# Error collecting metrics",500)}}),B.route("/api/config",kp0),B.route("/api/auth/custom",jV0),B.all("/api/auth/*",async(M)=>{return await w4.handler(M.req.raw)});let F=w70();F.use("/.well-known/oauth-protected-resource/mcp/:connectionId",oK),F.use("/mcp/:connectionId/.well-known/oauth-protected-resource",oK),B.route("/",F),B.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Oe),B.route("/",h70()),B.use("/oauth-proxy/:connectionId/*",oK),B.all("/oauth-proxy/:connectionId/*",Uut);let y=async(M)=>{let Ki=await HG4()(M.req.raw),Li=await Ki.json();return Response.json(Li,Ki)};B.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",oK),B.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",y);let T=async(M)=>{let Ki=await bG4()(M.req.raw),Li=await Ki.json();return Response.json(Li,Ki)};B.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",T);let U=cV0({ttlMs:120000}),I=await m20({db:u.db,auth:w4,encryption:{key:yu().encryptionKey},observability:{tracer:W2,meter:Mt},modelListCache:c,providerKeyCache:E,memberRoleCache:U,linkStatusProbe:d,publishLinkControlFrame:(M,e)=>$.publishControlFrame(M,e)});Y9.set(I);let j=new fZ(yu().encryptionKey);peu({db:u.db,baseUrl:H_()});let A=h$i(u.db),n=new Sr(u.db),q=Oit({db:u.db});s1u({storage:A,meshContextFactory:q}),jtu({meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6},prepareLinkWorkFn:Ne0,workPublisher:_}),Itu({dispatchRunFn:De0,meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6}});let S=new qL(u.db);YF0({getJetStream:()=>v?.getJetStream()??null,getJetStreamManager:async()=>{let M=v?.getConnection();return M?await Put.jetstreamManager(M):null},messageParts:S.messageParts(),resolveRun:async(M)=>{let e=await u.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",M).executeTakeFirst();return e?{orgId:e.organization_id,createdBy:e.created_by,version:e.message_storage_version??1,status:e.status,runFenceToken:e.run_fence_token,title:e.title??null}:null},completeRunIfNotCompleted:async(M,e)=>{let Ki=await S.completeRunIfNotCompleted(M,e);return hxi(A6,e,M,Ki),Ki},markRunRequiresAction:async(M,e)=>{let Ki=await S.requiresActionIfInProgress(M,e);return hxi(A6,e,M,Ki),Ki},markRunFailed:async(M,e,Ki,Li)=>{let oi=await S.markRunFailed(M,e,Ki,Li);return hxi(A6,e,M,oi),oi},persistTitle:(M,e,Ki)=>S.update(M,e,{title:Ki}),onTitleUpdated:async({runId:M,orgId:e,title:Ki})=>{let Li=await S.get(M,e).catch(()=>null);A6.emit(e,A5(M,Li?.status??"in_progress",{title:Ki,virtualMcpId:Li?.virtual_mcp_id??void 0,createdBy:Li?.created_by,triggerId:Li?.trigger_id,branch:Li?.branch??null,createdAt:Li?.created_at,updatedAt:Li?.updated_at}))},bumpProgress:async({runId:M,orgId:e})=>{await S.bumpProgress(M,e)},recordCompleted:async({runId:M,orgId:e,distinctId:Ki,usage:Li})=>{ou.capture({distinctId:Ki,event:"chat_message_completed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",input_tokens:Li.inputTokens,output_tokens:Li.outputTokens,total_tokens:Li.totalTokens}})},recordFailed:async({runId:M,orgId:e,distinctId:Ki,reason:Li,kind:oi})=>{ou.capture({distinctId:Ki,event:"chat_message_failed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",error_category:oi,error_message:Li}})},purgeRun:async(M)=>{w.purge(M)}}),uk0({meshContextFactory:q,systemDatabaseUrl:SLi(yu().databaseUrl,yu().databasePgSsl),streamBuffer:w}),git(),iau();let Y=async(M,e,Ki)=>{let Li=await A.findById(M,e);if(!Li)throw Error("Automation not found");return ulu({automationId:Li.id,organizationId:Li.organization_id,triggerId:null})},V=new LH(A,({automation:M,trigger:e,contextMessages:Ki,idempotencyKey:Li})=>Ha({automationId:M.id,organizationId:M.organization_id,triggerId:e.id,contextMessages:Ki},{idempotencyKey:Li})),L=[ad(),mS(),wD()];for(let M of L)Nxi(M).then(()=>{}).catch((e)=>console.error("[monitoring] Retention cleanup failed:",e));let Ei=()=>u.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((M)=>console.error("[auth] Expired API key cleanup failed:",M));Ei(),setInterval(Ei,86400000).unref(),B.use("*",async(M,e)=>{if(TLi(M.req.path))return e();let Ki={measure:async(oi,iu)=>{o3(M,oi);try{return await iu()}finally{Rw(M,oi)}}},Li=await Y9.create(M.req.raw,{timings:Ki});Li.automationRunner=Y,M.set("meshContext",Li);try{await e()}finally{let oi=Li.pendingRevalidations;if(oi.length>0)Promise.race([Promise.allSettled(oi),new Promise((zu)=>setTimeout(zu,30000))]).catch((zu)=>console.error("[mesh] revalidation cleanup error:",zu))}}),B.use("/api/:org/decopilot/*",sK),B.use("/api/:org/v1/*",sK),B.use("/api/:org/files/*",sK),B.use("*",async(M,e)=>{let Ki=M.req.path;if(Ki.startsWith("/api/org-sso/")||Ki.startsWith("/api/auth/")||Ki.startsWith("/api/tools/management")||Ki.startsWith("/oauth-proxy/"))return e();let Li=M.get("meshContext");if(!Li?.organization?.id||!Li?.auth?.user?.id)return e();if(!(await Li.storage.orgSsoConfig.getByOrgId(Li.organization.id))?.enforced)return e();if(!await Li.storage.orgSsoSessions.isValid(Li.auth.user.id,Li.organization.id))return M.json({error:"SSO authentication required for this organization"},403);return e()});let $i=new Hu;$i.use("*",Yd({mountPath:"/api/org-sso"})),$i.route("/",pUi()),B.route("/api/org-sso",$i),B.get("/api/tools/management",(M)=>{return M.json({tools:uri,grouped:VO()})}),B.use("/mcp/*",async(M,e)=>{o3(M,"mcp");try{return await e()}finally{Rw(M,"mcp")}});let li=async(M,e)=>{let Ki=M.var.meshContext;if(!Ki.auth.user?.id&&!Ki.auth.apiKey?.id){let Li=new URL(M.req.url);return M.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Li.origin}${Li.pathname}/.well-known/oauth-protected-resource"`}})}return await e()};if(B.use("/mcp/:connectionId?",li),B.use("/mcp/gateway/:virtualMcpId?",li),B.use("/mcp/virtual-mcp/:virtualMcpId?",li),B.use("/mcp/self",li),G5()){let{mountDevRoutes:M}=(Wit(),nxi(Yit));M(B,li)}let ii=new Hu;ii.use("*",Yd({mountPath:"/mcp"})),ii.route("/",bFi()),B.route("/mcp",ii);let m=new Hu;m.use("*",Yd({mountPath:"/mcp/self"})),m.route("/",Exi()),B.route("/mcp/self",m);let Oi=new Hu;Oi.use("*",Yd({mountPath:"/mcp"})),Oi.route("/",MFi()),B.route("/mcp",Oi),B.use("/api/:org/models/*",async(M,e)=>{o3(M,"llm_models");try{return await e()}finally{Rw(M,"llm_models")}});let _i=j3u({cancelBroadcast:$,streamBuffer:w,runRegistry:g,linkStatusProbe:d});if(B.route("/api",_i),v!=null)Q5u=ep0({getConnection:()=>v?.getConnection()??null});B.route("/api",gp0()),B.get("/api/links/me",async(M)=>{try{let e=M.req.header("authorization")??"",Ki=/^Bearer\s+(.+)$/i.exec(e),Li=null;if(Ki){let iu=(Ki[1]??"").trim();Li=await vp0(iu,w4.api)}else Li=M.get("meshContext")?.auth?.user?.id??null;if(!Li)return M.json({error:"unauthorized"},401);let oi=d?await d(Li):{online:!1,capabilities:[]};if(!oi.online)return M.json(null);return M.json({hostname:oi.hostname,cliVersion:oi.cliVersion})}catch(e){return console.error("[links/me] presence probe failed; reporting offline:",e instanceof Error?e.message:String(e)),M.json(null)}}),B.use("/api/:org/files/*",sK),B.route("/api",Jp0);let Ii=new Hu;Ii.use("*",Yd({mountPath:"/api"})),Ii.route("/",$xi()),B.route("/api",Ii),B.route("/api",Ap0);let Vi=new Hu;Vi.use("*",Yd({mountPath:"/api"})),Vi.route("/",wxi({tokenStorage:n,automationEventDispatcher:V})),B.route("/api",Vi);let Wi=new Wr(u.db),ri=new Hu;ri.use("*",Yd({mountPath:"/api"})),ri.route("/",GPi()),B.route("/api",ri),B.route("/api/deco-sites",Je0()),B.route("/api/deco-apps",yp0());let gi=new Hu;gi.use("*",Yd({mountPath:"/api/deco-sites"})),gi.route("/",kPi()),B.route("/api/deco-sites",gi);let Xi=new Hu;Xi.use("*",Yd({mountPath:"/api/vm-events"})),Xi.route("/",Bp0()),B.route("/api/vm-events",Xi);let{createPublishRequestHandler:Gi,createPublicMCPHandler:Di}=await Promise.resolve().then(() => (Fut(),But)),wi={db:u.db,vault:{encrypt:(M)=>j.encrypt(M),decrypt:(M)=>j.decrypt(M)}},fi=Gi(wi),ji=Di(wi);B.use("/org/:orgRef/registry/publish-request",oK),B.post("/org/:orgRef/registry/publish-request",fi),B.use("/org/:orgSlug/registry/*",oK),B.all("/org/:orgSlug/registry/*",ji),B.post("/api/:org/registry/publish-request",fi),B.all("/api/:org/registry/*",ji);let a=dp0({kvStorage:Wi,runRegistry:g,streamBuffer:w,sseHub:A6,cancelBroadcast:$,tokenStorage:n,automationEventDispatcher:V,mountDevAssets:G5(),mcpAuth:li,oauthProxyHandler:Uut,watchHandler:xut,betterAuthProtectedResourceHandler:y,getNatsConnection:()=>v?.getConnection()??null});return B.route("/api/:org",a),B.notFound((M)=>{return M.json({error:"Not Found",path:M.req.path},404)}),B.onError(ye0),Object.assign(B,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([A6.stop(),cb?Promise.resolve(cb()).finally(()=>{cb=null}):Promise.resolve()]),v)await v.drain().catch((M)=>console.error("[shutdown] NATS drain error:",M));console.log("[shutdown] Flushing telemetry..."),await H3().catch((M)=>console.error("[shutdown] Telemetry flush error:",M)),console.log("[shutdown] Closing database..."),await Q2(u).catch((M)=>console.error("[shutdown] Database close error:",M)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await Qs.registerQueue(h5,{partitionQueue:!0,concurrency:e1u,minPollingIntervalMs:a1u}),await Qs.registerQueue(s_,{partitionQueue:!0,concurrency:ktu}),await Qs.registerQueue(f7,{partitionQueue:!0,concurrency:xtu}),await Qs.registerQueue(IO,{partitionQueue:!0,concurrency:ik0}),await S3u(A),await Promise.allSettled(["automations-gate","automations-global"].map((M)=>Qs.deleteQueue(M))),await o1u(u.pool),kc0().catch((M)=>{console.error("[studio-pack-backfill] failed:",M)}),uau().catch((M)=>{console.error("[org-fs] public-sets boot sync kick failed:",M)})}})}var Put,yut=5000,Q5u=null,cb=null,Uut=async(i)=>{let u=i.req.param("connectionId");if(!u)return i.json({error:"Missing connectionId"},400);let t=i.req.path.split("/").filter(Boolean),f=t[t.length-1],l=i.get("meshContext");if(!l)l=await Y9.create(i.req.raw),i.set("meshContext",l);let c=i.req.param("org")?l.organization?.id:void 0,E=await l.storage.connections.findById(u,c);if(!E?.connection_url)return i.json({error:"Connection not found"},404);let $=await nz(E.connection_url),w,d=new URL(E.connection_url);if($.ok)w=(await $.json()).authorization_servers?.[0];if(!w)w=d.origin;let _=await Ze(w);if(!_.ok)return i.json({error:"Failed to get auth server metadata"},502);let v=await _.json(),h;if(f==="authorize")h=v.authorization_endpoint;else if(f==="token")h=v.token_endpoint;else if(f==="register")h=v.registration_endpoint;if(!h)return i.json({error:`Unknown OAuth endpoint: ${f}`},404);let D=new URL(h),g=new URL(i.req.url);if(D.search=g.search,f==="authorize"){let A=D.searchParams.get("redirect_uri");if(A){let n=yu().baseUrl??g.origin;try{let q=new URL(A),S=new URL(n);if(!(q.origin===S.origin||q.hostname==="localhost"))return i.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return i.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}D.searchParams.set("redirect_uri",A)}if(D.searchParams.has("resource"))D.searchParams.set("resource",E.connection_url);if($t0(E.connection_url))try{let n=await YG4(l,E.organization_id),q=WG4(n);for(let[S,Y]of q)D.searchParams.set(S,Y)}catch(n){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",n)}return i.redirect(D.toString(),302)}let O={Accept:i.req.header("Accept")||"application/json"},Z=i.req.header("Content-Type");if(Z)O["Content-Type"]=Z;let B=i.req.header("Authorization");if(B)O.Authorization=B;let F,y=null,T=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(f==="token"&&Z?.includes("application/x-www-form-urlencoded")){if(B?.toLowerCase().startsWith("basic "))try{let Y=atob(B.slice(6).trim()),V=Y.indexOf(":");if(V!==-1){let L=decodeURIComponent(Y.slice(0,V)),Ei=decodeURIComponent(Y.slice(V+1));y=L||null,T=Ei||null}}catch{}let A=await i.req.formData();if(A.has("resource"))A.set("resource",E.connection_url);let n=A.get("client_id"),q=A.get("client_secret");if(typeof n==="string"&&n)y=n;if(typeof q==="string"&&q)T=q;let S=new URLSearchParams;for(let[Y,V]of A.entries())S.append(Y,V.toString());F=S.toString()}else if(f==="register"&&Z?.toLowerCase().includes("application/json")){let A=await l.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",E.organization_id).executeTakeFirst(),n=await i.req.text(),q={};try{q=n?JSON.parse(n):{}}catch{F=n}let S=typeof q==="object"&&q!==null&&!Array.isArray(q);if(F===void 0&&!S)F=n;if(F===void 0){let Y=q,V=Y.metadata&&typeof Y.metadata==="object"?Y.metadata:{};Y.metadata={...V,organization_id:E.organization_id,...A?.slug?{organization_slug:A.slug}:{},...A?.name?{organization_name:A.name}:{}},F=JSON.stringify(Y),O["Content-Type"]="application/json"}}else F=i.req.raw.body??void 0;let U=await fetch(D.toString(),{method:i.req.method,headers:O,body:F,duplex:"half",redirect:"manual"}),I=new Headers,j=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[A,n]of U.headers.entries())if(!j.includes(A.toLowerCase()))I.set(A,n);if(f==="token"&&U.ok){let A=await U.text();try{let n=JSON.parse(A);if(typeof n.access_token==="string"&&n.access_token){let q=typeof n.expires_in==="number"?new Date(Date.now()+n.expires_in*1000):null,S=null;try{S=await kz(E.connection_url)??h}catch{S=h}let Y={connectionId:u,accessToken:n.access_token,refreshToken:typeof n.refresh_token==="string"?n.refresh_token:null,scope:typeof n.scope==="string"?n.scope:null,expiresAt:q,clientId:y,clientSecret:T,tokenEndpoint:S};await new q1(l.db,l.vault).upsert(Y)}}catch(n){console.error("[oauth-proxy] failed to persist downstream token:",n)}return new Response(A,{status:U.status,statusText:U.statusText,headers:I})}return new Response(U.body,{status:U.status,statusText:U.statusText,headers:I})},xut=async(i)=>{let u=i.var.meshContext;if(!(u.auth.user?.id??u.auth.apiKey?.userId))return i.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return i.json({error:"organization id missing"},400);let l=i.req.query("types"),c=l?l.split(",").map(($)=>$.trim()).filter(Boolean):null,E=crypto.randomUUID();return Wd(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:E,organizationId:f,typePatterns:c,connectedAt:new Date().toISOString()})}),!A6.add({id:E,organizationId:f,typePatterns:c?.length?c:null,push:(_)=>{$.writeSSE({id:_.id,event:_.type,data:JSON.stringify(_)}).catch(()=>{A6.remove(f,E)})}})){await $.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let d=setInterval(()=>{$.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(d)})},30000);await new Promise((_)=>{$.onAbort(()=>{clearInterval(d),A6.remove(f,E),_()})})})},LG4,HG4=()=>QG4(w4),bG4=()=>zG4(w4);var v1u=N(()=>{xt();tau();HE();gW();wf();sf();_ci();Vt0();iri();c8();Ne();Iwu();zE();Q1();e4();Kwu();Wwu();Be0();X3u();o5();pwi();K3u();Te0();J3u();_p0();Np0();Fp0();z3u();Tp0();RFi();Be();Gp0();qFi();E5u();jp0();Sp0();c5u();l5u();h4i();mci();Qp0();Mw();j$i();zr();Elu();Hp0();Rp0();Vp0();mp0();ap0();pp0();_it();vit();Toi();Aoi();Nit();lEi();I5u();jw();Y3u();la();Utu();lEi();G3u();qai();Vai();Zit();BW();yit();$J();Iwu();GQ();Pdi();Put=k(o2(),1);LG4=new KG4});var nut={};Qi(nut,{resolveClientDir:()=>eG4,resolveAssetPathWithTraversalCheck:()=>Gut,isPathWithinDirectory:()=>Aut,createAssetHandler:()=>aG4});import{resolve as Hs,dirname as CG4,join as MG4,extname as qG4,basename as VG4,sep as Iut}from"path";function rG4(i,u){if(i===u||VG4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${Iut}assets${Iut}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Aut(i,u){let t=Hs(u),f=Hs(i);return f===t||f.startsWith(t+"/")}function Gut({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=Hs(u,t);if(!Aut(f,u))return null;return f}function eG4(i,u="../client"){let t=new URL(i),f=CG4(t.pathname);return Hs(f,u)}function aG4(i={}){let{env:u="production",clientDir:t=mG4,isServerPath:f=()=>!1}=i;if(u==="development")return async function(c){return null};return async function(c){if(c.method!=="GET")return null;let E=new URL(c.url),$;try{$=decodeURIComponent(E.pathname)}catch{return null}if(f($))return null;let w=Gut({requestPath:$,clientDir:t});if(!w)return null;let d=MG4(w,"index.html"),_=Hs(t,"index.html"),v=c.headers.get("accept"),D=v?.includes("text/html")||v?.includes("*/*")&&["",".html"].includes(qG4(w))?[d,_]:[];for(let g of[w,...D])try{let O=Bun.file(g);if(await O.exists())return new Response(O,{headers:rG4(g,_)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var mG4="./dist/client";var kut=()=>{};var jut={};Qi(jut,{tryUpgradePreviewWs:()=>fn4,tryHandlePreviewHttp:()=>tn4,previewWebSocketHandler:()=>ln4,parsePreviewBaseDomain:()=>un4,isPreviewWsData:()=>Txi,extractHandleFromHost:()=>H5u});function pG4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function in4(){return new Response(sG4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function un4(i){if(!i||i.trim()==="")return null;let u=i.includes("{handle}")?i.replace("{handle}","__handle__"):i,t;try{t=new URL(u)}catch{return null}let f=t.hostname;if(i.includes("{handle}")){let l=f.indexOf(".");if(l<=0||l===f.length-1)return null;return f.slice(l+1)}return f}function H5u(i,u){if(!i||!u)return null;let t=i.indexOf(":"),f=(t>=0?i.slice(0,t):i).toLowerCase(),c=`.${u.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!f.endsWith(c))return null;let E=f.slice(0,f.length-c.length);if(!E||E.includes("."))return null;return E}async function tn4(i,u){let t=H5u(i.headers.get("host"),u.baseDomain);if(!t)return null;let f=await u.getRunner();if(!f)return Rs(503,"preview proxy not configured");let l=await f.proxyPreviewRequest(t,i);if(l.headers.get(_K)&&pG4(i))return in4();return l.headers.delete(_K),l}function Rs(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Txi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function fn4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=H5u(i.headers.get("host"),t.baseDomain);if(!f)return null;let l=await t.getRunner();if(!l)return Rs(503,"preview proxy not configured");let c=await l.resolvePreviewUpstreamUrl(f);if(!c)return Rs(404,"sandbox not found");let E=new URL(i.url);if(E.pathname.startsWith("/_sandbox")||E.pathname.startsWith("/_decopilot_vm"))return Rs(404,"not found");let $=`${c.replace(/^http/,"ws")}${E.pathname}${E.search}`,w=i.headers.get("sec-websocket-protocol"),d=w?w.split(",").map((h)=>h.trim()).filter(Boolean):[],_={kind:"preview",upstreamUrl:$,upstreamProtocols:d,pending:[],upstream:null,closed:!1};if(!u.upgrade(i,{data:_}))return Rs(426,"upgrade failed");return}function bs(i,u,t,f){if(u.closed)return;u.closed=!0;try{i.close(t,f)}catch{}try{u.upstream?.close()}catch{}}var oG4=256,sG4='<!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>',ln4;var Xut=N(()=>{E1u();ln4={open(i){let u=i.data;if(!Txi(u))return;let t;try{t=u.upstreamProtocols.length>0?new WebSocket(u.upstreamUrl,u.upstreamProtocols):new WebSocket(u.upstreamUrl)}catch(f){console.warn(`[preview-ws] failed to dial upstream ${u.upstreamUrl}: ${f instanceof Error?f.message:String(f)}`),bs(i,u,1011,"upstream connect failed");return}t.binaryType="arraybuffer",u.upstream=t,t.addEventListener("open",()=>{while(u.pending.length>0){let f=u.pending.shift();if(f!==void 0)t.send(f)}}),t.addEventListener("message",(f)=>{if(u.closed)return;i.send(f.data)}),t.addEventListener("close",(f)=>{bs(i,u,f.code||1000,f.reason||"")}),t.addEventListener("error",()=>{bs(i,u,1011,"upstream error")})},message(i,u){let t=i.data;if(!Txi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=oG4){bs(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!Txi(u))return;bs(i,u,1000,"")}}});var Jut={};Qi(Jut,{bootstrapDevLinkSession:()=>Dn4});import{existsSync as cn4}from"fs";import{chmod as En4,mkdir as $n4,rename as wn4,writeFile as dn4}from"fs/promises";import{dirname as _n4,join as Kut}from"path";function vn4(i){return Kut(i,"dev-link")}function hn4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Kut(vn4(i),"session.json")}async function Dn4(i,u){let t=hn4(i),f=qt().db,l=xd()?await Wa():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(cn4(t))try{let d=await Bun.file(t).json(),_=d.user?.sub,v=d.accessToken;if(_===l.id&&typeof v==="string"){if(await w4.api.verifyApiKey({body:{key:v}}).then((D)=>D?.valid===!0).catch(()=>!1))return{path:t,userSub:_}}}catch{}let c=null;try{c=await w4.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:l.id,permissions:{"*":["*"]},expiresIn:2592000,rateLimitEnabled:!1}})}catch(w){return console.warn("[dev-link] failed to mint API key:",w instanceof Error?w.message:String(w)),null}if(!c?.key)return null;let E={target:u,clientId:"dev-link",user:{sub:l.id,...l.email?{email:l.email}:{},...l.name?{name:l.name}:{}},accessToken:c.key,createdAt:new Date().toISOString()};await $n4(_n4(t),{recursive:!0});let $=`${t}.tmp`;return await dn4($,JSON.stringify(E,null,2),{mode:384}),await En4($,384),await wn4($,t),{path:t,userSub:l.id}}var Sut=N(()=>{zE();c8();Bg()});var Jn4={};import{existsSync as Tn4}from"fs";function Qut(i,u){if(!u)return i;let t=new URL(i);if(!t.searchParams.has("sslmode"))t.searchParams.set("sslmode","verify-full");return t.toString()}function In4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(xn4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function Kn4(i){let u;try{u=await gn4.create({systemDatabaseUrl:Qut(T3.databaseUrl,T3.databasePgSsl),systemDatabaseSchemaName:"dbos"});let t=await u.listWorkflows({status:"PENDING",queueName:s_,executorId:i,loadInput:!1,loadOutput:!1});if(t.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${i})`);return}let f=t.map((l)=>l.workflowID);await u.resumeWorkflows(f,{queueName:s_}),console.log(`[shutdown] re-enqueued ${f.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${i}):`,f)}catch(t){console.error("[shutdown] thread-gate handoff failed:",t)}finally{await u?.destroy().catch(()=>{})}}async function Pxi(i){if(zut)return;zut=!0,console.log(`
|
|
84197
|
+
Use sentence case for the title. No markdown fences.`;var os0=N(()=>{Cf();ca()});function UI4(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:null}function PI4(i){if(!i||i.includes(".."))return!1;return TI4.test(i)}function ss0(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!PI4(u))return null;let t=UI4(i.props);if(t)return{resolveType:u,payload:{props:t}};let{__resolveType:f,...l}=i;return{resolveType:u,payload:l}}function ps0(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${encodeURIComponent(u)}`}var TI4;var ip0=N(()=>{TI4=/^[\w./@-]+$/});function up0(i,u){let t=i?.githubRepo;if(!t?.owner||!t?.name)return null;if(!t.connectionId)return t;if(!u.includes(t.connectionId))return null;return t}async function tp0(i,u,t,f){if(!f.connectionId)throw new pH("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let l=i.organization?.id;if(!l)throw new pH(ZE);await UQ({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(_)=>{let v=_ instanceof Error?_.message:ZE;throw new pH(v)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await PQ(f.connectionId,f.owner,f.name,i.db,i.vault),w=_xi(i),d=await u.proxyDaemonRequest(t,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:c},identity:{userName:E,userEmail:$}},...w?{operator:w}:{}})});if(!d.ok){let _=await d.text().catch(()=>d.statusText);throw Error(`Failed to refresh sandbox git credentials (${d.status}): ${_}`)}}var pH;var fp0=N(()=>{L9();_5u();_Fi();pH=class pH extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function II4(i){if(!i||i.length>255||i.includes("..")||i.startsWith("/")||i.endsWith("/")||i.endsWith(".lock")||!xI4.test(i))throw Error(`Invalid branch name: ${i}`)}function ib(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(nI4)])}function ub(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}async function Rc(i,u,t){let f=ub(i);if(f instanceof Response)return f;let{claimName:l,userId:c,projectRef:E}=i.get("vmClaim"),$=t?.method??"POST",w=null,d=new Headers;if(t?.jsonBody!==void 0)w=t.jsonBody,d.set("content-type","application/json");else if(t?.forwardJsonBody)w=await i.req.text(),d.set("content-type","application/json");let _=t?.signal,v={method:$,headers:d,body:w,..._?{signal:_}:{}},h=async()=>{let D=await f.proxyDaemonRequest(l,u,v);if(t?.map404to410&&D.status===404){try{await D.body?.cancel()}catch{}if(await f.adoptLiveClaim?.({userId:c,projectRef:E},l))D=await f.proxyDaemonRequest(l,u,v);if(D.status===404){try{await D.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",...V8}})}}let g=await D.text(),O=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?jI4(g):g,Z=D.headers.get("content-type")??"application/json";return new Response(O,{status:D.status,headers:{"content-type":Z,...V8}})};try{if(_){let D=h();return D.catch(()=>{}),await Promise.race([D,new Promise((O,Z)=>{if(_.aborted)return Z(_.reason);_.addEventListener("abort",()=>Z(_.reason),{once:!0})})])}return await h()}catch(D){let g=D instanceof Error?D.message:String(D);return i.json({error:`Daemon unreachable: ${g}`},502)}}function jI4(i){try{let u=JSON.parse(i);if(u&&typeof u==="object"&&!Array.isArray(u)&&"repoDir"in u)return JSON.stringify({...u,repoDir:null})}catch{}return i}async function cp0(i,u,t,f="GET",l){let c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null});if(c.status===404&&l){try{await c.body?.cancel()}catch{}if(await i.adoptLiveClaim?.(l,u))c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null})}if(c.status===404){try{await c.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let E=await c.text();if(!c.ok)try{let $=JSON.parse(E);throw Error($.error??`Daemon error (${c.status})`)}catch($){if($ instanceof Error&&$.message!==E)throw $;throw Error(`Daemon error (${c.status})`)}return JSON.parse(E)}function XI4(i){return Ep0.includes(i)}var xI4,AI4=524288,GI4=65536,nI4=1e4,lp0=2000,kI4,V8,Ep0,$p0=()=>{let i=new Hu;return i.use("/:virtualMcpId/:branch/*",kI4),i.post("/:virtualMcpId/:branch/write",(u)=>Rc(u,"/_sandbox/write",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>Rc(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>Rc(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>Rc(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>Rc(u,"/_sandbox/read",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>Rc(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/exec/:script",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}`)}),i.post("/:virtualMcpId/:branch/exec/:script/kill",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/setup/:step",async(u)=>{let t=u.req.param("step");if(!t||!XI4(t))return u.json({error:`step must be one of: ${Ep0.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Bi(u.var.meshContext),c=EFi(f.virtualMcpMetadata);try{await wFi({ctx:u.var.meshContext,runner:f.runner,handle:f.claimName,orgId:l.id,userId:f.userId,entries:c})}catch(E){let $=E instanceof Error?E.message:String(E);return u.json({error:`Failed to push env to daemon: ${$}`},502)}}}return Rc(u,`/_sandbox/setup/${t}`,{signal:u.req.raw.signal,map404to410:!0})}),i.get("/:virtualMcpId/:branch/events",(u)=>{let t=u.get("vmClaim");if(!t.runner)return Wd(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this mesh."})})});return Ms0(u,{ctx:u.var.meshContext,claimName:t.claimName,runner:t.runner,virtualMcpId:t.virtualMcpId,branch:t.branch,userId:t.userId,projectRef:t.projectRef,virtualMcpMetadata:t.virtualMcpMetadata})}),i.get("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(lp0)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(lp0)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>Rc(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.meshContext;try{await v5u(E,t,f);let $=up0(l,c);if($)await tp0(E,t,f,$)}catch($){if($ instanceof pH)return u.json({error:$.message},403,V8);let w=$ instanceof Error?$.message:String($);return u.json({error:w},502,V8)}return Rc(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>Rc(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.meshContext;try{await v5u(l,t,f)}catch(c){let E=c instanceof Error?c.message:String(c);return u.json({error:E},502,V8)}return Rc(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",Bw({maxSize:AI4,onError:(u)=>u.json({error:"Payload too large"},413,V8)}),async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.meshContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,_=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[v,h]=ms0(w)&&_?[w,d]:await Promise.all([cp0(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),cp0(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await as0(E,v,h);return u.json(D,200,V8)}catch($){let w=$ instanceof Error?$.message:String($);if(w==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,V8);return u.json({error:w},502,V8)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(l!=="/.decofile")return u.json({error:"Path not allowed"},403);let c;try{c=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!c)return u.json({error:"Preview not available"},502);let E=c.replace(/\/+$/,""),$;try{$=await fetch(`${E}${l}`)}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",Bw({maxSize:GI4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l;try{l=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!l)return u.json({error:"Preview not available"},502);let c;try{c=await u.req.json()}catch{return u.json({error:"Invalid JSON body"},400)}if(!c||typeof c!=="object"||Array.isArray(c))return u.json({error:"Invalid JSON body"},400);let E=ss0(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $;try{$=await fetch(ps0(l,E.resolveType),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(E.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i};var wp0=N(()=>{sf();WH();$J();Rs0();$3();fPi();yQ();Cs0();qs0();D1u();TQ();os0();ip0();fp0();xI4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;kI4=bs0(async(i,u)=>{let t=i.var.meshContext;try{Si(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return i.json({error:"Organization scope required"},403)}let c=i.req.param("virtualMcpId"),E=i.req.param("branch");if(!c||!E)return i.json({error:"virtualMcpId and branch are required"},400);try{II4(E)}catch(h){let D=h instanceof Error?h.message:String(h);return i.json({error:D},400)}let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return i.json({error:"Virtual MCP not found"},404);let w=D8({orgId:l.id,virtualMcpId:c,branch:E}),d=IH({userId:f,projectRef:w},E),_=$.metadata??null,v;try{v=(await v_(t,{userId:f,branch:E,virtualMcpMetadata:_})).provider}catch{v=null}if(!v)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:d,runner:v,virtualMcpId:c,branch:E,userId:f,projectRef:w,virtualMcpMetadata:_,connectionIds:$.connections?.map((h)=>h.connection_id)??[]}),u()});V8={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Ep0=["clone","install","start"]});var dp0=(i)=>{let u=new Hu;if(u.use("*",sK),u.route("/",GPi()),u.route("/",ze0()),u.route("/",$xi()),u.route("/tools",Ys0()),u.route("/",Ks0()),u.route("/",Bs0({kvStorage:i.kvStorage})),u.route("/",Os0()),u.route("/fs",As0({getConnection:i.getNatsConnection})),u.route("/sandbox",$p0()),u.route("/",ns0()),u.route("/deco-sites",kPi()),u.route("/sso",pUi()),u.route("/",wxi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",ne0()),i.mountDevAssets)u.route("/dev-assets",jPi({orgFromPath:!0}));return u.use("/mcp/:connectionId?",i.mcpAuth),u.use("/mcp/:connectionId/ui-resource",i.mcpAuth),u.use("/mcp/gateway/:virtualMcpId?",i.mcpAuth),u.use("/mcp/virtual-mcp/:virtualMcpId?",i.mcpAuth),u.use("/mcp/self",i.mcpAuth),u.route("/",d70()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.route("/mcp",bFi()),u.route("/mcp/self",Exi()),u.route("/mcp",MFi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var _p0=N(()=>{sf();J3u();ke0();z3u();XPi();Qe0();X3u();Zs0();Fs0();Gs0();Be();Wwu();qFi();l5u();ks0();Js0();c5u();Ws0();E5u();RFi();wp0()});async function vp0(i,u){let t=new Headers({authorization:`Bearer ${i}`,"X-MCP-Session-Auth":"true"}),f=await u.getMcpSession({headers:t}).catch(()=>null);if(f?.userId)return f.userId;let l=await u.verifyApiKey({body:{key:i}}).catch(()=>null);if(l?.valid&&l.key?.userId)return l.key.userId;return null}function N5u(i){try{i?.clear?.()}catch{}}async function hp0({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=Whu(i),$=OAi(E.sub),w=Yb(new TextEncoder().encode(u)),d=qp();try{let _=await Vp(l,d,$,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:c},{algorithm:Vc.v2,exp:Math.floor(t.getTime()/1000),signer:w});return new TextDecoder().decode(rp(_,d))}finally{N5u(d),N5u(w),N5u($)}}var Dp0=N(()=>{UAi()});function KI4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function gp0(){let i=new Hu;return i.post("/links/session",async(u)=>{let f=u.get("meshContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=yu();if(!l.natsTunnelPublicEnabled)return u.json(O5u(),503);if(!l.natsPublicUrl)return u.json(O5u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(O5u(),503)}let c=f5(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await hp0({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:gMu(c),userId:f,allowedConnectionTypes:KI4(l.natsPublicUrl)})}return u.json(NMu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var O5u=()=>({error:"link session unavailable"});var Np0=N(()=>{sf();xt();FQi();Dp0()});async function YI4(i,u){try{return!await i.alive(u)}catch(t){return console.warn(`[vm-events] alive probe failed for ${u}; assuming alive: ${t instanceof Error?t.message:String(t)}`),!1}}async function WI4(i){let{ctx:u,runner:t,claimName:f,userId:l,projectRef:c,sandboxProviderKind:E}=i;try{await t.delete(f)}catch($){console.warn(`[vm-events] runner.delete failed for ${f}: ${$ instanceof Error?$.message:String($)}`)}try{await new tg(u.db).delete({userId:l,projectRef:c},E)}catch($){console.warn(`[vm-events] sandbox_runner_state delete failed for ${l}/${c}/${E}: ${$ instanceof Error?$.message:String($)}`)}}async function LI4(i){let{stream:u,claimName:t,runner:f,signal:l}=i;return new Promise((c)=>{let E=!1,$=!1,w=null,d=(h)=>{if(E)return;E=!0,clearTimeout(_),l.removeEventListener("abort",v),w?.unsubscribe(),c(h)},_=setTimeout(()=>{if($||E)return;u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"claim-never-created",message:"Sandbox claim was never created. The SANDBOX_START call may have failed earlier \u2014 check the start error."})}).catch(()=>{}),d(!1)},JI4),v=()=>d(!1);l.addEventListener("abort",v,{once:!0}),w=ja(f,t,(h)=>{if(E)return;if(h.kind!=="claiming")$=!0;if(u.writeSSE({event:"phase",data:JSON.stringify(h)}).catch(()=>{}),h.kind==="ready")d(!0);else if(h.kind==="failed")d(!1)})})}async function zI4(i){let{stream:u,runner:t,claimName:f,signal:l}=i,c=Date.now(),E=null;while(!l.aborted){let w=null;try{w=await t.proxyDaemonRequest(f,"/_sandbox/events",{method:"GET",headers:new Headers({accept:"text/event-stream"}),body:null,signal:l})}catch(d){if(l.aborted)return;if(Date.now()-c<Op0){await Zt(Zp0,{signal:l}).catch(()=>{});continue}let _=d instanceof Error?d.message:String(d);await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE error: ${_}`})}).catch(()=>{});return}if(w.status===404){try{await w.body?.cancel()}catch{}if(Date.now()-c<Op0){await Zt(Zp0,{signal:l}).catch(()=>{});continue}await u.writeSSE({event:"gone",data:""}).catch(()=>{});return}if(!w.ok||!w.body){try{await w.body?.cancel()}catch{}await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE failed (${w.status}).`})}).catch(()=>{});return}E=w;break}if(!E||!E.body)return;let $=E.body.getReader();try{while(!l.aborted){let{value:w,done:d}=await $.read();if(d)break;if(w)await u.write(w)}}catch{}finally{try{$.releaseLock()}catch{}}}var JI4=90000,SI4=15000,Bp0=()=>{let i=new Hu;return i.get("/",async(u)=>{let t=u.var.meshContext;try{Si(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return u.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return u.json({error:"Organization scope required"},403)}let c=u.req.query("virtualMcpId"),E=u.req.query("branch");if(!c||!E)return u.json({error:"virtualMcpId and branch are required"},400);let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return u.json({error:"Virtual MCP not found"},404);let w=D8({orgId:l.id,virtualMcpId:c,branch:E}),d=IH({userId:f,projectRef:w},E),_=$.metadata??null,v,h=null,D=null;try{let Z=await v_(t,{userId:f,branch:E,virtualMcpMetadata:_});v=Z.provider,h=Z.kind}catch(Z){D=Z instanceof Error?Z:Error(String(Z)),v=null}let g=h&&O8(T6(_),f,E,h),O=!!g&&g.sandboxHandle===d;if(!v)return Wd(u,async(Z)=>{await Z.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:D?.message??"No sandbox runner configured on this mesh."})})});return u.header("X-Accel-Buffering","no"),u.header("Content-Encoding","identity"),Wd(u,async(Z)=>{let B=new AbortController,F=setInterval(()=>{Z.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(F)})},SI4);Z.onAbort(()=>{B.abort(),clearInterval(F)});try{if(O&&h){if(await YI4(v,d)){await WI4({ctx:t,runner:v,claimName:d,userId:f,projectRef:w,sandboxProviderKind:h}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await LI4({stream:Z,claimName:d,runner:v,signal:B.signal})||B.signal.aborted)return;await zI4({stream:Z,runner:v,claimName:d,signal:B.signal})}finally{clearInterval(F)}})}),i},Op0=60000,Zp0=500;var Fp0=N(()=>{sf();$J();$3();Bl();fPi();Xa();yQ();Wdi();Td()});function HI4(i){return i.filter((u)=>u.vendors?.alias).map((u)=>({name:u.name,title:u.title,description:u.description,logo:u.logo,category:u.category,vendor:{alias:u.vendors.alias,url:u.vendors.url}}))}async function bI4(i,u){let t=await fetch(`${i}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:u,Authorization:`Bearer ${u}`,Accept:"application/json"},signal:AbortSignal.timeout(QI4)});if(!t.ok){let f=await t.text().catch(()=>t.statusText);throw console.error(`[deco-apps] Supabase error (${t.status}): ${f.slice(0,200)}`),Error(`External service error (${t.status})`)}return await t.json()}var QI4=1e4,RI4=async(i,u)=>{if(!i.get("meshContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},yp0=()=>{let i=new Hu;return i.use("*",RI4),i.get("/",async(u)=>{let t=yu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await bI4(f,l);return u.json({apps:HI4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var Tp0=N(()=>{sf();xt()});import{z as Lu}from"zod";function Ah(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function sI4(i){if(!i)return null;let u=i.indexOf(":");if(u===-1)return{credentialId:null,modelId:i};let t=i.substring(0,u),f=i.substring(u+1);if(!t||!f)return null;return{credentialId:t,modelId:f}}function pI4(i,u,t){try{return JSON.parse(i)}catch{throw new xp0(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function iA4(i){let u={};for(let t of i)if(t.role==="assistant"&&t.tool_calls)for(let f of t.tool_calls)u[f.id]=f.function.name;return i.map((t)=>{switch(t.role){case"system":return{role:"system",content:t.content};case"user":if(typeof t.content==="string")return{role:"user",content:t.content};return{role:"user",content:t.content.map((l)=>{if(l.type==="text")return{type:"text",text:l.text};return{type:"image",image:l.image_url.url}})};case"assistant":if(t.tool_calls&&t.tool_calls.length>0)return{role:"assistant",content:t.tool_calls.map((l)=>({type:"tool-call",toolCallId:l.id,toolName:l.function.name,input:pI4(l.function.arguments,l.id,l.function.name)}))};return{role:"assistant",content:t.content??""};case"tool":let f=u[t.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:t.tool_call_id,toolName:f,output:{type:"text",value:t.content}}]}}})}function uA4(i){let u=i.map((t)=>{let f=t.function.parameters?aw(t.function.parameters):aw({type:"object",properties:{}});return[t.function.name,ft({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function tA4(i){if(!i)return;return{openai:{response_format:i}}}function fA4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Up0(i,u,t,f,l,c){let E={model:i,messages:u,tools:t,temperature:f.temperature,maxTokens:f.max_tokens,topP:f.top_p,frequencyPenalty:f.frequency_penalty,presencePenalty:f.presence_penalty,stopSequences:f.stop?Array.isArray(f.stop)?f.stop:[f.stop]:void 0,abortSignal:c};return l?{...E,providerOptions:l}:E}function Pp0(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var CI4=256,MI4,qI4,VI4,rI4,mI4,eI4,aI4,oI4,xp0,Ip0,Ap0;var Gp0=N(()=>{Cf();sf();$J();MI4=Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string(),description:Lu.string().optional(),parameters:Lu.record(Lu.string(),Lu.unknown()).optional()})}),qI4=Lu.object({id:Lu.string(),type:Lu.literal("function"),function:Lu.object({name:Lu.string(),arguments:Lu.string()})}),VI4=Lu.discriminatedUnion("role",[Lu.object({role:Lu.literal("system"),content:Lu.string(),name:Lu.string().optional()}),Lu.object({role:Lu.literal("user"),content:Lu.union([Lu.string(),Lu.array(Lu.union([Lu.object({type:Lu.literal("text"),text:Lu.string()}),Lu.object({type:Lu.literal("image_url"),image_url:Lu.object({url:Lu.string(),detail:Lu.string().optional()})})]))]),name:Lu.string().optional()}),Lu.object({role:Lu.literal("assistant"),content:Lu.string().nullable().optional(),name:Lu.string().optional(),tool_calls:Lu.array(qI4).optional()}),Lu.object({role:Lu.literal("tool"),content:Lu.string(),tool_call_id:Lu.string()})]),rI4=Lu.object({type:Lu.literal("text")}),mI4=Lu.object({type:Lu.literal("json_object")}),eI4=Lu.object({type:Lu.literal("json_schema"),json_schema:Lu.object({name:Lu.string(),description:Lu.string().optional(),schema:Lu.record(Lu.string(),Lu.unknown()),strict:Lu.boolean().optional()})}),aI4=Lu.union([rI4,mI4,eI4]),oI4=Lu.object({model:Lu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:Lu.array(VI4),stream:Lu.boolean().optional().default(!1),temperature:Lu.number().min(0).max(2).optional(),max_tokens:Lu.number().positive().optional(),top_p:Lu.number().min(0).max(1).optional(),frequency_penalty:Lu.number().min(-2).max(2).optional(),presence_penalty:Lu.number().min(-2).max(2).optional(),stop:Lu.union([Lu.string(),Lu.array(Lu.string())]).optional(),tools:Lu.array(MI4).optional(),tool_choice:Lu.union([Lu.literal("auto"),Lu.literal("none"),Lu.literal("required"),Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string()})})]).optional(),response_format:aI4.optional(),user:Lu.string().optional()});xp0=class xp0 extends Error{constructor(i){super(i);this.name="MessageConversionError"}};Ip0=new Hu;Ip0.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("meshContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(Ah("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(Ah("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((u.organization.slug??u.organization.id)!==t)return i.json(Ah("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let f=await i.req.json(),l=oI4.safeParse(f);if(!l.success){let Z=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(Ah(`Invalid request: ${Z.message}`,"invalid_request_error",Z.path.length>0?Z.path.join("."):null),400)}let c=l.data,E=sI4(c.model);if(!E)return i.json(Ah("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:$}=E,{modelId:w}=E;if(!$){let Z=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(Z.length===0)return i.json(Ah("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);$=Z[0].id}let d;try{d=await u.aiProviders.activate($,u.organization.id)}catch{return i.json(Ah(`AI provider credential not found or inaccessible: ${$}`,"invalid_request_error","model"),404)}let _=d.aiSdk.languageModel(w),v=iA4(c.messages),h=c.tools?uA4(c.tools):void 0,D=tA4(c.response_format),g=fA4(),O=Math.floor(Date.now()/1000);if(c.stream)return Wd(i,async(Z)=>{let B=Up0(_,v,h,c,D,i.req.raw.signal);try{let F=Fd(B),y=!1,T=0,U="",I=async()=>{if(U.length===0)return;let j=U;U="",await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{content:j},finish_reason:null}]})})};for await(let j of F.fullStream){if(!y&&(j.type==="text-delta"||j.type==="tool-call"))await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),y=!0;if(j.type==="text-delta"){if(U+=j.text,U.length>=CI4)await I()}else if(j.type==="tool-call"){await I();let A=T++;await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{tool_calls:[{index:A,id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify(j.input)}}]},finish_reason:null}]})})}else if(j.type==="finish")await I(),await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{},finish_reason:Pp0(j.finishReason)}],usage:j.totalUsage?{prompt_tokens:j.totalUsage.inputTokens??0,completion_tokens:j.totalUsage.outputTokens??0,total_tokens:j.totalUsage.totalTokens??0}:void 0})})}await I(),await Z.writeSSE({data:"[DONE]"})}catch(F){let y=F;console.error("[openai-compat:stream] Error:",y.message),await Z.writeSSE({data:JSON.stringify({error:{message:y.message,type:"server_error"}})})}});else{let Z=Up0(_,v,h,c,D,i.req.raw.signal),B=await a9(Z),F={role:"assistant",content:B.text||null};if(B.toolCalls&&B.toolCalls.length>0)F.tool_calls=B.toolCalls.map((y)=>({id:y.toolCallId,type:"function",function:{name:y.toolName,arguments:JSON.stringify("input"in y?y.input:{})}})),F.content=null;return i.json({id:g,object:"chat.completion",created:O,model:c.model,choices:[{index:0,message:F,finish_reason:Pp0(B.finishReason)}],usage:{prompt_tokens:B.usage?.inputTokens??0,completion_tokens:B.usage?.outputTokens??0,total_tokens:B.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(Ah("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(Ah(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(Ah(l.message,"server_error"),500)}});Ap0=Ip0});function cA4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??lA4}}var np0,lA4="https://us.i.posthog.com",kp0;var jp0=N(()=>{sf();cri();Bg();HE();xt();Kwu();np0=new Hu;np0.get("/",(i)=>{let u={theme:uf0(),...rO().logo&&{logo:rO().logo},...xd()&&{internalUrl:P4i()},...yu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!yu().firecrawlApiKey,auth:kV0(),posthog:cA4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!xd()&&yu().sandboxProviderKind==="agent-sandbox"}};return i.json({success:!0,config:u})});kp0=np0});function Xp0(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals")}var Kp0,EA4,$A4,Jp0;var Sp0=N(()=>{sf();n5();AQ();gW();Kp0=new Hu,EA4=["range","if-none-match","if-modified-since"],$A4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Kp0.get("/:org/files/*",async(i)=>{let u=i.get("meshContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(YH(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new P0(401,{message:"Authentication required"})}if(!t)throw new P0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new P0(400,{message:"Missing file key"});let l=await La(f,u);if(!l)throw new P0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&G5()){let w=l.match(/^data:([^;]+);base64,(.+)$/s);if(!w)throw new P0(500,{message:"Invalid data URL from storage"});let[,d,_]=w,v=Buffer.from(_,"base64"),h=new Headers({"Content-Type":d,"Cache-Control":"private, max-age=86400"});return Xp0(h,d),new Response(v,{status:200,headers:h})}let c=new Headers;for(let w of EA4){let d=i.req.header(w);if(d)c.set(w,d)}let E=await fetch(l,{headers:c});if(E.status===403||E.status===404)throw new P0(404,{message:"File not found"});if(!E.ok&&E.status!==304&&E.status!==416)throw console.error(`[files] upstream storage error ${E.status} for key:`,f),new P0(502,{message:"Upstream storage error"});let $=new Headers;for(let w of $A4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),Xp0($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});Jp0=Kp0});function zp0(i){let u=i?.connectFn??vA4,t=null,f=null,l=!1,c=!1,E=!1,$=[];function w(){return t!==null&&!t.isClosed()&&!t.isDraining()&&!E}function d(){console.log(`[NatsProvider] fireReady: ${$.length} callbacks`);for(let h of $)try{h()}catch{}}function _(h){(async()=>{for await(let D of h.status())if(D.type==="disconnect")console.log("[NatsProvider] Disconnected"),E=!0;else if(D.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),E=!1,f=null,d()})().catch(()=>{})}async function v(h,D){let g=0;while(!c)try{t=await u({servers:h,timeout:_A4,reconnect:!0,maxReconnectAttempts:-1,...D?{authenticator:D}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${g} attempt(s)`),f=null,E=!1,_(t),d();return}catch{g++;let O=uc(dA4,wA4,g-1,2,0.5);await Zt(O)}}return{init(h,D){if(l)return;l=!0,c=!1;let g=D?.creds?Yp0.credsAuthenticator(new TextEncoder().encode(D.creds)):void 0;v(h,g).catch(()=>{})},isConnected(){return w()},getConnection(){return w()?t:null},getJetStream(){if(!w())return null;if(!f)f=Lp0.jetstream(t);return f},onReady(h){if($.push(h),w())try{h()}catch{}},async drain(){if(c=!0,l=!1,f=null,E=!1,t){let h=t;t=null,await h.drain().catch(()=>{})}}}}function vA4(i){return Wp0.connect(i)}var Yp0,Wp0,Lp0,wA4=100,dA4=3000,_A4=3000;var Qp0=N(()=>{Bl();Yp0=k(gO(),1),Wp0=k(BQi(),1),Lp0=k(o2(),1)});function tb(i){let u=i?.ttlMs??60000,t=i?.maxSize??1e4,f=i?.updateRecencyOnGet??!1,l=new Map;function c(){if(l.size<=t)return;let E=Date.now();for(let[$,w]of l)if(w.expiresAt<=E)l.delete($);while(l.size>t){let $=l.keys().next().value;if($===void 0)break;l.delete($)}}return{get(E){let $=l.get(E);if(!$)return;if($.expiresAt<=Date.now()){l.delete(E);return}if(f)l.delete(E),l.set(E,$);return $.value},set(E,$){l.delete(E),l.set(E,{value:$,expiresAt:Date.now()+u}),c()},delete(E){l.delete(E)},clear(){l.clear()},size(){return l.size}}}function Z5u(i,u){return`${i}.${u}`}class B5u{cache;constructor(i){this.cache=tb({ttlMs:i?.ttlMs??hA4,maxSize:i?.maxSize??DA4})}async get(i,u){return this.cache.get(Z5u(i,u))??null}async set(i,u,t){this.cache.set(Z5u(i,u),t)}async invalidate(i,u){this.cache.delete(Z5u(i,u))}teardown(){this.cache.clear()}}var hA4=600000,DA4=5000;var Hp0=()=>{};function vxi(i,u){return`${i}:${u}`}function F5u(i){let u=tb({ttlMs:i?.ttlMs??gA4,maxSize:i?.maxSize??NA4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let _=t?.();if(!_)return;try{_.publish(bp0,l.encode(JSON.stringify({organizationId:w,keyId:d,originId:f})))}catch(v){console.warn("[ProviderKeyCache] Publish failed (non-critical):",v)}}return{get(w,d){return u.get(vxi(w,d))},set(w,d,_){u.set(vxi(w,d),_)},invalidate(w,d){u.delete(vxi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(bp0),(async()=>{for await(let d of E)try{let _=JSON.parse(c.decode(d.data));if(_.originId===f)continue;u.delete(vxi(_.organizationId,_.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var bp0="studio.ai-provider-keys.invalidate",gA4=30000,NA4=5000;var Rp0=()=>{};class y5u{options;sub=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor(i){this.options=i}async start(i){if(i)this.onCancel=i;if(this.sub)return;if(!this.onCancel)return;let u=this.options.getConnection();if(!u)return;this.sub=u.subscribe("mesh.decopilot.cancel");let t=new TextDecoder;(async()=>{for await(let f of this.sub)try{let l=JSON.parse(t.decode(f.data));if(l.originId===this.originId)continue;this.onCancel?.(l.taskId)}catch{}})().catch(console.error)}broadcast(i){if(/[.*>\s]/.test(i)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(i);try{let u=this.options.getConnection();if(!u)return;u.publish("mesh.decopilot.cancel",this.encoder.encode(JSON.stringify({taskId:i,originId:this.originId})))}catch(u){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",u)}}publishControlFrame(i,u){}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onCancel=null}}function UA4(){return{name:_8,subjects:[`${VQi}.>`],storage:x_.StorageType.File,max_age:BA4,max_bytes:yA4,max_msgs_per_subject:TA4,discard:x_.DiscardPolicy.Old,retention:x_.RetentionPolicy.Limits,duplicate_window:FA4,num_replicas:1}}class qp0{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(i,u){if(this.chunks++,this.encodeMs+=i,i>this.maxMs)this.maxMs=i;this.bytes+=u}flush(){let i=performance.now(),u=i-this.windowStart;if(this.chunks>0&&u>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(u),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/u*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=i}}function Cp0(i){let u=Mp0.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function AA4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,ZA4().add(1,{"org.id":u??"unknown"}),t===1||t%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${i} (${t} total):`,$)})},get errorCount(){return t}}}class T5u{options;js=null;jsm=null;constructor(i){this.options=i}async init(){let i=this.options.getConnection();if(!i){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let u=this.options.getJetStreamManager?await this.options.getJetStreamManager():await x_.jetstreamManager(i),t=UA4();try{await u.streams.info(_8),await u.streams.update(_8,t)}catch(f){if(f instanceof Error&&f.message.includes("stream not found"))await u.streams.add(t);else if(f instanceof Error&&/can ?not change.*storage|storage type/i.test(f.message))await u.streams.delete(_8),await u.streams.add(t);else throw f}this.js=this.options.getJetStream(),this.jsm=u,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(i,u,t,f){let l=this.js;if(!l){console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`);return}let c=AA4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=Rqu(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let _=performance.now(),v=ZY(d,{runId:u}),h=performance.now()-_;if(cM().record(h),EM().add(1,{"org.id":f??"unknown"}),IA4?.record(h,v.reduce((D,g)=>D+g.data.length,0)),v.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let D of v)c.publish(l,D.subject,D.data,D.headers?Cp0(D.headers):void 0)};(async()=>{let d=i.getReader(),_=0,v=0;try{while(!0){let{done:h,value:D}=await d.read();if(h)break;if(w(D),v++,++_>=64)_=0,await new Promise((g)=>setImmediate(g))}}catch(h){console.warn(`[Decopilot] stream pump error for thread ${u}:`,h?.message??h)}finally{if(d.releaseLock(),$(),xA4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:v,publishErrors:c.errorCount}))}})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),c=ZY(u,{runId:i,dedup:t});if(cM().record(performance.now()-l),EM().add(1),c.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${i} (> MAX_CHUNKED_BYTES)`),!0;for(let E of c)await f.publish(E.subject,E.data,{...E.headers?{headers:Cp0(E.headers)}:{},...E.msgId?{msgID:E.msgId}:{}});return!0}async publishDone(i,u,t){let f=this.js;if(!f)return!1;let l=I1i({runId:i,fenceToken:u,finalSeq:t});return await f.publish(l.subject,l.data,{msgID:l.msgId}),!0}async createTailStream(i,u,t){let f=this.js;if(!f)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${i}; no live tail`),null;let l=t?.deliverPolicy==="new"?x_.DeliverPolicy.New:x_.DeliverPolicy.All,c=t?.closeOnDone??!1,E=s2(i),$;try{$=await(await f.consumers.get(_8,{filter_subjects:E,deliver_policy:l})).consume()}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let _=_di({messages:async function*(){try{for await(let O of $)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{$.stop()}}(),onCancel:()=>$.stop()}).pipeThrough(A1i()).pipeThrough(G1i()).getReader(),v=!1,h=()=>{if(v)return;v=!0;try{_.releaseLock()}catch{}},D=!1,g=()=>{if(D)return;D=!0,$.stop(),_.cancel().catch(()=>{}),h()};return u?.addEventListener("abort",g,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:Z,value:B}=await _.read();if(Z){g(),O.close();return}let F=B;if(F.kind==="done"){if(c){g(),O.close();return}continue}O.enqueue(F.chunk);return}},cancel(){g()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(_8,{filter:s2(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var x_,Mp0,OA4=(i)=>{let u;return()=>u??=i()},ZA4,BA4=86400000000000,FA4=120000000000,yA4=4294967296,TA4=500000,PA4,xA4,IA4;var Vp0=N(()=>{Dtu();gtu();n1i();Q1();aQi();x_=k(o2(),1),Mp0=k(gO(),1),ZA4=OA4(()=>Mt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));PA4=process.env.STREAM_ENCODE_TRACE==="1",xA4=process.env.DECOPILOT_STREAM_TRACE==="1";IA4=PA4?new qp0:null});function rp0(i){let u=i.createFetch??GA4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return U5u;let c=f5(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return U5u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return U5u}}}var U5u,GA4=(i,u)=>C2({connection:i,firstFrameTimeoutMs:u});var mp0=N(()=>{WC();aC();U5u={online:!1,capabilities:[]}});async function*nA4(i){if(!i.body){yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};return}let u=i.body.getReader(),t=!1;try{yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};while(!0){let{done:f,value:l}=await u.read();if(f){t=!0;return}yield{data:Buffer.from(l).toString("base64")}}}finally{try{if(!t)await u.cancel()}catch{}finally{u.releaseLock()}}}function ep0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:kA4}));return async function*(f,l,c){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let $=f5(f),w=u(E),d={method:l.method,headers:l.headers,signal:c?.signal};if(l.body!=null)d.body=l.body;let _=await w(`tunnel://${$}${l.path}`,d);yield*nA4(_)}}var kA4=45000;var ap0=N(()=>{WC();aC()});function op0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:jA4}));return{async publish(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=f5(t),w=await u(c)(`tunnel://${E}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel work publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}function sp0(i){let u=i.createFetch??C2;return{async publishControlFrame(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=f5(t),w=await u(c)(`tunnel://${E}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:lVu(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel control publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}var jA4=45000;var pp0=N(()=>{WC();tHi();aC()});function iit(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function uit(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function tit(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,A5(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,Iq(i,t))}async function XA4(i,u){let{storage:t,streamBuffer:f,sseHub:l}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null});let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at}));return}case"STEP_COMPLETED":l.emit(i.orgId,e6i(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await tit(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await tit(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null});f.purge(i.taskId);let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"failed",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at})),l.emit(i.orgId,Iq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function fit(i,u){for(let{event:t}of i)await XA4(t,u)}var lit=N(()=>{wf()});function cit(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function Eit(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class P5u{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},KA4)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=iit(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=uit(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),JA4.has(l.type))wit().add(1,{"org.id":l.orgId});else if(SA4.has(l.type)&&c?.status.tag==="running")wit().add(-1,{"org.id":l.orgId})}return f}react(i){return fit(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let $=await this.deps.storage.getProgress(t,f.orgId);c=Eit({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!cit({lastProgressAt:c,now:i,idleTimeoutMs:$it}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let $=this.states.get(t);if($?.status.tag==="running")$.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${$it/60000}m) ...`),YA4().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch(($)=>{console.error("[RunRegistry] Reaper execute failed",$)})}}}var KA4=300000,$it=600000,JA4,SA4,dit=(i)=>{let u;return()=>u??=i()},wit,YA4;var _it=N(()=>{lit();Q1();JA4=new Set(["RUN_STARTED","RUN_RESUMED"]),SA4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),wit=dit(()=>Mt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),YA4=dit(()=>Mt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});function hxi(i,u,t,f){if(!f)return!1;return i.emit(u,A5(t,f.status,{title:f.title??void 0,virtualMcpId:f.virtual_mcp_id??void 0,createdBy:f.created_by??void 0,triggerId:f.trigger_id??null,branch:f.branch??null,createdAt:f.created_at,updatedAt:f.updated_at})),!0}var vit=N(()=>{wf()});class x5u{storage;options;timer=null;constructor(i,u={}){this.storage=i;this.options=u}start(){if(this.timer)return;let i=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},i)}async runOnce(){let i=this.options.staleAfterMs??3600000;try{let u=await this.storage.sweepAbandoned(i);if(u>0)console.log(`[async-research-sweeper] marked ${u} stale jobs as abandoned`);return u}catch(u){return console.error("[async-research-sweeper] sweep failed",u),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as WA4,rm as Dxi}from"fs/promises";import{join as gxi}from"path";async function Nxi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-LA4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await wJ(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await hit(i,l,u);else if(!l.startsWith(".")){let c=gxi(i,l),E=await wJ(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await hit(c,w,u)}if((await wJ(c)).length===0)await Dxi(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function hit(i,u,t){let f=0,l=gxi(i,u),c=await wJ(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=gxi(l,$),d=await wJ(w);for(let v of d){if(!/^\d{2}$/.test(v))continue;let h=new Date(`${u}-${$}-${v}T00:00:00Z`);if(isNaN(h.getTime()))continue;if(h<t){let D=gxi(w,v);await Dxi(D,{recursive:!0,force:!0}),f++}}if((await wJ(w)).length===0)await Dxi(w,{recursive:!0,force:!0})}if((await wJ(l)).length===0)await Dxi(l,{recursive:!0,force:!0});return f}async function wJ(i){try{return(await WA4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var LA4=30;var I5u=()=>{};import{DBOS as A5u,SchedulerMode as zA4}from"@dbos-inc/dbos-sdk";async function HA4(){let i=[ad(),mS(),wD()],u=0;for(let t of i)try{u+=await Nxi(t)}catch(f){console.error("[monitoring-retention] cleanup failed:",f)}return console.log(`[monitoring-retention] deleted ${u} day-dir(s) across ${i.length} signal dir(s)`),{deleted:u,dirs:i.length}}async function bA4(i,u){await A5u.runStep(()=>HA4(),{name:"monitoringRetention"})}function git(){if(Dit)return;Dit=!0;let i=A5u.registerWorkflow(bA4,{name:"monitoringRetentionWorkflow"});A5u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:QA4,mode:zA4.ExactlyOncePerIntervalWhenActive})}var QA4="23 4 * * *",Dit=!1;var Nit=N(()=>{jw();I5u()});function Oit(i){return async(u,t)=>{let f=await i.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","=",t).where("member.organizationId","=",u).executeTakeFirst();if(!f)return console.warn(`[automationContextFactory] User ${t} not found in org ${u} \u2014 returning null`),null;let l=await Y9.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let c=await xiu(i.db,u,f.role);return l.boundAuth=Piu({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new KZ(t,void 0,l.boundAuth,f.role,"self"),swi(l,{id:f.orgId,slug:f.orgSlug}),l}}var Zit=N(()=>{JZ();Ne()});import{EventEmitter as RA4}from"events";var G5u;var Bit=N(()=>{UO();G5u=new RA4;G5u.on("request",(i)=>{o_(i)})});function Fit(){return async(i,u)=>{let t=Date.now(),f=i.req.method,l=i.req.path;if(l==="/api/auth/get-session"||l.includes("favicon")){await u();return}let c="",E=!1;if(l.startsWith("/mcp")&&f==="POST"){E=!0;try{if(i.req.header("Content-Type")?.includes("application/json")){let h=await i.req.raw.clone().json();if(h.method==="tools/call"&&h.params?.name){let D=fb(h.params.name),g=h.params.arguments||{},O=Object.keys(g).map((B)=>fb(B)),Z=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";c=`${v1.tool}${D}${v1.dim}(${Z})${v1.reset}`}else if(h.method)c=`${v1.dim}${fb(h.method)}${v1.reset}`}}catch{}}let $=fb(l);if(l.startsWith("/mcp/conn_")){let _=l.split("/")[2]??"";$=`/mcp/${v1.mcp}${fb(_.slice(0,12))}\u2026${v1.reset}`}else if(l==="/mcp")$=`${v1.mcp}/mcp${v1.reset}`;else if(l==="/mcp/registry")$=`${v1.mcp}/mcp/registry${v1.reset}`;let w=MA4(f),d=E?"\u25C0":"\u2190";if(!ili())console.log(`${v1.dim}${d}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""}`);try{await u()}finally{let _=Date.now()-t,v=i.res.status,h=CA4(v),D=_<1000?`${_}ms`:`${(_/1000).toFixed(1)}s`,g=E?"\u25B6":"\u2192";if(!ili())console.log(`${v1.dim}${g}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""} ${h}${v}${v1.reset} ${v1.duration}${D}${v1.reset}`);G5u.emit("request",{method:f,path:fb(l),status:v,duration:_,timestamp:new Date})}}}var v1,CA4=(i)=>{if(i>=500)return v1.serverError;if(i>=400)return v1.clientError;if(i>=300)return v1.redirect;return v1.ok},MA4=(i)=>{return v1[i]||v1.reset},fb=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var yit=N(()=>{UO();Bit();v1={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 xit}from"crypto";import{mkdir as qA4,readdir as VA4,rm as Tit,stat as Iit}from"fs/promises";import{join as k5u,relative as rA4}from"path";import{z as I0}from"zod";function Git(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return k5u(mA4,u)}function nit(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function n5u(i,u){let t=Git(i),f=nit(u);return k5u(t,f)}function eA4(i,u,t,f){let l=yu().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return xit("sha256",l).update(c).digest("hex")}function Pit(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=eA4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${nit(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function kit(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${xit("md5","etag").update(f).digest("hex")}"`}async function jit(i,u,t,f,l){try{let c=await VA4(i,{withFileTypes:!0});for(let E of c){let $=k5u(i,E.name),d=rA4(u,$).replace(/\\/g,"/");if(t&&!d.startsWith(t))continue;if(E.isDirectory())if(f){let _=d+"/";if(!t||_.startsWith(t)){if(!(t?d.slice(t.length):d).includes("/"))l.commonPrefixes.add(_)}}else await jit($,u,t,f,l);else if(E.isFile()){if(f&&t){let _=d.slice(t.length);if(_.includes(f)){let v=_.indexOf(f),h=t+_.slice(0,v+1);l.commonPrefixes.add(h);continue}}try{let _=await Iit($);l.objects.push({key:d,size:_.size,lastModified:_.mtime.toISOString(),etag:kit($,_.mtime,_.size)})}catch{}}}}catch{}}function Xit(i,u){let f=Bi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:I0.object({prefix:I0.string().optional(),maxKeys:I0.number().optional().default(1000),continuationToken:I0.string().optional(),delimiter:I0.string().optional()}),outputSchema:I0.object({objects:I0.array(I0.object({key:I0.string(),size:I0.number(),lastModified:I0.string(),etag:I0.string()})),nextContinuationToken:I0.string().optional(),isTruncated:I0.boolean(),commonPrefixes:I0.array(I0.string()).optional()}),handler:async(l)=>{let c=l,E=c.prefix||"",$=c.maxKeys??1000,w=c.delimiter,d=c.continuationToken,_=Git(f);await qA4(_,{recursive:!0});let v={objects:[],commonPrefixes:new Set};await jit(_,_,E,w,v),v.objects.sort((Z,B)=>Z.key.localeCompare(B.key));let h=0;if(d){if(h=v.objects.findIndex((Z)=>Z.key>d),h===-1)h=v.objects.length}let D=v.objects.slice(h,h+$),g=h+$<v.objects.length,O=g?D[D.length-1]?.key:void 0;return{objects:D,isTruncated:g,nextContinuationToken:O,commonPrefixes:Array.from(v.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({contentType:I0.string().optional(),contentLength:I0.number(),lastModified:I0.string(),etag:I0.string(),metadata:I0.record(I0.string(),I0.string()).optional()}),handler:async(l)=>{let c=l,E=n5u(f,c.key),$=await Iit(E);return{contentType:Q3u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:kit(E,$.mtime,$.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Uit;return{url:Pit(u,f,c.key,E,"GET"),expiresIn:E}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional(),contentType:I0.string().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Uit;return{url:Pit(u,f,c.key,E,"PUT"),expiresIn:E}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({success:I0.boolean(),key:I0.string()}),handler:async(l)=>{let c=l,E=n5u(f,c.key);try{return await Tit(E),{success:!0,key:c.key}}catch{return{success:!1,key:c.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:I0.object({keys:I0.array(I0.string()).max(1000)}),outputSchema:I0.object({deleted:I0.array(I0.string()),errors:I0.array(I0.object({key:I0.string(),message:I0.string()}))}),handler:async(l)=>{let c=l,E=[],$=[];return await Promise.all(c.keys.map(async(w)=>{let d=n5u(f,w);try{await Tit(d),E.push(w)}catch(_){$.push({key:w,message:_ instanceof Error?_.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function j5u(i,u,t){let f=Xit(u,t),l=new nD({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:k1});for(let E of f){let $="shape"in E.inputSchema?E.inputSchema.shape:I0.object({}).shape,w=E.outputSchema&&"shape"in E.outputSchema?E.outputSchema.shape:I0.object({}).shape;l.registerTool(E.name,{description:E.description??"",inputSchema:$,outputSchema:w,annotations:E.annotations,_meta:E._meta},async(d)=>{try{let _=await E.handler(d);return{content:[{type:"text",text:JSON.stringify(_)}],structuredContent:_}}catch(_){return{content:[{type:"text",text:`Error: ${_.message}`}],isError:!0}}})}let c=new g3({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),ch(l,c,i,"mcp:dev-assets")}async function Kit(i,u,t,f){let c=Xit(t,f).find((E)=>E.name===i);if(!c)return{content:[{type:"text",text:`Tool not found: ${i}`}],isError:!0};try{let E=await c.handler(u);return{content:[{type:"text",text:JSON.stringify(E)}]}}catch(E){return{content:[{type:"text",text:E instanceof Error?E.message:String(E)}],isError:!0}}}var mA4="./data/assets",Uit=3600,Ait,Jit;var Sit=N(()=>{xt();ba();sf();Gq();kQ();mE();XPi();Ait=new Hu;Ait.all("/",async(i)=>{let u=i.get("meshContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return j5u(i.req.raw,u,f)});Jit=Ait});var Yit={};Qi(Yit,{mountDevRoutes:()=>aA4});function aA4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`;return j5u(f.req.raw,l,E)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`,$=f.req.param("toolName");if(!$)return f.json({error:"Missing tool name"},400);let w=await f.req.json(),d=await Kit($,w,l,E);if(d.isError)return f.json(d.content,500);return f.json(d.content)}),i.use("/mcp/dev-assets",u),i.route("/mcp/dev-assets",Jit);let t=new Hu;t.use("*",Yd({mountPath:"/api/dev-assets"})),t.route("/",jPi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var Wit=N(()=>{sf();K3u();XPi();Sit()});var Lit=N(()=>{Viu();riu();DB()});var Oxi=N(()=>{Lit()});var Qit={};Qi(Qit,{streamAgent:()=>zit,createDecopilotClient:()=>sA4});async function oA4(i){let{parseJsonEventStream:u,uiMessageChunkSchema:t}=await Promise.resolve().then(() => (Cf(),dtu));return u({stream:i,schema:t}).pipeThrough(new TransformStream({transform(f,l){if(!f.success)throw f.error;l.enqueue(f.value)}}))}async function zit(i,u,t,f,l){let{readUIMessageStream:c}=await Promise.resolve().then(() => (Cf(),dtu)),E=t.value??t.id;if(!E)throw Error("Agent binding has no id or value \u2014 cannot resolve agent");let $=f.credentialId??t.credentialId,w=f.thinking??t.thinking,d=w?.id,_={messages:f.messages,...d?{models:{credentialId:$,thinking:w,...f.fast??t.fast?{fast:f.fast??t.fast}:{}}}:{},agent:{id:E},temperature:f.temperature??t.temperature,toolApprovalLevel:f.toolApprovalLevel??t.toolApprovalLevel,mode:f.mode??t.mode??"default",...f.memory?{memory:f.memory}:{},...f.thread_id?{thread_id:f.thread_id}:{}},v=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","x-mesh-token":u,Authorization:`Bearer ${u}`},body:JSON.stringify(_),signal:l?.signal});if(!v.ok){let D=await v.text().catch(()=>""),g=`HTTP ${v.status}`;try{let O=JSON.parse(D);if(O?.error)g=O.error}catch{if(D)g=D}throw Error(g)}if(!v.body)throw Error("Empty response body from decopilot stream");let h=await oA4(v.body);return c({stream:h})}function sA4(i){let{baseUrl:u,orgSlug:t,token:f}=i,l=`${u}/${t}/decopilot/runtime/stream`;return{stream(c,E){let $={__type:"@deco/agent",id:c.agent.id,credentialId:c.credentialId??"",thinking:c.thinking??{id:"",title:""},fast:c.fast,toolApprovalLevel:c.toolApprovalLevel,mode:c.mode,temperature:c.temperature};return zit(l,f,$,c,E)}}}import{z as yw}from"zod";function Hit(i){let u=i.properties;if(!u)return i;for(let t of Object.values(u)){let f=t.properties;if(!f?.__type?.const)continue;let l=f.__type.const,c=pA4.get(l);if(!c)continue;let E=c.map(($)=>({name:String($.name),...$.inputSchema&&{inputSchema:yw.toJSONSchema($.inputSchema)},...$.outputSchema&&{outputSchema:yw.toJSONSchema($.outputSchema)}}));f.__binding={const:E}}return i}var pA4,$K6,iG4=(i)=>{return typeof i==="object"&&i!==null&&i.__type==="@deco/agent"},K5u=(i)=>{return typeof i==="object"&&i!==null&&typeof i.__type==="string"&&i.__type!=="@deco/agent"&&typeof i.value==="string"},Zxi=(i,u,t)=>{let f=t?{"x-caller-app":t}:void 0;if(u.cookie)f??={},f.cookie=u.cookie;if(u.token)f??={},f["x-mesh-token"]=u.token;return{type:"HTTP",url:new URL(`/mcp/${i}`,u.meshUrl).href,token:u.token,headers:f}},uG4=(i,u,t)=>{let f=Zxi(i,u,t);return new Proxy(Wz.forConnection(f),{get(l,c){if(c==="value")return i;if(c==="__type")return t;return l[c]}})},tG4=(i,u)=>{let t=u.organizationSlug;if(!t)throw Error("organizationSlug is required for agent bindings");let f=`${u.meshUrl}/api/${t}/decopilot/runtime/stream`;return{STREAM:async(l,c)=>{let{streamAgent:E}=await Promise.resolve().then(() => Qit);return E(f,u.token,i,l,c)}}},X5u=(i,u)=>{if(i===null||i===void 0)return i;if(Array.isArray(i))return i.map((t)=>X5u(t,u));if(typeof i==="object"){if(iG4(i))return tG4(i,u);if(K5u(i))return uG4(i.value,u,i.__type);let t={};for(let[f,l]of Object.entries(i))t[f]=X5u(l,u);return t}return i},bit=(i)=>{return X5u(i.state,i)};var lb=N(()=>{Oxi();pA4=new Map;$K6=yw.object({id:yw.string(),title:yw.string(),capabilities:yw.object({vision:yw.boolean().optional(),text:yw.boolean().optional(),tools:yw.boolean().optional(),reasoning:yw.boolean().optional()}).passthrough().optional(),provider:yw.string().optional().nullable(),limits:yw.object({contextWindow:yw.number().optional(),maxOutputTokens:yw.number().optional()}).passthrough().optional()})});var fG4,Rit=(i,u,t)=>{if(!u)return null;if(i===void 0||i==="*")return"*";if(typeof i==="string")return i===u?i:null;if(Array.isArray(i))return i.includes(u)?u:null;if(typeof i==="function")return i(u,t)??null;return null},lG4=(i,u,t)=>{let f=u.headers.get("Origin"),l=Rit(t.origin,f,u);if(l)i.set("Access-Control-Allow-Origin",l);if(t.credentials)i.set("Access-Control-Allow-Credentials","true");if(t.exposeHeaders?.length)i.set("Access-Control-Expose-Headers",t.exposeHeaders.join(", "))},Cit=(i,u)=>{let t=new Headers,f=i.headers.get("Origin"),l=Rit(u.origin,f,i);if(l)t.set("Access-Control-Allow-Origin",l);if(u.credentials)t.set("Access-Control-Allow-Credentials","true");let c=u.allowMethods??fG4;t.set("Access-Control-Allow-Methods",c.join(", "));let E=i.headers.get("Access-Control-Request-Headers");if(u.allowHeaders?.length)t.set("Access-Control-Allow-Headers",u.allowHeaders.join(", "));else if(E)t.set("Access-Control-Allow-Headers",E);if(u.maxAge!==void 0)t.set("Access-Control-Max-Age",u.maxAge.toString());return new Response(null,{status:204,headers:t})},Mit=(i,u,t)=>{let f=new Headers(i.headers);return lG4(f,u,t),new Response(i.body,{status:i.status,statusText:i.statusText,headers:f})};var qit=N(()=>{fG4=["GET","HEAD","PUT","POST","DELETE","PATCH"]});function Vit(i=32){let t=new Uint8Array(i);return crypto.getRandomValues(t),Array.from(t,(f)=>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[f%62]).join("")}function cG4(i){try{let u=new URL(i);return u.protocol==="https:"||u.hostname==="localhost"||u.hostname.endsWith(".localhost")||u.hostname==="127.0.0.1"||!u.protocol.startsWith("http")}catch{return!1}}function rit(i){return btoa(JSON.stringify(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function mit(i){try{let u=i.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(u))}catch{return null}}function eit(i){return{handleProtectedResourceMetadata:(d)=>{let _=Gh(new URL(d.url)),v=`${_.origin}/mcp`;return Response.json({resource:v,authorization_servers:[_.origin],scopes_supported:["*"],bearer_methods_supported:["header"],resource_signing_alg_values_supported:["RS256","none"]})},handleAuthorizationServerMetadata:(d)=>{let v=Gh(new URL(d.url)).origin;return Response.json({issuer:v,authorization_endpoint:`${v}/authorize`,token_endpoint:`${v}/token`,registration_endpoint:`${v}/register`,scopes_supported:["*"],response_types_supported:["code"],response_modes_supported:["query"],grant_types_supported:["authorization_code","refresh_token"],token_endpoint_auth_methods_supported:["none","client_secret_post"],code_challenge_methods_supported:["S256","plain"]})},handleAuthorize:(d)=>{let _=Gh(new URL(d.url)),v=_.searchParams.get("redirect_uri"),h=_.searchParams.get("response_type"),D=_.searchParams.get("state"),g=_.searchParams.get("code_challenge"),O=_.searchParams.get("code_challenge_method");if(!v)return Response.json({error:"invalid_request",error_description:"redirect_uri required"},{status:400});if(h!=="code")return Response.json({error:"unsupported_response_type",error_description:"Only 'code' is supported"},{status:400});let Z=Gh(new URL(`${_.origin}/oauth/callback`)),B=Z.toString(),y=rit({redirectUri:v,clientState:D??void 0,codeChallenge:g??void 0,codeChallengeMethod:O??void 0,oauthCallbackUri:B});Z.searchParams.set("state",y);let T=i.authorizationUrl(Z.toString());return Response.redirect(T,302)},handleOAuthCallback:async(d)=>{let _=Gh(new URL(d.url)),v=_.searchParams.get("code"),h=_.searchParams.get("state"),D=_.searchParams.get("error"),g=h?mit(h):null;if(D){let O=_.searchParams.get("error_description")??"Authorization failed";if(g?.redirectUri){let Z=Gh(new URL(g.redirectUri));if(Z.searchParams.set("error",D),Z.searchParams.set("error_description",O),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}return Response.json({error:D,error_description:O},{status:400})}if(!v||!g)return Response.json({error:"invalid_request",error_description:"Missing code or state"},{status:400});try{let O=g.oauthCallbackUri??Gh(new URL(`${_.origin}/oauth/callback`)).toString(),Z={code:v,redirect_uri:O},B=await i.exchangeCode(Z),F={accessToken:B.access_token,tokenType:B.token_type,refreshToken:B.refresh_token,expiresIn:B.expires_in,scope:B.scope,codeChallenge:g.codeChallenge,codeChallengeMethod:g.codeChallengeMethod},y=rit(F),T=Gh(new URL(g.redirectUri));if(T.searchParams.set("code",y),g.clientState)T.searchParams.set("state",g.clientState);return Response.redirect(T.toString(),302)}catch(O){console.error("OAuth callback error:",O);let Z=Gh(new URL(g.redirectUri));if(Z.searchParams.set("error","server_error"),Z.searchParams.set("error_description","Failed to exchange authorization code"),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}},handleToken:async(d)=>{try{let _=d.headers.get("content-type")??"",v;if(_.includes("application/x-www-form-urlencoded")){let F=await d.formData();v=Object.fromEntries(F.entries())}else{let F=await d.json();if(typeof F!=="object"||F===null||Array.isArray(F))return Response.json({error:"invalid_request",error_description:"Request body must be a JSON object"},{status:400});v=F}let{code:h,code_verifier:D,grant_type:g,refresh_token:O}=v;if(g==="refresh_token"){if(typeof O!=="string"||!O)return Response.json({error:"invalid_request",error_description:"refresh_token is required and must be a string"},{status:400});if(!i.refreshToken)return Response.json({error:"unsupported_grant_type",error_description:"refresh_token grant not supported"},{status:400});let F;try{F=await i.refreshToken(O)}catch(T){if(T instanceof J5u)return Response.json({error:T.error,...T.errorDescription?{error_description:T.errorDescription}:{}},{status:400});throw T}let y={access_token:F.access_token,token_type:F.token_type};if(F.refresh_token)y.refresh_token=F.refresh_token;if(F.expires_in!==void 0)y.expires_in=F.expires_in;if(F.scope)y.scope=F.scope;return Response.json(y,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}if(g!=="authorization_code")return Response.json({error:"unsupported_grant_type",error_description:"Only authorization_code and refresh_token supported"},{status:400});if(typeof h!=="string"||!h)return Response.json({error:"invalid_request",error_description:"code is required and must be a string"},{status:400});let Z=mit(h);if(!Z||!Z.accessToken)return Response.json({error:"invalid_grant",error_description:"Invalid or expired code"},{status:400});if(Z.codeChallenge){if(typeof D!=="string"||!D)return Response.json({error:"invalid_grant",error_description:"code_verifier required and must be a string"},{status:400});let F;if(Z.codeChallengeMethod==="S256"){let T=new TextEncoder().encode(D),U=await crypto.subtle.digest("SHA-256",T);F=btoa(String.fromCharCode(...new Uint8Array(U))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}else F=D;if(F!==Z.codeChallenge)return Response.json({error:"invalid_grant",error_description:"Invalid code_verifier"},{status:400})}let B={access_token:Z.accessToken,token_type:Z.tokenType};if(Z.refreshToken)B.refresh_token=Z.refreshToken;if(Z.expiresIn!==void 0)B.expires_in=Z.expiresIn;if(Z.scope)B.scope=Z.scope;return Response.json(B,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Token exchange error:",_),Response.json({error:"server_error",error_description:"Failed to process token request"},{status:500})}},handleClientRegistration:async(d)=>{try{let _=await d.json();if(!_.redirect_uris||_.redirect_uris.length===0)return Response.json({error:"invalid_redirect_uri",error_description:"At least one redirect_uri is required"},{status:400});for(let O of _.redirect_uris)if(!cG4(O))return Response.json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${O}`},{status:400});let v=Vit(32),h=_.token_endpoint_auth_method!=="none"?Vit(32):void 0,D=Math.floor(Date.now()/1000),g={client_id:v,client_secret:h,client_name:_.client_name,redirect_uris:_.redirect_uris,grant_types:_.grant_types??["authorization_code"],response_types:_.response_types??["code"],token_endpoint_auth_method:_.token_endpoint_auth_method??"client_secret_post",scope:_.scope,client_id_issued_at:D,client_secret_expires_at:0};if(i.persistence)await i.persistence.saveClient(g);return new Response(JSON.stringify(g),{status:201,headers:{"Content-Type":"application/json","Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Client registration error:",_),Response.json({error:"invalid_client_metadata",error_description:"Invalid client registration request"},{status:400})}},createUnauthorizedResponse:(d)=>{let h=`Bearer resource_metadata="${`${Gh(new URL(d.url)).origin}/.well-known/oauth-protected-resource`}", scope="*"`;return Response.json({jsonrpc:"2.0",error:{code:-32000,message:"Unauthorized: Authentication required"},id:null},{status:401,headers:{"WWW-Authenticate":h,"Access-Control-Expose-Headers":"WWW-Authenticate"}})},hasAuth:(d)=>d.headers.has("Authorization")}}var J5u,Gh=(i)=>{if(!(i.hostname==="localhost"||i.hostname.endsWith(".localhost")||i.hostname==="127.0.0.1"))i.protocol="https:";return i};var S5u=N(()=>{J5u=class J5u extends Error{error;errorDescription;constructor(i="invalid_grant",u){super(u??i);this.name="OAuthInvalidGrantError",this.error=i,this.errorDescription=u}}});import{AsyncLocalStorage as EG4}from"async_hooks";var ait,Ls;var Y5u=N(()=>{ait=new EG4,Ls={getStore:()=>{return ait.getStore()},run:(i,u,...t)=>ait.run(i,u,...t)}});var sit="SELF",Fxi=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},pit=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},oit="::",iut=(i)=>{let u=i.indexOf(oit);if(u===-1)return null;let t=i.substring(0,u),f=i.substring(u+oit.length);return[t,f]},$G4=(i)=>{if(!i.startsWith("cron/"))return null;let u=i.substring(5),t=u.indexOf("/");if(t===-1)return null;let f=u.substring(0,t),l=u.substring(t+1);return[f,l]},uut=(i)=>{if(Fxi(i))return[];return Object.keys(i)},wG4=(i,u)=>{if(Fxi(i))return i.events;let t=i[u];if(!t)return[];if(pit(t))return t.events;return Object.keys(t)},Bxi=(i,u,t)=>{if(i===sit){if(!t)return console.warn("[Event] SELF binding used but no connectionId available"),null;return t}let f=u[i];if(!K5u(f))return console.warn(`[Event] Binding "${i}" not found in state`),null;return f.value},dG4=(i,u,t)=>{let f=u;if(Fxi(i)){let c=[];for(let E of i.events){let $=iut(E);if(!$){console.warn(`[Event] Global handler event "${E}" must be prefixed with BINDING:: (e.g., "SELF::${E}" or "DATABASE::${E}")`);continue}let[w,d]=$,_=Bxi(w,f,t);if(!_)continue;c.push({eventType:d,publisher:_})}return c}let l=[];for(let c of uut(i)){let E=Bxi(c,f,t);if(!E)continue;let $=wG4(i,c);for(let w of $)l.push({eventType:w,publisher:E})}return l},_G4=(i)=>{let u=new Map;for(let t of i){let f=t.source,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},vG4=(i)=>{let u=new Map;for(let t of i){let f=t.type,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},hG4=(i)=>{let u={},t={},f=!1,l=0,c=[];for(let E of i){if(E.results)Object.assign(t,E.results);if(E.success===!1){if(f=!0,E.error)c.push(E.error)}if(E.processedCount!==void 0)l+=E.processedCount}if(Object.keys(t).length>0)u.results=t;if(u.success=!f,c.length>0)u.error=c.join("; ");if(l>0)u.processedCount=l;return u},DG4=async(i,u,t,f,l)=>{let c=f;if(Fxi(i)){let _=new Set;for(let h of i.events){let D=iut(h);if(!D)continue;let[g,O]=D,Z=Bxi(g,c,l);if(!Z)continue;_.add(`${Z}:${O}`)}let v=u.filter((h)=>{let D=`${h.source}:${h.type}`;return _.has(D)});if(v.length===0)return{success:!0};try{return await i.handler({events:v},t)}catch(h){return{success:!1,error:h instanceof Error?h.message:String(h)}}}let E=new Map;for(let _ of uut(i)){let v=Bxi(_,c,l);if(v)E.set(v,_)}let $=_G4(u),w=[];for(let[_,v]of $){let h=E.get(_);if(!h)continue;let D=i[h];if(!D)continue;if(pit(D)){w.push((async()=>{try{return await D.handler({events:v},t)}catch(Z){let B={};for(let F of v)B[F.id]={success:!1,error:Z instanceof Error?Z.message:String(Z)};return{results:B}}})());continue}let g=D,O=vG4(v);for(let[Z,B]of O){let F=g[Z];if(!F)continue;w.push((async()=>{try{let y=await F({events:B},t),T={};for(let U of B)T[U.id]=y;return{results:T}}catch(y){let T={};for(let U of B)T[U.id]={success:!1,error:y instanceof Error?y.message:String(y)};return{results:T}}})())}}let d=await Promise.all(w);if(d.length===0)return{success:!0};return hG4(d)},tut;var W5u=N(()=>{lb();tut={subscriptions:dG4,execute:DG4,parseCron:$G4}});function gG4(i,u){let t=Zxi("self",{meshUrl:i,token:u});return Wz.forConnection(t)}function NG4(i,u){switch(u.type){case"cron":return{automation_id:i,type:"cron",cron_expression:u.cron};case"event":return{automation_id:i,type:"event",connection_id:u.connectionId,event_type:u.eventType,params:u.params};case"webhook":return{automation_id:i,type:"webhook"}}}function fut(i,u,t){return async(f)=>{if(!i)throw Error("createAgent: missing meshUrl in MESH_REQUEST_CONTEXT");let l=gG4(i,u),E=(await l.COLLECTION_VIRTUAL_MCP_LIST({where:{operator:"and",conditions:[{field:["title"],operator:"eq",value:f.name}]},limit:1})).items.find((_)=>_.title===f.name);if(E)return{id:E.id,automations:[],automationIds:[],alreadyExisted:!0};let $=f.tools&&f.tools.length>0?f.tools.map((_)=>({connection_id:_.connectionId,selected_tools:_.tools??null,selected_resources:null,selected_prompts:null})):t?[{connection_id:t,selected_tools:null,selected_resources:null,selected_prompts:null}]:[],{item:w}=await l.COLLECTION_VIRTUAL_MCP_CREATE({data:{title:f.name,description:f.description,metadata:f.instructions?{instructions:f.instructions}:void 0,connections:$}}),d=[];for(let _ of f.automations??[]){let v=await l.AUTOMATION_CREATE({name:_.name,virtual_mcp_id:w.id,messages:_.messages,models:_.models,tools:_.tools,active:_.active??!0}),h=[];for(let D of _.triggers??[])try{let g=await l.AUTOMATION_TRIGGER_ADD(NG4(v.id,D));h.push({type:D.type,ok:!0,id:g.id,webhook:g.webhook??void 0})}catch(g){h.push({type:D.type,ok:!1,error:g instanceof Error?g.message:String(g)})}d.push({id:v.id,name:_.name,triggers:h})}return{id:w.id,automations:d,automationIds:d.map((_)=>_.id),alreadyExisted:!1}}}var L5u=N(()=>{lb();Oxi()});import{z as G6}from"zod";function r8(i){return{...i,execute:(u)=>{let t=zs(u.runtimeContext);return i.execute({...u,runtimeContext:t},t)}}}var zs=(i)=>{let u=Ls.getStore();if(!u){if(i)return i;throw Error("Missing context, did you forget to call State.bind?")}return u},lut=(i)=>{let u=i.runtimeContext.env.MESH_REQUEST_CONTEXT;return{connectionId:u?.connectionId,meshUrl:u?.meshUrl,token:u?.token}},OG4=({events:i,configuration:{state:u,scopes:t,onChange:f,onInstall:l}={}}={})=>{let c=u?Hit(G6.toJSONSchema(u)):{type:"object",properties:{}};return[...f||l||i?[r8({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:G6.object({state:u??G6.unknown(),scopes:G6.array(G6.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')"),firstRun:G6.boolean().optional().describe("True on the first configuration save for this connection \u2014 fires onInstall."),vault:G6.object({baseUrl:G6.string(),org:G6.string(),subjectConnectionId:G6.string(),token:G6.string()}).optional()}),outputSchema:G6.object({}),execute:async(E)=>{let $=E.context.state,w=E.context.vault;if(await f?.(E.runtimeContext.env,{state:$,scopes:E.context.scopes,vault:w}),l&&E.context.firstRun){let{meshUrl:d,token:_,connectionId:v}=lut(E);await l(E.runtimeContext.env,{createAgent:fut(d,_,v),vault:w})}return Promise.resolve({})}})]:[],...i?.handlers?[r8({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:y3i,outputSchema:T3i,execute:async(E)=>{let $=E.runtimeContext.env,w=$.MESH_REQUEST_CONTEXT?.state,{connectionId:d}=lut(E);return tut.execute(i.handlers,E.context.events,$,w,d)}})]:[],r8({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:G6.object({}),outputSchema:G6.object({stateSchema:G6.unknown(),scopes:G6.array(G6.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:c,scopes:[...t??[]]})}})]},cut=(i)=>{let u=null,t=null,f=null,l=!1,c=()=>{if(!l)console.warn("[runtime] Passing factory functions to tools/prompts/resources is deprecated. Pass createTool()/createPrompt()/createResource() instances directly."),l=!0},E=(D)=>typeof D==="object"&&D!==null&&(("id"in D)||("name"in D)||("uri"in D));async function $(D,g){if(!D)return[];return(await Promise.all(D.flatMap(async(O)=>{if(E(O))return[O];c();let Z=await O(g);if(Array.isArray(Z))return Z;return[Z]}))).flat()}let w=async(D)=>{if(u)return u;if(t)return t;return t=(async()=>{try{let g;if(typeof i.tools==="function")c(),g=await i.tools(D);else g=await $(i.tools,D);g.push(...OG4({...i}));let O;if(typeof i.prompts==="function")c(),O=await i.prompts(D);else O=await $(i.prompts,D);let Z;if(typeof i.resources==="function")c(),Z=await i.resources(D);else Z=await $(i.resources,D);let B={tools:g,prompts:O,resources:Z};return u=B,B}catch(g){throw t=null,g}})(),t},d=(D,g)=>{for(let O of g.tools)D.registerTool(O.id,{_meta:O._meta,title:O.title,description:O.description,annotations:O.annotations,inputSchema:O.inputSchema&&"shape"in O.inputSchema?O.inputSchema:G6.object({}),outputSchema:O.outputSchema&&typeof O.outputSchema==="object"&&"shape"in O.outputSchema?O.outputSchema:void 0},async(Z)=>{let B=zs(),F=await O.execute({context:Z,runtimeContext:B},B);if(F!=null&&typeof F==="object"&&"content"in F&&Array.isArray(F.content)&&F.content.every((y)=>y!=null&&typeof y==="object"&&("type"in y)&&typeof y.type==="string"))return F;return{structuredContent:F,content:[{type:"text",text:JSON.stringify(F)}]}});for(let O of g.prompts)D.registerPrompt(O.name,{title:O.title,description:O.description,argsSchema:O.argsSchema?O.argsSchema:G6.object({}).shape},async(Z)=>{let B=zs();return await O.execute({args:Z,runtimeContext:B},B)});for(let O of g.resources)D.resource(O.name,O.uri,{description:O.description,mimeType:O.mimeType},async(Z)=>{let B=zs(),F=await O.read({uri:Z,runtimeContext:B},B),y=F._meta??void 0;if(F.text!==void 0)return{contents:[{uri:F.uri,mimeType:F.mimeType,text:F.text,...y!==void 0?{_meta:y}:{}}]};else if(F.blob!==void 0)return{contents:[{uri:F.uri,mimeType:F.mimeType,blob:F.blob,...y!==void 0?{_meta:y}:{}}]};return{contents:[{uri:F.uri,mimeType:F.mimeType,text:""}]}})},_=async(D)=>{await i.before?.(D);let{instructions:g,...O}=i.serverInfo??{},Z=new nD({...O,name:O.name??"@deco/mcp-api",version:O.version??"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:k1,...g&&{instructions:g}}),B=await w(D);d(Z,B);let F="tools/list",y=Z.server._requestHandlers,T=y.get(F);if(T)y.set(F,async(U,I)=>{if(!f)f=await T(U,I);return f});return{server:Z,...B}};return{fetch:async(D,g)=>{let{server:O}=await _(g),Z=new g3;await O.connect(Z);let B=()=>{try{Z.close?.()}catch{}try{O.close?.()}catch{}};try{let F=await Z.handleRequest(D),y=F.headers.get("content-type");if(!(y?.includes("text/event-stream")||y?.includes("application/json-rpc"))||!F.body)return B(),F;let{readable:U,writable:I}=new TransformStream;return F.body.pipeTo(I).catch(()=>{}).finally(B),new Response(U,{status:F.status,statusText:F.statusText,headers:F.headers})}catch(F){throw B(),F}},callTool:async({toolCallId:D,toolCallInput:g})=>{let O=Ls.getStore();if(!O)throw Error("Missing state, did you forget to call State.bind?");let Z=O?.env,{tools:B}=await w(Z),y=B.find((U)=>U.id===D)?.execute;if(!y)throw Error(`Tool ${D} not found or does not have an execute function`);let T=zs();return y({context:g,runtimeContext:T},T)}}};var yxi=N(()=>{oiu();mE();Gq();kQ();lb();W5u();Y5u();L5u();W5u();L5u()});import{decodeJwt as Eut}from"jose";var ZG4=({env:i,server:u,url:t})=>{i.SELF=new Proxy({},{get:(f,l)=>{if(l==="toJSON")return null;return async(c)=>{return await u.callTool({toolCallId:l,toolCallInput:c})}}}),i.IS_LOCAL=(t?.startsWith("http://localhost")||t?.startsWith("http://127.0.0.1"))??!1},$ut=(i)=>()=>{return{...i??{}}},BG4=({env:i,server:u,tokenOrContext:t,url:f,authToken:l})=>{let c=i,E=l?l.split(" ")[1]:void 0,$;if(typeof t==="string"){let w=Eut(t),d=w.metadata??{};$={authorization:E,state:w.state??d.state??{},token:t,meshUrl:w.meshUrl??d.meshUrl,connectionId:w.connectionId??d.connectionId,organizationId:w.organizationId??d.organizationId,organizationName:w.organizationName??d.organizationName,organizationSlug:w.organizationSlug??d.organizationSlug,ensureAuthenticated:$ut(w.user??w.sub)}}else if(typeof t==="object"){$=t;let w=Eut(t.token),d=w.metadata??{},_=w.appName;$.authorization??=E,$.callerApp=_,$.connectionId??=w.connectionId??d.connectionId,$.organizationId??=w.organizationId??d.organizationId,$.organizationName??=w.organizationName??d.organizationName,$.organizationSlug??=w.organizationSlug??d.organizationSlug,$.ensureAuthenticated=$ut(w.user??w.sub)}else $={state:{},authorization:E,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return c.MESH_REQUEST_CONTEXT=$,$.state=bit($),ZG4({env:c,server:u,url:f}),c},FG4,wut=(i)=>{let u=cut(i),t=i.cors??FG4,f=i.oauth,l=f?eit(f):null,c=async(E,$,w)=>{let d=new URL(E.url);if(l){if(d.pathname==="/.well-known/oauth-protected-resource"||d.pathname==="/mcp/.well-known/oauth-protected-resource")return l.handleProtectedResourceMetadata(E);if(d.pathname==="/.well-known/oauth-authorization-server")return l.handleAuthorizationServerMetadata(E);if(d.pathname==="/authorize")return l.handleAuthorize(E);if(d.pathname==="/oauth/callback")return l.handleOAuthCallback(E);if(d.pathname==="/token"&&E.method==="POST")return l.handleToken(E);if((d.pathname==="/register"||d.pathname==="/mcp/register")&&E.method==="POST")return l.handleClientRegistration(E)}if(d.pathname==="/mcp"){if(E.method==="GET")return new Response("Method not allowed",{status:405});if(l&&!l.hasAuth(E)){let _=E.clone();try{if((await _.json())?.method!=="tools/list")return l.createUnauthorizedResponse(E)}catch{return l.createUnauthorizedResponse(E)}}return u.fetch(E,$,w)}if(d.pathname.startsWith("/mcp/call-tool")){let _=d.pathname.split("/").pop();if(!_)return new Response("Not found",{status:404});let v=await E.json(),h=await u.callTool({toolCallId:_,toolCallInput:v});return new Response(JSON.stringify(h),{headers:{"Content-Type":"application/json"}})}return i.fetch?.(E,$,w)||new Response("Not found",{status:404})};return{fetch:async(E,$,w)=>{if(new URL(E.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(t!==!1&&E.method==="OPTIONS")return Cit(E,t??{});let d=BG4({authToken:E.headers.get("authorization")??null,env:{...process.env,...$},server:u,tokenOrContext:E.headers.get("x-mesh-token")??void 0,url:E.url}),_=await Ls.run({req:E,env:d,ctx:w},async()=>await c(E,d,w));if(t!==!1)return Mit(_,E,t??{});return _}}};var dut=N(()=>{lb();qit();S5u();S5u();Y5u();yxi();yxi();lb();Oxi();FG4={origin:(i)=>{if(i.includes("localhost")||i.includes("127.0.0.1"))return i;return i},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});import{z as z5u}from"zod";function UG4(i,u){let t=r8({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:yH,outputSchema:TH,execute:async({context:$})=>{let w={limit:$.limit,offset:$.offset,cursor:$.cursor,tags:$.tags,categories:$.categories,where:$.where},d=`${u}:${JSON.stringify(w)}`,_=_ut.get(d);if(_)return _;let v=await i.listPublic(u,w);return _ut.set(d,v),v}}),f=r8({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Bh,outputSchema:rK,execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{item:null};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{item:d};return{item:null}}}),l=r8({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Bh,outputSchema:z5u.object({versions:z5u.array(rK.shape.item)}),execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{versions:[]};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{versions:[d]};return{versions:[]}}}),c=r8({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:QUi,outputSchema:HUi,execute:async({context:$})=>{return await i.search(u,$,{publicOnly:!0})}}),E=r8({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:z5u.object({}),outputSchema:UH,execute:async()=>{return await i.getFilters(u,{publicOnly:!0})}});return[t,c,f,l,E]}function vut(i){let u=i.db,t=new LL(u);return async(f)=>{let l=f.req.param("orgSlug")??f.req.param("org");if(!l)return f.json({error:"Organization not found"},404);let c=await u.selectFrom("organization").select(["id","slug","name"]).where("slug","=",l).executeTakeFirst();if(!c)return f.json({error:"Organization not found"},404);let E=UG4(t,c.id),$=wut({tools:E}),w=new URL(f.req.url),d=f.req.path.indexOf("/registry"),_=d>=0?f.req.path.slice(d+9):"",v=new URL(_||"/",w.origin);w.searchParams.forEach((g,O)=>{v.searchParams.set(O,g)});let h=new Request(v.toString(),{method:f.req.method,headers:f.req.raw.headers,body:f.req.method!=="GET"&&f.req.method!=="HEAD"?f.req.raw.body:void 0}),D={organizationId:c.id,db:u,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await $.fetch(h,D,f)}}var yG4=3600000,TG4=500,_ut;var hut=N(()=>{dut();yxi();ioi();Ol();_ut=tb({ttlMs:yG4,maxSize:TG4,updateRecencyOnGet:!0})});import{sql as PG4}from"kysely";import{randomUUID as Dut}from"crypto";import{z as xG4}from"zod";async function AG4(i){let u=new Date().toISOString(),t=Dut(),f=U4.SELF(i.organizationId),l="registry.publish_request.created",c={requestId:i.request.id,requestedId:i.request.requested_id,title:i.request.title,status:i.request.status,createdAt:i.request.created_at,requester:{name:i.request.requester_name,email:i.request.requester_email}};await i.db.insertInto("events").values({id:t,organization_id:i.organizationId,type:"registry.publish_request.created",source:f,specversion:"1.0",subject:i.request.id,time:u,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(c),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:u,updated_at:u}).execute();let E=await i.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",i.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where(($)=>$.or([$("publisher","is",null),$("publisher","=",f)])).execute();if(E.length>0)await i.db.insertInto("event_deliveries").values(E.map(($)=>({id:Dut(),event_id:t,subscription_id:$.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:u}))).execute();try{await PG4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function GG4(i,u){let f=(await i.selectFrom("organization").select(["id"]).where("id","=",u).execute())[0];if(f?.id)return f.id;return(await i.selectFrom("organization").select(["id"]).where("slug","=",u).execute())[0]?.id??null}async function nG4(i,u){let t=await i.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",mK).execute();for(let f of t){let l=f.settings,c=typeof l==="string"?(()=>{try{return JSON.parse(l)}catch{return{}}})():l??{};if(c.acceptPublishRequests===!0){let E=c.rateLimitWindow==="minute"?"minute":"hour",$=c.rateLimitMax,w=typeof $==="number"&&Number.isFinite($)&&$>=1?Math.floor($):Nut;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?gut:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:gut,rateLimitWindow:IG4,rateLimitMax:Nut}}async function kG4(i,u,t){let f=t==="minute"?60000:3600000,l=new Date(Date.now()-f).toISOString(),c=await i.selectFrom("private_registry_publish_request").select((E)=>E.fn.countAll().as("count")).where("organization_id","=",u).where("created_at",">=",l).executeTakeFirst();return Number(c?.count??0)}async function jG4(i,u,t,f){let l=await i.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",u).where((c)=>c.or([c("id","=",t),c("title","=",f)])).executeTakeFirst();return l?{id:String(l.id),title:String(l.title)}:null}function Out(i){let{db:u,db:t}=i,f=new zL(t),l=new QL(t);return async(c)=>{let E=c.req.param("orgRef")??c.req.param("org");if(!E)return c.json({error:"Organization not found"},404);let $=await GG4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await nG4(u,$);if(!w.acceptPublishRequests)return c.json({error:"Publish requests are not enabled for this registry."},403);if(w.requireApiToken){let D=c.req.header("Authorization"),g=D?.startsWith("Bearer ")?D.slice(7).trim():null;if(!g)return c.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await l.validate($,g))return c.json({error:"Invalid API key"},401)}if(w.rateLimitEnabled){if(await kG4(t,$,w.rateLimitWindow)>=w.rateLimitMax)return c.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:w.rateLimitWindow==="minute"?60:3600},429)}let d;try{d=await c.req.json()}catch{return c.json({error:"Invalid JSON body"},400)}let _=zC0.safeParse(d);if(!_.success)return c.json({error:"Invalid publish request payload",details:xG4.treeifyError(_.error)},400);let v=await jG4(t,$,_.data.data.id,_.data.data.title);if(v)return c.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:v},409);let h=await f.createOrUpdate({organization_id:$,requested_id:_.data.data.id,title:_.data.data.title,description:_.data.data.description??null,_meta:_.data.data._meta,server:_.data.data.server,requester_name:_.data.requester?.name??null,requester_email:_.data.requester?.email??null});try{await AG4({db:u,organizationId:$,request:h})}catch(D){console.warn("[private-registry] failed to emit publish-request event:",D)}return ou.capture({distinctId:_.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:h.id,requested_id:h.requested_id,title:_.data.data.title,requester_email:_.data.requester?.email??null}}),c.json({id:h.id,requested_id:h.requested_id,status:h.status},201)}}var gut=!0,IG4="hour",Nut=100;var Zut=N(()=>{e4();wf();PH();uoi();toi();Ol()});var But={};Qi(But,{createPublishRequestHandler:()=>Out,createPublicMCPHandler:()=>vut});var Fut=N(()=>{hut();Zut()});var _1u={};Qi(_1u,{watchHandler:()=>xut,getProxyDispatch:()=>SG4,createApp:()=>RG4});import{readFileSync as XG4}from"fs";import{PrometheusSerializer as KG4}from"@opentelemetry/exporter-prometheus";import{DBOS as Qs}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as zG4,oAuthProtectedResourceMetadata as QG4}from"better-auth/plugins";async function JG4(i){let u=i.connect(),t;try{t=await Promise.race([u,Tut(yut)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),Tut(yut)]),t.release(),!0}catch{return t.release(!0),!1}}function Tut(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function SG4(){if(!Q5u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return Q5u}async function YG4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${Et0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function WG4(i){let u=new URLSearchParams;if(i){let[t,f]=i.split("/");if(t)u.set("workspace_hint",t);if(f)u.set("project_hint",f)}else u.set("auto_personal","true");return u.set("force_new","true"),u}async function RG4(i={}){let u=i.database??qt(),t=!1;A6.stop().catch((M)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",M)});let f,l,c=new B5u,E,$,w,d,_,v=null;if(i.disableNats)E=F5u(),f={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},l=new Ra,$={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},_=void 0,w={init:async()=>{},pump:(M)=>{(async()=>{let e=M.getReader();try{while(!0){let{done:Ki}=await e.read();if(Ki)break}}catch{}finally{e.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{v=zp0();let M=yu().natsCredsPath,e;if(M)try{e=XG4(M,"utf8")}catch(zu){console.error(`[app] failed to read NATS_CREDS at ${M}; connecting anonymously`,zu)}v.init(yu().natsUrls,e?{creds:e}:void 0);let Ki=woi()?new pmi({getJetStream:()=>v.getJetStream()}):null;Ki?.init().catch(()=>{}),f=Ki;let Li=new flu({getJetStream:()=>v.getJetStream()});Li.init().catch(()=>{}),l=Li,E=F5u({getConnection:()=>v.getConnection()}),$=new y5u({getConnection:()=>v.getConnection()}),w=new T5u({getConnection:()=>v.getConnection(),getJetStream:()=>v.getJetStream()}),d=rp0({getConnection:()=>v.getConnection()}),_=op0({getConnection:()=>v.getConnection()});let oi=sp0({getConnection:()=>v.getConnection()}),iu=$;$={start:(zu)=>iu.start(zu),broadcast:(zu)=>iu.broadcast(zu),publishControlFrame:(zu,ht)=>{oi.publishControlFrame(zu,ht).catch((X4)=>{console.warn("[TunnelControl] publishControlFrame failed (non-critical):",X4)})},stop:()=>iu.stop()},dV0(v),v.onReady(()=>{Ki?.init().catch((zu)=>{console.error("[McpListCache] Deferred init failed:",zu)}),Li.init().catch((zu)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",zu)}),E.start(),z50(()=>v.getConnection()),w.init().catch((zu)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",zu)})})}if(cb)await cb();iei(f),llu(l);let D={storage:new qL(u.db),streamBuffer:w,sseHub:A6},g=new P5u(D),O=new Rr(u.db),Z=new x5u(O);Z.start(),$.start((M)=>{Udi(M),g.execute({type:"CANCEL",taskId:M}).catch((e)=>{console.error("[Decopilot] CancelBroadcast execute failed:",e)})}).catch((M)=>{console.error("[Decopilot] CancelBroadcast start failed:",M)}),v?.onReady(()=>{$.start().catch((M)=>{console.error("[CancelBroadcast] Deferred start failed:",M)})}),w.init().catch((M)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",M)}),cb=async()=>{await g.stopAll(),g.dispose(),Z.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),Q50(),l.teardown(),iei(null),llu(null)};let B=new Hu;if(B.use("*",pVi({enabled:(M)=>ZW(M,"debug")==="1"})),B.use("*",PLi),B.use("/*",qt0({origin:(M)=>{if(M.includes("localhost")||M.includes("127.0.0.1"))return M;return M},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),B.use("*",async(M,e)=>{if(await e(),M.req.path.includes("/files/"))return;if(M.req.path.includes("/fs/")&&M.req.path.endsWith("/read"))return;M.header("X-Frame-Options","DENY"),M.header("Content-Security-Policy","frame-ancestors 'none'")}),!yu().noTui)B.use("*",Fit());B.use("*",async(M,e)=>{if(await e(),OC(M.req.path))return;if(M.res.status>=500){let Li=await M.res.clone().text();console.error(`[5xx Response] ${M.req.method} ${M.req.path} - ${M.res.status}:`,Li)}}),B.get(Xw.HEALTH,(M)=>{if(t)return M.json({status:"shutting_down"},503);return M.json({status:"ok"})}),B.get(Xw.HEALTH_LIVE,(M)=>{return M.json({status:"ok"})}),B.get(Xw.HEALTH_READY,async(M)=>{if(t)return M.json({status:"shutting_down"},503);let e={};if(e.postgres={status:await JG4(u.pool)?"up":"down"},v)e.nats=v.isConnected()?{status:"up"}:{status:"down"};else e.nats={status:"down"};let Ki=e.postgres.status==="up",Li=Ki?200:503;return M.json({status:Ki?"ready":"not_ready",services:e},Li)}),B.get(Xw.METRICS,async(M)=>{try{let e=await GLi.collect(),Ki=LG4.serialize(e.resourceMetrics);return M.text(Ki,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(e){return console.error("Failed to collect metrics:",e),M.text("# Error collecting metrics",500)}}),B.route("/api/config",kp0),B.route("/api/auth/custom",jV0),B.all("/api/auth/*",async(M)=>{return await w4.handler(M.req.raw)});let F=w70();F.use("/.well-known/oauth-protected-resource/mcp/:connectionId",oK),F.use("/mcp/:connectionId/.well-known/oauth-protected-resource",oK),B.route("/",F),B.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Oe),B.route("/",h70()),B.use("/oauth-proxy/:connectionId/*",oK),B.all("/oauth-proxy/:connectionId/*",Uut);let y=async(M)=>{let Ki=await HG4()(M.req.raw),Li=await Ki.json();return Response.json(Li,Ki)};B.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",oK),B.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",y);let T=async(M)=>{let Ki=await bG4()(M.req.raw),Li=await Ki.json();return Response.json(Li,Ki)};B.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",T);let U=cV0({ttlMs:120000}),I=await m20({db:u.db,auth:w4,encryption:{key:yu().encryptionKey},observability:{tracer:W2,meter:Mt},modelListCache:c,providerKeyCache:E,memberRoleCache:U,linkStatusProbe:d,publishLinkControlFrame:(M,e)=>$.publishControlFrame(M,e)});Y9.set(I);let j=new fZ(yu().encryptionKey);peu({db:u.db,baseUrl:H_()});let A=h$i(u.db),n=new Sr(u.db),q=Oit({db:u.db});s1u({storage:A,meshContextFactory:q}),jtu({meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6},prepareLinkWorkFn:Ne0,workPublisher:_}),Itu({dispatchRunFn:De0,meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6}});let S=new qL(u.db);YF0({getJetStream:()=>v?.getJetStream()??null,getJetStreamManager:async()=>{let M=v?.getConnection();return M?await Put.jetstreamManager(M):null},messageParts:S.messageParts(),resolveRun:async(M)=>{let e=await u.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",M).executeTakeFirst();return e?{orgId:e.organization_id,createdBy:e.created_by,version:e.message_storage_version??1,status:e.status,runFenceToken:e.run_fence_token,title:e.title??null}:null},completeRunIfNotCompleted:async(M,e)=>{let Ki=await S.completeRunIfNotCompleted(M,e);return hxi(A6,e,M,Ki),Ki},markRunRequiresAction:async(M,e)=>{let Ki=await S.requiresActionIfInProgress(M,e);return hxi(A6,e,M,Ki),Ki},markRunFailed:async(M,e,Ki,Li)=>{let oi=await S.markRunFailed(M,e,Ki,Li);return hxi(A6,e,M,oi),oi},persistTitle:(M,e,Ki)=>S.update(M,e,{title:Ki}),onTitleUpdated:async({runId:M,orgId:e,title:Ki})=>{let Li=await S.get(M,e).catch(()=>null);A6.emit(e,A5(M,Li?.status??"in_progress",{title:Ki,virtualMcpId:Li?.virtual_mcp_id??void 0,createdBy:Li?.created_by,triggerId:Li?.trigger_id,branch:Li?.branch??null,createdAt:Li?.created_at,updatedAt:Li?.updated_at}))},bumpProgress:async({runId:M,orgId:e})=>{await S.bumpProgress(M,e)},recordCompleted:async({runId:M,orgId:e,distinctId:Ki,usage:Li})=>{ou.capture({distinctId:Ki,event:"chat_message_completed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",input_tokens:Li.inputTokens,output_tokens:Li.outputTokens,total_tokens:Li.totalTokens}})},recordFailed:async({runId:M,orgId:e,distinctId:Ki,reason:Li,kind:oi})=>{ou.capture({distinctId:Ki,event:"chat_message_failed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",error_category:oi,error_message:Li}})},purgeRun:async(M)=>{w.purge(M)}}),uk0({meshContextFactory:q,systemDatabaseUrl:SLi(yu().databaseUrl,yu().databasePgSsl),streamBuffer:w}),git(),iau();let Y=async(M,e,Ki)=>{let Li=await A.findById(M,e);if(!Li)throw Error("Automation not found");return ulu({automationId:Li.id,organizationId:Li.organization_id,triggerId:null})},V=new LH(A,({automation:M,trigger:e,contextMessages:Ki,idempotencyKey:Li})=>Ha({automationId:M.id,organizationId:M.organization_id,triggerId:e.id,contextMessages:Ki},{idempotencyKey:Li})),L=[ad(),mS(),wD()];for(let M of L)Nxi(M).then(()=>{}).catch((e)=>console.error("[monitoring] Retention cleanup failed:",e));let Ei=()=>u.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((M)=>console.error("[auth] Expired API key cleanup failed:",M));Ei(),setInterval(Ei,86400000).unref(),B.use("*",async(M,e)=>{if(TLi(M.req.path))return e();let Ki={measure:async(oi,iu)=>{o3(M,oi);try{return await iu()}finally{Rw(M,oi)}}},Li=await Y9.create(M.req.raw,{timings:Ki});Li.automationRunner=Y,M.set("meshContext",Li);try{await e()}finally{let oi=Li.pendingRevalidations;if(oi.length>0)Promise.race([Promise.allSettled(oi),new Promise((zu)=>setTimeout(zu,30000))]).catch((zu)=>console.error("[mesh] revalidation cleanup error:",zu))}}),B.use("/api/:org/decopilot/*",sK),B.use("/api/:org/v1/*",sK),B.use("/api/:org/files/*",sK),B.use("*",async(M,e)=>{let Ki=M.req.path;if(Ki.startsWith("/api/org-sso/")||Ki.startsWith("/api/auth/")||Ki.startsWith("/api/tools/management")||Ki.startsWith("/oauth-proxy/"))return e();let Li=M.get("meshContext");if(!Li?.organization?.id||!Li?.auth?.user?.id)return e();if(!(await Li.storage.orgSsoConfig.getByOrgId(Li.organization.id))?.enforced)return e();if(!await Li.storage.orgSsoSessions.isValid(Li.auth.user.id,Li.organization.id))return M.json({error:"SSO authentication required for this organization"},403);return e()});let $i=new Hu;$i.use("*",Yd({mountPath:"/api/org-sso"})),$i.route("/",pUi()),B.route("/api/org-sso",$i),B.get("/api/tools/management",(M)=>{return M.json({tools:uri,grouped:VO()})}),B.use("/mcp/*",async(M,e)=>{o3(M,"mcp");try{return await e()}finally{Rw(M,"mcp")}});let li=async(M,e)=>{let Ki=M.var.meshContext;if(!Ki.auth.user?.id&&!Ki.auth.apiKey?.id){let Li=new URL(M.req.url);return M.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Li.origin}${Li.pathname}/.well-known/oauth-protected-resource"`}})}return await e()};if(B.use("/mcp/:connectionId?",li),B.use("/mcp/gateway/:virtualMcpId?",li),B.use("/mcp/virtual-mcp/:virtualMcpId?",li),B.use("/mcp/self",li),G5()){let{mountDevRoutes:M}=(Wit(),nxi(Yit));M(B,li)}let ii=new Hu;ii.use("*",Yd({mountPath:"/mcp"})),ii.route("/",bFi()),B.route("/mcp",ii);let m=new Hu;m.use("*",Yd({mountPath:"/mcp/self"})),m.route("/",Exi()),B.route("/mcp/self",m);let Oi=new Hu;Oi.use("*",Yd({mountPath:"/mcp"})),Oi.route("/",MFi()),B.route("/mcp",Oi),B.use("/api/:org/models/*",async(M,e)=>{o3(M,"llm_models");try{return await e()}finally{Rw(M,"llm_models")}});let _i=j3u({cancelBroadcast:$,streamBuffer:w,runRegistry:g,linkStatusProbe:d});if(B.route("/api",_i),v!=null)Q5u=ep0({getConnection:()=>v?.getConnection()??null});B.route("/api",gp0()),B.get("/api/links/me",async(M)=>{try{let e=M.req.header("authorization")??"",Ki=/^Bearer\s+(.+)$/i.exec(e),Li=null;if(Ki){let iu=(Ki[1]??"").trim();Li=await vp0(iu,w4.api)}else Li=M.get("meshContext")?.auth?.user?.id??null;if(!Li)return M.json({error:"unauthorized"},401);let oi=d?await d(Li):{online:!1,capabilities:[]};if(!oi.online)return M.json(null);return M.json({hostname:oi.hostname,cliVersion:oi.cliVersion})}catch(e){return console.error("[links/me] presence probe failed; reporting offline:",e instanceof Error?e.message:String(e)),M.json(null)}}),B.use("/api/:org/files/*",sK),B.route("/api",Jp0);let Ii=new Hu;Ii.use("*",Yd({mountPath:"/api"})),Ii.route("/",$xi()),B.route("/api",Ii),B.route("/api",Ap0);let Vi=new Hu;Vi.use("*",Yd({mountPath:"/api"})),Vi.route("/",wxi({tokenStorage:n,automationEventDispatcher:V})),B.route("/api",Vi);let Wi=new Wr(u.db),ri=new Hu;ri.use("*",Yd({mountPath:"/api"})),ri.route("/",GPi()),B.route("/api",ri),B.route("/api/deco-sites",Je0()),B.route("/api/deco-apps",yp0());let gi=new Hu;gi.use("*",Yd({mountPath:"/api/deco-sites"})),gi.route("/",kPi()),B.route("/api/deco-sites",gi);let Xi=new Hu;Xi.use("*",Yd({mountPath:"/api/vm-events"})),Xi.route("/",Bp0()),B.route("/api/vm-events",Xi);let{createPublishRequestHandler:Gi,createPublicMCPHandler:Di}=await Promise.resolve().then(() => (Fut(),But)),wi={db:u.db,vault:{encrypt:(M)=>j.encrypt(M),decrypt:(M)=>j.decrypt(M)}},fi=Gi(wi),ji=Di(wi);B.use("/org/:orgRef/registry/publish-request",oK),B.post("/org/:orgRef/registry/publish-request",fi),B.use("/org/:orgSlug/registry/*",oK),B.all("/org/:orgSlug/registry/*",ji),B.post("/api/:org/registry/publish-request",fi),B.all("/api/:org/registry/*",ji);let a=dp0({kvStorage:Wi,runRegistry:g,streamBuffer:w,sseHub:A6,cancelBroadcast:$,tokenStorage:n,automationEventDispatcher:V,mountDevAssets:G5(),mcpAuth:li,oauthProxyHandler:Uut,watchHandler:xut,betterAuthProtectedResourceHandler:y,getNatsConnection:()=>v?.getConnection()??null});return B.route("/api/:org",a),B.notFound((M)=>{return M.json({error:"Not Found",path:M.req.path},404)}),B.onError(ye0),Object.assign(B,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([A6.stop(),cb?Promise.resolve(cb()).finally(()=>{cb=null}):Promise.resolve()]),v)await v.drain().catch((M)=>console.error("[shutdown] NATS drain error:",M));console.log("[shutdown] Flushing telemetry..."),await H3().catch((M)=>console.error("[shutdown] Telemetry flush error:",M)),console.log("[shutdown] Closing database..."),await Q2(u).catch((M)=>console.error("[shutdown] Database close error:",M)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await Qs.registerQueue(h5,{partitionQueue:!0,concurrency:e1u,minPollingIntervalMs:a1u}),await Qs.registerQueue(s_,{partitionQueue:!0,concurrency:ktu}),await Qs.registerQueue(f7,{partitionQueue:!0,concurrency:xtu}),await Qs.registerQueue(IO,{partitionQueue:!0,concurrency:ik0}),await S3u(A),await Promise.allSettled(["automations-gate","automations-global"].map((M)=>Qs.deleteQueue(M))),await o1u(u.pool),kc0().catch((M)=>{console.error("[studio-pack-backfill] failed:",M)}),uau().catch((M)=>{console.error("[org-fs] public-sets boot sync kick failed:",M)})}})}var Put,yut=5000,Q5u=null,cb=null,Uut=async(i)=>{let u=i.req.param("connectionId");if(!u)return i.json({error:"Missing connectionId"},400);let t=i.req.path.split("/").filter(Boolean),f=t[t.length-1],l=i.get("meshContext");if(!l)l=await Y9.create(i.req.raw),i.set("meshContext",l);let c=i.req.param("org")?l.organization?.id:void 0,E=await l.storage.connections.findById(u,c);if(!E?.connection_url)return i.json({error:"Connection not found"},404);let $=await nz(E.connection_url),w,d=new URL(E.connection_url);if($.ok)w=(await $.json()).authorization_servers?.[0];if(!w)w=d.origin;let _=await Ze(w);if(!_.ok)return i.json({error:"Failed to get auth server metadata"},502);let v=await _.json(),h;if(f==="authorize")h=v.authorization_endpoint;else if(f==="token")h=v.token_endpoint;else if(f==="register")h=v.registration_endpoint;if(!h)return i.json({error:`Unknown OAuth endpoint: ${f}`},404);let D=new URL(h),g=new URL(i.req.url);if(D.search=g.search,f==="authorize"){let A=D.searchParams.get("redirect_uri");if(A){let n=yu().baseUrl??g.origin;try{let q=new URL(A),S=new URL(n);if(!(q.origin===S.origin||q.hostname==="localhost"))return i.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return i.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}D.searchParams.set("redirect_uri",A)}if(D.searchParams.has("resource"))D.searchParams.set("resource",E.connection_url);if($t0(E.connection_url))try{let n=await YG4(l,E.organization_id),q=WG4(n);for(let[S,Y]of q)D.searchParams.set(S,Y)}catch(n){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",n)}return i.redirect(D.toString(),302)}let O={Accept:i.req.header("Accept")||"application/json"},Z=i.req.header("Content-Type");if(Z)O["Content-Type"]=Z;let B=i.req.header("Authorization");if(B)O.Authorization=B;let F,y=null,T=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(f==="token"&&Z?.includes("application/x-www-form-urlencoded")){if(B?.toLowerCase().startsWith("basic "))try{let Y=atob(B.slice(6).trim()),V=Y.indexOf(":");if(V!==-1){let L=decodeURIComponent(Y.slice(0,V)),Ei=decodeURIComponent(Y.slice(V+1));y=L||null,T=Ei||null}}catch{}let A=await i.req.formData();if(A.has("resource"))A.set("resource",E.connection_url);let n=A.get("client_id"),q=A.get("client_secret");if(typeof n==="string"&&n)y=n;if(typeof q==="string"&&q)T=q;let S=new URLSearchParams;for(let[Y,V]of A.entries())S.append(Y,V.toString());F=S.toString()}else if(f==="register"&&Z?.toLowerCase().includes("application/json")){let A=await l.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",E.organization_id).executeTakeFirst(),n=await i.req.text(),q={};try{q=n?JSON.parse(n):{}}catch{F=n}let S=typeof q==="object"&&q!==null&&!Array.isArray(q);if(F===void 0&&!S)F=n;if(F===void 0){let Y=q,V=Y.metadata&&typeof Y.metadata==="object"?Y.metadata:{};Y.metadata={...V,organization_id:E.organization_id,...A?.slug?{organization_slug:A.slug}:{},...A?.name?{organization_name:A.name}:{}},F=JSON.stringify(Y),O["Content-Type"]="application/json"}}else F=i.req.raw.body??void 0;let U=await fetch(D.toString(),{method:i.req.method,headers:O,body:F,duplex:"half",redirect:"manual"}),I=new Headers,j=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[A,n]of U.headers.entries())if(!j.includes(A.toLowerCase()))I.set(A,n);if(f==="token"&&U.ok){let A=await U.text();try{let n=JSON.parse(A);if(typeof n.access_token==="string"&&n.access_token){let q=typeof n.expires_in==="number"?new Date(Date.now()+n.expires_in*1000):null,S=null;try{S=await kz(E.connection_url)??h}catch{S=h}let Y={connectionId:u,accessToken:n.access_token,refreshToken:typeof n.refresh_token==="string"?n.refresh_token:null,scope:typeof n.scope==="string"?n.scope:null,expiresAt:q,clientId:y,clientSecret:T,tokenEndpoint:S};await new q1(l.db,l.vault).upsert(Y)}}catch(n){console.error("[oauth-proxy] failed to persist downstream token:",n)}return new Response(A,{status:U.status,statusText:U.statusText,headers:I})}return new Response(U.body,{status:U.status,statusText:U.statusText,headers:I})},xut=async(i)=>{let u=i.var.meshContext;if(!(u.auth.user?.id??u.auth.apiKey?.userId))return i.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return i.json({error:"organization id missing"},400);let l=i.req.query("types"),c=l?l.split(",").map(($)=>$.trim()).filter(Boolean):null,E=crypto.randomUUID();return Wd(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:E,organizationId:f,typePatterns:c,connectedAt:new Date().toISOString()})}),!A6.add({id:E,organizationId:f,typePatterns:c?.length?c:null,push:(_)=>{$.writeSSE({id:_.id,event:_.type,data:JSON.stringify(_)}).catch(()=>{A6.remove(f,E)})}})){await $.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let d=setInterval(()=>{$.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(d)})},30000);await new Promise((_)=>{$.onAbort(()=>{clearInterval(d),A6.remove(f,E),_()})})})},LG4,HG4=()=>QG4(w4),bG4=()=>zG4(w4);var v1u=N(()=>{xt();tau();HE();gW();wf();sf();_ci();Vt0();iri();c8();Ne();Iwu();zE();Q1();e4();Kwu();Wwu();Be0();X3u();o5();pwi();K3u();Te0();J3u();_p0();Np0();Fp0();z3u();Tp0();RFi();Be();Gp0();qFi();E5u();jp0();Sp0();c5u();l5u();h4i();mci();Qp0();Mw();j$i();zr();Elu();Hp0();Rp0();Vp0();mp0();ap0();pp0();_it();vit();Toi();Aoi();Nit();lEi();I5u();jw();Y3u();la();Utu();lEi();G3u();qai();Vai();Zit();BW();yit();$J();Iwu();GQ();Pdi();Put=k(o2(),1);LG4=new KG4});var nut={};Qi(nut,{resolveClientDir:()=>eG4,resolveAssetPathWithTraversalCheck:()=>Gut,isPathWithinDirectory:()=>Aut,createAssetHandler:()=>aG4});import{resolve as Hs,dirname as CG4,join as MG4,extname as qG4,basename as VG4,sep as Iut}from"path";function rG4(i,u){if(i===u||VG4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${Iut}assets${Iut}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Aut(i,u){let t=Hs(u),f=Hs(i);return f===t||f.startsWith(t+"/")}function Gut({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=Hs(u,t);if(!Aut(f,u))return null;return f}function eG4(i,u="../client"){let t=new URL(i),f=CG4(t.pathname);return Hs(f,u)}function aG4(i={}){let{env:u="production",clientDir:t=mG4,isServerPath:f=()=>!1}=i;if(u==="development")return async function(c){return null};return async function(c){if(c.method!=="GET")return null;let E=new URL(c.url),$;try{$=decodeURIComponent(E.pathname)}catch{return null}if(f($))return null;let w=Gut({requestPath:$,clientDir:t});if(!w)return null;let d=MG4(w,"index.html"),_=Hs(t,"index.html"),v=c.headers.get("accept"),D=v?.includes("text/html")||v?.includes("*/*")&&["",".html"].includes(qG4(w))?[d,_]:[];for(let g of[w,...D])try{let O=Bun.file(g);if(await O.exists())return new Response(O,{headers:rG4(g,_)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var mG4="./dist/client";var kut=()=>{};var jut={};Qi(jut,{tryUpgradePreviewWs:()=>fn4,tryHandlePreviewHttp:()=>tn4,previewWebSocketHandler:()=>ln4,parsePreviewBaseDomain:()=>un4,isPreviewWsData:()=>Txi,extractHandleFromHost:()=>H5u});function pG4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function in4(){return new Response(sG4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function un4(i){if(!i||i.trim()==="")return null;let u=i.includes("{handle}")?i.replace("{handle}","__handle__"):i,t;try{t=new URL(u)}catch{return null}let f=t.hostname;if(i.includes("{handle}")){let l=f.indexOf(".");if(l<=0||l===f.length-1)return null;return f.slice(l+1)}return f}function H5u(i,u){if(!i||!u)return null;let t=i.indexOf(":"),f=(t>=0?i.slice(0,t):i).toLowerCase(),c=`.${u.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!f.endsWith(c))return null;let E=f.slice(0,f.length-c.length);if(!E||E.includes("."))return null;return E}async function tn4(i,u){let t=H5u(i.headers.get("host"),u.baseDomain);if(!t)return null;let f=await u.getRunner();if(!f)return Rs(503,"preview proxy not configured");let l=await f.proxyPreviewRequest(t,i);if(l.headers.get(_K)&&pG4(i))return in4();return l.headers.delete(_K),l}function Rs(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Txi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function fn4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=H5u(i.headers.get("host"),t.baseDomain);if(!f)return null;let l=await t.getRunner();if(!l)return Rs(503,"preview proxy not configured");let c=await l.resolvePreviewUpstreamUrl(f);if(!c)return Rs(404,"sandbox not found");let E=new URL(i.url);if(E.pathname.startsWith("/_sandbox")||E.pathname.startsWith("/_decopilot_vm"))return Rs(404,"not found");let $=`${c.replace(/^http/,"ws")}${E.pathname}${E.search}`,w=i.headers.get("sec-websocket-protocol"),d=w?w.split(",").map((h)=>h.trim()).filter(Boolean):[],_={kind:"preview",upstreamUrl:$,upstreamProtocols:d,pending:[],upstream:null,closed:!1};if(!u.upgrade(i,{data:_}))return Rs(426,"upgrade failed");return}function bs(i,u,t,f){if(u.closed)return;u.closed=!0;try{i.close(t,f)}catch{}try{u.upstream?.close()}catch{}}var oG4=256,sG4='<!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>',ln4;var Xut=N(()=>{E1u();ln4={open(i){let u=i.data;if(!Txi(u))return;let t;try{t=u.upstreamProtocols.length>0?new WebSocket(u.upstreamUrl,u.upstreamProtocols):new WebSocket(u.upstreamUrl)}catch(f){console.warn(`[preview-ws] failed to dial upstream ${u.upstreamUrl}: ${f instanceof Error?f.message:String(f)}`),bs(i,u,1011,"upstream connect failed");return}t.binaryType="arraybuffer",u.upstream=t,t.addEventListener("open",()=>{while(u.pending.length>0){let f=u.pending.shift();if(f!==void 0)t.send(f)}}),t.addEventListener("message",(f)=>{if(u.closed)return;i.send(f.data)}),t.addEventListener("close",(f)=>{bs(i,u,f.code||1000,f.reason||"")}),t.addEventListener("error",()=>{bs(i,u,1011,"upstream error")})},message(i,u){let t=i.data;if(!Txi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=oG4){bs(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!Txi(u))return;bs(i,u,1000,"")}}});var Jut={};Qi(Jut,{bootstrapDevLinkSession:()=>Dn4});import{existsSync as cn4}from"fs";import{chmod as En4,mkdir as $n4,rename as wn4,writeFile as dn4}from"fs/promises";import{dirname as _n4,join as Kut}from"path";function vn4(i){return Kut(i,"dev-link")}function hn4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Kut(vn4(i),"session.json")}async function Dn4(i,u){let t=hn4(i),f=qt().db,l=xd()?await Wa():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(cn4(t))try{let d=await Bun.file(t).json(),_=d.user?.sub,v=d.accessToken;if(_===l.id&&typeof v==="string"){if(await w4.api.verifyApiKey({body:{key:v}}).then((D)=>D?.valid===!0).catch(()=>!1))return{path:t,userSub:_}}}catch{}let c=null;try{c=await w4.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:l.id,permissions:{"*":["*"]},expiresIn:2592000,rateLimitEnabled:!1}})}catch(w){return console.warn("[dev-link] failed to mint API key:",w instanceof Error?w.message:String(w)),null}if(!c?.key)return null;let E={target:u,clientId:"dev-link",user:{sub:l.id,...l.email?{email:l.email}:{},...l.name?{name:l.name}:{}},accessToken:c.key,createdAt:new Date().toISOString()};await $n4(_n4(t),{recursive:!0});let $=`${t}.tmp`;return await dn4($,JSON.stringify(E,null,2),{mode:384}),await En4($,384),await wn4($,t),{path:t,userSub:l.id}}var Sut=N(()=>{zE();c8();Bg()});var Jn4={};import{existsSync as Tn4}from"fs";function Qut(i,u){if(!u)return i;let t=new URL(i);if(!t.searchParams.has("sslmode"))t.searchParams.set("sslmode","verify-full");return t.toString()}function In4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(xn4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function Kn4(i){let u;try{u=await gn4.create({systemDatabaseUrl:Qut(T3.databaseUrl,T3.databasePgSsl),systemDatabaseSchemaName:"dbos"});let t=await u.listWorkflows({status:"PENDING",queueName:s_,executorId:i,loadInput:!1,loadOutput:!1});if(t.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${i})`);return}let f=t.map((l)=>l.workflowID);await u.resumeWorkflows(f,{queueName:s_}),console.log(`[shutdown] re-enqueued ${f.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${i}):`,f)}catch(t){console.error("[shutdown] thread-gate handoff failed:",t)}finally{await u?.destroy().catch(()=>{})}}async function Pxi(i){if(zut)return;zut=!0,console.log(`
|
|
84198
84198
|
[shutdown] Received ${i}, shutting down gracefully...`);let u=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,t=Math.max(u-5000,1e4),f=setTimeout(()=>{console.error(`[shutdown] Timed out after ${t}ms, forcing exit.`),process.exit(1)},t);f.unref?.();let l=0;try{Xn4(),Uxi.markShuttingDown();let c=Number(process.env.SHUTDOWN_DRAIN_MS??Math.floor(t*0.6));await Zt(c),await jn4.stop(!0);let E=Cs.executorID;await Cs.shutdown(),await Kn4(E),await Uxi.shutdown()}catch(c){console.error("[shutdown] Error during shutdown:",c),l=1}clearTimeout(f),process.exit(l)}var T3,Cs,gn4,Nn4,On4,Zn4,Bn4,Fn4,Hut,yn4,Yut,Un4,Pn4,xn4,An4,Gn4,nn4,b5u,R5u,kn4,but,Wut,Uxi,C5u,Lut,jn4,Xn4,zut=!1;var Rut=N(async()=>{Bl();Keu();xt();Q1();Qeu();T3=yu();AQu();({DBOS:Cs,DBOSClient:gn4}=await import("@dbos-inc/dbos-sdk"));Nn4=[h5,s_,f7,IO],On4=T3.dispatchRole==="worker"?Nn4:T3.dispatchRole==="api"?[]:void 0;Cs.setConfig(Xeu({systemDatabaseUrl:Qut(T3.databaseUrl,T3.databasePgSsl),poolSize:Number(process.env.DBOS_POOL_SIZE??5),executorID:T3.podName,listenQueues:On4}));({createApp:Zn4}=await Promise.resolve().then(() => (v1u(),_1u))),{isServerPath:Bn4}=await Promise.resolve().then(() => (h4i(),dQu)),{createAssetHandler:Fn4,resolveClientDir:Hut}=await Promise.resolve().then(() => (kut(),nut)),yn4=T3.port,Yut=Hut(import.meta.url,"../client"),Un4=Tn4(Yut)?Yut:Hut(import.meta.url,"../dist/client"),Pn4=Fn4({clientDir:Un4,isServerPath:Bn4}),xn4={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};({parsePreviewBaseDomain:An4,tryHandlePreviewHttp:Gn4,tryUpgradePreviewWs:nn4,previewWebSocketHandler:b5u,isPreviewWsData:R5u}=await Promise.resolve().then(() => (Xut(),jut))),{getOrInitSharedRunner:kn4}=await Promise.resolve().then(() => (Xa(),in0)),but=An4(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),Wut={baseDomain:but??"",getRunner:kn4},Uxi=await Zn4(),C5u=process.env.DBOS_CONDUCTOR_KEY?.trim(),Lut=process.env.DBOS_CONDUCTOR_URL?.trim();await Cs.launch({...C5u?{conductorKey:C5u}:{},...C5u&&Lut?{conductorURL:Lut}:{}});console.log(`[dbos] application version: ${Cs.applicationVersion}`);await Uxi.initDbos();if(!T3.isCli){let{bannerLines:i}=await Promise.resolve().then(() => (FY(),wM));console.log("");for(let u of i())console.log(u)}jn4=Bun.serve({idleTimeout:0,port:yn4,hostname:"0.0.0.0",fetch:async(i,u)=>{if(but){let f=await nn4(i,u,Wut);if(f===void 0)return;if(f)return f;let l=await Gn4(i,Wut);if(l)return l}let t=await Pn4(i);if(t)return In4(t);return Uxi.fetch(i,{server:u})},websocket:{open(i){if(R5u(i.data))b5u.open(i)},message(i,u){if(R5u(i.data))b5u.message(i,u)},close(i){if(R5u(i.data))b5u.close(i)}},development:!1}),Xn4=zeu();if(T3.localMode)Promise.resolve().then(() => (Bg(),TFi)).then(async({seedLocalMode:i,markSeedComplete:u})=>{try{let t=await i();if(process.env.DEV_LINK_SESSION_PATH)try{let{bootstrapDevLinkSession:f}=await Promise.resolve().then(() => (Sut(),Jut)),l=T3.baseUrl??`http://localhost:${T3.port}`,c=await f(T3.dataDir,l);if(c)console.log(`[dev-link] session ready at ${c.path} (userSub=${c.userSub})`);else console.warn("[dev-link] no admin user yet \u2014 skipping session bootstrap. The auto-spawned link will refuse to start until an admin exists.")}catch(f){console.error("[dev-link] bootstrap failed:",f)}}catch(t){console.error("Failed to seed local mode:",t)}finally{u()}}).catch(async(i)=>{console.error("Failed to load local-mode module:",i);try{let{markSeedComplete:u}=await Promise.resolve().then(() => (Bg(),TFi));u()}catch{}});process.on("SIGTERM",()=>Pxi("SIGTERM"));process.on("SIGINT",()=>Pxi("SIGINT"));process.on("SIGHUP",()=>Pxi("SIGHUP"));process.on("unhandledRejection",(i)=>{console.error("[process] Unhandled rejection:",i)});process.on("uncaughtException",(i)=>{console.error("[process] Uncaught exception:",i),Pxi("uncaughtException")})});var M5u={};Qi(M5u,{startServer:()=>Wn4,interceptConsoleForTui:()=>Yn4});function Sn4(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function Yn4(){let{log:i,warn:u,error:t}=console;function f(...l){let c=l.map((E)=>typeof E==="string"?E:Bun.inspect(E)).join(" ");for(let E of c.split(`
|
|
84199
84199
|
`)){let $=Sn4(E).trim();if(!$)continue;o_({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}return console.log=f,console.warn=f,console.error=f,p1i(!0),()=>{console.log=i,console.warn=u,console.error=t,p1i(!1)}}async function Wn4(i){let u=await PO(Number(i.port)),{settings:t,services:f}=await s1i({port:String(u),home:i.home,localMode:i.localMode,skipMigrations:i.skipMigrations,noTui:i.noTui});for(let l of f)a_({name:l.name,status:"ready",port:l.port});TM(),await Rut().then(() => Jn4),UM(`http://localhost:${t.port}`)}var q5u=N(()=>{uCi();UO();cCi()});import{parseArgs as Ln4}from"util";import{homedir as Ms}from"os";import{join as xxi}from"path";function qs(i){if(i.noTui)return!1;return i.isTty===!0}var{values:v4,positionals:Eb}=Ln4({args:process.argv.slice(2),options:{port:{type:"string",short:"p",default:process.env.PORT||"3000"},"vite-port":{type:"string",default:process.env.VITE_PORT||"4000"},home:{type:"string"},"base-url":{type:"string"},help:{type:"boolean",short:"h",default:!1},version:{type:"boolean",short:"v",default:!1},"skip-migrations":{type:"boolean",default:!1},"no-tui":{type:"boolean",default:!1},"no-local-mode":{type:"boolean",default:!1},"local-sandbox-provider":{type:"boolean",default:!1},hot:{type:"boolean",default:!1},prune:{type:"boolean",default:!1},target:{type:"string"},env:{type:"string",short:"e"},"dry-run":{type:"boolean",default:!1},batch:{type:"string"},limit:{type:"string"},org:{type:"string"}},allowPositionals:!0});if(v4.help)console.log(`
|
|
84200
84200
|
Deco CMS \u2014 Open-source control plane for your AI agents
|