decocms 4.310.4 → 4.310.6
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-DJonhVdG.js → AlertCircle-DFJYUri_.js} +1 -1
- package/dist/client/assets/{AreaChart-DsFq7END.js → AreaChart-B-tv7QJQ.js} +1 -1
- package/dist/client/assets/{ArrowLeft-Bkz7SIKi.js → ArrowLeft-B69osMji.js} +1 -1
- package/dist/client/assets/{ArrowUp-BKaFS8mD.js → ArrowUp-Ce9W5-DT.js} +1 -1
- package/dist/client/assets/{Check-mD-DtqN0.js → Check-BsuPEhe7.js} +1 -1
- package/dist/client/assets/{CheckCircle-DTmy61fU.js → CheckCircle-BjZsrOXi.js} +1 -1
- package/dist/client/assets/{ChevronDown-D94RcoKZ.js → ChevronDown-DeK6rkVD.js} +1 -1
- package/dist/client/assets/{ChevronRight-8NqQFgiZ.js → ChevronRight-DT_4AEzY.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-CQT9TKC8.js → ChevronSelectorVertical-BgCpIuaE.js} +1 -1
- package/dist/client/assets/{ChevronUp-DBUTHzIQ.js → ChevronUp-Cppxk5s5.js} +1 -1
- package/dist/client/assets/{Copy01-BEjgitsb.js → Copy01-D04vSx3O.js} +1 -1
- package/dist/client/assets/{CreditCard01-CusOOy0h.js → CreditCard01-1ZnUVJrj.js} +1 -1
- package/dist/client/assets/{DotsVertical-DSuVzBIM.js → DotsVertical-BjWqgC8F.js} +1 -1
- package/dist/client/assets/{Download01-D_GdLnvJ.js → Download01-B7ZEiIfc.js} +1 -1
- package/dist/client/assets/{Eye-C27bayV3.js → Eye-CzLxQK_G.js} +1 -1
- package/dist/client/assets/{FilterLines-Dg1EUluK.js → FilterLines-C8wAvz5u.js} +1 -1
- package/dist/client/assets/{GitBranch01-Be1KJS_N.js → GitBranch01-dX_1jD2V.js} +1 -1
- package/dist/client/assets/{Globe01-elRBc4qm.js → Globe01-BqGcmMHR.js} +1 -1
- package/dist/client/assets/{Globe04-hf2s5ZRq.js → Globe04-BPXU1eCZ.js} +1 -1
- package/dist/client/assets/{HardDrive-V-YshFPu.js → HardDrive-u95EYKbF.js} +1 -1
- package/dist/client/assets/{Image01-1g5B7KFt.js → Image01-BttSSYWW.js} +1 -1
- package/dist/client/assets/{Key01-Blwt5-Vc.js → Key01-BegLXSRW.js} +1 -1
- package/dist/client/assets/{LinkExternal01-GYYCkFOK.js → LinkExternal01-Di0b5Zl5.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-liaICEVO.js → LockUnlocked01-DfKr7bN9.js} +1 -1
- package/dist/client/assets/{LogOut01-DrDG6ZD1.js → LogOut01-DLiOYO4l.js} +1 -1
- package/dist/client/assets/{Monitor01-bg-hm9zg.js → Monitor01-wGRQJfXZ.js} +1 -1
- package/dist/client/assets/{Package-DGJJy_vX.js → Package-D4pN8vKX.js} +1 -1
- package/dist/client/assets/{Palette-D6ptnsAV.js → Palette-U25Jgy4I.js} +1 -1
- package/dist/client/assets/{Play-Bjj-PlEA.js → Play-jgJ85faV.js} +1 -1
- package/dist/client/assets/{Plus-BYa4csM-.js → Plus-1G_og8WC.js} +1 -1
- package/dist/client/assets/{SearchLg-t2Psufi0.js → SearchLg-DD_OVTFV.js} +1 -1
- package/dist/client/assets/{SearchMd-Dn_XhLLa.js → SearchMd-BNiyCrAF.js} +1 -1
- package/dist/client/assets/{Settings02-DXOK36dI.js → Settings02-CLq8hgTw.js} +1 -1
- package/dist/client/assets/{Share07-D286I9hj.js → Share07-CIGKkhkQ.js} +1 -1
- package/dist/client/assets/{Shield01-CwFsR19F.js → Shield01-BnqZ8aVa.js} +1 -1
- package/dist/client/assets/{Stars01-DsKmZqgX.js → Stars01-BPMO6tst.js} +1 -1
- package/dist/client/assets/{Stars02-DHmErj5u.js → Stars02-BNbO1fCl.js} +1 -1
- package/dist/client/assets/{Sun-BPJfSfF8.js → Sun-Dkvqgcm2.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-BKtlhVyx.js → SwitchHorizontal01-BUvBakuW.js} +1 -1
- package/dist/client/assets/{Tool01-Qv8lG32L.js → Tool01-CVixHudG.js} +1 -1
- package/dist/client/assets/{Tool02-AD8agPSM.js → Tool02-B1Rll7DS.js} +1 -1
- package/dist/client/assets/{Trash01-Buijt4Q5.js → Trash01-B3nUnN0y.js} +1 -1
- package/dist/client/assets/{TrendUp01-fqZEA7e3.js → TrendUp01-DS0su2gw.js} +1 -1
- package/dist/client/assets/{Upload01-F98BnZk1.js → Upload01-rkRgYQDx.js} +1 -1
- package/dist/client/assets/{User01-Cr4UiHek.js → User01-B9Xtz4nN.js} +1 -1
- package/dist/client/assets/{UserSquare-C_C3DpjB.js → UserSquare-CoZv-lpR.js} +1 -1
- package/dist/client/assets/{Users01-9Nx4ozac.js → Users01-tNF-ixeW.js} +1 -1
- package/dist/client/assets/{Users03-OlV7vDNK.js → Users03-DGGc-VCI.js} +1 -1
- package/dist/client/assets/{XCircle-DfbmzAj0.js → XCircle-C3-B8tUH.js} +1 -1
- package/dist/client/assets/{XClose-4GnIpYr0.js → XClose-CkXjWrKT.js} +1 -1
- package/dist/client/assets/{YAxis-DBTDSLNG.js → YAxis-CVWuN-Jw.js} +1 -1
- package/dist/client/assets/{Zap-Jm8nf3_v.js → Zap-Btz4H2WA.js} +1 -1
- package/dist/client/assets/{ZapSquare-d-eyxTxv.js → ZapSquare-C0moDjbM.js} +1 -1
- package/dist/client/assets/{ZoomOut-6ZMgK8t1.js → ZoomOut-CMekUeIV.js} +1 -1
- package/dist/client/assets/{access-gate-CDkOddfq.js → access-gate-GJZpkbjp.js} +1 -1
- package/dist/client/assets/{agent-icon-D0Shlc8p.js → agent-icon-BIDb5mvo.js} +1 -1
- package/dist/client/assets/{agents-list-BWpgYDzT.js → agents-list-8mSUdlIX.js} +1 -1
- package/dist/client/assets/{ai-providers-DqVkgRHM.js → ai-providers-R4uxTQr7.js} +1 -1
- package/dist/client/assets/{alert-DAKMpmdR.js → alert-BR3tzNpa.js} +1 -1
- package/dist/client/assets/{alert-dialog-D5JasTjf.js → alert-dialog-q3iZVv2q.js} +1 -1
- package/dist/client/assets/{api-keys-Cguu_izO.js → api-keys-CluSLAWy.js} +1 -1
- package/dist/client/assets/{app-editor-BwL3hEdw.js → app-editor-hN8U59Bk.js} +1 -1
- package/dist/client/assets/{auth-7kirydcJ.js → auth-Cr2eVmQb.js} +1 -1
- package/dist/client/assets/{auth-catchall-CqVBq_p2.js → auth-catchall-IiX96GZk.js} +1 -1
- package/dist/client/assets/{auth-entry-DRy8OnAs.js → auth-entry-BMbSSz60.js} +1 -1
- package/dist/client/assets/{auth-split-layout-DmV3heGI.js → auth-split-layout-3JCHz1nj.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-D0DOcHsY.js → authenticate-and-persist-oauth-CPPptEZ-.js} +1 -1
- package/dist/client/assets/{automation-list-row-CiuIlrLd.js → automation-list-row-CSIcCAz-.js} +1 -1
- package/dist/client/assets/{automation-runs-DX9xIym0.js → automation-runs-CZm1UBvc.js} +1 -1
- package/dist/client/assets/{automations-Ck9Z9dfO.js → automations-B2gbg6Kf.js} +1 -1
- package/dist/client/assets/{avatar-C-dE66VS.js → avatar-DoAw_I4n.js} +1 -1
- package/dist/client/assets/{badge-Dz8AC9f0.js → badge-yYh31x23.js} +1 -1
- package/dist/client/assets/{block-document-DofO1qE_.js → block-document-CPjyf593.js} +1 -1
- package/dist/client/assets/{breadcrumb-BxiGwbLI.js → breadcrumb-B9q1WGpi.js} +1 -1
- package/dist/client/assets/{buckets-DG12-1Aw.js → buckets-B1cSzQFA.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-DcpO4T0M.js → bulk-category-panel-COJ_UgHi.js} +1 -1
- package/dist/client/assets/{capability-load-error-BYXTrWLw.js → capability-load-error-gq9Hwxb0.js} +1 -1
- package/dist/client/assets/{cards-DuXjGDsM.js → cards-DuXnhTTh.js} +1 -1
- package/dist/client/assets/{category-editor-CYrIWlky.js → category-editor-DvstEK32.js} +1 -1
- package/dist/client/assets/{chart-XifLPyHW.js → chart-CVMtHEsK.js} +1 -1
- package/dist/client/assets/{chat-context-Dd55GvDB.js → chat-context-Bg50qY0X.js} +1 -1
- package/dist/client/assets/{checkbox-CXJFK_EG.js → checkbox-CIn9j1XX.js} +1 -1
- package/dist/client/assets/{choose-editor-DyuqWx0i.js → choose-editor-C341IQDI.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DiEY0pvk.js → cli-auth-success-9dSt15iI.js} +1 -1
- package/dist/client/assets/{collection-detail-BHdxFAPX.js → collection-detail-1hIZeEgN.js} +1 -1
- package/dist/client/assets/{collection-display-button-B8tCi0cT.js → collection-display-button-aIANyrGQ.js} +1 -1
- package/dist/client/assets/{collection-search-CYedYlUy.js → collection-search-DNM5ZofN.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-BWyyWHB5.js → collection-table-wrapper-aaCw_sH-.js} +1 -1
- package/dist/client/assets/{collection-tabs-CrWMxf16.js → collection-tabs-_NeFNQxV.js} +1 -1
- package/dist/client/assets/{command-p6GHNLLc.js → command--XU4ElGA.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-DFR4DAG5.js → commerce-onboarding-DZaPz9yo.js} +1 -1
- package/dist/client/assets/{config-BtEev4hf.js → config-MPo5D9Wy.js} +1 -1
- package/dist/client/assets/{connect-CisP0qF3.js → connect-Dl5ZUyoY.js} +1 -1
- package/dist/client/assets/{connection-BD5F6Lsg.js → connection-D1A6-rG7.js} +1 -1
- package/dist/client/assets/{connection-card-DE5SgU8M.js → connection-card-DdkgXbOJ.js} +1 -1
- package/dist/client/assets/{connection-detail-ClsKcw0S.js → connection-detail-CUD08bEo.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-DmaDh6zu.js → connection-form-helpers-BukIsyYX.js} +1 -1
- package/dist/client/assets/{connections-jGs_2TMG.js → connections-Cg0cSagU.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-PMRGLxBy.js → decopilot-sse-pool-rqQ9Jpo9.js} +1 -1
- package/dist/client/assets/{dialog-Dcp5r6a5.js → dialog-C1MPeMNu.js} +1 -1
- package/dist/client/assets/{domain-settings-DblrJv4v.js → domain-settings-CA8Dnm2K.js} +1 -1
- package/dist/client/assets/{drawer-BIcmO5ah.js → drawer-CyegMHCB.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DcW0USxm.js → dropdown-menu-DevnSQZb.js} +1 -1
- package/dist/client/assets/{editor-DF_h-0xz.js → editor-Du0PR8Z2.js} +1 -1
- package/dist/client/assets/{empty-state-8T6eyvzW.js → empty-state-GvM6m4x8.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CGb8SXl8.js → extract-connection-data-d_lwqK6k.js} +1 -1
- package/dist/client/assets/{file-explorer-CSJZ-B3n.js → file-explorer-DlUhKb31.js} +1 -1
- package/dist/client/assets/{file-type-icon-DwHg2ZVU.js → file-type-icon-FainwWR1.js} +1 -1
- package/dist/client/assets/{folder-icon-ZUk6JPbW.js → folder-icon-BpXeoC53.js} +1 -1
- package/dist/client/assets/{form-c7eLpaVo.js → form-Cquobct0.js} +1 -1
- package/dist/client/assets/{general-DXjg6LAy.js → general-wxBAvdWD.js} +1 -1
- package/dist/client/assets/{github-repo-picker-CqouSGjl.js → github-repo-picker-C-XAxNp0.js} +1 -1
- package/dist/client/assets/{hooks-Cvz7lzo5.js → hooks-CSA6kPPq.js} +1 -1
- package/dist/client/assets/{index-D8MgmRLV.js → index-BD6RnQ-_.js} +6 -6
- package/dist/client/assets/{index-B3KhnLXb.js → index-C1mpOqCS.js} +4 -4
- package/dist/client/assets/{index-Cy3Ylpjy.js → index-Cwya5van.js} +1 -1
- package/dist/client/assets/{index-B6hjsur2.js → index-D6pwEEp5.js} +1 -1
- package/dist/client/assets/index-DS-wHxfn.css +1 -0
- package/dist/client/assets/{index-H7A4Bgz_.js → index-DnQJMp0g.js} +1 -1
- package/dist/client/assets/{index-MFsQkbEJ.js → index-Dt4voa4v.js} +1 -1
- package/dist/client/assets/{index-YWSGCz3Q.js → index-JylNKnua.js} +1 -1
- package/dist/client/assets/{index-CTWb3V2Q.js → index-gXqtQmIt.js} +1 -1
- package/dist/client/assets/{index-DSSMedN0.js → index-pSKkwoEO.js} +1 -1
- package/dist/client/assets/{index-redirect-BM1elUdi.js → index-redirect-DO7y1hDi.js} +1 -1
- package/dist/client/assets/{infra-billing-zfgxdO24.js → infra-billing-DQK7QCV_.js} +1 -1
- package/dist/client/assets/{input-CPUWNZNB.js → input-C1DRWETJ.js} +1 -1
- package/dist/client/assets/{integration-icon-D_78GL0n.js → integration-icon-BZHHvCa6.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-B-heiE1c.js → invite-member-dialog-DIwl4Bl3.js} +1 -1
- package/dist/client/assets/{label-Dfi3ZI1T.js → label-eG4dP9Kr.js} +1 -1
- package/dist/client/assets/{layout-CMv-kyPa.js → layout-DZrud7Ky.js} +1 -1
- package/dist/client/assets/{login-BGm9iyjA.js → login-hu-4F9eO.js} +1 -1
- package/dist/client/assets/{markdown-CFKAKhHu.js → markdown-DqsdQsMo.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CCWOPzmF.js → mcp-oauth--XUyxbnF.js} +1 -1
- package/dist/client/assets/{members-DqWEBjUt.js → members-DPDnoQXh.js} +1 -1
- package/dist/client/assets/{monaco-editor-DddEav5q.js → monaco-editor-Csqs8oMG.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DYpJnLSO.js → monitoring-stats-row-J4LkbHBU.js} +1 -1
- package/dist/client/assets/{multi-select-BCpJwe85.js → multi-select-78Ry_B8z.js} +1 -1
- package/dist/client/assets/{oauth-callback-BJkiwq1t.js → oauth-callback-D9XZVW84.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DUo4HInz.js → oauth-callback-ai-provider-BgefokjT.js} +1 -1
- package/dist/client/assets/{onboarding-ByNW1GsC.js → onboarding-gkyv-uxO.js} +1 -1
- package/dist/client/assets/{org-layout-BP2LDslw.js → org-layout-CJRS58S9.js} +1 -1
- package/dist/client/assets/{organization-choice-BgB75HJA.js → organization-choice-CJUPUd01.js} +1 -1
- package/dist/client/assets/{orgs-DAACqQSx.js → orgs-Bxn1Phoy.js} +1 -1
- package/dist/client/assets/{page-seo-form-CKKHCrxX.js → page-seo-form-Bpvt1s0u.js} +1 -1
- package/dist/client/assets/{popover-ilduTOiR.js → popover-_WXOdkkr.js} +1 -1
- package/dist/client/assets/{post-calendar-P2UUWtJN.js → post-calendar-DQ3l-FZK.js} +1 -1
- package/dist/client/assets/{post-editor-DRoswC6V.js → post-editor-Bxn6FHTy.js} +1 -1
- package/dist/client/assets/{primitives-Du2SxD14.js → primitives-BE2UFUM4.js} +1 -1
- package/dist/client/assets/{profile-ke12dxPI.js → profile-DIvyjJeS.js} +1 -1
- package/dist/client/assets/{project-app-view-BNM7_hxq.js → project-app-view-BzDioIzh.js} +1 -1
- package/dist/client/assets/{prompts-ChJwSF-O.js → prompts-DI0TZuPk.js} +1 -1
- package/dist/client/assets/record-editor-sKamiBdy.js +1 -0
- package/dist/client/assets/redirect-editor-BOCtVePs.js +1 -0
- package/dist/client/assets/registry-BntCmXSD.js +2 -0
- package/dist/client/assets/{registry-layout-CnZdY_wq.js → registry-layout-DVqpcfPx.js} +1 -1
- package/dist/client/assets/{reports-CbbVImBa.js → reports-DpekG7EG.js} +1 -1
- package/dist/client/assets/{require-capability-BUPRsboD.js → require-capability-Dpz_grcW.js} +1 -1
- package/dist/client/assets/{required-auth-layout-CqnKuglD.js → required-auth-layout-y7NknCof.js} +1 -1
- package/dist/client/assets/{reset-password-BrWp4rIy.js → reset-password-Bh73NB4-.js} +1 -1
- package/dist/client/assets/{review-settings-BXOzCnI9.js → review-settings-Dh7NHLnC.js} +1 -1
- package/dist/client/assets/{roles-BBAKkNej.js → roles-Xra5w00u.js} +1 -1
- package/dist/client/assets/{scroll-area-BY21VxuT.js → scroll-area-48PVfNmB.js} +1 -1
- package/dist/client/assets/{search-input-Bc9FOq_o.js → search-input-BVPn7jMs.js} +1 -1
- package/dist/client/assets/{secrets-CghbmjYl.js → secrets-BLmOlAac.js} +1 -1
- package/dist/client/assets/{sections-editor-Dmap1b3L.js → sections-editor-YAGsntn8.js} +1 -1
- package/dist/client/assets/{select-BD8GOKZB.js → select-DPf2h16G.js} +1 -1
- package/dist/client/assets/{select-model-XJ81hG3M.js → select-model-BcxX7uik.js} +1 -1
- package/dist/client/assets/{self-tool-result-BZGzKhws.js → self-tool-result-CU1lR7mp.js} +1 -1
- package/dist/client/assets/{seo-editor-CvvMo8h3.js → seo-editor-mWVqI11x.js} +1 -1
- package/dist/client/assets/{settings-layout-DgwWQZR2.js → settings-layout-B4ybJZ-l.js} +1 -1
- package/dist/client/assets/{shell-controls-Bo44krkE.js → shell-controls-81txgZ0s.js} +1 -1
- package/dist/client/assets/{shell-layout-Bb86kxxo.js → shell-layout-9-Kb9KhB.js} +1 -1
- package/dist/client/assets/{skill-preview-Bnm8Pv5k.js → skill-preview-DJxEOetP.js} +1 -1
- package/dist/client/assets/{skills-CAd0BaYd.js → skills-BtuM0LGY.js} +1 -1
- package/dist/client/assets/{spinner-qkjd7zoW.js → spinner-DtTgmvPC.js} +1 -1
- package/dist/client/assets/{sso-CnrQnRGh.js → sso-CiyBgZ-u.js} +1 -1
- package/dist/client/assets/{store-D0KtL_XF.js → store-U7QSglE9.js} +1 -1
- package/dist/client/assets/store-registry-CuTkfOAD.js +2 -0
- package/dist/client/assets/{super-agent-icon-CUf_bLr2.js → super-agent-icon-BVSP_A9Q.js} +1 -1
- package/dist/client/assets/{switch-BnlVGW5o.js → switch-CapELWZO.js} +1 -1
- package/dist/client/assets/{synced-repos-BRVDPkz8.js → synced-repos-N0gNWWWC.js} +1 -1
- package/dist/client/assets/{table-Cok1Z08o.js → table-BrdhVBgN.js} +1 -1
- package/dist/client/assets/{tabs-D7ArrgBd.js → tabs-B9s8GiDc.js} +1 -1
- package/dist/client/assets/{task-board-DoDm5QwI.js → task-board-B2prHLEQ.js} +1 -1
- package/dist/client/assets/tasks-qfAKHWA3.js +1 -0
- package/dist/client/assets/{textarea-_DAyS2_8.js → textarea-Vh2FIiy1.js} +1 -1
- package/dist/client/assets/{thread-route-czbOAt0B.js → thread-route-BgQCLbw1.js} +1 -1
- package/dist/client/assets/{toggle-group-CRMxDk8H.js → toggle-group-CHL9oSgu.js} +1 -1
- package/dist/client/assets/{toolbar-UCyDx7GI.js → toolbar-DKrjyizE.js} +1 -1
- package/dist/client/assets/{track-Bt5dU3fl.js → track-BuQ8TKQG.js} +1 -1
- package/dist/client/assets/{types-B5ca_7Db.js → types-BS5Ekku_.js} +1 -1
- package/dist/client/assets/{use-ai-providers-B_DrwB6g.js → use-ai-providers-CoFYnSar.js} +1 -1
- package/dist/client/assets/{use-api-keys-BK_SwvEc.js → use-api-keys-Bd5wA-NI.js} +1 -1
- package/dist/client/assets/{use-automations-DcIRuWCn.js → use-automations-5mHGpVVu.js} +1 -1
- package/dist/client/assets/{use-autosave-BhLZ_r-a.js → use-autosave-DtUqsBdr.js} +1 -1
- package/dist/client/assets/{use-connection-tgul-1SP.js → use-connection-NLT9EZa2.js} +1 -1
- package/dist/client/assets/{use-copy-DbpY8Hvg.js → use-copy-pe6L0LPv.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DDaVUXjD.js → use-create-virtual-mcp-BgM2kvwu.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-CbbUb73W.js → use-debounced-autosave-alYKf4CM.js} +1 -1
- package/dist/client/assets/{use-debounced-value-Bj7CfiU-.js → use-debounced-value-Dhd3S2_F.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-OxmE95iX.js → use-decopilot-events-B2fEtMQC.js} +1 -1
- package/dist/client/assets/{use-delete-connection-EH3OF4Er.js → use-delete-connection-_0_QBeqP.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-Ce0eMrSX.js → use-deployment-admin-D0JOcrNZ.js} +1 -1
- package/dist/client/assets/{use-destination-route-Cqw1qTcz.js → use-destination-route-DxNy_Ma2.js} +1 -1
- package/dist/client/assets/{use-file-configs-DddeF7Nf.js → use-file-configs-BYsD4IjX.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DKU13Q_W.js → use-infinite-scroll-CTgOIPru.js} +1 -1
- package/dist/client/assets/{use-join-requests-c4Wjl3Bj.js → use-join-requests-CGWGRtly.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-BgAMMQWl.js → use-mcp-auth-status-B249W0yp.js} +1 -1
- package/dist/client/assets/{use-mcp-client-D1ZG0muG.js → use-mcp-client-Dfio2Yj4.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Cw1XmZQx.js → use-mcp-tools-BXecv695.js} +1 -1
- package/dist/client/assets/{use-members-CAQpM100.js → use-members-B2B8hd2t.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BwtdekK9.js → use-navigate-to-agent-CO1MIeJp.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-BMWXrebB.js → use-org-auth-client-CPSWUHH8.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-DYEy0E1q.js → use-org-repo-syncs-CgC2q6-i.js} +1 -1
- package/dist/client/assets/{use-org-sso-X7kU2pLv.js → use-org-sso-C3ac-W5O.js} +1 -1
- package/dist/client/assets/{use-organization-roles-Ca4GXux7.js → use-organization-roles-CnzWVoPj.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BISER6gA.js → use-organization-settings-BdZf3ER5.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-_t5EvP3u.js → use-panel-navigate-ScyXQVym.js} +1 -1
- package/dist/client/assets/{use-registry-connections-BkdUlHzw.js → use-registry-connections-DI7DqgUt.js} +1 -1
- package/dist/client/assets/{use-secrets-e_5-9Gb_.js → use-secrets-BSBwa9DM.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-q8nCXEC5.js → use-section-preview-base-B5A51JPl.js} +1 -1
- package/dist/client/assets/{use-status-sounds-DKof4ZQ5.js → use-status-sounds-BjISt8b1.js} +1 -1
- package/dist/client/assets/{use-tags-DelAIkmL.js → use-tags-BhizmlWl.js} +1 -1
- package/dist/client/assets/{use-view-mode-DZVwoo2-.js → use-view-mode-CSQYlkHb.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CxyJmy4d.js → use-virtual-mcp-HMcZh8X3.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-6PP4Hhf2.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-Da_d6aqh.js +1 -0
- package/dist/client/assets/{users-CWEOjjGQ.js → users-kmdfGRk0.js} +1 -1
- package/dist/client/assets/{variant-calendar-CE3kVA0E.js → variant-calendar-28tbxEGf.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-D8DKJyaI.js → view-mode-toggle-BOgNhYRO.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/index-BFgc8ZC7.css +0 -1
- package/dist/client/assets/record-editor-DcJq9MA3.js +0 -1
- package/dist/client/assets/redirect-editor-Brn9nQcs.js +0 -1
- package/dist/client/assets/registry-CJSzjjHe.js +0 -2
- package/dist/client/assets/store-registry-TsX4qq7r.js +0 -2
- package/dist/client/assets/tasks-Q5IeLvtD.js +0 -1
- package/dist/client/assets/useInfiniteQuery-BLMIHI59.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DMDTb7Vn.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -1489,7 +1489,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var En1=L(()=>{Yb()});f
|
|
|
1489
1489
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await ky`
|
|
1490
1490
|
DELETE FROM kysely_migration WHERE name = ${Q}
|
|
1491
1491
|
`.execute($)}}async function Es1($){await Se8($),await Ce8($);let Z=new Ds1({db:$,provider:{getMigrations:()=>Promise.resolve(Un0)}}),{error:Q,results:X}=await Z.migrateToLatest(),Y=0;if(X?.forEach((G)=>{if(G.status==="Success")Y++;else if(G.status==="Error")console.error(`Failed to execute migration "${G.migrationName}"`)}),Q)throw console.error("Failed to migrate"),console.error(Q),Q;return Y}async function _e8($){let{keepOpen:Z=!1,database:Q,skipBetterAuth:X=!1}=$??{},Y="skipped";if(!X&&!Q)Y=await Qm0();let G=Q??F8(),J=async()=>{if(!Z&&!Q)await JO(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await Es1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function ve8(){let $=F8(),Z=new Ds1({db:$.db,provider:{getMigrations:()=>Promise.resolve(Un0)}}),{error:Q,results:X}=await Z.migrateDown();if(X?.forEach((Y)=>{if(Y.status==="Success")console.log(`\u2705 Migration "${Y.migrationName}" rolled back successfully`);else if(Y.status==="Error")console.error(`\u274C Failed to rollback migration "${Y.migrationName}"`)}),Q)throw console.error("Failed to rollback migration"),console.error(Q),Q}var zs1=L(()=>{Ls1();Xm0();KQ()});async function q70($){let Z={...process.env},Q=E80($,Z);console.log(zE1(Q.settings.encryptionKey));let X=Q.settings.betterAuthSecret||(Q.settings.localMode?ot1(Q.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (SZ0(),kZ0)),{outputs:G,services:J}=await Y({home:Q.settings.dataDir,externalDatabaseUrl:Q.externalDatabaseUrl,externalNatsUrl:Q.externalNatsUrl});if(!Q.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (Xm0(),at1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (KQ(),Bt1)),{migrateToLatest:F}=await Promise.resolve().then(() => (zs1(),js1)),N=H(G.databaseUrl);await F({keepOpen:!0,database:N,skipBetterAuth:!0})}let K={...Q.settings,betterAuthSecret:X,databaseUrl:G.databaseUrl,natsUrls:G.natsUrls,...G.s3?{s3Endpoint:G.s3.endpoint,s3Bucket:G.s3.bucket,s3AccessKeyId:G.s3.accessKeyId,s3SecretAccessKey:G.s3.secretAccessKey,s3ForcePathStyle:G.s3.forcePathStyle}:{}};return jn1(K),{settings:K,services:J.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:J.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var Bn0=L(()=>{Yb();rt1();R$()});var Rs1={};$0(Rs1,{updateService:()=>eE,subscribeCliState:()=>Dn0,setTuiConsoleIntercepted:()=>M70,setServerUrl:()=>Tp,setMigrationsDone:()=>Ap,setDevMode:()=>fe8,resetCliStateForTests:()=>xe8,isTuiConsoleIntercepted:()=>V70,getCliState:()=>Ln0,addLogEntry:()=>BO});function Ps1(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function As1(){return{services:Ps1(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function xe8(){dX=As1()}function Pp(){for(let $ of On0)$()}function Ln0(){return dX}function Dn0($){return On0.add($),()=>On0.delete($)}function eE($){dX={...dX,services:dX.services.map((Z)=>Z.name===$.name?$:Z)},Pp()}function Ap(){dX={...dX,migrationsStatus:"done"},Pp()}function Tp($){dX={...dX,serverUrl:$},Pp()}function BO($){let Z=[...dX.logs,$];dX={...dX,logs:Z.length>500?Z.slice(-500):Z},Pp()}function fe8(){dX={...dX,services:[...Ps1(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},Pp()}function M70($){Ts1=$}function V70(){return Ts1}var dX,On0,Ts1=!1;var $j=L(()=>{dX=As1();On0=new Set});import{createServer as Is1}from"net";function be8($){return new Promise((Z)=>{let Q=Is1();Q.once("error",()=>Z(!1)),Q.listen($,"0.0.0.0",()=>{Q.close(()=>Z(!0))})})}async function Rp($){if(await be8($))return $;let Z=await new Promise((Q,X)=>{let Y=Is1();Y.once("error",X),Y.listen(0,"0.0.0.0",()=>{let G=Y.address(),J=typeof G==="object"&&G?G.port:0;Y.close(()=>Q(J))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var wn0=()=>{};var jn0={};$0(jn0,{startDevServer:()=>ge8,pipeToLogStore:()=>En0});import{join as ye8}from"path";function En0($){let Z=$.getReader(),Q=new TextDecoder,X="";function Y(){let G=X.split(`
|
|
1492
|
-
`);X=G.pop()??"";for(let J of G){let K=Bun.stripANSI(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;BO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:G,value:J}=await Z.read();if(G)break;X+=Q.decode(J,{stream:!0}),Y()}}catch{}if(X.trim()){let G=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(G)BO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function ge8($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=X?await Rp(Number(Y)+1):await Rp(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await q70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)eE({name:D.name,status:"ready",port:D.port});Ap();let F=ye8(import.meta.dir,"..","..","..","..",".."),N=Q===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)En0(U.stdout),En0(U.stderr);Tp(G),eE({name:"Vite",status:"ready",port:Number(Y)}),eE({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(U.kill(D),await U.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (SZ0(),kZ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var zn0=L(()=>{Bn0();$j();wn0()});var k70;var Pn0=L(()=>{k70={name:"decocms",version:"4.310.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as ue8,Text as qs1}from"ink";import{jsx as ce8,jsxs as Ms1}from"react/jsx-runtime";function Vs1({version:$}){return Ms1(ue8,{flexDirection:"column",marginTop:1,children:[eZ0.map((Z,Q)=>ce8(qs1,{color:$70[Q],children:Z},Q)),Ms1(qs1,{dimColor:!0,children:[" v",$]})]})}var ks1=L(()=>{Hp()});import{Box as Zj,Text as OO}from"ink";import{Spinner as le8}from"@inkjs/ui";import{jsx as KG,jsxs as Sy}from"react/jsx-runtime";function Ss1({status:$}){if($==="pending")return KG(le8,{label:""});return KG(OO,{color:"green",children:"\u2713"})}function me8($){return`${$.name}: ${$.port||"...."}`}function Cs1({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Sy(Zj,{flexDirection:"column",paddingBottom:1,children:[KG(Vs1,{version:k70.version}),KG(Zj,{marginBottom:1,children:KG(OO,{dimColor:!0,children:"\u2500".repeat(80)})}),KG(Zj,{children:Sy(OO,{dimColor:!0,children:["Home: ",Q]})}),Sy(Zj,{gap:2,children:[$.map((Y)=>Sy(Zj,{gap:1,children:[KG(OO,{children:me8(Y)}),KG(Ss1,{status:Y.status})]},Y.name)),Sy(Zj,{gap:1,children:[KG(OO,{children:"Migrations"}),KG(Ss1,{status:Z})]})]}),KG(Zj,{children:X?Sy(OO,{children:["Open in browser: ",KG(OO,{color:"cyan",children:X})]}):KG(OO,{dimColor:!0,children:"Starting..."})})]})}var _s1=L(()=>{Pn0();ks1()});import{Box as de8,Text as Ip}from"ink";import{jsx as An0,jsxs as Tn0}from"react/jsx-runtime";function ie8($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function vs1({logs:$}){return An0(de8,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return An0(Ip,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Tn0(Ip,{children:[Tn0(Ip,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),An0(Ip,{color:ie8(Z.status),children:Z.status}),Tn0(Ip,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var xs1=()=>{};var Rn0={};$0(Rn0,{App:()=>te8});import{Box as pe8}from"ink";import{useSyncExternalStore as ne8}from"react";import{jsx as fs1,jsxs as oe8}from"react/jsx-runtime";function te8({home:$}){let Z=ne8(Dn0,Ln0);return oe8(pe8,{flexDirection:"column",children:[fs1(Cs1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),fs1(vs1,{logs:Z.logs})]})}var In0=L(()=>{_s1();xs1();$j()});var n3="thread-gate",DN="decopilot-hosted-harness",wN="decopilot-hosted-harness-sandboxed",zJ="automations",LO="background-tools",Qj="task-board-github-reads",DO="jira-push";var bs1="10";function ys1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:bs1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var gs1=()=>{};import re8 from"pg";async function us1($,Z){let{databaseUrl:Q,lockTimeoutMs:X=ae8}=$,Y=$.log??((W)=>console.log(W)),G=new re8.Client({connectionString:Q});await G.connect();let J=Date.now(),K=!1;try{while(!K){if(K=(await G.query("SELECT pg_try_advisory_lock($1) AS locked",[hs1.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-J>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await H$(se8)}let W=Date.now()-J;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await G.query("SELECT pg_advisory_unlock($1)",[hs1.toString()])}catch{}await G.end().catch(()=>{})}}var hs1=8314027461559302n,ae8=600000,se8=500;var cs1=L(()=>{J4()});function ee8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function qn0($,Z){for(let Q=0;Q<$.length;Q++){let X=$[Q];if(X===void 0)continue;if(X===Z)return $[Q+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function ls1(){let $=ee8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:qn0($,"--cpu-prof-dir")??process.cwd(),name:qn0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(qn0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function ms1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=oE();if(!Q)return;let X={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);X={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...X}))};return Z().catch(()=>{}),S70=setInterval(()=>void Z().catch(()=>{}),$),S70.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),X=typeof Q==="string"?Q:JSON.stringify(Q),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(S70)clearInterval(S70)}}var S70;var ds1=()=>{};import*as $04 from"bun:jsc";function is1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{Z04()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-X;X=G+Z;let K=[];try{K=Q04()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var Z04,Q04;var ps1=L(()=>{({startSamplingProfiler:Z04,samplingProfilerStackTraces:Q04}=$04)});function ns1(){ls1();let $=[ms1(),Gt1(),is1()];return()=>{for(let Z of $)Z()}}var ts1=L(()=>{nl0();ds1();ps1()});var Xj=v((os1)=>{Object.defineProperty(os1,"__esModule",{value:!0});os1.RepublishHeaders=os1.DirectMsgHeaders=os1.JsHeaders=os1.AdvisoryKind=void 0;os1.isOrderedPushConsumerOptions=X04;os1.isPullConsumer=Y04;os1.isPushConsumer=G04;os1.isBoundPushConsumerOptions=J04;function X04($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function Y04($){return $.isPullConsumer()}function G04($){return $.isPushConsumer()}function J04($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}os1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};os1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};os1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};os1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var WG=v((as1)=>{Object.defineProperty(as1,"__esModule",{value:!0});as1.TD=as1.TE=as1.Empty=void 0;as1.encode=L04;as1.decode=D04;as1.Empty=new Uint8Array(0);as1.TE=new TextEncoder;as1.TD=new TextDecoder;function O04(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}function L04(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(as1.TE.encode($[Q]));if(Z.length===0)return as1.Empty;if(Z.length===1)return Z[0];return O04(...Z)}function D04($){if(!$||$.length===0)return"";return as1.TD.decode($)}});var HG=v(($e1)=>{Object.defineProperty($e1,"__esModule",{value:!0});$e1.errors=$e1.PermissionViolationError=$e1.NoRespondersError=$e1.TimeoutError=$e1.RequestError=$e1.ProtocolError=$e1.ConnectionError=$e1.DrainingConnectionError=$e1.ClosedConnectionError=$e1.AuthorizationError=$e1.UserAuthenticationExpiredError=$e1.InvalidOperationError=$e1.InvalidArgumentError=$e1.InvalidSubjectError=void 0;class Vn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}$e1.InvalidSubjectError=Vn0;class C70 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,Q){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((X)=>`'${X}'`),$=$.join(",");else $=`'${$}'`;return new C70(`${$} ${Z}`,Q)}}$e1.InvalidArgumentError=C70;class kn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}$e1.InvalidOperationError=kn0;class _70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new _70($);return null}}$e1.UserAuthenticationExpiredError=_70;class v70 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],Q=$.toLowerCase();for(let X=0;X<Z.length;X++)if(Q.indexOf(Z[X])!==-1)return new v70($);return null}}$e1.AuthorizationError=v70;class Sn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}$e1.ClosedConnectionError=Sn0;class Cn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}$e1.DrainingConnectionError=Cn0;class _n0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}$e1.ConnectionError=_n0;class vn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}$e1.ProtocolError=vn0;class xn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof x70}}$e1.RequestError=xn0;class fn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}$e1.TimeoutError=fn0;class x70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}$e1.NoRespondersError=x70;class f70 extends Error{operation;subject;queue;constructor($,Z,Q,X,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=Q,this.queue=X}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let Q="publish",X="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(Q=G[1].toLowerCase(),X=G[2],Q==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new f70($,Q,X,Y)}}$e1.PermissionViolationError=f70;$e1.errors={AuthorizationError:v70,ClosedConnectionError:Sn0,ConnectionError:_n0,DrainingConnectionError:Cn0,InvalidArgumentError:C70,InvalidOperationError:kn0,InvalidSubjectError:Vn0,NoRespondersError:x70,PermissionViolationError:f70,ProtocolError:vn0,RequestError:xn0,TimeoutError:fn0,UserAuthenticationExpiredError:_70}});var t3=v((Ge1)=>{Object.defineProperty(Ge1,"__esModule",{value:!0});Ge1.SimpleMutex=Ge1.Perf=void 0;Ge1.extend=v04;Ge1.render=x04;Ge1.timeout=f04;Ge1.delay=b04;Ge1.deadline=y04;Ge1.deferred=yn0;Ge1.debugDeferred=g04;Ge1.shuffle=h04;Ge1.collect=u04;Ge1.jitter=Ye1;Ge1.backoff=c04;Ge1.nanos=l04;Ge1.millis=m04;Ge1.randomToken=p04;var _04=WG(),bn0=HG();function v04($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function x04($){return _04.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function f04($,Z=!0){let Q=Z?new bn0.TimeoutError:null,X,Y,G=new Promise((J,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new bn0.TimeoutError);else K(Q)},$)});return Object.assign(G,X)}function b04($=0){let Z,Q=new Promise((X)=>{let Y=setTimeout(()=>{X()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),X()}}});return Object.assign(Q,Z)}async function y04($,Z=1000){let Q=yn0(),X=setTimeout(()=>{Q.reject(new bn0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function yn0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function g04(){let $={},Z=new Promise((Q,X)=>{$={resolve:(Y)=>{console.trace("resolve",Y),Q(Y)},reject:(Y)=>{console.trace("reject"),X(Y)}}});return Object.assign(Z,$)}function h04($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function u04($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class Qe1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,Q){let X=this.timers.get(Z);if(X===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(Q);if(Y===void 0)throw Error(`${Q} is not defined`);this.measures.set($,Y-X)}getEntries(){let $=[];return this.measures.forEach((Z,Q)=>{$.push({name:Q,duration:Z})}),$}}Ge1.Perf=Qe1;class Xe1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=yn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Ge1.SimpleMutex=Xe1;function Ye1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function c04($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(Q){return Ye1(Q>Z?$[Z]:$[Q])}}}function l04($){return $*1e6}function m04($){return Math.floor($/1e6)}var d04="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",EN=new Uint8Array(62);for(let $=0;$<62;$++)EN[$]=d04.charCodeAt($);var i04=218340105584896;function p04(){let $=Math.floor(Math.random()*i04),Z=$%62,Q=EN[Z];$=($-Z)/62,Z=$%62;let X=EN[Z];$=($-Z)/62,Z=$%62;let Y=EN[Z];$=($-Z)/62,Z=$%62;let G=EN[Z];$=($-Z)/62,Z=$%62;let J=EN[Z];$=($-Z)/62,Z=$%62;let K=EN[Z];$=($-Z)/62,Z=$%62;let W=EN[Z];$=($-Z)/62;let H=EN[$];return String.fromCharCode(Q,X,Y,G,J,K,W,H)}});var Be1=v((Ne1)=>{Object.defineProperty(Ne1,"__esModule",{value:!0});Ne1.nuid=Ne1.NuidImpl=void 0;var W14="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",wO=62,y70=12,He1=10,Ke1=33,H14=333,We1=y70+He1,hn0=new Uint8Array(wO);for(let $=0;$<wO;$++)hn0[$]=W14.charCodeAt($);var b70=4294967296,Fe1=BigInt(wO)**BigInt(He1),qp=Number(Fe1/(1n<<32n)),gn0=Number(Fe1%(1n<<32n));function F14($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function N14($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else F14($)}class un0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(We1),this.cbuf=new Uint8Array(y70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(qp+1)),this.seqLo=Math.floor(Math.random()*b70);while($++<8&&this.seqHi===qp&&this.seqLo>=gn0);if(this.seqHi===qp&&this.seqLo>=gn0)this.seqLo=0;this.inc=Math.random()*(H14-Ke1)+Ke1|0}setPre(){N14(this.cbuf);for(let $=0;$<y70;$++)this.buf[$]=hn0[this.cbuf[$]%wO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=We1-1;Q>=y70;Q--){let X=Math.floor($/wO),G=($-X*wO)*b70+Z,J=Math.floor(G/wO),K=G-J*wO;this.buf[Q]=hn0[K],$=X,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=b70)this.seqLo-=b70,this.seqHi+=1;if(this.seqHi>qp||this.seqHi===qp&&this.seqLo>=gn0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}Ne1.NuidImpl=un0;Ne1.nuid=new un0});var we1=v((Le1)=>{Object.defineProperty(Le1,"__esModule",{value:!0});Le1.nuid=Le1.Nuid=void 0;var Oe1=Be1();Le1.Nuid=Oe1.NuidImpl;Le1.nuid=Oe1.nuid});var h70=v((g70)=>{Object.defineProperty(g70,"__esModule",{value:!0});g70.nuid=g70.Nuid=void 0;var Ee1=we1();Object.defineProperty(g70,"Nuid",{enumerable:!0,get:function(){return Ee1.Nuid}});Object.defineProperty(g70,"nuid",{enumerable:!0,get:function(){return Ee1.nuid}})});var EO=v((je1)=>{Object.defineProperty(je1,"__esModule",{value:!0});je1.DEFAULT_HOST=je1.DEFAULT_PORT=je1.Match=void 0;je1.syncIterator=w14;je1.createInbox=E14;var L14=h70(),D14=HG();je1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function w14($){let Z=$[Symbol.asyncIterator]();return{async next(){let Q=await Z.next();if(Q.done)return Promise.resolve(null);return Promise.resolve(Q.value)}}}function E14($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw D14.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${L14.nuid.next()}`}je1.DEFAULT_PORT=4222;je1.DEFAULT_HOST="127.0.0.1"});var Mp=v((Te1)=>{Object.defineProperty(Te1,"__esModule",{value:!0});Te1.DataBuffer=void 0;var Pe1=WG();class Ae1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}static fromAscii($){if(!$)$="";return Pe1.TE.encode($)}static toAscii($){return Pe1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let Q=0;Q<this.buffers.length;Q++)$.set(this.buffers[Q],Z),Z+=this.buffers[Q].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let Q=this.byteLength;if($===void 0||$>Q)$=Q;let X=Z.subarray(0,$);if(Q>$)this.buffers.push(Z.subarray($));return this.byteLength=Q-$,X}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let Q=0;Q<Z.length;Q++)if(Z[Q]&&Z[Q].length)this.buffers.push(Z[Q]),this.byteLength+=Z[Q].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}Te1.DataBuffer=Ae1});var Yj=v((qe1)=>{Object.defineProperty(qe1,"__esModule",{value:!0});qe1.LF=qe1.CR=qe1.CRLF=qe1.CR_LF_LEN=qe1.CR_LF=void 0;qe1.setTransportFactory=q14;qe1.defaultPort=M14;qe1.getUrlParseFn=V14;qe1.newTransport=k14;qe1.getResolveFn=S14;qe1.protoLen=Ie1;qe1.extractProtocolMessage=C14;var T14=WG(),R14=EO(),I14=Mp(),FG;function q14($){FG=$}function M14(){return FG!==void 0&&FG.defaultPort!==void 0?FG.defaultPort:R14.DEFAULT_PORT}function V14(){return FG!==void 0&&FG.urlParseFn?FG.urlParseFn:void 0}function k14(){if(!FG||typeof FG.factory!=="function")throw Error("transport fn is not set");return FG.factory()}function S14(){return FG!==void 0&&FG.dnsResolveFn?FG.dnsResolveFn:void 0}qe1.CR_LF=`\r
|
|
1492
|
+
`);X=G.pop()??"";for(let J of G){let K=Bun.stripANSI(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;BO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:G,value:J}=await Z.read();if(G)break;X+=Q.decode(J,{stream:!0}),Y()}}catch{}if(X.trim()){let G=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(G)BO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function ge8($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=X?await Rp(Number(Y)+1):await Rp(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await q70({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)eE({name:D.name,status:"ready",port:D.port});Ap();let F=ye8(import.meta.dir,"..","..","..","..",".."),N=Q===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)En0(U.stdout),En0(U.stderr);Tp(G),eE({name:"Vite",status:"ready",port:Number(Y)}),eE({name:"API",status:"ready",port:Number(K.port)});let O=async(D)=>{if(U.kill(D),await U.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (SZ0(),kZ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var zn0=L(()=>{Bn0();$j();wn0()});var k70;var Pn0=L(()=>{k70={name:"decocms",version:"4.310.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as ue8,Text as qs1}from"ink";import{jsx as ce8,jsxs as Ms1}from"react/jsx-runtime";function Vs1({version:$}){return Ms1(ue8,{flexDirection:"column",marginTop:1,children:[eZ0.map((Z,Q)=>ce8(qs1,{color:$70[Q],children:Z},Q)),Ms1(qs1,{dimColor:!0,children:[" v",$]})]})}var ks1=L(()=>{Hp()});import{Box as Zj,Text as OO}from"ink";import{Spinner as le8}from"@inkjs/ui";import{jsx as KG,jsxs as Sy}from"react/jsx-runtime";function Ss1({status:$}){if($==="pending")return KG(le8,{label:""});return KG(OO,{color:"green",children:"\u2713"})}function me8($){return`${$.name}: ${$.port||"...."}`}function Cs1({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Sy(Zj,{flexDirection:"column",paddingBottom:1,children:[KG(Vs1,{version:k70.version}),KG(Zj,{marginBottom:1,children:KG(OO,{dimColor:!0,children:"\u2500".repeat(80)})}),KG(Zj,{children:Sy(OO,{dimColor:!0,children:["Home: ",Q]})}),Sy(Zj,{gap:2,children:[$.map((Y)=>Sy(Zj,{gap:1,children:[KG(OO,{children:me8(Y)}),KG(Ss1,{status:Y.status})]},Y.name)),Sy(Zj,{gap:1,children:[KG(OO,{children:"Migrations"}),KG(Ss1,{status:Z})]})]}),KG(Zj,{children:X?Sy(OO,{children:["Open in browser: ",KG(OO,{color:"cyan",children:X})]}):KG(OO,{dimColor:!0,children:"Starting..."})})]})}var _s1=L(()=>{Pn0();ks1()});import{Box as de8,Text as Ip}from"ink";import{jsx as An0,jsxs as Tn0}from"react/jsx-runtime";function ie8($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function vs1({logs:$}){return An0(de8,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return An0(Ip,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Tn0(Ip,{children:[Tn0(Ip,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),An0(Ip,{color:ie8(Z.status),children:Z.status}),Tn0(Ip,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var xs1=()=>{};var Rn0={};$0(Rn0,{App:()=>te8});import{Box as pe8}from"ink";import{useSyncExternalStore as ne8}from"react";import{jsx as fs1,jsxs as oe8}from"react/jsx-runtime";function te8({home:$}){let Z=ne8(Dn0,Ln0);return oe8(pe8,{flexDirection:"column",children:[fs1(Cs1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),fs1(vs1,{logs:Z.logs})]})}var In0=L(()=>{_s1();xs1();$j()});var n3="thread-gate",DN="decopilot-hosted-harness",wN="decopilot-hosted-harness-sandboxed",zJ="automations",LO="background-tools",Qj="task-board-github-reads",DO="jira-push";var bs1="10";function ys1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:bs1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var gs1=()=>{};import re8 from"pg";async function us1($,Z){let{databaseUrl:Q,lockTimeoutMs:X=ae8}=$,Y=$.log??((W)=>console.log(W)),G=new re8.Client({connectionString:Q});await G.connect();let J=Date.now(),K=!1;try{while(!K){if(K=(await G.query("SELECT pg_try_advisory_lock($1) AS locked",[hs1.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-J>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await H$(se8)}let W=Date.now()-J;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await G.query("SELECT pg_advisory_unlock($1)",[hs1.toString()])}catch{}await G.end().catch(()=>{})}}var hs1=8314027461559302n,ae8=600000,se8=500;var cs1=L(()=>{J4()});function ee8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function qn0($,Z){for(let Q=0;Q<$.length;Q++){let X=$[Q];if(X===void 0)continue;if(X===Z)return $[Q+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function ls1(){let $=ee8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:qn0($,"--cpu-prof-dir")??process.cwd(),name:qn0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(qn0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function ms1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=oE();if(!Q)return;let X={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);X={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...X}))};return Z().catch(()=>{}),S70=setInterval(()=>void Z().catch(()=>{}),$),S70.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),X=typeof Q==="string"?Q:JSON.stringify(Q),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(S70)clearInterval(S70)}}var S70;var ds1=()=>{};import*as $04 from"bun:jsc";function is1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{Z04()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-X;X=G+Z;let K=[];try{K=Q04()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var Z04,Q04;var ps1=L(()=>{({startSamplingProfiler:Z04,samplingProfilerStackTraces:Q04}=$04)});function ns1(){ls1();let $=[ms1(),Gt1(),is1()];return()=>{for(let Z of $)Z()}}var ts1=L(()=>{nl0();ds1();ps1()});var Xj=v((os1)=>{Object.defineProperty(os1,"__esModule",{value:!0});os1.RepublishHeaders=os1.DirectMsgHeaders=os1.JsHeaders=os1.AdvisoryKind=void 0;os1.isOrderedPushConsumerOptions=X04;os1.isPullConsumer=Y04;os1.isPushConsumer=G04;os1.isBoundPushConsumerOptions=J04;function X04($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function Y04($){return $.isPullConsumer()}function G04($){return $.isPushConsumer()}function J04($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}os1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};os1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};os1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};os1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var WG=v((as1)=>{Object.defineProperty(as1,"__esModule",{value:!0});as1.TD=as1.TE=as1.Empty=void 0;as1.encode=L04;as1.decode=D04;as1.Empty=new Uint8Array(0);as1.TE=new TextEncoder;as1.TD=new TextDecoder;function O04(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}function L04(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(as1.TE.encode($[Q]));if(Z.length===0)return as1.Empty;if(Z.length===1)return Z[0];return O04(...Z)}function D04($){if(!$||$.length===0)return"";return as1.TD.decode($)}});var HG=v(($e1)=>{Object.defineProperty($e1,"__esModule",{value:!0});$e1.errors=$e1.PermissionViolationError=$e1.NoRespondersError=$e1.TimeoutError=$e1.RequestError=$e1.ProtocolError=$e1.ConnectionError=$e1.DrainingConnectionError=$e1.ClosedConnectionError=$e1.AuthorizationError=$e1.UserAuthenticationExpiredError=$e1.InvalidOperationError=$e1.InvalidArgumentError=$e1.InvalidSubjectError=void 0;class Vn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}$e1.InvalidSubjectError=Vn0;class C70 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,Q){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((X)=>`'${X}'`),$=$.join(",");else $=`'${$}'`;return new C70(`${$} ${Z}`,Q)}}$e1.InvalidArgumentError=C70;class kn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}$e1.InvalidOperationError=kn0;class _70 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new _70($);return null}}$e1.UserAuthenticationExpiredError=_70;class v70 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],Q=$.toLowerCase();for(let X=0;X<Z.length;X++)if(Q.indexOf(Z[X])!==-1)return new v70($);return null}}$e1.AuthorizationError=v70;class Sn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}$e1.ClosedConnectionError=Sn0;class Cn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}$e1.DrainingConnectionError=Cn0;class _n0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}$e1.ConnectionError=_n0;class vn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}$e1.ProtocolError=vn0;class xn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof x70}}$e1.RequestError=xn0;class fn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}$e1.TimeoutError=fn0;class x70 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}$e1.NoRespondersError=x70;class f70 extends Error{operation;subject;queue;constructor($,Z,Q,X,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=Q,this.queue=X}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let Q="publish",X="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(Q=G[1].toLowerCase(),X=G[2],Q==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new f70($,Q,X,Y)}}$e1.PermissionViolationError=f70;$e1.errors={AuthorizationError:v70,ClosedConnectionError:Sn0,ConnectionError:_n0,DrainingConnectionError:Cn0,InvalidArgumentError:C70,InvalidOperationError:kn0,InvalidSubjectError:Vn0,NoRespondersError:x70,PermissionViolationError:f70,ProtocolError:vn0,RequestError:xn0,TimeoutError:fn0,UserAuthenticationExpiredError:_70}});var t3=v((Ge1)=>{Object.defineProperty(Ge1,"__esModule",{value:!0});Ge1.SimpleMutex=Ge1.Perf=void 0;Ge1.extend=v04;Ge1.render=x04;Ge1.timeout=f04;Ge1.delay=b04;Ge1.deadline=y04;Ge1.deferred=yn0;Ge1.debugDeferred=g04;Ge1.shuffle=h04;Ge1.collect=u04;Ge1.jitter=Ye1;Ge1.backoff=c04;Ge1.nanos=l04;Ge1.millis=m04;Ge1.randomToken=p04;var _04=WG(),bn0=HG();function v04($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function x04($){return _04.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function f04($,Z=!0){let Q=Z?new bn0.TimeoutError:null,X,Y,G=new Promise((J,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new bn0.TimeoutError);else K(Q)},$)});return Object.assign(G,X)}function b04($=0){let Z,Q=new Promise((X)=>{let Y=setTimeout(()=>{X()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),X()}}});return Object.assign(Q,Z)}async function y04($,Z=1000){let Q=yn0(),X=setTimeout(()=>{Q.reject(new bn0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function yn0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function g04(){let $={},Z=new Promise((Q,X)=>{$={resolve:(Y)=>{console.trace("resolve",Y),Q(Y)},reject:(Y)=>{console.trace("reject"),X(Y)}}});return Object.assign(Z,$)}function h04($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function u04($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class Qe1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,Q){let X=this.timers.get(Z);if(X===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(Q);if(Y===void 0)throw Error(`${Q} is not defined`);this.measures.set($,Y-X)}getEntries(){let $=[];return this.measures.forEach((Z,Q)=>{$.push({name:Q,duration:Z})}),$}}Ge1.Perf=Qe1;class Xe1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=yn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Ge1.SimpleMutex=Xe1;function Ye1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function c04($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(Q){return Ye1(Q>Z?$[Z]:$[Q])}}}function l04($){return $*1e6}function m04($){return Math.floor($/1e6)}var d04="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",EN=new Uint8Array(62);for(let $=0;$<62;$++)EN[$]=d04.charCodeAt($);var i04=218340105584896;function p04(){let $=Math.floor(Math.random()*i04),Z=$%62,Q=EN[Z];$=($-Z)/62,Z=$%62;let X=EN[Z];$=($-Z)/62,Z=$%62;let Y=EN[Z];$=($-Z)/62,Z=$%62;let G=EN[Z];$=($-Z)/62,Z=$%62;let J=EN[Z];$=($-Z)/62,Z=$%62;let K=EN[Z];$=($-Z)/62,Z=$%62;let W=EN[Z];$=($-Z)/62;let H=EN[$];return String.fromCharCode(Q,X,Y,G,J,K,W,H)}});var Be1=v((Ne1)=>{Object.defineProperty(Ne1,"__esModule",{value:!0});Ne1.nuid=Ne1.NuidImpl=void 0;var W14="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",wO=62,y70=12,He1=10,Ke1=33,H14=333,We1=y70+He1,hn0=new Uint8Array(wO);for(let $=0;$<wO;$++)hn0[$]=W14.charCodeAt($);var b70=4294967296,Fe1=BigInt(wO)**BigInt(He1),qp=Number(Fe1/(1n<<32n)),gn0=Number(Fe1%(1n<<32n));function F14($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function N14($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else F14($)}class un0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(We1),this.cbuf=new Uint8Array(y70),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(qp+1)),this.seqLo=Math.floor(Math.random()*b70);while($++<8&&this.seqHi===qp&&this.seqLo>=gn0);if(this.seqHi===qp&&this.seqLo>=gn0)this.seqLo=0;this.inc=Math.random()*(H14-Ke1)+Ke1|0}setPre(){N14(this.cbuf);for(let $=0;$<y70;$++)this.buf[$]=hn0[this.cbuf[$]%wO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=We1-1;Q>=y70;Q--){let X=Math.floor($/wO),G=($-X*wO)*b70+Z,J=Math.floor(G/wO),K=G-J*wO;this.buf[Q]=hn0[K],$=X,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=b70)this.seqLo-=b70,this.seqHi+=1;if(this.seqHi>qp||this.seqHi===qp&&this.seqLo>=gn0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}Ne1.NuidImpl=un0;Ne1.nuid=new un0});var we1=v((Le1)=>{Object.defineProperty(Le1,"__esModule",{value:!0});Le1.nuid=Le1.Nuid=void 0;var Oe1=Be1();Le1.Nuid=Oe1.NuidImpl;Le1.nuid=Oe1.nuid});var h70=v((g70)=>{Object.defineProperty(g70,"__esModule",{value:!0});g70.nuid=g70.Nuid=void 0;var Ee1=we1();Object.defineProperty(g70,"Nuid",{enumerable:!0,get:function(){return Ee1.Nuid}});Object.defineProperty(g70,"nuid",{enumerable:!0,get:function(){return Ee1.nuid}})});var EO=v((je1)=>{Object.defineProperty(je1,"__esModule",{value:!0});je1.DEFAULT_HOST=je1.DEFAULT_PORT=je1.Match=void 0;je1.syncIterator=w14;je1.createInbox=E14;var L14=h70(),D14=HG();je1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function w14($){let Z=$[Symbol.asyncIterator]();return{async next(){let Q=await Z.next();if(Q.done)return Promise.resolve(null);return Promise.resolve(Q.value)}}}function E14($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw D14.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${L14.nuid.next()}`}je1.DEFAULT_PORT=4222;je1.DEFAULT_HOST="127.0.0.1"});var Mp=v((Te1)=>{Object.defineProperty(Te1,"__esModule",{value:!0});Te1.DataBuffer=void 0;var Pe1=WG();class Ae1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}static fromAscii($){if(!$)$="";return Pe1.TE.encode($)}static toAscii($){return Pe1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let Q=0;Q<this.buffers.length;Q++)$.set(this.buffers[Q],Z),Z+=this.buffers[Q].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let Q=this.byteLength;if($===void 0||$>Q)$=Q;let X=Z.subarray(0,$);if(Q>$)this.buffers.push(Z.subarray($));return this.byteLength=Q-$,X}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let Q=0;Q<Z.length;Q++)if(Z[Q]&&Z[Q].length)this.buffers.push(Z[Q]),this.byteLength+=Z[Q].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}Te1.DataBuffer=Ae1});var Yj=v((qe1)=>{Object.defineProperty(qe1,"__esModule",{value:!0});qe1.LF=qe1.CR=qe1.CRLF=qe1.CR_LF_LEN=qe1.CR_LF=void 0;qe1.setTransportFactory=q14;qe1.defaultPort=M14;qe1.getUrlParseFn=V14;qe1.newTransport=k14;qe1.getResolveFn=S14;qe1.protoLen=Ie1;qe1.extractProtocolMessage=C14;var T14=WG(),R14=EO(),I14=Mp(),FG;function q14($){FG=$}function M14(){return FG!==void 0&&FG.defaultPort!==void 0?FG.defaultPort:R14.DEFAULT_PORT}function V14(){return FG!==void 0&&FG.urlParseFn?FG.urlParseFn:void 0}function k14(){if(!FG||typeof FG.factory!=="function")throw Error("transport fn is not set");return FG.factory()}function S14(){return FG!==void 0&&FG.dnsResolveFn?FG.dnsResolveFn:void 0}qe1.CR_LF=`\r
|
|
1493
1493
|
`;qe1.CR_LF_LEN=qe1.CR_LF.length;qe1.CRLF=I14.DataBuffer.fromAscii(qe1.CR_LF);qe1.CR=new Uint8Array(qe1.CRLF)[0];qe1.LF=new Uint8Array(qe1.CRLF)[1];function Ie1($){for(let Z=0;Z<$.length;Z++){let Q=Z+1;if($.byteLength>Q&&$[Z]===qe1.CR&&$[Q]===qe1.LF)return Q+1}return 0}function C14($){let Z=Ie1($);if(Z>0){let X=new Uint8Array($).slice(0,Z);return T14.TD.decode(X)}return""}});var in0=v((xe1)=>{Object.defineProperty(xe1,"__esModule",{value:!0});xe1.ipV4=Ce1;xe1.isIP=l14;xe1.parseIP=_e1;var Vp=4,Gj=16,u70=48,Se1=57,Ve1=65,u14=70,ke1=97,c14=102,dn0=16777215;function Ce1($,Z,Q,X){let Y=new Uint8Array(Gj);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((J,K)=>{Y[K]=J}),Y[12]=$,Y[13]=Z,Y[14]=Q,Y[15]=X,Y}function l14($){return _e1($)!==void 0}function _e1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return ve1($);case":":return m14($)}return}function ve1($){let Z=new Uint8Array(Vp);for(let Q=0;Q<Vp;Q++){if($.length===0)return;if(Q>0){if($[0]!==".")return;$=$.substring(1)}let{n:X,c:Y,ok:G}=d14($);if(!G||X>255)return;$=$.substring(Y),Z[Q]=X}return Ce1(Z[0],Z[1],Z[2],Z[3])}function m14($){let Z=new Uint8Array(Gj),Q=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(Q=0,$=$.substring(2),$.length===0)return Z}let X=0;while(X<Gj){let{n:Y,c:G,ok:J}=i14($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(Q<0&&X!=Gj-Vp)return;if(X+Vp>Gj)return;let K=ve1($);if(K===void 0)return;Z[X]=K[12],Z[X+1]=K[13],Z[X+2]=K[14],Z[X+3]=K[15],$="",X+=Vp;break}if(Z[X]=Y>>8,Z[X+1]=Y,X+=2,$=$.substring(G),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(Q>=0)return;if(Q=X,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(X<Gj){if(Q<0)return;let Y=Gj-X;for(let G=X-1;G>=Q;G--)Z[G+Y]=Z[G];for(let G=Q+Y-1;G>=Q;G--)Z[G]=0}else if(Q>=0)return;return Z}function d14($){let Z=0,Q=0;for(Z=0;Z<$.length&&u70<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=Se1;Z++)if(Q=Q*10+($.charCodeAt(Z)-u70),Q>=dn0)return{n:dn0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:Q,c:Z,ok:!0}}function i14($){let Z=0,Q=0;for(Q=0;Q<$.length;Q++){if(u70<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=Se1)Z*=16,Z+=$.charCodeAt(Q)-u70;else if(ke1<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=c14)Z*=16,Z+=$.charCodeAt(Q)-ke1+10;else if(Ve1<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=u14)Z*=16,Z+=$.charCodeAt(Q)-Ve1+10;else break;if(Z>=dn0)return{n:0,c:Q,ok:!1}}if(Q===0)return{n:0,c:Q,ok:!1};return{n:Z,c:Q,ok:!0}}});var an0=v((be1)=>{Object.defineProperty(be1,"__esModule",{value:!0});be1.Servers=be1.ServerImpl=void 0;be1.isIPV4OrHostname=fe1;be1.hostPort=rn0;var pn0=Yj(),nn0=t3(),tn0=in0(),o14=EO(),r14=HG();function fe1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function on0($){return!fe1($)}function a14($){let Q=$.toUpperCase().indexOf("::FFFF:");if(Q!==-1&&$.indexOf(".")!==-1){let X=$.substring(Q+7);return X=X.replace("[",""),X.replace("]","")}return $}function rn0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=a14($),on0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=on0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),Q=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):o14.DEFAULT_PORT,Y=new URL(`${Q===80?"https":"http"}://${$}`);Y.port=`${Q}`;let G=Y.hostname;if(G.charAt(0)==="[")G=G.substring(1,G.length-1);return{listen:Y.host,hostname:G,port:Q}}class Cy{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let Q=rn0($);this.listen=Q.listen,this.hostname=Q.hostname,this.port=Q.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,tn0.isIP)(this.hostname))return[this];else{let Q=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${Q.join(",")}`);for(let X of Q){let Y=this.port===80?"https":"http",G=new URL(`${Y}://${on0(X)?"["+X+"]":X}`);G.port=`${this.port}`;let J=new Cy(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,nn0.shuffle)(Z);return this.resolves=Z,Z}}be1.ServerImpl=Cy;class c70{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw r14.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,pn0.getUrlParseFn)(),Q=new Map;for(let Y of this.servers)Q.set(Y.listen,Y);let X=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:G}=rn0(Y),J=Q.get(G);if(J)J.gossiped=!1,X.push(J);else X.push(new Cy(Y))}if(this.randomize)(0,nn0.shuffle)(X);if(this.servers=X,this.currentServer===void 0||!X.includes(this.currentServer))this.currentServer=X[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,tn0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let Q=(0,pn0.getUrlParseFn)();$=Q?Q($):$;let X=new Cy($,Z);if((0,tn0.isIP)(X.hostname))X.tlsName=this.tlsName;this.servers.push(X)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return c70.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return c70.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let Q=[],X=[],Y=(0,pn0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Cy(K,!0);G.set(K,W)});let J=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&G.get(H)===void 0)J.push(W);G.delete(H)}),J.reverse(),J.forEach((K)=>{let W=this.servers.splice(K,1);X=X.concat(W[0].listen)}),G.forEach((K,W)=>{this.servers.push(K),Q.push(W)}),this.randomize&&Q.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,nn0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:Q,deleted:X}}}be1.Servers=c70});var l70=v((ue1)=>{Object.defineProperty(ue1,"__esModule",{value:!0});ue1.QueuedIteratorImpl=void 0;var sn0=t3(),ge1=HG();class he1{inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,sn0.deferred)(),this.yields=[],this.iterClosed=(0,sn0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(Q){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new ge1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new ge1.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let X=$[Z];try{X()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let Q=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-Q:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,sn0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}ue1.QueuedIteratorImpl=he1});var en0=v((de1)=>{Object.defineProperty(de1,"__esModule",{value:!0});de1.MuxSubscription=void 0;var Z$4=EO(),le1=HG();class me1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,Z$4.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((Q)=>{Q.resolver(Z,{})}),!0;if(Z.operation==="publish"){let Q=this.all().find((X)=>{return X.requestSubject===Z.subject});if(Q)return Q.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let Q=this.getToken(Z);if(Q){let X=this.get(Q);if(X){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new le1.NoRespondersError(X.requestSubject):null;X.resolver($,Z)}}}}close(){let $=new le1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}de1.MuxSubscription=me1});var $t0=v((ne1)=>{Object.defineProperty(ne1,"__esModule",{value:!0});ne1.Heartbeat=void 0;var Q$4=t3();class pe1{ph;interval;maxOut;timer;pendings;constructor($,Z,Q){this.ph=$,this.interval=Z,this.maxOut=Q,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,Q$4.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}ne1.Heartbeat=pe1});var Xt0=v((se1)=>{Object.defineProperty(se1,"__esModule",{value:!0});se1.DenoBuffer=se1.MAX_SIZE=se1.AssertionError=void 0;se1.assert=re1;se1.concat=ae1;se1.append=Y$4;se1.readAll=G$4;se1.writeAll=J$4;var X$4=WG();class Zt0 extends Error{constructor($){super($);this.name="AssertionError"}}se1.AssertionError=Zt0;function re1($,Z="Assertion failed."){if(!$)throw new Zt0(Z)}var oe1=32768;se1.MAX_SIZE=4294967294;function m70($,Z,Q=0){let X=Z.byteLength-Q;if($.byteLength>X)$=$.subarray(0,X);return Z.set($,Q),$.byteLength}function ae1($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let Q=new Uint8Array($.length+Z.length);return Q.set($,0),Q.set(Z,$.length),Q}function Y$4($,Z){return ae1($,Uint8Array.of(Z))}class Qt0{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){re1($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=m70(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(X$4.TE.encode($))}write($){let Z=this._grow($.byteLength);return m70($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let Q=this._tryGrowByReslice($);if(Q>=0)return Q;let X=this.capacity;if($<=Math.floor(X/2)-Z)m70(this._buf.subarray(this._off),this._buf);else if(X+$>se1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*X+$,se1.MAX_SIZE));m70(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,se1.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,Q=new Uint8Array(oe1);while(!0){let X=this.capacity-this.length<oe1,Y=X?Q:new Uint8Array(this._buf.buffer,this.length),G=$.read(Y);if(G===null)return Z;if(X)this.write(Y.subarray(0,G));else this._reslice(this.length+G);Z+=G}}}se1.DenoBuffer=Qt0;function G$4($){let Z=new Qt0;return Z.readFrom($),Z.bytes()}function J$4($,Z){let Q=0;while(Q<Z.length)Q+=$.write(Z.subarray(Q))}});var Jt0=v((X0$)=>{Object.defineProperty(X0$,"__esModule",{value:!0});X0$.cc=X0$.State=X0$.Parser=X0$.Kind=void 0;X0$.describe=B$4;var Yt0=Xt0(),Gt0=WG();X0$.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function B$4($){let Z,Q="";switch($.kind){case X0$.Kind.MSG:Z="MSG";break;case X0$.Kind.OK:Z="OK";break;case X0$.Kind.ERR:Z="ERR",Q=Gt0.TD.decode($.data);break;case X0$.Kind.PING:Z="PING";break;case X0$.Kind.PONG:Z="PONG";break;case X0$.Kind.INFO:Z="INFO",Q=Gt0.TD.decode($.data)}return`${Z}: ${Q}`}function $0$(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var Z0$=48,O$4=57,_y=67108864;class Q0${dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=X0$.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let Q=$[Z];switch(this.state){case X0$.State.OP_START:switch(Q){case X0$.cc.M:case X0$.cc.m:this.state=X0$.State.OP_M,this.hdr=-1,this.ma=$0$();break;case X0$.cc.H:case X0$.cc.h:this.state=X0$.State.OP_H,this.hdr=0,this.ma=$0$();break;case X0$.cc.P:case X0$.cc.p:this.state=X0$.State.OP_P;break;case X0$.cc.PLUS:this.state=X0$.State.OP_PLUS;break;case X0$.cc.MINUS:this.state=X0$.State.OP_MINUS;break;case X0$.cc.I:case X0$.cc.i:this.state=X0$.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_H:switch(Q){case X0$.cc.M:case X0$.cc.m:this.state=X0$.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_M:switch(Q){case X0$.cc.S:case X0$.cc.s:this.state=X0$.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_MS:switch(Q){case X0$.cc.G:case X0$.cc.g:this.state=X0$.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_MSG:switch(Q){case X0$.cc.SPACE:case X0$.cc.TAB:this.state=X0$.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_MSG_SPC:switch(Q){case X0$.cc.SPACE:case X0$.cc.TAB:continue;default:this.state=X0$.State.MSG_ARG,this.as=Z}break;case X0$.State.MSG_ARG:switch(Q){case X0$.cc.CR:this.drop=1;break;case X0$.cc.NL:{let X=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(X),this.drop=0,this.as=Z+1,this.state=X0$.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;case X0$.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let X=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:X0$.Kind.MSG,msg:this.ma,data:X}),this.argBuf=void 0,this.msgBuf=void 0,this.state=X0$.State.MSG_END}else{let X=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<X)X=Y;if(X>0)this.msgBuf.write($.subarray(Z,Z+X)),Z=Z+X-1;else this.msgBuf.writeByte(Q)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:X0$.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=X0$.State.MSG_END;break;case X0$.State.MSG_END:switch(Q){case X0$.cc.NL:this.drop=0,this.as=Z+1,this.state=X0$.State.OP_START;break;default:continue}break;case X0$.State.OP_PLUS:switch(Q){case X0$.cc.O:case X0$.cc.o:this.state=X0$.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_PLUS_O:switch(Q){case X0$.cc.K:case X0$.cc.k:this.state=X0$.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_PLUS_OK:switch(Q){case X0$.cc.NL:this.dispatcher.push({kind:X0$.Kind.OK}),this.drop=0,this.state=X0$.State.OP_START;break}break;case X0$.State.OP_MINUS:switch(Q){case X0$.cc.E:case X0$.cc.e:this.state=X0$.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_MINUS_E:switch(Q){case X0$.cc.R:case X0$.cc.r:this.state=X0$.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_MINUS_ER:switch(Q){case X0$.cc.R:case X0$.cc.r:this.state=X0$.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_MINUS_ERR:switch(Q){case X0$.cc.SPACE:case X0$.cc.TAB:this.state=X0$.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_MINUS_ERR_SPC:switch(Q){case X0$.cc.SPACE:case X0$.cc.TAB:continue;default:this.state=X0$.State.MINUS_ERR_ARG,this.as=Z}break;case X0$.State.MINUS_ERR_ARG:switch(Q){case X0$.cc.CR:this.drop=1;break;case X0$.cc.NL:{let X;if(this.argBuf)X=this.argBuf.bytes(),this.argBuf=void 0;else X=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:X0$.Kind.ERR,data:X}),this.drop=0,this.as=Z+1,this.state=X0$.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(Q))}break;case X0$.State.OP_P:switch(Q){case X0$.cc.I:case X0$.cc.i:this.state=X0$.State.OP_PI;break;case X0$.cc.O:case X0$.cc.o:this.state=X0$.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_PO:switch(Q){case X0$.cc.N:case X0$.cc.n:this.state=X0$.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_PON:switch(Q){case X0$.cc.G:case X0$.cc.g:this.state=X0$.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_PONG:switch(Q){case X0$.cc.NL:this.dispatcher.push({kind:X0$.Kind.PONG}),this.drop=0,this.state=X0$.State.OP_START;break}break;case X0$.State.OP_PI:switch(Q){case X0$.cc.N:case X0$.cc.n:this.state=X0$.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_PIN:switch(Q){case X0$.cc.G:case X0$.cc.g:this.state=X0$.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_PING:switch(Q){case X0$.cc.NL:this.dispatcher.push({kind:X0$.Kind.PING}),this.drop=0,this.state=X0$.State.OP_START;break}break;case X0$.State.OP_I:switch(Q){case X0$.cc.N:case X0$.cc.n:this.state=X0$.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_IN:switch(Q){case X0$.cc.F:case X0$.cc.f:this.state=X0$.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_INF:switch(Q){case X0$.cc.O:case X0$.cc.o:this.state=X0$.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_INFO:switch(Q){case X0$.cc.SPACE:case X0$.cc.TAB:this.state=X0$.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case X0$.State.OP_INFO_SPC:switch(Q){case X0$.cc.SPACE:case X0$.cc.TAB:continue;default:this.state=X0$.State.INFO_ARG,this.as=Z}break;case X0$.State.INFO_ARG:switch(Q){case X0$.cc.CR:this.drop=1;break;case X0$.cc.NL:{let X;if(this.argBuf)X=this.argBuf.bytes(),this.argBuf=void 0;else X=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:X0$.Kind.INFO,data:X}),this.drop=0,this.as=Z+1,this.state=X0$.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;default:throw this.fail($.subarray(Z))}}if((this.state===X0$.State.MSG_ARG||this.state===X0$.State.MINUS_ERR_ARG||this.state===X0$.State.INFO_ARG)&&!this.argBuf)this.argBuf=new Yt0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===X0$.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new Yt0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,Q=new Uint8Array($+Z);if(Q.set(this.ma.subject),this.ma.reply)Q.set(this.ma.reply,$);if(this.argBuf=new Yt0.DenoBuffer(Q),this.ma.subject=Q.subarray(0,$),this.ma.reply)this.ma.reply=Q.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case X0$.cc.SPACE:case X0$.cc.TAB:case X0$.cc.CR:case X0$.cc.NL:if(Q>=0)Z.push($.subarray(Q,X)),Q=-1;break;default:if(Q<0)Q=X}if(Q>=0)Z.push($.subarray(Q));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],_y);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],_y);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${Gt0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case X0$.cc.SPACE:case X0$.cc.TAB:case X0$.cc.CR:case X0$.cc.NL:if(Q>=0)Z.push($.subarray(Q,X)),Q=-1;break;default:if(Q<0)Q=X}if(Q>=0)Z.push($.subarray(Q));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],_y),this.ma.size=this.protoParseInt(Z[3],_y);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],_y),this.ma.size=this.protoParseInt(Z[4],_y);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let Q=0;for(let X=0;X<$.length;X++){if($[X]<Z0$||$[X]>O$4)return-1;Q=Q*10+($[X]-Z0$)}return Z!==void 0&&Q>Z?-1:Q}}X0$.Parser=Q0$;X0$.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};X0$.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var p70=v((G0$)=>{Object.defineProperty(G0$,"__esModule",{value:!0});G0$.MsgHdrsImpl=void 0;G0$.canonicalMIMEHeaderKey=Wt0;G0$.headers=w$4;var Y0$=WG(),o3=EO(),i70=HG();function Wt0($){let F=!0,N=Array($.length);for(let U=0;U<$.length;U++){let B=$.charCodeAt(U);if(B===58||B<33||B>126)throw i70.InvalidArgumentError.format("header",`'${$[U]}' is not a valid character in a header name`);if(F&&97<=B&&B<=122)B-=32;else if(!F&&65<=B&&B<=90)B+=32;N[U]=B,F=B==45}return String.fromCharCode(...N)}function w$4($=0,Z=""){if($===0&&Z!=="")throw i70.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw i70.InvalidArgumentError.format("description","is required");return new vy($,Z)}var Kt0="NATS/1.0";class vy{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,Q]of this.headers){let X=$.values(Z);if(Q.length!==X.length)return!1;let Y=[...Q].sort(),G=[...X].sort();for(let J=0;J<Y.length;J++)if(Y[J]!==G[J])return!1}return!0}return!1}static decode($){let Z=new vy,X=Y0$.TD.decode($).split(`\r
|
|
1494
1494
|
`),Y=X[0];if(Y!==Kt0){let G=Y.replace(Kt0,"").trim();if(G.length>0){if(Z._code=parseInt(G,10),isNaN(Z._code))Z._code=0;let J=Z._code.toString();G=G.replace(J,""),Z._description=G.trim()}}if(X.length>=1)X.slice(1).map((G)=>{if(G){let J=G.indexOf(":");if(J>-1){let K=G.slice(0,J),W=G.slice(J+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=Kt0;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,Q]of this.headers)for(let X=0;X<Q.length;X++)$=`${$}\r
|
|
1495
1495
|
${Z}: ${Q[X]}`;return`${$}\r
|
package/dist/server/server.js
CHANGED
|
@@ -2883,7 +2883,7 @@ Respond with the structured verdict and a short reason.`,Il$;var Ml$=D(()=>{l4()
|
|
|
2883
2883
|
${G.join(`
|
|
2884
2884
|
`)}`:Y}function UU6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2885
2885
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Kd$=200,XU6=12,YU6,JU6=300,u71=3;var c71=D(()=>{aD();TT0();YU6={aheadBy:0,behindBy:0,files:[]}});function OU6($){if(!$||$.includes(".."))return!1;return BU6.test($)}function Fd$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!OU6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Nd$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var BU6;var Ud$=D(()=>{BU6=/^[\w./@-]+$/});function za($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Bd$($,Z,X,Q){if(!Q.connectionId)throw new Av("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Av(K9);await xO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:K9;throw new Av(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await SK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=s5$(F instanceof Error?F.message:String(F));throw N?new Av(U):F}),K=nu($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await bO(H,DU6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var DU6=10485760,Av;var l71=D(()=>{WJ();UT0();Fn();Ci0();fy();Av=class Av extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function wU6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!LU6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Tv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(jU6)])}async function PU6($,Z){let X=$.var.studioContext,Q=GJ(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=RC(J?.metadata?.runtime);if(W)return W;let K=ZD0(Z.virtualMcpMetadata),H=K==="cms"?await A71(X,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",N=!!J&&(H==="gone"||H==="alive"&&K==="cms");if(N&&J)hn(X,J.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:H,resolved:F,stamped:N});return F}async function AU6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await YQ($.var.studioContext)}catch{return null}}function Rv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function au($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=za(Z,X);if(!Y)throw new h4(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return BT0(Q,G.id,Y)}function d71($,Z){if(Z instanceof EA0)return $.json({error:Z.message},429,{...A5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,A5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,A5)}async function Ld$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function wd$($){try{let Z=await au($),X=await RT0(Z,$.get("vmClaim").branch);return $.json(X,200,A5)}catch(Z){return d71($,Z)}}function Pa($,Z){let Q=(MT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return MT0.set($,Y),Y.finally(()=>{if(MT0.get($)===Y)MT0.delete($)}),Q}async function eZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,A5);let Q=X?.runner??Rv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...A5}})}}let O=await B.text(),L=X?.redactRepoDir?TU6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...A5}})};try{if(F){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function TU6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function kT0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function RU6($){return Ed$.includes($)}var LU6,Od$=524288,EU6=65536,jU6=1e4,Dd$=2000,zU6,MT0,A5,Ed$,jd$=()=>{let $=new F1;$.use("/:virtualMcpId/:branch/*",zU6),$.post("/:virtualMcpId/:branch/write",(X)=>eZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Tv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>eZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Tv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>eZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Tv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>eZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Tv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>eZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Tv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>eZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Tv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>eZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Tv(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return eZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return eZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>eZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>eZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!RU6(Q))return X.json({error:`step must be one of: ${Ed$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await A71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await AU6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,A5);if(Q==="start"){let J=o(X.var.studioContext),W=_y(Y.virtualMcpMetadata);try{await w70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${H}`},502)}}return eZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return rN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return jl$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return wd$(X);return Z(X)});let Z=(X)=>eZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Dd$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return wd$(X);return eZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Dd$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await au(X),J=await IT0(G,Q.branch,Y.base);return X.json(J,200,A5)}catch(Y){return d71(X,Y)}return eZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,A5);let Q=Rv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Pa(Y,async()=>{try{await T71(W,Q,Y);let K=za(G,J);if(K)await Bd$(W,Q,Y,K)}catch(K){if(K instanceof Av)return X.json({error:K.message},403,A5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,A5)}return eZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Pa(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,A5);try{let J=await au(X);return await Hd$(J,Q.branch,G),X.json({ok:!0},200,A5)}catch(J){let W=J instanceof h4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,A5)}});return Pa(Q.claimName,()=>eZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Pa(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await au(X),H=W.base??await K.getDefaultBranch();return await qT0(K,Q.branch,H),X.json({ok:!0},200,A5)}catch(W){return d71(X,W)}});let Y=Rv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Pa(G,async()=>{try{await T71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,A5)}return eZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",o5({maxSize:Od$,onError:(X)=>X.json({error:"Payload too large"},413,A5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Rv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=q71(F)&&U?[F,N]:Y?await Promise.all([kT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),kT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await au(X);return Promise.all([RT0(w,Q.branch),IT0(w,Q.branch)])})(),L=await Rl$(K,B,O);return X.json(L,200,A5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,A5);return X.json({error:F},502,A5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",o5({maxSize:Od$,onError:(X)=>X.json({error:"Payload too large"},413,A5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Rv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=q71(F)&&U?[F,N]:Y?await Promise.all([kT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),kT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await au(X);return Promise.all([RT0(w,Q.branch),IT0(w,Q.branch)])})(),L=await ql$(K,B,O,typeof H.language==="string"?H.language:void 0);return X.json(L,200,A5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,A5);return X.json({error:F},502,A5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Rv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return Ld$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",o5({maxSize:EU6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Rv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Fd$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Nd$(G,W.resolveType);return Ld$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var zd$=D(()=>{U8();AH();pu();P71();Gn();Ll$();d3();sy();wl$();t3();El$();zl$();ki0();Kn();V71();Ml$();C71();aD();c71();Ud$();l71();LU6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;zU6=NT0(async($,Z)=>{let X=$.var.studioContext;try{t(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{wU6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Qn({orgId:Y.id,virtualMcpId:G,branch:J}),H=await Ai0(X,J),F=Ti0(H,Q),N=Dl$({userId:F,projectRef:K}),U=W.metadata??null,B=await PU6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:F,virtualMcpMetadata:U,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await YQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});MT0=new Map;A5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Ed$=["clone","install","start"]});function Pd$($,Z,X){let Q=m71.get($);if(!Q)Q={pending:null,running:!1},m71.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)qU6($,Q);return G}async function qU6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await MU6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)m71.delete($)}}async function MU6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await su(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=g71(W,Q),H=[],F=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=h71(K,O),E=`${JSON.stringify(L,null,2)}
|
|
2886
|
-
`,j=await Z.createBlob(E);await Gd$(Z.owner,Z.repo,j,E);let z=w[0]??`${AT0(Q)}/${v71(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of h71(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=La(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:kU6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=IU6-1)throw O;await w$(X7(2000,200,Y,2,0.5))}}}function kU6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Li0(Q,$.deps.coAuthor)}var IU6=3,m71;var Ad$=D(()=>{oO0();DT0();W4();aD();TT0();m71=new Map});import{createHmac as Td$,randomBytes as VU6,timingSafeEqual as SU6}from"crypto";function Rd$(){if(VT0)return VT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return VT0=$?Buffer.from($):VU6(32),VT0}function i71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CU6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Td$("sha256",Rd$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Id$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Td$("sha256",Rd$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SU6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var CU6=21600000,VT0=null;var qd$=D(()=>{R$()});import{z as eu}from"zod";function vU6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_U6.test($)}function Cd$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Aa($){let Z=$.get("decofileScope");return BT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ta($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function _d$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Sd$),$.use("/:virtualMcpId/:branch/*",Sd$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Aa(Z),Y=await Jd$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=i71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Cd$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ta(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Aa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ta(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bU6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xU6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{OT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(_71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await Aa(Z),W=await Pd$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:nu(Q)},G),K=i71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Cd$(Z)})}catch(J){return Ta(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Aa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await qT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ta(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Aa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ta(Z,Q)}}),$}var _U6,Md$=500,kd$=1048576,Vd$=1024,fU6=8388608,bU6,xU6,Sd$;var vd$=D(()=>{an0();DT0();U8();AH();P71();UT0();l71();C71();Ad$();qd$();c71();aD();TT0();_U6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bU6=o5({maxSize:fU6,onError:($)=>$.json({error:"Payload too large"},413)}),xU6=eu.object({set:eu.record(eu.string(),eu.unknown()).optional(),delete:eu.array(eu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Md$,{message:`Patch cannot touch more than ${Md$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=kd$),{message:`Each block must be at most ${kd$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Vd$),{message:`Each block key must be at most ${Vd$} characters`}),Sd$=NT0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!vU6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Id$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!$D0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=za(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var fd$=($)=>{let Z=new F1;if(Z.use("*",Uv),Z.route("/",kA0()),Z.route("/",rg$()),Z.route("/",Xl$()),Z.route("/",ec$()),Z.route("/",KT0()),Z.route("/tools",Hl$()),Z.route("/",Jl$()),Z.route("/",_c$({kvStorage:$.kvStorage})),Z.route("/",Sc$()),Z.route("/fs",pc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",jd$()),Z.route("/decofile",_d$()),Z.route("/",rc$()),Z.route("/deco-sites",SA0()),Z.route("/sso",AA0()),Z.route("/",HT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",lg$()),$.mountDevAssets)Z.route("/dev-assets",CA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Hx$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",tc$()),Z.route("/mcp",_w0()),Z.route("/mcp/self",WT0()),Z.route("/mcp",bw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var bd$=D(()=>{U8();d91();dg$();n91();_A0();ls();c91();Cc$();vc$();nc$();ot();b91();xw0();O71();oc$();sc$();$l$();Ql$();Wl$();L71();Fl$();w71();vw0();zd$();vd$()});function yU6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var gU6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},xd$=()=>{let $=new F1;return $.use("*",gU6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await aZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yU6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var yd$=D(()=>{U8();R$();qP0()});import{z as M1}from"zod";function MH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tU6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function oU6($,Z,X){try{return JSON.parse($)}catch{throw new ud$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rU6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:oU6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function sU6($){let Z=$.map((X)=>{let Q=X.function.parameters?oY(X.function.parameters):oY({type:"object",properties:{}});return[X.function.name,h$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function aU6($){if(!$)return;return{openai:{response_format:$}}}function eU6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function gd$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function hd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hU6=256,uU6,cU6,lU6,dU6,mU6,iU6,pU6,nU6,ud$,cd$,ld$;var dd$=D(()=>{l4();U8();pu();VN();uU6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cU6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lU6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(cU6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dU6=M1.object({type:M1.literal("text")}),mU6=M1.object({type:M1.literal("json_object")}),iU6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),pU6=M1.union([dU6,mU6,iU6]),nU6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lU6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(uU6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:pU6.optional(),user:M1.string().optional()});ud$=class ud$ extends Error{constructor($){super($);this.name="MessageConversionError"}};cd$=new F1;cd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(MH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(MH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(MH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nU6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(MH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tU6(G.model);if(!J)return $.json(MH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>Dw(j.providerId));if(!E)return $.json(MH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(MH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=rU6(G.messages),U=G.tools?sU6(G.tools):void 0,B=aU6(G.response_format),O=eU6(),L=Math.floor(Date.now()/1000);if(G.stream)return rN($,async(w)=>{let E=gd$(F,N,U,G,B,$.req.raw.signal);try{let j=SO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=hU6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:hd$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=gd$(F,N,U,G,B,$.req.raw.signal),E=await kO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:hd$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(MH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(MH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(MH(Y.message,"server_error"),500)}});ld$=cd$});function $B6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function md$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!$J(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||yZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(ke1(N)!==G)continue;if(!$B6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var id$=D(()=>{U8();FO()});var nd$;var pd$=D(()=>{nd$={name:"decocms",version:"4.310.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function QB6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XB6}}var td$,XB6="https://ph.studio.decocms.com",od$;var rd$=D(()=>{U8();t50();nC();Q9();R$();q91();pd$();td$=new F1;td$.get("/",($)=>{let Z={version:nd$.version,theme:mi1(),...MF().logo&&{logo:MF().logo},...LN()&&{internalUrl:z_1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ay$(),posthog:QB6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ca()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});od$=td$});function $c($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function p71($){return($c($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ad$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent($c($))}&sz=${Z}`}function sd$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function ed$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?sd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):sd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Iv,YB6,GB6,JB6,WB6,$m$;var Zm$=D(()=>{Iv=l0.enum(["good","bad","neutral"]),YB6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:Iv.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),GB6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(YB6)),JB6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},WB6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:Iv.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:Iv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Iv.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:Iv.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(GB6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:Iv.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:Iv.optional()})).min(1)})]),$m$=l0.object({...JB6,template:WB6})});function ST0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=$m$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var n71=D(()=>{Zm$()});import{join as Xm$}from"path";async function HB6($){try{let Z=await fetch(`${NK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KB6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=ST0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||p71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function jG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function FB6($,Z){let X=$c($),Q=Z?.brand?.trim()||p71(X),Y=ad$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=ed$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${jG(W)}</title>`,`<meta name="description" content="${jG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${jG(W)}" />`,`<meta property="og:description" content="${jG(K)}" />`,`<meta property="og:url" content="${jG(J)}" />`,`<meta property="og:image" content="${jG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${jG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${jG(W)}" />`,`<meta name="twitter:description" content="${jG(K)}" />`,`<meta name="twitter:image" content="${jG(H)}" />`,`<meta name="twitter:image:alt" content="${jG(F)}" />`,`<link rel="canonical" href="${jG(J)}" />`,`<link rel="icon" href="${jG(Y)}" sizes="any" />`].join(`
|
|
2886
|
+
`,j=await Z.createBlob(E);await Gd$(Z.owner,Z.repo,j,E);let z=w[0]??`${AT0(Q)}/${v71(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of h71(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=La(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:kU6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=IU6-1)throw O;await w$(X7(2000,200,Y,2,0.5))}}}function kU6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Li0(Q,$.deps.coAuthor)}var IU6=3,m71;var Ad$=D(()=>{oO0();DT0();W4();aD();TT0();m71=new Map});import{createHmac as Td$,randomBytes as VU6,timingSafeEqual as SU6}from"crypto";function Rd$(){if(VT0)return VT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return VT0=$?Buffer.from($):VU6(32),VT0}function i71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+CU6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Td$("sha256",Rd$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Id$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Td$("sha256",Rd$()).update(Q).digest("base64url"));if(Y.length!==G.length||!SU6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var CU6=21600000,VT0=null;var qd$=D(()=>{R$()});import{z as eu}from"zod";function vU6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&_U6.test($)}function Cd$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Aa($){let Z=$.get("decofileScope");return BT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ta($,Z){if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function _d$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Sd$),$.use("/:virtualMcpId/:branch/*",Sd$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Aa(Z),Y=await Jd$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=i71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Cd$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ta(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Aa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ta(Z,Y)}}),$.patch("/:virtualMcpId/:branch",bU6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=xU6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{OT0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);if(_71(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await Aa(Z),W=await Pd$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:nu(Q)},G),K=i71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Cd$(Z)})}catch(J){return Ta(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Aa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof h4&&W.status===409))throw W;await qT0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return Ta(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Aa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ta(Z,Q)}}),$}var _U6,Md$=500,kd$=1048576,Vd$=1024,fU6=8388608,bU6,xU6,Sd$;var vd$=D(()=>{an0();DT0();U8();AH();P71();UT0();l71();C71();Ad$();qd$();c71();aD();TT0();_U6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bU6=o5({maxSize:fU6,onError:($)=>$.json({error:"Payload too large"},413)}),xU6=eu.object({set:eu.record(eu.string(),eu.unknown()).optional(),delete:eu.array(eu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Md$,{message:`Patch cannot touch more than ${Md$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=kd$),{message:`Each block must be at most ${kd$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Vd$),{message:`Each block key must be at most ${Vd$} characters`}),Sd$=NT0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!vU6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Id$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!$D0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=za(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var fd$=($)=>{let Z=new F1;if(Z.use("*",Uv),Z.route("/",kA0()),Z.route("/",rg$()),Z.route("/",Xl$()),Z.route("/",ec$()),Z.route("/",KT0()),Z.route("/tools",Hl$()),Z.route("/",Jl$()),Z.route("/",_c$({kvStorage:$.kvStorage})),Z.route("/",Sc$()),Z.route("/fs",pc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",jd$()),Z.route("/decofile",_d$()),Z.route("/",rc$()),Z.route("/deco-sites",SA0()),Z.route("/sso",AA0()),Z.route("/",HT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",lg$()),$.mountDevAssets)Z.route("/dev-assets",CA0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Hx$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",tc$()),Z.route("/mcp",_w0()),Z.route("/mcp/self",WT0()),Z.route("/mcp",bw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var bd$=D(()=>{U8();d91();dg$();n91();_A0();ls();c91();Cc$();vc$();nc$();ot();b91();xw0();O71();oc$();sc$();$l$();Ql$();Wl$();L71();Fl$();w71();vw0();zd$();vd$()});function yU6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var gU6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},xd$=()=>{let $=new F1;return $.use("*",gU6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await aZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:yU6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var yd$=D(()=>{U8();R$();qP0()});import{z as M1}from"zod";function MH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function tU6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function oU6($,Z,X){try{return JSON.parse($)}catch{throw new ud$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function rU6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:oU6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function sU6($){let Z=$.map((X)=>{let Q=X.function.parameters?oY(X.function.parameters):oY({type:"object",properties:{}});return[X.function.name,h$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function aU6($){if(!$)return;return{openai:{response_format:$}}}function eU6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function gd$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function hd$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var hU6=256,uU6,cU6,lU6,dU6,mU6,iU6,pU6,nU6,ud$,cd$,ld$;var dd$=D(()=>{l4();U8();pu();VN();uU6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),cU6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),lU6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(cU6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),dU6=M1.object({type:M1.literal("text")}),mU6=M1.object({type:M1.literal("json_object")}),iU6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),pU6=M1.union([dU6,mU6,iU6]),nU6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(lU6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(uU6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:pU6.optional(),user:M1.string().optional()});ud$=class ud$ extends Error{constructor($){super($);this.name="MessageConversionError"}};cd$=new F1;cd$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(MH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(MH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(MH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=nU6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(MH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=tU6(G.model);if(!J)return $.json(MH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>Dw(j.providerId));if(!E)return $.json(MH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(MH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=rU6(G.messages),U=G.tools?sU6(G.tools):void 0,B=aU6(G.response_format),O=eU6(),L=Math.floor(Date.now()/1000);if(G.stream)return rN($,async(w)=>{let E=gd$(F,N,U,G,B,$.req.raw.signal);try{let j=SO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=hU6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:hd$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=gd$(F,N,U,G,B,$.req.raw.signal),E=await kO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:hd$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(MH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(MH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(MH(Y.message,"server_error"),500)}});ld$=cd$});function $B6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function md$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!$J(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||yZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(ke1(N)!==G)continue;if(!$B6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var id$=D(()=>{U8();FO()});var nd$;var pd$=D(()=>{nd$={name:"decocms",version:"4.310.6",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^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","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function QB6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??XB6}}var td$,XB6="https://ph.studio.decocms.com",od$;var rd$=D(()=>{U8();t50();nC();Q9();R$();q91();pd$();td$=new F1;td$.get("/",($)=>{let Z={version:nd$.version,theme:mi1(),...MF().logo&&{logo:MF().logo},...LN()&&{internalUrl:z_1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:ay$(),posthog:QB6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ca()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});od$=td$});function $c($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function p71($){return($c($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ad$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent($c($))}&sz=${Z}`}function sd$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function ed$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?sd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):sd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Iv,YB6,GB6,JB6,WB6,$m$;var Zm$=D(()=>{Iv=l0.enum(["good","bad","neutral"]),YB6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:Iv.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),GB6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(YB6)),JB6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},WB6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:Iv.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:Iv.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Iv.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:Iv.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(GB6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:Iv.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:Iv.optional()})).min(1)})]),$m$=l0.object({...JB6,template:WB6})});function ST0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=$m$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var n71=D(()=>{Zm$()});import{join as Xm$}from"path";async function HB6($){try{let Z=await fetch(`${NK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(KB6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=ST0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||p71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function jG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function FB6($,Z){let X=$c($),Q=Z?.brand?.trim()||p71(X),Y=ad$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=ed$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${jG(W)}</title>`,`<meta name="description" content="${jG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${jG(W)}" />`,`<meta property="og:description" content="${jG(K)}" />`,`<meta property="og:url" content="${jG(J)}" />`,`<meta property="og:image" content="${jG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${jG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${jG(W)}" />`,`<meta name="twitter:description" content="${jG(K)}" />`,`<meta name="twitter:image" content="${jG(H)}" />`,`<meta name="twitter:image:alt" content="${jG(F)}" />`,`<link rel="canonical" href="${jG(J)}" />`,`<link rel="icon" href="${jG(Y)}" sizes="any" />`].join(`
|
|
2887
2887
|
`)}function NB6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2888
2888
|
</head>`)}function Qm$($){let Z=new F1;return Z.get("/:domain/og.png",async(X)=>{let Q=$c(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Xm$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${NK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(UB6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?Xm$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await HB6($c(Q)),K=FB6(Q,W);return X.html(NB6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var KB6=2500,UB6=1e4;var Ym$=D(()=>{U8();n71();EE();R$()});function Ra($,Z){return fetch(`${NK({})}${$}`,Z)}async function BB6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Ra(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=ST0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var OB6,aN,Gm$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Jm$;var Wm$=D(()=>{U8();iY();EE();n71();OB6=new Set(["complete","errored","terminated","unknown"]),aN=new F1;aN.use("*",async($,Z)=>{let X=await a$.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});aN.use("/link-token/*",Gm$);aN.use("/suggest",Gm$);aN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await BB6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});aN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Ra("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${wE({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});aN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Ra(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${wE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:OB6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});aN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Ra(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});aN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Ra(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});Jm$=aN});import{createHmac as DB6,timingSafeEqual as LB6}from"crypto";function Hm$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>wB6)return!1;let W=DB6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&LB6(K,F)})}function Fm$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=cJ(Z),Q=cJ(cJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:kH(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function Nm$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function kH($){return typeof $==="string"?$:void 0}function cJ($){return typeof $==="object"&&$!==null?$:void 0}function CT0($){return typeof $==="number"?new Date($*1000):null}function r71($){return kH($)??kH(cJ($)?.id)}function EB6($){return r71($.subscription)??kH(cJ(cJ($.parent)?.subscription_details)?.subscription)}function jB6($){let Z=CT0($.current_period_end);if(Z)return Z;let X=cJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=cJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function t71($,Z){let X=CT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function o71($,Z){let X=CT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function zB6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=kH(cJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(kH(cJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(kH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=kH(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(cJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:cJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(kH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=r71(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(t71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:r71(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:o71(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=kH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&t71(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Nm$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:jB6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:o71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=EB6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(t71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:CT0(X.period_end),lastStripeEventAt:o71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function PB6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Nm$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function Km$($,Z){let X=PB6($,Z);if(!X)return;cY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:an1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Um$($){let Z=new WK(r8().db),X=await zB6(Z,$);if(!(X.handled&&X.topUp))Km$($,X);if(X.handled&&X.topUp)await Sj$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Km$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await q0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof pY&&(Q.status===400||Q.status===404)))throw Q}return X}var wB6=300;var Bm$=D(()=>{nG();S4();M50();kE();W11()});var AB6=1048576,s71;var Om$=D(()=>{U8();AH();R$();Bm$();s71=new F1;s71.post("/webhook",o5({maxSize:AB6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Hm$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Fm$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Um$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as TB6}from"crypto";function IB6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return TB6(Buffer.from(Y),Buffer.from(Q))}var RB6=5242880,a71;var Dm$=D(()=>{U8();AH();t3();a71=new F1;a71.post("/webhook",o5({maxSize:RB6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!IB6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await rn0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Lm$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var wm$,qB6,MB6,Em$;var jm$=D(()=>{U8();q3();zg();Ny();wm$=new F1,qB6=["range","if-none-match","if-modified-since"],MB6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];wm$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Mu($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Z$(401,{message:"Authentication required"})}if(!X)throw new Z$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Z$(400,{message:"Missing file key"});let Y=await zt(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&sG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Z$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Lm$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of qB6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Z$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new Z$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of MB6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Lm$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Em$=wm$});var Ia=_((qv)=>{var kB6=qv&&qv.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),VB6=qv&&qv.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))kB6(Z,$,X)};Object.defineProperty(qv,"__esModule",{value:!0});VB6(qY(),qv)});var Am$=_((zm$)=>{Object.defineProperty(zm$,"__esModule",{value:!0});zm$.version=void 0;zm$.version="3.4.0"});var Im$=_((VH)=>{var SB6=VH&&VH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(VH,"__esModule",{value:!0});VH.NodeTransport=VH.VERSION=void 0;VH.nodeResolveHost=xB6;var a6=Ia(),CB6=P0("net"),e71=P0("tls"),_B6=P0("path"),Tm$=P0("fs"),vB6=SB6(P0("dns")),fB6=Am$();VH.VERSION=fB6.version;var bB6="nats.js";class Rm${socket;version;lang;yields=[];signal=(0,a6.deferred)();closedNotification=(0,a6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=bB6,this.version=VH.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,a6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw a6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new a6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new a6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,a6.deferred)(),X,Q=(0,CB6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,a6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=a6.DataBuffer.concat(...this.yields),Y=(0,a6.extractProtocolMessage)(Q);if(Y!=="")try{let G=a6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,a6.deferred)();try{if($=(0,_B6.resolve)($),!(0,Tm$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Tm$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,a6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new a6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,a6.deferred)();try{let Y=(0,e71.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new a6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,a6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new a6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,a6.deferred)();try{let Q=(0,e71.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new a6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,a6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,a6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof e71.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,a6.render)($)}`);let Z=(0,a6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,a6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,a6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}VH.NodeTransport=Rm$;function xB6($){let Z=(0,a6.deferred)();return vB6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Sm$=_((Vm$)=>{Object.defineProperty(Vm$,"__esModule",{value:!0});Vm$.connect=yB6;var qm$=Im$(),Mm$=Ia(),km$=Ia();function yB6($={}){if((0,km$.hasWsProtocol)($))return Promise.reject(km$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Mm$.setTransportFactory)({factory:()=>{return new qm$.NodeTransport},dnsResolveFn:qm$.nodeResolveHost}),Mm$.NatsConnectionImpl.connect($)}});var Cm$=_((eN)=>{var hB6=eN&&eN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),uB6=eN&&eN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))hB6(Z,$,X)};Object.defineProperty(eN,"__esModule",{value:!0});eN.connect=void 0;var cB6=Sm$();Object.defineProperty(eN,"connect",{enumerable:!0,get:function(){return cB6.connect}});uB6(Ia(),eN)});function bm$($){let Z=$?.connectFn??iB6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:mB6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{O++;let L=X7(dB6,lB6,O-1,2,0.5);await w$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?_m$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=fm$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function iB6($){return vm$.connect($)}var _m$,vm$,fm$,lB6=100,dB6=3000,mB6=3000;var xm$=D(()=>{W4();_m$=V(Ic(),1),vm$=V(Cm$(),1),fm$=V(AL(),1)});function $X1($,Z){return`${$}.${Z}`}class ZX1{cache;constructor($){this.cache=Ku({ttlMs:$?.ttlMs??pB6,maxSize:$?.maxSize??nB6})}async get($,Z){return this.cache.get($X1($,Z))??null}async set($,Z,X){this.cache.set($X1($,Z),X)}async invalidate($,Z){this.cache.delete($X1($,Z))}teardown(){this.cache.clear()}}var pB6=600000,nB6=5000;var ym$=()=>{};function _T0($,Z){return`${$}:${Z}`}function XX1($){let Z=Ku({ttlMs:$?.ttlMs??tB6,maxSize:$?.maxSize??oB6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(gm$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(_T0(K,H))},set(K,H,F){Z.set(_T0(K,H),F)},invalidate(K,H){Z.delete(_T0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(gm$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(_T0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var gm$="studio.ai-provider-keys.invalidate",tB6=30000,oB6=5000;var hm$=()=>{};class QX1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var um$=($)=>{let Z;return()=>Z??=$()},YX1,GX1;var cm$=D(()=>{B6();YX1=um$(()=>W$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),GX1=um$(()=>W$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function XO6($=mm$){return{name:oK,subjects:[`${ws0}.>`],storage:PW.StorageType.File,max_age:aB6,max_bytes:$O6,max_msgs_per_subject:ZO6,discard:PW.DiscardPolicy.Old,retention:PW.RetentionPolicy.Limits,duplicate_window:eB6,num_replicas:$}}class im${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function lm$($){let Z=dm$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function JO6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,sB6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function WO6($,Z){return $.info?.cluster?Z:1}function KO6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class JX1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Q,Y)=>{let G=XO6(Y);try{await Q.streams.info(oK),await Q.streams.update(oK,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update(oK,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(oK),await Q.streams.add(G);else throw J}},X=await g6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await PW.jetstreamManager($),Y=WO6($,mm$);try{await Z(Q,Y)}catch(G){if(Y<=1||!KO6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Cg});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=JO6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=LO$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=js0(H,{runId:Z}),U=performance.now()-F;YX1().record(U),GX1().add(1,{"org.id":Q??"unknown"}),GO6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?lm$(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),N++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),YO6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishSerialized($,Z){try{return await g6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:lm$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Cg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=js0(Z,{runId:$,dedup:X});YX1().record(performance.now()-Y),GX1().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=DO$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?PW.DeliverPolicy.New:PW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=OD($),W;try{W=await g6(async()=>{return(await Q.consumers.get(oK,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Cg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=Uw0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Kw0()).pipeThrough(Hw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await F.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(oK,{filter:OD($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var PW,dm$,rB6=($)=>{let Z;return()=>Z??=$()},sB6,aB6=86400000000000,eB6=120000000000,$O6=4294967296,mm$,ZO6=500000,QO6,YO6,GO6;var pm$=D(()=>{W4();zs0();Bw0();Fw0();B6();cm$();PW=V(AL(),1),dm$=V(Ic(),1),sB6=rB6(()=>W$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),mm$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);QO6=process.env.STREAM_ENCODE_TRACE==="1",YO6=process.env.DECOPILOT_STREAM_TRACE==="1";GO6=QO6?new im$:null});function vT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,mW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var nm$=D(()=>{_8()});class WX1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function tm$($,Z,X){let Q=Z.organizationId;if(!eQ(Z,(await _5($,Q)).review))return!1;if(!dC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=PK(Y?.flags),J=await E5($,Q),W=await $.storage.taskBoard.update(Z.id,Q,NJ(J,G),Z.updatedBy);return await A6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),b$(Q,W),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var om$=D(()=>{j6();NX();wg();i5();cK();j5()});function DO6($){return $ instanceof sX}function LO6($,Z){return Z-$>=BO6}class KX1{taskBoard;contextFactory;billing;db;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.db=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??HO6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??NO6,X=this.options.itemIntervalMs??FO6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-gt0),yo0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-OO6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await fo0(this.taskBoard,Y,Q,await QN(this.db,Q)),await bo0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==X8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await ON(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),DO6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+UO6),(await QN(this.db,Y)).progress).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await QN(this.db,Z),Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!=="in_progress")return;let G=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy,Q);if(!G)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),b$(Z,G)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!LO6(gF(X,Z.reviewCycleStartedAt),Date.now()))return;await dK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;let Y=await QN(this.db,Z);if(!eQ(Q,Y.review))return!1;let G=Q.assigneeId===X8,J=await this.taskBoard.listPrs($,Z),W=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!W)return!1;if(J.length===0){if(G)await this.handOffReviewWithoutPr(W,Q);return!1}let K=await Promise.all(J.map(async(H)=>({...H,...await jg(Z,H)})));if(K.every((H)=>H.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await tm$(W,Q,K))return!0;if(await WD$(W,Q))return!0;if(await this.resolveConflictFromSweep(W,Q,K))return!0;if(!G)return!1;if(!Xr0(K))return!1;return await TL0(W,Q,{previewMatchesHead:Qr0(K)}),!0}async resolveConflictFromSweep($,Z,X){let Q=X.find((Y)=>Y.state!=="closed"&&Y.conflict===!0);if(!Q)return!1;return await WD($,Z.organizationId,Z,{pr:{number:Q.number,url:Q.url},conflict:!0}).catch((Y)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",Y),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var HO6=60000,FO6=300000,NO6=50,UO6=60000,BO6=900000,OO6=120000;var rm$=D(()=>{i5();j6();to0();BN();ct();cK();om$();j5();XJ();go0();YG();Lt();Eg()});import{readdir as wO6,rm as fT0}from"fs/promises";import{join as bT0}from"path";async function xT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-EO6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await Mv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await sm$($,Y,Z);else if(!Y.startsWith(".")){let G=bT0($,Y),J=await Mv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await sm$(G,K,Z)}if((await Mv(G)).length===0)await fT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function sm$($,Z,X){let Q=0,Y=bT0($,Z),G=await Mv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=bT0(Y,W),H=await Mv(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=bT0(K,N);await fT0(B,{recursive:!0,force:!0}),Q++}}if((await Mv(K)).length===0)await fT0(K,{recursive:!0,force:!0})}if((await Mv(Y)).length===0)await fT0(Y,{recursive:!0,force:!0});return Q}async function Mv($){try{return(await wO6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var EO6=30;var HX1=()=>{};import{DBOS as FX1,SchedulerMode as jO6}from"@dbos-inc/dbos-sdk";async function PO6(){let $=[dJ(),kv(),vH()],Z=0;for(let X of $)try{Z+=await xT0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function AO6($,Z){await FX1.runStep(()=>PO6(),{name:"monitoringRetention"})}function em$(){if(am$)return;am$=!0;let $=FX1.registerWorkflow(AO6,{name:"monitoringRetentionWorkflow"});FX1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:zO6,mode:jO6.ExactlyOncePerIntervalWhenActive})}var zO6="23 4 * * *",am$=!1;var $i$=D(()=>{AY();HX1()});function Zi$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await DJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await Rt($.db,Z,Q.role);return Y.boundAuth=H91({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new XE(X,void 0,Y.boundAuth,Q.role,"self"),QD(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Xi$=D(()=>{cB();YD()});function TO6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function RO6(){return{services:TO6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function qO6(){for(let $ of IO6)$()}function Qi$($){let Z=[...NX1.logs,$];NX1={...NX1,logs:Z.length>500?Z.slice(-500):Z},qO6()}function UX1(){return MO6}var NX1,IO6,MO6=!1;var BX1=D(()=>{NX1=RO6(),IO6=new Set});import{EventEmitter as kO6}from"events";var OX1;var Yi$=D(()=>{BX1();OX1=new kO6;OX1.on("request",($)=>{Qi$($)})});function Gi$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let B=Zc(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>Zc(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${J5.tool}${B}${J5.dim}(${w})${J5.reset}`}else if(U.method)G=`${J5.dim}${Zc(U.method)}${J5.reset}`}}catch{}}let W=Zc(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${J5.mcp}${Zc(F.slice(0,12))}\u2026${J5.reset}`}else if(Y==="/mcp")W=`${J5.mcp}/mcp${J5.reset}`;else if(Y==="/mcp/registry")W=`${J5.mcp}/mcp/registry${J5.reset}`;let K=SO6(Q),H=J?"\u25C0":"\u2190";if(!UX1())console.log(`${J5.dim}${H}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=VO6(N),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!UX1())console.log(`${J5.dim}${O}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""} ${U}${N}${J5.reset} ${J5.duration}${B}${J5.reset}`);OX1.emit("request",{method:Q,path:Zc(Y),status:N,duration:F,timestamp:new Date})}}}var J5,VO6=($)=>{if($>=500)return J5.serverError;if($>=400)return J5.clientError;if($>=300)return J5.redirect;return J5.ok},SO6=($)=>{return J5[$]||J5.reset},Zc=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Ji$=D(()=>{BX1();Yi$();J5={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 Fi$}from"crypto";import{mkdir as CO6,readdir as _O6,rm as Wi$,stat as Ni$}from"fs/promises";import{join as LX1,relative as vO6}from"path";import{z as P$}from"zod";function Bi$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return LX1(fO6,Z)}function Oi$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function DX1($,Z){let X=Bi$($),Q=Oi$(Z);return LX1(X,Q)}function bO6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Fi$("sha256",Y).update(G).digest("hex")}function Hi$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=bO6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Oi$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Di$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Fi$("md5","etag").update(Q).digest("hex")}"`}async function Li$($,Z,X,Q,Y){try{let G=await _O6($,{withFileTypes:!0});for(let J of G){let W=LX1($,J.name),H=vO6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Li$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await Ni$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Di$(W,F.mtime,F.size)})}catch{}}}}catch{}}function wi$($,Z){let Q=o($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Bi$(Q);await CO6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Li$(F,F,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((w)=>w.key>H),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=DX1(Q,G.key),W=await Ni$(J);return{contentType:o91(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Di$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Ki$;return{url:Hi$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Ki$;return{url:Hi$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=DX1(Q,G.key);try{return await Wi$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=DX1(Q,K);try{await Wi$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function wX1($,Z,X){let Q=wi$(Z,X),Y=new sW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:N5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new JQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),IJ(Y,G,$,"mcp:dev-assets")}async function Ei$($,Z,X,Q){let G=wi$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var fO6="./data/assets",Ki$=3600,Ui$,ji$;var zi$=D(()=>{R$();gg();U8();td();N_();lX();_A0();Ui$=new F1;Ui$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return wX1($.req.raw,Z,Q)});ji$=Ui$});var Pi$={};J4(Pi$,{mountDevRoutes:()=>xO6});function xO6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return wX1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Ei$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",ji$);let X=new F1;X.use("*",jW({mountPath:"/api/dev-assets"})),X.route("/",CA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Ai$=D(()=>{U8();l91();_A0();zi$()});import{sql as yO6}from"kysely";import{randomUUID as Ti$}from"crypto";import{z as gO6}from"zod";async function uO6($){let Z=new Date().toISOString(),X=Ti$(),Q=C8.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Ti$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await yO6`SELECT
|
|
2889
2889
|
pg_notify('studio_events', ${X}),
|