decocms 4.381.0 → 4.381.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-DRm80850.js → AlertCircle-BwHVY35o.js} +1 -1
- package/dist/client/assets/{AreaChart-B6A2Hh8L.js → AreaChart-D84rGbXX.js} +1 -1
- package/dist/client/assets/{ArrowLeft-C-6qKzGl.js → ArrowLeft-DnFqk-Hp.js} +1 -1
- package/dist/client/assets/{ArrowRight-BioszTvC.js → ArrowRight-CG7y79q3.js} +1 -1
- package/dist/client/assets/{ArrowUp-BYsS0mdx.js → ArrowUp-Bm0X834W.js} +1 -1
- package/dist/client/assets/{CartesianChart-JLZp1PXE.js → CartesianChart-DXRzAXkY.js} +1 -1
- package/dist/client/assets/{CheckCircle-mF7clgex.js → CheckCircle-C-wVqn9s.js} +1 -1
- package/dist/client/assets/{ChevronUp-C-mJ4yLa.js → ChevronUp-DjGa4Boj.js} +1 -1
- package/dist/client/assets/{Copy01-WToEL8yK.js → Copy01-BRhhBrd-.js} +1 -1
- package/dist/client/assets/{CreditCard01-BoEWz7x3.js → CreditCard01-DBWDwJPr.js} +1 -1
- package/dist/client/assets/{DotsVertical-BdXTux4Q.js → DotsVertical-DnSyCHLw.js} +1 -1
- package/dist/client/assets/{Download01-CHE961G_.js → Download01-BtC1xWJa.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-B0A7dacM.js → ErrorBarContext-wx_trV65.js} +1 -1
- package/dist/client/assets/{Eye-IjKfX9o8.js → Eye-DjWZWqC5.js} +1 -1
- package/dist/client/assets/{Globe01-C_CZtN5r.js → Globe01-CcPzGZAq.js} +1 -1
- package/dist/client/assets/{Globe04-B85WJ-Aa.js → Globe04-oytGbm52.js} +1 -1
- package/dist/client/assets/{Image01-BDLUws38.js → Image01-DBJlfnbG.js} +1 -1
- package/dist/client/assets/{Key01-BdH2PX1n.js → Key01-BSzDlvgU.js} +1 -1
- package/dist/client/assets/{LayoutLeft-B0PlRM99.js → LayoutLeft-uhMwovcu.js} +1 -1
- package/dist/client/assets/{Line-BxiLHDUQ.js → Line-B1CDKPTZ.js} +1 -1
- package/dist/client/assets/{Link01-C9Y0BBRe.js → Link01-YtEzcC3O.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DIS-ugNh.js → LinkExternal01-B_tP0lGk.js} +1 -1
- package/dist/client/assets/{Monitor01-Ba46t5H5.js → Monitor01-DZ9Fq-Na.js} +1 -1
- package/dist/client/assets/{Package-DunNAz5T.js → Package-B52pYozJ.js} +1 -1
- package/dist/client/assets/{Palette-D5P-K0no.js → Palette-k3jDn-tr.js} +1 -1
- package/dist/client/assets/{Play-DrTEe1DD.js → Play-TbA_0tTu.js} +1 -1
- package/dist/client/assets/{Plus-C-PmR46O.js → Plus-BMzoc0gw.js} +1 -1
- package/dist/client/assets/{SearchLg-CKklIQBK.js → SearchLg-Dd6xPdrU.js} +1 -1
- package/dist/client/assets/{SearchMd-w2kAyM0h.js → SearchMd-_UV4M1B1.js} +1 -1
- package/dist/client/assets/{Sector-BKcNljSW.js → Sector-Cy-35iXL.js} +1 -1
- package/dist/client/assets/{Settings02-B23lEJQ_.js → Settings02-9i68UkBW.js} +1 -1
- package/dist/client/assets/{Share07-CqLE5DCF.js → Share07-CL5mbh1y.js} +1 -1
- package/dist/client/assets/{Stars01-B3lEx1Rv.js → Stars01-DlXoxgwa.js} +1 -1
- package/dist/client/assets/{Sun-iGQ6fzMW.js → Sun-_MKalIqR.js} +1 -1
- package/dist/client/assets/{Tool01-BjvhUZR8.js → Tool01-CU565kli.js} +1 -1
- package/dist/client/assets/{Tool02-CJ1YPr9M.js → Tool02-Bb6Dmyzo.js} +1 -1
- package/dist/client/assets/{Trash01-DpHvryKg.js → Trash01-DBKmXLFe.js} +1 -1
- package/dist/client/assets/{TrendUp01-Ct_gORpk.js → TrendUp01-2Ud1bdxk.js} +1 -1
- package/dist/client/assets/{Upload01-cKRw4EJm.js → Upload01-Cj6T5I7O.js} +1 -1
- package/dist/client/assets/{User01-jpO1fu6m.js → User01-C2ZiXxql.js} +1 -1
- package/dist/client/assets/{UserSquare-DFnOMuvf.js → UserSquare-DKnU_ZuL.js} +1 -1
- package/dist/client/assets/{Users01-BH4y7klV.js → Users01-kERUftBn.js} +1 -1
- package/dist/client/assets/{X-Kva1-1w6.js → X-BhzA_1fc.js} +1 -1
- package/dist/client/assets/{XCircle-is5Yz5zC.js → XCircle-5bxw-TCO.js} +1 -1
- package/dist/client/assets/{XClose-CTi-Jfjf.js → XClose-Wb3kb2wQ.js} +1 -1
- package/dist/client/assets/{Zap-BaNiFF73.js → Zap-C7SsP-IX.js} +1 -1
- package/dist/client/assets/{ZoomOut-B4bCZT0v.js → ZoomOut-DD63PTKM.js} +1 -1
- package/dist/client/assets/{access-gate-BIJUwHgU.js → access-gate-CF90D6ZN.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-meZHqquz.js → add-connection-dialog-DW65U6Wq.js} +1 -1
- package/dist/client/assets/{agent-analytics-BNio_Xoa.js → agent-analytics-XBQDhiev.js} +1 -1
- package/dist/client/assets/agent-app-DzMKE0bK.js +1 -0
- package/dist/client/assets/{agent-assets-CrBmJTwb.js → agent-assets-BuN3RBoX.js} +1 -1
- package/dist/client/assets/{agent-automation-CMfYmOqA.js → agent-automation-CrEsEqJi.js} +1 -1
- package/dist/client/assets/{agent-automations-DCUziLFb.js → agent-automations-DjEr5OON.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-CwuA44eN.js → agent-connect-sources-C1qjhYRh.js} +1 -1
- package/dist/client/assets/agent-deck-DtjwfP_s.js +1 -0
- package/dist/client/assets/{agent-e2e-q13uurpy.js → agent-e2e-Cfg26cM_.js} +1 -1
- package/dist/client/assets/{agent-experiments-Cx09CiYJ.js → agent-experiments-BIEq8Lo9.js} +1 -1
- package/dist/client/assets/agent-file-qEpGLLaq.js +1 -0
- package/dist/client/assets/{agent-git-DzjS7TA-.js → agent-git-D7wfr3_G.js} +1 -1
- package/dist/client/assets/{agent-hosting-DeY3Fxvw.js → agent-hosting-CilFkS1d.js} +1 -1
- package/dist/client/assets/{agent-icon-Dea2QsJ5.js → agent-icon-evl-xYsS.js} +1 -1
- package/dist/client/assets/agent-library-file-8ZuJr1v5.js +1 -0
- package/dist/client/assets/{agent-monitor-CxFGwLAH.js → agent-monitor-C0Fm4BUv.js} +1 -1
- package/dist/client/assets/{agent-overview-BK0Ly3j7.js → agent-overview-BjM__Csy.js} +1 -1
- package/dist/client/assets/agent-settings-bF0PHMwv.js +1 -0
- package/dist/client/assets/{agent-site-editor-DoqZzjS4.js → agent-site-editor-DX54ZFDP.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-DQcBjkuE.js +2 -0
- package/dist/client/assets/{agent-site-editor-content-BgfGo5fz.js → agent-site-editor-content-DLuPYCjb.js} +2 -2
- package/dist/client/assets/{agent-site-editor-preview-CG3QbZz5.js → agent-site-editor-preview-B7EGGax5.js} +3 -3
- package/dist/client/assets/agent-view-CzBjw4N4.js +1 -0
- package/dist/client/assets/{agent-view-guard-u4P6ATvB.js → agent-view-guard-CCd22E1L.js} +1 -1
- package/dist/client/assets/{agents-list-DlpAMFxu.js → agents-list-D93GLjoE.js} +1 -1
- package/dist/client/assets/{ai-providers-DOwb34Gp.js → ai-providers-B9EE6Evb.js} +1 -1
- package/dist/client/assets/{alert-DjLHClqz.js → alert-DGEbBMaM.js} +1 -1
- package/dist/client/assets/{alert-dialog-D-E1S18Y.js → alert-dialog-i5Kug417.js} +1 -1
- package/dist/client/assets/api-keys-BJNqXGRk.js +1 -0
- package/dist/client/assets/{api-keys-C8ERA1BS.js → api-keys-C6WYCwY7.js} +1 -1
- package/dist/client/assets/app-editor-CLSwHRy5.js +1 -0
- package/dist/client/assets/{asset-utils-bWUI5ZgC.js → asset-utils-DpED9-PH.js} +1 -1
- package/dist/client/assets/{auth-BmR-l5Yo.js → auth-BSa1jG6_.js} +1 -1
- package/dist/client/assets/{auth-catchall-BRJJVRKl.js → auth-catchall-C6Yfki6S.js} +1 -1
- package/dist/client/assets/{auth-entry-DUgoxFbj.js → auth-entry-DesK7O7A.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CJxyhLqt.js → auth-split-layout-BBjCOPFN.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-k1l_ccih.js → authenticate-and-persist-oauth-R7mrW7Ic.js} +1 -1
- package/dist/client/assets/{automation-list-row-DB7YW85_.js → automation-list-row-DyFJiE-i.js} +1 -1
- package/dist/client/assets/{automation-runs-BOpb8six.js → automation-runs-1dbZvXFH.js} +1 -1
- package/dist/client/assets/{automations-BmakHAFO.js → automations-7EQqwttv.js} +1 -1
- package/dist/client/assets/{autosend-Depmmptr.js → autosend-Cqvvj0w1.js} +1 -1
- package/dist/client/assets/{avatar-O6wTdnIX.js → avatar-FK7QRIag.js} +1 -1
- package/dist/client/assets/{badge-DoAzEZn5.js → badge-u9Hsr2d5.js} +1 -1
- package/dist/client/assets/block-document-D10w--Mb.js +3 -0
- package/dist/client/assets/{blocks-preview-workspace-context-Car-K0uy.js → blocks-preview-workspace-context-DI5uf_jB.js} +1 -1
- package/dist/client/assets/{breadcrumb-BmkIA-fv.js → breadcrumb-UAWwfJqE.js} +1 -1
- package/dist/client/assets/{buckets-h_pHyvSy.js → buckets-BW8c0lp3.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-BEUB8P7A.js → build-improve-prompt-doc-C3cWYyT9.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-Ckd0FuR3.js → bulk-category-panel-DP5C4hjp.js} +1 -1
- package/dist/client/assets/{calendar-D4Craz7_.js → calendar-CIMSGrCu.js} +1 -1
- package/dist/client/assets/{capability-load-error-BloIwmrF.js → capability-load-error-DhHYfXLK.js} +1 -1
- package/dist/client/assets/category-editor-7J26OnED.js +1 -0
- package/dist/client/assets/{chart-Bn2p5h0c.js → chart-DIj8Q5yX.js} +1 -1
- package/dist/client/assets/{chat-context-B06uBhCi.js → chat-context-B7MmQdh-.js} +1 -1
- package/dist/client/assets/{chat-draft-4cBKna-O.js → chat-draft-SlXrLeIK.js} +1 -1
- package/dist/client/assets/{checkbox-cLpyandh.js → checkbox-CWmkLo2r.js} +1 -1
- package/dist/client/assets/{choose-editor-BQHy-4Ny.js → choose-editor-t1hiEvab.js} +1 -1
- package/dist/client/assets/{cli-auth-success-BU8Y5A6a.js → cli-auth-success-BQOVKJZe.js} +1 -1
- package/dist/client/assets/{client-icons-Cje86OHl.js → client-icons-A_s8whpB.js} +1 -1
- package/dist/client/assets/{collapsible-CrphyGjf.js → collapsible-BasgjGsI.js} +1 -1
- package/dist/client/assets/{collection-detail-Z1ViTGh_.js → collection-detail-GuNnbLui.js} +1 -1
- package/dist/client/assets/collection-display-button-Bw590BAk.js +1 -0
- package/dist/client/assets/{collection-search-BRxo-Fi-.js → collection-search-BVYMWeyx.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CRXilOoQ.js → collection-table-wrapper-6wf20wao.js} +1 -1
- package/dist/client/assets/{collection-tabs-C_myPCym.js → collection-tabs-Df2TTdMU.js} +1 -1
- package/dist/client/assets/{combobox-Dq5uEMj4.js → combobox-D77wlVAX.js} +1 -1
- package/dist/client/assets/{command-BbtwoX_6.js → command-DMx0q2L2.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-CT8bkRr-.js → companion-mcps-section-b6HVbGuh.js} +1 -1
- package/dist/client/assets/{connect-DWr8OnxD.js → connect-D5pNOzTk.js} +1 -1
- package/dist/client/assets/{connect-layout-DC2D1YF_.js → connect-layout-B1WF-_cs.js} +1 -1
- package/dist/client/assets/{connection-B0pc1GcJ.js → connection-cXvwUyEO.js} +1 -1
- package/dist/client/assets/{connection-card-BIhZjUDe.js → connection-card-BFbHrstW.js} +1 -1
- package/dist/client/assets/connection-detail-sYpfkRBw.js +1 -0
- package/dist/client/assets/{connection-form-helpers-Br3fa97m.js → connection-form-helpers-J4WV5pE2.js} +1 -1
- package/dist/client/assets/{connections-CFqGUj8Y.js → connections-BQOAUYAD.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-nZ4WptrO.js → create-organization-dialog-Dj28D26q.js} +1 -1
- package/dist/client/assets/{decofile-api-CfrmgxQx.js → decofile-api-DFzAXCWe.js} +1 -1
- package/dist/client/assets/{decopilot-VqaWYdeg.js → decopilot-xo8VMJYt.js} +1 -1
- package/dist/client/assets/{dialog-Bf8N5U1x.js → dialog-B4CC36y2.js} +1 -1
- package/dist/client/assets/{discover-ZWgrxxUF.js → discover-BRjDF7of.js} +1 -1
- package/dist/client/assets/{domain-settings-D0jN4PTM.js → domain-settings-ZTnCw-uE.js} +1 -1
- package/dist/client/assets/{download-app-dialog-D2pEwDoL.js → download-app-dialog-C7q-uW_M.js} +1 -1
- package/dist/client/assets/{drawer-C7OGj6bl.js → drawer-cDeYKE_5.js} +1 -1
- package/dist/client/assets/{editor-BNDn2u8l.js → editor-CceEDKnu.js} +1 -1
- package/dist/client/assets/{empty-state-Du9T7RNW.js → empty-state-D0-uMFNS.js} +1 -1
- package/dist/client/assets/{empty-state-owsBueg1.js → empty-state-DqQcz2gx.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DSvxXI-l.js → extract-connection-data-DrFb-pU-.js} +1 -1
- package/dist/client/assets/{feature-gate-oyoKwzdQ.js → feature-gate-BHdDRx8A.js} +1 -1
- package/dist/client/assets/{feature-paywall-7FJzzTOu.js → feature-paywall-CzYUyr6D.js} +1 -1
- package/dist/client/assets/{file-explorer-BPcXKhss.js → file-explorer-DQ4A2Ehe.js} +1 -1
- package/dist/client/assets/{file-preview-Ntsv7U1c.js → file-preview-Bxu-E3tU.js} +1 -1
- package/dist/client/assets/{file-share-button-jZIN7RwA.js → file-share-button-tMOIQK1_.js} +1 -1
- package/dist/client/assets/{file-type-icon-BXPKfBjf.js → file-type-icon-DBFIRgFa.js} +1 -1
- package/dist/client/assets/{folder-icon-D3MffFJj.js → folder-icon-B02qSVJf.js} +1 -1
- package/dist/client/assets/{form-C5tY8FAE.js → form-DqH1g4Ki.js} +1 -1
- package/dist/client/assets/{gateway-client-dD2sYw12.js → gateway-client-BFmXQ1k7.js} +1 -1
- package/dist/client/assets/{general-DbIEaBtt.js → general-C5ZOXLR-.js} +1 -1
- package/dist/client/assets/{github-icon-BNIJPWs2.js → github-icon-Cb9Axcg7.js} +1 -1
- package/dist/client/assets/{home-zBCJylG4.js → home-Cvyw1zpI.js} +1 -1
- package/dist/client/assets/{hooks-C6wmVP1j.js → hooks-BCp_JYxn.js} +1 -1
- package/dist/client/assets/{hooks-DB2KtQF1.js → hooks-mKjK2JU6.js} +1 -1
- package/dist/client/assets/{icon-button-ByfHOna3.js → icon-button-DIo1zDHA.js} +1 -1
- package/dist/client/assets/{index-BvOit_NC.js → index-5FNlOK9S.js} +1 -1
- package/dist/client/assets/{index-BJXxq6kp.js → index-BJqjsSyt.js} +1 -1
- package/dist/client/assets/{index-CiTMciGd.js → index-BpVScA85.js} +1 -1
- package/dist/client/assets/{index-RyrXTX_U.js → index-CAxE8yKu.js} +1 -1
- package/dist/client/assets/{index-CW8Zn5Vo.js → index-CF31XFHg.js} +1 -1
- package/dist/client/assets/{index-DmAcZcEg.js → index-DNzOKAP1.js} +1 -1
- package/dist/client/assets/{index-OnVTieMy.js → index-DOFkemEL.js} +2 -2
- package/dist/client/assets/{index-Cth4b0Ft.js → index-DgKwQYwb.js} +1 -1
- package/dist/client/assets/{index-MMfySMVA.js → index-DpP6xBRQ.js} +1 -1
- package/dist/client/assets/{index-BwHZ6yYD.js → index-Lb0s3gkO.js} +1 -1
- package/dist/client/assets/{index-Cr3HNIfx.js → index-T2tMBbkz.js} +1 -1
- package/dist/client/assets/{index-Dm-8Hb4L.js → index-Yd3WEM80.js} +2 -2
- package/dist/client/assets/{index-CDhBwotI.js → index-ngZ_yuYG.js} +1 -1
- package/dist/client/assets/{index-Dfn6iQr2.js → index-o-L6_2ka.js} +1 -1
- package/dist/client/assets/{index-redirect-BM1uBMfC.js → index-redirect-Cf-YjMNH.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-CAEqmV_2.js → infiniteQueryObserver-CN-NqOxs.js} +1 -1
- package/dist/client/assets/{infra-billing-C5A9Wz4R.js → infra-billing-BLgi6Owe.js} +1 -1
- package/dist/client/assets/{input-CWQy3Tya.js → input-CvnDClDE.js} +1 -1
- package/dist/client/assets/{input--O5KUqzs.js → input-KJgBOsyt.js} +1 -1
- package/dist/client/assets/{input-C_oDShrp.js → input-M1Rf1qIc.js} +1 -1
- package/dist/client/assets/{integration-icon-CISeHTVW.js → integration-icon-Cg53nCZC.js} +1 -1
- package/dist/client/assets/{label-C-2BWfwg.js → label-CgaAtTIX.js} +1 -1
- package/dist/client/assets/{last-preview-page-BVeY9P7x.js → last-preview-page-DglwZwTU.js} +1 -1
- package/dist/client/assets/{layout-DM0z_8an.js → layout-CFr9zDwj.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-CJ0u_ZEK.js → legacy-agents-deep-DxAgZvFx.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-BpsgPVEv.js → legacy-main-redirect-CXezOh_v.js} +1 -1
- package/dist/client/assets/{library-CuMQZATJ.js → library-fMfRvxtI.js} +1 -1
- package/dist/client/assets/{login-3NR-JbuJ.js → login-DMJQuXm5.js} +1 -1
- package/dist/client/assets/{markdown-DPl9yjdo.js → markdown-BKiG9T-f.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-DBAAr1YD.js → mcp-app-renderer-DCYIDykQ.js} +2 -2
- package/dist/client/assets/{mcp-oauth-lrxK5SpS.js → mcp-oauth-Bvz7f0mY.js} +1 -1
- package/dist/client/assets/members-B_NKVr1s.js +1 -0
- package/dist/client/assets/{message-templates-C6gTcE8J.js → message-templates-CjqJSnkj.js} +1 -1
- package/dist/client/assets/{mini-report-page-DmC7p3nN.js → mini-report-page-BdpMf22c.js} +1 -1
- package/dist/client/assets/{mock-board-Cp-nJCws.js → mock-board-BdQLGWWZ.js} +3 -3
- package/dist/client/assets/{monaco-editor-CzOxIPWR.js → monaco-editor-BDIyAK-M.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-C-rPlhe5.js → monitoring-stats-row-C4fMrM6s.js} +1 -1
- package/dist/client/assets/multi-select-BzwcvZFJ.js +1 -0
- package/dist/client/assets/{mustache-jAJ0Dh0T.js → mustache-qCmONE00.js} +1 -1
- package/dist/client/assets/{oauth-callback-DF4kRsdh.js → oauth-callback-Bx8ukslY.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Zo7RI1Og.js → oauth-callback-ai-provider-Dy4mtlFe.js} +1 -1
- package/dist/client/assets/{onboarding-D3Ed8kZT.js → onboarding-D7xPPSO8.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-CG5DBe8M.js → optimistic-project-sidebar-views-Crsjc8Ek.js} +1 -1
- package/dist/client/assets/{org-file-open-context-zwzXTKUN.js → org-file-open-context-CRpZmGcx.js} +1 -1
- package/dist/client/assets/{organization-choice-obicC5t3.js → organization-choice-fCF1vpZQ.js} +1 -1
- package/dist/client/assets/{orgs-DIOemkQl.js → orgs-nJcrPLKV.js} +1 -1
- package/dist/client/assets/{page-seo-form-luCLG0Ke.js → page-seo-form-4xkVuHnu.js} +1 -1
- package/dist/client/assets/{pair-CFCbh-9t.js → pair-Da7tLUJm.js} +1 -1
- package/dist/client/assets/{plan-ladder-D4qNTX3a.js → plan-ladder-D2AKJRvg.js} +1 -1
- package/dist/client/assets/{popover-DcRnZbRB.js → popover-JLFGljNy.js} +1 -1
- package/dist/client/assets/{post-calendar-DmhkkILr.js → post-calendar-vGm6mZu3.js} +1 -1
- package/dist/client/assets/{post-editor-Bd4oeY0P.js → post-editor-Dt3_9Fhb.js} +1 -1
- package/dist/client/assets/{preview-content-BteE7j6t.js → preview-content-BwWN9AnE.js} +1 -1
- package/dist/client/assets/{preview-dialog-1a15xXlz.js → preview-dialog-Bn_N1fKa.js} +1 -1
- package/dist/client/assets/{primitives-D9cBEamz.js → primitives-DAP3QnJa.js} +1 -1
- package/dist/client/assets/{profile-B4g9CgTJ.js → profile-Db8455hP.js} +1 -1
- package/dist/client/assets/{project-app-view-yOXhNy3w.js → project-app-view-BAeM8uog.js} +1 -1
- package/dist/client/assets/{project-feed-VgI9_pqj.js → project-feed-CO6D2qPp.js} +1 -1
- package/dist/client/assets/{project-icon-DBp2PUWA.js → project-icon-DpfxAXQD.js} +1 -1
- package/dist/client/assets/project-reports-ChSmIDxx.js +1 -0
- package/dist/client/assets/project-tasks-CQHAi3Wq.js +1 -0
- package/dist/client/assets/{prompts-Dc-0RVxx.js → prompts-DBq4J52h.js} +1 -1
- package/dist/client/assets/record-editor-4vVGitSN.js +1 -0
- package/dist/client/assets/{redirect-editor-BdR1iS4Z.js → redirect-editor-DlSJNMhh.js} +1 -1
- package/dist/client/assets/registry-CND3YEim.js +2 -0
- package/dist/client/assets/{registry-layout-CEa46E4k.js → registry-layout-DwB-OdYN.js} +4 -4
- package/dist/client/assets/reports-B8pQqdBF.js +1 -0
- package/dist/client/assets/{reports-BN6w3xEY.js → reports-DIzScOuV.js} +26 -26
- package/dist/client/assets/{reports-onboarding-WdznsHgB.js → reports-onboarding-BIML3oTp.js} +1 -1
- package/dist/client/assets/{reports-tab-Dm6YKojQ.js → reports-tab-BVlRmNTA.js} +2 -2
- package/dist/client/assets/{repositories-BIKfLGsT.js → repositories-DmqjleLq.js} +1 -1
- package/dist/client/assets/{repository-import-picker-C4oLk9z7.js → repository-import-picker-BpXr4DO5.js} +1 -1
- package/dist/client/assets/{repository-picker-UnQe6RSu.js → repository-picker-C_TY_073.js} +1 -1
- package/dist/client/assets/{require-capability-B56EQxaC.js → require-capability-C9mVQudO.js} +1 -1
- package/dist/client/assets/{required-auth-layout-PDYBfJne.js → required-auth-layout-Cnz59w5M.js} +1 -1
- package/dist/client/assets/{reset-password-rG_LDLia.js → reset-password-DS6Hktkf.js} +1 -1
- package/dist/client/assets/{resizable-BgQ3eO5u.js → resizable-aSmI0A8Q.js} +1 -1
- package/dist/client/assets/{review-settings-FmPoj8-i.js → review-settings-DyikUvXC.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-7sVqLwEk.js → rich-text-link-control-Bi59I-f7.js} +1 -1
- package/dist/client/assets/roles-BZ1wWV9R.js +1 -0
- package/dist/client/assets/{route-aRC5D9BU.js → route-8cXPOntp.js} +1 -1
- package/dist/client/assets/{route-DG7ERQE6.js → route-BGRZC3Bb.js} +1 -1
- package/dist/client/assets/{route-C-gcaaWb.js → route-Doa0au1w.js} +1 -1
- package/dist/client/assets/{route-page-header-43Ptqqp7.js → route-page-header-zyCpd9Cy.js} +1 -1
- package/dist/client/assets/runnable-block-editor-B4lPvDr3.js +16 -0
- package/dist/client/assets/{sandbox-lifecycle-context-DKgfqt8t.js → sandbox-lifecycle-context-BmtjzOPx.js} +1 -1
- package/dist/client/assets/{schema-pB_r1rh1.js → schema-CiBz9Elt.js} +1 -1
- package/dist/client/assets/{scroll-area-P-WFOaz6.js → scroll-area-gFog9x80.js} +1 -1
- package/dist/client/assets/{search-input-2pUrrqxc.js → search-input-CueqnTPs.js} +1 -1
- package/dist/client/assets/{search-toggle-D0z8gZkO.js → search-toggle-CQ81Mckm.js} +1 -1
- package/dist/client/assets/{secrets-xeL6zP7o.js → secrets-lng2mgWf.js} +1 -1
- package/dist/client/assets/{sections-editor-CLVk2UFF.js → sections-editor-DtMr7K7w.js} +2 -2
- package/dist/client/assets/{select-BiV8HM0k.js → select-CUtt4ZPU.js} +1 -1
- package/dist/client/assets/{select-model-CTog4nuz.js → select-model-Cg9wK6vb.js} +1 -1
- package/dist/client/assets/{seo-editor-CQPoWxYq.js → seo-editor-HlWWnxrn.js} +1 -1
- package/dist/client/assets/{separator-BTuW146r.js → separator-BGGxSB8n.js} +1 -1
- package/dist/client/assets/{settings-tab-BnMhHaER.js → settings-tab-wpZUEiSI.js} +1 -1
- package/dist/client/assets/{sheet-Co-bJKEy.js → sheet-BhrsEbbC.js} +1 -1
- package/dist/client/assets/{shell-layout-DdfrGT4U.js → shell-layout-eBzlZCHd.js} +1 -1
- package/dist/client/assets/{sidebar-CV_fP5cy.js → sidebar-3oMF2fjm.js} +1 -1
- package/dist/client/assets/{skill-preview-MtBrrxXz.js → skill-preview-DEqPLZjQ.js} +1 -1
- package/dist/client/assets/{skills-D5zuxZnx.js → skills-DjzFwZKo.js} +1 -1
- package/dist/client/assets/{sso-zjUa8YT7.js → sso-hecsHwbv.js} +1 -1
- package/dist/client/assets/{store-HfwFgi9t.js → store-Byhr4xr4.js} +1 -1
- package/dist/client/assets/store-registry-DfYDevII.js +2 -0
- package/dist/client/assets/{switch-CsmQv6c2.js → switch-DNsx8Rt5.js} +1 -1
- package/dist/client/assets/{synced-repos-CnfWJEo6.js → synced-repos-CTPTQlVz.js} +1 -1
- package/dist/client/assets/{table-D_8EmVvM.js → table-B5etRYRw.js} +1 -1
- package/dist/client/assets/{tabs-DZaWw4Bv.js → tabs-CpPOnj2_.js} +1 -1
- package/dist/client/assets/{task-board-7XKwz8Ro.js → task-board-Bk94AJKx.js} +1 -1
- package/dist/client/assets/{task-route-i0Kxok_Z.js → task-route-C9Eyo0iP.js} +1 -1
- package/dist/client/assets/{task-status-C172kMHp.js → task-status-xLTUNGzE.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-D8RecqC3.js → taskboard-analytics-PTthbKgn.js} +1 -1
- package/dist/client/assets/{tasks-COu_me01.js → tasks-BcjXqTVo.js} +1 -1
- package/dist/client/assets/tasks-C2RS9Psh.js +1 -0
- package/dist/client/assets/{textarea-2-xerRa1.js → textarea-D85Taief.js} +1 -1
- package/dist/client/assets/{thread-button-x4InzahY.js → thread-button-D1ekzN6t.js} +1 -1
- package/dist/client/assets/{thread-intent-lt6l9AZJ.js → thread-intent-nPmQi6Ey.js} +1 -1
- package/dist/client/assets/{thread-route-BRg2UXMv.js → thread-route-B0qYywlW.js} +1 -1
- package/dist/client/assets/{thread-route-D7T1aorF.js → thread-route-uYlGJPx9.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-Bq1bI51m.js → thread-sheet-body-Bp--GLPF.js} +1 -1
- package/dist/client/assets/{toggle-group-B0bgIr9u.js → toggle-group-B1Wf2ufn.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-BdjLCzch.js → toolbar-icon-button-Fowm5FMa.js} +1 -1
- package/dist/client/assets/{tooltip-DxGTcO6w.js → tooltip-CdoeOmsY.js} +1 -1
- package/dist/client/assets/{track-Cisk3tlu.js → track-C3jNEfoB.js} +1 -1
- package/dist/client/assets/{types-DRjbTzJZ.js → types-0F-H2LwE.js} +1 -1
- package/dist/client/assets/{usage-stats-CuUs_glM.js → usage-stats-BKa4kYOk.js} +1 -1
- package/dist/client/assets/{use-ai-providers-C0jBxurc.js → use-ai-providers-l3af7V8M.js} +1 -1
- package/dist/client/assets/{use-automations-yfAl_uNY.js → use-automations-DxhcJUEN.js} +1 -1
- package/dist/client/assets/{use-autosave-BKZX9oou.js → use-autosave-CzqqYyjs.js} +1 -1
- package/dist/client/assets/{use-connect-companion-miaVZXu5.js → use-connect-companion-BYMql-HO.js} +1 -1
- package/dist/client/assets/{use-connection-BOx7hns0.js → use-connection-CHfH5o2Y.js} +1 -1
- package/dist/client/assets/{use-copy-uBBaT1b4.js → use-copy-D5oP9OR0.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CNCStEri.js → use-create-virtual-mcp-RO04se4f.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-CtLLovwR.js → use-date-fns-locale-DBzXctI9.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Bey-3wHM.js → use-debounced-autosave-B-bNJu4f.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CLSe2Xom.js → use-debounced-value-BsdRTOOo.js} +1 -1
- package/dist/client/assets/{use-deco-credits-Cw1qj1v-.js → use-deco-credits-BD7jKxjN.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-POHlKqKk.js → use-decopilot-events-CseTP-XA.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DltcweLd.js → use-delete-connection-DIyXv1iC.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-Cm06_t3e.js → use-deployment-admin-DJzDQ-pl.js} +1 -1
- package/dist/client/assets/{use-entitlements-4qi-wHe5.js → use-entitlements-F2FeEQvE.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-YN9G6ooq.js → use-fast-preview-draft-url-B1VVH72n.js} +1 -1
- package/dist/client/assets/{use-file-configs-BYWO8pQy.js → use-file-configs-CayPd4N1.js} +1 -1
- package/dist/client/assets/{use-in-settings-Dgua5GWF.js → use-in-settings-D-QMJwir.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-C6L_ctN7.js → use-infinite-scroll-KvBwMzoE.js} +1 -1
- package/dist/client/assets/{use-join-requests-DWcdshpS.js → use-join-requests-DZRRrORA.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-wkC8W2JG.js → use-main-panel-tabs-BJhPu6IR.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-X95kM0LL.js → use-mcp-auth-status-47ZgdGsc.js} +1 -1
- package/dist/client/assets/{use-mcp-client--UmG7uJi.js → use-mcp-client-DeAm9BB5.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-HlnuulK9.js → use-mcp-prompts-BNwQ051-.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BUHu4Og_.js → use-mcp-tools-DYrUZ35N.js} +1 -1
- package/dist/client/assets/{use-members-sSTdK_5S.js → use-members-DuAWZpQi.js} +1 -1
- package/dist/client/assets/{use-mobile-DFNr-t29.js → use-mobile-ChHoUAvP.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-Bno9g2Xm.js → use-navigate-to-agent-CBBHpKVC.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-BIFQy_yG.js → use-open-billing-url-D7QlXiDv.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CW9BnSfs.js → use-org-auth-client-CeC2zNw8.js} +1 -1
- package/dist/client/assets/{use-org-fs-B4juj07O.js → use-org-fs-DJqJjHE6.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-B7EI5qGt.js → use-org-repo-syncs-qt-ndim1.js} +1 -1
- package/dist/client/assets/{use-org-sso-Cq8BipRK.js → use-org-sso-Dgw9Eqau.js} +1 -1
- package/dist/client/assets/{use-organization-roles-Dp9OUWEX.js → use-organization-roles-BuakYscg.js} +1 -1
- package/dist/client/assets/{use-organization-settings-Bcjyhr6h.js → use-organization-settings-BZDRLE_8.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-B-rvq4Am.js → use-panel-navigate-BIUuLVau.js} +1 -1
- package/dist/client/assets/{use-project-native-view-presence-D2PDI5Hk.js → use-project-native-view-presence-BXbyWnN5.js} +1 -1
- package/dist/client/assets/{use-project-scope-7VfyYZg4.js → use-project-scope-JD-WFsZ8.js} +1 -1
- package/dist/client/assets/{use-registry-connections-nh08j8_a.js → use-registry-connections-JkWY7Rlf.js} +1 -1
- package/dist/client/assets/{use-releases-OVrSqa56.js → use-releases-Bj_Ymy_W.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-DFrfBw9G.js → use-reports-diagnostic-BgUzApZd.js} +1 -1
- package/dist/client/assets/{use-route-default-main-CWRdl2BJ.js → use-route-default-main-CYJvgdxd.js} +1 -1
- package/dist/client/assets/{use-secrets-B5BLhJgE.js → use-secrets-BzYTFxAZ.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-C2rAZli-.js → use-section-preview-base-kOUY2OiG.js} +1 -1
- package/dist/client/assets/{use-session-runtime-CBJ7ORoa.js → use-session-runtime-56LtAg98.js} +1 -1
- package/dist/client/assets/{use-tags-BzpfziGO.js → use-tags-BOpjVam6.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-Dgef6FGn.js → use-task-board-analytics-qYaGd8yG.js} +1 -1
- package/dist/client/assets/{use-task-metadata-DZP-UjSO.js → use-task-metadata-DT6NHJG8.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-CvWDQ3he.js → use-thread-outputs-CXuIcLvd.js} +1 -1
- package/dist/client/assets/{use-view-mode-J6vCl_iY.js → use-view-mode-D6MhO34a.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CMfWtZ1X.js → use-virtual-mcp-rS90dDab.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-Bfgd7a2b.js +1 -0
- package/dist/client/assets/{useQueries-51Axgr5J.js → useQueries-N7Njeopg.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-08sNGvo6.js +1 -0
- package/dist/client/assets/{users-HL_b9_VE.js → users-Dr-YNEas.js} +1 -1
- package/dist/client/assets/{utils-Rw83cu6v.js → utils-ICA_NEq2.js} +1 -1
- package/dist/client/assets/{variant-calendar-OuoW0bWr.js → variant-calendar-CrZ19ffw.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-DJ1eiY8u.js → variant-matcher-override-Ba-vWMhx.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-BlPRaK-D.js → view-mode-toggle-jxA0OExK.js} +1 -1
- package/dist/client/assets/{virtual-mcp-D-wB99Xb.js → virtual-mcp-BU8h6LUw.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/agent-app-9FVd6FC-.js +0 -1
- package/dist/client/assets/agent-deck-BFnegUvy.js +0 -1
- package/dist/client/assets/agent-file-C2kx-d1u.js +0 -1
- package/dist/client/assets/agent-library-file-rX7_RYzq.js +0 -1
- package/dist/client/assets/agent-settings-DsKeIx9K.js +0 -1
- package/dist/client/assets/agent-site-editor-code-Bpyk3Wbh.js +0 -2
- package/dist/client/assets/agent-view-1Ji5y2X1.js +0 -1
- package/dist/client/assets/api-keys-XdErFgq7.js +0 -1
- package/dist/client/assets/app-editor-D7hcCrUA.js +0 -1
- package/dist/client/assets/block-document-Cj-Jl_-4.js +0 -3
- package/dist/client/assets/category-editor-HPl4vytm.js +0 -1
- package/dist/client/assets/collection-display-button-CNuFWdfa.js +0 -1
- package/dist/client/assets/connection-detail-F07X2xeh.js +0 -1
- package/dist/client/assets/members-GvM0pw_z.js +0 -1
- package/dist/client/assets/multi-select-TMnS224X.js +0 -1
- package/dist/client/assets/project-reports-CJLosTLH.js +0 -1
- package/dist/client/assets/project-tasks-_n2Qhjp9.js +0 -1
- package/dist/client/assets/record-editor-DaqmuLvj.js +0 -1
- package/dist/client/assets/registry-D7W9oufb.js +0 -2
- package/dist/client/assets/reports-Bu0wbKBT.js +0 -1
- package/dist/client/assets/roles-BBETILy3.js +0 -1
- package/dist/client/assets/runnable-block-editor-B--Iqh2n.js +0 -16
- package/dist/client/assets/store-registry-C5IhGjMq.js +0 -2
- package/dist/client/assets/tasks-Ag9i2trK.js +0 -1
- package/dist/client/assets/useInfiniteQuery-DnwP6DsX.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DJiyBZ4z.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -2076,7 +2076,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var X1$=O(()=>{fg()});f
|
|
|
2076
2076
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${G}/${K}, keeping in old table`);continue}}await Ku`
|
|
2077
2077
|
DELETE FROM kysely_migration WHERE name = ${Q}
|
|
2078
2078
|
`.execute($)}}async function k5$($){await kY4($),await SY4($);let Z=new I5$({db:$,provider:{getMigrations:()=>Promise.resolve(Ke0)}}),{error:Q,results:X}=await Z.migrateToLatest(),Y=0;if(X?.forEach((J)=>{if(J.status==="Success")Y++;else if(J.status==="Error")console.error(`Failed to execute migration "${J.migrationName}"`)}),Q)throw console.error("Failed to migrate"),console.error(Q),Q;return Y}async function CY4($){let{keepOpen:Z=!1,database:Q,skipBetterAuth:X=!1}=$??{},Y="skipped";if(!X&&!Q)Y=await Tt0();let J=Q??l$(),G=async()=>{if(!Z&&!Q)await cO(J).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await k5$(J.db);return await G(),{betterAuth:Y,kysely:K}}catch(K){throw await G(),K}}async function _Y4(){let $=l$(),Z=new I5$({db:$.db,provider:{getMigrations:()=>Promise.resolve(Ke0)}}),{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 C5$=O(()=>{M5$();Rt0();dQ()});async function vJ0($){let Z={...process.env},Q=A90($,Z);console.log(Jq1(Q.settings.encryptionKey));let X=Q.settings.betterAuthSecret||(Q.settings.localMode?f$$(Q.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (xY0(),vY0)),{outputs:J,services:G}=await Y({home:Q.settings.dataDir,externalDatabaseUrl:Q.externalDatabaseUrl,externalNatsUrl:Q.externalNatsUrl});if(!Q.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (Rt0(),y$$));await W(J.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (dQ(),e1$)),{migrateToLatest:F}=await Promise.resolve().then(() => (C5$(),S5$)),U=H(J.databaseUrl);await F({keepOpen:!0,database:U,skipBetterAuth:!0})}let K={...Q.settings,betterAuthSecret:X,databaseUrl:J.databaseUrl,natsUrls:J.natsUrls,...J.s3?{s3Endpoint:J.s3.endpoint,s3Bucket:J.s3.bucket,s3AccessKeyId:J.s3.accessKeyId,s3SecretAccessKey:J.s3.secretAccessKey,s3ForcePathStyle:J.s3.forcePathStyle}:{}};return Y1$(K),{settings:K,services:G.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:G.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var We0=O(()=>{fg();b$$();t1()});var f5$={};e(f5$,{updateService:()=>rz,subscribeCliState:()=>Ue0,setTuiConsoleIntercepted:()=>xJ0,setServerUrl:()=>Co,setMigrationsDone:()=>So,setDevMode:()=>xY4,resetCliStateForTests:()=>vY4,isTuiConsoleIntercepted:()=>fJ0,getCliState:()=>Fe0,addLogEntry:()=>oO});function _5$(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function v5$(){return{services:_5$(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function vY4(){fY=v5$()}function ko(){for(let $ of He0)$()}function Fe0(){return fY}function Ue0($){return He0.add($),()=>He0.delete($)}function rz($){fY={...fY,services:fY.services.map((Z)=>Z.name===$.name?$:Z)},ko()}function So(){fY={...fY,migrationsStatus:"done"},ko()}function Co($){fY={...fY,serverUrl:$},ko()}function oO($){let Z=[...fY.logs,$];fY={...fY,logs:Z.length>500?Z.slice(-500):Z},ko()}function xY4(){fY={...fY,services:[..._5$(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},ko()}function xJ0($){x5$=$}function fJ0(){return x5$}var fY,He0,x5$=!1;var az=O(()=>{fY=v5$();He0=new Set});import{createServer as b5$}from"net";function fY4($){return new Promise((Z)=>{let Q=b5$();Q.once("error",()=>Z(!1)),Q.listen($,"0.0.0.0",()=>{Q.close(()=>Z(!0))})})}async function _o($){if(await fY4($))return $;let Z=await new Promise((Q,X)=>{let Y=b5$();Y.once("error",X),Y.listen(0,"0.0.0.0",()=>{let J=Y.address(),G=typeof J==="object"&&J?J.port:0;Y.close(()=>Q(G))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var Ne0=()=>{};var Le0={};e(Le0,{startDevServer:()=>yY4,pipeToLogStore:()=>Be0});import{join as bY4}from"path";function Be0($){let Z=$.getReader(),Q=new TextDecoder,X="";function Y(){let J=X.split(`
|
|
2079
|
-
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;oO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:J,value:G}=await Z.read();if(J)break;X+=Q.decode(G,{stream:!0}),Y()}}catch{}if(X.trim()){let J=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(J)oO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function yY4($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,J=Z||`http://localhost:${Y}`,G=X?await _o(Number(Y)+1):await _o(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await vJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)rz({name:D.name,status:"ready",port:D.port});So();let F=bY4(import.meta.dir,"..","..","..","..",".."),U=Q===!0,N=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:J,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",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)Be0(N.stdout),Be0(N.stderr);Co(J),rz({name:"Vite",status:"ready",port:Number(Y)}),rz({name:"API",status:"ready",port:Number(K.port)});let L=async(D)=>{if(N.kill(D),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (xY0(),vY0));await w(K.dataDir)}};return process.on("SIGINT",()=>L("SIGINT")),process.on("SIGTERM",()=>L("SIGTERM")),{port:Number(Y),process:N}}var Oe0=O(()=>{We0();az();Ne0()});var bJ0;var De0=O(()=>{bJ0={name:"decocms",version:"4.381.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/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 hY4,Text as y5$}from"ink";import{jsx as uY4,jsxs as g5$}from"react/jsx-runtime";function h5$({version:$}){return g5$(hY4,{flexDirection:"column",marginTop:1,children:[XJ0.map((Z,Q)=>uY4(y5$,{color:YJ0[Q],children:Z},Q)),g5$(y5$,{dimColor:!0,children:[" v",$]})]})}var u5$=O(()=>{Lo()});import{Box as sz,Text as rO}from"ink";import{Spinner as lY4}from"@inkjs/ui";import{jsx as eJ,jsxs as Wu}from"react/jsx-runtime";function l5$({status:$}){if($==="pending")return eJ(lY4,{label:""});return eJ(rO,{color:"green",children:"\u2713"})}function mY4($){return`${$.name}: ${$.port||"...."}`}function m5$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Wu(sz,{flexDirection:"column",paddingBottom:1,children:[eJ(h5$,{version:bJ0.version}),eJ(sz,{marginBottom:1,children:eJ(rO,{dimColor:!0,children:"\u2500".repeat(80)})}),eJ(sz,{children:Wu(rO,{dimColor:!0,children:["Home: ",Q]})}),Wu(sz,{gap:2,children:[$.map((Y)=>Wu(sz,{gap:1,children:[eJ(rO,{children:mY4(Y)}),eJ(l5$,{status:Y.status})]},Y.name)),Wu(sz,{gap:1,children:[eJ(rO,{children:"Migrations"}),eJ(l5$,{status:Z})]})]}),eJ(sz,{children:X?Wu(rO,{children:["Open in browser: ",eJ(rO,{color:"cyan",children:X})]}):eJ(rO,{dimColor:!0,children:"Starting..."})})]})}var c5$=O(()=>{De0();u5$()});import{Box as cY4,Text as vo}from"ink";import{jsx as we0,jsxs as je0}from"react/jsx-runtime";function dY4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function d5$({logs:$}){return we0(cY4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return we0(vo,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return je0(vo,{children:[je0(vo,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),we0(vo,{color:dY4(Z.status),children:Z.status}),je0(vo,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var i5$=()=>{};var Ee0={};e(Ee0,{App:()=>nY4});import{Box as iY4}from"ink";import{useSyncExternalStore as pY4}from"react";import{jsx as p5$,jsxs as tY4}from"react/jsx-runtime";function nY4({home:$}){let Z=pY4(Ue0,Fe0);return tY4(iY4,{flexDirection:"column",children:[p5$(m5$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),p5$(d5$,{logs:Z.logs})]})}var ze0=O(()=>{c5$();i5$();az()});var kG="thread-gate",iN="decopilot-hosted-harness",pN="decopilot-hosted-harness-sandboxed",SG="automations",aO="background-tools",ez="task-board-github-reads";var n5$="13";function t5$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:n5$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var o5$=()=>{};import oY4 from"pg";async function a5$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=rY4}=$,Y=$.log??((W)=>console.log(W)),J=new oY4.Client({connectionString:Q});await J.connect();let G=Date.now(),K=!1;try{while(!K){if(K=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[r5$.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-G>=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 B$(aY4)}let W=Date.now()-G;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await J.query("SELECT pg_advisory_unlock($1)",[r5$.toString()])}catch{}await J.end().catch(()=>{})}}var r5$=8314027461559302n,rY4=600000,aY4=500;var s5$=O(()=>{i$()});function sY4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Pe0($,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 e5$(){let $=sY4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Pe0($,"--cpu-prof-dir")??process.cwd(),name:Pe0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Pe0($,"--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 $9$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=pz();if(!Q)return;let X={};try{let{heapStats:Y}=await import("bun:jsc"),J=Y(),G=Object.entries(J.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);X={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...X}))};return Z().catch(()=>{}),yJ0=setInterval(()=>void Z().catch(()=>{}),$),yJ0.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(yJ0)clearInterval(yJ0)}}var yJ0;var Z9$=()=>{};import*as eY4 from"bun:jsc";function Q9$(){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{$J4()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let J=performance.now(),G=J-X;X=J+Z;let K=[];try{K=ZJ4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((L)=>L.sourceURL&&!/Unknown Executable/.test(L.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var $J4,ZJ4;var X9$=O(()=>{({startSamplingProfiler:$J4,samplingProfilerStackTraces:ZJ4}=eY4)});function Y9$(){e5$();let $=[$9$(),i1$(),Q9$()];return()=>{for(let Z of $)Z()}}var J9$=O(()=>{Ot0();Z9$();X9$()});var $P=v((G9$)=>{Object.defineProperty(G9$,"__esModule",{value:!0});G9$.RepublishHeaders=G9$.DirectMsgHeaders=G9$.JsHeaders=G9$.AdvisoryKind=void 0;G9$.isOrderedPushConsumerOptions=QJ4;G9$.isPullConsumer=XJ4;G9$.isPushConsumer=YJ4;G9$.isBoundPushConsumerOptions=JJ4;function QJ4($){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 XJ4($){return $.isPullConsumer()}function YJ4($){return $.isPushConsumer()}function JJ4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}G9$.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"};G9$.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"};G9$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};G9$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var $3=v((W9$)=>{Object.defineProperty(W9$,"__esModule",{value:!0});W9$.TD=W9$.TE=W9$.Empty=void 0;W9$.encode=LJ4;W9$.decode=OJ4;W9$.Empty=new Uint8Array(0);W9$.TE=new TextEncoder;W9$.TD=new TextDecoder;function BJ4(...$){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 LJ4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(W9$.TE.encode($[Q]));if(Z.length===0)return W9$.Empty;if(Z.length===1)return Z[0];return BJ4(...Z)}function OJ4($){if(!$||$.length===0)return"";return W9$.TD.decode($)}});var Z3=v((U9$)=>{Object.defineProperty(U9$,"__esModule",{value:!0});U9$.errors=U9$.PermissionViolationError=U9$.NoRespondersError=U9$.TimeoutError=U9$.RequestError=U9$.ProtocolError=U9$.ConnectionError=U9$.DrainingConnectionError=U9$.ClosedConnectionError=U9$.AuthorizationError=U9$.UserAuthenticationExpiredError=U9$.InvalidOperationError=U9$.InvalidArgumentError=U9$.InvalidSubjectError=void 0;class Te0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}U9$.InvalidSubjectError=Te0;class gJ0 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 gJ0(`${$} ${Z}`,Q)}}U9$.InvalidArgumentError=gJ0;class Re0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}U9$.InvalidOperationError=Re0;class hJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new hJ0($);return null}}U9$.UserAuthenticationExpiredError=hJ0;class uJ0 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 uJ0($);return null}}U9$.AuthorizationError=uJ0;class qe0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}U9$.ClosedConnectionError=qe0;class Me0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}U9$.DrainingConnectionError=Me0;class Ie0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}U9$.ConnectionError=Ie0;class Ve0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}U9$.ProtocolError=Ve0;class ke0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof lJ0}}U9$.RequestError=ke0;class Se0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}U9$.TimeoutError=Se0;class lJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}U9$.NoRespondersError=lJ0;class mJ0 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,J=$.match(/(Publish|Subscription) to "(\S+)"/);if(J){if(Q=J[1].toLowerCase(),X=J[2],Q==="subscription"){let G=$.match(/using queue "(\S+)"/);if(G)Y=G[1]}}return new mJ0($,Q,X,Y)}}U9$.PermissionViolationError=mJ0;U9$.errors={AuthorizationError:uJ0,ClosedConnectionError:qe0,ConnectionError:Ie0,DrainingConnectionError:Me0,InvalidArgumentError:gJ0,InvalidOperationError:Re0,InvalidSubjectError:Te0,NoRespondersError:lJ0,PermissionViolationError:mJ0,ProtocolError:Ve0,RequestError:ke0,TimeoutError:Se0,UserAuthenticationExpiredError:hJ0}});var WW=v((D9$)=>{Object.defineProperty(D9$,"__esModule",{value:!0});D9$.SimpleMutex=D9$.Perf=void 0;D9$.extend=_J4;D9$.render=vJ4;D9$.timeout=xJ4;D9$.delay=fJ4;D9$.deadline=bJ4;D9$.deferred=_e0;D9$.debugDeferred=yJ4;D9$.shuffle=gJ4;D9$.collect=hJ4;D9$.jitter=O9$;D9$.backoff=uJ4;D9$.nanos=lJ4;D9$.millis=mJ4;D9$.randomToken=iJ4;var CJ4=$3(),Ce0=Z3();function _J4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function vJ4($){return CJ4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function xJ4($,Z=!0){let Q=Z?new Ce0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new Ce0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function fJ4($=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 bJ4($,Z=1000){let Q=_e0(),X=setTimeout(()=>{Q.reject(new Ce0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function _e0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function yJ4(){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 gJ4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function hJ4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class B9${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})}),$}}D9$.Perf=B9$;class L9${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=_e0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}D9$.SimpleMutex=L9$;function O9$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function uJ4($=[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 O9$(Q>Z?$[Z]:$[Q])}}}function lJ4($){return $*1e6}function mJ4($){return Math.floor($/1e6)}var cJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",nN=new Uint8Array(62);for(let $=0;$<62;$++)nN[$]=cJ4.charCodeAt($);var dJ4=218340105584896;function iJ4(){let $=Math.floor(Math.random()*dJ4),Z=$%62,Q=nN[Z];$=($-Z)/62,Z=$%62;let X=nN[Z];$=($-Z)/62,Z=$%62;let Y=nN[Z];$=($-Z)/62,Z=$%62;let J=nN[Z];$=($-Z)/62,Z=$%62;let G=nN[Z];$=($-Z)/62,Z=$%62;let K=nN[Z];$=($-Z)/62,Z=$%62;let W=nN[Z];$=($-Z)/62;let H=nN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var R9$=v((A9$)=>{Object.defineProperty(A9$,"__esModule",{value:!0});A9$.nuid=A9$.NuidImpl=void 0;var K34="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",sO=62,dJ0=12,z9$=10,j9$=33,W34=333,E9$=dJ0+z9$,xe0=new Uint8Array(sO);for(let $=0;$<sO;$++)xe0[$]=K34.charCodeAt($);var cJ0=4294967296,P9$=BigInt(sO)**BigInt(z9$),xo=Number(P9$/(1n<<32n)),ve0=Number(P9$%(1n<<32n));function H34($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function F34($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else H34($)}class fe0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(E9$),this.cbuf=new Uint8Array(dJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(xo+1)),this.seqLo=Math.floor(Math.random()*cJ0);while($++<8&&this.seqHi===xo&&this.seqLo>=ve0);if(this.seqHi===xo&&this.seqLo>=ve0)this.seqLo=0;this.inc=Math.random()*(W34-j9$)+j9$|0}setPre(){F34(this.cbuf);for(let $=0;$<dJ0;$++)this.buf[$]=xe0[this.cbuf[$]%sO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=E9$-1;Q>=dJ0;Q--){let X=Math.floor($/sO),J=($-X*sO)*cJ0+Z,G=Math.floor(J/sO),K=J-G*sO;this.buf[Q]=xe0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=cJ0)this.seqLo-=cJ0,this.seqHi+=1;if(this.seqHi>xo||this.seqHi===xo&&this.seqLo>=ve0)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()}}A9$.NuidImpl=fe0;A9$.nuid=new fe0});var V9$=v((M9$)=>{Object.defineProperty(M9$,"__esModule",{value:!0});M9$.nuid=M9$.Nuid=void 0;var q9$=R9$();M9$.Nuid=q9$.NuidImpl;M9$.nuid=q9$.nuid});var pJ0=v((iJ0)=>{Object.defineProperty(iJ0,"__esModule",{value:!0});iJ0.nuid=iJ0.Nuid=void 0;var k9$=V9$();Object.defineProperty(iJ0,"Nuid",{enumerable:!0,get:function(){return k9$.Nuid}});Object.defineProperty(iJ0,"nuid",{enumerable:!0,get:function(){return k9$.nuid}})});var eO=v((S9$)=>{Object.defineProperty(S9$,"__esModule",{value:!0});S9$.DEFAULT_HOST=S9$.DEFAULT_PORT=S9$.Match=void 0;S9$.syncIterator=D34;S9$.createInbox=w34;var L34=pJ0(),O34=Z3();S9$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function D34($){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 w34($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw O34.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${L34.nuid.next()}`}S9$.DEFAULT_PORT=4222;S9$.DEFAULT_HOST="127.0.0.1"});var fo=v((x9$)=>{Object.defineProperty(x9$,"__esModule",{value:!0});x9$.DataBuffer=void 0;var _9$=$3();class v9${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 _9$.TE.encode($)}static toAscii($){return _9$.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}}x9$.DataBuffer=v9$});var ZP=v((y9$)=>{Object.defineProperty(y9$,"__esModule",{value:!0});y9$.LF=y9$.CR=y9$.CRLF=y9$.CR_LF_LEN=y9$.CR_LF=void 0;y9$.setTransportFactory=q34;y9$.defaultPort=M34;y9$.getUrlParseFn=I34;y9$.newTransport=V34;y9$.getResolveFn=k34;y9$.protoLen=b9$;y9$.extractProtocolMessage=S34;var A34=$3(),T34=eO(),R34=fo(),Q3;function q34($){Q3=$}function M34(){return Q3!==void 0&&Q3.defaultPort!==void 0?Q3.defaultPort:T34.DEFAULT_PORT}function I34(){return Q3!==void 0&&Q3.urlParseFn?Q3.urlParseFn:void 0}function V34(){if(!Q3||typeof Q3.factory!=="function")throw Error("transport fn is not set");return Q3.factory()}function k34(){return Q3!==void 0&&Q3.dnsResolveFn?Q3.dnsResolveFn:void 0}y9$.CR_LF=`\r
|
|
2079
|
+
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;oO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:J,value:G}=await Z.read();if(J)break;X+=Q.decode(G,{stream:!0}),Y()}}catch{}if(X.trim()){let J=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(J)oO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function yY4($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,J=Z||`http://localhost:${Y}`,G=X?await _o(Number(Y)+1):await _o(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await vJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let D of W)rz({name:D.name,status:"ready",port:D.port});So();let F=bY4(import.meta.dir,"..","..","..","..",".."),U=Q===!0,N=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:J,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",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)Be0(N.stdout),Be0(N.stderr);Co(J),rz({name:"Vite",status:"ready",port:Number(Y)}),rz({name:"API",status:"ready",port:Number(K.port)});let L=async(D)=>{if(N.kill(D),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (xY0(),vY0));await w(K.dataDir)}};return process.on("SIGINT",()=>L("SIGINT")),process.on("SIGTERM",()=>L("SIGTERM")),{port:Number(Y),process:N}}var Oe0=O(()=>{We0();az();Ne0()});var bJ0;var De0=O(()=>{bJ0={name:"decocms",version:"4.381.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/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 hY4,Text as y5$}from"ink";import{jsx as uY4,jsxs as g5$}from"react/jsx-runtime";function h5$({version:$}){return g5$(hY4,{flexDirection:"column",marginTop:1,children:[XJ0.map((Z,Q)=>uY4(y5$,{color:YJ0[Q],children:Z},Q)),g5$(y5$,{dimColor:!0,children:[" v",$]})]})}var u5$=O(()=>{Lo()});import{Box as sz,Text as rO}from"ink";import{Spinner as lY4}from"@inkjs/ui";import{jsx as eJ,jsxs as Wu}from"react/jsx-runtime";function l5$({status:$}){if($==="pending")return eJ(lY4,{label:""});return eJ(rO,{color:"green",children:"\u2713"})}function mY4($){return`${$.name}: ${$.port||"...."}`}function m5$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Wu(sz,{flexDirection:"column",paddingBottom:1,children:[eJ(h5$,{version:bJ0.version}),eJ(sz,{marginBottom:1,children:eJ(rO,{dimColor:!0,children:"\u2500".repeat(80)})}),eJ(sz,{children:Wu(rO,{dimColor:!0,children:["Home: ",Q]})}),Wu(sz,{gap:2,children:[$.map((Y)=>Wu(sz,{gap:1,children:[eJ(rO,{children:mY4(Y)}),eJ(l5$,{status:Y.status})]},Y.name)),Wu(sz,{gap:1,children:[eJ(rO,{children:"Migrations"}),eJ(l5$,{status:Z})]})]}),eJ(sz,{children:X?Wu(rO,{children:["Open in browser: ",eJ(rO,{color:"cyan",children:X})]}):eJ(rO,{dimColor:!0,children:"Starting..."})})]})}var c5$=O(()=>{De0();u5$()});import{Box as cY4,Text as vo}from"ink";import{jsx as we0,jsxs as je0}from"react/jsx-runtime";function dY4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function d5$({logs:$}){return we0(cY4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return we0(vo,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return je0(vo,{children:[je0(vo,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),we0(vo,{color:dY4(Z.status),children:Z.status}),je0(vo,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var i5$=()=>{};var Ee0={};e(Ee0,{App:()=>nY4});import{Box as iY4}from"ink";import{useSyncExternalStore as pY4}from"react";import{jsx as p5$,jsxs as tY4}from"react/jsx-runtime";function nY4({home:$}){let Z=pY4(Ue0,Fe0);return tY4(iY4,{flexDirection:"column",children:[p5$(m5$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),p5$(d5$,{logs:Z.logs})]})}var ze0=O(()=>{c5$();i5$();az()});var kG="thread-gate",iN="decopilot-hosted-harness",pN="decopilot-hosted-harness-sandboxed",SG="automations",aO="background-tools",ez="task-board-github-reads";var n5$="13";function t5$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:n5$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var o5$=()=>{};import oY4 from"pg";async function a5$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=rY4}=$,Y=$.log??((W)=>console.log(W)),J=new oY4.Client({connectionString:Q});await J.connect();let G=Date.now(),K=!1;try{while(!K){if(K=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[r5$.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-G>=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 B$(aY4)}let W=Date.now()-G;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await J.query("SELECT pg_advisory_unlock($1)",[r5$.toString()])}catch{}await J.end().catch(()=>{})}}var r5$=8314027461559302n,rY4=600000,aY4=500;var s5$=O(()=>{i$()});function sY4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function Pe0($,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 e5$(){let $=sY4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:Pe0($,"--cpu-prof-dir")??process.cwd(),name:Pe0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(Pe0($,"--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 $9$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=pz();if(!Q)return;let X={};try{let{heapStats:Y}=await import("bun:jsc"),J=Y(),G=Object.entries(J.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);X={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...X}))};return Z().catch(()=>{}),yJ0=setInterval(()=>void Z().catch(()=>{}),$),yJ0.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(yJ0)clearInterval(yJ0)}}var yJ0;var Z9$=()=>{};import*as eY4 from"bun:jsc";function Q9$(){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{$J4()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let J=performance.now(),G=J-X;X=J+Z;let K=[];try{K=ZJ4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((L)=>L.sourceURL&&!/Unknown Executable/.test(L.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var $J4,ZJ4;var X9$=O(()=>{({startSamplingProfiler:$J4,samplingProfilerStackTraces:ZJ4}=eY4)});function Y9$(){e5$();let $=[$9$(),i1$(),Q9$()];return()=>{for(let Z of $)Z()}}var J9$=O(()=>{Ot0();Z9$();X9$()});var $P=v((G9$)=>{Object.defineProperty(G9$,"__esModule",{value:!0});G9$.RepublishHeaders=G9$.DirectMsgHeaders=G9$.JsHeaders=G9$.AdvisoryKind=void 0;G9$.isOrderedPushConsumerOptions=QJ4;G9$.isPullConsumer=XJ4;G9$.isPushConsumer=YJ4;G9$.isBoundPushConsumerOptions=JJ4;function QJ4($){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 XJ4($){return $.isPullConsumer()}function YJ4($){return $.isPushConsumer()}function JJ4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}G9$.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"};G9$.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"};G9$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};G9$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var $3=v((W9$)=>{Object.defineProperty(W9$,"__esModule",{value:!0});W9$.TD=W9$.TE=W9$.Empty=void 0;W9$.encode=LJ4;W9$.decode=OJ4;W9$.Empty=new Uint8Array(0);W9$.TE=new TextEncoder;W9$.TD=new TextDecoder;function BJ4(...$){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 LJ4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(W9$.TE.encode($[Q]));if(Z.length===0)return W9$.Empty;if(Z.length===1)return Z[0];return BJ4(...Z)}function OJ4($){if(!$||$.length===0)return"";return W9$.TD.decode($)}});var Z3=v((U9$)=>{Object.defineProperty(U9$,"__esModule",{value:!0});U9$.errors=U9$.PermissionViolationError=U9$.NoRespondersError=U9$.TimeoutError=U9$.RequestError=U9$.ProtocolError=U9$.ConnectionError=U9$.DrainingConnectionError=U9$.ClosedConnectionError=U9$.AuthorizationError=U9$.UserAuthenticationExpiredError=U9$.InvalidOperationError=U9$.InvalidArgumentError=U9$.InvalidSubjectError=void 0;class Te0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}U9$.InvalidSubjectError=Te0;class gJ0 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 gJ0(`${$} ${Z}`,Q)}}U9$.InvalidArgumentError=gJ0;class Re0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}U9$.InvalidOperationError=Re0;class hJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new hJ0($);return null}}U9$.UserAuthenticationExpiredError=hJ0;class uJ0 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 uJ0($);return null}}U9$.AuthorizationError=uJ0;class qe0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}U9$.ClosedConnectionError=qe0;class Me0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}U9$.DrainingConnectionError=Me0;class Ie0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}U9$.ConnectionError=Ie0;class Ve0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}U9$.ProtocolError=Ve0;class ke0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof lJ0}}U9$.RequestError=ke0;class Se0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}U9$.TimeoutError=Se0;class lJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}U9$.NoRespondersError=lJ0;class mJ0 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,J=$.match(/(Publish|Subscription) to "(\S+)"/);if(J){if(Q=J[1].toLowerCase(),X=J[2],Q==="subscription"){let G=$.match(/using queue "(\S+)"/);if(G)Y=G[1]}}return new mJ0($,Q,X,Y)}}U9$.PermissionViolationError=mJ0;U9$.errors={AuthorizationError:uJ0,ClosedConnectionError:qe0,ConnectionError:Ie0,DrainingConnectionError:Me0,InvalidArgumentError:gJ0,InvalidOperationError:Re0,InvalidSubjectError:Te0,NoRespondersError:lJ0,PermissionViolationError:mJ0,ProtocolError:Ve0,RequestError:ke0,TimeoutError:Se0,UserAuthenticationExpiredError:hJ0}});var WW=v((D9$)=>{Object.defineProperty(D9$,"__esModule",{value:!0});D9$.SimpleMutex=D9$.Perf=void 0;D9$.extend=_J4;D9$.render=vJ4;D9$.timeout=xJ4;D9$.delay=fJ4;D9$.deadline=bJ4;D9$.deferred=_e0;D9$.debugDeferred=yJ4;D9$.shuffle=gJ4;D9$.collect=hJ4;D9$.jitter=O9$;D9$.backoff=uJ4;D9$.nanos=lJ4;D9$.millis=mJ4;D9$.randomToken=iJ4;var CJ4=$3(),Ce0=Z3();function _J4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function vJ4($){return CJ4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function xJ4($,Z=!0){let Q=Z?new Ce0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new Ce0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function fJ4($=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 bJ4($,Z=1000){let Q=_e0(),X=setTimeout(()=>{Q.reject(new Ce0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function _e0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function yJ4(){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 gJ4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function hJ4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class B9${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})}),$}}D9$.Perf=B9$;class L9${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=_e0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}D9$.SimpleMutex=L9$;function O9$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function uJ4($=[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 O9$(Q>Z?$[Z]:$[Q])}}}function lJ4($){return $*1e6}function mJ4($){return Math.floor($/1e6)}var cJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",nN=new Uint8Array(62);for(let $=0;$<62;$++)nN[$]=cJ4.charCodeAt($);var dJ4=218340105584896;function iJ4(){let $=Math.floor(Math.random()*dJ4),Z=$%62,Q=nN[Z];$=($-Z)/62,Z=$%62;let X=nN[Z];$=($-Z)/62,Z=$%62;let Y=nN[Z];$=($-Z)/62,Z=$%62;let J=nN[Z];$=($-Z)/62,Z=$%62;let G=nN[Z];$=($-Z)/62,Z=$%62;let K=nN[Z];$=($-Z)/62,Z=$%62;let W=nN[Z];$=($-Z)/62;let H=nN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var R9$=v((A9$)=>{Object.defineProperty(A9$,"__esModule",{value:!0});A9$.nuid=A9$.NuidImpl=void 0;var K34="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",sO=62,dJ0=12,z9$=10,j9$=33,W34=333,E9$=dJ0+z9$,xe0=new Uint8Array(sO);for(let $=0;$<sO;$++)xe0[$]=K34.charCodeAt($);var cJ0=4294967296,P9$=BigInt(sO)**BigInt(z9$),xo=Number(P9$/(1n<<32n)),ve0=Number(P9$%(1n<<32n));function H34($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function F34($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else H34($)}class fe0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(E9$),this.cbuf=new Uint8Array(dJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(xo+1)),this.seqLo=Math.floor(Math.random()*cJ0);while($++<8&&this.seqHi===xo&&this.seqLo>=ve0);if(this.seqHi===xo&&this.seqLo>=ve0)this.seqLo=0;this.inc=Math.random()*(W34-j9$)+j9$|0}setPre(){F34(this.cbuf);for(let $=0;$<dJ0;$++)this.buf[$]=xe0[this.cbuf[$]%sO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=E9$-1;Q>=dJ0;Q--){let X=Math.floor($/sO),J=($-X*sO)*cJ0+Z,G=Math.floor(J/sO),K=J-G*sO;this.buf[Q]=xe0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=cJ0)this.seqLo-=cJ0,this.seqHi+=1;if(this.seqHi>xo||this.seqHi===xo&&this.seqLo>=ve0)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()}}A9$.NuidImpl=fe0;A9$.nuid=new fe0});var V9$=v((M9$)=>{Object.defineProperty(M9$,"__esModule",{value:!0});M9$.nuid=M9$.Nuid=void 0;var q9$=R9$();M9$.Nuid=q9$.NuidImpl;M9$.nuid=q9$.nuid});var pJ0=v((iJ0)=>{Object.defineProperty(iJ0,"__esModule",{value:!0});iJ0.nuid=iJ0.Nuid=void 0;var k9$=V9$();Object.defineProperty(iJ0,"Nuid",{enumerable:!0,get:function(){return k9$.Nuid}});Object.defineProperty(iJ0,"nuid",{enumerable:!0,get:function(){return k9$.nuid}})});var eO=v((S9$)=>{Object.defineProperty(S9$,"__esModule",{value:!0});S9$.DEFAULT_HOST=S9$.DEFAULT_PORT=S9$.Match=void 0;S9$.syncIterator=D34;S9$.createInbox=w34;var L34=pJ0(),O34=Z3();S9$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function D34($){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 w34($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw O34.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${L34.nuid.next()}`}S9$.DEFAULT_PORT=4222;S9$.DEFAULT_HOST="127.0.0.1"});var fo=v((x9$)=>{Object.defineProperty(x9$,"__esModule",{value:!0});x9$.DataBuffer=void 0;var _9$=$3();class v9${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 _9$.TE.encode($)}static toAscii($){return _9$.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}}x9$.DataBuffer=v9$});var ZP=v((y9$)=>{Object.defineProperty(y9$,"__esModule",{value:!0});y9$.LF=y9$.CR=y9$.CRLF=y9$.CR_LF_LEN=y9$.CR_LF=void 0;y9$.setTransportFactory=q34;y9$.defaultPort=M34;y9$.getUrlParseFn=I34;y9$.newTransport=V34;y9$.getResolveFn=k34;y9$.protoLen=b9$;y9$.extractProtocolMessage=S34;var A34=$3(),T34=eO(),R34=fo(),Q3;function q34($){Q3=$}function M34(){return Q3!==void 0&&Q3.defaultPort!==void 0?Q3.defaultPort:T34.DEFAULT_PORT}function I34(){return Q3!==void 0&&Q3.urlParseFn?Q3.urlParseFn:void 0}function V34(){if(!Q3||typeof Q3.factory!=="function")throw Error("transport fn is not set");return Q3.factory()}function k34(){return Q3!==void 0&&Q3.dnsResolveFn?Q3.dnsResolveFn:void 0}y9$.CR_LF=`\r
|
|
2080
2080
|
`;y9$.CR_LF_LEN=y9$.CR_LF.length;y9$.CRLF=R34.DataBuffer.fromAscii(y9$.CR_LF);y9$.CR=new Uint8Array(y9$.CRLF)[0];y9$.LF=new Uint8Array(y9$.CRLF)[1];function b9$($){for(let Z=0;Z<$.length;Z++){let Q=Z+1;if($.byteLength>Q&&$[Z]===y9$.CR&&$[Q]===y9$.LF)return Q+1}return 0}function S34($){let Z=b9$($);if(Z>0){let X=new Uint8Array($).slice(0,Z);return A34.TD.decode(X)}return""}});var ue0=v((i9$)=>{Object.defineProperty(i9$,"__esModule",{value:!0});i9$.ipV4=m9$;i9$.isIP=l34;i9$.parseIP=c9$;var bo=4,QP=16,nJ0=48,l9$=57,h9$=65,h34=70,u9$=97,u34=102,he0=16777215;function m9$($,Z,Q,X){let Y=new Uint8Array(QP);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((G,K)=>{Y[K]=G}),Y[12]=$,Y[13]=Z,Y[14]=Q,Y[15]=X,Y}function l34($){return c9$($)!==void 0}function c9$($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return d9$($);case":":return m34($)}return}function d9$($){let Z=new Uint8Array(bo);for(let Q=0;Q<bo;Q++){if($.length===0)return;if(Q>0){if($[0]!==".")return;$=$.substring(1)}let{n:X,c:Y,ok:J}=c34($);if(!J||X>255)return;$=$.substring(Y),Z[Q]=X}return m9$(Z[0],Z[1],Z[2],Z[3])}function m34($){let Z=new Uint8Array(QP),Q=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(Q=0,$=$.substring(2),$.length===0)return Z}let X=0;while(X<QP){let{n:Y,c:J,ok:G}=d34($);if(!G||Y>65535)return;if(J<$.length&&$[J]==="."){if(Q<0&&X!=QP-bo)return;if(X+bo>QP)return;let K=d9$($);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+=bo;break}if(Z[X]=Y>>8,Z[X+1]=Y,X+=2,$=$.substring(J),$.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<QP){if(Q<0)return;let Y=QP-X;for(let J=X-1;J>=Q;J--)Z[J+Y]=Z[J];for(let J=Q+Y-1;J>=Q;J--)Z[J]=0}else if(Q>=0)return;return Z}function c34($){let Z=0,Q=0;for(Z=0;Z<$.length&&nJ0<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=l9$;Z++)if(Q=Q*10+($.charCodeAt(Z)-nJ0),Q>=he0)return{n:he0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:Q,c:Z,ok:!0}}function d34($){let Z=0,Q=0;for(Q=0;Q<$.length;Q++){if(nJ0<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=l9$)Z*=16,Z+=$.charCodeAt(Q)-nJ0;else if(u9$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=u34)Z*=16,Z+=$.charCodeAt(Q)-u9$+10;else if(h9$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=h34)Z*=16,Z+=$.charCodeAt(Q)-h9$+10;else break;if(Z>=he0)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 pe0=v((n9$)=>{Object.defineProperty(n9$,"__esModule",{value:!0});n9$.Servers=n9$.ServerImpl=void 0;n9$.isIPV4OrHostname=p9$;n9$.hostPort=ie0;var le0=ZP(),me0=WW(),ce0=ue0(),t34=eO(),o34=Z3();function p9$($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function de0($){return!p9$($)}function r34($){let Q=$.toUpperCase().indexOf("::FFFF:");if(Q!==-1&&$.indexOf(".")!==-1){let X=$.substring(Q+7);return X=X.replace("[",""),X.replace("]","")}return $}function ie0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=r34($),de0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=de0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),Q=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):t34.DEFAULT_PORT,Y=new URL(`${Q===80?"https":"http"}://${$}`);Y.port=`${Q}`;let J=Y.hostname;if(J.charAt(0)==="[")J=J.substring(1,J.length-1);return{listen:Y.host,hostname:J,port:Q}}class Hu{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let Q=ie0($);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,ce0.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",J=new URL(`${Y}://${de0(X)?"["+X+"]":X}`);J.port=`${this.port}`;let G=new Hu(J.host,!1);G.tlsName=this.hostname,Z.push(G)}}if($.randomize)(0,me0.shuffle)(Z);return this.resolves=Z,Z}}n9$.ServerImpl=Hu;class tJ0{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw o34.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,le0.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:J}=ie0(Y),G=Q.get(J);if(G)G.gossiped=!1,X.push(G);else X.push(new Hu(Y))}if(this.randomize)(0,me0.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,ce0.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,le0.getUrlParseFn)();$=Q?Q($):$;let X=new Hu($,Z);if((0,ce0.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 tJ0.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return tJ0.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,le0.getUrlParseFn)(),J=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Hu(K,!0);J.set(K,W)});let G=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&J.get(H)===void 0)G.push(W);J.delete(H)}),G.reverse(),G.forEach((K)=>{let W=this.servers.splice(K,1);X=X.concat(W[0].listen)}),J.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,me0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:Q,deleted:X}}}n9$.Servers=tJ0});var oJ0=v((a9$)=>{Object.defineProperty(a9$,"__esModule",{value:!0});a9$.QueuedIteratorImpl=void 0;var ne0=WW(),o9$=Z3();class r9${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,ne0.deferred)(),this.yields=[],this.iterClosed=(0,ne0.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 o9$.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new o9$.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,ne0.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}}a9$.QueuedIteratorImpl=r9$});var te0=v((ZZ$)=>{Object.defineProperty(ZZ$,"__esModule",{value:!0});ZZ$.MuxSubscription=void 0;var $G4=eO(),e9$=Z3();class $Z${baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,$G4.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 e9$.NoRespondersError(X.requestSubject):null;X.resolver($,Z)}}}}close(){let $=new e9$.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}ZZ$.MuxSubscription=$Z$});var oe0=v((YZ$)=>{Object.defineProperty(YZ$,"__esModule",{value:!0});YZ$.Heartbeat=void 0;var ZG4=WW();class XZ${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,ZG4.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})}}YZ$.Heartbeat=XZ$});var se0=v((HZ$)=>{Object.defineProperty(HZ$,"__esModule",{value:!0});HZ$.DenoBuffer=HZ$.MAX_SIZE=HZ$.AssertionError=void 0;HZ$.assert=KZ$;HZ$.concat=WZ$;HZ$.append=XG4;HZ$.readAll=YG4;HZ$.writeAll=JG4;var QG4=$3();class re0 extends Error{constructor($){super($);this.name="AssertionError"}}HZ$.AssertionError=re0;function KZ$($,Z="Assertion failed."){if(!$)throw new re0(Z)}var GZ$=32768;HZ$.MAX_SIZE=4294967294;function rJ0($,Z,Q=0){let X=Z.byteLength-Q;if($.byteLength>X)$=$.subarray(0,X);return Z.set($,Q),$.byteLength}function WZ$($,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 XG4($,Z){return WZ$($,Uint8Array.of(Z))}class ae0{_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($){KZ$($<=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=rJ0(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(QG4.TE.encode($))}write($){let Z=this._grow($.byteLength);return rJ0($,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)rJ0(this._buf.subarray(this._off),this._buf);else if(X+$>HZ$.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*X+$,HZ$.MAX_SIZE));rJ0(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,HZ$.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(GZ$);while(!0){let X=this.capacity-this.length<GZ$,Y=X?Q:new Uint8Array(this._buf.buffer,this.length),J=$.read(Y);if(J===null)return Z;if(X)this.write(Y.subarray(0,J));else this._reslice(this.length+J);Z+=J}}}HZ$.DenoBuffer=ae0;function YG4($){let Z=new ae0;return Z.readFrom($),Z.bytes()}function JG4($,Z){let Q=0;while(Q<Z.length)Q+=$.write(Z.subarray(Q))}});var Z01=v((LZ$)=>{Object.defineProperty(LZ$,"__esModule",{value:!0});LZ$.cc=LZ$.State=LZ$.Parser=LZ$.Kind=void 0;LZ$.describe=NG4;var ee0=se0(),$01=$3();LZ$.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function NG4($){let Z,Q="";switch($.kind){case LZ$.Kind.MSG:Z="MSG";break;case LZ$.Kind.OK:Z="OK";break;case LZ$.Kind.ERR:Z="ERR",Q=$01.TD.decode($.data);break;case LZ$.Kind.PING:Z="PING";break;case LZ$.Kind.PONG:Z="PONG";break;case LZ$.Kind.INFO:Z="INFO",Q=$01.TD.decode($.data)}return`${Z}: ${Q}`}function UZ$(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var NZ$=48,BG4=57,Fu=67108864;class BZ${dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=LZ$.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 LZ$.State.OP_START:switch(Q){case LZ$.cc.M:case LZ$.cc.m:this.state=LZ$.State.OP_M,this.hdr=-1,this.ma=UZ$();break;case LZ$.cc.H:case LZ$.cc.h:this.state=LZ$.State.OP_H,this.hdr=0,this.ma=UZ$();break;case LZ$.cc.P:case LZ$.cc.p:this.state=LZ$.State.OP_P;break;case LZ$.cc.PLUS:this.state=LZ$.State.OP_PLUS;break;case LZ$.cc.MINUS:this.state=LZ$.State.OP_MINUS;break;case LZ$.cc.I:case LZ$.cc.i:this.state=LZ$.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_H:switch(Q){case LZ$.cc.M:case LZ$.cc.m:this.state=LZ$.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_M:switch(Q){case LZ$.cc.S:case LZ$.cc.s:this.state=LZ$.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_MS:switch(Q){case LZ$.cc.G:case LZ$.cc.g:this.state=LZ$.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_MSG:switch(Q){case LZ$.cc.SPACE:case LZ$.cc.TAB:this.state=LZ$.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_MSG_SPC:switch(Q){case LZ$.cc.SPACE:case LZ$.cc.TAB:continue;default:this.state=LZ$.State.MSG_ARG,this.as=Z}break;case LZ$.State.MSG_ARG:switch(Q){case LZ$.cc.CR:this.drop=1;break;case LZ$.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=LZ$.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;case LZ$.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let X=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:LZ$.Kind.MSG,msg:this.ma,data:X}),this.argBuf=void 0,this.msgBuf=void 0,this.state=LZ$.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:LZ$.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=LZ$.State.MSG_END;break;case LZ$.State.MSG_END:switch(Q){case LZ$.cc.NL:this.drop=0,this.as=Z+1,this.state=LZ$.State.OP_START;break;default:continue}break;case LZ$.State.OP_PLUS:switch(Q){case LZ$.cc.O:case LZ$.cc.o:this.state=LZ$.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_PLUS_O:switch(Q){case LZ$.cc.K:case LZ$.cc.k:this.state=LZ$.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_PLUS_OK:switch(Q){case LZ$.cc.NL:this.dispatcher.push({kind:LZ$.Kind.OK}),this.drop=0,this.state=LZ$.State.OP_START;break}break;case LZ$.State.OP_MINUS:switch(Q){case LZ$.cc.E:case LZ$.cc.e:this.state=LZ$.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_MINUS_E:switch(Q){case LZ$.cc.R:case LZ$.cc.r:this.state=LZ$.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_MINUS_ER:switch(Q){case LZ$.cc.R:case LZ$.cc.r:this.state=LZ$.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_MINUS_ERR:switch(Q){case LZ$.cc.SPACE:case LZ$.cc.TAB:this.state=LZ$.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_MINUS_ERR_SPC:switch(Q){case LZ$.cc.SPACE:case LZ$.cc.TAB:continue;default:this.state=LZ$.State.MINUS_ERR_ARG,this.as=Z}break;case LZ$.State.MINUS_ERR_ARG:switch(Q){case LZ$.cc.CR:this.drop=1;break;case LZ$.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:LZ$.Kind.ERR,data:X}),this.drop=0,this.as=Z+1,this.state=LZ$.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(Q))}break;case LZ$.State.OP_P:switch(Q){case LZ$.cc.I:case LZ$.cc.i:this.state=LZ$.State.OP_PI;break;case LZ$.cc.O:case LZ$.cc.o:this.state=LZ$.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_PO:switch(Q){case LZ$.cc.N:case LZ$.cc.n:this.state=LZ$.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_PON:switch(Q){case LZ$.cc.G:case LZ$.cc.g:this.state=LZ$.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_PONG:switch(Q){case LZ$.cc.NL:this.dispatcher.push({kind:LZ$.Kind.PONG}),this.drop=0,this.state=LZ$.State.OP_START;break}break;case LZ$.State.OP_PI:switch(Q){case LZ$.cc.N:case LZ$.cc.n:this.state=LZ$.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_PIN:switch(Q){case LZ$.cc.G:case LZ$.cc.g:this.state=LZ$.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_PING:switch(Q){case LZ$.cc.NL:this.dispatcher.push({kind:LZ$.Kind.PING}),this.drop=0,this.state=LZ$.State.OP_START;break}break;case LZ$.State.OP_I:switch(Q){case LZ$.cc.N:case LZ$.cc.n:this.state=LZ$.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_IN:switch(Q){case LZ$.cc.F:case LZ$.cc.f:this.state=LZ$.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_INF:switch(Q){case LZ$.cc.O:case LZ$.cc.o:this.state=LZ$.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_INFO:switch(Q){case LZ$.cc.SPACE:case LZ$.cc.TAB:this.state=LZ$.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case LZ$.State.OP_INFO_SPC:switch(Q){case LZ$.cc.SPACE:case LZ$.cc.TAB:continue;default:this.state=LZ$.State.INFO_ARG,this.as=Z}break;case LZ$.State.INFO_ARG:switch(Q){case LZ$.cc.CR:this.drop=1;break;case LZ$.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:LZ$.Kind.INFO,data:X}),this.drop=0,this.as=Z+1,this.state=LZ$.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;default:throw this.fail($.subarray(Z))}}if((this.state===LZ$.State.MSG_ARG||this.state===LZ$.State.MINUS_ERR_ARG||this.state===LZ$.State.INFO_ARG)&&!this.argBuf)this.argBuf=new ee0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===LZ$.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new ee0.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 ee0.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 LZ$.cc.SPACE:case LZ$.cc.TAB:case LZ$.cc.CR:case LZ$.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],Fu);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],Fu);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}: ${$01.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case LZ$.cc.SPACE:case LZ$.cc.TAB:case LZ$.cc.CR:case LZ$.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],Fu),this.ma.size=this.protoParseInt(Z[3],Fu);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],Fu),this.ma.size=this.protoParseInt(Z[4],Fu);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]<NZ$||$[X]>BG4)return-1;Q=Q*10+($[X]-NZ$)}return Z!==void 0&&Q>Z?-1:Q}}LZ$.Parser=BZ$;LZ$.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};LZ$.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 eJ0=v((DZ$)=>{Object.defineProperty(DZ$,"__esModule",{value:!0});DZ$.MsgHdrsImpl=void 0;DZ$.canonicalMIMEHeaderKey=X01;DZ$.headers=DG4;var OZ$=$3(),HW=eO(),sJ0=Z3();function X01($){let F=!0,U=Array($.length);for(let N=0;N<$.length;N++){let B=$.charCodeAt(N);if(B===58||B<33||B>126)throw sJ0.InvalidArgumentError.format("header",`'${$[N]}' 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;U[N]=B,F=B==45}return String.fromCharCode(...U)}function DG4($=0,Z=""){if($===0&&Z!=="")throw sJ0.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw sJ0.InvalidArgumentError.format("description","is required");return new Uu($,Z)}var Q01="NATS/1.0";class Uu{_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(),J=[...X].sort();for(let G=0;G<Y.length;G++)if(Y[G]!==J[G])return!1}return!0}return!1}static decode($){let Z=new Uu,X=OZ$.TD.decode($).split(`\r
|
|
2081
2081
|
`),Y=X[0];if(Y!==Q01){let J=Y.replace(Q01,"").trim();if(J.length>0){if(Z._code=parseInt(J,10),isNaN(Z._code))Z._code=0;let G=Z._code.toString();J=J.replace(G,""),Z._description=J.trim()}}if(X.length>=1)X.slice(1).map((J)=>{if(J){let G=J.indexOf(":");if(G>-1){let K=J.slice(0,G),W=J.slice(G+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=Q01;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
|
|
2082
2082
|
${Z}: ${Q[X]}`;return`${$}\r
|
package/dist/server/server.js
CHANGED
|
@@ -3419,7 +3419,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
3419
3419
|
${J.join(`
|
|
3420
3420
|
`)}`:X}function $V6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3421
3421
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var ue$=200,mI6=12,pI6,tI6=300,fI0=3;var pW1=O(()=>{OZ();m$();vI0();pI6={aheadBy:0,behindBy:0,files:[]}});function QV6($){if(!$||$.includes(".."))return!1;return ZV6.test($)}function ce$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!QV6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function de$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var ZV6;var me$=O(()=>{ZV6=/^[\w./@-]+$/});function L$0($,Z){let Q=$?.githubRepo;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function pe$($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new aw(nZ);let J=await bL($.storage,X,Y);if(J&&await CN($.storage,J)){let F=await XF($,J,{forceRefresh:!0}).catch((U)=>{throw new aw(U instanceof Error?U.message:nZ)});await ie$($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new aw("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await eu({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:nZ;throw new aw(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await JF(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=uG$(F instanceof Error?F.message:String(F));throw U?new aw(N):F});await ie$($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function ie$($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=pd($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await Jw(K,YV6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var YV6=10485760,aw;var nW1=O(()=>{PG();RI0();ua();C30();ys();OZ();aw=class aw extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function JV6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!XV6.test(Z))throw Error(`Invalid branch name: ${$}`)}function sb($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(WV6)])}async function HV6($,Z){let Q=$.var.studioContext,Y=BF(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=Ef(G?.metadata?.runtime);if(W)return W;let K=LP0(Z.virtualMcpMetadata),H=K==="cms"?await MW1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)la(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function FV6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await nY($.var.studioContext)}catch{return null}}function ab($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function sd($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=L$0(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=p(Y);return ru(Y,J.id,X)}function tW1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=D3$(Z);if(Y!==void 0)return $.json({error:Q},429,{...R5,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof P6)return $.json({error:Q},409,R5);let X=MG(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,R5)}return $.json({error:Q},502,R5)}async function oe$($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function re$($){try{let Z=await sd($),Q=await bI0(Z,$.get("vmClaim").branch);return $.json(Q,200,R5)}catch(Z){return tW1($,Z)}}function w$0($,Z){let Y=(gI0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return gI0.set($,X),X.finally(()=>{if(gI0.get($)===X)gI0.delete($)}),Y}async function k7($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,R5);let Y=Q?.runner??ab($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...R5}})}}let D=await B.text(),L=Q?.redactRepoDir?UV6(D):D,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...R5}})};try{if(F){let B=N();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await N()}catch(B){let D=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${D}`},502)}}function UV6($){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 hI0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function NV6($){return se$.includes($)}var XV6,ne$=524288,GV6=65536,WV6=1e4,te$=2000,KV6,gI0,R5,se$,ae$=()=>{let $=new e0;$.use("/:virtualMcpId/:branch/*",KV6),$.post("/:virtualMcpId/:branch/write",(Q)=>k7(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>k7(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>k7(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>k7(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>k7(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>k7(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>k7(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:sb(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return k7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return k7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>k7(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>k7(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!NV6(Y))return Q.json({error:`step must be one of: ${se$.join(", ")}`},400);let X=Q.get("vmClaim"),J=await MW1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await FV6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,R5);if(Y==="start"){let G=p(Q.var.studioContext),W=Cl(X.virtualMcpMetadata);try{await NP0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return k7(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return IB(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return sa$(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return re$(Q);return Z(Q)});let Z=(Q)=>k7(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(te$)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return re$(Q);return k7(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(te$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await sd(Q),G=await xI0(J,Y.branch,X.base);return Q.json(G,200,R5)}catch(X){return tW1(Q,X)}return k7(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,R5);let Y=ab(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return w$0(X,async()=>{try{await IW1(W,Y,X);let K=L$0(J,G);if(K)await pe$(W,Y,X,K)}catch(K){if(K instanceof aw)return Q.json({error:K.message},403,R5);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,R5)}return k7(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return w$0(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,R5);try{let G=await sd(Q);return await le$(G,Y.branch,J),Q.json({ok:!0},200,R5)}catch(G){let W=MG(G)===409||G instanceof P6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,R5)}});return w$0(Y.claimName,()=>k7(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return w$0(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await sd(Q),H=W.base??await K.getDefaultBranch();return await yI0(K,Y.branch,H),Q.json({ok:!0},200,R5)}catch(W){return tW1(Q,W)}});let X=ab(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return w$0(J,async()=>{try{await IW1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,R5)}return k7(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",l5({maxSize:ne$,onError:(Q)=>Q.json({error:"Payload too large"},413,R5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ab(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=SW1(F)&&N?[F,U]:X?await Promise.all([hI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),hI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await sd(Q);return Promise.all([bI0(w,Y.branch),xI0(w,Y.branch)])})();await bW(K,p(K).id,"suggesting a commit message");let L=await Qe$(K,B,D);return Q.json(L,200,R5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return Q.json({error:F},502,R5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",l5({maxSize:ne$,onError:(Q)=>Q.json({error:"Payload too large"},413,R5)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ab(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,D]=SW1(F)&&N?[F,U]:X?await Promise.all([hI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),hI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await sd(Q);return Promise.all([bI0(w,Y.branch),xI0(w,Y.branch)])})();await bW(K,p(K).id,"judging whether a change needs review");let L=await Xe$(K,B,D,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,R5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,R5);return Q.json({error:F},502,R5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=ab(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return oe$(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",l5({maxSize:GV6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=ab(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=ce$(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=de$(J,W.resolveType);return oe$(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var ee$=O(()=>{y$();hK();id();qW1();xa();ta$();CG();_l();oa$();BK();qH();ra$();aa$();H81();ga();vW1();Je$();OZ();c6();pW1();me$();nW1();XV6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;KV6=TI0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=l0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=p(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{JV6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=Ka({orgId:X.id,virtualMcpId:J,branch:G}),H=await l11(Q,G),F=c11(H,Y),U=na$({userId:F,projectRef:K}),N=W.metadata??null,B=await HV6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let D;try{D=await nY(Q)}catch{D=null}if(!D)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:D,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});gI0=new Map;R5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};se$=["clone","install","start"]});function $08($,Z,Q){let Y=oW1.get($);if(!Y)Y={pending:null,running:!1},oW1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)DV6($,Y);return J}async function DV6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await OV6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)oW1.delete($)}}async function OV6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await rd(Z,Q),W=await Z.listDecofileEntries(G,Y),K=dW1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let D=mW1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3422
|
-
`;await xe$(Z.repo,L);let w=D[0]??`${_I0(Y)}/${xW1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of mW1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await ye$(Z,F.values(),X),{decofile:B,skipped:D}=U$0(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:eW(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:LV6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof P6)||J>=BV6-1)throw N;await T$(_7(2000,200,J,2,0.5))}}}function LV6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return D11(Y,$.deps.coAuthor)}var BV6=3,oW1;var Z08=O(()=>{Xz0();MI0();X6();m$();OZ();vI0();oW1=new Map});import{createHmac as Q08,randomBytes as wV6,timingSafeEqual as jV6}from"crypto";function Y08(){if(uI0)return uI0;let $;try{let Z=L0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return uI0=$?Buffer.from($):wV6(32),uI0}function rW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+EV6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Q08("sha256",Y08()).update(Y).digest("base64url");return`${Y}.${X}`}function X08($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Q08("sha256",Y08()).update(Y).digest("base64url"));if(X.length!==J.length||!jV6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var EV6=21600000,uI0=null;var J08=O(()=>{t1()});import{z as ad}from"zod";function PV6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&zV6.test($)}function F08($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function j$0($){let Z=$.get("decofileScope");return ru($.var.studioContext,Z.organizationId,Z.githubRepo)}function E$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof P6)return $.json({error:Q},409);let Y=MG(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function U08(){let $=new e0;return $.use("/:virtualMcpId/:branch",H08),$.use("/:virtualMcpId/:branch/*",H08),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await j$0(Z),X=await ge$(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(X.decofile,200,{...J,"content-type":"application/json"});let G=rW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(F08(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return E$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await j$0(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return E$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",TV6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=RV6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{qI0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(bW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await j$0(Z),W=await $08(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:pd(Y)},J),K=rW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:F08(Z)})}catch(G){return E$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await j$0(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(MG(W)!==409)throw W;await yI0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(MG(G)===409)return Z.json({error:"merge-conflict"},409);if(MG(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return E$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await j$0(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(MG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return E$0(Z,Y)}}),$}var zV6,G08=500,W08=1048576,K08=1024,AV6=8388608,TV6,RV6,H08;var N08=O(()=>{F81();MI0();y$();hK();qW1();RI0();nW1();OZ();Z08();J08();pW1();vI0();qH();zV6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;TV6=l5({maxSize:AV6,onError:($)=>$.json({error:"Payload too large"},413)}),RV6=ad.object({set:ad.record(ad.string(),ad.unknown()).optional(),delete:ad.array(ad.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)<=G08,{message:`Patch cannot touch more than ${G08} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=W08),{message:`Each block must be at most ${W08} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=K08),{message:`Each block key must be at most ${K08} characters`}),H08=TI0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!PV6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!X08(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await YG(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!OP0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=L$0(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var B08=($)=>{let Z=new e0;if(Z.use("*",Td),Z.use("*",dt$),Z.route("/",_M0()),Z.route("/",qo$()),Z.route("/",Uo$()),Z.route("/",fa$()),Z.route("/",Ma$()),Z.route("/",_a$()),Z.route("/",Va$()),Z.route("/",zI0()),Z.route("/tools",la$()),Z.route("/",ga$()),Z.route("/",Xa$({kvStorage:$.kvStorage})),Z.route("/",Qa$()),Z.route("/fs",wa$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ae$()),Z.route("/decofile",U08()),Z.route("/",Ta$()),Z.route("/",Ea$()),Z.route("/deco-sites",fM0()),Z.route("/hosting",$o$()),Z.route("/monitor",Wo$()),Z.route("/sso",IM0()),Z.route("/",PI0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ot$()),$.mountDevAssets)Z.route("/dev-assets",gM0({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("/",ei$()),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",Pa$()),Z.route("/mcp",P20()),Z.route("/mcp/self",LI0()),Z.route("/mcp",R20()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var D08=O(()=>{y$();mt$();LM0();rt$();p31();Zo$();Ko$();hM0();hb();l31();s31();Ya$();Ja$();ja$();za$();oe();b31();q20();LW1();Aa$();Ra$();Ia$();ka$();EW1();ba$();ha$();zW1();ca$();PW1();A20();ee$();N08()});function qV6($){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 MV6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},O08=()=>{let $=new e0;return $.use("*",MV6),$.get("/",async(Z)=>{let Q=L0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await KJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:qV6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var L08=O(()=>{y$();t1();wq0()});import{z as V1}from"zod";function eF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function xV6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function yV6($,Z,Q){try{return JSON.parse($)}catch{throw new E08(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function gV6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:yV6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function hV6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?_J(Q.function.parameters):_J({type:"object",properties:{}});return[Q.function.name,D$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function uV6($){if(!$)return;return{openai:{response_format:$}}}function lV6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function w08($,Z,Q,Y,X,J){let G={model:$,messages:Z,tools:Q,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function j08($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var IV6=256,VV6,kV6,SV6,CV6,_V6,vV6,fV6,bV6,E08,z08,P08;var A08=O(()=>{T4();y$();id();MK();VV6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),kV6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),SV6=V1.discriminatedUnion("role",[V1.object({role:V1.literal("system"),content:V1.string(),name:V1.string().optional()}),V1.object({role:V1.literal("user"),content:V1.union([V1.string(),V1.array(V1.union([V1.object({type:V1.literal("text"),text:V1.string()}),V1.object({type:V1.literal("image_url"),image_url:V1.object({url:V1.string(),detail:V1.string().optional()})})]))]),name:V1.string().optional()}),V1.object({role:V1.literal("assistant"),content:V1.string().nullable().optional(),name:V1.string().optional(),tool_calls:V1.array(kV6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),CV6=V1.object({type:V1.literal("text")}),_V6=V1.object({type:V1.literal("json_object")}),vV6=V1.object({type:V1.literal("json_schema"),json_schema:V1.object({name:V1.string(),description:V1.string().optional(),schema:V1.record(V1.string(),V1.unknown()),strict:V1.boolean().optional()})}),fV6=V1.union([CV6,_V6,vV6]),bV6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(SV6),stream:V1.boolean().optional().default(!1),temperature:V1.number().min(0).max(2).optional(),max_tokens:V1.number().positive().optional(),top_p:V1.number().min(0).max(1).optional(),frequency_penalty:V1.number().min(-2).max(2).optional(),presence_penalty:V1.number().min(-2).max(2).optional(),stop:V1.union([V1.string(),V1.array(V1.string())]).optional(),tools:V1.array(VV6).optional(),tool_choice:V1.union([V1.literal("auto"),V1.literal("none"),V1.literal("required"),V1.object({type:V1.literal("function"),function:V1.object({name:V1.string()})})]).optional(),response_format:fV6.optional(),user:V1.string().optional()});E08=class E08 extends Error{constructor($){super($);this.name="MessageConversionError"}};z08=new e0;z08.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(eF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(eF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(eF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=bV6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(eF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=xV6(J.model);if(!G)return $.json(eF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>KE(E.providerId));if(!j)return $.json(eF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(eF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=gV6(J.messages),N=J.tools?hV6(J.tools):void 0,B=uV6(J.response_format),D=lV6(),L=Math.floor(Date.now()/1000);if(J.stream)return IB($,async(w)=>{let j=w08(F,U,N,J,B,$.req.raw.signal);try{let E=Qw(j),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of E.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=IV6)await q()}else if(k.type==="tool-call"){await q();let I=P++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:I,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:j08(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 q(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=w08(F,U,N,J,B,$.req.raw.signal),j=await $w(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:j08(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(eF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(eF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(eF(X.message,"server_error"),500)}});P08=z08});function cV6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function T08(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=l0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!pZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||r5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(dJ0(U)!==J)continue;if(!cV6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var R08=O(()=>{y$();AG()});var M08;var q08=O(()=>{M08={name:"decocms",version:"4.381.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/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 iV6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??mV6}}var I08,mV6="https://ph.studio.decocms.com",V08;var k08=O(()=>{y$();Nr();hf();k5();t1();P31();q08();I08=new e0;I08.get("/",($)=>{let Z={version:M08.version,theme:p5$(),...sW().logo&&{logo:sW().logo},...eN()&&{internalUrl:Ih1()},...L0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!L0().firecrawlApiKey,hostingEnabled:!!L0().controlplaneRestUrl&&!!L0().controlplaneServiceToken,hostingControlPlaneGa:L0().hostingControlPlaneGa,monitorEnabled:!!L0().clickhouseAnalyticsUrl&&!!L0().clickhouseAnalyticsPassword,monitorGa:L0().monitorGa,plansEnabled:L0().plansEnabled,auth:mn$(),posthog:iV6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:vB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});V08=I08});function ed($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function sW1($){return(ed($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function C08($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ed($))}&sz=${Z}`}function S08($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function _08($){let{brand:Z,domain:Q,score:Y,verdict:X}=$,J=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=X?.trim()?S08(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):S08(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var eb,pV6,nV6,tV6,oV6,v08;var f08=O(()=>{eb=m0.enum(["good","bad","neutral"]),pV6=m0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},m0.object({kind:m0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:m0.coerce.string().optional(),tone:eb.optional(),muted:m0.boolean().optional(),delta:m0.coerce.string().optional(),deltaDir:m0.enum(["up","down","neutral"]).optional(),points:m0.array(m0.coerce.number()).optional(),label:m0.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 $})),nV6=m0.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},m0.array(pV6)),tV6={key:m0.coerce.string(),title:m0.coerce.string(),eyebrow:m0.coerce.string().optional(),headline:m0.coerce.string(),annotation:m0.coerce.string().optional(),methodology:m0.coerce.string().optional(),sources:m0.array(m0.object({name:m0.coerce.string(),logoUrl:m0.coerce.string()})).optional()},oV6=m0.discriminatedUnion("template",[m0.object({template:m0.literal("cover"),score:m0.object({value:m0.coerce.number(),max:m0.coerce.number().optional(),grade:m0.coerce.string().optional(),label:m0.coerce.string().optional()}).optional(),brandImage:m0.coerce.string().optional(),screenshot:m0.coerce.string().optional(),mobileScreenshot:m0.coerce.string().optional()}),m0.object({template:m0.literal("cta"),ctaUrl:m0.coerce.string().optional(),ctaLabel:m0.coerce.string().optional(),bullets:m0.array(m0.coerce.string()).optional()}),m0.object({template:m0.literal("series"),points:m0.array(m0.coerce.number()).min(2),xLabels:m0.array(m0.coerce.string()).min(1),unit:m0.coerce.string().optional(),callout:m0.object({index:m0.coerce.number(),value:m0.coerce.string(),tone:eb.optional()})}),m0.object({template:m0.literal("threshold"),value:m0.coerce.string().default(""),metricLabel:m0.coerce.string().optional(),ratio:m0.coerce.number(),thresholdRatio:m0.coerce.number().optional(),thresholdLabel:m0.coerce.string().default(""),tone:eb.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:eb.optional()})).min(1)}),m0.object({template:m0.literal("bars"),items:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),ratio:m0.coerce.number(),tone:eb.optional()})).min(1)}),m0.object({template:m0.literal("gauges"),gauges:m0.array(m0.object({label:m0.coerce.string(),value:m0.coerce.string(),status:m0.enum(["good","warn","bad"]).catch("warn"),caption:m0.coerce.string().optional(),ratio:m0.coerce.number().optional()})).min(1)}),m0.object({template:m0.literal("checklist"),checks:m0.array(m0.object({label:m0.coerce.string(),status:m0.enum(["pass","fail","warn"]).catch("fail"),value:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("table"),columns:m0.array(m0.object({label:m0.coerce.string(),align:m0.enum(["left","right"]).optional()})).min(1),rows:m0.array(nV6).min(1),highlightRow:m0.coerce.number().optional()}),m0.object({template:m0.literal("products"),products:m0.array(m0.object({name:m0.coerce.string(),price:m0.coerce.string().optional(),image:m0.coerce.string().optional(),url:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("list"),entries:m0.array(m0.object({label:m0.coerce.string(),severity:m0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:m0.coerce.number().optional()}),m0.object({template:m0.literal("keywords"),volumeLabel:m0.coerce.string().optional(),keywords:m0.array(m0.object({term:m0.coerce.string(),volume:m0.coerce.string(),position:m0.coerce.number().catch(0)})).min(1)}),m0.object({template:m0.literal("competitor"),metricLabel:m0.coerce.string().optional(),competitors:m0.array(m0.object({name:m0.coerce.string(),value:m0.coerce.string(),tone:eb.optional(),isYou:m0.boolean().optional()})).min(1)}),m0.object({template:m0.literal("scorecard"),rivalLabel:m0.coerce.string().optional(),dimensions:m0.array(m0.object({label:m0.coerce.string(),you:m0.coerce.string(),rival:m0.coerce.string().optional(),rivalName:m0.coerce.string().optional(),tone:eb.optional()})).min(1)})]),v08=m0.object({...tV6,template:oV6})});function lI0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=v08.safeParse(X.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:X.section_type,position:X.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((X)=>X!==null),Y=Q.filter((X)=>X.template.template!=="cover"&&X.template.template!=="cta").map((X)=>({key:X.key,title:X.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Y},slides:Q},drops:Z}}var aW1=O(()=>{f08()});import{join as b08}from"path";async function sV6($){try{let Z=await fetch(`${cH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(rV6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=lI0(Q);if(!Y.slides.length)return null;let X=Y.slides.find((W)=>W.template.template==="cover"),J=X?.template,G=J&&J.template==="cover"?J:void 0;return{brand:Y.meta.brand?.trim()||sW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function q3($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function aV6($,Z){let Q=ed($),Y=Z?.brand?.trim()||sW1(Q),X=C08(Q,128),G=`${(L0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=_08({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${q3(W)}</title>`,`<meta name="description" content="${q3(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="${q3(W)}" />`,`<meta property="og:description" content="${q3(K)}" />`,`<meta property="og:url" content="${q3(G)}" />`,`<meta property="og:image" content="${q3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${q3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${q3(W)}" />`,`<meta name="twitter:description" content="${q3(K)}" />`,`<meta name="twitter:image" content="${q3(H)}" />`,`<meta name="twitter:image:alt" content="${q3(F)}" />`,`<link rel="canonical" href="${q3(G)}" />`,`<link rel="icon" href="${q3(X)}" sizes="any" />`].join(`
|
|
3422
|
+
`;await xe$(Z.repo,L);let w=D[0]??`${_I0(Y)}/${xW1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of D.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of mW1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await ye$(Z,F.values(),X),{decofile:B,skipped:D}=U$0(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:eW(Z.repo),branch:Q,packagePath:Y,blocks:D.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:LV6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof P6)||J>=BV6-1)throw N;await T$(_7(2000,200,J,2,0.5))}}}function LV6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return D11(Y,$.deps.coAuthor)}var BV6=3,oW1;var Z08=O(()=>{Xz0();MI0();X6();m$();OZ();vI0();oW1=new Map});import{createHmac as Q08,randomBytes as wV6,timingSafeEqual as jV6}from"crypto";function Y08(){if(uI0)return uI0;let $;try{let Z=L0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return uI0=$?Buffer.from($):wV6(32),uI0}function rW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+EV6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=Q08("sha256",Y08()).update(Y).digest("base64url");return`${Y}.${X}`}function X08($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(Q08("sha256",Y08()).update(Y).digest("base64url"));if(X.length!==J.length||!jV6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var EV6=21600000,uI0=null;var J08=O(()=>{t1()});import{z as ad}from"zod";function PV6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&zV6.test($)}function F08($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function j$0($){let Z=$.get("decofileScope");return ru($.var.studioContext,Z.organizationId,Z.githubRepo)}function E$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof P6)return $.json({error:Q},409);let Y=MG(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function U08(){let $=new e0;return $.use("/:virtualMcpId/:branch",H08),$.use("/:virtualMcpId/:branch/*",H08),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await j$0(Z),X=await ge$(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(X.decofile,200,{...J,"content-type":"application/json"});let G=rW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(F08(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return E$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await j$0(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return E$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",TV6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=RV6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J=X.data;for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{qI0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(bW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await j$0(Z),W=await $08(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:pd(Y)},J),K=rW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:F08(Z)})}catch(G){return E$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await j$0(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(MG(W)!==409)throw W;await yI0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(MG(G)===409)return Z.json({error:"merge-conflict"},409);if(MG(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return E$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await j$0(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:J,behindBy:G},W]=await Promise.all([Y.compare(X,Q.branch),Y.getBranch(Q.branch)]);return Z.json({baseBranch:X,aheadBy:J,behindBy:G,lastCommitAt:W?.committedAt??null})}catch(J){if(MG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return E$0(Z,Y)}}),$}var zV6,G08=500,W08=1048576,K08=1024,AV6=8388608,TV6,RV6,H08;var N08=O(()=>{F81();MI0();y$();hK();qW1();RI0();nW1();OZ();Z08();J08();pW1();vI0();qH();zV6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;TV6=l5({maxSize:AV6,onError:($)=>$.json({error:"Payload too large"},413)}),RV6=ad.object({set:ad.record(ad.string(),ad.unknown()).optional(),delete:ad.array(ad.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)<=G08,{message:`Patch cannot touch more than ${G08} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=W08),{message:`Each block must be at most ${W08} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=K08),{message:`Each block key must be at most ${K08} characters`}),H08=TI0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!PV6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!X08(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await YG(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!OP0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=L$0(K,F);if(!U)return $.json({error:"Project has no GitHub repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:U,userId:G}),Z()})});var B08=($)=>{let Z=new e0;if(Z.use("*",Td),Z.use("*",dt$),Z.route("/",_M0()),Z.route("/",qo$()),Z.route("/",Uo$()),Z.route("/",fa$()),Z.route("/",Ma$()),Z.route("/",_a$()),Z.route("/",Va$()),Z.route("/",zI0()),Z.route("/tools",la$()),Z.route("/",ga$()),Z.route("/",Xa$({kvStorage:$.kvStorage})),Z.route("/",Qa$()),Z.route("/fs",wa$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ae$()),Z.route("/decofile",U08()),Z.route("/",Ta$()),Z.route("/",Ea$()),Z.route("/deco-sites",fM0()),Z.route("/hosting",$o$()),Z.route("/monitor",Wo$()),Z.route("/sso",IM0()),Z.route("/",PI0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",ot$()),$.mountDevAssets)Z.route("/dev-assets",gM0({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("/",ei$()),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",Pa$()),Z.route("/mcp",P20()),Z.route("/mcp/self",LI0()),Z.route("/mcp",R20()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var D08=O(()=>{y$();mt$();LM0();rt$();p31();Zo$();Ko$();hM0();hb();l31();s31();Ya$();Ja$();ja$();za$();oe();b31();q20();LW1();Aa$();Ra$();Ia$();ka$();EW1();ba$();ha$();zW1();ca$();PW1();A20();ee$();N08()});function qV6($){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 MV6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},O08=()=>{let $=new e0;return $.use("*",MV6),$.get("/",async(Z)=>{let Q=L0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await KJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:qV6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var L08=O(()=>{y$();t1();wq0()});import{z as V1}from"zod";function eF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function xV6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function yV6($,Z,Q){try{return JSON.parse($)}catch{throw new E08(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function gV6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:yV6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function hV6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?_J(Q.function.parameters):_J({type:"object",properties:{}});return[Q.function.name,D$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function uV6($){if(!$)return;return{openai:{response_format:$}}}function lV6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function w08($,Z,Q,Y,X,J){let G={model:$,messages:Z,tools:Q,temperature:Y.temperature,maxTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function j08($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var IV6=256,VV6,kV6,SV6,CV6,_V6,vV6,fV6,bV6,E08,z08,P08;var A08=O(()=>{T4();y$();id();MK();VV6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),kV6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),SV6=V1.discriminatedUnion("role",[V1.object({role:V1.literal("system"),content:V1.string(),name:V1.string().optional()}),V1.object({role:V1.literal("user"),content:V1.union([V1.string(),V1.array(V1.union([V1.object({type:V1.literal("text"),text:V1.string()}),V1.object({type:V1.literal("image_url"),image_url:V1.object({url:V1.string(),detail:V1.string().optional()})})]))]),name:V1.string().optional()}),V1.object({role:V1.literal("assistant"),content:V1.string().nullable().optional(),name:V1.string().optional(),tool_calls:V1.array(kV6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),CV6=V1.object({type:V1.literal("text")}),_V6=V1.object({type:V1.literal("json_object")}),vV6=V1.object({type:V1.literal("json_schema"),json_schema:V1.object({name:V1.string(),description:V1.string().optional(),schema:V1.record(V1.string(),V1.unknown()),strict:V1.boolean().optional()})}),fV6=V1.union([CV6,_V6,vV6]),bV6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(SV6),stream:V1.boolean().optional().default(!1),temperature:V1.number().min(0).max(2).optional(),max_tokens:V1.number().positive().optional(),top_p:V1.number().min(0).max(1).optional(),frequency_penalty:V1.number().min(-2).max(2).optional(),presence_penalty:V1.number().min(-2).max(2).optional(),stop:V1.union([V1.string(),V1.array(V1.string())]).optional(),tools:V1.array(VV6).optional(),tool_choice:V1.union([V1.literal("auto"),V1.literal("none"),V1.literal("required"),V1.object({type:V1.literal("function"),function:V1.object({name:V1.string()})})]).optional(),response_format:fV6.optional(),user:V1.string().optional()});E08=class E08 extends Error{constructor($){super($);this.name="MessageConversionError"}};z08=new e0;z08.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(eF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(eF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(eF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=bV6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(eF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=xV6(J.model);if(!G)return $.json(eF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>KE(E.providerId));if(!j)return $.json(eF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(eF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=gV6(J.messages),N=J.tools?hV6(J.tools):void 0,B=uV6(J.response_format),D=lV6(),L=Math.floor(Date.now()/1000);if(J.stream)return IB($,async(w)=>{let j=w08(F,U,N,J,B,$.req.raw.signal);try{let E=Qw(j),z=!1,P=0,A="",q=async()=>{if(A.length===0)return;let k=A;A="",await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of E.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(A+=k.text,A.length>=IV6)await q()}else if(k.type==="tool-call"){await q();let I=P++;await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:I,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await q(),await w.writeSSE({data:JSON.stringify({id:D,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:j08(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 q(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=w08(F,U,N,J,B,$.req.raw.signal),j=await $w(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:D,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:j08(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(eF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(eF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(eF(X.message,"server_error"),500)}});P08=z08});function cV6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function T08(){let $=new e0;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=l0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!pZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Y).execute(),W=[];for(let H of G){if(!H.slug||r5(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(dJ0(U)!==J)continue;if(!cV6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var R08=O(()=>{y$();AG()});var M08;var q08=O(()=>{M08={name:"decocms",version:"4.381.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/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 iV6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??mV6}}var I08,mV6="https://ph.studio.decocms.com",V08;var k08=O(()=>{y$();Nr();hf();k5();t1();P31();q08();I08=new e0;I08.get("/",($)=>{let Z={version:M08.version,theme:p5$(),...sW().logo&&{logo:sW().logo},...eN()&&{internalUrl:Ih1()},...L0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!L0().firecrawlApiKey,hostingEnabled:!!L0().controlplaneRestUrl&&!!L0().controlplaneServiceToken,hostingControlPlaneGa:L0().hostingControlPlaneGa,monitorEnabled:!!L0().clickhouseAnalyticsUrl&&!!L0().clickhouseAnalyticsPassword,monitorGa:L0().monitorGa,plansEnabled:L0().plansEnabled,auth:mn$(),posthog:iV6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:vB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});V08=I08});function ed($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function sW1($){return(ed($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function C08($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ed($))}&sz=${Z}`}function S08($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function _08($){let{brand:Z,domain:Q,score:Y,verdict:X}=$,J=typeof Y==="number"?`${Z} commerce report \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,G=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=X?.trim()?S08(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):S08(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var eb,pV6,nV6,tV6,oV6,v08;var f08=O(()=>{eb=m0.enum(["good","bad","neutral"]),pV6=m0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((Q)=>Q!==null&&typeof Q!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},m0.object({kind:m0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:m0.coerce.string().optional(),tone:eb.optional(),muted:m0.boolean().optional(),delta:m0.coerce.string().optional(),deltaDir:m0.enum(["up","down","neutral"]).optional(),points:m0.array(m0.coerce.number()).optional(),label:m0.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 $})),nV6=m0.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},m0.array(pV6)),tV6={key:m0.coerce.string(),title:m0.coerce.string(),eyebrow:m0.coerce.string().optional(),headline:m0.coerce.string(),annotation:m0.coerce.string().optional(),methodology:m0.coerce.string().optional(),sources:m0.array(m0.object({name:m0.coerce.string(),logoUrl:m0.coerce.string()})).optional()},oV6=m0.discriminatedUnion("template",[m0.object({template:m0.literal("cover"),score:m0.object({value:m0.coerce.number(),max:m0.coerce.number().optional(),grade:m0.coerce.string().optional(),label:m0.coerce.string().optional()}).optional(),brandImage:m0.coerce.string().optional(),screenshot:m0.coerce.string().optional(),mobileScreenshot:m0.coerce.string().optional()}),m0.object({template:m0.literal("cta"),ctaUrl:m0.coerce.string().optional(),ctaLabel:m0.coerce.string().optional(),bullets:m0.array(m0.coerce.string()).optional()}),m0.object({template:m0.literal("series"),points:m0.array(m0.coerce.number()).min(2),xLabels:m0.array(m0.coerce.string()).min(1),unit:m0.coerce.string().optional(),callout:m0.object({index:m0.coerce.number(),value:m0.coerce.string(),tone:eb.optional()})}),m0.object({template:m0.literal("threshold"),value:m0.coerce.string().default(""),metricLabel:m0.coerce.string().optional(),ratio:m0.coerce.number(),thresholdRatio:m0.coerce.number().optional(),thresholdLabel:m0.coerce.string().default(""),tone:eb.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:eb.optional()})).min(1)}),m0.object({template:m0.literal("bars"),items:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),ratio:m0.coerce.number(),tone:eb.optional()})).min(1)}),m0.object({template:m0.literal("gauges"),gauges:m0.array(m0.object({label:m0.coerce.string(),value:m0.coerce.string(),status:m0.enum(["good","warn","bad"]).catch("warn"),caption:m0.coerce.string().optional(),ratio:m0.coerce.number().optional()})).min(1)}),m0.object({template:m0.literal("checklist"),checks:m0.array(m0.object({label:m0.coerce.string(),status:m0.enum(["pass","fail","warn"]).catch("fail"),value:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("table"),columns:m0.array(m0.object({label:m0.coerce.string(),align:m0.enum(["left","right"]).optional()})).min(1),rows:m0.array(nV6).min(1),highlightRow:m0.coerce.number().optional()}),m0.object({template:m0.literal("products"),products:m0.array(m0.object({name:m0.coerce.string(),price:m0.coerce.string().optional(),image:m0.coerce.string().optional(),url:m0.coerce.string().optional()})).min(1)}),m0.object({template:m0.literal("list"),entries:m0.array(m0.object({label:m0.coerce.string(),severity:m0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:m0.coerce.number().optional()}),m0.object({template:m0.literal("keywords"),volumeLabel:m0.coerce.string().optional(),keywords:m0.array(m0.object({term:m0.coerce.string(),volume:m0.coerce.string(),position:m0.coerce.number().catch(0)})).min(1)}),m0.object({template:m0.literal("competitor"),metricLabel:m0.coerce.string().optional(),competitors:m0.array(m0.object({name:m0.coerce.string(),value:m0.coerce.string(),tone:eb.optional(),isYou:m0.boolean().optional()})).min(1)}),m0.object({template:m0.literal("scorecard"),rivalLabel:m0.coerce.string().optional(),dimensions:m0.array(m0.object({label:m0.coerce.string(),you:m0.coerce.string(),rival:m0.coerce.string().optional(),rivalName:m0.coerce.string().optional(),tone:eb.optional()})).min(1)})]),v08=m0.object({...tV6,template:oV6})});function lI0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=v08.safeParse(X.props);if(J.success)return J.data;let G=J.error.issues[0];return Z.push({section_type:X.section_type,position:X.position,reason:G?`${G.path.join(".")||"(root)"}: ${G.message}`:"contract violation"}),null}).filter((X)=>X!==null),Y=Q.filter((X)=>X.template.template!=="cover"&&X.template.template!=="cta").map((X)=>({key:X.key,title:X.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Y},slides:Q},drops:Z}}var aW1=O(()=>{f08()});import{join as b08}from"path";async function sV6($){try{let Z=await fetch(`${cH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(rV6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=lI0(Q);if(!Y.slides.length)return null;let X=Y.slides.find((W)=>W.template.template==="cover"),J=X?.template,G=J&&J.template==="cover"?J:void 0;return{brand:Y.meta.brand?.trim()||sW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function q3($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function aV6($,Z){let Q=ed($),Y=Z?.brand?.trim()||sW1(Q),X=C08(Q,128),G=`${(L0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=_08({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${q3(W)}</title>`,`<meta name="description" content="${q3(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="${q3(W)}" />`,`<meta property="og:description" content="${q3(K)}" />`,`<meta property="og:url" content="${q3(G)}" />`,`<meta property="og:image" content="${q3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${q3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${q3(W)}" />`,`<meta name="twitter:description" content="${q3(K)}" />`,`<meta name="twitter:image" content="${q3(H)}" />`,`<meta name="twitter:image:alt" content="${q3(F)}" />`,`<link rel="canonical" href="${q3(G)}" />`,`<link rel="icon" href="${q3(X)}" sizes="any" />`].join(`
|
|
3423
3423
|
`)}function eV6($,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}
|
|
3424
3424
|
</head>`)}function x08($){let Z=new e0;return Z.get("/:domain/og.png",async(Q)=>{let Y=ed(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(b08($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${cH({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout($k6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?b08($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await sV6(ed(Y)),K=aV6(Y,W);return Q.html(eV6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var rV6=2500,$k6=1e4;var y08=O(()=>{y$();aW1();oz();t1()});function z$0($,Z){return fetch(`${cH({})}${$}`,Z)}async function Zk6($,Z,Q){let Y=new URLSearchParams;if(Z)Y.set("pw",Z);if(Q)Y.set("lang",Q);let X=Y.toString()?`?${Y.toString()}`:"",J=await z$0(`/api/v2/public/diagnostics/${encodeURIComponent($)}${X}`,{headers:{Accept:"application/json"}});if(J.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!J.ok)throw Error(`report read HTTP ${J.status}`);let G=await J.json(),{deck:W,drops:K}=lI0(G);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:G.scanned_at,drops:K}}var Qk6,kB,g08=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},h08;var u08=O(()=>{y$();eJ();oz();aW1();Qk6=new Set(["complete","errored","terminated","unknown"]),kB=new e0;kB.use("*",async($,Z)=>{let Q=await W8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});kB.use("/link-token/*",g08);kB.use("/suggest",g08);kB.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.get("reportUser"),Y=$.req.query("key")?.trim()||void 0,X=$.req.query("lang")?.trim()||void 0;try{let J=await Zk6(Z,Y,X);if($.header("Cache-Control","private, no-store"),Q||!J.deck)return $.json(J);return $.json({...J,deck:{...J.deck,slides:J.deck.slides.slice(0,1)},truncated:J.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});kB.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Y=typeof Q.domain==="string"?Q.domain.trim():"";if(!Y)return $.json({error:"domain is required"},400);let X=Z?.email,J=typeof Q.distinctId==="string"&&Q.distinctId.trim()&&Q.distinctId.length<=200?Q.distinctId.trim():void 0;try{let G=await z$0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${tz({})}`},body:JSON.stringify({url:Y,...X?{email:X}:{},distinct_id:J})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});kB.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await z$0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${tz({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:Qk6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});kB.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await z$0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});kB.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await z$0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});h08=kB});var Yk6=1048576,eW1;var l08=O(()=>{y$();hK();t1();G31();eW1=new e0;eW1.post("/webhook",l5({maxSize:Yk6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=L0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!Qn$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=Yn$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await Xn$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as Xk6}from"crypto";function Wk6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return Xk6(Buffer.from(X),Buffer.from(Y))}function Kk6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function c08($){let Z=new e0;return Z.post("/webhook",l5({maxSize:Jk6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!Wk6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!Gk6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});let N=(await g11())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=Kk6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await Hk6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function Hk6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await F2$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var Jk6=5242880,Gk6;var d08=O(()=>{y$();hK();BK();sZ();Gk6=new Set(["check_suite","issue_comment"])});function m08($){let Z=new wB($.db,new TY($.encryptionKey)),Q=new e0;return Q.get("/attachments/:token",async(Y)=>{let X=VP$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new tY(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var i08=O(()=>{y$();zD();x81();Hw()});function p08($){let Z=new wB($.db,new TY($.encryptionKey));async function Q(X,J){let G=fu$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await xG($.db,W.organizationId);if(!K)return;if(await Eq0(K,W,G)==="started")console.log(`[jira-webhook] started a run for ${G.issueKey} entering "${G.toStatus}"`)}let Y=new e0;return Y.post("/webhook/:secret",l5({maxSize:Fk6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var Fk6=1048576;var n08=O(()=>{y$();hK();zD();zq0();vf()});import{DBOS as cI0,SchedulerMode as Uk6}from"@dbos-inc/dbos-sdk";function o08($){ZK1=$}function r08(){if(!ZK1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return ZK1}function s08(){let $=r08();return new wB($.db,new TY($.encryptionKey))}async function Dk6($,Z){try{let Q=await s08().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await xG(r08().db,Q.organizationId);if(!Y)return{integrationId:$,started:0};if((await Y.storage.jiraIntegrations.listAutomations(Q.organizationId)).length===0)return{integrationId:$,started:0};let J=new tY(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${t08}m"`,K=0,H;for(let F=0;F<Bk6;F++){let U=await J.searchIssues({jql:W,nextPageToken:H,expandChangelog:!0});for(let N of U.issues){let B=bu$(N,N.changelog?.histories??[],Z);for(let D of B)if(await Eq0(Y,Q,D)==="started")K++}if(H=U.nextPageToken??void 0,!H)break}return{integrationId:$,started:K}}catch(Q){return{integrationId:$,started:0,error:Q instanceof Error?Q.message:String(Q)}}}async function Ok6($,Z){let Q=new Date($.getTime()-t08*60000),Y=await cI0.runStep(()=>s08().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>cI0.runStep(()=>Dk6(J,Q),{name:`sweepJira:${J}`})));for(let J of X)if(J.error)console.warn(`[jira-trigger] integration ${J.integrationId} failed: ${J.error}`);else if(J.started>0)console.log(`[jira-trigger] integration ${J.integrationId} started ${J.started} run(s) the webhook missed`)}function a08(){if($K1)return;$K1=cI0.registerWorkflow(Ok6,{name:"jiraTriggerSweepWorkflow"}),cI0.registerScheduled($K1,{name:"jiraTriggerSweepWorkflow",crontab:Nk6,mode:Uk6.ExactlyOncePerIntervalWhenActive})}var Nk6="7-59/10 * * * *",t08=15,Bk6=5,ZK1=null,$K1=null;var e08=O(()=>{zD();vf();Hw();zq0()});function $18($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Z18,Lk6,wk6,Q18;var Y18=O(()=>{y$();rW();sl();QP();Z18=new e0,Lk6=["range","if-none-match","if-modified-since"],wk6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Z18.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Ad($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new X$(401,{message:"Authentication required"})}if(!Q)throw new X$(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new X$(400,{message:"Missing file key"});let X=await Ve(Y,Z);if(!X)throw new X$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&bX()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new X$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return $18(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of Lk6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new X$(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new X$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of wk6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),$18(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});Q18=Z18});var P$0=_(($x)=>{var jk6=$x&&$x.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),Ek6=$x&&$x.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))jk6(Z,$,Q)};Object.defineProperty($x,"__esModule",{value:!0});Ek6(wJ(),$x)});var G18=_((X18)=>{Object.defineProperty(X18,"__esModule",{value:!0});X18.version=void 0;X18.version="3.4.0"});var H18=_(($U)=>{var zk6=$U&&$U.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty($U,"__esModule",{value:!0});$U.NodeTransport=$U.VERSION=void 0;$U.nodeResolveHost=Mk6;var O5=P$0(),Pk6=T0("net"),QK1=T0("tls"),Ak6=T0("path"),W18=T0("fs"),Tk6=zk6(T0("dns")),Rk6=G18();$U.VERSION=Rk6.version;var qk6="nats.js";class K18{socket;version;lang;yields=[];signal=(0,O5.deferred)();closedNotification=(0,O5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=qk6,this.version=$U.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,O5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw O5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new O5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new O5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,O5.deferred)(),Q,Y=(0,Pk6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,O5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=O5.DataBuffer.concat(...this.yields),X=(0,O5.extractProtocolMessage)(Y);if(X!=="")try{let J=O5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,O5.deferred)();try{if($=(0,Ak6.resolve)($),!(0,W18.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,W18.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,O5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new O5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,O5.deferred)();try{let X=(0,QK1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new O5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,O5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new O5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,O5.deferred)();try{let Y=(0,QK1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new O5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,O5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,O5.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 QK1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,O5.render)($)}`);let Z=(0,O5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,O5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,O5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}$U.NodeTransport=K18;function Mk6($){let Z=(0,O5.deferred)();return Tk6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var D18=_((B18)=>{Object.defineProperty(B18,"__esModule",{value:!0});B18.connect=Ik6;var F18=H18(),U18=P$0(),N18=P$0();function Ik6($={}){if((0,N18.hasWsProtocol)($))return Promise.reject(N18.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,U18.setTransportFactory)({factory:()=>{return new F18.NodeTransport},dnsResolveFn:F18.nodeResolveHost}),U18.NatsConnectionImpl.connect($)}});var O18=_((SB)=>{var kk6=SB&&SB.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),Sk6=SB&&SB.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))kk6(Z,$,Q)};Object.defineProperty(SB,"__esModule",{value:!0});SB.connect=void 0;var Ck6=D18();Object.defineProperty(SB,"connect",{enumerable:!0,get:function(){return Ck6.connect}});Sk6(P$0(),SB)});function E18($){let Z=$?.connectFn??bk6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let D=0;while(!J)try{Q=await Z({servers:N,timeout:fk6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${D} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{D++;let L=_7(vk6,_k6,D-1,2,0.5);await T$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?L18.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,D).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=j18.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function bk6($){return w18.connect($)}var L18,w18,j18,_k6=100,vk6=3000,fk6=3000;var z18=O(()=>{m$();L18=V(Rm(),1),w18=V(O18(),1),j18=V(FU(),1)});function YK1($,Z){return`${$}.${Z}`}class XK1{cache;constructor($){this.cache=Ud({ttlMs:$?.ttlMs??xk6,maxSize:$?.maxSize??yk6})}async get($,Z){return this.cache.get(YK1($,Z))??null}async set($,Z,Q){this.cache.set(YK1($,Z),Q)}async invalidate($,Z){this.cache.delete(YK1($,Z))}teardown(){this.cache.clear()}}var xk6=600000,yk6=5000;var P18=()=>{};function dI0($,Z){return`${$}:${Z}`}function JK1($){let Z=Ud({ttlMs:$?.ttlMs??gk6,maxSize:$?.maxSize??hk6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(A18,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(dI0(K,H))},set(K,H,F){Z.set(dI0(K,H),F)},invalidate(K,H){Z.delete(dI0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(A18),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(dI0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var A18="studio.ai-provider-keys.invalidate",gk6=30000,hk6=5000;var T18=()=>{};class GK1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var R18=($)=>{let Z;return()=>Z??=$()},WK1,KK1;var q18=O(()=>{W6();WK1=R18(()=>Q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),KK1=R18(()=>Q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function pk6($=V18){return{name:VF,subjects:[`${f61}.>`],storage:cK.StorageType.File,max_age:ck6,max_bytes:mk6,max_msgs_per_subject:ik6,discard:cK.DiscardPolicy.Old,retention:cK.RetentionPolicy.Limits,duplicate_window:dk6,num_replicas:$}}class k18{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 M18($){let Z=I18.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function rk6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,lk6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function sk6($,Z){return $.info?.cluster?Z:1}function ak6($){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 HK1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Y,X)=>{let J=pk6(X);try{await Y.streams.info(VF),await Y.streams.update(VF,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(VF,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(VF),await Y.streams.add(J);else throw G}},Q=await A8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await cK.jetstreamManager($),X=sk6($,V18);try{await Z(Y,X)}catch(J){if(X<=1||!ak6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Wc});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=rk6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=pR$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=x61(H,{runId:Z}),N=performance.now()-F;WK1().record(N),KK1().add(1,{"org.id":Y??"unknown"}),ok6?.record(N,U.reduce((B,D)=>B+D.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?M18(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:D}=await H.read();if(B)break;if(K(D),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),tk6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await A8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:M18(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Wc}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=x61(Z,{runId:$,dedup:Q});WK1().record(performance.now()-X),KK1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=iR$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?cK.DeliverPolicy.New:cK.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=ww($),W;try{W=await A8(async()=>{return(await Y.consumers.get(VF,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Wc})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=iA0({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(lA0()).pipeThrough(cA0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,D=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",D,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){D(),L.close();return}let E=j;if(E.kind==="done"){if(J){D(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){D()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(VF,{filter:ww($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var cK,I18,uk6=($)=>{let Z;return()=>Z??=$()},lk6,ck6=86400000000000,dk6=120000000000,mk6=4294967296,V18,ik6=500000,nk6,tk6,ok6;var S18=O(()=>{m$();y61();pA0();dA0();W6();q18();cK=V(FU(),1),I18=V(Rm(),1),lk6=uk6(()=>Q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),V18=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);nk6=process.env.STREAM_ENCODE_TRACE==="1",tk6=process.env.DECOPILOT_STREAM_TRACE==="1";ok6=nk6?new k18:null});function mI0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,WH(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var C18=O(()=>{q8()});class FK1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}function ek6($,Z){let Q=$.startsWith("thread:")?DK($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function _18($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await DF($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await Ll($,{threadId:X,runBranch:G?.branch}),K=ek6(W,await Bz0($,X)),H=await vs($,Q,Ne0(J)).catch(()=>null);if(!H){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}for(let F of K){let U=await H.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:H.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await D3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var v18=O(()=>{OZ();CG();sZ()});async function f18($,Z,Q){let Y=Z.organizationId;if(!aX(Z))return!1;if(!ff(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=ZF(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await A6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),p$(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var b18=O(()=>{G4();ZY();ml();PK();$9()});function GS6($){return $ instanceof hY}function WS6($,Z){return Z-$>=XS6}class UK1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??$S6;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??QS6,Q=this.options.itemIntervalMs??ZS6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}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()-S81),d41);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-JS6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await u41(this.taskBoard,X,Y),await l41(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==L$.progress||G.assigneeId!==r$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await AK(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),GS6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+YS6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==L$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),p$(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!WS6(TN(Q,Z.reviewCycleStartedAt),Date.now()))return;await qF($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!aX(Y))return!1;let X=Y.assigneeId===r$,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await _18(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await nl(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await f18(G,Y,W))return!0;if(await dq$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!x41(W))return!1;return await il(G,Y,{previewMatchesHead:y41(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await Bw($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var $S6=60000,ZS6=300000,QS6=50,YS6=60000,XS6=900000,JS6=120000;var x18=O(()=>{G4();XA0();v18();MF();he();PK();b18();$9();qG();m41();sZ();Ne();pl()});import{readdir as KS6,rm as iI0}from"fs/promises";import{join as pI0}from"path";async function nI0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-HS6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Zx($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await y18($,X,Z);else if(!X.startsWith(".")){let J=pI0($,X),G=await Zx(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await y18(J,K,Z)}if((await Zx(J)).length===0)await iI0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function y18($,Z,Q){let Y=0,X=pI0($,Z),J=await Zx(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=pI0(X,W),H=await Zx(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=pI0(K,U);await iI0(B,{recursive:!0,force:!0}),Y++}}if((await Zx(K)).length===0)await iI0(K,{recursive:!0,force:!0})}if((await Zx(X)).length===0)await iI0(X,{recursive:!0,force:!0});return Y}async function Zx($){try{return(await KS6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var HS6=30;var NK1=()=>{};import{DBOS as BK1,SchedulerMode as FS6}from"@dbos-inc/dbos-sdk";async function NS6(){let $=[eG(),Qx(),YU()],Z=0;for(let Q of $)try{Z+=await nI0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function BS6($,Z){await BK1.runStep(()=>NS6(),{name:"monitoringRetention"})}function h18(){if(g18)return;g18=!0;let $=BK1.registerWorkflow(BS6,{name:"monitoringRetentionWorkflow"});BK1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:US6,mode:FS6.ExactlyOncePerIntervalWhenActive})}var US6="23 4 * * *",g18=!1;var u18=O(()=>{S3();NK1()});function l18($){return async(Z,Q)=>{let Y=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await JQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await WP($.db,Z,Y.role);return X.boundAuth=aJ1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new FE(Q,void 0,X.boundAuth,Y.role,"self"),Nw(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var c18=O(()=>{PW();sH()});function DS6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function OS6(){return{services:DS6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function wS6(){for(let $ of LS6)$()}function d18($){let Z=[...DK1.logs,$];DK1={...DK1,logs:Z.length>500?Z.slice(-500):Z},wS6()}function OK1(){return jS6}var DK1,LS6,jS6=!1;var LK1=O(()=>{DK1=OS6(),LS6=new Set});import{EventEmitter as ES6}from"events";var wK1;var m18=O(()=>{LK1();wK1=new ES6;wK1.on("request",($)=>{d18($)})});function i18(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=$m(N.params.name),D=N.params.arguments||{},L=Object.keys(D).map((j)=>$m(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${q5.tool}${B}${q5.dim}(${w})${q5.reset}`}else if(N.method)J=`${q5.dim}${$m(N.method)}${q5.reset}`}}catch{}}let W=$m(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${q5.mcp}${$m(F.slice(0,12))}\u2026${q5.reset}`}else if(X==="/mcp")W=`${q5.mcp}/mcp${q5.reset}`;else if(X==="/mcp/registry")W=`${q5.mcp}/mcp/registry${q5.reset}`;let K=PS6(Y),H=G?"\u25C0":"\u2190";if(!OK1())console.log(`${q5.dim}${H}${q5.reset} ${K}${Y}${q5.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=zS6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";if(!OK1())console.log(`${q5.dim}${D}${q5.reset} ${K}${Y}${q5.reset} ${W}${J?` ${J}`:""} ${N}${U}${q5.reset} ${q5.duration}${B}${q5.reset}`);wK1.emit("request",{method:Y,path:$m(X),status:U,duration:F,timestamp:new Date})}}}var q5,zS6=($)=>{if($>=500)return q5.serverError;if($>=400)return q5.clientError;if($>=300)return q5.redirect;return q5.ok},PS6=($)=>{return q5[$]||q5.reset},$m=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var p18=O(()=>{LK1();m18();q5={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 r18}from"crypto";import{mkdir as AS6,readdir as TS6,rm as n18,stat as s18}from"fs/promises";import{join as EK1,relative as RS6}from"path";import{z as V$}from"zod";function e18($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return EK1(qS6,Z)}function $$8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function jK1($,Z){let Q=e18($),Y=$$8(Z);return EK1(Q,Y)}function MS6($,Z,Q,Y){let X=L0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return r18("sha256",X).update(J).digest("hex")}function o18($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=MS6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${$$8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function Z$8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${r18("md5","etag").update(Y).digest("hex")}"`}async function Q$8($,Z,Q,Y,X){try{let J=await TS6($,{withFileTypes:!0});for(let G of J){let W=EK1($,G.name),H=RS6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await Q$8(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await s18(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Z$8(W,F.mtime,F.size)})}catch{}}}}catch{}}function Y$8($,Z){let Y=p($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:V$.object({prefix:V$.string().optional(),maxKeys:V$.number().optional().default(1000),continuationToken:V$.string().optional(),delimiter:V$.string().optional()}),outputSchema:V$.object({objects:V$.array(V$.object({key:V$.string(),size:V$.number(),lastModified:V$.string(),etag:V$.string()})),nextContinuationToken:V$.string().optional(),isTruncated:V$.boolean(),commonPrefixes:V$.array(V$.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=e18(Y);await AS6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await Q$8(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),D=N+W<U.objects.length,L=D?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:D,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:V$.object({key:V$.string()}),outputSchema:V$.object({contentType:V$.string().optional(),contentLength:V$.number(),lastModified:V$.string(),etag:V$.string(),metadata:V$.record(V$.string(),V$.string()).optional()}),handler:async(X)=>{let J=X,G=jK1(Y,J.key),W=await s18(G);return{contentType:o31(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Z$8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:V$.object({key:V$.string(),expiresIn:V$.number().optional()}),outputSchema:V$.object({url:V$.string(),expiresIn:V$.number()}),handler:async(X)=>{let J=X,G=J.expiresIn??t18;return{url:o18(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:V$.object({key:V$.string(),expiresIn:V$.number().optional(),contentType:V$.string().optional()}),outputSchema:V$.object({url:V$.string(),expiresIn:V$.number()}),handler:async(X)=>{let J=X,G=J.expiresIn??t18;return{url:o18(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:V$.object({key:V$.string()}),outputSchema:V$.object({success:V$.boolean(),key:V$.string()}),handler:async(X)=>{let J=X,G=jK1(Y,J.key);try{return await n18(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:V$.object({keys:V$.array(V$.string()).max(1000)}),outputSchema:V$.object({deleted:V$.array(V$.string()),errors:V$.array(V$.object({key:V$.string(),message:V$.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=jK1(Y,K);try{await n18(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function zK1($,Z,Q){let Y=Y$8(Z,Q),X=new CH({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:f5});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:V$.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:V$.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let J=new rY({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),cG(X,J,$,"mcp:dev-assets")}async function X$8($,Z,Q,Y){let J=Y$8(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var qS6="./data/assets",t18=3600,a18,J$8;var G$8=O(()=>{t1();Bc();y$();Vt();ef();hQ();hM0();a18=new e0;a18.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return zK1($.req.raw,Z,Y)});J$8=a18});var W$8={};M4(W$8,{mountDevRoutes:()=>IS6});function IS6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return zK1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await X$8(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",J$8);let Q=new e0;Q.use("*",uK({mountPath:"/api/dev-assets"})),Q.route("/",gM0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var K$8=O(()=>{y$();c31();hM0();G$8()});import{sql as VS6}from"kysely";import{randomUUID as H$8}from"crypto";import{z as kS6}from"zod";async function CS6($){let Z=new Date().toISOString(),Q=H$8(),Y=R8.SELF($.organizationId),X="registry.publish_request.created",J={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:Q,organization_id:$.organizationId,type:"registry.publish_request.created",source:Y,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(J),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let G=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","=",Y)])).execute();if(G.length>0)await $.db.insertInto("event_deliveries").values(G.map((W)=>({id:H$8(),event_id:Q,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await VS6`SELECT
|
|
3425
3425
|
pg_notify('studio_events', ${Q}),
|