decocms 3.99.0 → 3.99.1
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-B2tKCnm8.js → AlertCircle-VcwplCRi.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-C-ZXCXeN.js → ArrowUpRight-CAv7CUnJ.js} +1 -1
- package/dist/client/assets/{CheckCircle-BcI3T1tO.js → CheckCircle-V30FMM2D.js} +1 -1
- package/dist/client/assets/{ChevronDown-DKlpkOB2.js → ChevronDown-URo4LveF.js} +1 -1
- package/dist/client/assets/{ChevronLeft-vu3jmJdt.js → ChevronLeft-aMkPes9N.js} +1 -1
- package/dist/client/assets/{ChevronRight-CdRT7LjU.js → ChevronRight-oz8o6WPV.js} +1 -1
- package/dist/client/assets/{ChevronUp-B0N31Im_.js → ChevronUp-HJUE3-BD.js} +1 -1
- package/dist/client/assets/{DotsVertical-wEiyEk6D.js → DotsVertical-QF46dzdi.js} +1 -1
- package/dist/client/assets/{Eye-5boS9nIv.js → Eye-BSiFxHQB.js} +1 -1
- package/dist/client/assets/{FilterLines-OqKdZVKs.js → FilterLines-CEzORaPw.js} +1 -1
- package/dist/client/assets/{Globe01-CRm2mh-P.js → Globe01-wGomueqV.js} +1 -1
- package/dist/client/assets/{Globe04-BtSgO3H5.js → Globe04-CsKOsQ4z.js} +1 -1
- package/dist/client/assets/{HardDrive-DxtF-IY8.js → HardDrive-BuI4Q48l.js} +1 -1
- package/dist/client/assets/{Key01-LrqIifxa.js → Key01-r6MDYdDw.js} +1 -1
- package/dist/client/assets/{LayoutLeft-BFka2GeR.js → LayoutLeft-BFxGsVdk.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DgECMeuC.js → LinkExternal01-BWnRnxGs.js} +1 -1
- package/dist/client/assets/{Monitor01-TMDQZq46.js → Monitor01-SEZLDRFN.js} +1 -1
- package/dist/client/assets/{Palette-D-5q-DfS.js → Palette-CEjENuG4.js} +1 -1
- package/dist/client/assets/{Play-Mf5cQSsU.js → Play-BDoh8EAp.js} +1 -1
- package/dist/client/assets/{Plus-CpiYI_4d.js → Plus-Bw9lc6SR.js} +1 -1
- package/dist/client/assets/{SearchMd-Dj_Z4iwH.js → SearchMd-BMfw7gZ4.js} +1 -1
- package/dist/client/assets/{Settings02-C_rkmGxP.js → Settings02-DbH9OAzT.js} +1 -1
- package/dist/client/assets/{Shield01-DputbTqH.js → Shield01-C1R4fpvK.js} +1 -1
- package/dist/client/assets/{Star01-DTKqRt_Y.js → Star01-BwAv907s.js} +1 -1
- package/dist/client/assets/{Stars01-CmPmyHdC.js → Stars01-D1icdaCh.js} +1 -1
- package/dist/client/assets/{Stars02-C3IQpZYm.js → Stars02-PPXsboxW.js} +1 -1
- package/dist/client/assets/{Sun-CY-48C0Q.js → Sun-Dw86eVev.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-Bt5waFYC.js → SwitchHorizontal01-F_1MjTR3.js} +1 -1
- package/dist/client/assets/{Tool01-DIyxkJuF.js → Tool01-DvTGD1Yt.js} +1 -1
- package/dist/client/assets/{Trash01-B4wYspRk.js → Trash01-d58N8w5a.js} +1 -1
- package/dist/client/assets/{Upload01-Cx3iHgDj.js → Upload01-C_hHbDSF.js} +1 -1
- package/dist/client/assets/{User01-bHHH-hCd.js → User01-BDtU1dk1.js} +1 -1
- package/dist/client/assets/{Users01-CUJ27ws5.js → Users01-PX3eYoC8.js} +1 -1
- package/dist/client/assets/{Users03-BwME7x2o.js → Users03-CL71IAQ8.js} +1 -1
- package/dist/client/assets/{X-CyEH-HLB.js → X-D7X7Z50V.js} +1 -1
- package/dist/client/assets/{XCircle-1yG7DJUE.js → XCircle-PlbEvjyp.js} +1 -1
- package/dist/client/assets/{XClose-DrdWWhVa.js → XClose-BbuWQhNb.js} +1 -1
- package/dist/client/assets/{Zap-BcROp_Sw.js → Zap-BQKeuD4l.js} +1 -1
- package/dist/client/assets/{ZapSquare-CQGn3oRj.js → ZapSquare-CvkoTQDM.js} +1 -1
- package/dist/client/assets/{ZoomOut-CP848i3T.js → ZoomOut-DxqRFWA_.js} +1 -1
- package/dist/client/assets/{access-gate-UYvjesC4.js → access-gate-6AWas-Ss.js} +1 -1
- package/dist/client/assets/{add-section-modal-DjiKr-mG.js → add-section-modal-jgpkoBcW.js} +1 -1
- package/dist/client/assets/{agent-icon-D4izi-0m.js → agent-icon-B2N3zGQH.js} +1 -1
- package/dist/client/assets/{agents-list-Bo4o9py9.js → agents-list-Cd9i8250.js} +1 -1
- package/dist/client/assets/{ai-providers-BeO7EK0W.js → ai-providers-CG207wTX.js} +1 -1
- package/dist/client/assets/{alert-LYCfBUZh.js → alert-Cg3WXwSx.js} +1 -1
- package/dist/client/assets/{alert-dialog-CPIOFM7U.js → alert-dialog-DvWgcmQI.js} +1 -1
- package/dist/client/assets/{app-editor-BIHJ9_p3.js → app-editor-tLSi5KV_.js} +1 -1
- package/dist/client/assets/{auth-BQJ4901M.js → auth-DZDiXt1m.js} +1 -1
- package/dist/client/assets/{auth-catchall-CvyCi0R5.js → auth-catchall-kuEh1_rd.js} +1 -1
- package/dist/client/assets/{auth-entry-DkeNnDdz.js → auth-entry-CavsOUDq.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CsPWd72V.js → auth-split-layout-dFpcxyJe.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-DxcPuu6b.js → authenticate-and-persist-oauth-CGYbK6H8.js} +1 -1
- package/dist/client/assets/{automation-list-row-DJWQr3ii.js → automation-list-row-CAUoBpVq.js} +1 -1
- package/dist/client/assets/{automation-runs-CBbmdd2g.js → automation-runs-DyKvgj21.js} +1 -1
- package/dist/client/assets/{automations-OwxtB2xV.js → automations-wXAz-GXj.js} +1 -1
- package/dist/client/assets/{avatar-6LwZYACh.js → avatar-Dv3IrttI.js} +1 -1
- package/dist/client/assets/{badge-ClC_mVXH.js → badge-toKsUzoB.js} +1 -1
- package/dist/client/assets/{block-document-BDP5bqaW.js → block-document-DRbnuwCo.js} +1 -1
- package/dist/client/assets/{brand-context-BPI754XR.js → brand-context-BaVxi4M4.js} +1 -1
- package/dist/client/assets/{buckets-lxivknwg.js → buckets-BKwGKvkZ.js} +1 -1
- package/dist/client/assets/{capability-load-error-BZ3C4jEm.js → capability-load-error-BRyHg_Rt.js} +1 -1
- package/dist/client/assets/{card-QhB5x9Lx.js → card-Chq65iX4.js} +1 -1
- package/dist/client/assets/{category-editor-Dh3xmOe5.js → category-editor-LeiO5-YX.js} +1 -1
- package/dist/client/assets/{chat-context-B0mmOd9g.js → chat-context-Bspy4m-d.js} +1 -1
- package/dist/client/assets/{checkbox-N0X_3WAx.js → checkbox-KUrNOBQk.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CXFyuCJj.js → cli-auth-success-B36KwAFt.js} +1 -1
- package/dist/client/assets/{collection-detail-BvUolk38.js → collection-detail-CbhoYXmP.js} +1 -1
- package/dist/client/assets/{collection-display-button-Dm0u8Icp.js → collection-display-button-DNbt3d2y.js} +1 -1
- package/dist/client/assets/{collection-search-CCJeZtSC.js → collection-search-BPoBI_I5.js} +1 -1
- package/dist/client/assets/{collection-tabs-CIbS_aRk.js → collection-tabs-FH3-RtUV.js} +1 -1
- package/dist/client/assets/{command-CyTNhGQi.js → command-DMsCjDdA.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-CEaL1-82.js → commerce-onboarding-Cv30K_3D.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-BXO2k7fs.js → connect-desktop-dialog-G37q3fkg.js} +1 -1
- package/dist/client/assets/{connection-card-CS3v7rYN.js → connection-card-BG_Nwlzj.js} +1 -1
- package/dist/client/assets/{connection-detail-BI4w3NxZ.js → connection-detail-oU0C71F8.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-DhabLQU7.js → connection-form-helpers-DLOiycDJ.js} +1 -1
- package/dist/client/assets/{connections-BYrLijy4.js → connections-BgFAjnb1.js} +1 -1
- package/dist/client/assets/{context-menu-Q1Owjt7Z.js → context-menu-BRDnNrnF.js} +1 -1
- package/dist/client/assets/{decopilot-Cw641gWp.js → decopilot-DfFzELja.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-DGROjFUX.js → decopilot-sse-pool-TIer_srZ.js} +1 -1
- package/dist/client/assets/{dialog-Cg3rcVr2.js → dialog-CxQBoX40.js} +1 -1
- package/dist/client/assets/{domain-settings-HOF2Zwde.js → domain-settings-gFWo85oP.js} +1 -1
- package/dist/client/assets/{drawer-CAJEFb6a.js → drawer-CoRZTii0.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DwkP3R-M.js → dropdown-menu-5CWPgj7f.js} +1 -1
- package/dist/client/assets/{empty-state-BA-8VXvV.js → empty-state-B-ezQrZT.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CtVNT5JS.js → extract-connection-data-BaXkJtVr.js} +1 -1
- package/dist/client/assets/{file-explorer-Dh4ucUbU.js → file-explorer-CwlDpz6e.js} +1 -1
- package/dist/client/assets/{file-type-icon-Dtw8pMpt.js → file-type-icon-Cd8oKt-R.js} +1 -1
- package/dist/client/assets/{files-BrIfSgdo.js → files-CkNnfKPK.js} +1 -1
- package/dist/client/assets/{form-r_9hbLn7.js → form-CpFt_4sy.js} +1 -1
- package/dist/client/assets/{general-Dsili3D1.js → general-9kWrBaDN.js} +1 -1
- package/dist/client/assets/{github-repo-picker-BlOw6wWo.js → github-repo-picker-CvyWRbaM.js} +1 -1
- package/dist/client/assets/{hooks-BZmjB2Y3.js → hooks-BAG9TZjZ.js} +1 -1
- package/dist/client/assets/{import-from-deco-dialog-CllLsuxG.js → import-from-deco-dialog-ga5lUGZx.js} +1 -1
- package/dist/client/assets/{index-D5VRKG0h.js → index-ALZP0-mx.js} +1 -1
- package/dist/client/assets/{index-cEjDb0yt.js → index-BAfXUZ9K.js} +1 -1
- package/dist/client/assets/{index-DKxonbsE.js → index-BLMNER8l.js} +1 -1
- package/dist/client/assets/{index-Cx-rmUTX.js → index-BU8Nad-n.js} +1 -1
- package/dist/client/assets/{index-C-Ms0LlR.js → index-BeB2S664.js} +1 -1
- package/dist/client/assets/{index-V7Ke-ddW.js → index-BwC0cAdP.js} +1 -1
- package/dist/client/assets/{index-B6RuHW2d.js → index-C_Ih0jtP.js} +1 -1
- package/dist/client/assets/{index-DDmZcB2_.js → index-CiVkOVzW.js} +5 -5
- package/dist/client/assets/{index-BES1tco7.js → index-DPI_0XE-.js} +1 -1
- package/dist/client/assets/{index-DGQR8QX-.js → index-DS2I5JM3.js} +1 -1
- package/dist/client/assets/{index-Bzybgde3.js → index-DUdLsOJu.js} +1 -1
- package/dist/client/assets/{index-CcEQJ9TP.js → index-DZCgQXLz.js} +1 -1
- package/dist/client/assets/{index-MpjPxskG.js → index-I8Uum3Jx.js} +3 -3
- package/dist/client/assets/{index-BBDWvYlB.js → index-JhgoGL0k.js} +1 -1
- package/dist/client/assets/{index-redirect-DNBN6D1L.js → index-redirect-CP9ATXDl.js} +1 -1
- package/dist/client/assets/{input-Cr9jBfB7.js → input-CutcETvq.js} +1 -1
- package/dist/client/assets/{integration-icon-CcZDYv2E.js → integration-icon-D3W1euXX.js} +1 -1
- package/dist/client/assets/{label-DE6yKu0U.js → label-DtGUWURu.js} +1 -1
- package/dist/client/assets/{login-C3viYTk8.js → login-DUTSfri0.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DpS4HNDv.js → mcp-oauth-CSZ5TVrK.js} +1 -1
- package/dist/client/assets/{members-B_6V5QSG.js → members-Dq59tJj1.js} +1 -1
- package/dist/client/assets/{monaco-editor-riosOl5g.js → monaco-editor-x5JEAvo5.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Btsxp-Ss.js → monitoring-stats-row-BsPY2-bU.js} +1 -1
- package/dist/client/assets/{oauth-callback-D4zeeUFW.js → oauth-callback-BXF1WEWL.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DGPhZiOX.js → oauth-callback-ai-provider-MpQ7zAqW.js} +1 -1
- package/dist/client/assets/{onboarding-De6fLW8h.js → onboarding-CKZFzjtY.js} +1 -1
- package/dist/client/assets/{org-install-CUEkUiAv.js → org-install-DVysq6Hz.js} +1 -1
- package/dist/client/assets/{org-layout-QBJAyIrm.js → org-layout-hE5dYTZz.js} +1 -1
- package/dist/client/assets/{organization-choice-Dv2OwI-t.js → organization-choice-y8WYOYM0.js} +1 -1
- package/dist/client/assets/{page-seo-form-BOzWRvsQ.js → page-seo-form-gPXTm6pw.js} +1 -1
- package/dist/client/assets/page-seo-sheet-CpMq28JR.js +1 -0
- package/dist/client/assets/{popover-CJe04WOy.js → popover-C8AJAJSa.js} +1 -1
- package/dist/client/assets/{post-editor-Rp79NJZ3.js → post-editor-DrZmKifS.js} +1 -1
- package/dist/client/assets/{preview-dialog-BJCgRVN3.js → preview-dialog-D1-LAakL.js} +1 -1
- package/dist/client/assets/{primitives-r_FHuESN.js → primitives-D7qGIw1V.js} +1 -1
- package/dist/client/assets/{profile-5-dOYDST.js → profile-DwtHhCaD.js} +1 -1
- package/dist/client/assets/project-app-view-H9YA_3uu.js +1 -0
- package/dist/client/assets/record-editor-C64a4aNL.js +1 -0
- package/dist/client/assets/registry-CxYUBbU6.js +2 -0
- package/dist/client/assets/{registry-layout-BqS7mSoz.js → registry-layout-CZALtE-Q.js} +1 -1
- package/dist/client/assets/{require-capability-a44oc3tu.js → require-capability-DAovjPYR.js} +1 -1
- package/dist/client/assets/{required-auth-layout-QkAj4QVN.js → required-auth-layout-BFGUeccA.js} +1 -1
- package/dist/client/assets/{reset-password-CvATWsJB.js → reset-password-CrnrgmIx.js} +1 -1
- package/dist/client/assets/{roles-B37QLVHE.js → roles-DRg1cyfq.js} +1 -1
- package/dist/client/assets/{save-status-xtYw_K9n.js → save-status-BmnvufMt.js} +1 -1
- package/dist/client/assets/{scroll-area-BPQwtIHi.js → scroll-area-DnauLcxE.js} +1 -1
- package/dist/client/assets/{search-input-BzADBDiR.js → search-input-BVF4N9EW.js} +1 -1
- package/dist/client/assets/{secrets-s5veILtZ.js → secrets-DPqx_gXC.js} +1 -1
- package/dist/client/assets/{sections-editor-Dihe2f7L.js → sections-editor-BLU0buUC.js} +1 -1
- package/dist/client/assets/{select-CP2O-MPr.js → select-CeO9pIG_.js} +1 -1
- package/dist/client/assets/{select-model-Bt5mshkF.js → select-model-mprfSN1i.js} +1 -1
- package/dist/client/assets/{seo-editor-D-p1HMD9.js → seo-editor-Dyh0ncgL.js} +1 -1
- package/dist/client/assets/{settings-layout-CLYXRsYz.js → settings-layout-BcPbOkgS.js} +1 -1
- package/dist/client/assets/{settings-section-C91STDXl.js → settings-section-B3kXnqLg.js} +1 -1
- package/dist/client/assets/{sheet-qUAd_2vk.js → sheet-CaSXRGPU.js} +1 -1
- package/dist/client/assets/{shell-controls-TBi4Bs6a.js → shell-controls-D2Qn9uVj.js} +1 -1
- package/dist/client/assets/{shell-layout-D2QUbgoY.js → shell-layout-BgovnITR.js} +1 -1
- package/dist/client/assets/{shell-route-loading-CZ7PjWkH.js → shell-route-loading-w2qYEgt-.js} +1 -1
- package/dist/client/assets/{sidebar-BHss58rk.js → sidebar-BNKGZwsk.js} +1 -1
- package/dist/client/assets/{skeleton-BxYVo1ej.js → skeleton-1BUBAFib.js} +1 -1
- package/dist/client/assets/{sortable.esm-CxO66Aqu.js → sortable.esm-BQBGtGRV.js} +1 -1
- package/dist/client/assets/{sso-CQXCda0c.js → sso-B5RA5Egt.js} +1 -1
- package/dist/client/assets/{store-f9SUFb27.js → store-Ni3ANns9.js} +1 -1
- package/dist/client/assets/store-registry-kIHn_jDR.js +2 -0
- package/dist/client/assets/{studio-tools-DVojvDEr.js → studio-tools-bjPFQfXc.js} +1 -1
- package/dist/client/assets/{switch-C86XM8Lb.js → switch-B9PlH85E.js} +1 -1
- package/dist/client/assets/{table-CNjcUwhh.js → table-Bh38Wtyx.js} +1 -1
- package/dist/client/assets/{tabs-Bq1ZowRE.js → tabs-C0RM8s7M.js} +1 -1
- package/dist/client/assets/{task-status-DXwOekTG.js → task-status-sw3Y4pwg.js} +1 -1
- package/dist/client/assets/{textarea-CixyZRlq.js → textarea-CvR7iHW3.js} +1 -1
- package/dist/client/assets/{toggle-group-BdCNGWln.js → toggle-group-qpErv2AC.js} +1 -1
- package/dist/client/assets/{toolbar-DbGfvfdI.js → toolbar-CB27CeHy.js} +1 -1
- package/dist/client/assets/{tooltip-CEM9S4pg.js → tooltip-Cs84Kx7a.js} +1 -1
- package/dist/client/assets/{types-DDQhAUH9.js → types-pQkRXbdZ.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CpTKYZRn.js → use-ai-providers-BgadC07_.js} +1 -1
- package/dist/client/assets/{use-automations-D5oUll8g.js → use-automations-P1MHR3DS.js} +1 -1
- package/dist/client/assets/{use-capability-t-9WULPE.js → use-capability-BUm2GwYJ.js} +1 -1
- package/dist/client/assets/{use-clock-tick-BySyJdAG.js → use-clock-tick-DNfOIVGO.js} +1 -1
- package/dist/client/assets/{use-collections-CVlcIFcl.js → use-collections-KLUYE1x1.js} +1 -1
- package/dist/client/assets/{use-connection-B7hehSBo.js → use-connection-BcZ8SPdu.js} +1 -1
- package/dist/client/assets/{use-copy-T1Xud-C6.js → use-copy-3_Rhxcs5.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CI7JmXUA.js → use-create-virtual-mcp-BUg1GOjA.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-BJyLUAIB.js → use-debounced-autosave-CSkDAooO.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BkhqKngp.js → use-delete-connection-CRtYZbhZ.js} +1 -1
- package/dist/client/assets/{use-file-configs-zP_QQ_ZA.js → use-file-configs-YBpYKsXP.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Bzqu-Hgc.js → use-infinite-scroll-BJoUj4tJ.js} +1 -1
- package/dist/client/assets/{use-join-requests-DaCmnTl9.js → use-join-requests-7lEKJyAD.js} +1 -1
- package/dist/client/assets/{use-mcp-client-D0CDCf2C.js → use-mcp-client-Bq9g8m5J.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-CFOe4FP5.js → use-mcp-prompts-B5FIxmOZ.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-oAYlV_rV.js → use-mcp-tools-LraQQ1bu.js} +1 -1
- package/dist/client/assets/{use-members-uzLM9gLc.js → use-members-D283HZiN.js} +1 -1
- package/dist/client/assets/{use-mobile-taJ6Byue.js → use-mobile-C0mpADhR.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-NCPMRSC-.js → use-navigate-to-agent-CRQ9sIAj.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-BI60dBQ8.js → use-org-auth-client-WATciLg3.js} +1 -1
- package/dist/client/assets/{use-org-sso-DRd1kOa9.js → use-org-sso-HWNvOeDC.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DHLS6-m5.js → use-organization-roles-Cyp5dthQ.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BCL7l3Gq.js → use-organization-settings-oh1iUWuA.js} +1 -1
- package/dist/client/assets/{use-registry-connections-C1tYRr1m.js → use-registry-connections-d6Abj3O4.js} +1 -1
- package/dist/client/assets/{use-secrets-CrkSMWB9.js → use-secrets-CkVHtz_G.js} +1 -1
- package/dist/client/assets/{use-status-sounds-DEhsbseD.js → use-status-sounds-MBoAiBsc.js} +1 -1
- package/dist/client/assets/{use-view-mode-CXKeWsQW.js → use-view-mode-Dhn_wt1k.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-q2Cm2W65.js → use-virtual-mcp-C5aoCVVQ.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-RfoATJAI.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-DBiSYggu.js +1 -0
- package/dist/client/assets/{useSuspenseQueries-DvUMI2b6.js → useSuspenseQueries-C6KWJru5.js} +1 -1
- package/dist/client/assets/{variant-calendar-DNxbSxzY.js → variant-calendar-krPIZ_Rp.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DfJxMNM0.js → view-mode-toggle-DTMt6lCZ.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/page-seo-sheet-nyf66LRp.js +0 -1
- package/dist/client/assets/project-app-view-DOzoLGgs.js +0 -1
- package/dist/client/assets/record-editor-DGsVK72Y.js +0 -1
- package/dist/client/assets/registry-BtQv7iAE.js +0 -2
- package/dist/client/assets/store-registry-CzotbzeO.js +0 -2
- package/dist/client/assets/useInfiniteQuery-B5tA5pfi.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DtIVyYSY.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -80854,7 +80854,7 @@ ${$}`;_(Z);return}if(E(null,B),t.strategy==="count"){if(w--,w===0)_()}if(t.strat
|
|
|
80854
80854
|
SELECT * FROM link_sandboxes WHERE handle = $handle
|
|
80855
80855
|
`);function _(v){if(t===void 0)return!0;let h=wM(v),D=h&&wM(t)?YVu(t):t,g=h?YVu(v):WVu(v),O=QQt(D,g);return O===""||!O.startsWith("..")&&!LQt(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(!wM(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||!wM(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=zVu(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}YQt(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(wM(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(`
|
|
80856
80856
|
`).length}if(D.branch!==null&&D.branch.trim()!=="")O=zVu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:g,merged:O}},close(){u.close()}}}var vHi=()=>{};function HVu(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 CQt,readdirSync as MQt}from"fs";import{rm as qQt}from"fs/promises";import{join as bVu}from"path";async function RVu(i,u={}){let t=u.detach??VQt,f=u.exists??CQt,l=u.readdir??(($)=>MQt($)),c=u.rm??(($)=>qQt($,{recursive:!0,force:!0})),E=bVu(i,"org");if(f(E))for(let $ of l(E))t(bVu(E,$));await c(i)}var VQt=(i)=>HVu(i,process.platform==="darwin");var CVu=()=>{};import{join as rQt}from"path";function MVu(i){let u=i.purge??RVu;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??rQt(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 J6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var qVu=N(()=>{Bl();CVu()});import{randomBytes as mQt}from"crypto";import{mkdir as eQt}from"fs/promises";import{createServer as aQt}from"net";import{join as oQt}from"path";function VVu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function sQt(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function rVu(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 pQt(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 iHt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:pQt(i.repo?.cloneUrl)}}function mVu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??uHt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((g,O)=>`http://127.0.0.1:${O}`),E=(g)=>oQt(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=iHt(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 eQt(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=mQt(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 VVu("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 VVu(sQt(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:rVu(j)}),$({handle:g.handle,status:"failed",sandboxPath:Z,port:null,previewUrl:null,...O,error:rVu(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 uHt(){return new Promise((i,u)=>{let t=aQt();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 eVu=()=>{};import{randomUUID as tHt}from"crypto";import{hostname as fHt}from"os";async function aVu(i){let u=fHt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=XHu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=J1i({path:X1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=mVu({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:tHt(),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 YHu(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 J4i(`http://127.0.0.1:${n}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await PVu({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=LHu({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 _Hi(),g=XVu(D,{onChange:(n)=>{console.log(`[link-daemon] capabilities detected: +${n.join(",")} (now: ${D.join(",")})`)}}),O=pLi({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 vVu(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(`
|
|
80857
|
-
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=MVu({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 oVu=N(()=>{VLi();JC();JHu();WHu();zHu();izi();hVu();xVu();JVu();SVu();XC();vHi();qVu();eVu()});function hHi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var K1i;var DHi=N(()=>{K1i={name:"decocms",version:"3.99.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 dM={};Qi(dM,{printBanner:()=>EHt,bannerLines:()=>sVu,BANNER_LINES:()=>S1i,BANNER_GRADIENT:()=>Y1i});function cHt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function sVu(i){let u=S1i.map((t,f)=>{let[l,c,E]=cHt(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 EHt(i){console.log("");for(let u of sVu(i))console.log(u);console.log("")}var S1i,Y1i;var yY=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 $Ht,Text as pVu}from"ink";import{jsx as wHt,jsxs as iru}from"react/jsx-runtime";function W1i({version:i}){return iru($Ht,{flexDirection:"column",marginTop:1,children:[S1i.map((u,t)=>wHt(pVu,{color:Y1i[t],children:u},t)),iru(pVu,{dimColor:!0,children:[" v",i]})]})}var gHi=N(()=>{yY()});function uru(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 TY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function tru(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 fru(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 BHi={};Qi(BHi,{subscribeLinkState:()=>NHi,setSelectedHandle:()=>OHi,setRemoving:()=>Q1i,setPersistedSandboxes:()=>BHt,setPendingConfirm:()=>vM,setMachine:()=>gHt,setLogPath:()=>OHt,setLinkActions:()=>ZHt,setIngress:()=>DHt,setDaemonError:()=>NHt,setClusterUrl:()=>hHt,setCluster:()=>vHt,setActionError:()=>z1i,resetLinkStateForTests:()=>yHt,removeSandboxRow:()=>ZHi,pushSandboxEvent:()=>FHt,getLinkState:()=>_M,applySandboxEvent:()=>lru});function _Ht(i){return i==="spawning"||i==="ready"||i==="failed"}function lru(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 cru(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:dHt,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 _M(){return tf}function NHi(i){return L1i.add(i),()=>L1i.delete(i)}function vHt(i){tf={...tf,cluster:i},X$()}function hHt(i){tf={...tf,clusterUrl:i},X$()}function DHt(i,u){tf={...tf,ingressPort:i,ingressUrl:u},X$()}function gHt(i){tf={...tf,machine:i},X$()}function NHt(i){tf={...tf,daemonError:i},X$()}function OHt(i){tf={...tf,logPath:i},X$()}function OHi(i){tf={...tf,selectedHandle:i},X$()}function vM(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 ZHt(i){tf={...tf,actions:i},X$()}function ZHi(i){let u=TY(tf.sandboxes),t=fru(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 BHt(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 FHt(i){tf={...tf,sandboxes:lru(tf.sandboxes,i)},X$()}function yHt(){tf=cru(),L1i.clear()}var dHt=20,tf,L1i;var hM=N(()=>{tf=cru(),L1i=new Set});import{spawn as THt}from"child_process";function UHt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Eru(i,u=process.platform){let t=UHt(u);try{THt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var $ru=()=>{};function wru(i,u={}){let t=u.openUrl??Eru,f=_M(),l=TY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":OHi(tru(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),vM({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(vM(null),$===null||!E)return;Q1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)ZHi($.handle);else Q1i($.handle,!1),z1i(w.error)});return}case"confirmNo":vM(null);return;case"quit":if(E)E.quit();return}}var dru=N(()=>{hM();$ru()});function _ru(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 vru={};Qi(vru,{LinkApp:()=>AHt});import{Box as H1,Text as cl,useInput as PHt}from"ink";import{useSyncExternalStore as xHt}from"react";import{jsx as xf,jsxs as w5}from"react/jsx-runtime";function IHt(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 AHt(){let i=xHt(NHi,_M),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=TY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return PHt((l,c)=>{let E=_ru(l,c,i.pendingConfirm!==null);if(E!==null)wru(E)}),w5(H1,{flexDirection:"column",children:[xf(W1i,{version:K1i.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:UY.project,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),xf(H1,{width:UY.branch,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),xf(H1,{width:UY.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=IHt(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:UY.project,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),xf(H1,{width:UY.branch,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),xf(H1,{width:UY.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:uru(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 UY;var hru=N(()=>{DHi();gHi();dru();hM();UY={project:18,branch:22,status:14}});var Dru={};Qi(Dru,{runLinkCommand:()=>SHt});import{closeSync as GHt,mkdirSync as nHt,openSync as kHt,writeSync as jHt}from"fs";import{homedir as XHt}from"os";import{join as FHi}from"path";function JHt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{jHt(u,`${hHi(l)}
|
|
80857
|
+
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=MVu({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 oVu=N(()=>{VLi();JC();JHu();WHu();zHu();izi();hVu();xVu();JVu();SVu();XC();vHi();qVu();eVu()});function hHi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var K1i;var DHi=N(()=>{K1i={name:"decocms",version:"3.99.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/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 dM={};Qi(dM,{printBanner:()=>EHt,bannerLines:()=>sVu,BANNER_LINES:()=>S1i,BANNER_GRADIENT:()=>Y1i});function cHt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function sVu(i){let u=S1i.map((t,f)=>{let[l,c,E]=cHt(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 EHt(i){console.log("");for(let u of sVu(i))console.log(u);console.log("")}var S1i,Y1i;var yY=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 $Ht,Text as pVu}from"ink";import{jsx as wHt,jsxs as iru}from"react/jsx-runtime";function W1i({version:i}){return iru($Ht,{flexDirection:"column",marginTop:1,children:[S1i.map((u,t)=>wHt(pVu,{color:Y1i[t],children:u},t)),iru(pVu,{dimColor:!0,children:[" v",i]})]})}var gHi=N(()=>{yY()});function uru(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 TY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function tru(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 fru(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 BHi={};Qi(BHi,{subscribeLinkState:()=>NHi,setSelectedHandle:()=>OHi,setRemoving:()=>Q1i,setPersistedSandboxes:()=>BHt,setPendingConfirm:()=>vM,setMachine:()=>gHt,setLogPath:()=>OHt,setLinkActions:()=>ZHt,setIngress:()=>DHt,setDaemonError:()=>NHt,setClusterUrl:()=>hHt,setCluster:()=>vHt,setActionError:()=>z1i,resetLinkStateForTests:()=>yHt,removeSandboxRow:()=>ZHi,pushSandboxEvent:()=>FHt,getLinkState:()=>_M,applySandboxEvent:()=>lru});function _Ht(i){return i==="spawning"||i==="ready"||i==="failed"}function lru(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 cru(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:dHt,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 _M(){return tf}function NHi(i){return L1i.add(i),()=>L1i.delete(i)}function vHt(i){tf={...tf,cluster:i},X$()}function hHt(i){tf={...tf,clusterUrl:i},X$()}function DHt(i,u){tf={...tf,ingressPort:i,ingressUrl:u},X$()}function gHt(i){tf={...tf,machine:i},X$()}function NHt(i){tf={...tf,daemonError:i},X$()}function OHt(i){tf={...tf,logPath:i},X$()}function OHi(i){tf={...tf,selectedHandle:i},X$()}function vM(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 ZHt(i){tf={...tf,actions:i},X$()}function ZHi(i){let u=TY(tf.sandboxes),t=fru(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 BHt(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 FHt(i){tf={...tf,sandboxes:lru(tf.sandboxes,i)},X$()}function yHt(){tf=cru(),L1i.clear()}var dHt=20,tf,L1i;var hM=N(()=>{tf=cru(),L1i=new Set});import{spawn as THt}from"child_process";function UHt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function Eru(i,u=process.platform){let t=UHt(u);try{THt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var $ru=()=>{};function wru(i,u={}){let t=u.openUrl??Eru,f=_M(),l=TY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":OHi(tru(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),vM({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(vM(null),$===null||!E)return;Q1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)ZHi($.handle);else Q1i($.handle,!1),z1i(w.error)});return}case"confirmNo":vM(null);return;case"quit":if(E)E.quit();return}}var dru=N(()=>{hM();$ru()});function _ru(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 vru={};Qi(vru,{LinkApp:()=>AHt});import{Box as H1,Text as cl,useInput as PHt}from"ink";import{useSyncExternalStore as xHt}from"react";import{jsx as xf,jsxs as w5}from"react/jsx-runtime";function IHt(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 AHt(){let i=xHt(NHi,_M),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=TY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return PHt((l,c)=>{let E=_ru(l,c,i.pendingConfirm!==null);if(E!==null)wru(E)}),w5(H1,{flexDirection:"column",children:[xf(W1i,{version:K1i.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:UY.project,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),xf(H1,{width:UY.branch,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),xf(H1,{width:UY.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=IHt(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:UY.project,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),xf(H1,{width:UY.branch,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),xf(H1,{width:UY.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:uru(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 UY;var hru=N(()=>{DHi();gHi();dru();hM();UY={project:18,branch:22,status:14}});var Dru={};Qi(Dru,{runLinkCommand:()=>SHt});import{closeSync as GHt,mkdirSync as nHt,openSync as kHt,writeSync as jHt}from"fs";import{homedir as XHt}from"os";import{join as FHi}from"path";function JHt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{jHt(u,`${hHi(l)}
|
|
80858
80858
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(hHi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function KHt(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 SHt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??FHi(XHt(),"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=FHi(t,"sandboxes");E=J1i({path:X1i(t),managedSandboxRoot:w});let d=await n4i({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await KHt(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(() => (hru(),vru)),{pushSandboxEvent:B,setCluster:F,setClusterUrl:y,setDaemonError:T,setIngress:U,setLogPath:I,setMachine:j,setPersistedSandboxes:A}=await Promise.resolve().then(() => (hM(),BHi));nHt(t,{recursive:!0});let n=FHi(t,"link.log");c=kHt(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=JHt(T,c),g(O(Z),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:g}=await Promise.resolve().then(() => (yY(),dM));g(i.version??"0.0.0")}$();let h=process.env.DECOCMS_LINK_MANAGED!=="1",D=await aVu({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(() => (hM(),BHi));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{GHt(c)}catch{}$()}}var gru=N(()=>{qLi();oVu();vHi()});var IHi={};Qi(IHi,{resolveDevLinkClusterUrl:()=>zHt,populateDevLinkToxiProxy:()=>yru,isDevLinkToxiProxyEnabled:()=>LHt,ensureDevLinkToxiProxy:()=>CHt,buildDevLinkToxiProxyConfig:()=>Bru,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Oru,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Zru});function LHt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function yHi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Bru(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=yHi(i.apiPort,"apiPort"),f=yHi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=yHi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Oru,proxyName:Zru,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 zHt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function THi(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 xHi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Fru(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Fru(i.cause)}async function UHi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${xHi(l)}`,{cause:l})}}async function yru(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await UHi(u,"reset",t,{method:"POST"});await THi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await UHi(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 THi(c,"populate",l)}async function QHt(i,u){let t=`${i.apiUrl}/version`;try{await u6(async()=>{let f=await UHi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(WHt)});await THi(f,"readiness check",t)},{maxAttempts:YHt,minTimeout:Nru,maxTimeout:Nru,multiplier:1,jitter:0,isRetriable:(f)=>!Fru(f)})}catch(f){let l=f instanceof J6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${xHi(l)}`,{cause:l})}}async function HHt(i){if(i===null)return"";return await new Response(i).text()}async function PHi(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}): ${xHi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,HHt(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 bHt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await PHi(["rm","-f",t],{ignoreFailure:!0}),await PHi(["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 RHt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await PHi(["rm","-f",t],{ignoreFailure:!0})}async function CHt(i){let u=Bru(i),t=i.startDaemon??bHt,f=i.stopDaemon??(i.startDaemon===void 0?RHt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await QHt(u,l),await yru(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 Oru="ToxiProxy",Zru="dev_link_studio",YHt=20,Nru=100,WHt=100;var AHi=N(()=>{Bl()});var Tru={};Qi(Tru,{migrateBetterAuth:()=>GHi});import{getMigrations as MHt}from"better-auth/db";import{sso as qHt}from"@better-auth/sso";import{organization as VHt}from"@decocms/better-auth/plugins";import{admin as rHt,apiKey as mHt,jwt as eHt,magicLink as aHt,mcp as oHt,openAPI as sHt}from"better-auth/plugins";import{emailOTP as pHt}from"better-auth/plugins/email-otp";async function GHi(i){let t={database:IC(i||z2()),plugins:[VHt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),rHt(),mHt(),eHt(),sHt(),oHt({loginPage:"/login"}),qHt(),aHt({sendMagicLink:async()=>{}}),pHt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await MHt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var nHi=N(()=>{zE()});var kHi={};Qi(kHi,{up:()=>ibt,down:()=>ubt});import{sql as V_}from"kysely";async function ibt(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 ubt(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 Uru=()=>{};var jHi={};Qi(jHi,{up:()=>tbt,down:()=>fbt});import{sql as Pru}from"kysely";async function tbt(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(Pru`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Pru`CURRENT_TIMESTAMP`)).execute()}async function fbt(i){await i.schema.dropTable("organization_settings").execute()}var xru=()=>{};var XHi={};Qi(XHi,{up:()=>lbt,down:()=>cbt});async function lbt(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 cbt(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:()=>Ebt,down:()=>$bt});async function Ebt(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 $bt(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 KHi={};Qi(KHi,{up:()=>wbt,down:()=>dbt});async function wbt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function dbt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var SHi={};Qi(SHi,{up:()=>vbt,down:()=>hbt});import{sql as _bt}from"kysely";async function vbt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",_bt`text`).execute()}async function hbt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var Iru=()=>{};var YHi={};Qi(YHi,{up:()=>Dbt,down:()=>gbt});async function Dbt(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 gbt(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 WHi={};Qi(WHi,{up:()=>Nbt,down:()=>Obt});import{sql as DM}from"kysely";async function Nbt(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(DM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(DM`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(DM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(DM`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(DM`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 Obt(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 Aru=()=>{};var LHi={};Qi(LHi,{up:()=>Bbt,down:()=>Fbt});import{sql as Zbt}from"kysely";async function Bbt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Fbt(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(Zbt`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 Gru=()=>{};var zHi={};Qi(zHi,{up:()=>ybt,down:()=>Tbt});import{sql as H1i}from"kysely";async function ybt(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 Tbt(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 nru=()=>{};var QHi={};Qi(QHi,{up:()=>Ubt,down:()=>Pbt});async function Ubt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function Pbt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var HHi={};Qi(HHi,{up:()=>xbt,down:()=>Ibt});import{sql as b1i}from"kysely";async function xbt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await b1i`
|
|
80859
80859
|
UPDATE gateways
|
|
80860
80860
|
SET tool_selection_mode = CASE
|
|
@@ -84299,7 +84299,7 @@ ${l}`:f}}catch{let t=u.split(`
|
|
|
84299
84299
|
Return ONLY valid JSON with this shape:
|
|
84300
84300
|
{"title":"Short imperative commit title (max 72 chars)","body":"1-3 sentence PR description explaining what changed and why"}
|
|
84301
84301
|
|
|
84302
|
-
Use sentence case for the title. No markdown fences.`;var ip0=N(()=>{Cf();ca()});function XI4(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:null}function JI4(i){if(!i||i.includes(".."))return!1;return jI4.test(i)}function up0(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!JI4(u))return null;let t=XI4(i.props);if(t)return{resolveType:u,payload:{props:t}};let{__resolveType:f,...l}=i;return{resolveType:u,payload:l}}function tp0(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${encodeURIComponent(u)}`}var jI4;var fp0=N(()=>{jI4=/^[\w./@-]+$/});function lp0(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 cp0(i,u,t,f){if(!f.connectionId)throw new ib("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 ib(ZE);await PQ({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(_)=>{let v=_ instanceof Error?_.message:ZE;throw new ib(v)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await xQ(f.connectionId,f.owner,f.name,i.db,i.vault),w=hxi(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 ib;var Ep0=N(()=>{L9();v5u();vFi();ib=class ib extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function SI4(i){if(!i||i.length>255||i.includes("..")||i.startsWith("/")||i.endsWith("/")||i.endsWith(".lock")||!KI4.test(i))throw Error(`Invalid branch name: ${i}`)}function ub(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(LI4)])}function tb(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=tb(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"?QI4(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 QI4(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 wp0(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 HI4(i){return dp0.includes(i)}var KI4,YI4=524288,WI4=65536,LI4=1e4,$p0=2000,zI4,V8,dp0,_p0=()=>{let i=new Hu;return i.use("/:virtualMcpId/:branch/*",zI4),i.post("/:virtualMcpId/:branch/write",(u)=>Rc(u,"/_sandbox/write",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>Rc(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>Rc(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>Rc(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>Rc(u,"/_sandbox/read",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>Rc(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:ub(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||!HI4(t))return u.json({error:`step must be one of: ${dp0.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Bi(u.var.meshContext),c=$Fi(f.virtualMcpMetadata);try{await dFi({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 rs0(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($p0)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout($p0)])})),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=tb(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.meshContext;try{await h5u(E,t,f);let $=lp0(l,c);if($)await cp0(E,t,f,$)}catch($){if($ instanceof ib)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=tb(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.meshContext;try{await h5u(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",Fw({maxSize:YI4,onError:(u)=>u.json({error:"Payload too large"},413,V8)}),async(u)=>{let t=tb(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]=os0(w)&&_?[w,d]:await Promise.all([wp0(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),wp0(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await ps0(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=tb(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",Fw({maxSize:WI4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=tb(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=up0(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $;try{$=await fetch(tp0(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 vp0=N(()=>{sf();LH();wK();qs0();d3();cPi();TQ();Vs0();ms0();g1u();UQ();ip0();fp0();Ep0();KI4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;zI4=Ms0(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{SI4(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=AH({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"};dp0=["clone","install","start"]});var hp0=(i)=>{let u=new Hu;if(u.use("*",pJ),u.route("/",kPi()),u.route("/",be0()),u.route("/",dxi()),u.route("/tools",zs0()),u.route("/",Ys0()),u.route("/",Ts0({kvStorage:i.kvStorage})),u.route("/",Fs0()),u.route("/fs",ks0({getConnection:i.getNatsConnection})),u.route("/sandbox",_p0()),u.route("/",Xs0()),u.route("/deco-sites",XPi()),u.route("/sso",uPi()),u.route("/",_xi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",Xe0()),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",RFi()),u.route("/mcp/self",wxi()),u.route("/mcp",qFi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var Dp0=N(()=>{sf();S3u();Je0();Q3u();KPi();Re0();J3u();ys0();Us0();js0();Be();Lwu();VFi();c5u();Js0();Ws0();E5u();Qs0();$5u();CFi();vp0()});async function gp0(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 O5u(i){try{i?.clear?.()}catch{}}async function Np0({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=Lhu(i),$=BAi(E.sub),w=Wb(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{O5u(d),O5u(w),O5u($)}}var Op0=N(()=>{xAi()});function bI4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function Zp0(){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(Z5u(),503);if(!l.natsPublicUrl)return u.json(Z5u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(Z5u(),503)}let c=f5(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await Np0({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:NMu(c),userId:f,allowedConnectionTypes:bI4(l.natsPublicUrl)})}return u.json(OMu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var Z5u=()=>({error:"link session unavailable"});var Bp0=N(()=>{sf();xt();TQi();Op0()});async function MI4(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 qI4(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 VI4(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)},RI4),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 rI4(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<Fp0){await Zt(yp0,{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<Fp0){await Zt(yp0,{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 RI4=90000,CI4=15000,Tp0=()=>{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=AH({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)})},CI4);Z.onAbort(()=>{B.abort(),clearInterval(F)});try{if(O&&h){if(await MI4(v,d)){await qI4({ctx:t,runner:v,claimName:d,userId:f,projectRef:w,sandboxProviderKind:h}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await VI4({stream:Z,claimName:d,runner:v,signal:B.signal})||B.signal.aborted)return;await rI4({stream:Z,runner:v,claimName:d,signal:B.signal})}finally{clearInterval(F)}})}),i},Fp0=60000,yp0=500;var Up0=N(()=>{sf();wK();d3();Bl();cPi();Xa();TQ();Ldi();Ud()});function eI4(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 aI4(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(mI4)});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 mI4=1e4,oI4=async(i,u)=>{if(!i.get("meshContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},Pp0=()=>{let i=new Hu;return i.use("*",oI4),i.get("/",async(u)=>{let t=yu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await aI4(f,l);return u.json({apps:eI4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var xp0=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 $A4(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 wA4(i,u,t){try{return JSON.parse(i)}catch{throw new Gp0(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function dA4(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:wA4(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 _A4(i){let u=i.map((t)=>{let f=t.function.parameters?sw(t.function.parameters):sw({type:"object",properties:{}});return[t.function.name,ft({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function vA4(i){if(!i)return;return{openai:{response_format:i}}}function hA4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ip0(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 Ap0(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var sI4=256,pI4,iA4,uA4,tA4,fA4,lA4,cA4,EA4,Gp0,np0,kp0;var jp0=N(()=>{Cf();sf();wK();pI4=Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string(),description:Lu.string().optional(),parameters:Lu.record(Lu.string(),Lu.unknown()).optional()})}),iA4=Lu.object({id:Lu.string(),type:Lu.literal("function"),function:Lu.object({name:Lu.string(),arguments:Lu.string()})}),uA4=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(iA4).optional()}),Lu.object({role:Lu.literal("tool"),content:Lu.string(),tool_call_id:Lu.string()})]),tA4=Lu.object({type:Lu.literal("text")}),fA4=Lu.object({type:Lu.literal("json_object")}),lA4=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()})}),cA4=Lu.union([tA4,fA4,lA4]),EA4=Lu.object({model:Lu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:Lu.array(uA4),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(pI4).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:cA4.optional(),user:Lu.string().optional()});Gp0=class Gp0 extends Error{constructor(i){super(i);this.name="MessageConversionError"}};np0=new Hu;np0.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=EA4.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=$A4(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=dA4(c.messages),h=c.tools?_A4(c.tools):void 0,D=vA4(c.response_format),g=hA4(),O=Math.floor(Date.now()/1000);if(c.stream)return Wd(i,async(Z)=>{let B=Ip0(_,v,h,c,D,i.req.raw.signal);try{let F=yd(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>=sI4)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:Ap0(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=Ip0(_,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:Ap0(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)}});kp0=np0});function gA4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??DA4}}var Xp0,DA4="https://ph.studio.decocms.com",Jp0;var Kp0=N(()=>{sf();$ri();Bg();HE();xt();Kwu();Xp0=new Hu;Xp0.get("/",(i)=>{let u={theme:tf0(),...rO().logo&&{logo:rO().logo},...Id()&&{internalUrl:P4i()},...yu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!yu().firecrawlApiKey,auth:JV0(),posthog:gA4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!Id()&&yu().sandboxProviderKind==="agent-sandbox"}};return i.json({success:!0,config:u})});Jp0=Xp0});function Sp0(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals")}var Yp0,NA4,OA4,Wp0;var Lp0=N(()=>{sf();n5();GQ();NW();Yp0=new Hu,NA4=["range","if-none-match","if-modified-since"],OA4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Yp0.get("/:org/files/*",async(i)=>{let u=i.get("meshContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(WH(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 Sp0(h,d),new Response(v,{status:200,headers:h})}let c=new Headers;for(let w of NA4){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 OA4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),Sp0($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});Wp0=Yp0});function bp0(i){let u=i?.connectFn??yA4,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:FA4,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(BA4,ZA4,g-1,2,0.5);await Zt(O)}}return{init(h,D){if(l)return;l=!0,c=!1;let g=D?.creds?zp0.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=Hp0.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 yA4(i){return Qp0.connect(i)}var zp0,Qp0,Hp0,ZA4=100,BA4=3000,FA4=3000;var Rp0=N(()=>{Bl();zp0=k(gO(),1),Qp0=k(yQi(),1),Hp0=k(o2(),1)});function fb(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 B5u(i,u){return`${i}.${u}`}class F5u{cache;constructor(i){this.cache=fb({ttlMs:i?.ttlMs??TA4,maxSize:i?.maxSize??UA4})}async get(i,u){return this.cache.get(B5u(i,u))??null}async set(i,u,t){this.cache.set(B5u(i,u),t)}async invalidate(i,u){this.cache.delete(B5u(i,u))}teardown(){this.cache.clear()}}var TA4=600000,UA4=5000;var Cp0=()=>{};function Dxi(i,u){return`${i}:${u}`}function y5u(i){let u=fb({ttlMs:i?.ttlMs??PA4,maxSize:i?.maxSize??xA4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let _=t?.();if(!_)return;try{_.publish(Mp0,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(Dxi(w,d))},set(w,d,_){u.set(Dxi(w,d),_)},invalidate(w,d){u.delete(Dxi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(Mp0),(async()=>{for await(let d of E)try{let _=JSON.parse(c.decode(d.data));if(_.originId===f)continue;u.delete(Dxi(_.organizationId,_.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var Mp0="studio.ai-provider-keys.invalidate",PA4=30000,xA4=5000;var qp0=()=>{};class T5u{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 XA4(){return{name:_8,subjects:[`${mQi}.>`],storage:x_.StorageType.File,max_age:GA4,max_bytes:kA4,max_msgs_per_subject:jA4,discard:x_.DiscardPolicy.Old,retention:x_.RetentionPolicy.Limits,duplicate_window:nA4,num_replicas:1}}class mp0{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 Vp0(i){let u=rp0.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function YA4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,AA4().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 U5u{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=XA4();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=YA4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=Cqu(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let _=performance.now(),v=BY(d,{runId:u}),h=performance.now()-_;if(EM().record(h),$M().add(1,{"org.id":f??"unknown"}),SA4?.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?Vp0(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(),$(),KA4)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=BY(u,{runId:i,dedup:t});if(EM().record(performance.now()-l),$M().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:Vp0(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 _=vdi({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_,rp0,IA4=(i)=>{let u;return()=>u??=i()},AA4,GA4=86400000000000,nA4=120000000000,kA4=4294967296,jA4=500000,JA4,KA4,SA4;var ep0=N(()=>{gtu();Ntu();n1i();Q1();sQi();x_=k(o2(),1),rp0=k(gO(),1),AA4=IA4(()=>Mt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));JA4=process.env.STREAM_ENCODE_TRACE==="1",KA4=process.env.DECOPILOT_STREAM_TRACE==="1";SA4=JA4?new mp0:null});function ap0(i){let u=i.createFetch??WA4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return P5u;let c=f5(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return P5u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return P5u}}}var P5u,WA4=(i,u)=>C2({connection:i,firstFrameTimeoutMs:u});var op0=N(()=>{LC();oC();P5u={online:!1,capabilities:[]}});async function*LA4(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 sp0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:zA4}));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*LA4(_)}}var zA4=45000;var pp0=N(()=>{LC();oC()});function iit(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:QA4}));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 uit(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:cVu(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 QA4=45000;var tit=N(()=>{LC();lHi();oC()});function fit(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 lit(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 cit(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,Aq(i,t))}async function HA4(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 cit(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await cit(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,Aq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function Eit(i,u){for(let{event:t}of i)await HA4(t,u)}var $it=N(()=>{wf()});function wit(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function dit(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class x5u{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)})},bA4)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=fit(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=lit(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}),RA4.has(l.type))vit().add(1,{"org.id":l.orgId});else if(CA4.has(l.type)&&c?.status.tag==="running")vit().add(-1,{"org.id":l.orgId})}return f}react(i){return Eit(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=dit({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!wit({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) ...`),MA4().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 bA4=300000,_it=600000,RA4,CA4,hit=(i)=>{let u;return()=>u??=i()},vit,MA4;var Dit=N(()=>{$it();Q1();RA4=new Set(["RUN_STARTED","RUN_RESUMED"]),CA4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),vit=hit(()=>Mt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),MA4=hit(()=>Mt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});function gxi(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 git=N(()=>{wf()});class I5u{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 qA4,rm as Nxi}from"fs/promises";import{join as Oxi}from"path";async function Zxi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-VA4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await dK(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await Nit(i,l,u);else if(!l.startsWith(".")){let c=Oxi(i,l),E=await dK(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await Nit(c,w,u)}if((await dK(c)).length===0)await Nxi(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function Nit(i,u,t){let f=0,l=Oxi(i,u),c=await dK(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=Oxi(l,$),d=await dK(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=Oxi(w,v);await Nxi(D,{recursive:!0,force:!0}),f++}}if((await dK(w)).length===0)await Nxi(w,{recursive:!0,force:!0})}if((await dK(l)).length===0)await Nxi(l,{recursive:!0,force:!0});return f}async function dK(i){try{return(await qA4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var VA4=30;var A5u=()=>{};import{DBOS as G5u,SchedulerMode as rA4}from"@dbos-inc/dbos-sdk";async function eA4(){let i=[ad(),eS(),wD()],u=0;for(let t of i)try{u+=await Zxi(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 aA4(i,u){await G5u.runStep(()=>eA4(),{name:"monitoringRetention"})}function Zit(){if(Oit)return;Oit=!0;let i=G5u.registerWorkflow(aA4,{name:"monitoringRetentionWorkflow"});G5u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:mA4,mode:rA4.ExactlyOncePerIntervalWhenActive})}var mA4="23 4 * * *",Oit=!1;var Bit=N(()=>{Jw();A5u()});function Fit(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 Iiu(i.db,u,f.role);return l.boundAuth=xiu({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new JZ(t,void 0,l.boundAuth,f.role,"self"),pwi(l,{id:f.orgId,slug:f.orgSlug}),l}}var yit=N(()=>{KZ();Ne()});import{EventEmitter as oA4}from"events";var n5u;var Tit=N(()=>{UO();n5u=new oA4;n5u.on("request",(i)=>{o_(i)})});function Uit(){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=lb(h.params.name),g=h.params.arguments||{},O=Object.keys(g).map((B)=>lb(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}${lb(h.method)}${v1.reset}`}}catch{}}let $=lb(l);if(l.startsWith("/mcp/conn_")){let _=l.split("/")[2]??"";$=`/mcp/${v1.mcp}${lb(_.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=pA4(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=sA4(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}`);n5u.emit("request",{method:f,path:lb(l),status:v,duration:_,timestamp:new Date})}}}var v1,sA4=(i)=>{if(i>=500)return v1.serverError;if(i>=400)return v1.clientError;if(i>=300)return v1.redirect;return v1.ok},pA4=(i)=>{return v1[i]||v1.reset},lb=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Pit=N(()=>{UO();Tit();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 Git}from"crypto";import{mkdir as iG4,readdir as uG4,rm as xit,stat as nit}from"fs/promises";import{join as j5u,relative as tG4}from"path";import{z as I0}from"zod";function jit(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return j5u(fG4,u)}function Xit(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function k5u(i,u){let t=jit(i),f=Xit(u);return j5u(t,f)}function lG4(i,u,t,f){let l=yu().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return Git("sha256",l).update(c).digest("hex")}function Ait(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=lG4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${Xit(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function Jit(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${Git("md5","etag").update(f).digest("hex")}"`}async function Kit(i,u,t,f,l){try{let c=await uG4(i,{withFileTypes:!0});for(let E of c){let $=j5u(i,E.name),d=tG4(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 Kit($,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 nit($);l.objects.push({key:d,size:_.size,lastModified:_.mtime.toISOString(),etag:Jit($,_.mtime,_.size)})}catch{}}}}catch{}}function Sit(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,_=jit(f);await iG4(_,{recursive:!0});let v={objects:[],commonPrefixes:new Set};await Kit(_,_,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=k5u(f,c.key),$=await nit(E);return{contentType:H3u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:Jit(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??Iit;return{url:Ait(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??Iit;return{url:Ait(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=k5u(f,c.key);try{return await xit(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=k5u(f,w);try{await xit(d),E.push(w)}catch(_){$.push({key:w,message:_ instanceof Error?_.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function X5u(i,u,t){let f=Sit(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 O3({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),ch(l,c,i,"mcp:dev-assets")}async function Yit(i,u,t,f){let c=Sit(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 fG4="./data/assets",Iit=3600,kit,Wit;var Lit=N(()=>{xt();ba();sf();nq();jQ();mE();KPi();kit=new Hu;kit.all("/",async(i)=>{let u=i.get("meshContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return X5u(i.req.raw,u,f)});Wit=kit});var zit={};Qi(zit,{mountDevRoutes:()=>cG4});function cG4(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 X5u(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 Yit($,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",Wit);let t=new Hu;t.use("*",Yd({mountPath:"/api/dev-assets"})),t.route("/",JPi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var Qit=N(()=>{sf();K3u();KPi();Lit()});var Hit=N(()=>{riu();miu();gB()});var Bxi=N(()=>{Hit()});var Rit={};Qi(Rit,{streamAgent:()=>bit,createDecopilotClient:()=>$G4});async function EG4(i){let{parseJsonEventStream:u,uiMessageChunkSchema:t}=await Promise.resolve().then(() => (Cf(),_tu));return u({stream:i,schema:t}).pipeThrough(new TransformStream({transform(f,l){if(!f.success)throw f.error;l.enqueue(f.value)}}))}async function bit(i,u,t,f,l){let{readUIMessageStream:c}=await Promise.resolve().then(() => (Cf(),_tu)),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 EG4(v.body);return c({stream:h})}function $G4(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 bit(l,f,$,c,E)}}}import{z as Tw}from"zod";function Cit(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=wG4.get(l);if(!c)continue;let E=c.map(($)=>({name:String($.name),...$.inputSchema&&{inputSchema:Tw.toJSONSchema($.inputSchema)},...$.outputSchema&&{outputSchema:Tw.toJSONSchema($.outputSchema)}}));f.__binding={const:E}}return i}var wG4,FJ6,dG4=(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"},Fxi=(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}},_G4=(i,u,t)=>{let f=Fxi(i,u,t);return new Proxy(Lz.forConnection(f),{get(l,c){if(c==="value")return i;if(c==="__type")return t;return l[c]}})},vG4=(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(() => Rit);return E(f,u.token,i,l,c)}}},J5u=(i,u)=>{if(i===null||i===void 0)return i;if(Array.isArray(i))return i.map((t)=>J5u(t,u));if(typeof i==="object"){if(dG4(i))return vG4(i,u);if(K5u(i))return _G4(i.value,u,i.__type);let t={};for(let[f,l]of Object.entries(i))t[f]=J5u(l,u);return t}return i},Mit=(i)=>{return J5u(i.state,i)};var cb=N(()=>{Bxi();wG4=new Map;FJ6=Tw.object({id:Tw.string(),title:Tw.string(),capabilities:Tw.object({vision:Tw.boolean().optional(),text:Tw.boolean().optional(),tools:Tw.boolean().optional(),reasoning:Tw.boolean().optional()}).passthrough().optional(),provider:Tw.string().optional().nullable(),limits:Tw.object({contextWindow:Tw.number().optional(),maxOutputTokens:Tw.number().optional()}).passthrough().optional()})});var hG4,qit=(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},DG4=(i,u,t)=>{let f=u.headers.get("Origin"),l=qit(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(", "))},Vit=(i,u)=>{let t=new Headers,f=i.headers.get("Origin"),l=qit(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??hG4;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})},rit=(i,u,t)=>{let f=new Headers(i.headers);return DG4(f,u,t),new Response(i.body,{status:i.status,statusText:i.statusText,headers:f})};var mit=N(()=>{hG4=["GET","HEAD","PUT","POST","DELETE","PATCH"]});function eit(i=32){let t=new Uint8Array(i);return crypto.getRandomValues(t),Array.from(t,(f)=>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[f%62]).join("")}function gG4(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 ait(i){return btoa(JSON.stringify(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function oit(i){try{let u=i.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(u))}catch{return null}}function sit(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=ait({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?oit(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=ait(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 S5u)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=oit(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(!gG4(O))return Response.json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${O}`},{status:400});let v=eit(32),h=_.token_endpoint_auth_method!=="none"?eit(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 S5u,Gh=(i)=>{if(!(i.hostname==="localhost"||i.hostname.endsWith(".localhost")||i.hostname==="127.0.0.1"))i.protocol="https:";return i};var Y5u=N(()=>{S5u=class S5u extends Error{error;errorDescription;constructor(i="invalid_grant",u){super(u??i);this.name="OAuthInvalidGrantError",this.error=i,this.errorDescription=u}}});import{AsyncLocalStorage as NG4}from"async_hooks";var pit,Ls;var W5u=N(()=>{pit=new NG4,Ls={getStore:()=>{return pit.getStore()},run:(i,u,...t)=>pit.run(i,u,...t)}});var uut="SELF",Txi=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},tut=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},iut="::",fut=(i)=>{let u=i.indexOf(iut);if(u===-1)return null;let t=i.substring(0,u),f=i.substring(u+iut.length);return[t,f]},OG4=(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]},lut=(i)=>{if(Txi(i))return[];return Object.keys(i)},ZG4=(i,u)=>{if(Txi(i))return i.events;let t=i[u];if(!t)return[];if(tut(t))return t.events;return Object.keys(t)},yxi=(i,u,t)=>{if(i===uut){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},BG4=(i,u,t)=>{let f=u;if(Txi(i)){let c=[];for(let E of i.events){let $=fut(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]=$,_=yxi(w,f,t);if(!_)continue;c.push({eventType:d,publisher:_})}return c}let l=[];for(let c of lut(i)){let E=yxi(c,f,t);if(!E)continue;let $=ZG4(i,c);for(let w of $)l.push({eventType:w,publisher:E})}return l},FG4=(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},yG4=(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},TG4=(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},UG4=async(i,u,t,f,l)=>{let c=f;if(Txi(i)){let _=new Set;for(let h of i.events){let D=fut(h);if(!D)continue;let[g,O]=D,Z=yxi(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 lut(i)){let v=yxi(_,c,l);if(v)E.set(v,_)}let $=FG4(u),w=[];for(let[_,v]of $){let h=E.get(_);if(!h)continue;let D=i[h];if(!D)continue;if(tut(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=yG4(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 TG4(d)},cut;var L5u=N(()=>{cb();cut={subscriptions:BG4,execute:UG4,parseCron:OG4}});function PG4(i,u){let t=Fxi("self",{meshUrl:i,token:u});return Lz.forConnection(t)}function xG4(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 Eut(i,u,t){return async(f)=>{if(!i)throw Error("createAgent: missing meshUrl in MESH_REQUEST_CONTEXT");let l=PG4(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(xG4(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 z5u=N(()=>{cb();Bxi()});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},$ut=(i)=>{let u=i.runtimeContext.env.MESH_REQUEST_CONTEXT;return{connectionId:u?.connectionId,meshUrl:u?.meshUrl,token:u?.token}},IG4=({events:i,configuration:{state:u,scopes:t,onChange:f,onInstall:l}={}}={})=>{let c=u?Cit(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}=$ut(E);await l(E.runtimeContext.env,{createAgent:Eut(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:T3i,outputSchema:U3i,execute:async(E)=>{let $=E.runtimeContext.env,w=$.MESH_REQUEST_CONTEXT?.state,{connectionId:d}=$ut(E);return cut.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??[]]})}})]},wut=(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(...IG4({...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 O3;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 Uxi=N(()=>{siu();mE();nq();jQ();cb();L5u();W5u();z5u();L5u();z5u()});import{decodeJwt as dut}from"jose";var AG4=({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??{}}},GG4=({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=dut(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=dut(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=Mit($),AG4({env:c,server:u,url:f}),c},nG4,vut=(i)=>{let u=wut(i),t=i.cors??nG4,f=i.oauth,l=f?sit(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 Vit(E,t??{});let d=GG4({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 rit(_,E,t??{});return _}}};var hut=N(()=>{cb();mit();Y5u();Y5u();W5u();Uxi();Uxi();cb();Bxi();nG4={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 Q5u}from"zod";function XG4(i,u){let t=r8({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:TH,outputSchema:UH,execute:async({context:$})=>{let w={limit:$.limit,offset:$.offset,cursor:$.cursor,tags:$.tags,categories:$.categories,where:$.where},d=`${u}:${JSON.stringify(w)}`,_=Dut.get(d);if(_)return _;let v=await i.listPublic(u,w);return Dut.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:mJ,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:Q5u.object({versions:Q5u.array(mJ.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:bUi,outputSchema:RUi,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:Q5u.object({}),outputSchema:PH,execute:async()=>{return await i.getFilters(u,{publicOnly:!0})}});return[t,c,f,l,E]}function gut(i){let u=i.db,t=new zL(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=XG4(t,c.id),$=vut({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 kG4=3600000,jG4=500,Dut;var Nut=N(()=>{hut();Uxi();toi();Ol();Dut=fb({ttlMs:kG4,maxSize:jG4,updateRecencyOnGet:!0})});import{sql as JG4}from"kysely";import{randomUUID as Out}from"crypto";import{z as KG4}from"zod";async function YG4(i){let u=new Date().toISOString(),t=Out(),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:Out(),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 JG4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function WG4(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 LG4(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","=",eJ).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($):But;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?Zut:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:Zut,rateLimitWindow:SG4,rateLimitMax:But}}async function zG4(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 QG4(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 Fut(i){let{db:u,db:t}=i,f=new QL(t),l=new HL(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 WG4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await LG4(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 zG4(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 _=bC0.safeParse(d);if(!_.success)return c.json({error:"Invalid publish request payload",details:KG4.treeifyError(_.error)},400);let v=await QG4(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 YG4({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 Zut=!0,SG4="hour",But=100;var yut=N(()=>{e4();wf();xH();foi();loi();Ol()});var Tut={};Qi(Tut,{createPublishRequestHandler:()=>Fut,createPublicMCPHandler:()=>gut});var Uut=N(()=>{Nut();yut()});var v1u={};Qi(v1u,{watchHandler:()=>Gut,getProxyDispatch:()=>CG4,createApp:()=>oG4});import{readFileSync as HG4}from"fs";import{PrometheusSerializer as bG4}from"@opentelemetry/exporter-prometheus";import{DBOS as Qs}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as rG4,oAuthProtectedResourceMetadata as mG4}from"better-auth/plugins";async function RG4(i){let u=i.connect(),t;try{t=await Promise.race([u,xut(Put)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),xut(Put)]),t.release(),!0}catch{return t.release(!0),!1}}function xut(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function CG4(){if(!H5u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return H5u}async function MG4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${$t0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function qG4(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 oG4(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 F5u,E,$,w,d,_,v=null;if(i.disableNats)E=y5u(),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:Ji}=await e.read();if(Ji)break}}catch{}finally{e.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{v=bp0();let M=yu().natsCredsPath,e;if(M)try{e=HG4(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 Ji=_oi()?new uei({getJetStream:()=>v.getJetStream()}):null;Ji?.init().catch(()=>{}),f=Ji;let Li=new llu({getJetStream:()=>v.getJetStream()});Li.init().catch(()=>{}),l=Li,E=y5u({getConnection:()=>v.getConnection()}),$=new T5u({getConnection:()=>v.getConnection()}),w=new U5u({getConnection:()=>v.getConnection(),getJetStream:()=>v.getJetStream()}),d=ap0({getConnection:()=>v.getConnection()}),_=iit({getConnection:()=>v.getConnection()});let oi=uit({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()},hV0(v),v.onReady(()=>{Ji?.init().catch((zu)=>{console.error("[McpListCache] Deferred init failed:",zu)}),Li.init().catch((zu)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",zu)}),E.start(),Q50(()=>v.getConnection()),w.init().catch((zu)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",zu)})})}if(Eb)await Eb();tei(f),clu(l);let D={storage:new VL(u.db),streamBuffer:w,sseHub:A6},g=new x5u(D),O=new Cr(u.db),Z=new I5u(O);Z.start(),$.start((M)=>{Pdi(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)}),Eb=async()=>{await g.stopAll(),g.dispose(),Z.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),H50(),l.teardown(),tei(null),clu(null)};let B=new Hu;if(B.use("*",uri({enabled:(M)=>BW(M,"debug")==="1"})),B.use("*",ILi),B.use("/*",Vt0({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("*",Uit());B.use("*",async(M,e)=>{if(await e(),ZC(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(Kw.HEALTH,(M)=>{if(t)return M.json({status:"shutting_down"},503);return M.json({status:"ok"})}),B.get(Kw.HEALTH_LIVE,(M)=>{return M.json({status:"ok"})}),B.get(Kw.HEALTH_READY,async(M)=>{if(t)return M.json({status:"shutting_down"},503);let e={};if(e.postgres={status:await RG4(u.pool)?"up":"down"},v)e.nats=v.isConnected()?{status:"up"}:{status:"down"};else e.nats={status:"down"};let Ji=e.postgres.status==="up",Li=Ji?200:503;return M.json({status:Ji?"ready":"not_ready",services:e},Li)}),B.get(Kw.METRICS,async(M)=>{try{let e=await kLi.collect(),Ji=VG4.serialize(e.resourceMetrics);return M.text(Ji,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",Jp0),B.route("/api/auth/custom",KV0),B.all("/api/auth/*",async(M)=>{return await w4.handler(M.req.raw)});let F=h70();F.use("/.well-known/oauth-protected-resource/mcp/:connectionId",sJ),F.use("/mcp/:connectionId/.well-known/oauth-protected-resource",sJ),B.route("/",F),B.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Oe),B.route("/",O70()),B.use("/oauth-proxy/:connectionId/*",sJ),B.all("/oauth-proxy/:connectionId/*",Iut);let y=async(M)=>{let Ji=await eG4()(M.req.raw),Li=await Ji.json();return Response.json(Li,Ji)};B.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",sJ),B.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",y);let T=async(M)=>{let Ji=await aG4()(M.req.raw),Li=await Ji.json();return Response.json(Li,Ji)};B.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",T);let U=wV0({ttlMs:120000}),I=await s20({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);iau({db:u.db,baseUrl:H_()});let A=h$i(u.db),n=new Yr(u.db),q=Fit({db:u.db});p1u({storage:A,meshContextFactory:q}),Xtu({meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6},prepareLinkWorkFn:Be0,workPublisher:_}),Atu({dispatchRunFn:Oe0,meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6}});let S=new VL(u.db);QF0({getJetStream:()=>v?.getJetStream()??null,getJetStreamManager:async()=>{let M=v?.getConnection();return M?await Aut.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 Ji=await S.completeRunIfNotCompleted(M,e);return gxi(A6,e,M,Ji),Ji},markRunRequiresAction:async(M,e)=>{let Ji=await S.requiresActionIfInProgress(M,e);return gxi(A6,e,M,Ji),Ji},markRunFailed:async(M,e,Ji,Li)=>{let oi=await S.markRunFailed(M,e,Ji,Li);return gxi(A6,e,M,oi),oi},persistTitle:(M,e,Ji)=>S.update(M,e,{title:Ji}),onTitleUpdated:async({runId:M,orgId:e,title:Ji})=>{let Li=await S.get(M,e).catch(()=>null);A6.emit(e,A5(M,Li?.status??"in_progress",{title:Ji,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:Ji,usage:Li})=>{ou.capture({distinctId:Ji,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:Ji,reason:Li,kind:oi})=>{ou.capture({distinctId:Ji,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)}}),ck0({meshContextFactory:q,systemDatabaseUrl:WLi(yu().databaseUrl,yu().databasePgSsl),streamBuffer:w}),Zit(),uau();let Y=async(M,e,Ji)=>{let Li=await A.findById(M,e);if(!Li)throw Error("Automation not found");return tlu({automationId:Li.id,organizationId:Li.organization_id,triggerId:null})},V=new zH(A,({automation:M,trigger:e,contextMessages:Ji,idempotencyKey:Li})=>Ha({automationId:M.id,organizationId:M.organization_id,triggerId:e.id,contextMessages:Ji},{idempotencyKey:Li})),L=[ad(),eS(),wD()];for(let M of L)Zxi(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(PLi(M.req.path))return e();let Ji={measure:async(oi,iu)=>{s3(M,oi);try{return await iu()}finally{Mw(M,oi)}}},Li=await Y9.create(M.req.raw,{timings:Ji});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/*",pJ),B.use("/api/:org/v1/*",pJ),B.use("/api/:org/files/*",pJ),B.use("*",async(M,e)=>{let Ji=M.req.path;if(Ji.startsWith("/api/org-sso/")||Ji.startsWith("/api/auth/")||Ji.startsWith("/api/tools/management")||Ji.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("/",uPi()),B.route("/api/org-sso",$i),B.get("/api/tools/management",(M)=>{return M.json({tools:fri,grouped:VO()})}),B.use("/mcp/*",async(M,e)=>{s3(M,"mcp");try{return await e()}finally{Mw(M,"mcp")}});let li=async(M,e)=>{let Ji=M.var.meshContext;if(!Ji.auth.user?.id&&!Ji.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}=(Qit(),jxi(zit));M(B,li)}let ii=new Hu;ii.use("*",Yd({mountPath:"/mcp"})),ii.route("/",RFi()),B.route("/mcp",ii);let m=new Hu;m.use("*",Yd({mountPath:"/mcp/self"})),m.route("/",wxi()),B.route("/mcp/self",m);let Oi=new Hu;Oi.use("*",Yd({mountPath:"/mcp"})),Oi.route("/",qFi()),B.route("/mcp",Oi),B.use("/api/:org/models/*",async(M,e)=>{s3(M,"llm_models");try{return await e()}finally{Mw(M,"llm_models")}});let _i=X3u({cancelBroadcast:$,streamBuffer:w,runRegistry:g,linkStatusProbe:d});if(B.route("/api",_i),v!=null)H5u=sp0({getConnection:()=>v?.getConnection()??null});B.route("/api",Zp0()),B.get("/api/links/me",async(M)=>{try{let e=M.req.header("authorization")??"",Ji=/^Bearer\s+(.+)$/i.exec(e),Li=null;if(Ji){let iu=(Ji[1]??"").trim();Li=await gp0(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/*",pJ),B.route("/api",Wp0);let Ii=new Hu;Ii.use("*",Yd({mountPath:"/api"})),Ii.route("/",dxi()),B.route("/api",Ii),B.route("/api",kp0);let Vi=new Hu;Vi.use("*",Yd({mountPath:"/api"})),Vi.route("/",_xi({tokenStorage:n,automationEventDispatcher:V})),B.route("/api",Vi);let Wi=new Lr(u.db),ri=new Hu;ri.use("*",Yd({mountPath:"/api"})),ri.route("/",kPi()),B.route("/api",ri),B.route("/api/deco-sites",We0()),B.route("/api/deco-apps",Pp0());let gi=new Hu;gi.use("*",Yd({mountPath:"/api/deco-sites"})),gi.route("/",XPi()),B.route("/api/deco-sites",gi);let Xi=new Hu;Xi.use("*",Yd({mountPath:"/api/vm-events"})),Xi.route("/",Tp0()),B.route("/api/vm-events",Xi);let{createPublishRequestHandler:Gi,createPublicMCPHandler:Di}=await Promise.resolve().then(() => (Uut(),Tut)),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",sJ),B.post("/org/:orgRef/registry/publish-request",fi),B.use("/org/:orgSlug/registry/*",sJ),B.all("/org/:orgSlug/registry/*",ji),B.post("/api/:org/registry/publish-request",fi),B.all("/api/:org/registry/*",ji);let a=hp0({kvStorage:Wi,runRegistry:g,streamBuffer:w,sseHub:A6,cancelBroadcast:$,tokenStorage:n,automationEventDispatcher:V,mountDevAssets:G5(),mcpAuth:li,oauthProxyHandler:Iut,watchHandler:Gut,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(Pe0),Object.assign(B,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([A6.stop(),Eb?Promise.resolve(Eb()).finally(()=>{Eb=null}):Promise.resolve()]),v)await v.drain().catch((M)=>console.error("[shutdown] NATS drain error:",M));console.log("[shutdown] Flushing telemetry..."),await b3().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:a1u,minPollingIntervalMs:o1u}),await Qs.registerQueue(s_,{partitionQueue:!0,concurrency:jtu}),await Qs.registerQueue(f7,{partitionQueue:!0,concurrency:Itu}),await Qs.registerQueue(IO,{partitionQueue:!0,concurrency:lk0}),await Y3u(A),await Promise.allSettled(["automations-gate","automations-global"].map((M)=>Qs.deleteQueue(M))),await s1u(u.pool),jc0().catch((M)=>{console.error("[studio-pack-backfill] failed:",M)}),tau().catch((M)=>{console.error("[org-fs] public-sets boot sync kick failed:",M)})}})}var Aut,Put=5000,H5u=null,Eb=null,Iut=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 kz(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(wt0(E.connection_url))try{let n=await MG4(l,E.organization_id),q=qG4(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 jz(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})},Gut=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),_()})})})},VG4,eG4=()=>mG4(w4),aG4=()=>rG4(w4);var h1u=N(()=>{xt();fau();HE();NW();wf();sf();_ci();rt0();tri();c8();Ne();Awu();zE();Q1();e4();Kwu();Lwu();Te0();J3u();o5();i3i();K3u();xe0();S3u();Dp0();Bp0();Up0();Q3u();xp0();CFi();Be();jp0();VFi();$5u();Kp0();Lp0();E5u();c5u();h4i();mci();Rp0();Vw();j$i();Qr();$lu();Cp0();qp0();ep0();op0();pp0();tit();Dit();git();Poi();noi();Bit();lEi();A5u();Jw();W3u();la();Ptu();lEi();n3u();rai();mai();yit();FW();Pit();wK();Awu();nQ();xdi();Aut=k(o2(),1);VG4=new bG4});var Xut={};Qi(Xut,{resolveClientDir:()=>ln4,resolveAssetPathWithTraversalCheck:()=>jut,isPathWithinDirectory:()=>kut,createAssetHandler:()=>cn4});import{resolve as Hs,dirname as sG4,join as pG4,extname as in4,basename as un4,sep as nut}from"path";function tn4(i,u){if(i===u||un4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${nut}assets${nut}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function kut(i,u){let t=Hs(u),f=Hs(i);return f===t||f.startsWith(t+"/")}function jut({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=Hs(u,t);if(!kut(f,u))return null;return f}function ln4(i,u="../client"){let t=new URL(i),f=sG4(t.pathname);return Hs(f,u)}function cn4(i={}){let{env:u="production",clientDir:t=fn4,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=jut({requestPath:$,clientDir:t});if(!w)return null;let d=pG4(w,"index.html"),_=Hs(t,"index.html"),v=c.headers.get("accept"),D=v?.includes("text/html")||v?.includes("*/*")&&["",".html"].includes(in4(w))?[d,_]:[];for(let g of[w,...D])try{let O=Bun.file(g);if(await O.exists())return new Response(O,{headers:tn4(g,_)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var fn4="./dist/client";var Jut=()=>{};var Kut={};Qi(Kut,{tryUpgradePreviewWs:()=>hn4,tryHandlePreviewHttp:()=>vn4,previewWebSocketHandler:()=>Dn4,parsePreviewBaseDomain:()=>_n4,isPreviewWsData:()=>Pxi,extractHandleFromHost:()=>b5u});function wn4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function dn4(){return new Response($n4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function _n4(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 b5u(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 vn4(i,u){let t=b5u(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(vJ)&&wn4(i))return dn4();return l.headers.delete(vJ),l}function Rs(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Pxi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function hn4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=b5u(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 En4=256,$n4='<!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>',Dn4;var Sut=N(()=>{$1u();Dn4={open(i){let u=i.data;if(!Pxi(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(!Pxi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=En4){bs(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!Pxi(u))return;bs(i,u,1000,"")}}});var Wut={};Qi(Wut,{bootstrapDevLinkSession:()=>Un4});import{existsSync as gn4}from"fs";import{chmod as Nn4,mkdir as On4,rename as Zn4,writeFile as Bn4}from"fs/promises";import{dirname as Fn4,join as Yut}from"path";function yn4(i){return Yut(i,"dev-link")}function Tn4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Yut(yn4(i),"session.json")}async function Un4(i,u){let t=Tn4(i),f=qt().db,l=Id()?await Wa():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(gn4(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 On4(Fn4(t),{recursive:!0});let $=`${t}.tmp`;return await Bn4($,JSON.stringify(E,null,2),{mode:384}),await Nn4($,384),await Zn4($,t),{path:t,userSub:l.id}}var Lut=N(()=>{zE();c8();Bg()});var Rn4={};import{existsSync as jn4}from"fs";function Rut(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 Sn4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(Kn4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function bn4(i){let u;try{u=await Pn4.create({systemDatabaseUrl:Rut(P3.databaseUrl,P3.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 Ixi(i){if(but)return;but=!0,console.log(`
|
|
84302
|
+
Use sentence case for the title. No markdown fences.`;var ip0=N(()=>{Cf();ca()});function XI4(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:null}function JI4(i){if(!i||i.includes(".."))return!1;return jI4.test(i)}function up0(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!JI4(u))return null;let t=XI4(i.props);if(t)return{resolveType:u,payload:{props:t}};let{__resolveType:f,...l}=i;return{resolveType:u,payload:l}}function tp0(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${encodeURIComponent(u)}`}var jI4;var fp0=N(()=>{jI4=/^[\w./@-]+$/});function lp0(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 cp0(i,u,t,f){if(!f.connectionId)throw new ib("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 ib(ZE);await PQ({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(_)=>{let v=_ instanceof Error?_.message:ZE;throw new ib(v)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await xQ(f.connectionId,f.owner,f.name,i.db,i.vault),w=hxi(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 ib;var Ep0=N(()=>{L9();v5u();vFi();ib=class ib extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function SI4(i){if(!i||i.length>255||i.includes("..")||i.startsWith("/")||i.endsWith("/")||i.endsWith(".lock")||!KI4.test(i))throw Error(`Invalid branch name: ${i}`)}function ub(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(LI4)])}function tb(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=tb(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"?QI4(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 QI4(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 wp0(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 HI4(i){return dp0.includes(i)}var KI4,YI4=524288,WI4=65536,LI4=1e4,$p0=2000,zI4,V8,dp0,_p0=()=>{let i=new Hu;return i.use("/:virtualMcpId/:branch/*",zI4),i.post("/:virtualMcpId/:branch/write",(u)=>Rc(u,"/_sandbox/write",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>Rc(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>Rc(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>Rc(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>Rc(u,"/_sandbox/read",{forwardJsonBody:!0,signal:ub(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>Rc(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:ub(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||!HI4(t))return u.json({error:`step must be one of: ${dp0.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Bi(u.var.meshContext),c=$Fi(f.virtualMcpMetadata);try{await dFi({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 rs0(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($p0)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout($p0)])})),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=tb(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.meshContext;try{await h5u(E,t,f);let $=lp0(l,c);if($)await cp0(E,t,f,$)}catch($){if($ instanceof ib)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=tb(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.meshContext;try{await h5u(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",Fw({maxSize:YI4,onError:(u)=>u.json({error:"Payload too large"},413,V8)}),async(u)=>{let t=tb(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]=os0(w)&&_?[w,d]:await Promise.all([wp0(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),wp0(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await ps0(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=tb(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",Fw({maxSize:WI4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=tb(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=up0(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $;try{$=await fetch(tp0(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 vp0=N(()=>{sf();LH();wK();qs0();d3();cPi();TQ();Vs0();ms0();g1u();UQ();ip0();fp0();Ep0();KI4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;zI4=Ms0(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{SI4(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=AH({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"};dp0=["clone","install","start"]});var hp0=(i)=>{let u=new Hu;if(u.use("*",pJ),u.route("/",kPi()),u.route("/",be0()),u.route("/",dxi()),u.route("/tools",zs0()),u.route("/",Ys0()),u.route("/",Ts0({kvStorage:i.kvStorage})),u.route("/",Fs0()),u.route("/fs",ks0({getConnection:i.getNatsConnection})),u.route("/sandbox",_p0()),u.route("/",Xs0()),u.route("/deco-sites",XPi()),u.route("/sso",uPi()),u.route("/",_xi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",Xe0()),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",RFi()),u.route("/mcp/self",wxi()),u.route("/mcp",qFi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var Dp0=N(()=>{sf();S3u();Je0();Q3u();KPi();Re0();J3u();ys0();Us0();js0();Be();Lwu();VFi();c5u();Js0();Ws0();E5u();Qs0();$5u();CFi();vp0()});async function gp0(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 O5u(i){try{i?.clear?.()}catch{}}async function Np0({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=Lhu(i),$=BAi(E.sub),w=Wb(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{O5u(d),O5u(w),O5u($)}}var Op0=N(()=>{xAi()});function bI4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function Zp0(){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(Z5u(),503);if(!l.natsPublicUrl)return u.json(Z5u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(Z5u(),503)}let c=f5(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await Np0({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:NMu(c),userId:f,allowedConnectionTypes:bI4(l.natsPublicUrl)})}return u.json(OMu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var Z5u=()=>({error:"link session unavailable"});var Bp0=N(()=>{sf();xt();TQi();Op0()});async function MI4(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 qI4(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 VI4(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)},RI4),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 rI4(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<Fp0){await Zt(yp0,{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<Fp0){await Zt(yp0,{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 RI4=90000,CI4=15000,Tp0=()=>{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=AH({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)})},CI4);Z.onAbort(()=>{B.abort(),clearInterval(F)});try{if(O&&h){if(await MI4(v,d)){await qI4({ctx:t,runner:v,claimName:d,userId:f,projectRef:w,sandboxProviderKind:h}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await VI4({stream:Z,claimName:d,runner:v,signal:B.signal})||B.signal.aborted)return;await rI4({stream:Z,runner:v,claimName:d,signal:B.signal})}finally{clearInterval(F)}})}),i},Fp0=60000,yp0=500;var Up0=N(()=>{sf();wK();d3();Bl();cPi();Xa();TQ();Ldi();Ud()});function eI4(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 aI4(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(mI4)});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 mI4=1e4,oI4=async(i,u)=>{if(!i.get("meshContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},Pp0=()=>{let i=new Hu;return i.use("*",oI4),i.get("/",async(u)=>{let t=yu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await aI4(f,l);return u.json({apps:eI4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var xp0=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 $A4(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 wA4(i,u,t){try{return JSON.parse(i)}catch{throw new Gp0(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function dA4(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:wA4(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 _A4(i){let u=i.map((t)=>{let f=t.function.parameters?sw(t.function.parameters):sw({type:"object",properties:{}});return[t.function.name,ft({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function vA4(i){if(!i)return;return{openai:{response_format:i}}}function hA4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ip0(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 Ap0(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var sI4=256,pI4,iA4,uA4,tA4,fA4,lA4,cA4,EA4,Gp0,np0,kp0;var jp0=N(()=>{Cf();sf();wK();pI4=Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string(),description:Lu.string().optional(),parameters:Lu.record(Lu.string(),Lu.unknown()).optional()})}),iA4=Lu.object({id:Lu.string(),type:Lu.literal("function"),function:Lu.object({name:Lu.string(),arguments:Lu.string()})}),uA4=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(iA4).optional()}),Lu.object({role:Lu.literal("tool"),content:Lu.string(),tool_call_id:Lu.string()})]),tA4=Lu.object({type:Lu.literal("text")}),fA4=Lu.object({type:Lu.literal("json_object")}),lA4=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()})}),cA4=Lu.union([tA4,fA4,lA4]),EA4=Lu.object({model:Lu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:Lu.array(uA4),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(pI4).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:cA4.optional(),user:Lu.string().optional()});Gp0=class Gp0 extends Error{constructor(i){super(i);this.name="MessageConversionError"}};np0=new Hu;np0.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=EA4.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=$A4(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=dA4(c.messages),h=c.tools?_A4(c.tools):void 0,D=vA4(c.response_format),g=hA4(),O=Math.floor(Date.now()/1000);if(c.stream)return Wd(i,async(Z)=>{let B=Ip0(_,v,h,c,D,i.req.raw.signal);try{let F=yd(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>=sI4)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:Ap0(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=Ip0(_,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:Ap0(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)}});kp0=np0});function gA4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??DA4}}var Xp0,DA4="https://ph.studio.decocms.com",Jp0;var Kp0=N(()=>{sf();$ri();Bg();HE();xt();Kwu();Xp0=new Hu;Xp0.get("/",(i)=>{let u={theme:tf0(),...rO().logo&&{logo:rO().logo},...Id()&&{internalUrl:P4i()},...yu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!yu().firecrawlApiKey,auth:JV0(),posthog:gA4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!Id()&&yu().sandboxProviderKind==="agent-sandbox"}};return i.json({success:!0,config:u})});Jp0=Xp0});function Sp0(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals")}var Yp0,NA4,OA4,Wp0;var Lp0=N(()=>{sf();n5();GQ();NW();Yp0=new Hu,NA4=["range","if-none-match","if-modified-since"],OA4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Yp0.get("/:org/files/*",async(i)=>{let u=i.get("meshContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(WH(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 Sp0(h,d),new Response(v,{status:200,headers:h})}let c=new Headers;for(let w of NA4){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 OA4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),Sp0($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});Wp0=Yp0});function bp0(i){let u=i?.connectFn??yA4,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:FA4,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(BA4,ZA4,g-1,2,0.5);await Zt(O)}}return{init(h,D){if(l)return;l=!0,c=!1;let g=D?.creds?zp0.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=Hp0.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 yA4(i){return Qp0.connect(i)}var zp0,Qp0,Hp0,ZA4=100,BA4=3000,FA4=3000;var Rp0=N(()=>{Bl();zp0=k(gO(),1),Qp0=k(yQi(),1),Hp0=k(o2(),1)});function fb(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 B5u(i,u){return`${i}.${u}`}class F5u{cache;constructor(i){this.cache=fb({ttlMs:i?.ttlMs??TA4,maxSize:i?.maxSize??UA4})}async get(i,u){return this.cache.get(B5u(i,u))??null}async set(i,u,t){this.cache.set(B5u(i,u),t)}async invalidate(i,u){this.cache.delete(B5u(i,u))}teardown(){this.cache.clear()}}var TA4=600000,UA4=5000;var Cp0=()=>{};function Dxi(i,u){return`${i}:${u}`}function y5u(i){let u=fb({ttlMs:i?.ttlMs??PA4,maxSize:i?.maxSize??xA4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let _=t?.();if(!_)return;try{_.publish(Mp0,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(Dxi(w,d))},set(w,d,_){u.set(Dxi(w,d),_)},invalidate(w,d){u.delete(Dxi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(Mp0),(async()=>{for await(let d of E)try{let _=JSON.parse(c.decode(d.data));if(_.originId===f)continue;u.delete(Dxi(_.organizationId,_.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var Mp0="studio.ai-provider-keys.invalidate",PA4=30000,xA4=5000;var qp0=()=>{};class T5u{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 XA4(){return{name:_8,subjects:[`${mQi}.>`],storage:x_.StorageType.File,max_age:GA4,max_bytes:kA4,max_msgs_per_subject:jA4,discard:x_.DiscardPolicy.Old,retention:x_.RetentionPolicy.Limits,duplicate_window:nA4,num_replicas:1}}class mp0{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 Vp0(i){let u=rp0.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function YA4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,AA4().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 U5u{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=XA4();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=YA4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=Cqu(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let _=performance.now(),v=BY(d,{runId:u}),h=performance.now()-_;if(EM().record(h),$M().add(1,{"org.id":f??"unknown"}),SA4?.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?Vp0(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(),$(),KA4)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=BY(u,{runId:i,dedup:t});if(EM().record(performance.now()-l),$M().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:Vp0(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 _=vdi({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_,rp0,IA4=(i)=>{let u;return()=>u??=i()},AA4,GA4=86400000000000,nA4=120000000000,kA4=4294967296,jA4=500000,JA4,KA4,SA4;var ep0=N(()=>{gtu();Ntu();n1i();Q1();sQi();x_=k(o2(),1),rp0=k(gO(),1),AA4=IA4(()=>Mt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));JA4=process.env.STREAM_ENCODE_TRACE==="1",KA4=process.env.DECOPILOT_STREAM_TRACE==="1";SA4=JA4?new mp0:null});function ap0(i){let u=i.createFetch??WA4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return P5u;let c=f5(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return P5u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return P5u}}}var P5u,WA4=(i,u)=>C2({connection:i,firstFrameTimeoutMs:u});var op0=N(()=>{LC();oC();P5u={online:!1,capabilities:[]}});async function*LA4(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 sp0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:zA4}));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*LA4(_)}}var zA4=45000;var pp0=N(()=>{LC();oC()});function iit(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:QA4}));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 uit(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:cVu(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 QA4=45000;var tit=N(()=>{LC();lHi();oC()});function fit(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 lit(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 cit(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,Aq(i,t))}async function HA4(i,u){let{storage:t,sseHub:f}=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 l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at}));return}case"STEP_COMPLETED":f.emit(i.orgId,e6i(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await cit(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await cit(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});let l=await t.get(i.taskId,i.orgId);f.emit(i.orgId,A5(i.taskId,"failed",{virtualMcpId:l?.virtual_mcp_id??void 0,createdBy:l?.created_by,triggerId:l?.trigger_id,title:l?.title,branch:l?.branch??null,createdAt:l?.created_at,updatedAt:l?.updated_at})),f.emit(i.orgId,Aq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function Eit(i,u){for(let{event:t}of i)await HA4(t,u)}var $it=N(()=>{wf()});function wit(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function dit(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class x5u{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)})},bA4)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=fit(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=lit(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}),RA4.has(l.type))vit().add(1,{"org.id":l.orgId});else if(CA4.has(l.type)&&c?.status.tag==="running")vit().add(-1,{"org.id":l.orgId})}return f}react(i){return Eit(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=dit({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!wit({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) ...`),MA4().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 bA4=300000,_it=600000,RA4,CA4,hit=(i)=>{let u;return()=>u??=i()},vit,MA4;var Dit=N(()=>{$it();Q1();RA4=new Set(["RUN_STARTED","RUN_RESUMED"]),CA4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),vit=hit(()=>Mt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),MA4=hit(()=>Mt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});function gxi(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 git=N(()=>{wf()});class I5u{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 qA4,rm as Nxi}from"fs/promises";import{join as Oxi}from"path";async function Zxi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-VA4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await dK(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await Nit(i,l,u);else if(!l.startsWith(".")){let c=Oxi(i,l),E=await dK(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await Nit(c,w,u)}if((await dK(c)).length===0)await Nxi(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function Nit(i,u,t){let f=0,l=Oxi(i,u),c=await dK(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=Oxi(l,$),d=await dK(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=Oxi(w,v);await Nxi(D,{recursive:!0,force:!0}),f++}}if((await dK(w)).length===0)await Nxi(w,{recursive:!0,force:!0})}if((await dK(l)).length===0)await Nxi(l,{recursive:!0,force:!0});return f}async function dK(i){try{return(await qA4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var VA4=30;var A5u=()=>{};import{DBOS as G5u,SchedulerMode as rA4}from"@dbos-inc/dbos-sdk";async function eA4(){let i=[ad(),eS(),wD()],u=0;for(let t of i)try{u+=await Zxi(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 aA4(i,u){await G5u.runStep(()=>eA4(),{name:"monitoringRetention"})}function Zit(){if(Oit)return;Oit=!0;let i=G5u.registerWorkflow(aA4,{name:"monitoringRetentionWorkflow"});G5u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:mA4,mode:rA4.ExactlyOncePerIntervalWhenActive})}var mA4="23 4 * * *",Oit=!1;var Bit=N(()=>{Jw();A5u()});function Fit(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 Iiu(i.db,u,f.role);return l.boundAuth=xiu({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new JZ(t,void 0,l.boundAuth,f.role,"self"),pwi(l,{id:f.orgId,slug:f.orgSlug}),l}}var yit=N(()=>{KZ();Ne()});import{EventEmitter as oA4}from"events";var n5u;var Tit=N(()=>{UO();n5u=new oA4;n5u.on("request",(i)=>{o_(i)})});function Uit(){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=lb(h.params.name),g=h.params.arguments||{},O=Object.keys(g).map((B)=>lb(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}${lb(h.method)}${v1.reset}`}}catch{}}let $=lb(l);if(l.startsWith("/mcp/conn_")){let _=l.split("/")[2]??"";$=`/mcp/${v1.mcp}${lb(_.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=pA4(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=sA4(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}`);n5u.emit("request",{method:f,path:lb(l),status:v,duration:_,timestamp:new Date})}}}var v1,sA4=(i)=>{if(i>=500)return v1.serverError;if(i>=400)return v1.clientError;if(i>=300)return v1.redirect;return v1.ok},pA4=(i)=>{return v1[i]||v1.reset},lb=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Pit=N(()=>{UO();Tit();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 Git}from"crypto";import{mkdir as iG4,readdir as uG4,rm as xit,stat as nit}from"fs/promises";import{join as j5u,relative as tG4}from"path";import{z as I0}from"zod";function jit(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return j5u(fG4,u)}function Xit(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function k5u(i,u){let t=jit(i),f=Xit(u);return j5u(t,f)}function lG4(i,u,t,f){let l=yu().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return Git("sha256",l).update(c).digest("hex")}function Ait(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=lG4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${Xit(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function Jit(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${Git("md5","etag").update(f).digest("hex")}"`}async function Kit(i,u,t,f,l){try{let c=await uG4(i,{withFileTypes:!0});for(let E of c){let $=j5u(i,E.name),d=tG4(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 Kit($,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 nit($);l.objects.push({key:d,size:_.size,lastModified:_.mtime.toISOString(),etag:Jit($,_.mtime,_.size)})}catch{}}}}catch{}}function Sit(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,_=jit(f);await iG4(_,{recursive:!0});let v={objects:[],commonPrefixes:new Set};await Kit(_,_,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=k5u(f,c.key),$=await nit(E);return{contentType:H3u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:Jit(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??Iit;return{url:Ait(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??Iit;return{url:Ait(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=k5u(f,c.key);try{return await xit(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=k5u(f,w);try{await xit(d),E.push(w)}catch(_){$.push({key:w,message:_ instanceof Error?_.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function X5u(i,u,t){let f=Sit(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 O3({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),ch(l,c,i,"mcp:dev-assets")}async function Yit(i,u,t,f){let c=Sit(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 fG4="./data/assets",Iit=3600,kit,Wit;var Lit=N(()=>{xt();ba();sf();nq();jQ();mE();KPi();kit=new Hu;kit.all("/",async(i)=>{let u=i.get("meshContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return X5u(i.req.raw,u,f)});Wit=kit});var zit={};Qi(zit,{mountDevRoutes:()=>cG4});function cG4(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 X5u(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 Yit($,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",Wit);let t=new Hu;t.use("*",Yd({mountPath:"/api/dev-assets"})),t.route("/",JPi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var Qit=N(()=>{sf();K3u();KPi();Lit()});var Hit=N(()=>{riu();miu();gB()});var Bxi=N(()=>{Hit()});var Rit={};Qi(Rit,{streamAgent:()=>bit,createDecopilotClient:()=>$G4});async function EG4(i){let{parseJsonEventStream:u,uiMessageChunkSchema:t}=await Promise.resolve().then(() => (Cf(),_tu));return u({stream:i,schema:t}).pipeThrough(new TransformStream({transform(f,l){if(!f.success)throw f.error;l.enqueue(f.value)}}))}async function bit(i,u,t,f,l){let{readUIMessageStream:c}=await Promise.resolve().then(() => (Cf(),_tu)),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 EG4(v.body);return c({stream:h})}function $G4(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 bit(l,f,$,c,E)}}}import{z as Tw}from"zod";function Cit(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=wG4.get(l);if(!c)continue;let E=c.map(($)=>({name:String($.name),...$.inputSchema&&{inputSchema:Tw.toJSONSchema($.inputSchema)},...$.outputSchema&&{outputSchema:Tw.toJSONSchema($.outputSchema)}}));f.__binding={const:E}}return i}var wG4,FJ6,dG4=(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"},Fxi=(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}},_G4=(i,u,t)=>{let f=Fxi(i,u,t);return new Proxy(Lz.forConnection(f),{get(l,c){if(c==="value")return i;if(c==="__type")return t;return l[c]}})},vG4=(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(() => Rit);return E(f,u.token,i,l,c)}}},J5u=(i,u)=>{if(i===null||i===void 0)return i;if(Array.isArray(i))return i.map((t)=>J5u(t,u));if(typeof i==="object"){if(dG4(i))return vG4(i,u);if(K5u(i))return _G4(i.value,u,i.__type);let t={};for(let[f,l]of Object.entries(i))t[f]=J5u(l,u);return t}return i},Mit=(i)=>{return J5u(i.state,i)};var cb=N(()=>{Bxi();wG4=new Map;FJ6=Tw.object({id:Tw.string(),title:Tw.string(),capabilities:Tw.object({vision:Tw.boolean().optional(),text:Tw.boolean().optional(),tools:Tw.boolean().optional(),reasoning:Tw.boolean().optional()}).passthrough().optional(),provider:Tw.string().optional().nullable(),limits:Tw.object({contextWindow:Tw.number().optional(),maxOutputTokens:Tw.number().optional()}).passthrough().optional()})});var hG4,qit=(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},DG4=(i,u,t)=>{let f=u.headers.get("Origin"),l=qit(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(", "))},Vit=(i,u)=>{let t=new Headers,f=i.headers.get("Origin"),l=qit(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??hG4;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})},rit=(i,u,t)=>{let f=new Headers(i.headers);return DG4(f,u,t),new Response(i.body,{status:i.status,statusText:i.statusText,headers:f})};var mit=N(()=>{hG4=["GET","HEAD","PUT","POST","DELETE","PATCH"]});function eit(i=32){let t=new Uint8Array(i);return crypto.getRandomValues(t),Array.from(t,(f)=>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[f%62]).join("")}function gG4(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 ait(i){return btoa(JSON.stringify(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function oit(i){try{let u=i.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(u))}catch{return null}}function sit(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=ait({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?oit(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=ait(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 S5u)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=oit(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(!gG4(O))return Response.json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${O}`},{status:400});let v=eit(32),h=_.token_endpoint_auth_method!=="none"?eit(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 S5u,Gh=(i)=>{if(!(i.hostname==="localhost"||i.hostname.endsWith(".localhost")||i.hostname==="127.0.0.1"))i.protocol="https:";return i};var Y5u=N(()=>{S5u=class S5u extends Error{error;errorDescription;constructor(i="invalid_grant",u){super(u??i);this.name="OAuthInvalidGrantError",this.error=i,this.errorDescription=u}}});import{AsyncLocalStorage as NG4}from"async_hooks";var pit,Ls;var W5u=N(()=>{pit=new NG4,Ls={getStore:()=>{return pit.getStore()},run:(i,u,...t)=>pit.run(i,u,...t)}});var uut="SELF",Txi=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},tut=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},iut="::",fut=(i)=>{let u=i.indexOf(iut);if(u===-1)return null;let t=i.substring(0,u),f=i.substring(u+iut.length);return[t,f]},OG4=(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]},lut=(i)=>{if(Txi(i))return[];return Object.keys(i)},ZG4=(i,u)=>{if(Txi(i))return i.events;let t=i[u];if(!t)return[];if(tut(t))return t.events;return Object.keys(t)},yxi=(i,u,t)=>{if(i===uut){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},BG4=(i,u,t)=>{let f=u;if(Txi(i)){let c=[];for(let E of i.events){let $=fut(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]=$,_=yxi(w,f,t);if(!_)continue;c.push({eventType:d,publisher:_})}return c}let l=[];for(let c of lut(i)){let E=yxi(c,f,t);if(!E)continue;let $=ZG4(i,c);for(let w of $)l.push({eventType:w,publisher:E})}return l},FG4=(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},yG4=(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},TG4=(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},UG4=async(i,u,t,f,l)=>{let c=f;if(Txi(i)){let _=new Set;for(let h of i.events){let D=fut(h);if(!D)continue;let[g,O]=D,Z=yxi(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 lut(i)){let v=yxi(_,c,l);if(v)E.set(v,_)}let $=FG4(u),w=[];for(let[_,v]of $){let h=E.get(_);if(!h)continue;let D=i[h];if(!D)continue;if(tut(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=yG4(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 TG4(d)},cut;var L5u=N(()=>{cb();cut={subscriptions:BG4,execute:UG4,parseCron:OG4}});function PG4(i,u){let t=Fxi("self",{meshUrl:i,token:u});return Lz.forConnection(t)}function xG4(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 Eut(i,u,t){return async(f)=>{if(!i)throw Error("createAgent: missing meshUrl in MESH_REQUEST_CONTEXT");let l=PG4(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(xG4(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 z5u=N(()=>{cb();Bxi()});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},$ut=(i)=>{let u=i.runtimeContext.env.MESH_REQUEST_CONTEXT;return{connectionId:u?.connectionId,meshUrl:u?.meshUrl,token:u?.token}},IG4=({events:i,configuration:{state:u,scopes:t,onChange:f,onInstall:l}={}}={})=>{let c=u?Cit(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}=$ut(E);await l(E.runtimeContext.env,{createAgent:Eut(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:T3i,outputSchema:U3i,execute:async(E)=>{let $=E.runtimeContext.env,w=$.MESH_REQUEST_CONTEXT?.state,{connectionId:d}=$ut(E);return cut.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??[]]})}})]},wut=(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(...IG4({...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 O3;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 Uxi=N(()=>{siu();mE();nq();jQ();cb();L5u();W5u();z5u();L5u();z5u()});import{decodeJwt as dut}from"jose";var AG4=({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??{}}},GG4=({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=dut(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=dut(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=Mit($),AG4({env:c,server:u,url:f}),c},nG4,vut=(i)=>{let u=wut(i),t=i.cors??nG4,f=i.oauth,l=f?sit(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 Vit(E,t??{});let d=GG4({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 rit(_,E,t??{});return _}}};var hut=N(()=>{cb();mit();Y5u();Y5u();W5u();Uxi();Uxi();cb();Bxi();nG4={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 Q5u}from"zod";function XG4(i,u){let t=r8({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:TH,outputSchema:UH,execute:async({context:$})=>{let w={limit:$.limit,offset:$.offset,cursor:$.cursor,tags:$.tags,categories:$.categories,where:$.where},d=`${u}:${JSON.stringify(w)}`,_=Dut.get(d);if(_)return _;let v=await i.listPublic(u,w);return Dut.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:mJ,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:Q5u.object({versions:Q5u.array(mJ.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:bUi,outputSchema:RUi,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:Q5u.object({}),outputSchema:PH,execute:async()=>{return await i.getFilters(u,{publicOnly:!0})}});return[t,c,f,l,E]}function gut(i){let u=i.db,t=new zL(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=XG4(t,c.id),$=vut({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 kG4=3600000,jG4=500,Dut;var Nut=N(()=>{hut();Uxi();toi();Ol();Dut=fb({ttlMs:kG4,maxSize:jG4,updateRecencyOnGet:!0})});import{sql as JG4}from"kysely";import{randomUUID as Out}from"crypto";import{z as KG4}from"zod";async function YG4(i){let u=new Date().toISOString(),t=Out(),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:Out(),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 JG4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function WG4(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 LG4(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","=",eJ).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($):But;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?Zut:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:Zut,rateLimitWindow:SG4,rateLimitMax:But}}async function zG4(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 QG4(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 Fut(i){let{db:u,db:t}=i,f=new QL(t),l=new HL(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 WG4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await LG4(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 zG4(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 _=bC0.safeParse(d);if(!_.success)return c.json({error:"Invalid publish request payload",details:KG4.treeifyError(_.error)},400);let v=await QG4(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 YG4({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 Zut=!0,SG4="hour",But=100;var yut=N(()=>{e4();wf();xH();foi();loi();Ol()});var Tut={};Qi(Tut,{createPublishRequestHandler:()=>Fut,createPublicMCPHandler:()=>gut});var Uut=N(()=>{Nut();yut()});var v1u={};Qi(v1u,{watchHandler:()=>Gut,getProxyDispatch:()=>CG4,createApp:()=>oG4});import{readFileSync as HG4}from"fs";import{PrometheusSerializer as bG4}from"@opentelemetry/exporter-prometheus";import{DBOS as Qs}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as rG4,oAuthProtectedResourceMetadata as mG4}from"better-auth/plugins";async function RG4(i){let u=i.connect(),t;try{t=await Promise.race([u,xut(Put)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),xut(Put)]),t.release(),!0}catch{return t.release(!0),!1}}function xut(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function CG4(){if(!H5u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return H5u}async function MG4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${$t0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function qG4(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 oG4(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 F5u,E,$,w,d,_,v=null;if(i.disableNats)E=y5u(),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:Ji}=await e.read();if(Ji)break}}catch{}finally{e.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{v=bp0();let M=yu().natsCredsPath,e;if(M)try{e=HG4(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 Ji=_oi()?new uei({getJetStream:()=>v.getJetStream()}):null;Ji?.init().catch(()=>{}),f=Ji;let Li=new llu({getJetStream:()=>v.getJetStream()});Li.init().catch(()=>{}),l=Li,E=y5u({getConnection:()=>v.getConnection()}),$=new T5u({getConnection:()=>v.getConnection()}),w=new U5u({getConnection:()=>v.getConnection(),getJetStream:()=>v.getJetStream()}),d=ap0({getConnection:()=>v.getConnection()}),_=iit({getConnection:()=>v.getConnection()});let oi=uit({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()},hV0(v),v.onReady(()=>{Ji?.init().catch((zu)=>{console.error("[McpListCache] Deferred init failed:",zu)}),Li.init().catch((zu)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",zu)}),E.start(),Q50(()=>v.getConnection()),w.init().catch((zu)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",zu)})})}if(Eb)await Eb();tei(f),clu(l);let D={storage:new VL(u.db),sseHub:A6},g=new x5u(D),O=new Cr(u.db),Z=new I5u(O);Z.start(),$.start((M)=>{Pdi(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)}),Eb=async()=>{await g.stopAll(),g.dispose(),Z.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),H50(),l.teardown(),tei(null),clu(null)};let B=new Hu;if(B.use("*",uri({enabled:(M)=>BW(M,"debug")==="1"})),B.use("*",ILi),B.use("/*",Vt0({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("*",Uit());B.use("*",async(M,e)=>{if(await e(),ZC(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(Kw.HEALTH,(M)=>{if(t)return M.json({status:"shutting_down"},503);return M.json({status:"ok"})}),B.get(Kw.HEALTH_LIVE,(M)=>{return M.json({status:"ok"})}),B.get(Kw.HEALTH_READY,async(M)=>{if(t)return M.json({status:"shutting_down"},503);let e={};if(e.postgres={status:await RG4(u.pool)?"up":"down"},v)e.nats=v.isConnected()?{status:"up"}:{status:"down"};else e.nats={status:"down"};let Ji=e.postgres.status==="up",Li=Ji?200:503;return M.json({status:Ji?"ready":"not_ready",services:e},Li)}),B.get(Kw.METRICS,async(M)=>{try{let e=await kLi.collect(),Ji=VG4.serialize(e.resourceMetrics);return M.text(Ji,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",Jp0),B.route("/api/auth/custom",KV0),B.all("/api/auth/*",async(M)=>{return await w4.handler(M.req.raw)});let F=h70();F.use("/.well-known/oauth-protected-resource/mcp/:connectionId",sJ),F.use("/mcp/:connectionId/.well-known/oauth-protected-resource",sJ),B.route("/",F),B.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Oe),B.route("/",O70()),B.use("/oauth-proxy/:connectionId/*",sJ),B.all("/oauth-proxy/:connectionId/*",Iut);let y=async(M)=>{let Ji=await eG4()(M.req.raw),Li=await Ji.json();return Response.json(Li,Ji)};B.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",sJ),B.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",y);let T=async(M)=>{let Ji=await aG4()(M.req.raw),Li=await Ji.json();return Response.json(Li,Ji)};B.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",T);let U=wV0({ttlMs:120000}),I=await s20({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);iau({db:u.db,baseUrl:H_()});let A=h$i(u.db),n=new Yr(u.db),q=Fit({db:u.db});p1u({storage:A,meshContextFactory:q}),Xtu({meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6},prepareLinkWorkFn:Be0,workPublisher:_}),Atu({dispatchRunFn:Oe0,meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6}});let S=new VL(u.db);QF0({getJetStream:()=>v?.getJetStream()??null,getJetStreamManager:async()=>{let M=v?.getConnection();return M?await Aut.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 Ji=await S.completeRunIfNotCompleted(M,e);return gxi(A6,e,M,Ji),Ji},markRunRequiresAction:async(M,e)=>{let Ji=await S.requiresActionIfInProgress(M,e);return gxi(A6,e,M,Ji),Ji},markRunFailed:async(M,e,Ji,Li)=>{let oi=await S.markRunFailed(M,e,Ji,Li);return gxi(A6,e,M,oi),oi},persistTitle:(M,e,Ji)=>S.update(M,e,{title:Ji}),onTitleUpdated:async({runId:M,orgId:e,title:Ji})=>{let Li=await S.get(M,e).catch(()=>null);A6.emit(e,A5(M,Li?.status??"in_progress",{title:Ji,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:Ji,usage:Li})=>{ou.capture({distinctId:Ji,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:Ji,reason:Li,kind:oi})=>{ou.capture({distinctId:Ji,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)}}),ck0({meshContextFactory:q,systemDatabaseUrl:WLi(yu().databaseUrl,yu().databasePgSsl),streamBuffer:w}),Zit(),uau();let Y=async(M,e,Ji)=>{let Li=await A.findById(M,e);if(!Li)throw Error("Automation not found");return tlu({automationId:Li.id,organizationId:Li.organization_id,triggerId:null})},V=new zH(A,({automation:M,trigger:e,contextMessages:Ji,idempotencyKey:Li})=>Ha({automationId:M.id,organizationId:M.organization_id,triggerId:e.id,contextMessages:Ji},{idempotencyKey:Li})),L=[ad(),eS(),wD()];for(let M of L)Zxi(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(PLi(M.req.path))return e();let Ji={measure:async(oi,iu)=>{s3(M,oi);try{return await iu()}finally{Mw(M,oi)}}},Li=await Y9.create(M.req.raw,{timings:Ji});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/*",pJ),B.use("/api/:org/v1/*",pJ),B.use("/api/:org/files/*",pJ),B.use("*",async(M,e)=>{let Ji=M.req.path;if(Ji.startsWith("/api/org-sso/")||Ji.startsWith("/api/auth/")||Ji.startsWith("/api/tools/management")||Ji.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("/",uPi()),B.route("/api/org-sso",$i),B.get("/api/tools/management",(M)=>{return M.json({tools:fri,grouped:VO()})}),B.use("/mcp/*",async(M,e)=>{s3(M,"mcp");try{return await e()}finally{Mw(M,"mcp")}});let li=async(M,e)=>{let Ji=M.var.meshContext;if(!Ji.auth.user?.id&&!Ji.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}=(Qit(),jxi(zit));M(B,li)}let ii=new Hu;ii.use("*",Yd({mountPath:"/mcp"})),ii.route("/",RFi()),B.route("/mcp",ii);let m=new Hu;m.use("*",Yd({mountPath:"/mcp/self"})),m.route("/",wxi()),B.route("/mcp/self",m);let Oi=new Hu;Oi.use("*",Yd({mountPath:"/mcp"})),Oi.route("/",qFi()),B.route("/mcp",Oi),B.use("/api/:org/models/*",async(M,e)=>{s3(M,"llm_models");try{return await e()}finally{Mw(M,"llm_models")}});let _i=X3u({cancelBroadcast:$,streamBuffer:w,runRegistry:g,linkStatusProbe:d});if(B.route("/api",_i),v!=null)H5u=sp0({getConnection:()=>v?.getConnection()??null});B.route("/api",Zp0()),B.get("/api/links/me",async(M)=>{try{let e=M.req.header("authorization")??"",Ji=/^Bearer\s+(.+)$/i.exec(e),Li=null;if(Ji){let iu=(Ji[1]??"").trim();Li=await gp0(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/*",pJ),B.route("/api",Wp0);let Ii=new Hu;Ii.use("*",Yd({mountPath:"/api"})),Ii.route("/",dxi()),B.route("/api",Ii),B.route("/api",kp0);let Vi=new Hu;Vi.use("*",Yd({mountPath:"/api"})),Vi.route("/",_xi({tokenStorage:n,automationEventDispatcher:V})),B.route("/api",Vi);let Wi=new Lr(u.db),ri=new Hu;ri.use("*",Yd({mountPath:"/api"})),ri.route("/",kPi()),B.route("/api",ri),B.route("/api/deco-sites",We0()),B.route("/api/deco-apps",Pp0());let gi=new Hu;gi.use("*",Yd({mountPath:"/api/deco-sites"})),gi.route("/",XPi()),B.route("/api/deco-sites",gi);let Xi=new Hu;Xi.use("*",Yd({mountPath:"/api/vm-events"})),Xi.route("/",Tp0()),B.route("/api/vm-events",Xi);let{createPublishRequestHandler:Gi,createPublicMCPHandler:Di}=await Promise.resolve().then(() => (Uut(),Tut)),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",sJ),B.post("/org/:orgRef/registry/publish-request",fi),B.use("/org/:orgSlug/registry/*",sJ),B.all("/org/:orgSlug/registry/*",ji),B.post("/api/:org/registry/publish-request",fi),B.all("/api/:org/registry/*",ji);let a=hp0({kvStorage:Wi,runRegistry:g,streamBuffer:w,sseHub:A6,cancelBroadcast:$,tokenStorage:n,automationEventDispatcher:V,mountDevAssets:G5(),mcpAuth:li,oauthProxyHandler:Iut,watchHandler:Gut,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(Pe0),Object.assign(B,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([A6.stop(),Eb?Promise.resolve(Eb()).finally(()=>{Eb=null}):Promise.resolve()]),v)await v.drain().catch((M)=>console.error("[shutdown] NATS drain error:",M));console.log("[shutdown] Flushing telemetry..."),await b3().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:a1u,minPollingIntervalMs:o1u}),await Qs.registerQueue(s_,{partitionQueue:!0,concurrency:jtu}),await Qs.registerQueue(f7,{partitionQueue:!0,concurrency:Itu}),await Qs.registerQueue(IO,{partitionQueue:!0,concurrency:lk0}),await Y3u(A),await Promise.allSettled(["automations-gate","automations-global"].map((M)=>Qs.deleteQueue(M))),await s1u(u.pool),jc0().catch((M)=>{console.error("[studio-pack-backfill] failed:",M)}),tau().catch((M)=>{console.error("[org-fs] public-sets boot sync kick failed:",M)})}})}var Aut,Put=5000,H5u=null,Eb=null,Iut=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 kz(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(wt0(E.connection_url))try{let n=await MG4(l,E.organization_id),q=qG4(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 jz(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})},Gut=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),_()})})})},VG4,eG4=()=>mG4(w4),aG4=()=>rG4(w4);var h1u=N(()=>{xt();fau();HE();NW();wf();sf();_ci();rt0();tri();c8();Ne();Awu();zE();Q1();e4();Kwu();Lwu();Te0();J3u();o5();i3i();K3u();xe0();S3u();Dp0();Bp0();Up0();Q3u();xp0();CFi();Be();jp0();VFi();$5u();Kp0();Lp0();E5u();c5u();h4i();mci();Rp0();Vw();j$i();Qr();$lu();Cp0();qp0();ep0();op0();pp0();tit();Dit();git();Poi();noi();Bit();lEi();A5u();Jw();W3u();la();Ptu();lEi();n3u();rai();mai();yit();FW();Pit();wK();Awu();nQ();xdi();Aut=k(o2(),1);VG4=new bG4});var Xut={};Qi(Xut,{resolveClientDir:()=>ln4,resolveAssetPathWithTraversalCheck:()=>jut,isPathWithinDirectory:()=>kut,createAssetHandler:()=>cn4});import{resolve as Hs,dirname as sG4,join as pG4,extname as in4,basename as un4,sep as nut}from"path";function tn4(i,u){if(i===u||un4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${nut}assets${nut}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function kut(i,u){let t=Hs(u),f=Hs(i);return f===t||f.startsWith(t+"/")}function jut({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=Hs(u,t);if(!kut(f,u))return null;return f}function ln4(i,u="../client"){let t=new URL(i),f=sG4(t.pathname);return Hs(f,u)}function cn4(i={}){let{env:u="production",clientDir:t=fn4,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=jut({requestPath:$,clientDir:t});if(!w)return null;let d=pG4(w,"index.html"),_=Hs(t,"index.html"),v=c.headers.get("accept"),D=v?.includes("text/html")||v?.includes("*/*")&&["",".html"].includes(in4(w))?[d,_]:[];for(let g of[w,...D])try{let O=Bun.file(g);if(await O.exists())return new Response(O,{headers:tn4(g,_)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var fn4="./dist/client";var Jut=()=>{};var Kut={};Qi(Kut,{tryUpgradePreviewWs:()=>hn4,tryHandlePreviewHttp:()=>vn4,previewWebSocketHandler:()=>Dn4,parsePreviewBaseDomain:()=>_n4,isPreviewWsData:()=>Pxi,extractHandleFromHost:()=>b5u});function wn4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function dn4(){return new Response($n4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function _n4(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 b5u(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 vn4(i,u){let t=b5u(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(vJ)&&wn4(i))return dn4();return l.headers.delete(vJ),l}function Rs(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Pxi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function hn4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=b5u(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 En4=256,$n4='<!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>',Dn4;var Sut=N(()=>{$1u();Dn4={open(i){let u=i.data;if(!Pxi(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(!Pxi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=En4){bs(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!Pxi(u))return;bs(i,u,1000,"")}}});var Wut={};Qi(Wut,{bootstrapDevLinkSession:()=>Un4});import{existsSync as gn4}from"fs";import{chmod as Nn4,mkdir as On4,rename as Zn4,writeFile as Bn4}from"fs/promises";import{dirname as Fn4,join as Yut}from"path";function yn4(i){return Yut(i,"dev-link")}function Tn4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Yut(yn4(i),"session.json")}async function Un4(i,u){let t=Tn4(i),f=qt().db,l=Id()?await Wa():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(gn4(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 On4(Fn4(t),{recursive:!0});let $=`${t}.tmp`;return await Bn4($,JSON.stringify(E,null,2),{mode:384}),await Nn4($,384),await Zn4($,t),{path:t,userSub:l.id}}var Lut=N(()=>{zE();c8();Bg()});var Rn4={};import{existsSync as jn4}from"fs";function Rut(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 Sn4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(Kn4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function bn4(i){let u;try{u=await Pn4.create({systemDatabaseUrl:Rut(P3.databaseUrl,P3.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 Ixi(i){if(but)return;but=!0,console.log(`
|
|
84303
84303
|
[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{Hn4(),xxi.markShuttingDown();let c=Number(process.env.SHUTDOWN_DRAIN_MS??Math.floor(t*0.6));await Zt(c),await Qn4.stop(!0);let E=Cs.executorID;await Cs.shutdown(),await bn4(E),await xxi.shutdown()}catch(c){console.error("[shutdown] Error during shutdown:",c),l=1}clearTimeout(f),process.exit(l)}var P3,Cs,Pn4,xn4,In4,An4,Gn4,nn4,Cut,kn4,zut,Xn4,Jn4,Kn4,Yn4,Wn4,Ln4,R5u,C5u,zn4,Mut,Qut,xxi,M5u,Hut,Qn4,Hn4,but=!1;var qut=N(async()=>{Bl();Keu();xt();Q1();Heu();P3=yu();GQu();({DBOS:Cs,DBOSClient:Pn4}=await import("@dbos-inc/dbos-sdk"));xn4=[h5,s_,f7,IO],In4=P3.dispatchRole==="worker"?xn4:P3.dispatchRole==="api"?[]:void 0;Cs.setConfig(Jeu({systemDatabaseUrl:Rut(P3.databaseUrl,P3.databasePgSsl),poolSize:Number(process.env.DBOS_POOL_SIZE??5),executorID:P3.podName,listenQueues:In4}));({createApp:An4}=await Promise.resolve().then(() => (h1u(),v1u))),{isServerPath:Gn4}=await Promise.resolve().then(() => (h4i(),_Qu)),{createAssetHandler:nn4,resolveClientDir:Cut}=await Promise.resolve().then(() => (Jut(),Xut)),kn4=P3.port,zut=Cut(import.meta.url,"../client"),Xn4=jn4(zut)?zut:Cut(import.meta.url,"../dist/client"),Jn4=nn4({clientDir:Xn4,isServerPath:Gn4}),Kn4={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};({parsePreviewBaseDomain:Yn4,tryHandlePreviewHttp:Wn4,tryUpgradePreviewWs:Ln4,previewWebSocketHandler:R5u,isPreviewWsData:C5u}=await Promise.resolve().then(() => (Sut(),Kut))),{getOrInitSharedRunner:zn4}=await Promise.resolve().then(() => (Xa(),ln0)),Mut=Yn4(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),Qut={baseDomain:Mut??"",getRunner:zn4},xxi=await An4(),M5u=process.env.DBOS_CONDUCTOR_KEY?.trim(),Hut=process.env.DBOS_CONDUCTOR_URL?.trim();await Cs.launch({...M5u?{conductorKey:M5u}:{},...M5u&&Hut?{conductorURL:Hut}:{}});console.log(`[dbos] application version: ${Cs.applicationVersion}`);await xxi.initDbos();if(!P3.isCli){let{bannerLines:i}=await Promise.resolve().then(() => (yY(),dM));console.log("");for(let u of i())console.log(u)}Qn4=Bun.serve({idleTimeout:0,port:kn4,hostname:"0.0.0.0",fetch:async(i,u)=>{if(Mut){let f=await Ln4(i,u,Qut);if(f===void 0)return;if(f)return f;let l=await Wn4(i,Qut);if(l)return l}let t=await Jn4(i);if(t)return Sn4(t);return xxi.fetch(i,{server:u})},websocket:{open(i){if(C5u(i.data))R5u.open(i)},message(i,u){if(C5u(i.data))R5u.message(i,u)},close(i){if(C5u(i.data))R5u.close(i)}},development:!1}),Hn4=Qeu();if(P3.localMode)Promise.resolve().then(() => (Bg(),UFi)).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(() => (Lut(),Wut)),l=P3.baseUrl??`http://localhost:${P3.port}`,c=await f(P3.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(),UFi));u()}catch{}});process.on("SIGTERM",()=>Ixi("SIGTERM"));process.on("SIGINT",()=>Ixi("SIGINT"));process.on("SIGHUP",()=>Ixi("SIGHUP"));process.on("unhandledRejection",(i)=>{console.error("[process] Unhandled rejection:",i)});process.on("uncaughtException",(i)=>{console.error("[process] Uncaught exception:",i),Ixi("uncaughtException")})});var q5u={};Qi(q5u,{startServer:()=>qn4,interceptConsoleForTui:()=>Mn4});function Cn4(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function Mn4(){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(`
|
|
84304
84304
|
`)){let $=Cn4(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 qn4(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});UM(),await qut().then(() => Rn4),PM(`http://localhost:${t.port}`)}var V5u=N(()=>{fCi();UO();$Ci()});import{parseArgs as Vn4}from"util";import{homedir as Ms}from"os";import{join as Axi}from"path";function qs(i){if(i.noTui)return!1;return i.isTty===!0}var{values:v4,positionals:$b}=Vn4({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(`
|
|
84305
84305
|
Deco CMS \u2014 Open-source control plane for your AI agents
|