decocms 4.374.1 → 4.375.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-CvB24fpQ.js → AlertCircle-CqW1GFxy.js} +1 -1
- package/dist/client/assets/{AreaChart-CC-VldiG.js → AreaChart-DYNRbtHa.js} +1 -1
- package/dist/client/assets/{ArrowLeft-CuPXwhY9.js → ArrowLeft-BGvcqKye.js} +1 -1
- package/dist/client/assets/{ArrowRight-DaeNVQjU.js → ArrowRight-CfSh04kd.js} +1 -1
- package/dist/client/assets/{ArrowUp-CMB2_B55.js → ArrowUp-DIK810PT.js} +1 -1
- package/dist/client/assets/{CartesianChart-fcGDW8tl.js → CartesianChart-CsHrela1.js} +1 -1
- package/dist/client/assets/{CheckCircle-L9rxLy8_.js → CheckCircle-eFuhjKFT.js} +1 -1
- package/dist/client/assets/{ChevronUp-Dy-cXbOz.js → ChevronUp-QcSQ5rVq.js} +1 -1
- package/dist/client/assets/{Copy01-KomJ49aq.js → Copy01-BsZDIS3z.js} +1 -1
- package/dist/client/assets/{CreditCard01-DNXTqT2E.js → CreditCard01-yw_JaYDH.js} +1 -1
- package/dist/client/assets/{DotsVertical-CycZdUV6.js → DotsVertical-DCTIN1zx.js} +1 -1
- package/dist/client/assets/{Download01-CK_3UsO1.js → Download01-B4Q5hpED.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-C_8xGdFw.js → ErrorBarContext-CTDVFTli.js} +1 -1
- package/dist/client/assets/{Eye-KAte8whD.js → Eye-C46dzrHd.js} +1 -1
- package/dist/client/assets/{Globe01-BmMm30Hp.js → Globe01-DlhUCcjG.js} +1 -1
- package/dist/client/assets/{Globe04-D2pxwWDa.js → Globe04-ClHubtty.js} +1 -1
- package/dist/client/assets/{Image01-BHoZzJSj.js → Image01-DVR_EyJG.js} +1 -1
- package/dist/client/assets/{Key01-BiLmhCHZ.js → Key01-muV6twoN.js} +1 -1
- package/dist/client/assets/{LayoutLeft-Dk8cMo-H.js → LayoutLeft-xdqdW3pr.js} +1 -1
- package/dist/client/assets/{Line-QF9kobp-.js → Line-hpj-dLud.js} +1 -1
- package/dist/client/assets/{Link01-BSX_7wIu.js → Link01-BbJKwlY6.js} +1 -1
- package/dist/client/assets/{LinkExternal01-COMF34Up.js → LinkExternal01-FZW_JKrN.js} +1 -1
- package/dist/client/assets/{Monitor01-C25vfwGa.js → Monitor01-CN-5WdRa.js} +1 -1
- package/dist/client/assets/{Package-BCflABQ6.js → Package-CkvAk6JQ.js} +1 -1
- package/dist/client/assets/{Palette-By8W7B7e.js → Palette-D8vRagJV.js} +1 -1
- package/dist/client/assets/{Play-C6orNG1z.js → Play-P0YcNy8v.js} +1 -1
- package/dist/client/assets/{Plus-BuCQnPNG.js → Plus-DcpbfgdJ.js} +1 -1
- package/dist/client/assets/{SearchLg-VMEsA-e7.js → SearchLg-7L27EznQ.js} +1 -1
- package/dist/client/assets/{SearchMd-DnahVlUn.js → SearchMd-XFzJrarE.js} +1 -1
- package/dist/client/assets/{Sector-CzI1MlO5.js → Sector-CLGxXMU7.js} +1 -1
- package/dist/client/assets/{Settings02-BZd-qcWS.js → Settings02-CncEwCCz.js} +1 -1
- package/dist/client/assets/{Share07-tpVfUX9-.js → Share07-CxrO44KP.js} +1 -1
- package/dist/client/assets/{Stars01-BcbLgM7d.js → Stars01-DyW-G6OS.js} +1 -1
- package/dist/client/assets/{Sun-C6ausIaw.js → Sun-xECmqRY7.js} +1 -1
- package/dist/client/assets/{Tool01-BlcXvpRH.js → Tool01-dwGgKodr.js} +1 -1
- package/dist/client/assets/{Tool02-BcSzj1eN.js → Tool02-CbeJXNE6.js} +1 -1
- package/dist/client/assets/{Trash01-Bt7knSgw.js → Trash01-Cs1900Vx.js} +1 -1
- package/dist/client/assets/{TrendUp01-kAJZHj1O.js → TrendUp01-BfIYShuZ.js} +1 -1
- package/dist/client/assets/{Upload01-CgS71RUS.js → Upload01-odxUyqlC.js} +1 -1
- package/dist/client/assets/{User01-DKY_ILGI.js → User01-C-kfOI2V.js} +1 -1
- package/dist/client/assets/{UserSquare-DU12tvTU.js → UserSquare-CBd8Lm1t.js} +1 -1
- package/dist/client/assets/{Users01-COWDl5zV.js → Users01-DW5XXBNa.js} +1 -1
- package/dist/client/assets/{X-DcceC-EQ.js → X-DgI4yqfX.js} +1 -1
- package/dist/client/assets/{XCircle-BirmII4v.js → XCircle-ChzUwnd9.js} +1 -1
- package/dist/client/assets/{XClose-CZo1KF0t.js → XClose-Cu0FBQhr.js} +1 -1
- package/dist/client/assets/{Zap-CIXkomUE.js → Zap-BkWm3G14.js} +1 -1
- package/dist/client/assets/{ZoomOut-CvMfmw42.js → ZoomOut-BYNmIOoy.js} +1 -1
- package/dist/client/assets/{access-gate-BkpH0rYV.js → access-gate-DrhvBokN.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-DDFaH4NS.js → add-connection-dialog-BNKRqesq.js} +1 -1
- package/dist/client/assets/{agent-analytics-DI585OA2.js → agent-analytics-DhJQZGBL.js} +1 -1
- package/dist/client/assets/agent-app-CwhHpeQZ.js +1 -0
- package/dist/client/assets/agent-assets-BG71p0Uk.js +1 -0
- package/dist/client/assets/{agent-automation-CoXN7oT_.js → agent-automation-CDChcSyV.js} +1 -1
- package/dist/client/assets/{agent-automations-Dh2ldvlj.js → agent-automations-Ds_gyptW.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-p5uTnj09.js → agent-connect-sources-BQVAyJ4p.js} +1 -1
- package/dist/client/assets/agent-deck-w5dW0RRF.js +1 -0
- package/dist/client/assets/{agent-e2e-CgjMtxKa.js → agent-e2e-Waa8S4qH.js} +1 -1
- package/dist/client/assets/{agent-experiments-Z90gGdDa.js → agent-experiments-DocmKFCq.js} +1 -1
- package/dist/client/assets/agent-file-BNrxE2XH.js +1 -0
- package/dist/client/assets/{agent-git-8ujBeOTw.js → agent-git-CcB_AU8a.js} +2 -2
- package/dist/client/assets/{agent-hosting-Bzvqx7RN.js → agent-hosting-DqC3jsqS.js} +1 -1
- package/dist/client/assets/{agent-icon-Bbnm30MH.js → agent-icon-DZmc5CaF.js} +1 -1
- package/dist/client/assets/agent-library-file-CcAfTvZD.js +1 -0
- package/dist/client/assets/{agent-monitor-pcRQgKqs.js → agent-monitor-j0thXn_z.js} +1 -1
- package/dist/client/assets/{agent-overview-wBMo3ArI.js → agent-overview-Se96_nVw.js} +1 -1
- package/dist/client/assets/agent-settings-BUJ9WCtJ.js +1 -0
- package/dist/client/assets/{agent-site-editor-B_7293-6.js → agent-site-editor-BUv5taoc.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-UGzk7VE6.js +2 -0
- package/dist/client/assets/agent-site-editor-content-BT2waE8I.js +2 -0
- package/dist/client/assets/{agent-site-editor-preview-BoUgjuFc.js → agent-site-editor-preview-BYZPX7tr.js} +3 -3
- package/dist/client/assets/agent-view-CljCxEEY.js +1 -0
- package/dist/client/assets/{agent-view-guard-CE-w87FC.js → agent-view-guard-B-yMTUz4.js} +1 -1
- package/dist/client/assets/{agents-list-DYu2megT.js → agents-list--UPC2z-V.js} +1 -1
- package/dist/client/assets/{ai-providers-C4xd0vpP.js → ai-providers-DoD-WkyR.js} +2 -2
- package/dist/client/assets/{alert-JJIsthFC.js → alert-BiRypa2I.js} +1 -1
- package/dist/client/assets/{alert-dialog-DQ7VA4it.js → alert-dialog-BYQAyeOC.js} +1 -1
- package/dist/client/assets/{api-keys-Da7XeDcP.js → api-keys-CFH8WzHp.js} +1 -1
- package/dist/client/assets/api-keys-Vr2mIxG4.js +1 -0
- package/dist/client/assets/app-editor-D_IiCvgl.js +1 -0
- package/dist/client/assets/{asset-utils-Ckrgql68.js → asset-utils-Db2ZBQHY.js} +1 -1
- package/dist/client/assets/{auth-BAIe_T8g.js → auth-BCpLT4L2.js} +1 -1
- package/dist/client/assets/{auth-catchall-C3HcGo7O.js → auth-catchall-CSzayJNY.js} +1 -1
- package/dist/client/assets/{auth-entry-CXeBQuWy.js → auth-entry-Bf9MzjUn.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BLHoHl9d.js → auth-split-layout-B1xn3sDE.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-B_2a5Vfr.js → authenticate-and-persist-oauth-DVNhuSYI.js} +1 -1
- package/dist/client/assets/{automation-list-row-zcGZ57kC.js → automation-list-row-CfW-tzTh.js} +1 -1
- package/dist/client/assets/{automation-runs-CO5cfbAL.js → automation-runs-CI1zLVwE.js} +1 -1
- package/dist/client/assets/automations-DRLDJWNL.js +1 -0
- package/dist/client/assets/{autosend-DrbiZ7KD.js → autosend-U0G_KEv2.js} +1 -1
- package/dist/client/assets/{avatar-DAAVe66-.js → avatar-DxbODU4C.js} +1 -1
- package/dist/client/assets/{badge-Cxdo9MSD.js → badge-D6ygNqO6.js} +1 -1
- package/dist/client/assets/{block-document-BmtOSR_U.js → block-document-BezbnyKl.js} +3 -3
- package/dist/client/assets/{blocks-preview-workspace-context-B9WGUHQW.js → blocks-preview-workspace-context-CTo5jpQ8.js} +1 -1
- package/dist/client/assets/{breadcrumb-Cl92-rSB.js → breadcrumb-DWcfFz9-.js} +1 -1
- package/dist/client/assets/{buckets-IfbnGi1h.js → buckets-CYMWAXId.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-BjB8yBFt.js → build-improve-prompt-doc-C7lr6nl8.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BCXzorgr.js → bulk-category-panel-Bj1SJBXK.js} +1 -1
- package/dist/client/assets/{calendar-D29VArmq.js → calendar-PQ1Ftg13.js} +1 -1
- package/dist/client/assets/{capability-load-error-BML32Rgk.js → capability-load-error-CvIv1gsN.js} +1 -1
- package/dist/client/assets/category-editor-DliRWtls.js +1 -0
- package/dist/client/assets/{chart-DPH16IOZ.js → chart-Dr36_7b5.js} +1 -1
- package/dist/client/assets/{chat-context-BSf3NsZt.js → chat-context-BkliO4re.js} +5 -5
- package/dist/client/assets/{chat-draft-CYnWSaLo.js → chat-draft-CiN5fXJU.js} +1 -1
- package/dist/client/assets/{checkbox-Dabg6CvC.js → checkbox-Cklt31AJ.js} +1 -1
- package/dist/client/assets/{choose-editor-Cp-nak_V.js → choose-editor-DGrCIRT5.js} +1 -1
- package/dist/client/assets/{cli-auth-success-Cn8-SffB.js → cli-auth-success-BHmPrydv.js} +1 -1
- package/dist/client/assets/{client-icons-I35gtKUf.js → client-icons-CS1fp_mb.js} +1 -1
- package/dist/client/assets/{collapsible-Cc5z9cdY.js → collapsible-DnZ_wlS4.js} +1 -1
- package/dist/client/assets/{collection-detail-DjBn5zYW.js → collection-detail-DwkABCiq.js} +1 -1
- package/dist/client/assets/{collection-display-button-BMj7QQEq.js → collection-display-button-CODidBR9.js} +1 -1
- package/dist/client/assets/{collection-search-ACimtR3t.js → collection-search-2f8pAB4Y.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-D6uxp16B.js → collection-table-wrapper-D2XJ_BvC.js} +1 -1
- package/dist/client/assets/{collection-tabs-wZHzLlos.js → collection-tabs-CYx5-BiK.js} +1 -1
- package/dist/client/assets/{combobox-CFiHpYi-.js → combobox-BxJAO8U7.js} +1 -1
- package/dist/client/assets/{command-uelHA4Qc.js → command-s8BJjz1Z.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-CElJkf6T.js → companion-mcps-section-idD3Wjuq.js} +1 -1
- package/dist/client/assets/{connect-C1wR3kQS.js → connect-YaAoKXfV.js} +2 -2
- package/dist/client/assets/{connect-layout-CEjyLlsQ.js → connect-layout-B5NqOhZR.js} +1 -1
- package/dist/client/assets/{connection-card-z-DTL8a8.js → connection-card-CyoPC3yi.js} +1 -1
- package/dist/client/assets/{connection-detail-DTW_zDz8.js → connection-detail-DUSw9X3H.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-w89tRjJb.js → connection-form-helpers-BKito2Bz.js} +1 -1
- package/dist/client/assets/{connection-CCOtyiTz.js → connection-ju8s9npF.js} +1 -1
- package/dist/client/assets/{connections-BCg7O22V.js → connections-B9YPH6e_.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-DgZgs9aG.js → create-organization-dialog-Bd1vOpVb.js} +1 -1
- package/dist/client/assets/{decofile-api-BCvZWky6.js → decofile-api-tER_PaB4.js} +1 -1
- package/dist/client/assets/{decopilot-JzsJWa1H.js → decopilot-f7DFX3Qm.js} +2 -2
- package/dist/client/assets/{dialog-BVRmgEZZ.js → dialog-CfR9zhfQ.js} +1 -1
- package/dist/client/assets/{discover-CPUegLX9.js → discover-BuXt2vx3.js} +1 -1
- package/dist/client/assets/{domain-settings-BL6MiMeP.js → domain-settings-CqFWBtGR.js} +1 -1
- package/dist/client/assets/{download-app-dialog-BSQlf9Pn.js → download-app-dialog-BP-_J1f-.js} +1 -1
- package/dist/client/assets/{drawer-BwM5wPz_.js → drawer-BiF0PtML.js} +1 -1
- package/dist/client/assets/{editor-B9nqdqUb.js → editor-DUpmzLo7.js} +1 -1
- package/dist/client/assets/{empty-state-CUy_IWGW.js → empty-state-9hlMmNlC.js} +1 -1
- package/dist/client/assets/{empty-state-CyI2CaLY.js → empty-state-D6UqEEY-.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BYtH8M2u.js → extract-connection-data-DgcpMlth.js} +1 -1
- package/dist/client/assets/{feature-gate-Cf4hZv0B.js → feature-gate-D5GuzQQe.js} +1 -1
- package/dist/client/assets/{feature-paywall-BSg5h6Wb.js → feature-paywall-BikFTLog.js} +1 -1
- package/dist/client/assets/{file-explorer-BaQZtdi0.js → file-explorer-CQocIpVZ.js} +1 -1
- package/dist/client/assets/{file-preview-C3-dWXmK.js → file-preview-DNlbJHv7.js} +1 -1
- package/dist/client/assets/{file-share-button-BuCRyD4f.js → file-share-button-CO47V7vg.js} +1 -1
- package/dist/client/assets/{file-type-icon-Dg8sADAf.js → file-type-icon-Dv-tVjqp.js} +1 -1
- package/dist/client/assets/{folder-icon-DA4ZaB45.js → folder-icon-186o_xBL.js} +1 -1
- package/dist/client/assets/{form-DwCt2SR2.js → form-DHJlhF9m.js} +1 -1
- package/dist/client/assets/{gateway-client-D0oBW_qu.js → gateway-client-4Nr9Lszn.js} +1 -1
- package/dist/client/assets/{general-B9q-xe3O.js → general-BCtaDRKE.js} +1 -1
- package/dist/client/assets/{github-icon-C0b5ErP6.js → github-icon-B7rNxQCT.js} +1 -1
- package/dist/client/assets/{home-Dd28TK1r.js → home-Dskdg6sU.js} +1 -1
- package/dist/client/assets/{hooks-D0h9yhqP.js → hooks-BB3WxPkJ.js} +2 -2
- package/dist/client/assets/{hooks-DZN1ZKP-.js → hooks-Vq5fn_Sg.js} +1 -1
- package/dist/client/assets/{icon-button-DU-Ln0Ge.js → icon-button-C0MdJ7W1.js} +1 -1
- package/dist/client/assets/{index-BfTKB7dV.js → index-BCtojorK.js} +1 -1
- package/dist/client/assets/{index-CB_d_Ww9.js → index-BDzkh4SF.js} +1 -1
- package/dist/client/assets/{index-BK4gf4on.js → index-BNnRrN_z.js} +1 -1
- package/dist/client/assets/{index--5vhPfMl.js → index-BNtnQdj2.js} +1 -1
- package/dist/client/assets/{index-B4Sw3hof.js → index-BxPwUex4.js} +1 -1
- package/dist/client/assets/index-C-9eP1YM.js +1 -0
- package/dist/client/assets/{index-BNah-P_g.css → index-CCCwF5vG.css} +1 -1
- package/dist/client/assets/{index-CjolVbvM.js → index-CMgSStc4.js} +1 -1
- package/dist/client/assets/{index-0kHkZucW.js → index-Ci8I2ZAh.js} +1 -1
- package/dist/client/assets/{index-ChGB7Srd.js → index-CnX1wVk0.js} +1 -1
- package/dist/client/assets/{index-B4_5ne-m.js → index-DQZBt6Fl.js} +54 -54
- package/dist/client/assets/{index-IS0010-i.js → index-Dxn1KDpE.js} +1 -1
- package/dist/client/assets/{index-AOu8Y3dB.js → index-X9VHKMKa.js} +1 -1
- package/dist/client/assets/{index-BfbICK5t.js → index-aeXfMtPI.js} +1 -1
- package/dist/client/assets/{index-redirect-BeZh12s-.js → index-redirect-2ysrmYvb.js} +1 -1
- package/dist/client/assets/{index-D_t5RQk4.js → index-waKafOzk.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-CzIaF1BV.js → infiniteQueryObserver-DGwzP6OU.js} +1 -1
- package/dist/client/assets/{infra-billing-DMsr0Q0z.js → infra-billing-8H9IQAku.js} +1 -1
- package/dist/client/assets/{input-DmFaWWaQ.js → input-Clcfr53P.js} +1 -1
- package/dist/client/assets/{input-D7rTqiZA.js → input-Tjg4Yj6g.js} +2 -2
- package/dist/client/assets/{input-DhQYTu0H.js → input-rh1Mv0Wr.js} +1 -1
- package/dist/client/assets/{integration-icon-CT7gtNMF.js → integration-icon-Dz7H1-MQ.js} +1 -1
- package/dist/client/assets/{label-C5dVgFkO.js → label-BNGvxM6S.js} +1 -1
- package/dist/client/assets/{last-preview-page-BbdRTqMd.js → last-preview-page-AQeXjWi9.js} +1 -1
- package/dist/client/assets/{layout-CXaobmoR.js → layout-X2JiO2W9.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-B2dKvF3G.js → legacy-agents-deep-vurFyg9D.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-psdr3_pB.js → legacy-main-redirect-Bbkf2fqL.js} +1 -1
- package/dist/client/assets/library-BGrUeG8I.js +161 -0
- package/dist/client/assets/{login-D0perYnq.js → login-Ks2wHpj_.js} +1 -1
- package/dist/client/assets/{markdown-CdMnKnHM.js → markdown-j472BGQe.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-kud7EQ1E.js → mcp-app-renderer-CSEPd7DC.js} +2 -2
- package/dist/client/assets/{mcp-oauth-Bqx9uZfn.js → mcp-oauth-8WwU56fl.js} +1 -1
- package/dist/client/assets/{members-BWNEw7IY.js → members-DXX-_l1x.js} +1 -1
- package/dist/client/assets/{message-templates-CwYx_hD_.js → message-templates-BszS8o8W.js} +1 -1
- package/dist/client/assets/{mini-report-page-i9lqZoyF.js → mini-report-page-IeosqtjA.js} +1 -1
- package/dist/client/assets/{mock-board-DDxAYcbL.js → mock-board-DrA4dW9Q.js} +7 -7
- package/dist/client/assets/{monaco-editor-BM2SBH_J.js → monaco-editor-B4FcjfHJ.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-BAfuoPc4.js → monitoring-stats-row-ClsmEIaD.js} +1 -1
- package/dist/client/assets/{multi-select-Cma9DT-0.js → multi-select-DjG7jWJv.js} +1 -1
- package/dist/client/assets/{mustache-DCrtQrVG.js → mustache-B7tW8rKl.js} +1 -1
- package/dist/client/assets/{oauth-callback-Bjj2LnDu.js → oauth-callback-CuG-N4Ag.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-iJcxShkv.js → oauth-callback-ai-provider-BQiU_dV5.js} +1 -1
- package/dist/client/assets/{onboarding-DdPHiaTb.js → onboarding-oOptdWYC.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-DbUoja1k.js → optimistic-project-sidebar-views-0eAIAyQZ.js} +1 -1
- package/dist/client/assets/org-file-open-context-CV0BvKfM.js +1 -0
- package/dist/client/assets/{organization-choice-DSZdyMNl.js → organization-choice-DzIjaq6z.js} +1 -1
- package/dist/client/assets/{orgs-EQ3dRKq1.js → orgs-Uh-4y791.js} +1 -1
- package/dist/client/assets/{page-seo-form-BgfALyeP.js → page-seo-form-0XF8k2QH.js} +1 -1
- package/dist/client/assets/{pair-mgqlVrg4.js → pair-oDAsulNf.js} +7 -7
- package/dist/client/assets/{plan-ladder-DFDsraie.js → plan-ladder-DWqjM2H6.js} +1 -1
- package/dist/client/assets/{popover-BREpugAm.js → popover-hNLbYWT0.js} +1 -1
- package/dist/client/assets/{post-calendar-CnbsL0eo.js → post-calendar-DzuJkfRI.js} +1 -1
- package/dist/client/assets/{post-editor-9KdgWdvu.js → post-editor-C1Tx2rOv.js} +1 -1
- package/dist/client/assets/{preview-content-BZq0WigR.js → preview-content-DMGh32pv.js} +1 -1
- package/dist/client/assets/{preview-dialog-h7LoP6ZX.js → preview-dialog-BGQQrh8x.js} +1 -1
- package/dist/client/assets/{primitives-zMFwX0Jx.js → primitives-BFH7BLqO.js} +1 -1
- package/dist/client/assets/{profile-CstkdBJB.js → profile-Buekam-F.js} +1 -1
- package/dist/client/assets/{project-app-view-BUXGEIxz.js → project-app-view-vdLc6iv3.js} +1 -1
- package/dist/client/assets/{project-feed-B2rjMsm6.js → project-feed-DoakvNjk.js} +1 -1
- package/dist/client/assets/{project-icon-BuXyfXr6.js → project-icon-DCwjX34f.js} +1 -1
- package/dist/client/assets/project-reports-ClF5O16Z.js +1 -0
- package/dist/client/assets/project-tasks-6eulHBR4.js +1 -0
- package/dist/client/assets/{prompts-C8Tw6ift.js → prompts-CPY17-ZY.js} +1 -1
- package/dist/client/assets/record-editor-CRgsUtua.js +1 -0
- package/dist/client/assets/{redirect-editor-fDaBjJbA.js → redirect-editor-eNlr_Mfk.js} +1 -1
- package/dist/client/assets/registry-AgS1bUyh.js +2 -0
- package/dist/client/assets/{registry-layout-CBmayW3a.js → registry-layout-DryRe-Z-.js} +1 -1
- package/dist/client/assets/reports-C6IYfeap.js +1 -0
- package/dist/client/assets/{reports-D3ZxTpvh.js → reports-D1FePU5c.js} +1 -1
- package/dist/client/assets/{reports-onboarding-C-jYNNpv.js → reports-onboarding-_i1HBu7w.js} +1 -1
- package/dist/client/assets/{reports-tab-ClSQGtJf.js → reports-tab-Dl6Dk6u1.js} +2 -2
- package/dist/client/assets/{repositories-VKk9R6NV.js → repositories-CIXZv6vt.js} +1 -1
- package/dist/client/assets/{repository-import-picker-Bxit3rwH.js → repository-import-picker-Cm_I6qX6.js} +1 -1
- package/dist/client/assets/{repository-picker-Dtn2F8yh.js → repository-picker-BE31MYd2.js} +1 -1
- package/dist/client/assets/{require-capability-DNPqpx0A.js → require-capability-DpBsO_NN.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DbcZh8KB.js → required-auth-layout-CLogPoNu.js} +1 -1
- package/dist/client/assets/{reset-password-H5cLuWq1.js → reset-password-BtrZlUmp.js} +1 -1
- package/dist/client/assets/{resizable-Dw8LR1j8.js → resizable-DW-7DjHg.js} +1 -1
- package/dist/client/assets/{review-settings-CQBykdsR.js → review-settings-CvxnEwkr.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-XbfHUQMq.js → rich-text-link-control-C4o-c0sL.js} +1 -1
- package/dist/client/assets/{roles-CoipftcE.js → roles-DfAkE-T7.js} +1 -1
- package/dist/client/assets/route-BUOzO2CZ.js +1 -0
- package/dist/client/assets/{route-COHKdv7H.js → route-DkpbXtY4.js} +1 -1
- package/dist/client/assets/route-page-header-ddubqYbl.js +1 -0
- package/dist/client/assets/{route-BKi-EnKl.js → route-x1w0_XOS.js} +1 -1
- package/dist/client/assets/runnable-block-editor-D7DBqRPo.js +16 -0
- package/dist/client/assets/{sandbox-lifecycle-context-HIhyPh-5.js → sandbox-lifecycle-context-H5kbI9ib.js} +1 -1
- package/dist/client/assets/{schema-iizf-P2g.js → schema-D9hq6-Ko.js} +1 -1
- package/dist/client/assets/{scroll-area-BcoH4ReJ.js → scroll-area-COAhNkSc.js} +1 -1
- package/dist/client/assets/{search-input-CmWlEMU8.js → search-input-eDRvpCEQ.js} +1 -1
- package/dist/client/assets/{search-toggle-4qgH_UjE.js → search-toggle-ukQDdkrg.js} +1 -1
- package/dist/client/assets/{secrets-Bi8Smqwe.js → secrets-DzQr3bGF.js} +1 -1
- package/dist/client/assets/sections-editor-H_6KGCpg.js +2 -0
- package/dist/client/assets/{select--0Nrx9pz.js → select-DKZw7VY5.js} +1 -1
- package/dist/client/assets/{select-model-BKF1kjR-.js → select-model-kV4UP8Pg.js} +1 -1
- package/dist/client/assets/seo-editor-B16rwVRf.js +1 -0
- package/dist/client/assets/{separator-CMAG9KMM.js → separator-BVE7Budu.js} +1 -1
- package/dist/client/assets/{settings-tab-BrwOMHxn.js → settings-tab-BtAzz40R.js} +1 -1
- package/dist/client/assets/{sheet-KfyT4iJh.js → sheet-DuM7cckc.js} +1 -1
- package/dist/client/assets/{shell-layout-C7iq_ybu.js → shell-layout-D6lfQGd1.js} +1 -1
- package/dist/client/assets/{sidebar-Ce0KwGyJ.js → sidebar-scwXsjFh.js} +1 -1
- package/dist/client/assets/{skill-preview-DaiAGQ8W.js → skill-preview-DN9PhO9W.js} +1 -1
- package/dist/client/assets/{skills-BfYJXdvY.js → skills-7D59_aEr.js} +1 -1
- package/dist/client/assets/{sso-j34bPfk7.js → sso-DXKGvN7S.js} +1 -1
- package/dist/client/assets/{store-DjXldX1F.js → store-2S5Y_Sm_.js} +1 -1
- package/dist/client/assets/store-registry-BkpvGjQw.js +2 -0
- package/dist/client/assets/{switch-uCmnTmA3.js → switch-UqleIRW2.js} +1 -1
- package/dist/client/assets/{synced-repos-C07oiVeE.js → synced-repos-I3mzZrDI.js} +1 -1
- package/dist/client/assets/{table-Cx5xJBa9.js → table-DY3yh4UN.js} +1 -1
- package/dist/client/assets/{tabs-CMPX7aLH.js → tabs-CWunSDaT.js} +1 -1
- package/dist/client/assets/{task-board-CwfOEd0p.js → task-board-CU3xz_UX.js} +1 -1
- package/dist/client/assets/{task-route-C0NB5FI3.js → task-route-5uvHoI6U.js} +1 -1
- package/dist/client/assets/{task-status-CunX_b1I.js → task-status-CbgGINwj.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-BVZIpmtK.js → taskboard-analytics-BWpTxoly.js} +1 -1
- package/dist/client/assets/{tasks-CKy3IGSO.js → tasks-DEJodw4w.js} +2 -2
- package/dist/client/assets/tasks-cQIvs8Qh.js +1 -0
- package/dist/client/assets/{textarea-CNloF_6k.js → textarea-D07XC_67.js} +1 -1
- package/dist/client/assets/{thread-button-0wpTVhK0.js → thread-button-BQ25_n_A.js} +1 -1
- package/dist/client/assets/{thread-intent-BcdlSG8J.js → thread-intent-CPB41f6a.js} +1 -1
- package/dist/client/assets/{thread-route-D5lCt0bb.js → thread-route-CDYfrzkB.js} +1 -1
- package/dist/client/assets/{thread-route-Bq7TohAn.js → thread-route-DJwg4XWL.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-CZ7U6WOP.js → thread-sheet-body-PhMLKGpO.js} +1 -1
- package/dist/client/assets/{toggle-group-BPpZ90Kk.js → toggle-group-CRsJ0kJ-.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-Da8s1pOb.js → toolbar-icon-button-CLaEn_t2.js} +1 -1
- package/dist/client/assets/{tooltip-Ch_anXXw.js → tooltip-BdIw7qeF.js} +1 -1
- package/dist/client/assets/{track-B2ai-lhp.js → track-D7Zl0Ub2.js} +1 -1
- package/dist/client/assets/{types-DAtj8pL_.js → types-BFditkVL.js} +1 -1
- package/dist/client/assets/{usage-stats-DECzmKdw.js → usage-stats-CydE9W4n.js} +1 -1
- package/dist/client/assets/{use-ai-providers-BLQu9X4b.js → use-ai-providers-Jte2cXEd.js} +1 -1
- package/dist/client/assets/{use-automations-DGQLDHfM.js → use-automations-DMglF-Hp.js} +1 -1
- package/dist/client/assets/{use-autosave-D2GJMvju.js → use-autosave-BK4aenoc.js} +1 -1
- package/dist/client/assets/{use-connect-companion-TpX59d2A.js → use-connect-companion-CWVubK_K.js} +1 -1
- package/dist/client/assets/{use-connection-DEkZ7Z3y.js → use-connection-CLDZmFlP.js} +1 -1
- package/dist/client/assets/{use-copy-BdX2_tpS.js → use-copy-BwelGe7h.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-B22agNFs.js → use-create-virtual-mcp-C0nekJmJ.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-DdFVZp6l.js → use-date-fns-locale-9ht16XX5.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-g0CT53cz.js → use-debounced-autosave-CxvwYE3R.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CPADjlu8.js → use-debounced-value-DTrA4F64.js} +1 -1
- package/dist/client/assets/{use-deco-credits-0LI1tSh2.js → use-deco-credits-toD66YNU.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CztvGxbe.js → use-decopilot-events-Cr8-gyRq.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BrxuwVV0.js → use-delete-connection-pojdnt_G.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-BW07NJZx.js → use-deployment-admin-BtzBlxtt.js} +1 -1
- package/dist/client/assets/{use-entitlements-Cpg4O4cU.js → use-entitlements-Dd8GRYfR.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-BS4vDkY8.js → use-fast-preview-draft-url-6t7oVPGL.js} +1 -1
- package/dist/client/assets/{use-file-configs-T83FDKTN.js → use-file-configs-DEt6cPMd.js} +1 -1
- package/dist/client/assets/{use-in-settings-CCWZ9EQU.js → use-in-settings-CpoJAiS9.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CQVHxZ2X.js → use-infinite-scroll-BxfFw7w5.js} +1 -1
- package/dist/client/assets/{use-join-requests-BM1WOs-R.js → use-join-requests-CIDw0OFM.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-BGkjNCY6.js → use-main-panel-tabs-D1QVss-2.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-DPrXZk0m.js → use-mcp-auth-status-Cg-aCR2N.js} +1 -1
- package/dist/client/assets/{use-mcp-client-Di29uH1Z.js → use-mcp-client-CuZ_CH4K.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-pRQvLesG.js → use-mcp-prompts-SnT9jAGG.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BTMKYjmq.js → use-mcp-tools-DjSYGU3r.js} +1 -1
- package/dist/client/assets/{use-members-2-cC5S8b.js → use-members-DTIbBdqQ.js} +1 -1
- package/dist/client/assets/{use-mobile-Br1FbuT5.js → use-mobile-BwXePCI-.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BIB5Nkxx.js → use-navigate-to-agent-DIxyyobE.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-DwCvmaT1.js → use-open-billing-url-CnWEYZe0.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-BQN7hmW6.js → use-org-auth-client-D-YRClZm.js} +1 -1
- package/dist/client/assets/{use-org-fs-up6Ae3F-.js → use-org-fs-6rzJUZWB.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-B1-u1Sww.js → use-org-repo-syncs-BPvYovov.js} +1 -1
- package/dist/client/assets/{use-org-sso-CSb7uzWR.js → use-org-sso-EA4En7Bf.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DP4t5Npf.js → use-organization-roles-DjL7Q_JO.js} +1 -1
- package/dist/client/assets/{use-organization-settings-B7QbhgeU.js → use-organization-settings-rcECAo5J.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-7owLLl5-.js → use-panel-navigate-CCrHg3rQ.js} +1 -1
- package/dist/client/assets/{use-project-native-view-presence-C6Z-dNAC.js → use-project-native-view-presence-D_C9jbvc.js} +1 -1
- package/dist/client/assets/{use-project-scope-D7MgPnbk.js → use-project-scope-ChdEK9JU.js} +1 -1
- package/dist/client/assets/{use-registry-connections-CvrvQHoJ.js → use-registry-connections-C8ZRYmvy.js} +1 -1
- package/dist/client/assets/{use-releases-DYrm3R-D.js → use-releases-B2PktYSE.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-B0GD9uDf.js → use-reports-diagnostic-Ffc8G8Yb.js} +1 -1
- package/dist/client/assets/{use-route-default-main--vHXCkHM.js → use-route-default-main-DTBEGWiB.js} +1 -1
- package/dist/client/assets/{use-secrets-DwITZFB8.js → use-secrets-C2UFcx4t.js} +1 -1
- package/dist/client/assets/use-section-preview-base-D8AdMeK_.js +1 -0
- package/dist/client/assets/{use-session-runtime-B1xdg1Mc.js → use-session-runtime-Kk87TZ4U.js} +1 -1
- package/dist/client/assets/{use-tags-DXxTmE03.js → use-tags-BZaCfmft.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-5o37lq8z.js → use-task-board-analytics-Dbi3TI9y.js} +1 -1
- package/dist/client/assets/{use-task-metadata-xMti_d98.js → use-task-metadata-DptBPkcd.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-BwzUBEaq.js → use-thread-outputs-DE9doz4g.js} +1 -1
- package/dist/client/assets/{use-view-mode-DB3Sv4EV.js → use-view-mode-CavAJ0r0.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CdMkF3Nz.js → use-virtual-mcp-4T8Uqtz2.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-Ds6mCrD2.js +1 -0
- package/dist/client/assets/{useQueries-B3o1rvWe.js → useQueries-D3RKoZYz.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-M0UgyPh7.js +1 -0
- package/dist/client/assets/{users-DBFRWsia.js → users-WBHQMz8R.js} +1 -1
- package/dist/client/assets/{utils-gTOau_mh.js → utils-CyaFhLFV.js} +1 -1
- package/dist/client/assets/{variant-calendar-DOxG9iwM.js → variant-calendar-DAIHFkeQ.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-DPq8EH6t.js → variant-matcher-override-Dyv3s-dG.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DYECPSMs.js → view-mode-toggle-DEbfOadi.js} +1 -1
- package/dist/client/assets/{virtual-mcp-AqKeX5w8.js → virtual-mcp-DXgT3asw.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/agent-app-Dd4FMRFP.js +0 -1
- package/dist/client/assets/agent-assets-ihYul22E.js +0 -1
- package/dist/client/assets/agent-deck-BWPlKksS.js +0 -1
- package/dist/client/assets/agent-file-BKO35b36.js +0 -1
- package/dist/client/assets/agent-library-file-B3_-CXIA.js +0 -1
- package/dist/client/assets/agent-settings-BxZaeWUx.js +0 -1
- package/dist/client/assets/agent-site-editor-code-B-pWeSRV.js +0 -2
- package/dist/client/assets/agent-site-editor-content-BGJ14_Az.js +0 -2
- package/dist/client/assets/agent-view-DDrzopEk.js +0 -1
- package/dist/client/assets/api-keys-DEkuX1eT.js +0 -1
- package/dist/client/assets/app-editor-ChfXMKUs.js +0 -1
- package/dist/client/assets/automations-BQHaweWF.js +0 -1
- package/dist/client/assets/category-editor-BTonT0GY.js +0 -1
- package/dist/client/assets/index-DbfxHNth.js +0 -1
- package/dist/client/assets/library-CHpieazL.js +0 -161
- package/dist/client/assets/org-file-open-context-DNcgI0Uf.js +0 -1
- package/dist/client/assets/project-reports-BCqm5aO0.js +0 -1
- package/dist/client/assets/project-tasks-Bka5utN5.js +0 -1
- package/dist/client/assets/record-editor-BpAD-e4x.js +0 -1
- package/dist/client/assets/registry-CtLO9kjB.js +0 -2
- package/dist/client/assets/reports-D2RKwYmT.js +0 -1
- package/dist/client/assets/route-C9H7VfVw.js +0 -1
- package/dist/client/assets/route-page-header-KctxVQ_e.js +0 -1
- package/dist/client/assets/runnable-block-editor-BzVWSPHL.js +0 -16
- package/dist/client/assets/sections-editor-Bo5eUKAB.js +0 -2
- package/dist/client/assets/seo-editor-D9L3VA5c.js +0 -1
- package/dist/client/assets/store-registry-RTogK1X0.js +0 -2
- package/dist/client/assets/tasks-DF_oVYA4.js +0 -1
- package/dist/client/assets/use-section-preview-base-BFHyMpzJ.js +0 -1
- package/dist/client/assets/useInfiniteQuery-DvCOEAKG.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DMqlAGdI.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -2076,7 +2076,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var n0$=L(()=>{vg()});f
|
|
|
2076
2076
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${G}/${K}, keeping in old table`);continue}}await Ju`
|
|
2077
2077
|
DELETE FROM kysely_migration WHERE name = ${Q}
|
|
2078
2078
|
`.execute($)}}async function w5$($){await XY4($),await YY4($);let Z=new L5$({db:$,provider:{getMigrations:()=>Promise.resolve(os0)}}),{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 JY4($){let{keepOpen:Z=!1,database:Q,skipBetterAuth:X=!1}=$??{},Y="skipped";if(!X&&!Q)Y=await Bt0();let J=Q??l$(),G=async()=>{if(!Z&&!Q)await hL(J).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await w5$(J.db);return await G(),{betterAuth:Y,kysely:K}}catch(K){throw await G(),K}}async function GY4(){let $=l$(),Z=new L5$({db:$.db,provider:{getMigrations:()=>Promise.resolve(os0)}}),{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 E5$=L(()=>{D5$();Dt0();dQ()});async function CJ0($){let Z={...process.env},Q=z90($,Z);console.log(oR1(Q.settings.encryptionKey));let X=Q.settings.betterAuthSecret||(Q.settings.localMode?q$$(Q.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (_Y0(),CY0)),{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(() => (Dt0(),I$$));await W(J.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (dQ(),m1$)),{migrateToLatest:F}=await Promise.resolve().then(() => (E5$(),j5$)),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 t0$(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 rs0=L(()=>{vg();M$$();t1()});var T5$={};e(T5$,{updateService:()=>tz,subscribeCliState:()=>es0,setTuiConsoleIntercepted:()=>_J0,setServerUrl:()=>To,setMigrationsDone:()=>Ao,setDevMode:()=>WY4,resetCliStateForTests:()=>KY4,isTuiConsoleIntercepted:()=>vJ0,getCliState:()=>ss0,addLogEntry:()=>iL});function z5$(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function P5$(){return{services:z5$(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function KY4(){xY=P5$()}function Po(){for(let $ of as0)$()}function ss0(){return xY}function es0($){return as0.add($),()=>as0.delete($)}function tz($){xY={...xY,services:xY.services.map((Z)=>Z.name===$.name?$:Z)},Po()}function Ao(){xY={...xY,migrationsStatus:"done"},Po()}function To($){xY={...xY,serverUrl:$},Po()}function iL($){let Z=[...xY.logs,$];xY={...xY,logs:Z.length>500?Z.slice(-500):Z},Po()}function WY4(){xY={...xY,services:[...z5$(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},Po()}function _J0($){A5$=$}function vJ0(){return A5$}var xY,as0,A5$=!1;var oz=L(()=>{xY=P5$();as0=new Set});import{createServer as R5$}from"net";function HY4($){return new Promise((Z)=>{let Q=R5$();Q.once("error",()=>Z(!1)),Q.listen($,"0.0.0.0",()=>{Q.close(()=>Z(!0))})})}async function Ro($){if(await HY4($))return $;let Z=await new Promise((Q,X)=>{let Y=R5$();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 $e0=()=>{};var Qe0={};e(Qe0,{startDevServer:()=>UY4,pipeToLogStore:()=>Ze0});import{join as FY4}from"path";function Ze0($){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;iL({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)iL({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function UY4($){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 Ro(Number(Y)+1):await Ro(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await CJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let O of W)tz({name:O.name,status:"ready",port:O.port});Ao();let F=FY4(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)Ze0(N.stdout),Ze0(N.stderr);To(J),tz({name:"Vite",status:"ready",port:Number(Y)}),tz({name:"API",status:"ready",port:Number(K.port)});let D=async(O)=>{if(N.kill(O),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (_Y0(),CY0));await w(K.dataDir)}};return process.on("SIGINT",()=>D("SIGINT")),process.on("SIGTERM",()=>D("SIGTERM")),{port:Number(Y),process:N}}var Xe0=L(()=>{rs0();oz();$e0()});var xJ0;var Ye0=L(()=>{xJ0={name:"decocms",version:"4.374.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 BY4,Text as q5$}from"ink";import{jsx as DY4,jsxs as M5$}from"react/jsx-runtime";function I5$({version:$}){return M5$(BY4,{flexDirection:"column",marginTop:1,children:[ZJ0.map((Z,Q)=>DY4(q5$,{color:QJ0[Q],children:Z},Q)),M5$(q5$,{dimColor:!0,children:[" v",$]})]})}var V5$=L(()=>{Ko()});import{Box as rz,Text as pL}from"ink";import{Spinner as LY4}from"@inkjs/ui";import{jsx as $3,jsxs as Gu}from"react/jsx-runtime";function k5$({status:$}){if($==="pending")return $3(LY4,{label:""});return $3(pL,{color:"green",children:"\u2713"})}function OY4($){return`${$.name}: ${$.port||"...."}`}function S5$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Gu(rz,{flexDirection:"column",paddingBottom:1,children:[$3(I5$,{version:xJ0.version}),$3(rz,{marginBottom:1,children:$3(pL,{dimColor:!0,children:"\u2500".repeat(80)})}),$3(rz,{children:Gu(pL,{dimColor:!0,children:["Home: ",Q]})}),Gu(rz,{gap:2,children:[$.map((Y)=>Gu(rz,{gap:1,children:[$3(pL,{children:OY4(Y)}),$3(k5$,{status:Y.status})]},Y.name)),Gu(rz,{gap:1,children:[$3(pL,{children:"Migrations"}),$3(k5$,{status:Z})]})]}),$3(rz,{children:X?Gu(pL,{children:["Open in browser: ",$3(pL,{color:"cyan",children:X})]}):$3(pL,{dimColor:!0,children:"Starting..."})})]})}var C5$=L(()=>{Ye0();V5$()});import{Box as wY4,Text as qo}from"ink";import{jsx as Je0,jsxs as Ge0}from"react/jsx-runtime";function jY4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function _5$({logs:$}){return Je0(wY4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return Je0(qo,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Ge0(qo,{children:[Ge0(qo,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Je0(qo,{color:jY4(Z.status),children:Z.status}),Ge0(qo,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var v5$=()=>{};var Ke0={};e(Ke0,{App:()=>PY4});import{Box as EY4}from"ink";import{useSyncExternalStore as zY4}from"react";import{jsx as x5$,jsxs as AY4}from"react/jsx-runtime";function PY4({home:$}){let Z=zY4(es0,ss0);return AY4(EY4,{flexDirection:"column",children:[x5$(S5$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),x5$(_5$,{logs:Z.logs})]})}var We0=L(()=>{C5$();v5$();oz()});var qG="thread-gate",uN="decopilot-hosted-harness",lN="decopilot-hosted-harness-sandboxed",MG="automations",nL="background-tools",az="task-board-github-reads";var f5$="12";function b5$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:f5$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var y5$=()=>{};import TY4 from"pg";async function h5$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=RY4}=$,Y=$.log??((W)=>console.log(W)),J=new TY4.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",[g5$.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$(qY4)}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)",[g5$.toString()])}catch{}await J.end().catch(()=>{})}}var g5$=8314027461559302n,RY4=600000,qY4=500;var u5$=L(()=>{i$()});function MY4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function He0($,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 l5$(){let $=MY4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:He0($,"--cpu-prof-dir")??process.cwd(),name:He0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(He0($,"--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 c5$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=dz();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(()=>{}),fJ0=setInterval(()=>void Z().catch(()=>{}),$),fJ0.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(fJ0)clearInterval(fJ0)}}var fJ0;var m5$=()=>{};import*as IY4 from"bun:jsc";function d5$(){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{VY4()}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=kY4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;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 VY4,kY4;var i5$=L(()=>{({startSamplingProfiler:VY4,samplingProfilerStackTraces:kY4}=IY4)});function p5$(){l5$();let $=[c5$(),f1$(),d5$()];return()=>{for(let Z of $)Z()}}var n5$=L(()=>{Jt0();m5$();i5$()});var sz=v((t5$)=>{Object.defineProperty(t5$,"__esModule",{value:!0});t5$.RepublishHeaders=t5$.DirectMsgHeaders=t5$.JsHeaders=t5$.AdvisoryKind=void 0;t5$.isOrderedPushConsumerOptions=SY4;t5$.isPullConsumer=CY4;t5$.isPushConsumer=_Y4;t5$.isBoundPushConsumerOptions=vY4;function SY4($){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 CY4($){return $.isPullConsumer()}function _Y4($){return $.isPushConsumer()}function vY4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}t5$.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"};t5$.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"};t5$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};t5$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var Z3=v((r5$)=>{Object.defineProperty(r5$,"__esModule",{value:!0});r5$.TD=r5$.TE=r5$.Empty=void 0;r5$.encode=cY4;r5$.decode=mY4;r5$.Empty=new Uint8Array(0);r5$.TE=new TextEncoder;r5$.TD=new TextDecoder;function lY4(...$){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 cY4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(r5$.TE.encode($[Q]));if(Z.length===0)return r5$.Empty;if(Z.length===1)return Z[0];return lY4(...Z)}function mY4($){if(!$||$.length===0)return"";return r5$.TD.decode($)}});var Q3=v((e5$)=>{Object.defineProperty(e5$,"__esModule",{value:!0});e5$.errors=e5$.PermissionViolationError=e5$.NoRespondersError=e5$.TimeoutError=e5$.RequestError=e5$.ProtocolError=e5$.ConnectionError=e5$.DrainingConnectionError=e5$.ClosedConnectionError=e5$.AuthorizationError=e5$.UserAuthenticationExpiredError=e5$.InvalidOperationError=e5$.InvalidArgumentError=e5$.InvalidSubjectError=void 0;class Ue0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}e5$.InvalidSubjectError=Ue0;class bJ0 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 bJ0(`${$} ${Z}`,Q)}}e5$.InvalidArgumentError=bJ0;class Ne0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}e5$.InvalidOperationError=Ne0;class yJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new yJ0($);return null}}e5$.UserAuthenticationExpiredError=yJ0;class gJ0 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 gJ0($);return null}}e5$.AuthorizationError=gJ0;class Be0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}e5$.ClosedConnectionError=Be0;class De0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}e5$.DrainingConnectionError=De0;class Le0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}e5$.ConnectionError=Le0;class Oe0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}e5$.ProtocolError=Oe0;class we0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof hJ0}}e5$.RequestError=we0;class je0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}e5$.TimeoutError=je0;class hJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}e5$.NoRespondersError=hJ0;class uJ0 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 uJ0($,Q,X,Y)}}e5$.PermissionViolationError=uJ0;e5$.errors={AuthorizationError:gJ0,ClosedConnectionError:Be0,ConnectionError:Le0,DrainingConnectionError:De0,InvalidArgumentError:bJ0,InvalidOperationError:Ne0,InvalidSubjectError:Ue0,NoRespondersError:hJ0,PermissionViolationError:uJ0,ProtocolError:Oe0,RequestError:we0,TimeoutError:je0,UserAuthenticationExpiredError:yJ0}});var XW=v((Y9$)=>{Object.defineProperty(Y9$,"__esModule",{value:!0});Y9$.SimpleMutex=Y9$.Perf=void 0;Y9$.extend=GJ4;Y9$.render=KJ4;Y9$.timeout=WJ4;Y9$.delay=HJ4;Y9$.deadline=FJ4;Y9$.deferred=ze0;Y9$.debugDeferred=UJ4;Y9$.shuffle=NJ4;Y9$.collect=BJ4;Y9$.jitter=X9$;Y9$.backoff=DJ4;Y9$.nanos=LJ4;Y9$.millis=OJ4;Y9$.randomToken=EJ4;var JJ4=Z3(),Ee0=Q3();function GJ4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function KJ4($){return JJ4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function WJ4($,Z=!0){let Q=Z?new Ee0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new Ee0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function HJ4($=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 FJ4($,Z=1000){let Q=ze0(),X=setTimeout(()=>{Q.reject(new Ee0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function ze0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function UJ4(){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 NJ4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function BJ4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class Z9${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})}),$}}Y9$.Perf=Z9$;class Q9${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=ze0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Y9$.SimpleMutex=Q9$;function X9$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function DJ4($=[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 X9$(Q>Z?$[Z]:$[Q])}}}function LJ4($){return $*1e6}function OJ4($){return Math.floor($/1e6)}var wJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",cN=new Uint8Array(62);for(let $=0;$<62;$++)cN[$]=wJ4.charCodeAt($);var jJ4=218340105584896;function EJ4(){let $=Math.floor(Math.random()*jJ4),Z=$%62,Q=cN[Z];$=($-Z)/62,Z=$%62;let X=cN[Z];$=($-Z)/62,Z=$%62;let Y=cN[Z];$=($-Z)/62,Z=$%62;let J=cN[Z];$=($-Z)/62,Z=$%62;let G=cN[Z];$=($-Z)/62,Z=$%62;let K=cN[Z];$=($-Z)/62,Z=$%62;let W=cN[Z];$=($-Z)/62;let H=cN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var N9$=v((F9$)=>{Object.defineProperty(F9$,"__esModule",{value:!0});F9$.nuid=F9$.NuidImpl=void 0;var fJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",tL=62,cJ0=12,W9$=10,G9$=33,bJ4=333,K9$=cJ0+W9$,Ae0=new Uint8Array(tL);for(let $=0;$<tL;$++)Ae0[$]=fJ4.charCodeAt($);var lJ0=4294967296,H9$=BigInt(tL)**BigInt(W9$),Mo=Number(H9$/(1n<<32n)),Pe0=Number(H9$%(1n<<32n));function yJ4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function gJ4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else yJ4($)}class Te0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(K9$),this.cbuf=new Uint8Array(cJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Mo+1)),this.seqLo=Math.floor(Math.random()*lJ0);while($++<8&&this.seqHi===Mo&&this.seqLo>=Pe0);if(this.seqHi===Mo&&this.seqLo>=Pe0)this.seqLo=0;this.inc=Math.random()*(bJ4-G9$)+G9$|0}setPre(){gJ4(this.cbuf);for(let $=0;$<cJ0;$++)this.buf[$]=Ae0[this.cbuf[$]%tL]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=K9$-1;Q>=cJ0;Q--){let X=Math.floor($/tL),J=($-X*tL)*lJ0+Z,G=Math.floor(J/tL),K=J-G*tL;this.buf[Q]=Ae0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=lJ0)this.seqLo-=lJ0,this.seqHi+=1;if(this.seqHi>Mo||this.seqHi===Mo&&this.seqLo>=Pe0)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()}}F9$.NuidImpl=Te0;F9$.nuid=new Te0});var O9$=v((D9$)=>{Object.defineProperty(D9$,"__esModule",{value:!0});D9$.nuid=D9$.Nuid=void 0;var B9$=N9$();D9$.Nuid=B9$.NuidImpl;D9$.nuid=B9$.nuid});var dJ0=v((mJ0)=>{Object.defineProperty(mJ0,"__esModule",{value:!0});mJ0.nuid=mJ0.Nuid=void 0;var w9$=O9$();Object.defineProperty(mJ0,"Nuid",{enumerable:!0,get:function(){return w9$.Nuid}});Object.defineProperty(mJ0,"nuid",{enumerable:!0,get:function(){return w9$.nuid}})});var oL=v((j9$)=>{Object.defineProperty(j9$,"__esModule",{value:!0});j9$.DEFAULT_HOST=j9$.DEFAULT_PORT=j9$.Match=void 0;j9$.syncIterator=dJ4;j9$.createInbox=iJ4;var cJ4=dJ0(),mJ4=Q3();j9$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function dJ4($){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 iJ4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw mJ4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${cJ4.nuid.next()}`}j9$.DEFAULT_PORT=4222;j9$.DEFAULT_HOST="127.0.0.1"});var Io=v((A9$)=>{Object.defineProperty(A9$,"__esModule",{value:!0});A9$.DataBuffer=void 0;var z9$=Z3();class P9${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 z9$.TE.encode($)}static toAscii($){return z9$.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}}A9$.DataBuffer=P9$});var ez=v((q9$)=>{Object.defineProperty(q9$,"__esModule",{value:!0});q9$.LF=q9$.CR=q9$.CRLF=q9$.CR_LF_LEN=q9$.CR_LF=void 0;q9$.setTransportFactory=eJ4;q9$.defaultPort=$34;q9$.getUrlParseFn=Z34;q9$.newTransport=Q34;q9$.getResolveFn=X34;q9$.protoLen=R9$;q9$.extractProtocolMessage=Y34;var rJ4=Z3(),aJ4=oL(),sJ4=Io(),X3;function eJ4($){X3=$}function $34(){return X3!==void 0&&X3.defaultPort!==void 0?X3.defaultPort:aJ4.DEFAULT_PORT}function Z34(){return X3!==void 0&&X3.urlParseFn?X3.urlParseFn:void 0}function Q34(){if(!X3||typeof X3.factory!=="function")throw Error("transport fn is not set");return X3.factory()}function X34(){return X3!==void 0&&X3.dnsResolveFn?X3.dnsResolveFn:void 0}q9$.CR_LF=`\r
|
|
2079
|
+
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;iL({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)iL({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function UY4($){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 Ro(Number(Y)+1):await Ro(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await CJ0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let O of W)tz({name:O.name,status:"ready",port:O.port});Ao();let F=FY4(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)Ze0(N.stdout),Ze0(N.stderr);To(J),tz({name:"Vite",status:"ready",port:Number(Y)}),tz({name:"API",status:"ready",port:Number(K.port)});let D=async(O)=>{if(N.kill(O),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (_Y0(),CY0));await w(K.dataDir)}};return process.on("SIGINT",()=>D("SIGINT")),process.on("SIGTERM",()=>D("SIGTERM")),{port:Number(Y),process:N}}var Xe0=L(()=>{rs0();oz();$e0()});var xJ0;var Ye0=L(()=>{xJ0={name:"decocms",version:"4.375.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 BY4,Text as q5$}from"ink";import{jsx as DY4,jsxs as M5$}from"react/jsx-runtime";function I5$({version:$}){return M5$(BY4,{flexDirection:"column",marginTop:1,children:[ZJ0.map((Z,Q)=>DY4(q5$,{color:QJ0[Q],children:Z},Q)),M5$(q5$,{dimColor:!0,children:[" v",$]})]})}var V5$=L(()=>{Ko()});import{Box as rz,Text as pL}from"ink";import{Spinner as LY4}from"@inkjs/ui";import{jsx as $3,jsxs as Gu}from"react/jsx-runtime";function k5$({status:$}){if($==="pending")return $3(LY4,{label:""});return $3(pL,{color:"green",children:"\u2713"})}function OY4($){return`${$.name}: ${$.port||"...."}`}function S5$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return Gu(rz,{flexDirection:"column",paddingBottom:1,children:[$3(I5$,{version:xJ0.version}),$3(rz,{marginBottom:1,children:$3(pL,{dimColor:!0,children:"\u2500".repeat(80)})}),$3(rz,{children:Gu(pL,{dimColor:!0,children:["Home: ",Q]})}),Gu(rz,{gap:2,children:[$.map((Y)=>Gu(rz,{gap:1,children:[$3(pL,{children:OY4(Y)}),$3(k5$,{status:Y.status})]},Y.name)),Gu(rz,{gap:1,children:[$3(pL,{children:"Migrations"}),$3(k5$,{status:Z})]})]}),$3(rz,{children:X?Gu(pL,{children:["Open in browser: ",$3(pL,{color:"cyan",children:X})]}):$3(pL,{dimColor:!0,children:"Starting..."})})]})}var C5$=L(()=>{Ye0();V5$()});import{Box as wY4,Text as qo}from"ink";import{jsx as Je0,jsxs as Ge0}from"react/jsx-runtime";function jY4($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function _5$({logs:$}){return Je0(wY4,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return Je0(qo,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return Ge0(qo,{children:[Ge0(qo,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),Je0(qo,{color:jY4(Z.status),children:Z.status}),Ge0(qo,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var v5$=()=>{};var Ke0={};e(Ke0,{App:()=>PY4});import{Box as EY4}from"ink";import{useSyncExternalStore as zY4}from"react";import{jsx as x5$,jsxs as AY4}from"react/jsx-runtime";function PY4({home:$}){let Z=zY4(es0,ss0);return AY4(EY4,{flexDirection:"column",children:[x5$(S5$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),x5$(_5$,{logs:Z.logs})]})}var We0=L(()=>{C5$();v5$();oz()});var qG="thread-gate",uN="decopilot-hosted-harness",lN="decopilot-hosted-harness-sandboxed",MG="automations",nL="background-tools",az="task-board-github-reads";var f5$="12";function b5$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:f5$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var y5$=()=>{};import TY4 from"pg";async function h5$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=RY4}=$,Y=$.log??((W)=>console.log(W)),J=new TY4.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",[g5$.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$(qY4)}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)",[g5$.toString()])}catch{}await J.end().catch(()=>{})}}var g5$=8314027461559302n,RY4=600000,qY4=500;var u5$=L(()=>{i$()});function MY4(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function He0($,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 l5$(){let $=MY4();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:He0($,"--cpu-prof-dir")??process.cwd(),name:He0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(He0($,"--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 c5$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=dz();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(()=>{}),fJ0=setInterval(()=>void Z().catch(()=>{}),$),fJ0.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(fJ0)clearInterval(fJ0)}}var fJ0;var m5$=()=>{};import*as IY4 from"bun:jsc";function d5$(){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{VY4()}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=kY4()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((D)=>D.sourceURL&&!/Unknown Executable/.test(D.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;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 VY4,kY4;var i5$=L(()=>{({startSamplingProfiler:VY4,samplingProfilerStackTraces:kY4}=IY4)});function p5$(){l5$();let $=[c5$(),f1$(),d5$()];return()=>{for(let Z of $)Z()}}var n5$=L(()=>{Jt0();m5$();i5$()});var sz=v((t5$)=>{Object.defineProperty(t5$,"__esModule",{value:!0});t5$.RepublishHeaders=t5$.DirectMsgHeaders=t5$.JsHeaders=t5$.AdvisoryKind=void 0;t5$.isOrderedPushConsumerOptions=SY4;t5$.isPullConsumer=CY4;t5$.isPushConsumer=_Y4;t5$.isBoundPushConsumerOptions=vY4;function SY4($){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 CY4($){return $.isPullConsumer()}function _Y4($){return $.isPushConsumer()}function vY4($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}t5$.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"};t5$.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"};t5$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};t5$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var Z3=v((r5$)=>{Object.defineProperty(r5$,"__esModule",{value:!0});r5$.TD=r5$.TE=r5$.Empty=void 0;r5$.encode=cY4;r5$.decode=mY4;r5$.Empty=new Uint8Array(0);r5$.TE=new TextEncoder;r5$.TD=new TextDecoder;function lY4(...$){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 cY4(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(r5$.TE.encode($[Q]));if(Z.length===0)return r5$.Empty;if(Z.length===1)return Z[0];return lY4(...Z)}function mY4($){if(!$||$.length===0)return"";return r5$.TD.decode($)}});var Q3=v((e5$)=>{Object.defineProperty(e5$,"__esModule",{value:!0});e5$.errors=e5$.PermissionViolationError=e5$.NoRespondersError=e5$.TimeoutError=e5$.RequestError=e5$.ProtocolError=e5$.ConnectionError=e5$.DrainingConnectionError=e5$.ClosedConnectionError=e5$.AuthorizationError=e5$.UserAuthenticationExpiredError=e5$.InvalidOperationError=e5$.InvalidArgumentError=e5$.InvalidSubjectError=void 0;class Ue0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}e5$.InvalidSubjectError=Ue0;class bJ0 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 bJ0(`${$} ${Z}`,Q)}}e5$.InvalidArgumentError=bJ0;class Ne0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}e5$.InvalidOperationError=Ne0;class yJ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new yJ0($);return null}}e5$.UserAuthenticationExpiredError=yJ0;class gJ0 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 gJ0($);return null}}e5$.AuthorizationError=gJ0;class Be0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}e5$.ClosedConnectionError=Be0;class De0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}e5$.DrainingConnectionError=De0;class Le0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}e5$.ConnectionError=Le0;class Oe0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}e5$.ProtocolError=Oe0;class we0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof hJ0}}e5$.RequestError=we0;class je0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}e5$.TimeoutError=je0;class hJ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}e5$.NoRespondersError=hJ0;class uJ0 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 uJ0($,Q,X,Y)}}e5$.PermissionViolationError=uJ0;e5$.errors={AuthorizationError:gJ0,ClosedConnectionError:Be0,ConnectionError:Le0,DrainingConnectionError:De0,InvalidArgumentError:bJ0,InvalidOperationError:Ne0,InvalidSubjectError:Ue0,NoRespondersError:hJ0,PermissionViolationError:uJ0,ProtocolError:Oe0,RequestError:we0,TimeoutError:je0,UserAuthenticationExpiredError:yJ0}});var XW=v((Y9$)=>{Object.defineProperty(Y9$,"__esModule",{value:!0});Y9$.SimpleMutex=Y9$.Perf=void 0;Y9$.extend=GJ4;Y9$.render=KJ4;Y9$.timeout=WJ4;Y9$.delay=HJ4;Y9$.deadline=FJ4;Y9$.deferred=ze0;Y9$.debugDeferred=UJ4;Y9$.shuffle=NJ4;Y9$.collect=BJ4;Y9$.jitter=X9$;Y9$.backoff=DJ4;Y9$.nanos=LJ4;Y9$.millis=OJ4;Y9$.randomToken=EJ4;var JJ4=Z3(),Ee0=Q3();function GJ4($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function KJ4($){return JJ4.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function WJ4($,Z=!0){let Q=Z?new Ee0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new Ee0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function HJ4($=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 FJ4($,Z=1000){let Q=ze0(),X=setTimeout(()=>{Q.reject(new Ee0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function ze0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function UJ4(){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 NJ4($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function BJ4($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class Z9${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})}),$}}Y9$.Perf=Z9$;class Q9${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=ze0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}Y9$.SimpleMutex=Q9$;function X9$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function DJ4($=[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 X9$(Q>Z?$[Z]:$[Q])}}}function LJ4($){return $*1e6}function OJ4($){return Math.floor($/1e6)}var wJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",cN=new Uint8Array(62);for(let $=0;$<62;$++)cN[$]=wJ4.charCodeAt($);var jJ4=218340105584896;function EJ4(){let $=Math.floor(Math.random()*jJ4),Z=$%62,Q=cN[Z];$=($-Z)/62,Z=$%62;let X=cN[Z];$=($-Z)/62,Z=$%62;let Y=cN[Z];$=($-Z)/62,Z=$%62;let J=cN[Z];$=($-Z)/62,Z=$%62;let G=cN[Z];$=($-Z)/62,Z=$%62;let K=cN[Z];$=($-Z)/62,Z=$%62;let W=cN[Z];$=($-Z)/62;let H=cN[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var N9$=v((F9$)=>{Object.defineProperty(F9$,"__esModule",{value:!0});F9$.nuid=F9$.NuidImpl=void 0;var fJ4="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",tL=62,cJ0=12,W9$=10,G9$=33,bJ4=333,K9$=cJ0+W9$,Ae0=new Uint8Array(tL);for(let $=0;$<tL;$++)Ae0[$]=fJ4.charCodeAt($);var lJ0=4294967296,H9$=BigInt(tL)**BigInt(W9$),Mo=Number(H9$/(1n<<32n)),Pe0=Number(H9$%(1n<<32n));function yJ4($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function gJ4($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else yJ4($)}class Te0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(K9$),this.cbuf=new Uint8Array(cJ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(Mo+1)),this.seqLo=Math.floor(Math.random()*lJ0);while($++<8&&this.seqHi===Mo&&this.seqLo>=Pe0);if(this.seqHi===Mo&&this.seqLo>=Pe0)this.seqLo=0;this.inc=Math.random()*(bJ4-G9$)+G9$|0}setPre(){gJ4(this.cbuf);for(let $=0;$<cJ0;$++)this.buf[$]=Ae0[this.cbuf[$]%tL]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=K9$-1;Q>=cJ0;Q--){let X=Math.floor($/tL),J=($-X*tL)*lJ0+Z,G=Math.floor(J/tL),K=J-G*tL;this.buf[Q]=Ae0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=lJ0)this.seqLo-=lJ0,this.seqHi+=1;if(this.seqHi>Mo||this.seqHi===Mo&&this.seqLo>=Pe0)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()}}F9$.NuidImpl=Te0;F9$.nuid=new Te0});var O9$=v((D9$)=>{Object.defineProperty(D9$,"__esModule",{value:!0});D9$.nuid=D9$.Nuid=void 0;var B9$=N9$();D9$.Nuid=B9$.NuidImpl;D9$.nuid=B9$.nuid});var dJ0=v((mJ0)=>{Object.defineProperty(mJ0,"__esModule",{value:!0});mJ0.nuid=mJ0.Nuid=void 0;var w9$=O9$();Object.defineProperty(mJ0,"Nuid",{enumerable:!0,get:function(){return w9$.Nuid}});Object.defineProperty(mJ0,"nuid",{enumerable:!0,get:function(){return w9$.nuid}})});var oL=v((j9$)=>{Object.defineProperty(j9$,"__esModule",{value:!0});j9$.DEFAULT_HOST=j9$.DEFAULT_PORT=j9$.Match=void 0;j9$.syncIterator=dJ4;j9$.createInbox=iJ4;var cJ4=dJ0(),mJ4=Q3();j9$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function dJ4($){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 iJ4($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw mJ4.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${cJ4.nuid.next()}`}j9$.DEFAULT_PORT=4222;j9$.DEFAULT_HOST="127.0.0.1"});var Io=v((A9$)=>{Object.defineProperty(A9$,"__esModule",{value:!0});A9$.DataBuffer=void 0;var z9$=Z3();class P9${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 z9$.TE.encode($)}static toAscii($){return z9$.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}}A9$.DataBuffer=P9$});var ez=v((q9$)=>{Object.defineProperty(q9$,"__esModule",{value:!0});q9$.LF=q9$.CR=q9$.CRLF=q9$.CR_LF_LEN=q9$.CR_LF=void 0;q9$.setTransportFactory=eJ4;q9$.defaultPort=$34;q9$.getUrlParseFn=Z34;q9$.newTransport=Q34;q9$.getResolveFn=X34;q9$.protoLen=R9$;q9$.extractProtocolMessage=Y34;var rJ4=Z3(),aJ4=oL(),sJ4=Io(),X3;function eJ4($){X3=$}function $34(){return X3!==void 0&&X3.defaultPort!==void 0?X3.defaultPort:aJ4.DEFAULT_PORT}function Z34(){return X3!==void 0&&X3.urlParseFn?X3.urlParseFn:void 0}function Q34(){if(!X3||typeof X3.factory!=="function")throw Error("transport fn is not set");return X3.factory()}function X34(){return X3!==void 0&&X3.dnsResolveFn?X3.dnsResolveFn:void 0}q9$.CR_LF=`\r
|
|
2080
2080
|
`;q9$.CR_LF_LEN=q9$.CR_LF.length;q9$.CRLF=sJ4.DataBuffer.fromAscii(q9$.CR_LF);q9$.CR=new Uint8Array(q9$.CRLF)[0];q9$.LF=new Uint8Array(q9$.CRLF)[1];function R9$($){for(let Z=0;Z<$.length;Z++){let Q=Z+1;if($.byteLength>Q&&$[Z]===q9$.CR&&$[Q]===q9$.LF)return Q+1}return 0}function Y34($){let Z=R9$($);if(Z>0){let X=new Uint8Array($).slice(0,Z);return rJ4.TD.decode(X)}return""}});var Ve0=v((v9$)=>{Object.defineProperty(v9$,"__esModule",{value:!0});v9$.ipV4=S9$;v9$.isIP=L34;v9$.parseIP=C9$;var Vo=4,$P=16,iJ0=48,k9$=57,I9$=65,B34=70,V9$=97,D34=102,Ie0=16777215;function S9$($,Z,Q,X){let Y=new Uint8Array($P);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 _9$($);case":":return O34($)}return}function _9$($){let Z=new Uint8Array(Vo);for(let Q=0;Q<Vo;Q++){if($.length===0)return;if(Q>0){if($[0]!==".")return;$=$.substring(1)}let{n:X,c:Y,ok:J}=w34($);if(!J||X>255)return;$=$.substring(Y),Z[Q]=X}return S9$(Z[0],Z[1],Z[2],Z[3])}function O34($){let Z=new Uint8Array($P),Q=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(Q=0,$=$.substring(2),$.length===0)return Z}let X=0;while(X<$P){let{n:Y,c:J,ok:G}=j34($);if(!G||Y>65535)return;if(J<$.length&&$[J]==="."){if(Q<0&&X!=$P-Vo)return;if(X+Vo>$P)return;let K=_9$($);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+=Vo;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<$P){if(Q<0)return;let Y=$P-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 w34($){let Z=0,Q=0;for(Z=0;Z<$.length&&iJ0<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=k9$;Z++)if(Q=Q*10+($.charCodeAt(Z)-iJ0),Q>=Ie0)return{n:Ie0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:Q,c:Z,ok:!0}}function j34($){let Z=0,Q=0;for(Q=0;Q<$.length;Q++){if(iJ0<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=k9$)Z*=16,Z+=$.charCodeAt(Q)-iJ0;else if(V9$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=D34)Z*=16,Z+=$.charCodeAt(Q)-V9$+10;else if(I9$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=B34)Z*=16,Z+=$.charCodeAt(Q)-I9$+10;else break;if(Z>=Ie0)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 xe0=v((f9$)=>{Object.defineProperty(f9$,"__esModule",{value:!0});f9$.Servers=f9$.ServerImpl=void 0;f9$.isIPV4OrHostname=x9$;f9$.hostPort=ve0;var ke0=ez(),Se0=XW(),Ce0=Ve0(),A34=oL(),T34=Q3();function x9$($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function _e0($){return!x9$($)}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 ve0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=R34($),_e0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=_e0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),Q=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):A34.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 Ku{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let Q=ve0($);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}://${_e0(X)?"["+X+"]":X}`);J.port=`${this.port}`;let G=new Ku(J.host,!1);G.tlsName=this.hostname,Z.push(G)}}if($.randomize)(0,Se0.shuffle)(Z);return this.resolves=Z,Z}}f9$.ServerImpl=Ku;class pJ0{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw T34.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,ke0.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}=ve0(Y),G=Q.get(J);if(G)G.gossiped=!1,X.push(G);else X.push(new Ku(Y))}if(this.randomize)(0,Se0.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,ke0.getUrlParseFn)();$=Q?Q($):$;let X=new Ku($,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 pJ0.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return pJ0.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,ke0.getUrlParseFn)(),J=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new Ku(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,Se0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:Q,deleted:X}}}f9$.Servers=pJ0});var nJ0=v((h9$)=>{Object.defineProperty(h9$,"__esModule",{value:!0});h9$.QueuedIteratorImpl=void 0;var fe0=XW(),y9$=Q3();class g9${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,fe0.deferred)(),this.yields=[],this.iterClosed=(0,fe0.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 y9$.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new y9$.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,fe0.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}}h9$.QueuedIteratorImpl=g9$});var be0=v((m9$)=>{Object.defineProperty(m9$,"__esModule",{value:!0});m9$.MuxSubscription=void 0;var V34=oL(),l9$=Q3();class c9${baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,V34.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 l9$.NoRespondersError(X.requestSubject):null;X.resolver($,Z)}}}}close(){let $=new l9$.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}m9$.MuxSubscription=c9$});var ye0=v((p9$)=>{Object.defineProperty(p9$,"__esModule",{value:!0});p9$.Heartbeat=void 0;var k34=XW();class i9${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,k34.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})}}p9$.Heartbeat=i9$});var ue0=v((a9$)=>{Object.defineProperty(a9$,"__esModule",{value:!0});a9$.DenoBuffer=a9$.MAX_SIZE=a9$.AssertionError=void 0;a9$.assert=o9$;a9$.concat=r9$;a9$.append=C34;a9$.readAll=_34;a9$.writeAll=v34;var S34=Z3();class ge0 extends Error{constructor($){super($);this.name="AssertionError"}}a9$.AssertionError=ge0;function o9$($,Z="Assertion failed."){if(!$)throw new ge0(Z)}var t9$=32768;a9$.MAX_SIZE=4294967294;function tJ0($,Z,Q=0){let X=Z.byteLength-Q;if($.byteLength>X)$=$.subarray(0,X);return Z.set($,Q),$.byteLength}function r9$($,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 C34($,Z){return r9$($,Uint8Array.of(Z))}class he0{_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($){o9$($<=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=tJ0(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(S34.TE.encode($))}write($){let Z=this._grow($.byteLength);return tJ0($,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)tJ0(this._buf.subarray(this._off),this._buf);else if(X+$>a9$.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*X+$,a9$.MAX_SIZE));tJ0(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,a9$.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(t9$);while(!0){let X=this.capacity-this.length<t9$,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}}}a9$.DenoBuffer=he0;function _34($){let Z=new he0;return Z.readFrom($),Z.bytes()}function v34($,Z){let Q=0;while(Q<Z.length)Q+=$.write(Z.subarray(Q))}});var me0=v((QZ$)=>{Object.defineProperty(QZ$,"__esModule",{value:!0});QZ$.cc=QZ$.State=QZ$.Parser=QZ$.Kind=void 0;QZ$.describe=u34;var le0=ue0(),ce0=Z3();QZ$.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function u34($){let Z,Q="";switch($.kind){case QZ$.Kind.MSG:Z="MSG";break;case QZ$.Kind.OK:Z="OK";break;case QZ$.Kind.ERR:Z="ERR",Q=ce0.TD.decode($.data);break;case QZ$.Kind.PING:Z="PING";break;case QZ$.Kind.PONG:Z="PONG";break;case QZ$.Kind.INFO:Z="INFO",Q=ce0.TD.decode($.data)}return`${Z}: ${Q}`}function e9$(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var $Z$=48,l34=57,Wu=67108864;class ZZ${dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=QZ$.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 QZ$.State.OP_START:switch(Q){case QZ$.cc.M:case QZ$.cc.m:this.state=QZ$.State.OP_M,this.hdr=-1,this.ma=e9$();break;case QZ$.cc.H:case QZ$.cc.h:this.state=QZ$.State.OP_H,this.hdr=0,this.ma=e9$();break;case QZ$.cc.P:case QZ$.cc.p:this.state=QZ$.State.OP_P;break;case QZ$.cc.PLUS:this.state=QZ$.State.OP_PLUS;break;case QZ$.cc.MINUS:this.state=QZ$.State.OP_MINUS;break;case QZ$.cc.I:case QZ$.cc.i:this.state=QZ$.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_H:switch(Q){case QZ$.cc.M:case QZ$.cc.m:this.state=QZ$.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_M:switch(Q){case QZ$.cc.S:case QZ$.cc.s:this.state=QZ$.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_MS:switch(Q){case QZ$.cc.G:case QZ$.cc.g:this.state=QZ$.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_MSG:switch(Q){case QZ$.cc.SPACE:case QZ$.cc.TAB:this.state=QZ$.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_MSG_SPC:switch(Q){case QZ$.cc.SPACE:case QZ$.cc.TAB:continue;default:this.state=QZ$.State.MSG_ARG,this.as=Z}break;case QZ$.State.MSG_ARG:switch(Q){case QZ$.cc.CR:this.drop=1;break;case QZ$.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=QZ$.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;case QZ$.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let X=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:QZ$.Kind.MSG,msg:this.ma,data:X}),this.argBuf=void 0,this.msgBuf=void 0,this.state=QZ$.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:QZ$.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=QZ$.State.MSG_END;break;case QZ$.State.MSG_END:switch(Q){case QZ$.cc.NL:this.drop=0,this.as=Z+1,this.state=QZ$.State.OP_START;break;default:continue}break;case QZ$.State.OP_PLUS:switch(Q){case QZ$.cc.O:case QZ$.cc.o:this.state=QZ$.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_PLUS_O:switch(Q){case QZ$.cc.K:case QZ$.cc.k:this.state=QZ$.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_PLUS_OK:switch(Q){case QZ$.cc.NL:this.dispatcher.push({kind:QZ$.Kind.OK}),this.drop=0,this.state=QZ$.State.OP_START;break}break;case QZ$.State.OP_MINUS:switch(Q){case QZ$.cc.E:case QZ$.cc.e:this.state=QZ$.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_MINUS_E:switch(Q){case QZ$.cc.R:case QZ$.cc.r:this.state=QZ$.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_MINUS_ER:switch(Q){case QZ$.cc.R:case QZ$.cc.r:this.state=QZ$.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_MINUS_ERR:switch(Q){case QZ$.cc.SPACE:case QZ$.cc.TAB:this.state=QZ$.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_MINUS_ERR_SPC:switch(Q){case QZ$.cc.SPACE:case QZ$.cc.TAB:continue;default:this.state=QZ$.State.MINUS_ERR_ARG,this.as=Z}break;case QZ$.State.MINUS_ERR_ARG:switch(Q){case QZ$.cc.CR:this.drop=1;break;case QZ$.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:QZ$.Kind.ERR,data:X}),this.drop=0,this.as=Z+1,this.state=QZ$.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(Q))}break;case QZ$.State.OP_P:switch(Q){case QZ$.cc.I:case QZ$.cc.i:this.state=QZ$.State.OP_PI;break;case QZ$.cc.O:case QZ$.cc.o:this.state=QZ$.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_PO:switch(Q){case QZ$.cc.N:case QZ$.cc.n:this.state=QZ$.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_PON:switch(Q){case QZ$.cc.G:case QZ$.cc.g:this.state=QZ$.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_PONG:switch(Q){case QZ$.cc.NL:this.dispatcher.push({kind:QZ$.Kind.PONG}),this.drop=0,this.state=QZ$.State.OP_START;break}break;case QZ$.State.OP_PI:switch(Q){case QZ$.cc.N:case QZ$.cc.n:this.state=QZ$.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_PIN:switch(Q){case QZ$.cc.G:case QZ$.cc.g:this.state=QZ$.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_PING:switch(Q){case QZ$.cc.NL:this.dispatcher.push({kind:QZ$.Kind.PING}),this.drop=0,this.state=QZ$.State.OP_START;break}break;case QZ$.State.OP_I:switch(Q){case QZ$.cc.N:case QZ$.cc.n:this.state=QZ$.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_IN:switch(Q){case QZ$.cc.F:case QZ$.cc.f:this.state=QZ$.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_INF:switch(Q){case QZ$.cc.O:case QZ$.cc.o:this.state=QZ$.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_INFO:switch(Q){case QZ$.cc.SPACE:case QZ$.cc.TAB:this.state=QZ$.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case QZ$.State.OP_INFO_SPC:switch(Q){case QZ$.cc.SPACE:case QZ$.cc.TAB:continue;default:this.state=QZ$.State.INFO_ARG,this.as=Z}break;case QZ$.State.INFO_ARG:switch(Q){case QZ$.cc.CR:this.drop=1;break;case QZ$.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:QZ$.Kind.INFO,data:X}),this.drop=0,this.as=Z+1,this.state=QZ$.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;default:throw this.fail($.subarray(Z))}}if((this.state===QZ$.State.MSG_ARG||this.state===QZ$.State.MINUS_ERR_ARG||this.state===QZ$.State.INFO_ARG)&&!this.argBuf)this.argBuf=new le0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===QZ$.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new le0.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 le0.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 QZ$.cc.SPACE:case QZ$.cc.TAB:case QZ$.cc.CR:case QZ$.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],Wu);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],Wu);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}: ${ce0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case QZ$.cc.SPACE:case QZ$.cc.TAB:case QZ$.cc.CR:case QZ$.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],Wu),this.ma.size=this.protoParseInt(Z[3],Wu);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],Wu),this.ma.size=this.protoParseInt(Z[4],Wu);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]<$Z$||$[X]>l34)return-1;Q=Q*10+($[X]-$Z$)}return Z!==void 0&&Q>Z?-1:Q}}QZ$.Parser=ZZ$;QZ$.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};QZ$.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 aJ0=v((YZ$)=>{Object.defineProperty(YZ$,"__esModule",{value:!0});YZ$.MsgHdrsImpl=void 0;YZ$.canonicalMIMEHeaderKey=ie0;YZ$.headers=d34;var XZ$=Z3(),YW=oL(),rJ0=Q3();function ie0($){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 rJ0.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 d34($=0,Z=""){if($===0&&Z!=="")throw rJ0.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw rJ0.InvalidArgumentError.format("description","is required");return new Hu($,Z)}var de0="NATS/1.0";class Hu{_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 Hu,X=XZ$.TD.decode($).split(`\r
|
|
2081
2081
|
`),Y=X[0];if(Y!==de0){let J=Y.replace(de0,"").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 $=de0;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
|
@@ -3388,7 +3388,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
3388
3388
|
${J.join(`
|
|
3389
3389
|
`)}`:X}function MI6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3390
3390
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var Ae$=200,LI6=12,jI6,zI6=300,qI0=3;var hW1=O(()=>{OZ();m$();RI0();jI6={aheadBy:0,behindBy:0,files:[]}});function VI6($){if(!$||$.includes(".."))return!1;return II6.test($)}function Re$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!VI6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function qe$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var II6;var Me$=O(()=>{II6=/^[\w./@-]+$/});function O$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 Ve$($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new rw(pZ);let J=await CL($.storage,X,Y);if(J&&await IN($.storage,J)){let F=await eH($,J,{forceRefresh:!0}).catch((U)=>{throw new rw(U instanceof Error?U.message:pZ)});await Ie$($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new rw("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await tu({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:pZ;throw new rw(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await $F(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=fG$(F instanceof Error?F.message:String(F));throw U?new rw(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=hd($),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 Zw(K,kI6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var kI6=10485760,rw;var uW1=O(()=>{wG();OI0();xa();q30();vs();OZ();rw=class rw extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function CI6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!SI6.test(Z))throw Error(`Invalid branch name: ${$}`)}function ob($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(vI6)])}async function bI6($,Z){let Q=$.var.studioContext,Y=KF(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=jf(G?.metadata?.runtime);if(W)return W;let K=FP0(Z.virtualMcpMetadata),H=K==="cms"?await EW1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)ya(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 xI6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await pY($.var.studioContext)}catch{return null}}function rb($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function md($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=O$0(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no GitHub repository"});let J=i(Y);return iu(Y,J.id,X)}function lW1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=K3$(Z);if(Y!==void 0)return $.json({error:Q},429,{...R5,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof z6)return $.json({error:Q},409,R5);let X=PG(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 Ce$($,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 _e$($){try{let Z=await md($),Q=await MI0(Z,$.get("vmClaim").branch);return $.json(Q,200,R5)}catch(Z){return lW1($,Z)}}function L$0($,Z){let Y=(kI0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return kI0.set($,X),X.finally(()=>{if(kI0.get($)===X)kI0.delete($)}),Y}async function V7($,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??rb($);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?yI6(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 yI6($){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 SI0($,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 gI6($){return ve$.includes($)}var SI6,ke$=524288,_I6=65536,vI6=1e4,Se$=2000,fI6,kI0,R5,ve$,fe$=()=>{let $=new e0;$.use("/:virtualMcpId/:branch/*",fI6),$.post("/:virtualMcpId/:branch/write",(Q)=>V7(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:ob(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>V7(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ob(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>V7(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ob(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>V7(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:ob(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>V7(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:ob(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>V7(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:ob(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>V7(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:ob(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 V7(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 V7(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>V7(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>V7(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!gI6(Y))return Q.json({error:`step must be one of: ${ve$.join(", ")}`},400);let X=Q.get("vmClaim"),J=await EW1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await xI6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,R5);if(Y==="start"){let G=i(Q.var.studioContext),W=Ml(X.virtualMcpMetadata);try{await GP0({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 V7(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 TB(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 va$(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 _e$(Q);return Z(Q)});let Z=(Q)=>V7(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(Se$)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return _e$(Q);return V7(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(Se$)])})}),$.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 md(Q),G=await II0(J,Y.branch,X.base);return Q.json(G,200,R5)}catch(X){return lW1(Q,X)}return V7(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=rb(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return L$0(X,async()=>{try{await zW1(W,Y,X);let K=O$0(J,G);if(K)await Ve$(W,Y,X,K)}catch(K){if(K instanceof rw)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 V7(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 L$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 md(Q);return await Te$(G,Y.branch,J),Q.json({ok:!0},200,R5)}catch(G){let W=PG(G)===409||G instanceof z6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,R5)}});return L$0(Y.claimName,()=>V7(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 L$0(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await md(Q),H=W.base??await K.getDefaultBranch();return await VI0(K,Y.branch,H),Q.json({ok:!0},200,R5)}catch(W){return lW1(Q,W)}});let X=rb(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return L$0(J,async()=>{try{await zW1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,R5)}return V7(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",l5({maxSize:ke$,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=rb(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]=TW1(F)&&N?[F,U]:X?await Promise.all([SI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),SI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await md(Q);return Promise.all([MI0(w,Y.branch),II0(w,Y.branch)])})();await SW(K,i(K).id,"suggesting a commit message");let L=await ga$(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:ke$,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=rb(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]=TW1(F)&&N?[F,U]:X?await Promise.all([SI0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),SI0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await md(Q);return Promise.all([MI0(w,Y.branch),II0(w,Y.branch)])})();await SW(K,i(K).id,"judging whether a change needs review");let L=await ua$(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=rb(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 Ce$(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",l5({maxSize:_I6,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=rb(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=Re$(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=qe$(J,W.resolveType);return Ce$(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var be$=O(()=>{y$();vK();gd();jW1();_a();Sa$();MG();Il();Ca$();KK();EH();_a$();fa$();$81();fa();MW1();la$();OZ();c6();hW1();Me$();uW1();SI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;fI6=DI0(async($,Z)=>{let Q=$.var.studioContext;try{p(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=u0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=i(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{CI6(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=Xa({orgId:X.id,virtualMcpId:J,branch:G}),H=await _11(Q,G),F=v11(H,Y),U=ka$({userId:F,projectRef:K}),N=W.metadata??null,B=await bI6($,{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 pY(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()});kI0=new Map;R5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};ve$=["clone","install","start"]});function xe$($,Z,Q){let Y=cW1.get($);if(!Y)Y={pending:null,running:!1},cW1.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)uI6($,Y);return J}async function uI6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await lI6(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)cW1.delete($)}}async function lI6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await dd(Z,Q),W=await Z.listDecofileEntries(G,Y),K=xW1(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=yW1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3391
|
-
`;await je$(Z.repo,L);let w=D[0]??`${TI0(Y)}/${kW1(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 yW1(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 Ee$(Z,F.values(),X),{decofile:B,skipped:D}=F$0(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:tW(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:cI6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof z6)||J>=hI6-1)throw N;await P$(C7(2000,200,J,2,0.5))}}}function cI6($){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 J11(Y,$.deps.coAuthor)}var hI6=3,cW1;var ye$=O(()=>{aE0();wI0();X6();m$();OZ();RI0();cW1=new Map});import{createHmac as ge$,randomBytes as dI6,timingSafeEqual as mI6}from"crypto";function he$(){if(CI0)return CI0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return CI0=$?Buffer.from($):dI6(32),CI0}function dW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+iI6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=ge$("sha256",he$()).update(Y).digest("base64url");return`${Y}.${X}`}function ue$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(ge$("sha256",he$()).update(Y).digest("base64url"));if(X.length!==J.length||!mI6(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 iI6=21600000,CI0=null;var le$=O(()=>{t1()});import{z as id}from"zod";function nI6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&pI6.test($)}function pe$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function w$0($){let Z=$.get("decofileScope");return iu($.var.studioContext,Z.organizationId,Z.githubRepo)}function j$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof z6)return $.json({error:Q},409);let Y=PG(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 ne$(){let $=new e0;return $.use("/:virtualMcpId/:branch",ie$),$.use("/:virtualMcpId/:branch/*",ie$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await w$0(Z),X=await ze$(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=dW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(pe$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return j$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 w$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 j$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",oI6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=rI6.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{LI0(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(VW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await w$0(Z),W=await xe$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:hd(Y)},J),K=dW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:pe$(Z)})}catch(G){return j$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await w$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(PG(W)!==409)throw W;await VI0(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(PG(G)===409)return Z.json({error:"merge-conflict"},409);if(PG(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 j$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await w$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(PG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return j$0(Z,Y)}}),$}var pI6,ce$=500,de$=1048576,me$=1024,tI6=8388608,oI6,rI6,ie$;var te$=O(()=>{Z81();wI0();y$();vK();jW1();OI0();uW1();OZ();ye$();le$();hW1();RI0();EH();pI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;oI6=l5({maxSize:tI6,onError:($)=>$.json({error:"Payload too large"},413)}),rI6=id.object({set:id.record(id.string(),id.unknown()).optional(),delete:id.array(id.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)<=ce$,{message:`Patch cannot touch more than ${ce$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=de$),{message:`Each block must be at most ${de$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=me$),{message:`Each block key must be at most ${me$} characters`}),ie$=DI0(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(!nI6(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||!ue$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await e3(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(!HP0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=O$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 oe$=($)=>{let Z=new e0;if(Z.use("*",Ld),Z.use("*",Rt$),Z.route("/",RM0()),Z.route("/",Go$()),Z.route("/",pt$()),Z.route("/",La$()),Z.route("/",Wa$()),Z.route("/",Ba$()),Z.route("/",Ha$()),Z.route("/",UI0()),Z.route("/tools",Ta$()),Z.route("/",za$()),Z.route("/",hs$({kvStorage:$.kvStorage})),Z.route("/",ys$()),Z.route("/fs",as$({getConnection:$.getNatsConnection})),Z.route("/sandbox",fe$()),Z.route("/decofile",ne$()),Z.route("/",Xa$()),Z.route("/",$a$()),Z.route("/deco-sites",MM0()),Z.route("/hosting",bt$()),Z.route("/monitor",ct$()),Z.route("/sso",EM0()),Z.route("/",NI0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",St$()),$.mountDevAssets)Z.route("/dev-assets",SM0({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("/",_i$()),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",Qa$()),Z.route("/mcp",N20()),Z.route("/mcp/self",KI0()),Z.route("/mcp",O20()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var re$=O(()=>{y$();qt$();KM0();Ct$();h31();xt$();dt$();CM0();yb();f31();m31();gs$();us$();es$();Za$();ie();V31();L20();HW1();Ya$();Ja$();Ka$();Fa$();NW1();wa$();Pa$();BW1();Ra$();DW1();B20();be$();te$()});function sI6($){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 aI6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},se$=()=>{let $=new e0;return $.use("*",aI6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await HJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:sI6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var ae$=O(()=>{y$();t1();Kq0()});import{z as V1}from"zod";function tF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function KV6($){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 HV6($,Z,Q){try{return JSON.parse($)}catch{throw new Z08(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function FV6($){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:HV6(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 UV6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?vJ(Q.function.parameters):vJ({type:"object",properties:{}});return[Q.function.name,D$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function NV6($){if(!$)return;return{openai:{response_format:$}}}function BV6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function ee$($,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 $08($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var eI6=256,$V6,ZV6,QV6,YV6,XV6,JV6,GV6,WV6,Z08,Q08,Y08;var X08=O(()=>{b4();y$();gd();zK();$V6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),ZV6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),QV6=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(ZV6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),YV6=V1.object({type:V1.literal("text")}),XV6=V1.object({type:V1.literal("json_object")}),JV6=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()})}),GV6=V1.union([YV6,XV6,JV6]),WV6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(QV6),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($V6).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:GV6.optional(),user:V1.string().optional()});Z08=class Z08 extends Error{constructor($){super($);this.name="MessageConversionError"}};Q08=new e0;Q08.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tF("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(tF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=WV6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=KV6(J.model);if(!G)return $.json(tF("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)=>GE(E.providerId));if(!j)return $.json(tF("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(tF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=FV6(J.messages),N=J.tools?UV6(J.tools):void 0,B=NV6(J.response_format),D=BV6(),L=Math.floor(Date.now()/1000);if(J.stream)return TB($,async(w)=>{let j=ee$(F,U,N,J,B,$.req.raw.signal);try{let E=aL(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>=eI6)await q()}else if(k.type==="tool-call"){await q();let M=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:M,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:$08(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=ee$(F,U,N,J,B,$.req.raw.signal),j=await rL(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:$08(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(tF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(tF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(tF(X.message,"server_error"),500)}});Y08=Q08});function DV6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function J08(){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=u0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!iZ(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(xJ0(U)!==J)continue;if(!DV6(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 G08=O(()=>{y$();jG()});var K08;var W08=O(()=>{K08={name:"decocms",version:"4.374.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 wV6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??LV6}}var H08,LV6="https://ph.studio.decocms.com",F08;var U08=O(()=>{y$();Wr();yf();k5();t1();D31();W08();H08=new e0;H08.get("/",($)=>{let Z={version:K08.version,theme:u5$(),...pW().logo&&{logo:pW().logo},...oN()&&{internalUrl:zh1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:qn$(),posthog:wV6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:kB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});F08=H08});function pd($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function mW1($){return(pd($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function B08($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pd($))}&sz=${Z}`}function N08($,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 D08($){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()?N08(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):N08(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var sb,jV6,EV6,zV6,PV6,O08;var L08=O(()=>{sb=m0.enum(["good","bad","neutral"]),jV6=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:sb.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 $})),EV6=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(jV6)),zV6={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()},PV6=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:sb.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:sb.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:sb.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:sb.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(EV6).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:sb.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:sb.optional()})).min(1)})]),O08=m0.object({...zV6,template:PV6})});function _I0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=O08.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 iW1=O(()=>{L08()});import{join as w08}from"path";async function TV6($){try{let Z=await fetch(`${xH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(AV6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=_I0(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()||mW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function P3($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function RV6($,Z){let Q=pd($),Y=Z?.brand?.trim()||mW1(Q),X=B08(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=D08({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${P3(W)}</title>`,`<meta name="description" content="${P3(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="${P3(W)}" />`,`<meta property="og:description" content="${P3(K)}" />`,`<meta property="og:url" content="${P3(G)}" />`,`<meta property="og:image" content="${P3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${P3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${P3(W)}" />`,`<meta name="twitter:description" content="${P3(K)}" />`,`<meta name="twitter:image" content="${P3(H)}" />`,`<meta name="twitter:image:alt" content="${P3(F)}" />`,`<link rel="canonical" href="${P3(G)}" />`,`<link rel="icon" href="${P3(X)}" sizes="any" />`].join(`
|
|
3391
|
+
`;await je$(Z.repo,L);let w=D[0]??`${TI0(Y)}/${kW1(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 yW1(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 Ee$(Z,F.values(),X),{decofile:B,skipped:D}=F$0(N);if(D.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:tW(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:cI6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof z6)||J>=hI6-1)throw N;await P$(C7(2000,200,J,2,0.5))}}}function cI6($){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 J11(Y,$.deps.coAuthor)}var hI6=3,cW1;var ye$=O(()=>{aE0();wI0();X6();m$();OZ();RI0();cW1=new Map});import{createHmac as ge$,randomBytes as dI6,timingSafeEqual as mI6}from"crypto";function he$(){if(CI0)return CI0;let $;try{let Z=O0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return CI0=$?Buffer.from($):dI6(32),CI0}function dW1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+iI6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=ge$("sha256",he$()).update(Y).digest("base64url");return`${Y}.${X}`}function ue$($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(ge$("sha256",he$()).update(Y).digest("base64url"));if(X.length!==J.length||!mI6(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 iI6=21600000,CI0=null;var le$=O(()=>{t1()});import{z as id}from"zod";function nI6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&pI6.test($)}function pe$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function w$0($){let Z=$.get("decofileScope");return iu($.var.studioContext,Z.organizationId,Z.githubRepo)}function j$0($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof z6)return $.json({error:Q},409);let Y=PG(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 ne$(){let $=new e0;return $.use("/:virtualMcpId/:branch",ie$),$.use("/:virtualMcpId/:branch/*",ie$),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await w$0(Z),X=await ze$(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=dW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(pe$(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return j$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 w$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 j$0(Z,X)}}),$.patch("/:virtualMcpId/:branch",oI6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=rI6.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{LI0(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(VW1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await w$0(Z),W=await xe$(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:hd(Y)},J),K=dW1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:pe$(Z)})}catch(G){return j$0(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await w$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(PG(W)!==409)throw W;await VI0(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(PG(G)===409)return Z.json({error:"merge-conflict"},409);if(PG(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 j$0(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await w$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(PG(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0,lastCommitAt:null});throw J}}catch(Y){return j$0(Z,Y)}}),$}var pI6,ce$=500,de$=1048576,me$=1024,tI6=8388608,oI6,rI6,ie$;var te$=O(()=>{Z81();wI0();y$();vK();jW1();OI0();uW1();OZ();ye$();le$();hW1();RI0();EH();pI6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;oI6=l5({maxSize:tI6,onError:($)=>$.json({error:"Payload too large"},413)}),rI6=id.object({set:id.record(id.string(),id.unknown()).optional(),delete:id.array(id.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)<=ce$,{message:`Patch cannot touch more than ${ce$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=de$),{message:`Each block must be at most ${de$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=me$),{message:`Each block key must be at most ${me$} characters`}),ie$=DI0(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(!nI6(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||!ue$(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await e3(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(!HP0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=O$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 oe$=($)=>{let Z=new e0;if(Z.use("*",Ld),Z.use("*",Rt$),Z.route("/",RM0()),Z.route("/",Go$()),Z.route("/",pt$()),Z.route("/",La$()),Z.route("/",Wa$()),Z.route("/",Ba$()),Z.route("/",Ha$()),Z.route("/",UI0()),Z.route("/tools",Ta$()),Z.route("/",za$()),Z.route("/",hs$({kvStorage:$.kvStorage})),Z.route("/",ys$()),Z.route("/fs",as$({getConnection:$.getNatsConnection})),Z.route("/sandbox",fe$()),Z.route("/decofile",ne$()),Z.route("/",Xa$()),Z.route("/",$a$()),Z.route("/deco-sites",MM0()),Z.route("/hosting",bt$()),Z.route("/monitor",ct$()),Z.route("/sso",EM0()),Z.route("/",NI0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",St$()),$.mountDevAssets)Z.route("/dev-assets",SM0({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("/",_i$()),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",Qa$()),Z.route("/mcp",N20()),Z.route("/mcp/self",KI0()),Z.route("/mcp",O20()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var re$=O(()=>{y$();qt$();KM0();Ct$();h31();xt$();dt$();CM0();yb();f31();m31();gs$();us$();es$();Za$();ie();V31();L20();HW1();Ya$();Ja$();Ka$();Fa$();NW1();wa$();Pa$();BW1();Ra$();DW1();B20();be$();te$()});function sI6($){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 aI6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},se$=()=>{let $=new e0;return $.use("*",aI6),$.get("/",async(Z)=>{let Q=O0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await HJ(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:sI6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var ae$=O(()=>{y$();t1();Kq0()});import{z as V1}from"zod";function tF($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function KV6($){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 HV6($,Z,Q){try{return JSON.parse($)}catch{throw new Z08(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function FV6($){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:HV6(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 UV6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?vJ(Q.function.parameters):vJ({type:"object",properties:{}});return[Q.function.name,D$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function NV6($){if(!$)return;return{openai:{response_format:$}}}function BV6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function ee$($,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 $08($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var eI6=256,$V6,ZV6,QV6,YV6,XV6,JV6,GV6,WV6,Z08,Q08,Y08;var X08=O(()=>{b4();y$();gd();zK();$V6=V1.object({type:V1.literal("function"),function:V1.object({name:V1.string(),description:V1.string().optional(),parameters:V1.record(V1.string(),V1.unknown()).optional()})}),ZV6=V1.object({id:V1.string(),type:V1.literal("function"),function:V1.object({name:V1.string(),arguments:V1.string()})}),QV6=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(ZV6).optional()}),V1.object({role:V1.literal("tool"),content:V1.string(),tool_call_id:V1.string()})]),YV6=V1.object({type:V1.literal("text")}),XV6=V1.object({type:V1.literal("json_object")}),JV6=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()})}),GV6=V1.union([YV6,XV6,JV6]),WV6=V1.object({model:V1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:V1.array(QV6),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($V6).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:GV6.optional(),user:V1.string().optional()});Z08=class Z08 extends Error{constructor($){super($);this.name="MessageConversionError"}};Q08=new e0;Q08.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tF("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(tF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=WV6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=KV6(J.model);if(!G)return $.json(tF("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)=>GE(E.providerId));if(!j)return $.json(tF("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(tF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=FV6(J.messages),N=J.tools?UV6(J.tools):void 0,B=NV6(J.response_format),D=BV6(),L=Math.floor(Date.now()/1000);if(J.stream)return TB($,async(w)=>{let j=ee$(F,U,N,J,B,$.req.raw.signal);try{let E=aL(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>=eI6)await q()}else if(k.type==="tool-call"){await q();let M=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:M,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:$08(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=ee$(F,U,N,J,B,$.req.raw.signal),j=await rL(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:$08(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(tF("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(tF(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(tF(X.message,"server_error"),500)}});Y08=Q08});function DV6($){if(typeof $!=="object"||$===null)return!1;let Q=$.githubRepo?.url;return typeof Q==="string"&&Q.length>0}function J08(){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=u0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!iZ(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(xJ0(U)!==J)continue;if(!DV6(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 G08=O(()=>{y$();jG()});var K08;var W08=O(()=>{K08={name:"decocms",version:"4.375.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 wV6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??LV6}}var H08,LV6="https://ph.studio.decocms.com",F08;var U08=O(()=>{y$();Wr();yf();k5();t1();D31();W08();H08=new e0;H08.get("/",($)=>{let Z={version:K08.version,theme:u5$(),...pW().logo&&{logo:pW().logo},...oN()&&{internalUrl:zh1()},...O0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!O0().firecrawlApiKey,hostingEnabled:!!O0().controlplaneRestUrl&&!!O0().controlplaneServiceToken,hostingControlPlaneGa:O0().hostingControlPlaneGa,monitorEnabled:!!O0().clickhouseAnalyticsUrl&&!!O0().clickhouseAnalyticsPassword,monitorGa:O0().monitorGa,plansEnabled:O0().plansEnabled,auth:qn$(),posthog:wV6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:kB()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});F08=H08});function pd($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function mW1($){return(pd($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function B08($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(pd($))}&sz=${Z}`}function N08($,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 D08($){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()?N08(`${X.trim().replace(/\s+/g," ")} \u2014 ${G}`,200):N08(`How does ${Q} really perform? ${G}`,200);return{title:J,description:W}}import{z as m0}from"zod";var sb,jV6,EV6,zV6,PV6,O08;var L08=O(()=>{sb=m0.enum(["good","bad","neutral"]),jV6=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:sb.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 $})),EV6=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(jV6)),zV6={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()},PV6=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:sb.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:sb.optional()}),m0.object({template:m0.literal("stats"),stats:m0.array(m0.object({value:m0.coerce.string(),label:m0.coerce.string(),tone:sb.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:sb.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(EV6).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:sb.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:sb.optional()})).min(1)})]),O08=m0.object({...zV6,template:PV6})});function _I0($){let Z=[],Q=[...$.sections].sort((X,J)=>X.position-J.position).map((X)=>{let J=O08.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 iW1=O(()=>{L08()});import{join as w08}from"path";async function TV6($){try{let Z=await fetch(`${xH({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(AV6)});if(!Z.ok)return null;let Q=await Z.json(),{deck:Y}=_I0(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()||mW1($),score:Y.meta.scores?.cover??G?.score?.value,verdict:X?.annotation?.trim()||X?.headline?.trim()||void 0}}catch{return null}}function P3($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function RV6($,Z){let Q=pd($),Y=Z?.brand?.trim()||mW1(Q),X=B08(Q,128),G=`${(O0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=D08({brand:Y,domain:Q,score:Z?.score,verdict:Z?.verdict}),H=`${G}/og.png`,F=`${Y} commerce report by decocms`;return[`<title>${P3(W)}</title>`,`<meta name="description" content="${P3(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="${P3(W)}" />`,`<meta property="og:description" content="${P3(K)}" />`,`<meta property="og:url" content="${P3(G)}" />`,`<meta property="og:image" content="${P3(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${P3(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${P3(W)}" />`,`<meta name="twitter:description" content="${P3(K)}" />`,`<meta name="twitter:image" content="${P3(H)}" />`,`<meta name="twitter:image:alt" content="${P3(F)}" />`,`<link rel="canonical" href="${P3(G)}" />`,`<link rel="icon" href="${P3(X)}" sizes="any" />`].join(`
|
|
3392
3392
|
`)}function qV6($,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}
|
|
3393
3393
|
</head>`)}function j08($){let Z=new e0;return Z.get("/:domain/og.png",async(Q)=>{let Y=pd(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(w08($,"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(`${xH({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(MV6)}),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=$?w08($,"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 TV6(pd(Y)),K=RV6(Y,W);return Q.html(qV6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var AV6=2500,MV6=1e4;var E08=O(()=>{y$();iW1();nz();t1()});function E$0($,Z){return fetch(`${xH({})}${$}`,Z)}async function IV6($,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 E$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}=_I0(G);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:G.scanned_at,drops:K}}var VV6,qB,z08=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},P08;var A08=O(()=>{y$();aJ();nz();iW1();VV6=new Set(["complete","errored","terminated","unknown"]),qB=new e0;qB.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});qB.use("/link-token/*",z08);qB.use("/suggest",z08);qB.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 IV6(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)}});qB.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 E$0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${pz({})}`},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)}});qB.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await E$0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${pz({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:VV6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});qB.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await E$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)}});qB.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await E$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:[]})}});P08=qB});var kV6=1048576,pW1;var T08=O(()=>{y$();vK();t1();eJ1();pW1=new e0;pW1.post("/webhook",l5({maxSize:kV6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=O0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!yp$(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=gp$(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await hp$(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as SV6}from"crypto";function vV6($,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 SV6(Buffer.from(X),Buffer.from(Y))}function fV6($,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 R08($){let Z=new e0;return Z.post("/webhook",l5({maxSize:CV6,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(!vV6(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"&&!_V6.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 k11())?.markTenantPoolsDirty(F,H)??[];return Q.json({ok:!0,pools:N})}let W=fV6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await bV6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function bV6($,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 Z2$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var CV6=5242880,_V6;var q08=O(()=>{y$();vK();KK();rZ();_V6=new Set(["check_suite","issue_comment"])});function M08($){let Z=new BB($.db,new AY($.encryptionKey)),Q=new e0;return Q.get("/attachments/:token",async(Y)=>{let X=AP$(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 nY(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$();LD();I81();Jw()});function V08($){let Z=new BB($.db,new AY($.encryptionKey));async function Q(X,J){let G=Nu$(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;let K=await aX($.db,W.organizationId);if(!K)return;if(await Uq0(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:xV6}),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 xV6=1048576;var k08=O(()=>{y$();vK();LD();Z10();Kw()});import{DBOS as vI0,SchedulerMode as yV6}from"@dbos-inc/dbos-sdk";function C08($){tW1=$}function _08(){if(!tW1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return tW1}function v08(){let $=_08();return new BB($.db,new AY($.encryptionKey))}async function uV6($,Z){try{let Q=await v08().getById($);if(!Q?.enabled||!Q.boardId)return{integrationId:$,started:0};let Y=await aX(_08().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 nY(Q.siteUrl,Q.email,Q.apiToken),W=`(${await J.getBoardScopeJql(Q.boardId)}) AND status CHANGED AFTER "-${S08}m"`,K=0,H;for(let F=0;F<hV6;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 Uq0(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 lV6($,Z){let Q=new Date($.getTime()-S08*60000),Y=await vI0.runStep(()=>v08().listEnabledIds(),{name:"loadJiraIntegrations"});if(Y.length===0)return;let X=await Promise.all(Y.map((J)=>vI0.runStep(()=>uV6(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 f08(){if(nW1)return;nW1=vI0.registerWorkflow(lV6,{name:"jiraTriggerSweepWorkflow"}),vI0.registerScheduled(nW1,{name:"jiraTriggerSweepWorkflow",crontab:gV6,mode:yV6.ExactlyOncePerIntervalWhenActive})}var gV6="7-59/10 * * * *",S08=15,hV6=5,tW1=null,nW1=null;var b08=O(()=>{LD();Kw();Jw();Z10()});function x08($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var y08,cV6,dV6,g08;var h08=O(()=>{y$();iW();ml();$P();y08=new e0,cV6=["range","if-none-match","if-modified-since"],dV6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];y08.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Od($))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 Re(Y,Z);if(!X)throw new X$(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&fX()){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 x08(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of cV6){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 dV6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),x08(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});g08=y08});var z$0=_((ab)=>{var mV6=ab&&ab.__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]}),iV6=ab&&ab.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))mV6(Z,$,Q)};Object.defineProperty(ab,"__esModule",{value:!0});iV6(jJ(),ab)});var c08=_((u08)=>{Object.defineProperty(u08,"__esModule",{value:!0});u08.version=void 0;u08.version="3.4.0"});var i08=_((oF)=>{var pV6=oF&&oF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(oF,"__esModule",{value:!0});oF.NodeTransport=oF.VERSION=void 0;oF.nodeResolveHost=aV6;var O5=z$0(),nV6=A0("net"),oW1=A0("tls"),tV6=A0("path"),d08=A0("fs"),oV6=pV6(A0("dns")),rV6=c08();oF.VERSION=rV6.version;var sV6="nats.js";class m08{socket;version;lang;yields=[];signal=(0,O5.deferred)();closedNotification=(0,O5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=sV6,this.version=oF.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,nV6.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,tV6.resolve)($),!(0,d08.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,d08.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,oW1.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,oW1.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 oW1.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}}oF.NodeTransport=m08;function aV6($){let Z=(0,O5.deferred)();return oV6.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 r08=_((o08)=>{Object.defineProperty(o08,"__esModule",{value:!0});o08.connect=eV6;var p08=i08(),n08=z$0(),t08=z$0();function eV6($={}){if((0,t08.hasWsProtocol)($))return Promise.reject(t08.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,n08.setTransportFactory)({factory:()=>{return new p08.NodeTransport},dnsResolveFn:p08.nodeResolveHost}),n08.NatsConnectionImpl.connect($)}});var s08=_((MB)=>{var Zk6=MB&&MB.__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]}),Qk6=MB&&MB.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Zk6(Z,$,Q)};Object.defineProperty(MB,"__esModule",{value:!0});MB.connect=void 0;var Yk6=r08();Object.defineProperty(MB,"connect",{enumerable:!0,get:function(){return Yk6.connect}});Qk6(z$0(),MB)});function Z18($){let Z=$?.connectFn??Wk6,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:Gk6,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=C7(Jk6,Xk6,D-1,2,0.5);await P$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let D=B?.creds?a08.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=$18.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 Wk6($){return e08.connect($)}var a08,e08,$18,Xk6=100,Jk6=3000,Gk6=3000;var Q18=O(()=>{m$();a08=V(wm(),1),e08=V(s08(),1),$18=V(JU(),1)});function rW1($,Z){return`${$}.${Z}`}class sW1{cache;constructor($){this.cache=Xd({ttlMs:$?.ttlMs??Kk6,maxSize:$?.maxSize??Hk6})}async get($,Z){return this.cache.get(rW1($,Z))??null}async set($,Z,Q){this.cache.set(rW1($,Z),Q)}async invalidate($,Z){this.cache.delete(rW1($,Z))}teardown(){this.cache.clear()}}var Kk6=600000,Hk6=5000;var Y18=()=>{};function fI0($,Z){return`${$}:${Z}`}function aW1($){let Z=Xd({ttlMs:$?.ttlMs??Fk6,maxSize:$?.maxSize??Uk6}),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(X18,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(fI0(K,H))},set(K,H,F){Z.set(fI0(K,H),F)},invalidate(K,H){Z.delete(fI0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(X18),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(fI0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var X18="studio.ai-provider-keys.invalidate",Fk6=30000,Uk6=5000;var J18=()=>{};class eW1{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 G18=($)=>{let Z;return()=>Z??=$()},$K1,ZK1;var W18=O(()=>{W6();$K1=G18(()=>Q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),ZK1=G18(()=>Q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function jk6($=F18){return{name:AF,subjects:[`${q61}.>`],storage:xK.StorageType.File,max_age:Dk6,max_bytes:Lk6,max_msgs_per_subject:wk6,discard:xK.DiscardPolicy.Old,retention:xK.RetentionPolicy.Limits,duplicate_window:Ok6,num_replicas:$}}class U18{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 K18($){let Z=H18.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function Ak6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,Bk6().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 Tk6($,Z){return $.info?.cluster?Z:1}function Rk6($){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 QK1{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=jk6(X);try{await Y.streams.info(AF),await Y.streams.update(AF,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(AF,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(AF),await Y.streams.add(J);else throw G}},Q=await A8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await xK.jetstreamManager($),X=Tk6($,F18);try{await Z(Y,X)}catch(J){if(X<=1||!Rk6(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:$c});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=Ak6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=yR$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=I61(H,{runId:Z}),N=performance.now()-F;$K1().record(N),ZK1().add(1,{"org.id":Y??"unknown"}),Pk6?.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?K18(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(),zk6)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:K18(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:$c}),!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=I61(Z,{runId:$,dedup:Q});$K1().record(performance.now()-X),ZK1().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=xR$({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"?xK.DeliverPolicy.New:xK.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=Dw($),W;try{W=await A8(async()=>{return(await Y.consumers.get(AF,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:$c})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=hA0({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(bA0()).pipeThrough(xA0()).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(AF,{filter:Dw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var xK,H18,Nk6=($)=>{let Z;return()=>Z??=$()},Bk6,Dk6=86400000000000,Ok6=120000000000,Lk6=4294967296,F18,wk6=500000,Ek6,zk6,Pk6;var N18=O(()=>{m$();V61();uA0();yA0();W6();W18();xK=V(JU(),1),H18=V(wm(),1),Bk6=Nk6(()=>Q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),F18=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);Ek6=process.env.STREAM_ENCODE_TRACE==="1",zk6=process.env.DECOPILOT_STREAM_TRACE==="1";Pk6=Ek6?new U18:null});function bI0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,ZH(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 B18=O(()=>{q8()});class YK1{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 qk6($,Z){let Q=$.startsWith("thread:")?HK($):$;return[...new Set([Z,Q].filter((Y)=>!!Y))]}async function D18($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await HF($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await Ul($,{threadId:X,runBranch:G?.branch}),K=qk6(W,await Wz0($,X)),H=await ks($,Q,Ye0(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 CG(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 O18=O(()=>{OZ();MG();rZ()});async function L18($,Z,Q){let Y=Z.organizationId;if(!eX(Z))return!1;if(!_f(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=rH(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await y6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),r$(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var w18=O(()=>{A4();$Y();gl();LK();$9()});function _k6($){return $ instanceof gY}function vk6($,Z){return Z-$>=Sk6}class XK1{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??Mk6;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??Vk6,Q=this.options.itemIntervalMs??Ik6,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()-P81),f41);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()-Ck6));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 C41(this.taskBoard,X,Y),await _41(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!==T$.progress||G.assigneeId!==o$)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await wK(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),_k6(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()+kk6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==T$.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),r$(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(!vk6(EN(Q,Z.reviewCycleStartedAt),Date.now()))return;await EF($,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(!eX(Y))return!1;let X=Y.assigneeId===o$,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 D18(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 ul(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 L18(G,Y,W))return!0;if(await Iq$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!I41(W))return!1;return await aP0(G,Y,{previewMatchesHead:V41(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await Fw($,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 Mk6=60000,Ik6=300000,Vk6=50,kk6=60000,Sk6=900000,Ck6=120000;var j18=O(()=>{A4();O41();O18();zF();be();LK();w18();$9();zG();b41();rZ();Ke();hl()});import{readdir as fk6,rm as xI0}from"fs/promises";import{join as yI0}from"path";async function gI0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-bk6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await eb($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await E18($,X,Z);else if(!X.startsWith(".")){let J=yI0($,X),G=await eb(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await E18(J,K,Z)}if((await eb(J)).length===0)await xI0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function E18($,Z,Q){let Y=0,X=yI0($,Z),J=await eb(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=yI0(X,W),H=await eb(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=yI0(K,U);await xI0(B,{recursive:!0,force:!0}),Y++}}if((await eb(K)).length===0)await xI0(K,{recursive:!0,force:!0})}if((await eb(X)).length===0)await xI0(X,{recursive:!0,force:!0});return Y}async function eb($){try{return(await fk6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var bk6=30;var JK1=()=>{};import{DBOS as GK1,SchedulerMode as xk6}from"@dbos-inc/dbos-sdk";async function gk6(){let $=[tG(),$x(),aF()],Z=0;for(let Q of $)try{Z+=await gI0(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 hk6($,Z){await GK1.runStep(()=>gk6(),{name:"monitoringRetention"})}function P18(){if(z18)return;z18=!0;let $=GK1.registerWorkflow(hk6,{name:"monitoringRetentionWorkflow"});GK1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:yk6,mode:xk6.ExactlyOncePerIntervalWhenActive})}var yk6="23 4 * * *",z18=!1;var A18=O(()=>{M3();JK1()});function T18($){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 XQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await JP($.db,Z,Y.role);return X.boundAuth=iJ1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new KE(Q,void 0,X.boundAuth,Y.role,"self"),Hw(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var R18=O(()=>{LW();iH()});function uk6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function lk6(){return{services:uk6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function dk6(){for(let $ of ck6)$()}function q18($){let Z=[...WK1.logs,$];WK1={...WK1,logs:Z.length>500?Z.slice(-500):Z},dk6()}function KK1(){return mk6}var WK1,ck6,mk6=!1;var HK1=O(()=>{WK1=lk6(),ck6=new Set});import{EventEmitter as ik6}from"events";var FK1;var M18=O(()=>{HK1();FK1=new ik6;FK1.on("request",($)=>{q18($)})});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=nd(N.params.name),D=N.params.arguments||{},L=Object.keys(D).map((j)=>nd(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}${nd(N.method)}${q5.reset}`}}catch{}}let W=nd(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${q5.mcp}${nd(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=nk6(Y),H=G?"\u25C0":"\u2190";if(!KK1())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=pk6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,D=G?"\u25B6":"\u2192";if(!KK1())console.log(`${q5.dim}${D}${q5.reset} ${K}${Y}${q5.reset} ${W}${J?` ${J}`:""} ${N}${U}${q5.reset} ${q5.duration}${B}${q5.reset}`);FK1.emit("request",{method:Y,path:nd(X),status:U,duration:F,timestamp:new Date})}}}var q5,pk6=($)=>{if($>=500)return q5.serverError;if($>=400)return q5.clientError;if($>=300)return q5.redirect;return q5.ok},nk6=($)=>{return q5[$]||q5.reset},nd=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var V18=O(()=>{HK1();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 _18}from"crypto";import{mkdir as tk6,readdir as ok6,rm as k18,stat as v18}from"fs/promises";import{join as NK1,relative as rk6}from"path";import{z as V$}from"zod";function b18($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return NK1(sk6,Z)}function x18($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function UK1($,Z){let Q=b18($),Y=x18(Z);return NK1(Q,Y)}function ak6($,Z,Q,Y){let X=O0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return _18("sha256",X).update(J).digest("hex")}function C18($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=ak6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${x18(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function y18($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${_18("md5","etag").update(Y).digest("hex")}"`}async function g18($,Z,Q,Y,X){try{let J=await ok6($,{withFileTypes:!0});for(let G of J){let W=NK1($,G.name),H=rk6(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 g18(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 v18(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:y18(W,F.mtime,F.size)})}catch{}}}}catch{}}function h18($,Z){let Y=i($).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=b18(Y);await tk6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await g18(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=UK1(Y,J.key),W=await v18(G);return{contentType:c31(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:y18(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??S18;return{url:C18(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??S18;return{url:C18(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=UK1(Y,J.key);try{return await k18(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=UK1(Y,K);try{await k18(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function BK1($,Z,Q){let Y=h18(Z,Q),X=new qH({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 oY({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),yG(X,J,$,"mcp:dev-assets")}async function u18($,Z,Q,Y){let J=h18(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 sk6="./data/assets",S18=3600,f18,l18;var c18=O(()=>{t1();Gc();y$();Tt();sf();hQ();CM0();f18=new e0;f18.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return BK1($.req.raw,Z,Y)});l18=f18});var d18={};q4(d18,{mountDevRoutes:()=>ek6});function ek6($,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 BK1(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 u18(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",l18);let Q=new e0;Q.use("*",fK({mountPath:"/api/dev-assets"})),Q.route("/",SM0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var m18=O(()=>{y$();b31();CM0();c18()});import{sql as $S6}from"kysely";import{randomUUID as i18}from"crypto";import{z as ZS6}from"zod";async function YS6($){let Z=new Date().toISOString(),Q=i18(),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:i18(),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 $S6`SELECT
|
|
3394
3394
|
pg_notify('studio_events', ${Q}),
|