decocms 3.96.0 → 3.96.2
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-BrEgqy4C.js → AlertCircle-FaYlLB60.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-dqkJVgXk.js → ArrowUpRight-CMEW7Ba1.js} +1 -1
- package/dist/client/assets/{CheckCircle-BELFHeJ_.js → CheckCircle-CMcDenGk.js} +1 -1
- package/dist/client/assets/{ChevronDown-C02eYJK7.js → ChevronDown-Cz2v8JXS.js} +1 -1
- package/dist/client/assets/{ChevronLeft-CqiM2rGp.js → ChevronLeft-BoBv7zIH.js} +1 -1
- package/dist/client/assets/{ChevronRight-Rak0sf1y.js → ChevronRight-Cz20z_ev.js} +1 -1
- package/dist/client/assets/{ChevronUp-C2_z85hK.js → ChevronUp-X6k6isv7.js} +1 -1
- package/dist/client/assets/{DotsVertical-CrLTZ_rJ.js → DotsVertical-Dwv8KFka.js} +1 -1
- package/dist/client/assets/{Eye-KdT6fAXQ.js → Eye-CtAXQgZc.js} +1 -1
- package/dist/client/assets/{FilterLines-D9Fk5xgd.js → FilterLines-Dxww2_jm.js} +1 -1
- package/dist/client/assets/{Globe01-DD2vvH9Y.js → Globe01-B_mXOPCL.js} +1 -1
- package/dist/client/assets/{Globe04-Cp0kDyls.js → Globe04-BOV43hpp.js} +1 -1
- package/dist/client/assets/{HardDrive-CRLy3F5c.js → HardDrive-B6fQht_y.js} +1 -1
- package/dist/client/assets/{Key01-kiND7qp1.js → Key01-CSvdIDUO.js} +1 -1
- package/dist/client/assets/{LayoutLeft-BGayXB6j.js → LayoutLeft-BggwSrt1.js} +1 -1
- package/dist/client/assets/{LinkExternal01-CoTqsvA6.js → LinkExternal01-9s-JiCgO.js} +1 -1
- package/dist/client/assets/{Monitor01-DRh9jiNA.js → Monitor01-CGfghxgz.js} +1 -1
- package/dist/client/assets/{Palette-BQAv-HiM.js → Palette-CEDlT_A6.js} +1 -1
- package/dist/client/assets/{Play-Ctj-JyMN.js → Play-BYAYy8Zk.js} +1 -1
- package/dist/client/assets/{Plus-DQMsWKXp.js → Plus-BfiEcsuC.js} +1 -1
- package/dist/client/assets/{SearchMd-CTdZTSxj.js → SearchMd-ttwC6pv-.js} +1 -1
- package/dist/client/assets/{Settings02-DZoKzWEv.js → Settings02-Bn_L1e_A.js} +1 -1
- package/dist/client/assets/{Shield01-fOlgiTmp.js → Shield01-yDA-IgpA.js} +1 -1
- package/dist/client/assets/{Star01-CZqCpyvl.js → Star01-CvsWhns1.js} +1 -1
- package/dist/client/assets/{Stars01-Ae1PiOCP.js → Stars01-DDpW3iwz.js} +1 -1
- package/dist/client/assets/{Stars02-CEcEV2x1.js → Stars02-D0JqPOOj.js} +1 -1
- package/dist/client/assets/{Sun-BlaoOCgr.js → Sun-CnGP1aJO.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-ClsPCmf-.js → SwitchHorizontal01-CsZWjzla.js} +1 -1
- package/dist/client/assets/{Tool01-BFKHYBxu.js → Tool01-CnMDFmqR.js} +1 -1
- package/dist/client/assets/{Trash01-AyXF9MEf.js → Trash01-qX0fT75P.js} +1 -1
- package/dist/client/assets/{Upload01-DCmxXheu.js → Upload01-B2DBzDPJ.js} +1 -1
- package/dist/client/assets/{User01-BO7S3TIr.js → User01-ChoSpYQL.js} +1 -1
- package/dist/client/assets/{Users01-DfacWtOx.js → Users01-Db7lRWam.js} +1 -1
- package/dist/client/assets/{Users03-CqKlqVoH.js → Users03-ClWS1qeD.js} +1 -1
- package/dist/client/assets/{X-MB-OWrnU.js → X-D9jSw_Be.js} +1 -1
- package/dist/client/assets/{XCircle-DcrNWY52.js → XCircle-DXFoP4my.js} +1 -1
- package/dist/client/assets/{XClose-C0Njrlhp.js → XClose-DfTtcGnw.js} +1 -1
- package/dist/client/assets/{Zap-BeSLks75.js → Zap-C4qqtpYK.js} +1 -1
- package/dist/client/assets/{ZapSquare-CpJG9Oj7.js → ZapSquare-Dha3zAca.js} +1 -1
- package/dist/client/assets/{ZoomOut-C7eIvwp9.js → ZoomOut-CDbsNs0l.js} +1 -1
- package/dist/client/assets/{access-gate-BTwMUx8s.js → access-gate-CzJCWf3n.js} +1 -1
- package/dist/client/assets/{add-section-modal-j_jXpJBA.js → add-section-modal-DBtL3Si-.js} +1 -1
- package/dist/client/assets/{agent-icon-DcWi6oQf.js → agent-icon-BrZKAhYh.js} +1 -1
- package/dist/client/assets/{agents-list-D0AfDGuT.js → agents-list-CUSyj1MS.js} +1 -1
- package/dist/client/assets/{ai-providers-BuVR6Fq-.js → ai-providers-C4Ia9jwP.js} +1 -1
- package/dist/client/assets/{alert-dialog-DhnepmPL.js → alert-dialog-Ca6tFXiO.js} +1 -1
- package/dist/client/assets/{alert-RMwHcRZt.js → alert-ys3LgrIi.js} +1 -1
- package/dist/client/assets/{app-editor-0tpnZ9z8.js → app-editor-DUXhynck.js} +1 -1
- package/dist/client/assets/{auth-MTgCv3B6.js → auth-BbfHOucl.js} +1 -1
- package/dist/client/assets/{auth-catchall-CVuOJ40y.js → auth-catchall-LJj0-ZJy.js} +1 -1
- package/dist/client/assets/{auth-entry-DNo7lJtC.js → auth-entry-CIxthQN4.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BkcesqQu.js → auth-split-layout-CHT3lvZf.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-xA4lKCG1.js → authenticate-and-persist-oauth-B6f7RH0n.js} +1 -1
- package/dist/client/assets/{automation-list-row-lXLMGjAl.js → automation-list-row-BVE--hNF.js} +1 -1
- package/dist/client/assets/{automation-runs-BNqiryvr.js → automation-runs-33y1-dsA.js} +1 -1
- package/dist/client/assets/{automations-Dh_fnqca.js → automations-BDxwjQMF.js} +1 -1
- package/dist/client/assets/{avatar-Bmaq3oui.js → avatar-BWKwD5Di.js} +1 -1
- package/dist/client/assets/{badge-DgW_sNSd.js → badge-BmSh2sc_.js} +1 -1
- package/dist/client/assets/{block-document-4RcwatC8.js → block-document-N9sSaQ83.js} +1 -1
- package/dist/client/assets/{brand-context-D457Ff4i.js → brand-context-B0FYOcPC.js} +1 -1
- package/dist/client/assets/{buckets-BLZkDBf0.js → buckets-B6pFzAna.js} +1 -1
- package/dist/client/assets/{capability-load-error-DqYgq0OP.js → capability-load-error-BK2b7DLu.js} +1 -1
- package/dist/client/assets/{card-CdB8pO82.js → card-DhErvRP4.js} +1 -1
- package/dist/client/assets/{category-editor-DyYEMWv7.js → category-editor-CSfVA33k.js} +1 -1
- package/dist/client/assets/{chat-context-r3NULPrq.js → chat-context-CdKWwfUL.js} +1 -1
- package/dist/client/assets/{checkbox-D8lwJ8xg.js → checkbox-B4xLxg37.js} +1 -1
- package/dist/client/assets/{cli-auth-success-D4W1hh6D.js → cli-auth-success-B9lWGvmY.js} +1 -1
- package/dist/client/assets/{collection-detail-DZE_RwOf.js → collection-detail-DytGYqvv.js} +1 -1
- package/dist/client/assets/{collection-display-button-ZIEr6UdN.js → collection-display-button-CQ1SlSCq.js} +1 -1
- package/dist/client/assets/{collection-search-COO4vS-f.js → collection-search-CuMdEV6i.js} +1 -1
- package/dist/client/assets/{collection-tabs-pohcUS35.js → collection-tabs-BuVbk6Eq.js} +1 -1
- package/dist/client/assets/{command-BEOutwEN.js → command-DbEgvZSz.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-vmBc36Wn.js → commerce-onboarding-C1JhinU_.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-D1W6pIZ9.js → connect-desktop-dialog-DEWMdtOJ.js} +1 -1
- package/dist/client/assets/{connection-card-DvFBQwK2.js → connection-card-Do_UANDj.js} +1 -1
- package/dist/client/assets/{connection-detail-BiatZeVg.js → connection-detail-AsQQ6Xsh.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-DRUXP-X_.js → connection-form-helpers-DONFhUlf.js} +1 -1
- package/dist/client/assets/{connections-BgPPdK1V.js → connections-C7Psb2Ew.js} +1 -1
- package/dist/client/assets/{context-menu-CCN5BrKr.js → context-menu-BLV9sojw.js} +1 -1
- package/dist/client/assets/{decopilot-CxPeW6hk.js → decopilot-B9mlIyhO.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-BnDSFddS.js → decopilot-sse-pool-C60fv9BJ.js} +1 -1
- package/dist/client/assets/{dialog-DdTE3CAC.js → dialog-BAc8Vaii.js} +1 -1
- package/dist/client/assets/{domain-settings-BjzJ5uyt.js → domain-settings-12UImtTf.js} +1 -1
- package/dist/client/assets/{drawer-DwwZCC3K.js → drawer-pTItJq8W.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DKzuZbGW.js → dropdown-menu-D_xWXhRN.js} +1 -1
- package/dist/client/assets/{empty-state-rYwga-lm.js → empty-state-CzHEIC3V.js} +1 -1
- package/dist/client/assets/{extract-connection-data-B4owvROB.js → extract-connection-data-CeD77B9M.js} +1 -1
- package/dist/client/assets/{file-explorer-BtKyCE-H.js → file-explorer-BWMDecOc.js} +1 -1
- package/dist/client/assets/{file-type-icon-wUDm0Suu.js → file-type-icon-B-rGzXCF.js} +1 -1
- package/dist/client/assets/{files-CtXlrxsm.js → files-DwwaOCBF.js} +1 -1
- package/dist/client/assets/{form-DbBK-5wv.js → form-G5RxtsU7.js} +1 -1
- package/dist/client/assets/{general-DF27snE9.js → general-DTevq3kj.js} +1 -1
- package/dist/client/assets/{github-repo-picker-D-tUatSG.js → github-repo-picker-Ciw2QrHc.js} +1 -1
- package/dist/client/assets/{hooks-INfKdXVO.js → hooks-C9jnWGgc.js} +1 -1
- package/dist/client/assets/{import-from-deco-dialog-le5qLPLs.js → import-from-deco-dialog-DsSmY1ww.js} +1 -1
- package/dist/client/assets/{index-B2UoUa7-.js → index-BA60P8Ji.js} +5 -5
- package/dist/client/assets/{index-DRm-BOiP.js → index-BN44VdIk.js} +1 -1
- package/dist/client/assets/{index-D8Uvg14I.js → index-BeZ5MnFY.js} +1 -1
- package/dist/client/assets/{index-BTgWpT9v.js → index-Bom29IhX.js} +1 -1
- package/dist/client/assets/{index-CUyflRk0.js → index-By09MUpu.js} +1 -1
- package/dist/client/assets/{index-ZWwLrXbl.js → index-BzayJ9Bz.js} +1 -1
- package/dist/client/assets/{index-EsOpLcz-.js → index-D8gm617Q.js} +1 -1
- package/dist/client/assets/{index-cLiT1dYJ.js → index-DTlIOAeh.js} +1 -1
- package/dist/client/assets/{index-Dnl2BpV5.js → index-DW-LTsBR.js} +1 -1
- package/dist/client/assets/{index-BQKrhCqr.js → index-XGl1XBeu.js} +28 -28
- package/dist/client/assets/{index-DX1mGsi2.js → index-jSi88Rb4.js} +1 -1
- package/dist/client/assets/{index-D1r046zx.js → index-mBpau4DA.js} +1 -1
- package/dist/client/assets/{index-Cn6fC_Ac.js → index-r6XUOTAc.js} +1 -1
- package/dist/client/assets/{index-redirect-_nLhO8q2.js → index-redirect-Crzgrzou.js} +1 -1
- package/dist/client/assets/{index-D_cJIjMW.js → index-ylCCv2rA.js} +1 -1
- package/dist/client/assets/{input-cOCMYrBp.js → input-DCY4YfHV.js} +1 -1
- package/dist/client/assets/{integration-icon-BDOKXt2t.js → integration-icon-Bhf5B9Xh.js} +1 -1
- package/dist/client/assets/{label-BI0j7uY8.js → label-Q_gLLbCl.js} +1 -1
- package/dist/client/assets/{login-Tnea6rjC.js → login-B430EaYr.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CZJDhaE3.js → mcp-oauth-iXwCa0Zp.js} +1 -1
- package/dist/client/assets/{members-ELCKwmM1.js → members-BKYcQNI3.js} +1 -1
- package/dist/client/assets/{monaco-editor-DZJR8nuD.js → monaco-editor-CiNYSilI.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DVW1uxUq.js → monitoring-stats-row-qdRIJlIg.js} +1 -1
- package/dist/client/assets/{oauth-callback-BY0UQ4hx.js → oauth-callback-BCUycizt.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CdAJ6XTe.js → oauth-callback-ai-provider-BS_OQrKw.js} +1 -1
- package/dist/client/assets/{onboarding-DHGJq1nj.js → onboarding-BvRkdB1b.js} +1 -1
- package/dist/client/assets/{org-install-D0cgxy0P.js → org-install-CkKLrpd7.js} +1 -1
- package/dist/client/assets/{org-layout-CqQb7V03.js → org-layout-CD-2dDJn.js} +1 -1
- package/dist/client/assets/{organization-choice-CcykvGTC.js → organization-choice-CMhrsBr0.js} +1 -1
- package/dist/client/assets/{page-seo-form-B61j3DLN.js → page-seo-form-DXM8VUxR.js} +1 -1
- package/dist/client/assets/page-seo-sheet-CjM1jKNp.js +1 -0
- package/dist/client/assets/{popover-BFI2s-K5.js → popover-CFnD0naq.js} +1 -1
- package/dist/client/assets/{post-editor-Cx7_h-UZ.js → post-editor-CodAcsvH.js} +1 -1
- package/dist/client/assets/{preview-dialog-CfSpAFWk.js → preview-dialog-DnOlwoQd.js} +1 -1
- package/dist/client/assets/{primitives-ceFrDMZ8.js → primitives-B541kcX-.js} +1 -1
- package/dist/client/assets/{profile-CQj8hLnx.js → profile-BFcGVnlT.js} +1 -1
- package/dist/client/assets/project-app-view-DLPwbT_g.js +1 -0
- package/dist/client/assets/record-editor-D_mfd5lb.js +1 -0
- package/dist/client/assets/registry-C31f2K6-.js +2 -0
- package/dist/client/assets/{registry-layout-DNGdaDCg.js → registry-layout-DGy7a3QV.js} +1 -1
- package/dist/client/assets/{require-capability-Dv8CdaOQ.js → require-capability-SGNEbY0P.js} +1 -1
- package/dist/client/assets/{required-auth-layout-BI2vgegn.js → required-auth-layout-CJsqA3I9.js} +1 -1
- package/dist/client/assets/{reset-password-B1MVnY7V.js → reset-password-CnacIauS.js} +1 -1
- package/dist/client/assets/{roles-D8h9UhMY.js → roles-B4Hk2_0t.js} +1 -1
- package/dist/client/assets/{save-status-C6pdsybd.js → save-status-DFA3NvyH.js} +1 -1
- package/dist/client/assets/{scroll-area--KGkDlfc.js → scroll-area-IcgofytB.js} +1 -1
- package/dist/client/assets/{search-input-ClOkWtT1.js → search-input-BkAEXwuQ.js} +1 -1
- package/dist/client/assets/{secrets-CJZKcITI.js → secrets-CbITASed.js} +1 -1
- package/dist/client/assets/{sections-editor-D6nPxPBw.js → sections-editor-DFSUapr3.js} +1 -1
- package/dist/client/assets/{select-BpWT9NxB.js → select-DX1Uus8t.js} +1 -1
- package/dist/client/assets/{select-model-BUbOpgp-.js → select-model-DQMaaTnw.js} +1 -1
- package/dist/client/assets/{seo-editor-DeAuhtw-.js → seo-editor-BShGXrLT.js} +1 -1
- package/dist/client/assets/{settings-layout-Drs_RBsy.js → settings-layout-Cb0DTvxl.js} +1 -1
- package/dist/client/assets/{settings-section-D0PQML5z.js → settings-section-Bq5YTlZp.js} +1 -1
- package/dist/client/assets/{sheet-Bh_kypR-.js → sheet-BTALPPBs.js} +1 -1
- package/dist/client/assets/{shell-controls-Nmxnzdo8.js → shell-controls-CJXlzX9r.js} +1 -1
- package/dist/client/assets/{shell-layout-D9BdE-pr.js → shell-layout-BYTTAp6A.js} +1 -1
- package/dist/client/assets/{shell-route-loading-BPSGiR4a.js → shell-route-loading-D47bdt_v.js} +1 -1
- package/dist/client/assets/{sidebar-DPZoMbeP.js → sidebar-tvH340kk.js} +1 -1
- package/dist/client/assets/{skeleton-Ce4pjv8y.js → skeleton-grRO19cC.js} +1 -1
- package/dist/client/assets/{sortable.esm-BJQ3_vpH.js → sortable.esm-Oya5Wtwg.js} +1 -1
- package/dist/client/assets/{sso-Cvmi628s.js → sso-DdwUgV4l.js} +1 -1
- package/dist/client/assets/{store-DjSGMocW.js → store-KubBw28N.js} +1 -1
- package/dist/client/assets/store-registry-ChjO32T_.js +2 -0
- package/dist/client/assets/{studio-tools-prp9Lpwk.js → studio-tools-D9qQ-SAO.js} +1 -1
- package/dist/client/assets/{switch-DldSyEsh.js → switch-CcHSIQmd.js} +1 -1
- package/dist/client/assets/{table-CNvgb9Mo.js → table-CQJOAUHO.js} +1 -1
- package/dist/client/assets/{tabs-DZdnCzIX.js → tabs-DL6dks5C.js} +1 -1
- package/dist/client/assets/{task-status-DbhcaMw-.js → task-status-rit9b9rR.js} +1 -1
- package/dist/client/assets/{textarea-7wQk0SdM.js → textarea-BcjWac9H.js} +1 -1
- package/dist/client/assets/{toggle-group-CnVWeylZ.js → toggle-group-B5cdGqLs.js} +1 -1
- package/dist/client/assets/{toolbar-D2dJyxUi.js → toolbar-25fIAPVN.js} +1 -1
- package/dist/client/assets/{tooltip-BcZ7kxok.js → tooltip-ctsj-gZ9.js} +1 -1
- package/dist/client/assets/{types-CfcfJn-e.js → types-hV_ojb1M.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CYjRxPY4.js → use-ai-providers-C4kau1jW.js} +1 -1
- package/dist/client/assets/{use-automations-BKHbHQVe.js → use-automations-mX8n-ZXJ.js} +1 -1
- package/dist/client/assets/{use-capability-_zd_sWix.js → use-capability-DORYyokl.js} +1 -1
- package/dist/client/assets/{use-clock-tick-Dxhf7J79.js → use-clock-tick-CJUCP-tl.js} +1 -1
- package/dist/client/assets/{use-collections-CVtzAI_4.js → use-collections-B0wz8t2t.js} +1 -1
- package/dist/client/assets/{use-connection-BcgeGs-R.js → use-connection-U6zPYAZE.js} +1 -1
- package/dist/client/assets/{use-copy-D7-bM3_U.js → use-copy-CswPBcQD.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-sEOK3OGz.js → use-create-virtual-mcp-B6wrTISJ.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Dw5z0WsS.js → use-debounced-autosave-B1Hbw4NR.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BA5LApPZ.js → use-delete-connection-BydCfbsy.js} +1 -1
- package/dist/client/assets/{use-file-configs-BLlYdTvj.js → use-file-configs-Dj9MfQzP.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-B3z1ggE3.js → use-infinite-scroll-Vb3IWFcI.js} +1 -1
- package/dist/client/assets/{use-join-requests-DXZefKlG.js → use-join-requests-DIhEBJ2G.js} +1 -1
- package/dist/client/assets/{use-mcp-client-Ctg4zbCn.js → use-mcp-client-CKs2MDzi.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-Dv9w7cJn.js → use-mcp-prompts-DB8c9RYd.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CxaQCmvQ.js → use-mcp-tools-CTqttjuh.js} +1 -1
- package/dist/client/assets/{use-members-BdpapftV.js → use-members-BJ9TPDNE.js} +1 -1
- package/dist/client/assets/{use-mobile-XBBKLnBG.js → use-mobile-CxhWPi5V.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-wLnAUTat.js → use-navigate-to-agent-io8r-Kn8.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-N6OssZ7e.js → use-org-auth-client-Dyc1hd33.js} +1 -1
- package/dist/client/assets/{use-org-sso-BtCKgCqJ.js → use-org-sso-CHChVYs6.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DIOhz7Qp.js → use-organization-roles-DppCqZ-W.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CSB6B7Jr.js → use-organization-settings-DO7KjgJQ.js} +1 -1
- package/dist/client/assets/{use-registry-connections-D71Qe36n.js → use-registry-connections-UfZOjcfT.js} +1 -1
- package/dist/client/assets/{use-secrets-OpYJ3uj0.js → use-secrets-C0gItPLM.js} +1 -1
- package/dist/client/assets/{use-status-sounds-Bi6GrV2F.js → use-status-sounds-CQYZ_C3n.js} +1 -1
- package/dist/client/assets/{use-view-mode-Di33Xh4J.js → use-view-mode-CbuaRPKS.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BUu5xf_e.js → use-virtual-mcp-DUPC6OSZ.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BjsuDdb0.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-BWZEN4SK.js +1 -0
- package/dist/client/assets/{useSuspenseQueries-DuY6292-.js → useSuspenseQueries-BTeYaIwH.js} +1 -1
- package/dist/client/assets/{variant-calendar-BfW4hbwz.js → variant-calendar-B2eo4SlW.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DHDWPLEi.js → view-mode-toggle-DOZTQuzL.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/page-seo-sheet-BKFroR3I.js +0 -1
- package/dist/client/assets/project-app-view-DjTqKb4e.js +0 -1
- package/dist/client/assets/record-editor-DGroyIl1.js +0 -1
- package/dist/client/assets/registry-CeujA3jc.js +0 -2
- package/dist/client/assets/store-registry-BP6MDxTR.js +0 -2
- package/dist/client/assets/useInfiniteQuery-5pwPVyhJ.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-MlMUD9_u.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -80854,7 +80854,7 @@ ${$}`;_(Z);return}if(E(null,B),t.strategy==="count"){if(w--,w===0)_()}if(t.strat
|
|
|
80854
80854
|
SELECT * FROM link_sandboxes WHERE handle = $handle
|
|
80855
80855
|
`);function _(v){if(t===void 0)return!0;let h=$M(v),D=h&&$M(t)?SVu(t):t,g=h?SVu(v):YVu(v),O=WQt(D,g);return O===""||!O.startsWith("..")&&!SQt(O)}return{upsert(v){f.run({$handle:v.handle,$status:v.status,$sandboxPath:v.sandboxPath,$port:v.port??null,$previewUrl:v.previewUrl??null,$repoCloneUrl:v.repoCloneUrl??null,$branch:v.branch??null,$projectName:v.projectName??null,$error:v.error??null,$now:Date.now()})},list(){return l.all().map(j1i)},reconcile(){let v=Date.now();for(let h of l.all().map(j1i)){if(!_(h.sandboxPath)){c.run({$handle:h.handle,$now:v});continue}if(!$M(h.sandboxPath)){E.run({$handle:h.handle,$now:v});continue}if(h.status==="spawning"||h.status==="ready"||h.status==="failed"||h.status==="missing")$.run({$handle:h.handle,$now:v})}return l.all().map(j1i)},prune(v){let h=[],D=[],g=this.reconcile();for(let O of g){if(!_(O.sandboxPath)){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"outside_root",deletedFiles:!1});continue}if(v.missing&&O.status==="missing"){w.run({$handle:O.handle}),h.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"missing",deletedFiles:!1});continue}if(!v.merged||!$M(O.sandboxPath))continue;if(O.branch===null||O.branch.trim()===""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"no_branch",deletedFiles:!1});continue}if(!p2(O.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}let Z=p2(O.sandboxPath,["status","--porcelain"]);if(!Z.ok){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(Z.stdout.trim()!==""){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"dirty_worktree",deletedFiles:!1});continue}let B=LVu(O.sandboxPath,O.branch);if(B===null){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"git_unavailable",deletedFiles:!1});continue}if(!B){D.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"branch_not_merged",deletedFiles:!1});continue}JQt(O.sandboxPath,{recursive:!0,force:!0}),w.run({$handle:O.handle}),h.push({handle:O.handle,sandboxPath:O.sandboxPath,reason:"merged",deletedFiles:!0})}return{removed:h,skipped:D}},delete(v){w.run({$handle:v})},inspect(v){let h=d.get({$handle:v});if(h===null)return null;let D=j1i(h),g=0,O=null;if($M(D.sandboxPath)&&p2(D.sandboxPath,["rev-parse","--is-inside-work-tree"]).ok){let Z=p2(D.sandboxPath,["status","--porcelain"]);if(Z.ok){let B=Z.stdout.trim();g=B===""?0:B.split(`
|
|
80856
80856
|
`).length}if(D.branch!==null&&D.branch.trim()!=="")O=LVu(D.sandboxPath,D.branch)}return{handle:D.handle,branch:D.branch,sandboxPath:D.sandboxPath,dirtyCount:g,merged:O}},close(){u.close()}}}var dHi=()=>{};function QVu(i,u){let t=u?[["umount","-f",i]]:[["fusermount","-u",i],["umount",i]];for(let f of t)if(Bun.spawnSync(f,{stdout:"ignore",stderr:"ignore",timeout:5000}).exitCode===0)break}import{existsSync as HQt,readdirSync as bQt}from"fs";import{rm as RQt}from"fs/promises";import{join as HVu}from"path";async function bVu(i,u={}){let t=u.detach??CQt,f=u.exists??HQt,l=u.readdir??(($)=>bQt($)),c=u.rm??(($)=>RQt($,{recursive:!0,force:!0})),E=HVu(i,"org");if(f(E))for(let $ of l(E))t(HVu(E,$));await c(i)}var CQt=(i)=>QVu(i,process.platform==="darwin");var RVu=()=>{};import{join as MQt}from"path";function CVu(i){let u=i.purge??bVu;return{stopSandbox(t){return i.provider.deleteSandbox(t)},inspectSandbox(t){return i.registry.inspect(t)},async removeSandbox(t){try{return await u6(async()=>{if(await i.provider.deleteSandbox(t),i.provider.hasHandle(t))throw Error("Can't delete \u2014 run in progress");let l=i.registry.inspect(t)?.sandboxPath??MQt(i.dataDir,"sandboxes",t);await u(l)},{maxAttempts:2,minTimeout:250,jitter:0}),i.registry.delete(t),{ok:!0}}catch(f){let l=f instanceof J6?f.cause:f;return{ok:!1,error:l instanceof Error?l.message:String(l)}}}}}var MVu=N(()=>{Bl();RVu()});import{randomBytes as qQt}from"crypto";import{mkdir as VQt}from"fs/promises";import{createServer as rQt}from"net";import{join as mQt}from"path";function qVu(i,u){return Error(`sandbox failed to start: ${i}`,{cause:u})}function eQt(i){if(!(i instanceof Error))return!1;return i.name==="TimeoutError"||/timed out|timeout|operation was aborted|aborted/i.test(i.message)}function VVu(i){if(i instanceof Error){let u=i.cause;if(u instanceof Error&&u.message)return u.message;return i.message}return String(i)}function aQt(i){if(!i)return null;let u=i.trim().replace(/\/+$/,"");if(!u)return null;let t=u.split(/[/:]/).filter(Boolean).at(-1);if(!t)return null;return t.replace(/\.git$/i,"")||null}function oQt(i){return{repoCloneUrl:i.repo?.cloneUrl??null,branch:i.repo?.branch??null,projectName:aQt(i.repo?.cloneUrl)}}function rVu(i){let u=i.maxSandboxes??20,t=new Map,f=i.pickPort??sQt,l=i.fetchImpl??fetch,c=i.resolvePreviewUrl??((g,O)=>`http://127.0.0.1:${O}`),E=(g)=>mQt(i.dataDir,"sandboxes",g),$=(g)=>{try{i.registry?.upsert(g)}catch(O){console.warn(`[user-desktop] failed to persist sandbox lifecycle handle=${g.handle} status=${g.status}:`,O)}},w=(g)=>{try{i.onEvent?.(g)}catch{}},d=async(g)=>{let O=new AbortController,Z=setTimeout(()=>O.abort(),1500);try{let B=await l(`${g}/health`,{signal:O.signal});if(!B.ok)console.warn(`[user-desktop] probe ${g}/health \u2192 ${B.status} (treating as dead)`);return B.ok}catch(B){return console.warn(`[user-desktop] probe ${g}/health failed: ${B instanceof Error?B.message:String(B)} (treating as dead)`),!1}finally{clearTimeout(Z)}},_=(g)=>{console.warn(`[user-desktop] evicting dead daemon handle=${g.handle} port=${g.port}`);try{g.process.kill("SIGTERM")}catch{}if(t.get(g.handle)===g)t.delete(g.handle),$({handle:g.handle,status:"stopped",sandboxPath:E(g.handle),port:null,previewUrl:null,...g.registryMetadata,error:null}),w({handle:g.handle,phase:"evicted"})},v=new Map;function h(){if(t.size<u)return;let g=[...t.values()].filter((Z)=>Z.activeDispatchCount===0).sort((Z,B)=>Z.lastUsedAt-B.lastUsedAt);if(g.length===0){console.warn(`[user-desktop] at cap ${t.size}/${u} but every sandbox is pinned (active dispatch) \u2014 exceeding cap temporarily`);return}let O=g[0];console.log(`[user-desktop] evicting LRU victim handle=${O.handle} port=${O.port} (cap ${u} reached, size=${t.size})`);try{O.process.kill("SIGTERM")}catch{}t.delete(O.handle),$({handle:O.handle,status:"stopped",sandboxPath:E(O.handle),port:null,previewUrl:null,...O.registryMetadata,error:null}),w({handle:O.handle,phase:"evicted"})}let D=async(g)=>{let O=oQt(g),Z=E(g.handle);$({handle:g.handle,status:"spawning",sandboxPath:Z,port:null,previewUrl:null,...O,error:null}),w({handle:g.handle,phase:"spawning"}),h();let B,F=null,y;try{await VQt(Z,{recursive:!0}),console.log(`[user-desktop] ensure handle=${g.handle} repo=${g.repo?.cloneUrl??"(none)"} branch=${g.repo?.branch??"(none)"} runtime=${g.workload?.runtime??"(autodetect)"} pm=${g.workload?.packageManager??"(autodetect)"}`),y=qQt(24).toString("hex");let[j,A]=await Promise.all([f(),f()]);B=j,console.log(`[user-desktop] spawn handle=${g.handle} port=${B} devPort=${A} workdir=${Z}`),F=await Promise.resolve(i.spawnDaemon({workdir:Z,handle:g.handle,port:B,daemonToken:y,offloadAllowedHosts:g.offloadAllowedHosts??[],offloadAllowSameHostDev:g.offloadAllowSameHostDev??!1,orgFsConfigJson:g.orgFsConfigJson}));try{await i.waitForHealth(B)}catch(n){throw qVu("the sandbox didn't come online in time",n)}console.log(`[user-desktop] healthy handle=${g.handle} port=${B} \u2014 posting config`);try{await i.postConfig(B,A,{repo:g.repo,workload:g.workload,operator:g.operator},y)}catch(n){throw qVu(eQt(n)?"configuration timed out":"the sandbox rejected its configuration",n)}}catch(j){if(console.error(`[user-desktop] sandbox bring-up failed handle=${g.handle} port=${B??"(none)"}${F?" (killing daemon)":""}:`,j),F)try{F.kill("SIGKILL")}catch{}throw w({handle:g.handle,phase:"failed",error:VVu(j)}),$({handle:g.handle,status:"failed",sandboxPath:Z,port:null,previewUrl:null,...O,error:VVu(j)}),j}if(!F||B===void 0)throw Error("sandbox bring-up invariant violated");let T=`http://127.0.0.1:${B}`,U=c(g.handle,B);console.log(`[user-desktop] ready handle=${g.handle} port=${B} sandboxApiUrl=${T} previewUrl=${U}`);let I={handle:g.handle,port:B,process:F,sandboxApiUrl:T,previewUrl:U,lastUsedAt:Date.now(),activeDispatchCount:0,daemonToken:y,registryMetadata:O};if(t.set(g.handle,I),$({handle:g.handle,status:"ready",sandboxPath:Z,port:B,previewUrl:U,...O,error:null}),w({handle:g.handle,phase:"ready",port:B,previewUrl:U}),F.exited)F.exited.then(()=>{if(t.get(g.handle)===I)console.warn(`[user-desktop] daemon process exited unexpectedly handle=${g.handle} port=${B} \u2014 removing from cache`),t.delete(g.handle),$({handle:g.handle,status:"stopped",sandboxPath:Z,port:null,previewUrl:null,...O,error:null}),w({handle:g.handle,phase:"evicted"});else console.log(`[user-desktop] daemon process exited handle=${g.handle} port=${B} (already replaced/removed)`)});return{sandboxApiUrl:T,previewUrl:U,port:B}};return{async ensureSandbox(g){let O=t.get(g.handle);if(O){if(await d(O.sandboxApiUrl))return console.log(`[user-desktop] cache hit handle=${g.handle} port=${O.port} (alive)`),O.lastUsedAt=Date.now(),{sandboxApiUrl:O.sandboxApiUrl,previewUrl:O.previewUrl,port:O.port};console.warn(`[user-desktop] cache stale handle=${g.handle} port=${O.port} \u2014 respawning`),_(O)}let Z=v.get(g.handle);if(Z)return console.log(`[user-desktop] joining in-flight ensure handle=${g.handle}`),Z;let B=D(g).finally(()=>{v.delete(g.handle)});return v.set(g.handle,B),B},proxyPort(g){let O=t.get(g);if(O)O.lastUsedAt=Date.now();return O?.port??null},getDaemonToken(g){return t.get(g)?.daemonToken??null},hasHandle(g){return t.has(g)||v.has(g)},recordHit(g){let O=t.get(g);if(O)O.lastUsedAt=Date.now()},acquireDispatch(g){let O=t.get(g);if(!O)return()=>{};O.activeDispatchCount+=1;let Z=!1;return()=>{if(Z)return;Z=!0;let B=t.get(g);if(B)B.activeDispatchCount=Math.max(0,B.activeDispatchCount-1)}},listSandboxes(){return[...t.values()]},async deleteSandbox(g){let O=t.get(g);if(!O){console.log(`[user-desktop] delete handle=${g} (not found, no-op)`);return}if(O.activeDispatchCount>0){console.warn(`[user-desktop] delete handle=${g} port=${O.port} REFUSED \u2014 ${O.activeDispatchCount} active dispatch(es) in flight`);return}console.log(`[user-desktop] delete handle=${g} port=${O.port}`);try{O.process.kill("SIGTERM")}catch{}t.delete(g),$({handle:g,status:"stopped",sandboxPath:E(g),port:null,previewUrl:null,repoCloneUrl:null,branch:null,projectName:null,error:null}),w({handle:g,phase:"deleted"})},async shutdown(){console.log(`[user-desktop] shutdown \u2014 killing ${t.size} sandbox(es)`);for(let g of t.values())try{g.process.kill("SIGTERM")}catch{}t.clear()}}}function sQt(){return new Promise((i,u)=>{let t=rQt();t.unref(),t.on("error",u),t.listen(0,"127.0.0.1",()=>{let f=t.address();if(f&&typeof f==="object"){let l=f.port;t.close(()=>i(l))}else t.close(()=>u(Error("could not allocate port")))})})}var mVu=()=>{};import{randomUUID as pQt}from"crypto";import{hostname as iHt}from"os";async function eVu(i){let u=iHt()||void 0;i.monitor?.onMachine?.(u??"this machine");let t=jHu(i.dataDir,{outFd:i.logFd,perSandboxLog:i.perSandboxLogs,hotReload:i.hotReload}),f=J1i({path:X1i(i.dataDir),managedSandboxRoot:`${i.dataDir}/sandboxes`}),l=!1,c=()=>{if(l)return;l=!0;try{f.close()}catch{}};try{let E=0,$=rVu({dataDir:i.dataDir,registry:f,resolvePreviewUrl:(n,q)=>E>0?`http://${n}.localhost:${E}`:`http://127.0.0.1:${q}`,spawnDaemon:async(n)=>{let q={DAEMON_BOOT_ID:pQt(),APP_ROOT:n.workdir,PROXY_PORT:String(n.port),DAEMON_TOKEN:n.daemonToken,OFFLOAD_ALLOWED_HOSTS:n.offloadAllowedHosts.join(","),...n.offloadAllowSameHostDev?{OFFLOAD_ALLOW_SAME_HOST_DEV:"1"}:{}};if(n.orgFsConfigJson){let Y=await SHu(i.dataDir);if(Y)q.ORGFS_CONFIG=n.orgFsConfigJson,q.ORGFS_RCLONE_PATH=Y}let S=await t({workdir:n.workdir,env:q,daemonPort:n.port});return{port:n.port,kill:(Y)=>S.kill(Y),exited:S.exited.then(()=>{return})}},postConfig:async(n,q,S,Y)=>{let V={port:q};if(S.workload)V.runtime=S.workload.runtime,V.packageManager={name:S.workload.packageManager,...S.workload.packageManagerPath?{path:S.workload.packageManagerPath}:{}};let L={application:V},Ei=od(S.operator??null);if(Ei)L.operator=Ei;if(S.repo)L.git={repository:{cloneUrl:S.repo.cloneUrl,branch:S.repo.branch},...S.repo.userName&&S.repo.userEmail?{identity:{userName:S.repo.userName,userEmail:S.repo.userEmail}}:{}};await cO(`http://127.0.0.1:${n}`,Y,L)},waitForHealth:async(n)=>{await J4i(`http://127.0.0.1:${n}`)},maxSandboxes:20,onEvent:i.monitor?.onEvent}),w=await UVu({port:i.port,lookupSandboxPort:(n)=>$.proxyPort(n)});E=w.port,console.log(`Local ingress listening on http://127.0.0.1:${w.port} (use http://<handle>.localhost:${w.port}/)`),i.monitor?.onIngress?.(w.port);let d=WHu({provider:$}),_=async()=>{let n=await R2({dataDir:i.dataDir,target:i.clusterBaseUrl});if(!n)throw Object.assign(Error(`Session for ${i.clusterBaseUrl} is no longer valid \u2014 run \`deco auth login --target ${i.clusterBaseUrl}\` and restart \`deco link\`.`),{fatal:!0});return n.accessToken},v=await JVu(i.dataDir),h=process.env.npm_package_version??"0.0.0",D=await wHi(),g=jVu(D,{onChange:(n)=>{console.log(`[link-daemon] capabilities detected: +${n.join(",")} (now: ${D.join(",")})`)}}),O=oLi({path:`${i.dataDir}/link/outbox.sqlite`});O.clear();let Z=()=>{},B=new AbortController,F={clusterBaseUrl:i.clusterBaseUrl,getAccessToken:_,provider:$,outbox:O,controlHandler:d,capabilities:D,machineId:v,cliVersion:h,previewPort:w.port,onConnected:()=>{i.monitor?.onCluster?.("linked"),console.log(`Linked to ${i.clusterBaseUrl}`)},onShutdown:()=>Z(),runLifetimeSignal:B.signal};console.log(`[link-daemon] transport=tunnel cluster=${i.clusterBaseUrl}`);let y=await _Vu(F);console.log("[link-daemon] active transport=tunnel");let T,U=new Promise((n)=>{T=n}),I=!1,j=async()=>{if(I)return;I=!0,B.abort(),console.log(`
|
|
80857
|
-
Shutting down\u2026`),g();try{await y.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{O.close()}catch{}c(),T(0)};process.on("SIGINT",()=>void j()),process.on("SIGTERM",()=>void j()),Z=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),j()},y.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!I)console.error("Cluster connection closed permanently; exiting."),j()});let A=CVu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:U,stop:j,stopSandbox:A.stopSandbox,removeSandbox:A.removeSandbox,inspectSandbox:A.inspectSandbox}}catch(E){throw c(),E}}var aVu=N(()=>{MLi();XC();XHu();YHu();LHu();sLi();vVu();PVu();XVu();KVu();jC();dHi();MVu();mVu()});function _Hi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var K1i;var vHi=N(()=>{K1i={name:"decocms",version:"3.96.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.141.0","@openai/codex-darwin-arm64":"npm:@openai/codex@0.141.0-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.141.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.141.0-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.141.0-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.141.0-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.141.0-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var wM={};Qi(wM,{printBanner:()=>fHt,bannerLines:()=>oVu,BANNER_LINES:()=>S1i,BANNER_GRADIENT:()=>Y1i});function tHt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function oVu(i){let u=S1i.map((t,f)=>{let[l,c,E]=tHt(Y1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function fHt(i){console.log("");for(let u of oVu(i))console.log(u);console.log("")}var S1i,Y1i;var FY=N(()=>{S1i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Y1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as lHt,Text as sVu}from"ink";import{jsx as cHt,jsxs as pVu}from"react/jsx-runtime";function W1i({version:i}){return pVu(lHt,{flexDirection:"column",marginTop:1,children:[S1i.map((u,t)=>cHt(sVu,{color:Y1i[t],children:u},t)),pVu(sVu,{dimColor:!0,children:[" v",i]})]})}var hHi=N(()=>{FY()});function iru(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function yY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function uru(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function tru(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var OHi={};Qi(OHi,{subscribeLinkState:()=>DHi,setSelectedHandle:()=>gHi,setRemoving:()=>Q1i,setPersistedSandboxes:()=>NHt,setPendingConfirm:()=>_M,setMachine:()=>vHt,setLogPath:()=>DHt,setLinkActions:()=>gHt,setIngress:()=>_Ht,setDaemonError:()=>hHt,setClusterUrl:()=>dHt,setCluster:()=>wHt,setActionError:()=>z1i,resetLinkStateForTests:()=>ZHt,removeSandboxRow:()=>NHi,pushSandboxEvent:()=>OHt,getLinkState:()=>dM,applySandboxEvent:()=>fru});function $Ht(i){return i==="spawning"||i==="ready"||i==="failed"}function fru(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:f?.projectName??null,branch:f?.branch??null,sandboxPath:f?.sandboxPath??null}),t}function lru(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:EHt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function X$(){for(let i of L1i)i()}function dM(){return tf}function DHi(i){return L1i.add(i),()=>L1i.delete(i)}function wHt(i){tf={...tf,cluster:i},X$()}function dHt(i){tf={...tf,clusterUrl:i},X$()}function _Ht(i,u){tf={...tf,ingressPort:i,ingressUrl:u},X$()}function vHt(i){tf={...tf,machine:i},X$()}function hHt(i){tf={...tf,daemonError:i},X$()}function DHt(i){tf={...tf,logPath:i},X$()}function gHi(i){tf={...tf,selectedHandle:i},X$()}function _M(i){tf={...tf,pendingConfirm:i},X$()}function z1i(i){tf={...tf,actionError:i},X$()}function Q1i(i,u){if(tf.removingHandles.has(i)===u)return;let t=new Set(tf.removingHandles);if(u)t.add(i);else t.delete(i);tf={...tf,removingHandles:t},X$()}function gHt(i){tf={...tf,actions:i},X$()}function NHi(i){let u=yY(tf.sandboxes),t=tru(u,i,tf.selectedHandle),f=new Map(tf.sandboxes);f.delete(i);let l=new Set(tf.removingHandles);l.delete(i),tf={...tf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},X$()}function NHt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of tf.sandboxes)if($Ht(f.status))u.set(t,f);tf={...tf,sandboxes:u},X$()}function OHt(i){tf={...tf,sandboxes:fru(tf.sandboxes,i)},X$()}function ZHt(){tf=lru(),L1i.clear()}var EHt=20,tf,L1i;var vM=N(()=>{tf=lru(),L1i=new Set});import{spawn as BHt}from"child_process";function FHt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function cru(i,u=process.platform){let t=FHt(u);try{BHt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Eru=()=>{};function $ru(i,u={}){let t=u.openUrl??cru,f=dM(),l=yY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":gHi(uru(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);z1i(null),_M({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(_M(null),$===null||!E)return;Q1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)NHi($.handle);else Q1i($.handle,!1),z1i(w.error)});return}case"confirmNo":_M(null);return;case"quit":if(E)E.quit();return}}var wru=N(()=>{vM();Eru()});function dru(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var _ru={};Qi(_ru,{LinkApp:()=>PHt});import{Box as H1,Text as cl,useInput as yHt}from"ink";import{useSyncExternalStore as THt}from"react";import{jsx as xf,jsxs as w5}from"react/jsx-runtime";function UHt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function PHt(){let i=THt(DHi,dM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=yY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return yHt((l,c)=>{let E=dru(l,c,i.pendingConfirm!==null);if(E!==null)$ru(E)}),w5(H1,{flexDirection:"column",children:[xf(W1i,{version:K1i.version}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:"\u2500".repeat(80)})}),xf(H1,{children:i.cluster==="linked"?w5(cl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?w5(cl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):w5(cl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),xf(H1,{children:i.ingressUrl?w5(cl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):xf(cl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?xf(cl,{dimColor:!0,children:"No previews running yet."}):w5(H1,{flexDirection:"column",children:[w5(H1,{children:[xf(H1,{width:2,flexShrink:0}),xf(H1,{width:TY.project,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),xf(H1,{width:TY.branch,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),xf(H1,{width:TY.status,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=UHt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return w5(H1,{children:[xf(H1,{width:2,flexShrink:0,children:xf(cl,{color:"cyan",children:E?"\u203A":" "})}),xf(H1,{width:TY.project,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),xf(H1,{width:TY.branch,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),xf(H1,{width:TY.status,flexShrink:0,marginRight:1,children:xf(cl,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?xf(H1,{marginTop:1,children:w5(cl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?xf(H1,{marginTop:1,children:w5(cl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?xf(H1,{marginTop:1,children:xf(cl,{color:"yellow",children:iru(i.pendingConfirm)})}):null,i.actionError?xf(H1,{marginTop:1,children:w5(cl,{color:"red",children:["\u2717 ",i.actionError]})}):null,xf(H1,{marginTop:1,children:xf(cl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var TY;var vru=N(()=>{vHi();hHi();wru();vM();TY={project:18,branch:22,status:14}});var hru={};Qi(hru,{runLinkCommand:()=>XHt});import{closeSync as xHt,mkdirSync as IHt,openSync as AHt,writeSync as GHt}from"fs";import{homedir as nHt}from"os";import{join as ZHi}from"path";function kHt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{GHt(u,`${_Hi(l)}
|
|
80857
|
+
Shutting down\u2026`),g();try{await y.close()}catch{}try{await w.stop()}catch{}try{await $.shutdown()}catch{}try{O.close()}catch{}c(),T(0)};process.on("SIGINT",()=>void j()),process.on("SIGTERM",()=>void j()),Z=()=>{console.log("Disconnect requested from the Studio web UI \u2014 shutting down. Run `bunx decocms@latest link` to reconnect."),j()},y.closed.then(()=>{if(i.monitor?.onCluster?.("closed"),!I)console.error("Cluster connection closed permanently; exiting."),j()});let A=CVu({provider:$,registry:f,dataDir:i.dataDir});return{stopped:U,stop:j,stopSandbox:A.stopSandbox,removeSandbox:A.removeSandbox,inspectSandbox:A.inspectSandbox}}catch(E){throw c(),E}}var aVu=N(()=>{MLi();XC();XHu();YHu();LHu();sLi();vVu();PVu();XVu();KVu();jC();dHi();MVu();mVu()});function _Hi(i){return i.map((u)=>typeof u==="string"?u:String(u)).join(" ")}var K1i;var vHi=N(()=>{K1i={name:"decocms",version:"3.96.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/mesh"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:'bun run migrate && concurrently "bun run dev:client" "bun run dev:server"',"dev:servers":'concurrently "bun run dev:client" "bun run dev:server"',"dev:client":"vite dev","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts","build:client":"bun --bun vite build","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test","test:ct":"playwright test -c playwright-ct.config.ts","test:ct:ui":"playwright test -c playwright-ct.config.ts --ui","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts","smoke:link":"bun run scripts/smoke-link.ts",prepublishOnly:"bun run build:client && bun run build:server"},optionalDependencies:{"@anthropic-ai/claude-agent-sdk":"^0.3.181","@duckdb/node-api":"^1.5.0-r.1","@openai/codex":"0.141.0","@openai/codex-darwin-arm64":"npm:@openai/codex@0.141.0-darwin-arm64","@openai/codex-darwin-x64":"npm:@openai/codex@0.141.0-darwin-x64","@openai/codex-linux-arm64":"npm:@openai/codex@0.141.0-linux-arm64","@openai/codex-linux-x64":"npm:@openai/codex@0.141.0-linux-x64","@openai/codex-win32-arm64":"npm:@openai/codex@0.141.0-win32-arm64","@openai/codex-win32-x64":"npm:@openai/codex@0.141.0-win32-x64"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@inkjs/ui":"^2.0.0","@modelcontextprotocol/ext-apps":"^1.7.1","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","@tanstack/react-virtual":"3.13.24","@xterm/addon-fit":"^0.11.0","@xterm/xterm":"^6.0.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0",kysely:"^0.28.12","node-pty":"^1.0.0","posthog-js":"^1.371.1","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@ai-sdk/react":"^3.0.210","@better-auth/sso":"1.4.1","@daveyplate/better-auth-ui":"^3.2.7","@deco/ui":"workspace:*","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/harness":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/mesh-sdk":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/std":"workspace:*","@decocms/tunnel":"workspace:*","@floating-ui/react":"^0.27.16","@happy-dom/global-registrator":"^20.9.0","@hookform/resolvers":"^5.2.2","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@monaco-editor/react":"^4.7.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@playwright/experimental-ct-react":"1.59.1","@playwright/test":"^1.58.2","@radix-ui/react-avatar":"^1.1.10","@radix-ui/react-checkbox":"^1.3.3","@radix-ui/react-dialog":"^1.1.15","@radix-ui/react-dropdown-menu":"^2.1.16","@radix-ui/react-label":"^2.1.7","@radix-ui/react-select":"^2.2.6","@radix-ui/react-separator":"^1.1.7","@radix-ui/react-slot":"^1.2.3","@radix-ui/react-tabs":"^1.1.13","@rjsf/shadcn":"^6.6.2","@rjsf/utils":"^6.6.2","@rjsf/validator-ajv8":"^6.6.2","@tailwindcss/vite":"^4.1.17","@tanstack/react-query":"5.100.10","@tanstack/react-router":"1.169.2","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.2","@tiptap/core":"3.20.2","@tiptap/extension-placeholder":"3.20.2","@tiptap/pm":"3.20.2","@tiptap/react":"3.20.2","@tiptap/starter-kit":"3.20.2","@tiptap/suggestion":"3.20.2","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@untitledui/icons":"^0.0.19","@vercel/nft":"^1.1.1","@vitejs/plugin-react":"^5.1.0",ai:"^6.0.208","babel-plugin-react-compiler":"^1.0.0","better-auth":"1.4.22","class-variance-authority":"^0.7.1",clsx:"^2.1.1",concurrently:"^9.2.1",croner:"^9.1.0","date-fns":"^4.1.0",degit:"^2.8.4",hono:"^4.10.7","input-otp":"^1.4.2",jose:"^6.0.11","lucide-react":"^0.468.0",marked:"^15.0.6",nanoid:"^5.1.6",pg:"^8.16.3",prettier:"^3.4.2","react-hook-form":"^7.66.0","react-markdown":"^10.1.0","react-resizable-panels":"^2.1.7","react-syntax-highlighter":"^15.6.1",recharts:"^3.6.0","rehype-raw":"^7.0.0","remark-gfm":"^4.0.0","sass-embedded":"^1.97.2",sonner:"^2.0.7","tailwind-merge":"^3.3.1",tailwindcss:"^4.1.17",typescript:"^5.9.3",vite:"^7.2.1","vite-tsconfig-paths":"^5.1.4",zod:"^4.0.0"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","mesh","tools"],license:"MIT",publishConfig:{access:"public"}}});var wM={};Qi(wM,{printBanner:()=>fHt,bannerLines:()=>oVu,BANNER_LINES:()=>S1i,BANNER_GRADIENT:()=>Y1i});function tHt(i){let u=Number.parseInt(i.slice(1),16);return[u>>16&255,u>>8&255,u&255]}function oVu(i){let u=S1i.map((t,f)=>{let[l,c,E]=tHt(Y1i[f]);return`\x1B[38;2;${l};${c};${E}m${t}\x1B[39m`});if(i!==void 0)u.push(`\x1B[2m v${i}\x1B[22m`);return u}function fHt(i){console.log("");for(let u of oVu(i))console.log(u);console.log("")}var S1i,Y1i;var FY=N(()=>{S1i=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Y1i=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});import{Box as lHt,Text as sVu}from"ink";import{jsx as cHt,jsxs as pVu}from"react/jsx-runtime";function W1i({version:i}){return pVu(lHt,{flexDirection:"column",marginTop:1,children:[S1i.map((u,t)=>cHt(sVu,{color:Y1i[t],children:u},t)),pVu(sVu,{dimColor:!0,children:[" v",i]})]})}var hHi=N(()=>{FY()});function iru(i){let u=i.branch??i.handle,t=[];if(i.dirtyCount>0)t.push(`${i.dirtyCount} uncommitted file${i.dirtyCount===1?"":"s"}`);if(i.merged===!1)t.push("branch not merged");return t.length>0?`\u26A0 ${t.join(", ")} \u2014 delete ${u}? (y/n)`:`Delete ${u}? (y/n)`}function yY(i){return[...i.values()].map((u)=>u.handle).sort((u,t)=>u.localeCompare(t))}function uru(i,u,t){if(i.length===0)return null;let f=u===null?-1:i.indexOf(u);if(f===-1)return t>0?i[0]:i[i.length-1];let l=Math.max(0,Math.min(i.length-1,f+t));return i[l]}function tru(i,u,t){if(t!==u)return t;let f=i.indexOf(u);if(f===-1)return t;return i[f+1]??i[f-1]??null}var OHi={};Qi(OHi,{subscribeLinkState:()=>DHi,setSelectedHandle:()=>gHi,setRemoving:()=>Q1i,setPersistedSandboxes:()=>NHt,setPendingConfirm:()=>_M,setMachine:()=>vHt,setLogPath:()=>DHt,setLinkActions:()=>gHt,setIngress:()=>_Ht,setDaemonError:()=>hHt,setClusterUrl:()=>dHt,setCluster:()=>wHt,setActionError:()=>z1i,resetLinkStateForTests:()=>ZHt,removeSandboxRow:()=>NHi,pushSandboxEvent:()=>OHt,getLinkState:()=>dM,applySandboxEvent:()=>fru});function $Ht(i){return i==="spawning"||i==="ready"||i==="failed"}function fru(i,u){let t=new Map(i),f=t.get(u.handle);if(u.phase==="evicted"||u.phase==="deleted"){if(f)t.set(u.handle,{...f,port:null,previewUrl:null,status:"stopped",error:null});return t}return t.set(u.handle,{handle:u.handle,port:u.port??f?.port??null,previewUrl:u.previewUrl??f?.previewUrl??null,status:u.phase,error:u.phase==="failed"?u.error??"failed":null,projectName:f?.projectName??null,branch:f?.branch??null,sandboxPath:f?.sandboxPath??null}),t}function lru(){return{cluster:"connecting",clusterUrl:null,ingressUrl:null,ingressPort:null,machine:null,cap:EHt,sandboxes:new Map,daemonError:null,logPath:null,selectedHandle:null,pendingConfirm:null,removingHandles:new Set,actionError:null,actions:null}}function X$(){for(let i of L1i)i()}function dM(){return tf}function DHi(i){return L1i.add(i),()=>L1i.delete(i)}function wHt(i){tf={...tf,cluster:i},X$()}function dHt(i){tf={...tf,clusterUrl:i},X$()}function _Ht(i,u){tf={...tf,ingressPort:i,ingressUrl:u},X$()}function vHt(i){tf={...tf,machine:i},X$()}function hHt(i){tf={...tf,daemonError:i},X$()}function DHt(i){tf={...tf,logPath:i},X$()}function gHi(i){tf={...tf,selectedHandle:i},X$()}function _M(i){tf={...tf,pendingConfirm:i},X$()}function z1i(i){tf={...tf,actionError:i},X$()}function Q1i(i,u){if(tf.removingHandles.has(i)===u)return;let t=new Set(tf.removingHandles);if(u)t.add(i);else t.delete(i);tf={...tf,removingHandles:t},X$()}function gHt(i){tf={...tf,actions:i},X$()}function NHi(i){let u=yY(tf.sandboxes),t=tru(u,i,tf.selectedHandle),f=new Map(tf.sandboxes);f.delete(i);let l=new Set(tf.removingHandles);l.delete(i),tf={...tf,sandboxes:f,selectedHandle:t,pendingConfirm:null,removingHandles:l},X$()}function NHt(i){let u=new Map;for(let t of i)u.set(t.handle,{handle:t.handle,port:t.port,previewUrl:t.previewUrl,status:t.status,error:t.error,projectName:t.projectName,branch:t.branch,sandboxPath:t.sandboxPath});for(let[t,f]of tf.sandboxes)if($Ht(f.status))u.set(t,f);tf={...tf,sandboxes:u},X$()}function OHt(i){tf={...tf,sandboxes:fru(tf.sandboxes,i)},X$()}function ZHt(){tf=lru(),L1i.clear()}var EHt=20,tf,L1i;var vM=N(()=>{tf=lru(),L1i=new Set});import{spawn as BHt}from"child_process";function FHt(i){if(i==="darwin")return"open";if(i==="win32")return"start";return"xdg-open"}function cru(i,u=process.platform){let t=FHt(u);try{BHt(t,[i],{stdio:"ignore",detached:!0}).unref()}catch{}}var Eru=()=>{};function $ru(i,u={}){let t=u.openUrl??cru,f=dM(),l=yY(f.sandboxes),c=f.selectedHandle!==null&&l.includes(f.selectedHandle)?f.selectedHandle:l[0]??null,E=f.actions;switch(i.type){case"move":gHi(uru(l,f.selectedHandle,i.delta));return;case"open":{if(c===null)return;let $=f.sandboxes.get(c);if($?.status==="ready"&&$.previewUrl)t($.previewUrl);return}case"stop":if(c!==null&&E)E.stopSandbox(c);return;case"delete":{if(c===null||!E)return;let $=E.inspectSandbox(c),w=f.sandboxes.get(c);z1i(null),_M({handle:c,branch:$?.branch??w?.branch??null,dirtyCount:$?.dirtyCount??0,merged:$?.merged??null});return}case"confirmYes":{let $=f.pendingConfirm;if(_M(null),$===null||!E)return;Q1i($.handle,!0),E.removeSandbox($.handle).then((w)=>{if(w.ok)NHi($.handle);else Q1i($.handle,!1),z1i(w.error)});return}case"confirmNo":_M(null);return;case"quit":if(E)E.quit();return}}var wru=N(()=>{vM();Eru()});function dru(i,u,t){if(t)return i==="y"||i==="Y"?{type:"confirmYes"}:{type:"confirmNo"};if(u.upArrow||i==="k")return{type:"move",delta:-1};if(u.downArrow||i==="j")return{type:"move",delta:1};if(i==="s")return{type:"stop"};if(i==="d")return{type:"delete"};if(i==="o")return{type:"open"};if(i==="q"||u.ctrl===!0&&i==="c")return{type:"quit"};return null}var _ru={};Qi(_ru,{LinkApp:()=>PHt});import{Box as H1,Text as cl,useInput as yHt}from"ink";import{useSyncExternalStore as THt}from"react";import{jsx as xf,jsxs as w5}from"react/jsx-runtime";function UHt(i,u){if(u)return{color:"yellow",text:"\u25CC Removing\u2026"};if(i.status==="ready")return{color:"green",text:"\u25CF Live"};if(i.status==="spawning")return{color:"yellow",text:"\u25CC Starting\u2026"};if(i.status==="stopped")return{color:"gray",text:"\u25A0 Stopped"};if(i.status==="missing")return{color:"yellow",text:"\u25A1 Missing"};if(i.status==="merged")return{color:"cyan",text:"\u2713 Merged"};if(i.status==="invalid")return{color:"red",text:"\u2717 Invalid"};if(i.status==="failed")return{color:"red",text:`\u2717 Failed: ${i.error??"failed"}`};return{color:"red",text:`\u2717 Error: ${i.error??""}`}}function PHt(){let i=THt(DHi,dM),u=[...i.sandboxes.values()].sort((l,c)=>l.handle.localeCompare(c.handle)),t=yY(i.sandboxes),f=i.selectedHandle!==null&&t.includes(i.selectedHandle)?i.selectedHandle:t[0]??null;return yHt((l,c)=>{let E=dru(l,c,i.pendingConfirm!==null);if(E!==null)$ru(E)}),w5(H1,{flexDirection:"column",children:[xf(W1i,{version:K1i.version}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:"\u2500".repeat(80)})}),xf(H1,{children:i.cluster==="linked"?w5(cl,{color:"green",children:["\u2713 Connected to ",i.clusterUrl??"deco"]}):i.cluster==="connecting"?w5(cl,{color:"yellow",children:["\u25CC Connecting to ",i.clusterUrl??"deco","\u2026"]}):w5(cl,{color:"red",children:["\u2717 Disconnected from ",i.clusterUrl??"deco"]})}),xf(H1,{children:i.ingressUrl?w5(cl,{color:"green",children:["\u2713 Serving at ",i.ingressUrl]}):xf(cl,{dimColor:!0,children:"\u25CC Starting local server\u2026"})}),xf(H1,{marginBottom:1,children:xf(cl,{dimColor:!0,children:`${"Computer".padEnd(16)}${i.machine??"this computer"} \xB7 ${u.length} of ${i.cap} previews`})}),u.length===0?xf(cl,{dimColor:!0,children:"No previews running yet."}):w5(H1,{flexDirection:"column",children:[w5(H1,{children:[xf(H1,{width:2,flexShrink:0}),xf(H1,{width:TY.project,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PROJECT"})}),xf(H1,{width:TY.branch,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"BRANCH"})}),xf(H1,{width:TY.status,flexShrink:0,marginRight:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"STATUS"})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:"PREVIEW URL"})})]}),u.map((l)=>{let c=UHt(l,i.removingHandles.has(l.handle)),E=l.handle===f;return w5(H1,{children:[xf(H1,{width:2,flexShrink:0,children:xf(cl,{color:"cyan",children:E?"\u203A":" "})}),xf(H1,{width:TY.project,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.projectName??l.handle})}),xf(H1,{width:TY.branch,flexShrink:0,marginRight:1,children:xf(cl,{bold:E,wrap:"truncate-end",children:l.branch??"\u2014"})}),xf(H1,{width:TY.status,flexShrink:0,marginRight:1,children:xf(cl,{color:c.color,bold:E,wrap:"truncate-end",children:c.text})}),xf(H1,{flexGrow:1,children:xf(cl,{dimColor:!0,wrap:"truncate-end",children:l.previewUrl??"\u2014"})})]},l.handle)})]}),i.daemonError?xf(H1,{marginTop:1,children:w5(cl,{color:"red",children:["\u26A0 ",i.daemonError]})}):null,i.logPath?xf(H1,{marginTop:1,children:w5(cl,{dimColor:!0,children:["Logs: ",i.logPath]})}):null,i.pendingConfirm?xf(H1,{marginTop:1,children:xf(cl,{color:"yellow",children:iru(i.pendingConfirm)})}):null,i.actionError?xf(H1,{marginTop:1,children:w5(cl,{color:"red",children:["\u2717 ",i.actionError]})}):null,xf(H1,{marginTop:1,children:xf(cl,{dimColor:!0,children:"\u2191\u2193 move \xB7 s stop \xB7 d delete \xB7 o open \xB7 q quit"})})]})}var TY;var vru=N(()=>{vHi();hHi();wru();vM();TY={project:18,branch:22,status:14}});var hru={};Qi(hru,{runLinkCommand:()=>XHt});import{closeSync as xHt,mkdirSync as IHt,openSync as AHt,writeSync as GHt}from"fs";import{homedir as nHt}from"os";import{join as ZHi}from"path";function kHt(i,u){let t={log:console.log,warn:console.warn,error:console.error},f=(l)=>{if(u===void 0)return;try{GHt(u,`${_Hi(l)}
|
|
80858
80858
|
`)}catch{}};return console.log=(...l)=>f(l),console.warn=(...l)=>f(l),console.error=(...l)=>{f(l),i(_Hi(l))},()=>{console.log=t.log,console.warn=t.warn,console.error=t.error}}async function jHt(i,u){let t;try{t=await fetch(`${i}/api/links/me`,{headers:{authorization:`Bearer ${u}`},signal:AbortSignal.timeout(1e4)})}catch{return}if(t.status===401||t.status===403)throw Error(`Authentication rejected by ${i} \u2014 the session token was not accepted. `+`Run \`deco auth login --target ${i}\` and try again.`)}async function XHt(i={}){let u=i.port??5174,t=i.dataDir??process.env.DATA_DIR??process.env.DECOCMS_HOME??ZHi(nHt(),"deco"),f=i.clusterBaseUrl??process.env.MESH_CLUSTER_URL??"https://studio.decocms.com",l,c,E,$=()=>{if(E===void 0)return;try{E.close()}catch{}finally{E=void 0}};try{let w=ZHi(t,"sandboxes");E=J1i({path:X1i(t),managedSandboxRoot:w});let d=await n4i({dataDir:t,intent:"Link",target:f});if(process.env.DECOCMS_LINK_MANAGED!=="1")await jHt(f,d.accessToken);let _=E.reconcile();if(i.prune){let g=E.prune({missing:!0,merged:!0});if(!i.tui)console.log(`Pruned local sandboxes: removed ${g.removed.length}, skipped ${g.skipped.length}.`);_=E.reconcile()}let v;if(i.tui){let{render:g}=await import("ink"),{createElement:O}=await import("react"),{LinkApp:Z}=await Promise.resolve().then(() => (vru(),_ru)),{pushSandboxEvent:B,setCluster:F,setClusterUrl:y,setDaemonError:T,setIngress:U,setLogPath:I,setMachine:j,setPersistedSandboxes:A}=await Promise.resolve().then(() => (vM(),OHi));IHt(t,{recursive:!0});let n=ZHi(t,"link.log");c=AHt(n,"w"),I(n),A(_),y(f),F("connecting"),v={onEvent:(q)=>B(q),onIngress:(q)=>U(q,`http://127.0.0.1:${q}`),onCluster:(q)=>F(q),onMachine:(q)=>j(q)},l=kHt(T,c),g(O(Z),{patchConsole:!1})}else if(i.banner!==!1){let{printBanner:g}=await Promise.resolve().then(() => (FY(),wM));g(i.version??"0.0.0")}$();let h=process.env.DECOCMS_LINK_MANAGED!=="1",D=await eVu({port:u,clusterBaseUrl:f,dataDir:t,session:d,monitor:v,logFd:c,perSandboxLogs:h,hotReload:i.hotReload});if(i.tui){let{setLinkActions:g}=await Promise.resolve().then(() => (vM(),OHi));g({stopSandbox:D.stopSandbox,removeSandbox:D.removeSandbox,inspectSandbox:D.inspectSandbox,quit:D.stop})}return await D.stopped}catch(w){return l?.(),console.error(w instanceof Error?w.message:String(w)),1}finally{if(l?.(),c!==void 0)try{xHt(c)}catch{}$()}}var Dru=N(()=>{CLi();aVu();dHi()});var PHi={};Qi(PHi,{resolveDevLinkClusterUrl:()=>YHt,populateDevLinkToxiProxy:()=>Fru,isDevLinkToxiProxyEnabled:()=>SHt,ensureDevLinkToxiProxy:()=>HHt,buildDevLinkToxiProxyConfig:()=>Zru,DEV_LINK_TOXIPROXY_SERVICE_NAME:()=>Nru,DEV_LINK_TOXIPROXY_PROXY_NAME:()=>Oru});function SHt(i=process.env){return i.DECO_DEV_LINK_TOXIPROXY==="1"}function BHi(i,u){if(!Number.isInteger(i)||i<1||i>65535)throw Error(`${u} must be an integer port in 1..65535`);return i}function Zru(i){let u=new URL(i.serverUrl);if(u.protocol!=="http:")throw Error("DECO_DEV_LINK_TOXIPROXY only supports http local Studio URLs");let t=BHi(i.apiPort,"apiPort"),f=BHi(i.listenPort,"listenPort");if(u.port.length===0)throw Error("serverUrl must include an explicit valid port");let l=BHi(Number.parseInt(u.port,10),"upstreamPort"),c=`http://127.0.0.1:${l}`,E=`http://127.0.0.1:${f}`;return{serviceName:Nru,proxyName:Oru,apiUrl:`http://127.0.0.1:${t}`,listen:`0.0.0.0:${f}`,upstream:`host.docker.internal:${l}`,publicTargetUrl:c,clusterUrl:E,logLine:`[dev-link-toxiproxy] ready: ${E} -> ${c}`}}function YHt(i){return i.toxiproxy?.clusterUrl??i.serverUrl}async function FHi(i,u,t){if(i.ok)return;let f=await i.text();throw Error(`ToxiProxy ${u} failed for ${t}: status=${i.status} statusText=${i.statusText} body=${f}`)}function UHi(i){if(i instanceof Error)return i.name==="Error"?i.message:`${i.name}: ${i.message}`;return String(i)}function Bru(i){if(!(i instanceof Error))return!1;if(i.name==="TimeoutError")return!0;return Bru(i.cause)}async function yHi(i,u,t,f){try{return await i(t,f)}catch(l){throw Error(`ToxiProxy ${u} failed for ${t}: ${UHi(l)}`,{cause:l})}}async function Fru(i,u=fetch){let t=`${i.apiUrl}/reset`,f=await yHi(u,"reset",t,{method:"POST"});await FHi(f,"reset",t);let l=`${i.apiUrl}/populate`,c=await yHi(u,"populate",l,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify([{name:i.proxyName,listen:i.listen,upstream:i.upstream,enabled:!0}])});await FHi(c,"populate",l)}async function WHt(i,u){let t=`${i.apiUrl}/version`;try{await u6(async()=>{let f=await yHi(u,"readiness check",t,{method:"GET",signal:AbortSignal.timeout(KHt)});await FHi(f,"readiness check",t)},{maxAttempts:JHt,minTimeout:gru,maxTimeout:gru,multiplier:1,jitter:0,isRetriable:(f)=>!Bru(f)})}catch(f){let l=f instanceof J6?f.cause:f;throw Error(`ToxiProxy API did not become ready at ${t}: ${UHi(l)}`,{cause:l})}}async function LHt(i){if(i===null)return"";return await new Response(i).text()}async function THi(i,u={}){let t=["docker",...i].join(" "),f=(()=>{try{return Bun.spawn(["docker",...i],{stdout:"ignore",stderr:"pipe"})}catch($){throw Error(`Docker command failed to start (${t}): ${UHi($)}`,{cause:$})}})(),[l,c]=await Promise.all([f.exited,LHt(f.stderr)]);if(l===0||u.ignoreFailure===!0)return;let E=c.trim().length>0?`: ${c.trim()}`:"";throw Error(`Docker command failed (${t}) with exit ${l}${E}`)}async function zHt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await THi(["rm","-f",t],{ignoreFailure:!0}),await THi(["run","--rm","-d","--name",t,"-p",`127.0.0.1:${i}:8474`,"-p",`127.0.0.1:${u}:${u}`,"ghcr.io/shopify/toxiproxy:2.12.0","-host=0.0.0.0"])}async function QHt(i,u){let t=`deco-dev-link-toxiproxy-${i}`;await THi(["rm","-f",t],{ignoreFailure:!0})}async function HHt(i){let u=Zru(i),t=i.startDaemon??zHt,f=i.stopDaemon??(i.startDaemon===void 0?QHt:void 0);await t(i.apiPort,i.listenPort);let l=i.fetchImpl??fetch;try{await WHt(u,l),await Fru(u,l)}catch(c){if(f!==void 0)try{await f(i.apiPort,i.listenPort)}catch{}throw c}return{config:u,stop:async()=>{if(f!==void 0)await f(i.apiPort,i.listenPort)}}}var Nru="ToxiProxy",Oru="dev_link_studio",JHt=20,gru=100,KHt=100;var xHi=N(()=>{Bl()});var yru={};Qi(yru,{migrateBetterAuth:()=>IHi});import{getMigrations as bHt}from"better-auth/db";import{sso as RHt}from"@better-auth/sso";import{organization as CHt}from"@decocms/better-auth/plugins";import{admin as MHt,apiKey as qHt,jwt as VHt,magicLink as rHt,mcp as mHt,openAPI as eHt}from"better-auth/plugins";import{emailOTP as aHt}from"better-auth/plugins/email-otp";async function IHi(i){let t={database:xC(i||z2()),plugins:[CHt({dynamicAccessControl:{enabled:!0,enableCustomResources:!0}}),MHt(),qHt(),VHt(),eHt(),mHt({loginPage:"/login"}),RHt(),rHt({sendMagicLink:async()=>{}}),aHt({sendVerificationOTP:async()=>{}})]},{toBeAdded:f,toBeCreated:l,runMigrations:c}=await bHt(t);if(!f.length&&!l.length)return"up to date";return await c(),`${l.length+f.length} table(s) migrated`}var AHi=N(()=>{zE()});var GHi={};Qi(GHi,{up:()=>oHt,down:()=>sHt});import{sql as V_}from"kysely";async function oHt(i){await i.schema.createTable("connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("createdById","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("description","text").addColumn("icon","text").addColumn("appName","text").addColumn("appId","text").addColumn("connectionType","text",(u)=>u.notNull()).addColumn("connectionUrl","text",(u)=>u.notNull()).addColumn("connectionToken","text").addColumn("connectionHeaders","text").addColumn("oauthConfig","text").addColumn("metadata","text").addColumn("tools","text").addColumn("bindings","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("api_keys").addColumn("id","text",(u)=>u.primaryKey()).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("name","text",(u)=>u.notNull()).addColumn("hashedKey","text",(u)=>u.notNull().unique()).addColumn("permissions","text",(u)=>u.notNull()).addColumn("expiresAt","text").addColumn("remaining","integer").addColumn("metadata","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("audit_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createTable("oauth_clients").addColumn("id","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().unique()).addColumn("clientSecret","text").addColumn("clientName","text",(u)=>u.notNull()).addColumn("redirectUris","text",(u)=>u.notNull()).addColumn("grantTypes","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("clientUri","text").addColumn("logoUri","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_authorization_codes").addColumn("code","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("redirectUri","text",(u)=>u.notNull()).addColumn("scope","text").addColumn("codeChallenge","text").addColumn("codeChallengeMethod","text").addColumn("expiresAt","text",(u)=>u.notNull()).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("oauth_refresh_tokens").addColumn("token","text",(u)=>u.primaryKey()).addColumn("clientId","text",(u)=>u.notNull().references("oauth_clients.clientId").onDelete("cascade")).addColumn("userId","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("downstream_tokens").addColumn("id","text",(u)=>u.primaryKey()).addColumn("connectionId","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("userId","text",(u)=>u.references("user.id").onDelete("cascade")).addColumn("accessToken","text",(u)=>u.notNull()).addColumn("refreshToken","text").addColumn("scope","text").addColumn("expiresAt","text").addColumn("createdAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(V_`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_connections_organizationId").on("connections").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}async function sHt(i){await i.schema.dropTable("downstream_tokens").execute(),await i.schema.dropTable("oauth_refresh_tokens").execute(),await i.schema.dropTable("oauth_authorization_codes").execute(),await i.schema.dropTable("oauth_clients").execute(),await i.schema.dropTable("audit_logs").execute(),await i.schema.dropTable("api_keys").execute(),await i.schema.dropTable("connections").execute()}var Tru=()=>{};var nHi={};Qi(nHi,{up:()=>pHt,down:()=>ibt});import{sql as Uru}from"kysely";async function pHt(i){await i.schema.createTable("organization_settings").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull().defaultTo(Uru`CURRENT_TIMESTAMP`)).addColumn("updatedAt","text",(u)=>u.notNull().defaultTo(Uru`CURRENT_TIMESTAMP`)).execute()}async function ibt(i){await i.schema.dropTable("organization_settings").execute()}var Pru=()=>{};var kHi={};Qi(kHi,{up:()=>ubt,down:()=>tbt});async function ubt(i){await i.schema.alterTable("connections").renameColumn("name","title").execute(),await i.schema.alterTable("connections").renameColumn("createdById","created_by").execute(),await i.schema.alterTable("connections").renameColumn("createdAt","created_at").execute(),await i.schema.alterTable("connections").renameColumn("updatedAt","updated_at").execute(),await i.schema.alterTable("connections").renameColumn("organizationId","organization_id").execute(),await i.schema.alterTable("connections").renameColumn("connectionType","connection_type").execute(),await i.schema.alterTable("connections").renameColumn("connectionUrl","connection_url").execute(),await i.schema.alterTable("connections").renameColumn("connectionToken","connection_token").execute(),await i.schema.alterTable("connections").renameColumn("connectionHeaders","connection_headers").execute(),await i.schema.alterTable("connections").renameColumn("oauthConfig","oauth_config").execute(),await i.schema.alterTable("connections").renameColumn("appName","app_name").execute(),await i.schema.alterTable("connections").renameColumn("appId","app_id").execute()}async function tbt(i){await i.schema.alterTable("connections").renameColumn("title","name").execute(),await i.schema.alterTable("connections").renameColumn("created_by","createdById").execute(),await i.schema.alterTable("connections").renameColumn("created_at","createdAt").execute(),await i.schema.alterTable("connections").renameColumn("updated_at","updatedAt").execute(),await i.schema.alterTable("connections").renameColumn("organization_id","organizationId").execute(),await i.schema.alterTable("connections").renameColumn("connection_type","connectionType").execute(),await i.schema.alterTable("connections").renameColumn("connection_url","connectionUrl").execute(),await i.schema.alterTable("connections").renameColumn("connection_token","connectionToken").execute(),await i.schema.alterTable("connections").renameColumn("connection_headers","connectionHeaders").execute(),await i.schema.alterTable("connections").renameColumn("oauth_config","oauthConfig").execute(),await i.schema.alterTable("connections").renameColumn("app_name","appName").execute(),await i.schema.alterTable("connections").renameColumn("app_id","appId").execute()}var jHi={};Qi(jHi,{up:()=>fbt,down:()=>lbt});async function fbt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId","createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}async function lbt(i){await i.schema.createTable("organization_settings_new").addColumn("organizationId","text",(u)=>u.primaryKey().references("organization.id").onDelete("cascade")).addColumn("modelsBindingConnectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("createdAt","text",(u)=>u.notNull()).addColumn("updatedAt","text",(u)=>u.notNull()).execute(),await i.insertInto("organization_settings_new").columns(["organizationId","modelsBindingConnectionId","createdAt","updatedAt"]).expression((u)=>u.selectFrom("organization_settings").select(["organizationId",u.val(null).as("modelsBindingConnectionId"),"createdAt","updatedAt"])).execute(),await i.schema.dropTable("organization_settings").execute(),await i.schema.alterTable("organization_settings_new").renameTo("organization_settings").execute()}var XHi={};Qi(XHi,{up:()=>cbt,down:()=>Ebt});async function cbt(i){await i.schema.alterTable("connections").addColumn("configuration_state","text").execute(),await i.schema.alterTable("connections").addColumn("configuration_scopes","text").execute()}async function Ebt(i){await i.schema.alterTable("connections").dropColumn("configuration_state").execute(),await i.schema.alterTable("connections").dropColumn("configuration_scopes").execute()}var JHi={};Qi(JHi,{up:()=>wbt,down:()=>dbt});import{sql as $bt}from"kysely";async function wbt(i){await i.schema.alterTable("organization_settings").addColumn("sidebar_items",$bt`text`).execute()}async function dbt(i){await i.schema.alterTable("organization_settings").dropColumn("sidebar_items").execute()}var xru=()=>{};var KHi={};Qi(KHi,{up:()=>_bt,down:()=>vbt});async function _bt(i){await i.schema.createTable("monitoring_logs").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("connection_title","text",(u)=>u.notNull()).addColumn("tool_name","text",(u)=>u.notNull()).addColumn("input","text",(u)=>u.notNull()).addColumn("output","text",(u)=>u.notNull()).addColumn("is_error","integer",(u)=>u.notNull()).addColumn("error_message","text").addColumn("duration_ms","integer",(u)=>u.notNull()).addColumn("timestamp","text",(u)=>u.notNull()).addColumn("user_id","text").addColumn("request_id","text",(u)=>u.notNull()).execute(),await i.schema.createIndex("monitoring_logs_org_timestamp").on("monitoring_logs").columns(["organization_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_connection_timestamp").on("monitoring_logs").columns(["connection_id","timestamp"]).execute(),await i.schema.createIndex("monitoring_logs_is_error").on("monitoring_logs").columns(["organization_id","is_error","timestamp"]).execute()}async function vbt(i){await i.schema.dropIndex("monitoring_logs_is_error").execute(),await i.schema.dropIndex("monitoring_logs_connection_timestamp").execute(),await i.schema.dropIndex("monitoring_logs_org_timestamp").execute(),await i.schema.dropTable("monitoring_logs").execute()}var SHi={};Qi(SHi,{up:()=>hbt,down:()=>Dbt});import{sql as hM}from"kysely";async function hbt(i){await i.schema.createTable("events").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("type","text",(u)=>u.notNull()).addColumn("source","text",(u)=>u.notNull()).addColumn("specversion","text",(u)=>u.notNull().defaultTo("1.0")).addColumn("subject","text").addColumn("time","text",(u)=>u.notNull()).addColumn("datacontenttype","text",(u)=>u.notNull().defaultTo("application/json")).addColumn("dataschema","text").addColumn("data","text").addColumn("cron","varchar(255)").addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_subscriptions").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("publisher","text").addColumn("event_type","text",(u)=>u.notNull()).addColumn("filter","text").addColumn("enabled","integer",(u)=>u.notNull().defaultTo(1)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createTable("event_deliveries").addColumn("id","text",(u)=>u.primaryKey()).addColumn("event_id","text",(u)=>u.notNull()).addColumn("subscription_id","text",(u)=>u.notNull().references("event_subscriptions.id").onDelete("cascade")).addColumn("status","text",(u)=>u.notNull().defaultTo("pending")).addColumn("attempts","integer",(u)=>u.notNull().defaultTo(0)).addColumn("last_error","text").addColumn("delivered_at","text").addColumn("next_retry_at","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(hM`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_events_org_status").on("events").columns(["organization_id","status"]).execute(),await i.schema.createIndex("idx_events_source").on("events").columns(["source"]).execute(),await i.schema.createIndex("idx_events_type").on("events").columns(["type"]).execute(),await i.schema.createIndex("idx_events_retry").on("events").columns(["status","next_retry_at"]).execute(),await i.schema.createIndex("idx_subscriptions_connection").on("event_subscriptions").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_subscriptions_type").on("event_subscriptions").columns(["event_type"]).execute(),await i.schema.createIndex("idx_subscriptions_org_enabled").on("event_subscriptions").columns(["organization_id","enabled"]).execute(),await i.schema.createIndex("idx_subscriptions_unique").on("event_subscriptions").columns(["connection_id","event_type","publisher","filter"]).unique().execute(),await i.schema.createIndex("idx_deliveries_event").on("event_deliveries").columns(["event_id"]).execute(),await i.schema.createIndex("idx_deliveries_subscription_status").on("event_deliveries").columns(["subscription_id","status"]).execute(),await i.schema.createIndex("idx_deliveries_retry").on("event_deliveries").columns(["status","next_retry_at"]).execute()}async function Dbt(i){await i.schema.dropIndex("idx_deliveries_retry").execute(),await i.schema.dropIndex("idx_deliveries_subscription_status").execute(),await i.schema.dropIndex("idx_deliveries_event").execute(),await i.schema.dropIndex("idx_subscriptions_unique").execute(),await i.schema.dropIndex("idx_subscriptions_org_enabled").execute(),await i.schema.dropIndex("idx_subscriptions_type").execute(),await i.schema.dropIndex("idx_subscriptions_connection").execute(),await i.schema.dropIndex("idx_events_retry").execute(),await i.schema.dropIndex("idx_events_type").execute(),await i.schema.dropIndex("idx_events_source").execute(),await i.schema.dropIndex("idx_events_org_status").execute(),await i.schema.dropTable("event_deliveries").execute(),await i.schema.dropTable("event_subscriptions").execute(),await i.schema.dropTable("events").execute()}var Iru=()=>{};var YHi={};Qi(YHi,{up:()=>Nbt,down:()=>Obt});import{sql as gbt}from"kysely";async function Nbt(i){await i.schema.dropTable("audit_logs").ifExists().execute()}async function Obt(i){await i.schema.createTable("audit_logs").ifNotExists().addColumn("id","text",(u)=>u.primaryKey()).addColumn("organizationId","text").addColumn("userId","text",(u)=>u.references("user.id").onDelete("set null")).addColumn("connectionId","text",(u)=>u.references("connections.id").onDelete("set null")).addColumn("toolName","text",(u)=>u.notNull()).addColumn("allowed","integer",(u)=>u.notNull()).addColumn("duration","integer").addColumn("timestamp","text",(u)=>u.notNull().defaultTo(gbt`CURRENT_TIMESTAMP`)).addColumn("requestMetadata","text").execute(),await i.schema.createIndex("idx_audit_logs_organizationId").on("audit_logs").column("organizationId").execute(),await i.schema.createIndex("idx_audit_logs_userId").on("audit_logs").column("userId").execute(),await i.schema.createIndex("idx_audit_logs_timestamp").on("audit_logs").column("timestamp").execute()}var Aru=()=>{};var WHi={};Qi(WHi,{up:()=>Zbt,down:()=>Bbt});import{sql as H1i}from"kysely";async function Zbt(i){await i.schema.createTable("gateways").addColumn("id","text",(u)=>u.primaryKey()).addColumn("organization_id","text",(u)=>u.notNull().references("organization.id").onDelete("cascade")).addColumn("title","text",(u)=>u.notNull()).addColumn("description","text").addColumn("tool_selection_strategy","text").addColumn("status","text",(u)=>u.notNull().defaultTo("active")).addColumn("is_default","integer",(u)=>u.notNull().defaultTo(0)).addColumn("created_at","text",(u)=>u.notNull().defaultTo(H1i`CURRENT_TIMESTAMP`)).addColumn("updated_at","text",(u)=>u.notNull().defaultTo(H1i`CURRENT_TIMESTAMP`)).addColumn("created_by","text",(u)=>u.notNull().references("user.id").onDelete("cascade")).addColumn("updated_by","text").execute(),await i.schema.createTable("gateway_connections").addColumn("id","text",(u)=>u.primaryKey()).addColumn("gateway_id","text",(u)=>u.notNull().references("gateways.id").onDelete("cascade")).addColumn("connection_id","text",(u)=>u.notNull().references("connections.id").onDelete("cascade")).addColumn("selected_tools","text").addColumn("created_at","text",(u)=>u.notNull().defaultTo(H1i`CURRENT_TIMESTAMP`)).execute(),await i.schema.createIndex("idx_gateways_org").on("gateways").columns(["organization_id"]).execute(),await i.schema.createIndex("idx_gateways_org_status").on("gateways").columns(["organization_id","status"]).execute(),await H1i`CREATE UNIQUE INDEX idx_gateways_default_per_org ON gateways (organization_id) WHERE is_default = 1`.execute(i),await i.schema.createIndex("idx_gateway_connections_gateway").on("gateway_connections").columns(["gateway_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_connection").on("gateway_connections").columns(["connection_id"]).execute(),await i.schema.createIndex("idx_gateway_connections_unique").on("gateway_connections").columns(["gateway_id","connection_id"]).unique().execute()}async function Bbt(i){await i.schema.dropIndex("idx_gateway_connections_unique").execute(),await i.schema.dropIndex("idx_gateway_connections_connection").execute(),await i.schema.dropIndex("idx_gateway_connections_gateway").execute(),await i.schema.dropIndex("idx_gateways_default_per_org").execute(),await i.schema.dropIndex("idx_gateways_org_status").execute(),await i.schema.dropIndex("idx_gateways_org").execute(),await i.schema.dropTable("gateway_connections").execute(),await i.schema.dropTable("gateways").execute()}var Gru=()=>{};var LHi={};Qi(LHi,{up:()=>Fbt,down:()=>ybt});async function Fbt(i){await i.schema.alterTable("gateways").addColumn("icon","text").execute()}async function ybt(i){await i.schema.alterTable("gateways").dropColumn("icon").execute()}var zHi={};Qi(zHi,{up:()=>Tbt,down:()=>Ubt});import{sql as b1i}from"kysely";async function Tbt(i){await i.schema.alterTable("gateways").addColumn("tool_selection_mode","text",(u)=>u.notNull().defaultTo("inclusion")).execute(),await b1i`
|
|
80859
80859
|
UPDATE gateways
|
|
80860
80860
|
SET tool_selection_mode = CASE
|
|
@@ -82326,7 +82326,7 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
|
|
|
82326
82326
|
b. MONITORING_LOGS_LIST with isError true (plus connectionId/toolName/virtualMcpId filters) \u2192 failing calls.
|
|
82327
82327
|
c. MONITORING_LOG_GET on specific log ids for full input/output when the error message isn't enough.
|
|
82328
82328
|
d. Report the failing tool/connection, error pattern, and suggest the fix or owner.
|
|
82329
|
-
</workflows>`,Ic0;var Ac0=N(()=>{wf();Ic0={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=blue",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:JEf,getId:bw.USAGE_MANAGER}});function uEi(i){return cZ.find((u)=>i.startsWith(`${u.id}_`))??null}async function Gc0(i,u){if("resolveRuntime"in i)return i.resolveRuntime(u);return{instructions:i.instructions,selectedTools:i.selectedTools}}async function tEi(i,u){if(!("checklist"in i))return[];return Promise.all(i.checklist.map(async(t)=>({label:t.label,activeForm:t.activeForm,action:t.action,completed:await t.isCompleted(u),alwaysSuggest:t.alwaysSuggest})))}async function nc0(i,u,t){let f={self:U4.SELF(i),registry:U4.REGISTRY(i),"community-registry":U4.COMMUNITY_REGISTRY(i)};await Promise.all(cZ.map(async(l)=>{let c=l.getId(i);if(await t.findById(c,i))return;let w=(l.selectedConnections??["self"]).map((d)=>f[d]);await t.create(i,u,{title:l.title,description:l.description,icon:l.icon,status:"active",pinned:!1,metadata:{instructions:l.instructions},connections:w.map((d)=>({connection_id:d,selected_tools:l.selectedTools?[...l.selectedTools]:null,selected_resources:null,selected_prompts:l.selectedPrompts?[...l.selectedPrompts]:null}))},{id:c})}))}var cZ;var hV=N(()=>{wf();gc0();Oc0();yc0();Uc0();xc0();Ac0();cZ=[Fc0,Dc0,Nc0,Tc0,Pc0,Ic0]});import{DBOS as fEi}from"@dbos-inc/dbos-sdk";async function KEf(i){let u=qt(),t=new LW(u.db);await nc0(i.orgId,i.createdBy,t)}async function SEf(i){let u=qt(),t=new LW(u.db);for(let f of cZ){let l=f.getId(i.orgId),c=await t.findById(l,i.orgId);if(!c)continue;let E=f.selectedPrompts?[...f.selectedPrompts]:null;if(c.connections.every((w)=>{let d=w.selected_prompts;if(E===null)return d===null;if(d===null)return!1;if(d.length!==E.length)return!1;return d.every((_,v)=>_===E[v])}))continue;await t.update(l,i.createdBy,{connections:c.connections.map((w)=>({connection_id:w.connection_id,selected_tools:w.selected_tools,selected_resources:w.selected_resources,selected_prompts:E}))})}}async function YEf(i){await fEi.runStep(()=>KEf(i),{name:"installStudioPack"}),await fEi.runStep(()=>SEf(i),{name:"backfillSelectedPrompts"})}async function Lmi(i){await fEi.startWorkflow(WEf,{workflowID:`install-studio-pack:${LEf}:${i.orgId}`})(i)}async function kc0(){let u=await qt().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),t=new Map;for(let f of u)if(!t.has(f.organizationId))t.set(f.organizationId,f.userId);await Promise.all(Array.from(t).map(async([f,l])=>{try{await Lmi({orgId:f,createdBy:l})}catch(c){console.error("[studio-pack-backfill] enqueue failed",{orgId:f},c)}}))}var WEf,LEf="v2";var lEi=N(()=>{zE();Wmi();hV();WEf=fEi.registerWorkflow(YEf,{name:"installStudioPackWorkflow"})});import{jwtVerify as zEf,SignJWT as jc0}from"jose";import{randomBytes as QEf}from"crypto";function Xc0(){if(DV)return DV;let i=yu(),u=i.meshJwtSecret??i.betterAuthSecret;if(u)DV=new TextEncoder().encode(u);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),DV=new Uint8Array(QEf(32));return DV}async function Jc0(i,u="5m"){let t=Xc0();return await new jc0(i).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(u).sign(t)}async function zmi(i){try{let u=Xc0(),{payload:t}=await zEf(i,u);return t}catch{return}}async function W7(i,u,t=3600){let f=yu(),l=f.meshJwtSecret??f.betterAuthSecret;if(!l)throw Error("A deterministic JWT secret is required to mint gateway JWTs \u2014 set MESH_JWT_SECRET or BETTER_AUTH_SECRET");let c=new TextEncoder().encode(l);return await new jc0({iss:"mesh",sub:i,...u&&{email:u}}).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Math.floor(Date.now()/1000)+t).sign(c)}var DV=null;var EZ=N(()=>{xt()});class gV{constructor(){this._messageQueue=[]}static createLinkedPair(){let i=new gV,u=new gV;return i._otherTransport=u,u._otherTransport=i,[i,u]}async start(){while(this._messageQueue.length>0){let i=this._messageQueue.shift();this.onmessage?.(i.message,i.extra)}}async close(){let i=this._otherTransport;this._otherTransport=void 0,await i?.close(),this.onclose?.()}async send(i,u){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage(i,{authInfo:u?.authInfo});else this._otherTransport._messageQueue.push({message:i,extra:{authInfo:u?.authInfo}})}}import{SpanStatusCode as Kc0}from"@opentelemetry/api";function di(i){return{...i,execute:async(u,t)=>{return await t.timings.measure(`tool.${i.name}`,async()=>t.tracer.startActiveSpan(`tool.${i.name}`,{attributes:{"tool.name":i.name,"organization.id":t.organization?.id??"system","user.id":t.auth.user?.id??t.auth.apiKey?.userId??"anonymous"}},async(f)=>{try{t.toolName=i.name,t.access.setToolName?.(i.name);let l=await i.handler(u,t);return f.setStatus({code:Kc0.OK}),l}catch(l){throw f.setStatus({code:Kc0.ERROR,message:l.message}),f.recordException(l),l}finally{f.end()}}))}}}var du=()=>{};function Bi(i){if(!i.organization)throw Error("This operation requires organization scope");return i.organization}function Vu(i){return i.auth.user?.id??i.auth.apiKey?.userId}function HEf(i){return!!(i.auth.user||i.auth.apiKey)}function Si(i){if(!HEf(i))throw Error("Authentication required")}import{z as _f}from"zod";var cEi,Sc0,Yc0,Wc0,Lc0,zc0,Qc0,Hc0,bc0,Rc0;var zW=N(()=>{cEi=_f.record(_f.string(),_f.array(_f.string())),Sc0=_f.object({id:_f.string().describe("Unique identifier for the API key"),name:_f.string().describe("Human-readable name for the API key"),userId:_f.string().describe("ID of the user who owns this API key"),permissions:cEi.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:_f.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:_f.string().datetime().describe("When the API key was created (ISO 8601)")}),Yc0=_f.object({name:_f.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:cEi.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:_f.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:_f.record(_f.string(),_f.unknown()).optional().describe("Additional metadata to store with the API key")}),Wc0=_f.object({id:_f.string().describe("Unique identifier for the API key"),name:_f.string().describe("Human-readable name for the API key"),key:_f.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:cEi.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:_f.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:_f.string().datetime().describe("When the API key was created (ISO 8601)")}),Lc0=_f.object({}),zc0=_f.object({items:_f.array(Sc0).describe("List of API keys (without key values)")}),Qc0=_f.object({keyId:_f.string().describe("ID of the API key to update"),name:_f.string().min(1).max(64).optional().describe("New name for the API key"),permissions:cEi.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:_f.record(_f.string(),_f.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),Hc0=_f.object({item:Sc0.describe("The updated API key (without key value)")}),bc0=_f.object({keyId:_f.string().describe("ID of the API key to delete")}),Rc0=_f.object({success:_f.boolean().describe("Whether the deletion was successful"),keyId:_f.string().describe("ID of the deleted API key")})});var Qmi;var Cc0=N(()=>{e4();du();zW();Qmi=di({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Yc0,outputSchema:Wc0,handler:async(i,u)=>{Si(u),await u.access.check();let t=await u.boundAuth.apiKey.create({name:i.name,permissions:i.permissions,expiresIn:i.expiresIn,metadata:{...i.metadata,organization:u.organization}}),f=t.expiresAt?t.expiresAt instanceof Date?t.expiresAt.toISOString():t.expiresAt:null,l=t.createdAt instanceof Date?t.createdAt.toISOString():t.createdAt,c=Vu(u);if(c)ou.capture({distinctId:c,event:"api_key_created",...u.organization?.id?{groups:{organization:u.organization.id}}:{},properties:{key_id:t.id,key_name:t.name??i.name,organization_id:u.organization?.id,has_expiry:!!f}});return{id:t.id,name:t.name??i.name,key:t.key,permissions:t.permissions??{},expiresAt:f,createdAt:l}}})});var Hmi;var Mc0=N(()=>{e4();du();zW();Hmi=di({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:bc0,outputSchema:Rc0,handler:async(i,u)=>{Si(u),await u.access.check();let t=Vu(u);if(!t)throw Error("User ID required to delete API key");let l=(await u.boundAuth.apiKey.list())?.find((w)=>w.id===i.keyId);if(!l)throw Error("API key not found");let E=l.metadata?.organization?.id,$=u.organization?.id;if(E!==$)throw Error("Cannot delete API key from another organization");if(await u.boundAuth.apiKey.delete(i.keyId),$)ou.capture({distinctId:t,event:"api_key_deleted",groups:{organization:$},properties:{key_id:i.keyId,organization_id:$}});return{success:!0,keyId:i.keyId}}})});var bmi;var qc0=N(()=>{du();zW();bmi=di({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Lc0,outputSchema:zc0,handler:async(i,u)=>{Si(u),await u.access.check();let t=await u.boundAuth.apiKey.list(),f=u.organization?.id;return{items:(t??[]).filter((c)=>{return c.metadata?.organization?.id===f}).map((c)=>({id:c.id,name:c.name??"Unnamed Key",userId:c.userId,permissions:c.permissions??{},expiresAt:c.expiresAt?c.expiresAt instanceof Date?c.expiresAt.toISOString():c.expiresAt:null,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():c.createdAt}))}}})});var Rmi;var Vc0=N(()=>{du();zW();Rmi=di({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Qc0,outputSchema:Hc0,handler:async(i,u)=>{if(Si(u),await u.access.check(),!Vu(u))throw Error("User ID required to update API key");let l=(await u.boundAuth.apiKey.list())?.find((d)=>d.id===i.keyId);if(!l)throw Error(`API key not found: ${i.keyId}`);let E=l.metadata?.organization?.id,$=u.organization?.id;if(E!==$)throw Error("Cannot update API key from another organization");let w=await u.boundAuth.apiKey.update({keyId:i.keyId,name:i.name,permissions:i.permissions,metadata:{...i.metadata,organization:u.organization}});if(!w)throw Error(`Failed to update API key: ${i.keyId}`);return{item:{id:w.id,name:w.name??i.name??"Unnamed Key",userId:w.userId,permissions:w.permissions??{},expiresAt:w.expiresAt?w.expiresAt instanceof Date?w.expiresAt.toISOString():w.expiresAt:null,createdAt:w.createdAt instanceof Date?w.createdAt.toISOString():w.createdAt}}}})});var rc0=N(()=>{Cc0();Mc0();qc0();Vc0();zW()});function EEi(i){let u=i.trim();if(!u)return{ok:!1,error:"Enter a website URL."};let t=REf.test(u),f=CEf.test(u),l=MEf.test(u);if(t&&!f&&!l)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let c=f?u:`https://${u}`,E;try{E=new URL(c)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(E.protocol!=="http:"&&E.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let $=E.hostname.split(".");if($.length<2||$.some((w)=>!w||!qEf.test(w)))return{ok:!1,error:"Enter a valid website URL."};return E.protocol="https:",{ok:!0,value:E.origin}}var REf,CEf,MEf,qEf;var Cmi=N(()=>{REf=/^[a-zA-Z][a-zA-Z\d+.-]*:/,CEf=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,MEf=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,qEf=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as mc0}from"zod";function ec0(i){if(i.baseUrl)return i.baseUrl.replace(/\/+$/,"");return((i.settings??yu()).commerceDiscoveryInternalApiUrl??VEf).replace(/\/+$/,"")}function ac0(i){let u=i.apiKey??(i.settings??yu()).commerceDiscoveryInternalApiKey;if(!u)throw Error("COMMERCE_DISCOVERY_INTERNAL_API_KEY is required to set up Commerce Discovery.");return u}function oc0(i){return new URL(i).hostname}async function sc0(i){let u=`Commerce Discovery auth failed with status ${i.status}.`,t=await i.text().catch(()=>"");if(!t)return u;try{let f=JSON.parse(t),l=typeof f.error==="string"?f.error:typeof f.message==="string"?f.message:null;return l?`Commerce Discovery auth failed: ${l}.`:u}catch{return u}}async function Mmi(i,u={}){let t=ec0(u),f=ac0(u),l=u.fetchImpl??fetch,c=oc0(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/upgrade`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId,...i.orgName?{name:i.orgName}:{}})});if(!$.ok)throw Error(await sc0($));let w=rEf.safeParse(await $.json());if(!w.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:w.data.token}}async function pc0(i,u={}){let t=ec0(u),f=ac0(u),l=u.fetchImpl??fetch,c=oc0(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/run`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId})});if($.status===409)return{triggered:!1,reason:"not_upgraded"};if(!$.ok)throw Error(await sc0($));return{triggered:!0}}var VEf,rEf;var qmi=N(()=>{wf();xt();VEf=new URL(Hqi).origin,rEf=mc0.object({token:mc0.string().min(1)})});import{z as NV}from"zod";var mEf,eEf,Vmi;var iE0=N(()=>{Cmi();du();qmi();mEf=NV.object({siteUrl:NV.string().min(1).describe("Website URL to run the diagnostic for.")}),eEf=NV.object({triggered:NV.boolean(),reason:NV.string().optional()}),Vmi=di({name:"COMMERCE_DISCOVERY_RUN",description:"Trigger the Commerce Discovery diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:mEf,outputSchema:eEf,handler:async(i,u)=>{Si(u);let t=Bi(u);await u.access.check();let f=EEi(i.siteUrl);if(!f.ok)throw Error(f.error);return pc0({siteUrl:f.value,orgId:t.id})}})});var L7=N(()=>{a6i()});import{z as Zv}from"zod";function sEf(i){return!i.connection_token}async function pEf(i,u,t,f){let l=await i.storage.connections.findById(u,t);if(l)return l;throw f}async function i$f(i,u,t,f){let l=await i.storage.virtualMcps.findById(u,t);if(l)return l;throw f}var uE0,aEf,oEf,rmi;var tE0=N(()=>{wf();Cmi();du();Ov();L7();qmi();uE0=bqi,aEf=Zv.object({siteUrl:Zv.string().min(1).describe("Website URL to configure.")}),oEf=Zv.object({connection:Zc,virtualMcp:Bc,reportApp:Zv.object({connectionId:Zv.string(),virtualMcpId:Zv.string(),toolName:Zv.literal(uE0)}),created:Zv.object({connection:Zv.boolean(),virtualMcp:Zv.boolean()})});rmi=di({name:"COMMERCE_DISCOVERY_SETUP",description:"Create or return the Commerce Discovery connection and virtual MCP for the current organization.",annotations:{title:"Set Up Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:aEf,outputSchema:oEf,handler:async(i,u)=>{Si(u);let t=Bi(u);await u.access.check("COLLECTION_CONNECTIONS_CREATE");let f=Vu(u);if(!f)throw Error("User ID required to set up Commerce Discovery");let l=EEi(i.siteUrl);if(!l.ok)throw Error(l.error);let c=U4.COMMERCE_DISCOVERY(t.id),E=eqi(t.id),$=await u.storage.connections.findById(c,t.id),w={connection:!1,virtualMcp:!1};if($&&sEf($)){let _=await Mmi({siteUrl:l.value,orgId:t.id,orgName:t.name});if(_.authorizationToken)console.log("[commerce-discovery] repairing missing auth token",{orgId:t.id,siteUrl:l.value,connectionId:c}),$=await u.storage.connections.update($.id,{connection_token:_.authorizationToken})}if(!$){let _=await Mmi({siteUrl:l.value,orgId:t.id,orgName:t.name});console.log("[commerce-discovery] creating connection",{orgId:t.id,siteUrl:l.value,connectionId:c});try{let v=aqi(t.id,_.authorizationToken);$=await u.storage.connections.create({...v,metadata:{...v.metadata??{},siteUrl:l.value},organization_id:t.id,created_by:f}),w.connection=!0}catch(v){$=await pEf(u,c,t.id,v)}}let d=await u.storage.virtualMcps.findById(E,t.id);if(!d){console.log("[commerce-discovery] creating virtual MCP",{orgId:t.id,siteUrl:l.value,connectionId:$.id,virtualMcpId:E});try{d=await u.storage.virtualMcps.create(t.id,f,oqi(t.id,$.id),{id:E}),w.virtualMcp=!0}catch(_){d=await i$f(u,E,t.id,_)}}if(!d.pinned)d=await u.storage.virtualMcps.update(d.id,f,{pinned:!0});return{connection:$,virtualMcp:d,reportApp:{connectionId:$.id,virtualMcpId:d.id,toolName:uE0},created:w}}})});var fE0=N(()=>{iE0();tE0()});var mmi=J((lE0)=>{Object.defineProperty(lE0,"__esModule",{value:!0});lE0.kvPrefix=lE0.KvWatchInclude=void 0;lE0.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};lE0.kvPrefix="KV_"});var OE0=J((gE0)=>{Object.defineProperty(gE0,"__esModule",{value:!0});gE0.KvStatusImpl=gE0.Bucket=gE0.Kvm=gE0.kvOperationHdr=void 0;gE0.Base64KeyCodec=f$f;gE0.NoopKvCodecs=emi;gE0.defaultBucketOpts=$E0;gE0.validateKey=wE0;gE0.validateSearchKey=dE0;gE0.hasWildcards=_E0;gE0.validateBucket=$Ei;var C1=Ww(),E1=x1i(),R1=mmi();function f$f(){let i=(u,t)=>{let f=[];for(let l of u.split("."))switch(l){case">":case"*":f.push(l);break;default:f.push(t(l));break}return f.join(".")};return{encode(u){return i(u,btoa)},decode(u){return i(u,atob)}}}function emi(){return{key:{encode(i){return i},decode(i){return i}},value:{encode(i){return typeof i==="string"?new TextEncoder().encode(i):i},decode(i){return i}}}}function $E0(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:emi(),storage:E1.StorageType.File}}gE0.kvOperationHdr="KV-Operation";var EE0="$KV",l$f=/^[-/=.\w]+$/,c$f=/^[-/=.>*\w]+$/,E$f=/^[-\w]+$/;function wE0(i){if(i.startsWith(".")||i.endsWith(".")||!l$f.test(i))throw Error(`invalid key: ${i}`)}function dE0(i){if(i.startsWith(".")||i.endsWith(".")||i.includes("..")||!c$f.test(i))throw Error(`invalid key: ${i}`)}function _E0(i){if(i.startsWith(".")||i.endsWith("."))throw Error(`invalid key: ${i}`);let u=i.split("."),t=!1;for(let f=0;f<u.length;f++)switch(u[f]){case"*":t=!0;break;case">":if(f!==u.length-1)throw Error(`invalid key: ${i}`);t=!0;break;default:}return t}function $Ei(i){if(!E$f.test(i))throw Error(`invalid bucket name: ${i}`)}class vE0{js;constructor(i){this.js=(0,E1.toJetStreamClient)(i)}create(i,u={}){return this.#i(i,u)}open(i,u={}){return u.bindOnly=!0,this.#i(i,u)}#i(i,u={}){let{ok:t,min:f}=this.js.nc.features.get(C1.Feature.JS_KV);if(!t)return Promise.reject(Error(`kv is only supported on servers ${f} or better`));if(u.bindOnly)return QW.bind(this.js,i,u);return QW.create(this.js,i,u)}list(){let i=(t)=>{let l=t.streams.filter((E)=>{return E.config.name.startsWith(R1.kvPrefix)});l.forEach((E)=>{E.config.sealed=E.config.sealed||!1,E.config.deny_delete=E.config.deny_delete||!1,E.config.deny_purge=E.config.deny_purge||!1,E.config.allow_rollup_hdrs=E.config.allow_rollup_hdrs||!1});let c="";if(l.length)c=this.js.nc.info?.cluster??"";return l.map((E)=>{return new wEi(E,c)})},u=`${this.js.prefix}.STREAM.LIST`;return new E1.ListerImpl(u,i,this.js)}}gE0.Kvm=vE0;class QW{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor(i,u,t){$Ei(i),this.js=u,this.jsm=t,this.bucket=i,this.prefix=EE0,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create(i,u,t={}){$Ei(u);let f=await i.jetstreamManager(),l=new QW(u,i,f);return await l.init(t),l}static async bind(i,u,t={}){let f=i.getOptions()?.checkAPI||t.bindOnly===!1,l=await i.jetstreamManager(f),c={config:{allow_direct:t.allow_direct}};$Ei(u);let E=new QW(u,i,l);return c.config.name=t.streamName??E.bucketName(),Object.assign(E,c),E.stream=c.config.name,E.codec=t.codec||emi(),E.direct=c.config.allow_direct??!1,E.initializePrefixes(c),E}async init(i={}){let u=Object.assign($E0(),i);this.codec=u.codec;let t={};if(this.stream=t.name=i.streamName??this.bucketName(),t.retention=E1.RetentionPolicy.Limits,t.max_msgs_per_subject=u.history,u.max_bytes)t.max_bytes=u.max_bytes;if(t.max_msg_size=u.maxValueSize,t.storage=u.storage,i.placement)t.placement=i.placement;if(i.republish)t.republish=i.republish;if(i.description)t.description=i.description;if(i.markerTTL)t.allow_msg_ttl=!0,t.subject_delete_marker_ttl=(0,C1.nanos)(u.markerTTL);if(i.mirror){let d=Object.assign({},i.mirror);if(!d.name.startsWith(R1.kvPrefix))d.name=`${R1.kvPrefix}${d.name}`;t.mirror=d,t.mirror_direct=!0}else if(i.sources){let d=i.sources.map((_)=>{let v=Object.assign({},_),h=v.name.startsWith(R1.kvPrefix)?v.name.substring(R1.kvPrefix.length):v.name;if(!v.name.startsWith(R1.kvPrefix))v.name=`${R1.kvPrefix}${v.name}`;if(!_.external&&h!==this.bucket)v.subject_transforms=[{src:`$KV.${h}.>`,dest:`$KV.${this.bucket}.>`}];return v});t.sources=d,t.subjects=[this.subjectForBucket()]}else t.subjects=[this.subjectForBucket()];if(i.metadata)t.metadata=i.metadata;if(typeof i.compression==="boolean")t.compression=i.compression?E1.StoreCompression.S2:E1.StoreCompression.None;let f=this.js.nc,l=f.getServerVersion(),c=l?(0,C1.compare)(l,(0,C1.parseSemVer)("2.7.2"))>=0:!1;t.discard=c?E1.DiscardPolicy.New:E1.DiscardPolicy.Old;let{ok:E,min:$}=f.features.get(C1.Feature.JS_ALLOW_DIRECT);if(!E&&i.allow_direct===!0){let d=l?`${l.major}.${l.minor}.${l.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${d} - requires ${$}`))}if(i.allow_direct=typeof i.allow_direct==="boolean"?i.allow_direct:E,t.allow_direct=i.allow_direct,this.direct=t.allow_direct,t.num_replicas=u.replicas,u.ttl)t.max_age=(0,C1.nanos)(u.ttl);t.allow_rollup_hdrs=!0;let w;try{if(w=await this.jsm.streams.info(t.name),!w.config.allow_direct&&this.direct===!0)this.direct=!1}catch(d){if(d.message==="stream not found")w=await this.jsm.streams.add(t);else throw d}this.initializePrefixes(w)}initializePrefixes(i){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:u}=i.config;if(u){let t=u.name;if(t.startsWith(R1.kvPrefix))t=t.substring(R1.kvPrefix.length);if(u.external&&u.external.api!==""){let f=u.name.substring(R1.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${f}`,this.editPrefix=`${u.external.api}.$KV.${t}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${R1.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey(i,u=!1){let t=[];if(u){if(this.useJsPrefix)t.push(this.js.apiPrefix);if(this.editPrefix!=="")t.push(this.editPrefix);else t.push(this.prefix)}else if(this.prefix)t.push(this.prefix);return t.push(i),t.join(".")}fullKeyName(i){if(this.prefix!=="")return`${this.prefix}.${i}`;return`${EE0}.${this.bucket}.${i}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey(i){let u=[];for(let t of i.split("."))switch(t){case">":case"*":u.push(t);break;default:u.push(this.codec.key.encode(t));break}return u.join(".")}decodeKey(i){let u=[];for(let t of i.split("."))switch(t){case">":case"*":u.push(t);break;default:u.push(this.codec.key.decode(t));break}return u.join(".")}validateKey=wE0;validateSearchKey=dE0;hasWildcards=_E0;close(){return Promise.resolve()}dataLen(i,u){let t=u?u.get(E1.JsHeaders.MessageSizeHdr)||"":"";if(t!=="")return parseInt(t,10);return i.length}smToEntry(i){return new hE0(this.bucket,this.prefixLen,i,this.codec)}jmToWatchEntry(i,u){return new DE0(this.bucket,this.prefixLen,i,u,this.codec)}async create(i,u,t){let f;try{let c={previousSeq:0},E=await this._put(i,u,c,t);return Promise.resolve(E)}catch(c){if(f=c,c instanceof E1.JetStreamApiError){let E=c;if(E.code!==E1.JetStreamApiCodes.StreamWrongLastSequence&&E.code!==E1.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(c)}}let l=0;try{let c=await this.get(i);if(c?.operation==="DEL"||c?.operation==="PURGE")return l=c!==null?c.revision:0,this._put(i,u,{previousSeq:l},t);else return Promise.reject(f)}catch(c){return Promise.reject(c)}}update(i,u,t,f){if(t<=0)throw Error("version must be greater than 0");return this.put(i,u,{previousSeq:t,timeout:f})}async _put(i,u,t={},f){let l=this.encodeKey(i);this.validateKey(l),u=this.codec.value.encode(u);let c={timeout:t?.timeout};if(t.previousSeq!==void 0){let E=(0,C1.headers)();c.headers=E,E.set(E1.PubHeaders.ExpectedLastSubjectSequenceHdr,`${t.previousSeq}`)}if(f)(c.headers||(0,C1.headers)()).set(E1.PubHeaders.MessageTTL,f);try{return(await this.js.publish(this.subjectForKey(l,!0),u,c)).seq}catch(E){return Promise.reject(E)}}put(i,u,t={}){return this._put(i,u,t)}async get(i,u){let t=this.encodeKey(i);this.validateKey(t);let f={last_by_subj:this.subjectForKey(t)};if(u&&u.revision>0)f={seq:u.revision};let l=null;try{if(this.direct)l=await this.jsm.direct.getMessage(this.bucketName(),f);else l=await this.jsm.streams.getMessage(this.bucketName(),f);if(l===null)return null;let c=this.smToEntry(l);if(c.rawKey!==t)return null;return c}catch(c){throw c}}purge(i,u){return this._deleteOrPurge(i,"PURGE",u)}delete(i,u){return this._deleteOrPurge(i,"DEL",u)}async purgeDeletes(i=1800000){let u=[],t=await this.history({key:">"});await(async()=>{for await(let E of t)if(E.operation==="DEL"||E.operation==="PURGE")u.push(E)})().then(),t.stop();let f=Date.now()-i,l=u.map((E)=>{let $=this.subjectForKey(E.key);if(E.created.getTime()>=f)return this.jsm.streams.purge(this.stream,{filter:$,keep:1});else return this.jsm.streams.purge(this.stream,{filter:$,keep:0})}),c=await Promise.all(l);return c.unshift({success:!0,purged:0}),c.reduce((E,$)=>{return E.purged+=$.purged,E})}async _deleteOrPurge(i,u,t){if(!this.hasWildcards(i))return this._doDeleteOrPurge(i,u,t);let f=await this.keys(i),l=[];for await(let c of f)if(l.push(this._doDeleteOrPurge(c,u)),l.length===100)await Promise.all(l),l.length=0;if(l.length>0)await Promise.all(l)}async _doDeleteOrPurge(i,u,t){let f=this.encodeKey(i);this.validateKey(f);let l=(0,C1.headers)();if(l.set(gE0.kvOperationHdr,u),u==="PURGE"){let c=t;if(l.set(E1.JsHeaders.RollupHdr,E1.JsHeaders.RollupValueSubject),typeof c?.ttl==="string"&&c.ttl!=="")l.set(E1.PubHeaders.MessageTTL,`${c.ttl}`)}if(t?.previousSeq)l.set(E1.PubHeaders.ExpectedLastSubjectSequenceHdr,`${t.previousSeq}`);await this.js.publish(this.subjectForKey(f,!0),C1.Empty,{headers:l})}_buildCC(i,u,t={}){let l=(!Array.isArray(i)?[i]:i).map(($)=>{let w=this.encodeKey($);return this.validateSearchKey($),this.fullKeyName(w)}),c=E1.DeliverPolicy.LastPerSubject;if(u===R1.KvWatchInclude.AllHistory)c=E1.DeliverPolicy.All;if(u===R1.KvWatchInclude.UpdatesOnly)c=E1.DeliverPolicy.New;let E=void 0;if(l.length===1)E=l[0],l=void 0;return Object.assign({deliver_policy:c,ack_policy:E1.AckPolicy.None,filter_subjects:l,filter_subject:E,flow_control:!0,idle_heartbeat:(0,C1.nanos)(5000)},t)}remove(i){return this.purge(i)}async history(i={}){let u=i.key??">",t={};t.headers_only=i.headers_only||!1;let f=new C1.QueuedIteratorImpl,l=()=>{f.stop()},c=this._buildCC(u,R1.KvWatchInclude.AllHistory,t),E=await this.js.consumers.getPushConsumer(this.stream,c);if(f._data=E,(await E.info(!0)).num_pending===0)return f.push(l),f;let w=await E.consume({callback:(d)=>{let _=this.jmToWatchEntry(d,!1);if(f.push(_),f.received++,d.info.pending===0)f.push(l)}});return w.closed().then(()=>{f.push(l)}),(async()=>{for await(let d of w.status())switch(d.type){case"heartbeat":f.push(()=>{f.stop()});break}})().then(),f.iterClosed.then(()=>{w.stop()}),f}canSetWatcherName(){let i=this.js.nc,{ok:u}=i.features.get(C1.Feature.JS_NEW_CONSUMER_CREATE_API);return u}async watch(i={}){let u=i.key??">",t=new C1.QueuedIteratorImpl,f={};f.headers_only=i.headers_only||!1;let l=R1.KvWatchInclude.LastValue;if(i.include===R1.KvWatchInclude.AllHistory)l=R1.KvWatchInclude.AllHistory;else if(i.include===R1.KvWatchInclude.UpdatesOnly)l=R1.KvWatchInclude.UpdatesOnly;let c=i.ignoreDeletes===!0,E=this._buildCC(u,l,f);if(E.name=`KV_WATCHER_${C1.nuid.next()}`,i.resumeFromRevision&&i.resumeFromRevision>0)E.deliver_policy=E1.DeliverPolicy.StartSequence,E.opt_start_seq=i.resumeFromRevision;let $=await this.js.consumers.getPushConsumer(this.stream,E),d=(await $.info(!0)).num_pending,_=l===R1.KvWatchInclude.UpdatesOnly||d===0;t._data=$;let v=0,h=await $.consume({callback:(D)=>{if(!_)v++,_=v>=d;let g=this.jmToWatchEntry(D,_);if(c&&g.operation==="DEL")return;t.push(g),t.received++}});return t.iterClosed.then(()=>{h.stop()}),h.closed().then(()=>{t.push(()=>{t.stop()})}),t}async keys(i=">"){let u=new C1.QueuedIteratorImpl,t=this._buildCC(i,R1.KvWatchInclude.LastValue,{headers_only:!0}),f=await this.js.consumers.getPushConsumer(this.stream,t);if((await f.info()).num_pending===0)return u.stop(),u;u._data=f;let c=await f.consume({callback:(E)=>{let $=E.headers?.get(gE0.kvOperationHdr);if($!=="DEL"&&$!=="PURGE"){let w=this.decodeKey(E.subject.substring(this.prefixLen));u.push(w)}if(E.info.pending===0)c.stop()}});return(async()=>{for await(let E of c.status())switch(E.type){case"heartbeat":u.push(()=>{u.stop()});break}})().then(),c.closed().then(()=>{u.push(()=>{u.stop()})}),u.iterClosed.then(()=>{c.stop()}),u}purgeBucket(i){return this.jsm.streams.purge(this.bucketName(),i)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let u=this.js.nc.info?.cluster??"",t=this.bucketName(),f=await this.jsm.streams.info(t);return new wEi(f,u)}}gE0.Bucket=QW;class wEi{si;cluster;constructor(i,u=""){this.si=i,this.cluster=u}get bucket(){return this.si.config.name.startsWith(R1.kvPrefix)?this.si.config.name.substring(R1.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,C1.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,C1.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==E1.StoreCompression.None;return!1}}gE0.KvStatusImpl=wEi;class hE0{bucket;sm;prefixLen;codec;constructor(i,u,t,f){this.bucket=i,this.prefixLen=u,this.sm=t,this.codec=f}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(gE0.kvOperationHdr)||"PUT"}get length(){let i=this.sm.header.get(E1.JsHeaders.MessageSizeHdr)||"";if(i!=="")return parseInt(i,10);return this.sm.data.length}json(i){return JSON.parse(C1.TD.decode(this.value),i)}string(){return C1.TD.decode(this.value)}}class DE0{bucket;sm;prefixLen;update;codec;constructor(i,u,t,f,l){this.bucket=i,this.prefixLen=u,this.sm=t,this.update=f,this.codec=l}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,C1.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(gE0.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let i=this.sm.headers?.get(E1.JsHeaders.MessageSizeHdr)||"";if(i!=="")return parseInt(i,10);return this.sm.data.length}get isUpdate(){return this.update}json(i){return JSON.parse(C1.TD.decode(this.value),i)}string(){return C1.TD.decode(this.value)}}});var ami=J((J5)=>{Object.defineProperty(J5,"__esModule",{value:!0});J5.validateKey=J5.validateBucket=J5.NoopKvCodecs=J5.Kvm=J5.defaultBucketOpts=J5.Bucket=J5.Base64KeyCodec=J5.KvWatchInclude=J5.kvPrefix=void 0;var ZE0=mmi();Object.defineProperty(J5,"kvPrefix",{enumerable:!0,get:function(){return ZE0.kvPrefix}});Object.defineProperty(J5,"KvWatchInclude",{enumerable:!0,get:function(){return ZE0.KvWatchInclude}});var $Z=OE0();Object.defineProperty(J5,"Base64KeyCodec",{enumerable:!0,get:function(){return $Z.Base64KeyCodec}});Object.defineProperty(J5,"Bucket",{enumerable:!0,get:function(){return $Z.Bucket}});Object.defineProperty(J5,"defaultBucketOpts",{enumerable:!0,get:function(){return $Z.defaultBucketOpts}});Object.defineProperty(J5,"Kvm",{enumerable:!0,get:function(){return $Z.Kvm}});Object.defineProperty(J5,"NoopKvCodecs",{enumerable:!0,get:function(){return $Z.NoopKvCodecs}});Object.defineProperty(J5,"validateBucket",{enumerable:!0,get:function(){return $Z.validateBucket}});Object.defineProperty(J5,"validateKey",{enumerable:!0,get:function(){return $Z.validateKey}})});var omi=J((z7)=>{Object.defineProperty(z7,"__esModule",{value:!0});z7.NoopKvCodecs=z7.Kvm=z7.defaultBucketOpts=z7.Bucket=z7.Base64KeyCodec=z7.KvWatchInclude=void 0;var Z$f=ami();Object.defineProperty(z7,"KvWatchInclude",{enumerable:!0,get:function(){return Z$f.KvWatchInclude}});var ZV=ami();Object.defineProperty(z7,"Base64KeyCodec",{enumerable:!0,get:function(){return ZV.Base64KeyCodec}});Object.defineProperty(z7,"Bucket",{enumerable:!0,get:function(){return ZV.Bucket}});Object.defineProperty(z7,"defaultBucketOpts",{enumerable:!0,get:function(){return ZV.defaultBucketOpts}});Object.defineProperty(z7,"Kvm",{enumerable:!0,get:function(){return ZV.Kvm}});Object.defineProperty(z7,"NoopKvCodecs",{enumerable:!0,get:function(){return ZV.NoopKvCodecs}})});function dEi(){let i=new TextEncoder,u=new TextDecoder;return{encode:(t)=>i.encode(JSON.stringify(t)),decode:(t)=>JSON.parse(u.decode(t))}}class pmi{options;kv=null;codec=dEi();constructor(i){this.options=i}async init(){let i=this.options.getJetStream();if(!i)return;this.kv=await new FE0.Kvm(i).create(F$f,{storage:BE0.StorageType.Memory})}async get(i,u){if(!this.kv)return null;try{let t=await this.kv.get(`${i}.${u}`);if(!t?.value?.length)return null;if(t.operation==="DEL"||t.operation==="PURGE")return null;return this.codec.decode(t.value)}catch{return null}}async set(i,u,t){if(!this.kv)return;try{await this.kv.put(`${i}.${u}`,this.codec.encode(t))}catch{}}async invalidate(i){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(t)=>{try{await this.kv.delete(`${t}.${i}`)}catch{}}))}teardown(){this.kv=null}}function y$f(i,u,t){if(t<=0)return!0;if(i===void 0)return!0;return u-i>=t}function _Ei(i){return i instanceof Xu&&i.code===Qu.MethodNotFound}function T$f(i){return i instanceof Xu&&i.code===-32000&&/connection closed/i.test(i.message)}async function H7(i,u,t,f,l,c=0){if(!f)try{return await t()}catch(d){if(_Ei(d))return[];return BV.add(1,{type:i,outcome:"error",stage:"no_cache"}),null}let E=`${i}:${u}`,$=await f.get(i,u);if($===null)try{let d=await t();return f.set(i,u,d).catch(()=>{}),smi.set(E,Date.now()),BV.add(1,{type:i,outcome:"miss",stage:"miss"}),d}catch(d){if(_Ei(d))return f.set(i,u,[]).catch(()=>{}),[];return BV.add(1,{type:i,outcome:"error",stage:"miss"}),null}if(BV.add(1,{type:i,outcome:"hit",stage:"hit"}),y$f(smi.get(E),Date.now(),c)&&!vEi.has(E)){vEi.add(E),smi.set(E,Date.now());let d=t().then((_)=>f.set(i,u,_)).catch((_)=>{if(_Ei(_)||T$f(_)){if(_Ei(_))f.set(i,u,[]).catch(()=>{});return}BV.add(1,{type:i,outcome:"error",stage:"revalidation"})}).finally(()=>vEi.delete(E));l?.(d)}return $}function iei(i){yE0=i}function Il(){return yE0}var BE0,FE0,BV,F$f="DECOCMS_MCP_LISTS",vEi,smi,Q7=30000,yE0=null;var Mw=N(()=>{El();Q1();BE0=k(o2(),1),FE0=k(omi(),1),BV=Mt.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});vEi=new Set;Mt.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback((i)=>i.observe(vEi.size));smi=new Map});var FV=(i,u)=>{if(u===null||u===void 0)return;let t=i.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),f=u;for(let l of t){if(f===null||f===void 0||typeof f!=="object")return;f=f[l]}return f};function hEi(i){let u=i.split("::");if(u.length!==2||!u[0]||!u[1])throw Error(`Invalid scope format: ${i}. Expected format: "KEY::SCOPE"`);return u}function U$f(i){try{return hEi(i)}catch{return null}}function P$f(i){if(typeof i==="object"&&i!==null&&"value"in i){let u=i.value;if(typeof u==="string")return u}return null}function uei(i,u){let t={};if(!i||!u)return t;for(let f of u){if(f==="*"){t["*"]=["*"];continue}let l=U$f(f);if(!l)continue;let[c,E]=l,$=FV(c,i),w=P$f($);if(w){if(!t[w])t[w]=[];t[w].push(E)}}return t}function TE0(i,u){let t=uei(i,u);return new Set(Object.keys(t).filter((f)=>f!=="*"))}var tei=()=>{};async function UE0(i){if(!i.refreshToken)return{success:!1,permanent:!1,error:"No refresh token available"};if(!i.tokenEndpoint)return{success:!1,permanent:!1,error:"No token endpoint available"};if(!i.clientId)return{success:!1,permanent:!1,error:"No client ID available"};try{let u=new URLSearchParams({grant_type:"refresh_token",refresh_token:i.refreshToken,client_id:i.clientId});if(i.clientSecret)u.set("client_secret",i.clientSecret);if(i.scope)u.set("scope",i.scope);let t=await fetch(i.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:u.toString()});if(!t.ok){let l=await t.text(),c,E;try{let w=JSON.parse(l);c=w.error,E=w.error_description}catch{}let $=t.status===400&&!!c&&x$f.has(c);return($?console.error:console.warn)("[TokenRefresh] refresh failed",{connectionId:i.connectionId,tokenEndpoint:i.tokenEndpoint,status:t.status,errorCode:c,errorDescription:E,permanent:$}),{success:!1,permanent:$,status:t.status,errorCode:c,error:E||c||`Token refresh failed: ${t.status}`}}let f=await t.json();return{success:!0,accessToken:f.access_token,refreshToken:f.refresh_token||i.refreshToken,expiresIn:f.expires_in,scope:f.scope}}catch(u){return console.warn("[TokenRefresh] network/parse error",{connectionId:i.connectionId,tokenEndpoint:i.tokenEndpoint,message:u instanceof Error?u.message:String(u)}),{success:!1,permanent:!1,error:u instanceof Error?u.message:"Token refresh failed"}}}var x$f;var PE0=N(()=>{x$f=new Set(["invalid_grant","bad_refresh_token"])});import{createHash as I$f,randomBytes as A$f,timingSafeEqual as WZ1}from"crypto";function n$f(i){return i.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function lei(i){return I$f("sha256").update(i).digest("hex")}function AE0(i){let u=fei.length+1,t=u+IE0;if(!i.startsWith(`${fei}_`)||i.length<=t+1||i[t]!=="_")return null;let f=i.slice(u,t),l=i.slice(t+1);if(!xE0.test(f)||!xE0.test(l))return null;return f}function GE0(){let i=n$f(A$f(G$f)),u=i.slice(0,IE0),t=`${fei}_${u}_${i}`;return{plaintext:t,prefix:u,hash:lei(t)}}var fei="stv",G$f=32,IE0=12,xE0;var nE0=N(()=>{xE0=/^[A-Za-z0-9_-]+$/});function kE0(i){return{id:i.id,organizationId:i.organization_id,subjectConnectionId:i.subject_connection_id,tokenHash:i.token_hash,tokenPrefix:i.token_prefix,name:i.name,revokedAt:i.revoked_at,lastUsedAt:i.last_used_at,createdAt:i.created_at,updatedAt:i.updated_at}}class cei{db;constructor(i){this.db=i}async createOrRotateWorkloadToken(i){let u=i.name??"default";return await this.db.transaction().execute(async(f)=>{if(!await f.selectFrom("connections").select("id").where("id","=",i.subjectConnectionId).where("organization_id","=",i.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let c=GE0(),E=new Date().toISOString();await f.updateTable("connection_workload_tokens").set({revoked_at:E,updated_at:E}).where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("name","=",u).where("revoked_at","is",null).execute();let $=await f.insertInto("connection_workload_tokens").values({id:mf("cwt"),organization_id:i.organizationId,subject_connection_id:i.subjectConnectionId,token_hash:c.hash,token_prefix:c.prefix,name:u,revoked_at:null,last_used_at:null,created_at:E,updated_at:E}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:c.plaintext,record:kE0($)}})}async findActiveWorkloadToken(i){let u=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("name","=",i.name??"default").where("revoked_at","is",null).executeTakeFirst();return u?kE0(u):null}async revokeWorkloadToken(i){let u=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:u,updated_at:u}).where("id","=",i.tokenId).where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken(i){let u=AE0(i);if(!u)return null;let t=lei(i),f=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",u).where("token_hash","=",t).where("revoked_at","is",null).executeTakeFirst();if(!f)return null;let l=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:l,updated_at:l}).where("id","=",f.id).execute(),{tokenId:f.id,tokenPrefix:f.token_prefix,organizationId:f.organization_id,subjectConnectionId:f.subject_connection_id}}async replaceGrantsForSubject(i){await this.db.transaction().execute(async(u)=>{if(!await u.selectFrom("connections").select("id").where("id","=",i.subjectConnectionId).where("organization_id","=",i.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let f=[...new Set(i.grants.map((E)=>E.targetConnectionId))];if(f.length>0){if((await u.selectFrom("connections").select("id").where("organization_id","=",i.organizationId).where("id","in",f).execute()).length!==f.length)throw Error("Referenced connection not found in organization")}if(await u.deleteFrom("connection_credential_grants").where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).execute(),i.grants.length===0)return;let l=new Date().toISOString(),c=i.grants.map((E)=>({id:mf("ccg"),organization_id:i.organizationId,subject_connection_id:i.subjectConnectionId,target_connection_id:E.targetConnectionId,scope:E.scope,created_by:i.createdBy,created_at:l,updated_at:l}));await u.insertInto("connection_credential_grants").values(c).execute()})}async hasGrant(i){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("target_connection_id","=",i.targetConnectionId).where("scope","=",i.scope).executeTakeFirst()}}var DEi="credential:access-token:read",gEi="credential:configuration:read";var NEi=N(()=>{H$();nE0()});function wZ(i){let u=String(i??"");if(u&&!u.includes("T"))return u.replace(" ","T")+"Z";return u}function n0(i){return i.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function Vt(i){let u=Number(i??0);return Number.isFinite(u)?u:0}function j$f(i){if(!k$f.has(i))throw Error(`Invalid groupByColumn: ${i}`);return i}function Eei(i){if(!X$f.test(i))throw Error(`Invalid JSONPath: ${i}`);if(i.startsWith("$."))return i;if(i.startsWith("."))return`$${i}`;return`$.${i}`}function _ei(i){return i.replace(/^\$\./,"").split(".").map((t)=>`'${n0(t)}'`).join(", ")}function S$f(i){let u=J$f.exec(i);if(!u||!u[1]||!u[2])throw Error(`Invalid interval: ${i}`);let t=parseInt(u[1],10),f=u[2],l=K$f[f];if(t<1||t>l)throw Error(`Invalid interval amount: ${t}${f} (max ${l}${f})`);return{amount:t,unit:f}}function b7(i,u,t="timestamp"){let{amount:f,unit:l}=S$f(i),E={m:"MINUTE",h:"HOUR",d:"DAY"}[l];if(u==="duckdb")return`time_bucket(INTERVAL '${f} ${E}', CAST(${t} AS TIMESTAMP))`;return`toStartOfInterval(${t}, INTERVAL ${f} ${E})`}function yV(i,u,t){if(t==="duckdb")return`json_extract_string(${i}, '${u}')`;let f=_ei(u);return`JSONExtractString(${i}, ${f})`}function Y$f(i,u,t){if(t==="duckdb")return`CAST(json_extract_string(${i}, '${u}') AS DOUBLE)`;let f=_ei(u);return`JSONExtractFloat(${i}, ${f})`}function jE0(i,u,t){if(t==="duckdb")return`TRY_CAST(json_extract_string(${i}, '${u}') AS DOUBLE)`;let f=_ei(u);return`toFloat64OrZero(JSONExtractString(${i}, ${f}))`}function $ei(i){if(i===null||i===void 0)return{};if(typeof i==="object")return i;let u=String(i);try{return JSON.parse(u)}catch{return{_decocms_truncated:u}}}function wei(i){return{id:String(i.id??""),organizationId:String(i.organization_id??""),connectionId:String(i.connection_id??""),toolName:String(i.tool_name??""),input:$ei(i.input),output:$ei(i.output),isError:i.is_error===1||i.is_error===!0||i.is_error==="1"||typeof i.is_error==="bigint"&&i.is_error===1n,errorMessage:i.error_message!=null?String(i.error_message):null,durationMs:Number(i.duration_ms??0),timestamp:(()=>{if(i.timestamp instanceof Date)return i.timestamp.toISOString();let u=String(i.timestamp??""),t=new Date(u.includes("T")?u:u.replace(" ","T")+"Z");return Number.isNaN(t.getTime())?u:t.toISOString()})(),userId:i.user_id!=null?String(i.user_id):null,requestId:String(i.request_id??""),userAgent:i.user_agent!=null?String(i.user_agent):null,virtualMcpId:i.virtual_mcp_id!=null?String(i.virtual_mcp_id):null,properties:i.properties?$ei(i.properties):null}}function SE0(i,u){let t=[];if(i.properties)for(let[f,l]of Object.entries(i.properties)){let c=n0(f),E=n0(l);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${c}') = '${E}'`);else t.push(`JSONExtractString(properties, '${c}') = '${E}'`)}if(i.propertyKeys)for(let f of i.propertyKeys){let l=n0(f);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${l}') IS NOT NULL AND json_extract_string(properties, '$.${l}') != ''`);else t.push(`JSONExtractString(properties, '${l}') IS NOT NULL AND JSONExtractString(properties, '${l}') != ''`)}if(i.propertyPatterns)for(let[f,l]of Object.entries(i.propertyPatterns)){let c=n0(f),E=n0(l);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${c}') ILIKE '${E}'`);else t.push(`JSONExtractString(properties, '${c}') ILIKE '${E}'`)}if(i.propertyInValues)for(let[f,l]of Object.entries(i.propertyInValues)){let c=n0(f),E=n0(l);if(u==="duckdb")t.push(`list_contains(string_split(json_extract_string(properties, '$.${c}'), ','), '${E}')`);else t.push(`has(splitByChar(',', JSONExtractString(properties, '${c}')), '${E}')`)}return t}function JE0(i,u){let t=[];if(S5(t,u?.startDate,i),!u)return t;if(u.connectionIds?.length){let f=u.connectionIds.map((l)=>`'${n0(l)}'`).join(",");t.push(`connection_id IN (${f})`)}if(u.toolNames?.length){let f=u.toolNames.map((l)=>`'${n0(l)}'`).join(",");t.push(`tool_name IN (${f})`)}if(u.virtualMcpIds?.length){let f=u.virtualMcpIds.map((l)=>`'${n0(l)}'`).join(",");t.push(`virtual_mcp_id IN (${f})`)}if(u.endDate)t.push(K5(u.endDate,i));if(u.propertyFilters)t.push(...SE0(u.propertyFilters,i));return t}function KE0(i,u,t="timestamp"){if(u==="duckdb")return`CAST(${t} AS TIMESTAMP) >= TIMESTAMP '${i.toISOString()}'`;if(t==="bucket")return`${t} >= parseDateTimeBestEffort('${i.toISOString()}')`;return`${t} >= parseDateTime64BestEffort('${i.toISOString()}', 9)`}function K5(i,u,t="timestamp"){if(u==="duckdb")return`CAST(${t} AS TIMESTAMP) <= TIMESTAMP '${i.toISOString()}'`;if(t==="bucket")return`${t} <= parseDateTimeBestEffort('${i.toISOString()}')`;return`${t} <= parseDateTime64BestEffort('${i.toISOString()}', 9)`}function S5(i,u,t,f="timestamp"){if(u)i.push(KE0(u,t,f));else if(t==="clickhouse")i.push(KE0(new Date(Date.now()-W$f),t,f))}class vei{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor(i,u,t,f,l="clickhouse",c=!1){this.engine=i;this.sourceFactory=u;this.metricEngine=t;this.metricSourceFactory=f;this.dialect=l;this.metricsFromLogs=c}async query(i){if(!i.organizationId)throw Error("organizationId is required");let u=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),t=[`organization_id = '${n0(i.organizationId)}'`];if(i.connectionId)t.push(`connection_id = '${n0(i.connectionId)}'`);if(i.excludeConnectionIds?.length){let h=i.excludeConnectionIds.map((D)=>`'${n0(D)}'`).join(",");t.push(`connection_id NOT IN (${h})`)}if(i.virtualMcpId)t.push(`virtual_mcp_id = '${n0(i.virtualMcpId)}'`);if(i.toolName)t.push(`tool_name = '${n0(i.toolName)}'`);if(i.isError!==void 0)t.push(`is_error = ${i.isError?1:0}`);if(S5(t,i.startDate,this.dialect),i.endDate)t.push(K5(i.endDate,this.dialect));if(i.propertyFilters)t.push(...SE0(i.propertyFilters,this.dialect));let f=1000,l=Math.min(Math.max(1,Math.floor(i.limit??50)),f),c=Math.max(0,Math.floor(i.offset??0)),E=t.join(" AND ");if(this.dialect==="duckdb"){let h=`SELECT ${XE0}, count(*) OVER () AS _total FROM ${u} WHERE ${E} ORDER BY timestamp DESC LIMIT ${l} OFFSET ${c}`,D=await this.engine.query(h);if(D.length===0)return{logs:[],total:0};let g=Number(D[0]._total??0);return{logs:D.map(wei),total:g}}let $=`SELECT count(*) AS total FROM ${u} WHERE ${E}`,w=`SELECT ${XE0} FROM ${u} WHERE ${E} ORDER BY timestamp DESC LIMIT ${l} OFFSET ${c}`,[d,_]=await Promise.all([this.engine.query($),this.engine.query(w)]),v=Number(d[0]?.total??0);return{logs:_.map(wei),total:v}}async getById(i,u){if(!i||!u)return null;let f=`SELECT * FROM ${this.sourceFactory(i)} WHERE organization_id = '${n0(i)}' AND id = '${n0(u)}' LIMIT 1`,l=await this.engine.query(f);if(l.length===0)return null;return wei(l[0])}async getStats(i){if(!i.organizationId)throw Error("organizationId is required");let u=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),t=[`organization_id = '${n0(i.organizationId)}'`];if(S5(t,i.startDate,this.dialect),i.endDate)t.push(K5(i.endDate,this.dialect));let f=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${u} WHERE ${t.join(" AND ")}`,c=(await this.engine.query(f))[0]??{};return{totalCalls:Number(c.total_calls??0),errorRate:Number(c.error_rate??0),avgDurationMs:Number(c.avg_duration_ms??0)}}async queryLlmUsageStats(i){let u={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!i.organizationId||!i.connectionId)return u;let t=this.dialect,f=t==="clickhouse",l=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),c=b7(i.interval,t,"timestamp"),E=(B)=>`coalesce(${jE0("properties",`$.${B}`,t)}, 0)`,$=f?"count()":"count(*)",w=f?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",d=(B)=>f?`quantile(${B})(duration_ms)`:`quantile_cont(duration_ms, ${B})`,_=[`organization_id = '${n0(i.organizationId)}'`,`connection_id = '${n0(i.connectionId)}'`];if(S5(_,i.startDate,t),i.endDate)_.push(K5(i.endDate,t));if(i.userIds?.length){let B=i.userIds.slice(0,100).map((F)=>`'${n0(F)}'`).join(",");_.push(`user_id IN (${B})`)}let v=_.join(" AND "),h=Math.min(Math.max(1,Math.floor(i.topN??5)),20),D=`${$} AS calls,
|
|
82329
|
+
</workflows>`,Ic0;var Ac0=N(()=>{wf();Ic0={id:"studio-usage-manager",title:"Usage Manager",icon:"icon://BarChart10?color=blue",description:"Analyze usage, costs, and clean up idle agents and connections",selectedTools:["MONITORING_STATS","MONITORING_LOGS_LIST","MONITORING_LOG_GET","MONITORING_THREAD_USAGE","COLLECTION_VIRTUAL_MCP_LIST","COLLECTION_VIRTUAL_MCP_GET","COLLECTION_VIRTUAL_MCP_DELETE","VIRTUAL_MCP_LAST_USED_LIST","COLLECTION_CONNECTIONS_LIST","COLLECTION_CONNECTIONS_GET","COLLECTION_CONNECTIONS_DELETE","ORGANIZATION_MEMBER_LIST"],selectedConnections:null,selectedPrompts:[],instructions:JEf,getId:bw.USAGE_MANAGER}});function uEi(i){return cZ.find((u)=>i.startsWith(`${u.id}_`))??null}async function Gc0(i,u){if("resolveRuntime"in i)return i.resolveRuntime(u);return{instructions:i.instructions,selectedTools:i.selectedTools}}async function tEi(i,u){if(!("checklist"in i))return[];return Promise.all(i.checklist.map(async(t)=>({label:t.label,activeForm:t.activeForm,action:t.action,completed:await t.isCompleted(u),alwaysSuggest:t.alwaysSuggest})))}async function nc0(i,u,t){let f={self:U4.SELF(i),registry:U4.REGISTRY(i),"community-registry":U4.COMMUNITY_REGISTRY(i)};await Promise.all(cZ.map(async(l)=>{let c=l.getId(i);if(await t.findById(c,i))return;let w=(l.selectedConnections??["self"]).map((d)=>f[d]);await t.create(i,u,{title:l.title,description:l.description,icon:l.icon,status:"active",pinned:!1,metadata:{instructions:l.instructions},connections:w.map((d)=>({connection_id:d,selected_tools:l.selectedTools?[...l.selectedTools]:null,selected_resources:null,selected_prompts:l.selectedPrompts?[...l.selectedPrompts]:null}))},{id:c})}))}var cZ;var hV=N(()=>{wf();gc0();Oc0();yc0();Uc0();xc0();Ac0();cZ=[Fc0,Dc0,Nc0,Tc0,Pc0,Ic0]});import{DBOS as fEi}from"@dbos-inc/dbos-sdk";async function KEf(i){let u=qt(),t=new LW(u.db);await nc0(i.orgId,i.createdBy,t)}async function SEf(i){let u=qt(),t=new LW(u.db);for(let f of cZ){let l=f.getId(i.orgId),c=await t.findById(l,i.orgId);if(!c)continue;let E=f.selectedPrompts?[...f.selectedPrompts]:null;if(c.connections.every((w)=>{let d=w.selected_prompts;if(E===null)return d===null;if(d===null)return!1;if(d.length!==E.length)return!1;return d.every((_,v)=>_===E[v])}))continue;await t.update(l,i.createdBy,{connections:c.connections.map((w)=>({connection_id:w.connection_id,selected_tools:w.selected_tools,selected_resources:w.selected_resources,selected_prompts:E}))})}}async function YEf(i){await fEi.runStep(()=>KEf(i),{name:"installStudioPack"}),await fEi.runStep(()=>SEf(i),{name:"backfillSelectedPrompts"})}async function Lmi(i){await fEi.startWorkflow(WEf,{workflowID:`install-studio-pack:${LEf}:${i.orgId}`})(i)}async function kc0(){let u=await qt().db.selectFrom("member").select(["organizationId","userId"]).orderBy("createdAt","asc").execute(),t=new Map;for(let f of u)if(!t.has(f.organizationId))t.set(f.organizationId,f.userId);await Promise.all(Array.from(t).map(async([f,l])=>{try{await Lmi({orgId:f,createdBy:l})}catch(c){console.error("[studio-pack-backfill] enqueue failed",{orgId:f},c)}}))}var WEf,LEf="v2";var lEi=N(()=>{zE();Wmi();hV();WEf=fEi.registerWorkflow(YEf,{name:"installStudioPackWorkflow"})});import{jwtVerify as zEf,SignJWT as jc0}from"jose";import{randomBytes as QEf}from"crypto";function Xc0(){if(DV)return DV;let i=yu(),u=i.meshJwtSecret??i.betterAuthSecret;if(u)DV=new TextEncoder().encode(u);else console.warn("MESH_JWT_SECRET not set - generating random secret (not persistent)"),DV=new Uint8Array(QEf(32));return DV}async function Jc0(i,u="5m"){let t=Xc0();return await new jc0(i).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(u).sign(t)}async function zmi(i){try{let u=Xc0(),{payload:t}=await zEf(i,u);return t}catch{return}}async function W7(i,u,t=3600){let f=yu(),l=f.meshJwtSecret??f.betterAuthSecret;if(!l)throw Error("A deterministic JWT secret is required to mint gateway JWTs \u2014 set MESH_JWT_SECRET or BETTER_AUTH_SECRET");let c=new TextEncoder().encode(l);return await new jc0({iss:"mesh",sub:i,...u&&{email:u}}).setProtectedHeader({alg:"HS256",typ:"JWT"}).setIssuedAt().setExpirationTime(Math.floor(Date.now()/1000)+t).sign(c)}var DV=null;var EZ=N(()=>{xt()});class gV{constructor(){this._messageQueue=[]}static createLinkedPair(){let i=new gV,u=new gV;return i._otherTransport=u,u._otherTransport=i,[i,u]}async start(){while(this._messageQueue.length>0){let i=this._messageQueue.shift();this.onmessage?.(i.message,i.extra)}}async close(){let i=this._otherTransport;this._otherTransport=void 0,await i?.close(),this.onclose?.()}async send(i,u){if(!this._otherTransport)throw Error("Not connected");if(this._otherTransport.onmessage)this._otherTransport.onmessage(i,{authInfo:u?.authInfo});else this._otherTransport._messageQueue.push({message:i,extra:{authInfo:u?.authInfo}})}}import{SpanStatusCode as Kc0}from"@opentelemetry/api";function di(i){return{...i,execute:async(u,t)=>{return await t.timings.measure(`tool.${i.name}`,async()=>t.tracer.startActiveSpan(`tool.${i.name}`,{attributes:{"tool.name":i.name,"organization.id":t.organization?.id??"system","user.id":t.auth.user?.id??t.auth.apiKey?.userId??"anonymous"}},async(f)=>{try{t.toolName=i.name,t.access.setToolName?.(i.name);let l=await i.handler(u,t);return f.setStatus({code:Kc0.OK}),l}catch(l){throw f.setStatus({code:Kc0.ERROR,message:l.message}),f.recordException(l),l}finally{f.end()}}))}}}var du=()=>{};function Bi(i){if(!i.organization)throw Error("This operation requires organization scope");return i.organization}function Vu(i){return i.auth.user?.id??i.auth.apiKey?.userId}function HEf(i){return!!(i.auth.user||i.auth.apiKey)}function Si(i){if(!HEf(i))throw Error("Authentication required")}import{z as _f}from"zod";var cEi,Sc0,Yc0,Wc0,Lc0,zc0,Qc0,Hc0,bc0,Rc0;var zW=N(()=>{cEi=_f.record(_f.string(),_f.array(_f.string())),Sc0=_f.object({id:_f.string().describe("Unique identifier for the API key"),name:_f.string().describe("Human-readable name for the API key"),userId:_f.string().describe("ID of the user who owns this API key"),permissions:cEi.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Example: { "self": ["API_KEY_CREATE"], "conn_abc123": ["SEND_MESSAGE"] }'),expiresAt:_f.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:_f.string().datetime().describe("When the API key was created (ISO 8601)")}),Yc0=_f.object({name:_f.string().min(1).max(64).describe("Human-readable name for the API key"),permissions:cEi.describe(`Permissions to grant (REQUIRED \u2014 there is no implicit default). Format: { resource: [actions] }. Resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names (e.g., ["ORGANIZATION_GET"]) or ["*"] for all. Example: { "self": ["ORGANIZATION_GET", "COLLECTION_CONNECTIONS_LIST"] }. The key is authorized solely by this allowlist; the creator's role does not widen it.`),expiresIn:_f.number().positive().optional().describe("Expiration time in seconds. If not provided, key never expires."),metadata:_f.record(_f.string(),_f.unknown()).optional().describe("Additional metadata to store with the API key")}),Wc0=_f.object({id:_f.string().describe("Unique identifier for the API key"),name:_f.string().describe("Human-readable name for the API key"),key:_f.string().describe("The actual API key value. STORE THIS SECURELY - it will not be shown again!"),permissions:cEi.describe('Permissions granted to this API key. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools'),expiresAt:_f.string().datetime().nullable().optional().describe("Expiration date of the API key (ISO 8601)"),createdAt:_f.string().datetime().describe("When the API key was created (ISO 8601)")}),Lc0=_f.object({}),zc0=_f.object({items:_f.array(Sc0).describe("List of API keys (without key values)")}),Qc0=_f.object({keyId:_f.string().describe("ID of the API key to update"),name:_f.string().min(1).max(64).optional().describe("New name for the API key"),permissions:cEi.optional().describe('New permissions. Format: { resource: [actions] } where resource is "self" for management tools or "conn_<UUID>" for connection-specific tools. Actions are tool names or "*" for all. Example: { "self": ["API_KEY_CREATE"] }. Replaces existing permissions.'),metadata:_f.record(_f.string(),_f.unknown()).optional().describe("New metadata. Replaces existing metadata.")}),Hc0=_f.object({item:Sc0.describe("The updated API key (without key value)")}),bc0=_f.object({keyId:_f.string().describe("ID of the API key to delete")}),Rc0=_f.object({success:_f.boolean().describe("Whether the deletion was successful"),keyId:_f.string().describe("ID of the deleted API key")})});var Qmi;var Cc0=N(()=>{e4();du();zW();Qmi=di({name:"API_KEY_CREATE",description:"Create an API key with scoped permissions. The key value is returned only once \u2014 store it immediately.",annotations:{title:"Create API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Yc0,outputSchema:Wc0,handler:async(i,u)=>{Si(u),await u.access.check();let t=await u.boundAuth.apiKey.create({name:i.name,permissions:i.permissions,expiresIn:i.expiresIn,metadata:{...i.metadata,organization:u.organization}}),f=t.expiresAt?t.expiresAt instanceof Date?t.expiresAt.toISOString():t.expiresAt:null,l=t.createdAt instanceof Date?t.createdAt.toISOString():t.createdAt,c=Vu(u);if(c)ou.capture({distinctId:c,event:"api_key_created",...u.organization?.id?{groups:{organization:u.organization.id}}:{},properties:{key_id:t.id,key_name:t.name??i.name,organization_id:u.organization?.id,has_expiry:!!f}});return{id:t.id,name:t.name??i.name,key:t.key,permissions:t.permissions??{},expiresAt:f,createdAt:l}}})});var Hmi;var Mc0=N(()=>{e4();du();zW();Hmi=di({name:"API_KEY_DELETE",description:"Delete and instantly revoke an API key. Cannot be undone.",annotations:{title:"Delete API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:bc0,outputSchema:Rc0,handler:async(i,u)=>{Si(u),await u.access.check();let t=Vu(u);if(!t)throw Error("User ID required to delete API key");let l=(await u.boundAuth.apiKey.list())?.find((w)=>w.id===i.keyId);if(!l)throw Error("API key not found");let E=l.metadata?.organization?.id,$=u.organization?.id;if(E!==$)throw Error("Cannot delete API key from another organization");if(await u.boundAuth.apiKey.delete(i.keyId),$)ou.capture({distinctId:t,event:"api_key_deleted",groups:{organization:$},properties:{key_id:i.keyId,organization_id:$}});return{success:!0,keyId:i.keyId}}})});var bmi;var qc0=N(()=>{du();zW();bmi=di({name:"API_KEY_LIST",description:"List API keys for the current user in the current organization. Returns metadata only \u2014 key values are never shown after creation.",annotations:{title:"List API Keys",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Lc0,outputSchema:zc0,handler:async(i,u)=>{Si(u),await u.access.check();let t=await u.boundAuth.apiKey.list(),f=u.organization?.id;return{items:(t??[]).filter((c)=>{return c.metadata?.organization?.id===f}).map((c)=>({id:c.id,name:c.name??"Unnamed Key",userId:c.userId,permissions:c.permissions??{},expiresAt:c.expiresAt?c.expiresAt instanceof Date?c.expiresAt.toISOString():c.expiresAt:null,createdAt:c.createdAt instanceof Date?c.createdAt.toISOString():c.createdAt}))}}})});var Rmi;var Vc0=N(()=>{du();zW();Rmi=di({name:"API_KEY_UPDATE",description:"Update an API key's name, permissions, or metadata. The key value cannot be changed or retrieved.",annotations:{title:"Update API Key",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Qc0,outputSchema:Hc0,handler:async(i,u)=>{if(Si(u),await u.access.check(),!Vu(u))throw Error("User ID required to update API key");let l=(await u.boundAuth.apiKey.list())?.find((d)=>d.id===i.keyId);if(!l)throw Error(`API key not found: ${i.keyId}`);let E=l.metadata?.organization?.id,$=u.organization?.id;if(E!==$)throw Error("Cannot update API key from another organization");let w=await u.boundAuth.apiKey.update({keyId:i.keyId,name:i.name,permissions:i.permissions,metadata:{...i.metadata,organization:u.organization}});if(!w)throw Error(`Failed to update API key: ${i.keyId}`);return{item:{id:w.id,name:w.name??i.name??"Unnamed Key",userId:w.userId,permissions:w.permissions??{},expiresAt:w.expiresAt?w.expiresAt instanceof Date?w.expiresAt.toISOString():w.expiresAt:null,createdAt:w.createdAt instanceof Date?w.createdAt.toISOString():w.createdAt}}}})});var rc0=N(()=>{Cc0();Mc0();qc0();Vc0();zW()});function EEi(i){let u=i.trim();if(!u)return{ok:!1,error:"Enter a website URL."};let t=REf.test(u),f=CEf.test(u),l=MEf.test(u);if(t&&!f&&!l)return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let c=f?u:`https://${u}`,E;try{E=new URL(c)}catch{return{ok:!1,error:"Enter a valid website URL."}}if(E.protocol!=="http:"&&E.protocol!=="https:")return{ok:!1,error:"Use an HTTP or HTTPS website URL."};let $=E.hostname.split(".");if($.length<2||$.some((w)=>!w||!qEf.test(w)))return{ok:!1,error:"Enter a valid website URL."};return E.protocol="https:",{ok:!0,value:E.origin}}var REf,CEf,MEf,qEf;var Cmi=N(()=>{REf=/^[a-zA-Z][a-zA-Z\d+.-]*:/,CEf=/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//,MEf=/^[^\s/:?#]+\.[^\s/:?#]+:\d+(?:[/?#]|$)/,qEf=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i});import{z as mc0}from"zod";function ec0(i){if(i.baseUrl)return i.baseUrl.replace(/\/+$/,"");return((i.settings??yu()).commerceDiscoveryInternalApiUrl??VEf).replace(/\/+$/,"")}function ac0(i){let u=i.apiKey??(i.settings??yu()).commerceDiscoveryInternalApiKey;if(!u)throw Error("COMMERCE_DISCOVERY_INTERNAL_API_KEY is required to set up Commerce Discovery.");return u}function oc0(i){return new URL(i).hostname}async function sc0(i){let u=`Commerce Discovery auth failed with status ${i.status}.`,t=await i.text().catch(()=>"");if(!t)return u;try{let f=JSON.parse(t),l=typeof f.error==="string"?f.error:typeof f.message==="string"?f.message:null;return l?`Commerce Discovery auth failed: ${l}.`:u}catch{return u}}async function Mmi(i,u={}){let t=ec0(u),f=ac0(u),l=u.fetchImpl??fetch,c=oc0(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/upgrade`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId,...i.orgName?{name:i.orgName}:{},...i.email?{email:i.email}:{},...i.reportUrl?{report_url:i.reportUrl}:{}})});if(!$.ok)throw Error(await sc0($));let w=rEf.safeParse(await $.json());if(!w.success)throw Error("Commerce Discovery auth response did not include a token.");return{authorizationToken:w.data.token}}async function pc0(i,u={}){let t=ec0(u),f=ac0(u),l=u.fetchImpl??fetch,c=oc0(i.siteUrl),E=`${t}/api/v2/internal/diagnostics/${encodeURIComponent(c)}/run`,$=await l(E,{method:"POST",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"},body:JSON.stringify({org_id:i.orgId})});if($.status===409)return{triggered:!1,reason:"not_upgraded"};if(!$.ok)throw Error(await sc0($));return{triggered:!0}}var VEf,rEf;var qmi=N(()=>{wf();xt();VEf=new URL(Hqi).origin,rEf=mc0.object({token:mc0.string().min(1)})});import{z as NV}from"zod";var mEf,eEf,Vmi;var iE0=N(()=>{Cmi();du();qmi();mEf=NV.object({siteUrl:NV.string().min(1).describe("Website URL to run the diagnostic for.")}),eEf=NV.object({triggered:NV.boolean(),reason:NV.string().optional()}),Vmi=di({name:"COMMERCE_DISCOVERY_RUN",description:"Trigger the Commerce Discovery diagnostic run for the current organization's store. Call once the data sources (GA4/GSC/VTEX) are connected \u2014 this run resolves credentials and produces the enriched report.",annotations:{title:"Run Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:mEf,outputSchema:eEf,handler:async(i,u)=>{Si(u);let t=Bi(u);await u.access.check();let f=EEi(i.siteUrl);if(!f.ok)throw Error(f.error);return pc0({siteUrl:f.value,orgId:t.id})}})});var L7=N(()=>{a6i()});import{z as Zv}from"zod";function sEf(i){return!i.connection_token}async function pEf(i,u,t,f){let l=await i.storage.connections.findById(u,t);if(l)return l;throw f}async function i$f(i,u,t,f){let l=await i.storage.virtualMcps.findById(u,t);if(l)return l;throw f}var uE0,aEf,oEf,rmi;var tE0=N(()=>{wf();Cmi();du();Ov();L7();qmi();uE0=bqi,aEf=Zv.object({siteUrl:Zv.string().min(1).describe("Website URL to configure.")}),oEf=Zv.object({connection:Zc,virtualMcp:Bc,reportApp:Zv.object({connectionId:Zv.string(),virtualMcpId:Zv.string(),toolName:Zv.literal(uE0)}),created:Zv.object({connection:Zv.boolean(),virtualMcp:Zv.boolean()})});rmi=di({name:"COMMERCE_DISCOVERY_SETUP",description:"Create or return the Commerce Discovery connection and virtual MCP for the current organization.",annotations:{title:"Set Up Commerce Discovery",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:aEf,outputSchema:oEf,handler:async(i,u)=>{Si(u);let t=Bi(u);await u.access.check("COLLECTION_CONNECTIONS_CREATE");let f=Vu(u);if(!f)throw Error("User ID required to set up Commerce Discovery");let l=EEi(i.siteUrl);if(!l.ok)throw Error(l.error);let c=U4.COMMERCE_DISCOVERY(t.id),E=eqi(t.id),$={email:u.auth.user?.email,reportUrl:`${u.baseUrl}/commerce-onboarding?org=${encodeURIComponent(t.slug??t.id)}&siteUrl=${encodeURIComponent(l.value)}`},w=await u.storage.connections.findById(c,t.id),d={connection:!1,virtualMcp:!1};if(w&&sEf(w)){let v=await Mmi({siteUrl:l.value,orgId:t.id,orgName:t.name,...$});if(v.authorizationToken)console.log("[commerce-discovery] repairing missing auth token",{orgId:t.id,siteUrl:l.value,connectionId:c}),w=await u.storage.connections.update(w.id,{connection_token:v.authorizationToken})}if(!w){let v=await Mmi({siteUrl:l.value,orgId:t.id,orgName:t.name,...$});console.log("[commerce-discovery] creating connection",{orgId:t.id,siteUrl:l.value,connectionId:c});try{let h=aqi(t.id,v.authorizationToken);w=await u.storage.connections.create({...h,metadata:{...h.metadata??{},siteUrl:l.value},organization_id:t.id,created_by:f}),d.connection=!0}catch(h){w=await pEf(u,c,t.id,h)}}let _=await u.storage.virtualMcps.findById(E,t.id);if(!_){console.log("[commerce-discovery] creating virtual MCP",{orgId:t.id,siteUrl:l.value,connectionId:w.id,virtualMcpId:E});try{_=await u.storage.virtualMcps.create(t.id,f,oqi(t.id,w.id),{id:E}),d.virtualMcp=!0}catch(v){_=await i$f(u,E,t.id,v)}}if(!_.pinned)_=await u.storage.virtualMcps.update(_.id,f,{pinned:!0});return{connection:w,virtualMcp:_,reportApp:{connectionId:w.id,virtualMcpId:_.id,toolName:uE0},created:d}}})});var fE0=N(()=>{iE0();tE0()});var mmi=J((lE0)=>{Object.defineProperty(lE0,"__esModule",{value:!0});lE0.kvPrefix=lE0.KvWatchInclude=void 0;lE0.KvWatchInclude={LastValue:"",AllHistory:"history",UpdatesOnly:"updates"};lE0.kvPrefix="KV_"});var OE0=J((gE0)=>{Object.defineProperty(gE0,"__esModule",{value:!0});gE0.KvStatusImpl=gE0.Bucket=gE0.Kvm=gE0.kvOperationHdr=void 0;gE0.Base64KeyCodec=f$f;gE0.NoopKvCodecs=emi;gE0.defaultBucketOpts=$E0;gE0.validateKey=wE0;gE0.validateSearchKey=dE0;gE0.hasWildcards=_E0;gE0.validateBucket=$Ei;var C1=Ww(),E1=x1i(),R1=mmi();function f$f(){let i=(u,t)=>{let f=[];for(let l of u.split("."))switch(l){case">":case"*":f.push(l);break;default:f.push(t(l));break}return f.join(".")};return{encode(u){return i(u,btoa)},decode(u){return i(u,atob)}}}function emi(){return{key:{encode(i){return i},decode(i){return i}},value:{encode(i){return typeof i==="string"?new TextEncoder().encode(i):i},decode(i){return i}}}}function $E0(){return{replicas:1,history:1,timeout:2000,max_bytes:-1,maxValueSize:-1,codec:emi(),storage:E1.StorageType.File}}gE0.kvOperationHdr="KV-Operation";var EE0="$KV",l$f=/^[-/=.\w]+$/,c$f=/^[-/=.>*\w]+$/,E$f=/^[-\w]+$/;function wE0(i){if(i.startsWith(".")||i.endsWith(".")||!l$f.test(i))throw Error(`invalid key: ${i}`)}function dE0(i){if(i.startsWith(".")||i.endsWith(".")||i.includes("..")||!c$f.test(i))throw Error(`invalid key: ${i}`)}function _E0(i){if(i.startsWith(".")||i.endsWith("."))throw Error(`invalid key: ${i}`);let u=i.split("."),t=!1;for(let f=0;f<u.length;f++)switch(u[f]){case"*":t=!0;break;case">":if(f!==u.length-1)throw Error(`invalid key: ${i}`);t=!0;break;default:}return t}function $Ei(i){if(!E$f.test(i))throw Error(`invalid bucket name: ${i}`)}class vE0{js;constructor(i){this.js=(0,E1.toJetStreamClient)(i)}create(i,u={}){return this.#i(i,u)}open(i,u={}){return u.bindOnly=!0,this.#i(i,u)}#i(i,u={}){let{ok:t,min:f}=this.js.nc.features.get(C1.Feature.JS_KV);if(!t)return Promise.reject(Error(`kv is only supported on servers ${f} or better`));if(u.bindOnly)return QW.bind(this.js,i,u);return QW.create(this.js,i,u)}list(){let i=(t)=>{let l=t.streams.filter((E)=>{return E.config.name.startsWith(R1.kvPrefix)});l.forEach((E)=>{E.config.sealed=E.config.sealed||!1,E.config.deny_delete=E.config.deny_delete||!1,E.config.deny_purge=E.config.deny_purge||!1,E.config.allow_rollup_hdrs=E.config.allow_rollup_hdrs||!1});let c="";if(l.length)c=this.js.nc.info?.cluster??"";return l.map((E)=>{return new wEi(E,c)})},u=`${this.js.prefix}.STREAM.LIST`;return new E1.ListerImpl(u,i,this.js)}}gE0.Kvm=vE0;class QW{js;jsm;stream;bucket;direct;codec;prefix;editPrefix;useJsPrefix;_prefixLen;constructor(i,u,t){$Ei(i),this.js=u,this.jsm=t,this.bucket=i,this.prefix=EE0,this.editPrefix="",this.useJsPrefix=!1,this._prefixLen=0}static async create(i,u,t={}){$Ei(u);let f=await i.jetstreamManager(),l=new QW(u,i,f);return await l.init(t),l}static async bind(i,u,t={}){let f=i.getOptions()?.checkAPI||t.bindOnly===!1,l=await i.jetstreamManager(f),c={config:{allow_direct:t.allow_direct}};$Ei(u);let E=new QW(u,i,l);return c.config.name=t.streamName??E.bucketName(),Object.assign(E,c),E.stream=c.config.name,E.codec=t.codec||emi(),E.direct=c.config.allow_direct??!1,E.initializePrefixes(c),E}async init(i={}){let u=Object.assign($E0(),i);this.codec=u.codec;let t={};if(this.stream=t.name=i.streamName??this.bucketName(),t.retention=E1.RetentionPolicy.Limits,t.max_msgs_per_subject=u.history,u.max_bytes)t.max_bytes=u.max_bytes;if(t.max_msg_size=u.maxValueSize,t.storage=u.storage,i.placement)t.placement=i.placement;if(i.republish)t.republish=i.republish;if(i.description)t.description=i.description;if(i.markerTTL)t.allow_msg_ttl=!0,t.subject_delete_marker_ttl=(0,C1.nanos)(u.markerTTL);if(i.mirror){let d=Object.assign({},i.mirror);if(!d.name.startsWith(R1.kvPrefix))d.name=`${R1.kvPrefix}${d.name}`;t.mirror=d,t.mirror_direct=!0}else if(i.sources){let d=i.sources.map((_)=>{let v=Object.assign({},_),h=v.name.startsWith(R1.kvPrefix)?v.name.substring(R1.kvPrefix.length):v.name;if(!v.name.startsWith(R1.kvPrefix))v.name=`${R1.kvPrefix}${v.name}`;if(!_.external&&h!==this.bucket)v.subject_transforms=[{src:`$KV.${h}.>`,dest:`$KV.${this.bucket}.>`}];return v});t.sources=d,t.subjects=[this.subjectForBucket()]}else t.subjects=[this.subjectForBucket()];if(i.metadata)t.metadata=i.metadata;if(typeof i.compression==="boolean")t.compression=i.compression?E1.StoreCompression.S2:E1.StoreCompression.None;let f=this.js.nc,l=f.getServerVersion(),c=l?(0,C1.compare)(l,(0,C1.parseSemVer)("2.7.2"))>=0:!1;t.discard=c?E1.DiscardPolicy.New:E1.DiscardPolicy.Old;let{ok:E,min:$}=f.features.get(C1.Feature.JS_ALLOW_DIRECT);if(!E&&i.allow_direct===!0){let d=l?`${l.major}.${l.minor}.${l.micro}`:"unknown";return Promise.reject(Error(`allow_direct is not available on server version ${d} - requires ${$}`))}if(i.allow_direct=typeof i.allow_direct==="boolean"?i.allow_direct:E,t.allow_direct=i.allow_direct,this.direct=t.allow_direct,t.num_replicas=u.replicas,u.ttl)t.max_age=(0,C1.nanos)(u.ttl);t.allow_rollup_hdrs=!0;let w;try{if(w=await this.jsm.streams.info(t.name),!w.config.allow_direct&&this.direct===!0)this.direct=!1}catch(d){if(d.message==="stream not found")w=await this.jsm.streams.add(t);else throw d}this.initializePrefixes(w)}initializePrefixes(i){this._prefixLen=0,this.prefix=`$KV.${this.bucket}`,this.useJsPrefix=this.js.apiPrefix!=="$JS.API";let{mirror:u}=i.config;if(u){let t=u.name;if(t.startsWith(R1.kvPrefix))t=t.substring(R1.kvPrefix.length);if(u.external&&u.external.api!==""){let f=u.name.substring(R1.kvPrefix.length);this.useJsPrefix=!1,this.prefix=`$KV.${f}`,this.editPrefix=`${u.external.api}.$KV.${t}`}else this.editPrefix=this.prefix}}bucketName(){return this.stream??`${R1.kvPrefix}${this.bucket}`}subjectForBucket(){return`${this.prefix}.${this.bucket}.>`}subjectForKey(i,u=!1){let t=[];if(u){if(this.useJsPrefix)t.push(this.js.apiPrefix);if(this.editPrefix!=="")t.push(this.editPrefix);else t.push(this.prefix)}else if(this.prefix)t.push(this.prefix);return t.push(i),t.join(".")}fullKeyName(i){if(this.prefix!=="")return`${this.prefix}.${i}`;return`${EE0}.${this.bucket}.${i}`}get prefixLen(){if(this._prefixLen===0)this._prefixLen=this.prefix.length+1;return this._prefixLen}encodeKey(i){let u=[];for(let t of i.split("."))switch(t){case">":case"*":u.push(t);break;default:u.push(this.codec.key.encode(t));break}return u.join(".")}decodeKey(i){let u=[];for(let t of i.split("."))switch(t){case">":case"*":u.push(t);break;default:u.push(this.codec.key.decode(t));break}return u.join(".")}validateKey=wE0;validateSearchKey=dE0;hasWildcards=_E0;close(){return Promise.resolve()}dataLen(i,u){let t=u?u.get(E1.JsHeaders.MessageSizeHdr)||"":"";if(t!=="")return parseInt(t,10);return i.length}smToEntry(i){return new hE0(this.bucket,this.prefixLen,i,this.codec)}jmToWatchEntry(i,u){return new DE0(this.bucket,this.prefixLen,i,u,this.codec)}async create(i,u,t){let f;try{let c={previousSeq:0},E=await this._put(i,u,c,t);return Promise.resolve(E)}catch(c){if(f=c,c instanceof E1.JetStreamApiError){let E=c;if(E.code!==E1.JetStreamApiCodes.StreamWrongLastSequence&&E.code!==E1.JetStreamApiCodes.StreamWrongLastSequenceUnknown)return Promise.reject(c)}}let l=0;try{let c=await this.get(i);if(c?.operation==="DEL"||c?.operation==="PURGE")return l=c!==null?c.revision:0,this._put(i,u,{previousSeq:l},t);else return Promise.reject(f)}catch(c){return Promise.reject(c)}}update(i,u,t,f){if(t<=0)throw Error("version must be greater than 0");return this.put(i,u,{previousSeq:t,timeout:f})}async _put(i,u,t={},f){let l=this.encodeKey(i);this.validateKey(l),u=this.codec.value.encode(u);let c={timeout:t?.timeout};if(t.previousSeq!==void 0){let E=(0,C1.headers)();c.headers=E,E.set(E1.PubHeaders.ExpectedLastSubjectSequenceHdr,`${t.previousSeq}`)}if(f)(c.headers||(0,C1.headers)()).set(E1.PubHeaders.MessageTTL,f);try{return(await this.js.publish(this.subjectForKey(l,!0),u,c)).seq}catch(E){return Promise.reject(E)}}put(i,u,t={}){return this._put(i,u,t)}async get(i,u){let t=this.encodeKey(i);this.validateKey(t);let f={last_by_subj:this.subjectForKey(t)};if(u&&u.revision>0)f={seq:u.revision};let l=null;try{if(this.direct)l=await this.jsm.direct.getMessage(this.bucketName(),f);else l=await this.jsm.streams.getMessage(this.bucketName(),f);if(l===null)return null;let c=this.smToEntry(l);if(c.rawKey!==t)return null;return c}catch(c){throw c}}purge(i,u){return this._deleteOrPurge(i,"PURGE",u)}delete(i,u){return this._deleteOrPurge(i,"DEL",u)}async purgeDeletes(i=1800000){let u=[],t=await this.history({key:">"});await(async()=>{for await(let E of t)if(E.operation==="DEL"||E.operation==="PURGE")u.push(E)})().then(),t.stop();let f=Date.now()-i,l=u.map((E)=>{let $=this.subjectForKey(E.key);if(E.created.getTime()>=f)return this.jsm.streams.purge(this.stream,{filter:$,keep:1});else return this.jsm.streams.purge(this.stream,{filter:$,keep:0})}),c=await Promise.all(l);return c.unshift({success:!0,purged:0}),c.reduce((E,$)=>{return E.purged+=$.purged,E})}async _deleteOrPurge(i,u,t){if(!this.hasWildcards(i))return this._doDeleteOrPurge(i,u,t);let f=await this.keys(i),l=[];for await(let c of f)if(l.push(this._doDeleteOrPurge(c,u)),l.length===100)await Promise.all(l),l.length=0;if(l.length>0)await Promise.all(l)}async _doDeleteOrPurge(i,u,t){let f=this.encodeKey(i);this.validateKey(f);let l=(0,C1.headers)();if(l.set(gE0.kvOperationHdr,u),u==="PURGE"){let c=t;if(l.set(E1.JsHeaders.RollupHdr,E1.JsHeaders.RollupValueSubject),typeof c?.ttl==="string"&&c.ttl!=="")l.set(E1.PubHeaders.MessageTTL,`${c.ttl}`)}if(t?.previousSeq)l.set(E1.PubHeaders.ExpectedLastSubjectSequenceHdr,`${t.previousSeq}`);await this.js.publish(this.subjectForKey(f,!0),C1.Empty,{headers:l})}_buildCC(i,u,t={}){let l=(!Array.isArray(i)?[i]:i).map(($)=>{let w=this.encodeKey($);return this.validateSearchKey($),this.fullKeyName(w)}),c=E1.DeliverPolicy.LastPerSubject;if(u===R1.KvWatchInclude.AllHistory)c=E1.DeliverPolicy.All;if(u===R1.KvWatchInclude.UpdatesOnly)c=E1.DeliverPolicy.New;let E=void 0;if(l.length===1)E=l[0],l=void 0;return Object.assign({deliver_policy:c,ack_policy:E1.AckPolicy.None,filter_subjects:l,filter_subject:E,flow_control:!0,idle_heartbeat:(0,C1.nanos)(5000)},t)}remove(i){return this.purge(i)}async history(i={}){let u=i.key??">",t={};t.headers_only=i.headers_only||!1;let f=new C1.QueuedIteratorImpl,l=()=>{f.stop()},c=this._buildCC(u,R1.KvWatchInclude.AllHistory,t),E=await this.js.consumers.getPushConsumer(this.stream,c);if(f._data=E,(await E.info(!0)).num_pending===0)return f.push(l),f;let w=await E.consume({callback:(d)=>{let _=this.jmToWatchEntry(d,!1);if(f.push(_),f.received++,d.info.pending===0)f.push(l)}});return w.closed().then(()=>{f.push(l)}),(async()=>{for await(let d of w.status())switch(d.type){case"heartbeat":f.push(()=>{f.stop()});break}})().then(),f.iterClosed.then(()=>{w.stop()}),f}canSetWatcherName(){let i=this.js.nc,{ok:u}=i.features.get(C1.Feature.JS_NEW_CONSUMER_CREATE_API);return u}async watch(i={}){let u=i.key??">",t=new C1.QueuedIteratorImpl,f={};f.headers_only=i.headers_only||!1;let l=R1.KvWatchInclude.LastValue;if(i.include===R1.KvWatchInclude.AllHistory)l=R1.KvWatchInclude.AllHistory;else if(i.include===R1.KvWatchInclude.UpdatesOnly)l=R1.KvWatchInclude.UpdatesOnly;let c=i.ignoreDeletes===!0,E=this._buildCC(u,l,f);if(E.name=`KV_WATCHER_${C1.nuid.next()}`,i.resumeFromRevision&&i.resumeFromRevision>0)E.deliver_policy=E1.DeliverPolicy.StartSequence,E.opt_start_seq=i.resumeFromRevision;let $=await this.js.consumers.getPushConsumer(this.stream,E),d=(await $.info(!0)).num_pending,_=l===R1.KvWatchInclude.UpdatesOnly||d===0;t._data=$;let v=0,h=await $.consume({callback:(D)=>{if(!_)v++,_=v>=d;let g=this.jmToWatchEntry(D,_);if(c&&g.operation==="DEL")return;t.push(g),t.received++}});return t.iterClosed.then(()=>{h.stop()}),h.closed().then(()=>{t.push(()=>{t.stop()})}),t}async keys(i=">"){let u=new C1.QueuedIteratorImpl,t=this._buildCC(i,R1.KvWatchInclude.LastValue,{headers_only:!0}),f=await this.js.consumers.getPushConsumer(this.stream,t);if((await f.info()).num_pending===0)return u.stop(),u;u._data=f;let c=await f.consume({callback:(E)=>{let $=E.headers?.get(gE0.kvOperationHdr);if($!=="DEL"&&$!=="PURGE"){let w=this.decodeKey(E.subject.substring(this.prefixLen));u.push(w)}if(E.info.pending===0)c.stop()}});return(async()=>{for await(let E of c.status())switch(E.type){case"heartbeat":u.push(()=>{u.stop()});break}})().then(),c.closed().then(()=>{u.push(()=>{u.stop()})}),u.iterClosed.then(()=>{c.stop()}),u}purgeBucket(i){return this.jsm.streams.purge(this.bucketName(),i)}destroy(){return this.jsm.streams.delete(this.bucketName())}async status(){let u=this.js.nc.info?.cluster??"",t=this.bucketName(),f=await this.jsm.streams.info(t);return new wEi(f,u)}}gE0.Bucket=QW;class wEi{si;cluster;constructor(i,u=""){this.si=i,this.cluster=u}get bucket(){return this.si.config.name.startsWith(R1.kvPrefix)?this.si.config.name.substring(R1.kvPrefix.length):this.si.config.name}get values(){return this.si.state.messages}get history(){return this.si.config.max_msgs_per_subject}get ttl(){return(0,C1.millis)(this.si.config.max_age)}get markerTTL(){if(typeof this.si.config.subject_delete_marker_ttl==="number")return(0,C1.millis)(this.si.config.subject_delete_marker_ttl);return 0}get bucket_location(){return this.cluster}get backingStore(){return this.si.config.storage}get storage(){return this.si.config.storage}get replicas(){return this.si.config.num_replicas}get description(){return this.si.config.description??""}get maxBucketSize(){return this.si.config.max_bytes}get maxValueSize(){return this.si.config.max_msg_size}get max_bytes(){return this.si.config.max_bytes}get placement(){return this.si.config.placement||{cluster:"",tags:[]}}get placementCluster(){return this.si.config.placement?.cluster??""}get republish(){return this.si.config.republish??{src:"",dest:""}}get streamInfo(){return this.si}get size(){return this.si.state.bytes}get metadata(){return this.si.config.metadata??{}}get compression(){if(this.si.config.compression)return this.si.config.compression!==E1.StoreCompression.None;return!1}}gE0.KvStatusImpl=wEi;class hE0{bucket;sm;prefixLen;codec;constructor(i,u,t,f){this.bucket=i,this.prefixLen=u,this.sm=t,this.codec=f}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get delta(){return 0}get created(){return this.sm.time}get revision(){return this.sm.seq}get operation(){if(this.sm.header?.has("Nats-Marker-Reason")){if(this.sm.header?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.header?.get(gE0.kvOperationHdr)||"PUT"}get length(){let i=this.sm.header.get(E1.JsHeaders.MessageSizeHdr)||"";if(i!=="")return parseInt(i,10);return this.sm.data.length}json(i){return JSON.parse(C1.TD.decode(this.value),i)}string(){return C1.TD.decode(this.value)}}class DE0{bucket;sm;prefixLen;update;codec;constructor(i,u,t,f,l){this.bucket=i,this.prefixLen=u,this.sm=t,this.update=f,this.codec=l}get rawKey(){return this.sm.subject.substring(this.prefixLen)}get key(){return this.codec.key.decode(this.rawKey)}get value(){return this.codec.value.decode(this.sm.data)}get created(){return new Date((0,C1.millis)(this.sm.info.timestampNanos))}get revision(){return this.sm.seq}get operation(){if(this.sm.headers?.has("Nats-Marker-Reason")){if(this.sm.headers?.get("Nats-Marker-Reason")==="MaxAge")return"PURGE"}return this.sm.headers?.get(gE0.kvOperationHdr)||"PUT"}get delta(){return this.sm.info.pending}get length(){let i=this.sm.headers?.get(E1.JsHeaders.MessageSizeHdr)||"";if(i!=="")return parseInt(i,10);return this.sm.data.length}get isUpdate(){return this.update}json(i){return JSON.parse(C1.TD.decode(this.value),i)}string(){return C1.TD.decode(this.value)}}});var ami=J((J5)=>{Object.defineProperty(J5,"__esModule",{value:!0});J5.validateKey=J5.validateBucket=J5.NoopKvCodecs=J5.Kvm=J5.defaultBucketOpts=J5.Bucket=J5.Base64KeyCodec=J5.KvWatchInclude=J5.kvPrefix=void 0;var ZE0=mmi();Object.defineProperty(J5,"kvPrefix",{enumerable:!0,get:function(){return ZE0.kvPrefix}});Object.defineProperty(J5,"KvWatchInclude",{enumerable:!0,get:function(){return ZE0.KvWatchInclude}});var $Z=OE0();Object.defineProperty(J5,"Base64KeyCodec",{enumerable:!0,get:function(){return $Z.Base64KeyCodec}});Object.defineProperty(J5,"Bucket",{enumerable:!0,get:function(){return $Z.Bucket}});Object.defineProperty(J5,"defaultBucketOpts",{enumerable:!0,get:function(){return $Z.defaultBucketOpts}});Object.defineProperty(J5,"Kvm",{enumerable:!0,get:function(){return $Z.Kvm}});Object.defineProperty(J5,"NoopKvCodecs",{enumerable:!0,get:function(){return $Z.NoopKvCodecs}});Object.defineProperty(J5,"validateBucket",{enumerable:!0,get:function(){return $Z.validateBucket}});Object.defineProperty(J5,"validateKey",{enumerable:!0,get:function(){return $Z.validateKey}})});var omi=J((z7)=>{Object.defineProperty(z7,"__esModule",{value:!0});z7.NoopKvCodecs=z7.Kvm=z7.defaultBucketOpts=z7.Bucket=z7.Base64KeyCodec=z7.KvWatchInclude=void 0;var Z$f=ami();Object.defineProperty(z7,"KvWatchInclude",{enumerable:!0,get:function(){return Z$f.KvWatchInclude}});var ZV=ami();Object.defineProperty(z7,"Base64KeyCodec",{enumerable:!0,get:function(){return ZV.Base64KeyCodec}});Object.defineProperty(z7,"Bucket",{enumerable:!0,get:function(){return ZV.Bucket}});Object.defineProperty(z7,"defaultBucketOpts",{enumerable:!0,get:function(){return ZV.defaultBucketOpts}});Object.defineProperty(z7,"Kvm",{enumerable:!0,get:function(){return ZV.Kvm}});Object.defineProperty(z7,"NoopKvCodecs",{enumerable:!0,get:function(){return ZV.NoopKvCodecs}})});function dEi(){let i=new TextEncoder,u=new TextDecoder;return{encode:(t)=>i.encode(JSON.stringify(t)),decode:(t)=>JSON.parse(u.decode(t))}}class pmi{options;kv=null;codec=dEi();constructor(i){this.options=i}async init(){let i=this.options.getJetStream();if(!i)return;this.kv=await new FE0.Kvm(i).create(F$f,{storage:BE0.StorageType.Memory})}async get(i,u){if(!this.kv)return null;try{let t=await this.kv.get(`${i}.${u}`);if(!t?.value?.length)return null;if(t.operation==="DEL"||t.operation==="PURGE")return null;return this.codec.decode(t.value)}catch{return null}}async set(i,u,t){if(!this.kv)return;try{await this.kv.put(`${i}.${u}`,this.codec.encode(t))}catch{}}async invalidate(i){if(!this.kv)return;await Promise.all(["tools","resources","prompts"].map(async(t)=>{try{await this.kv.delete(`${t}.${i}`)}catch{}}))}teardown(){this.kv=null}}function y$f(i,u,t){if(t<=0)return!0;if(i===void 0)return!0;return u-i>=t}function _Ei(i){return i instanceof Xu&&i.code===Qu.MethodNotFound}function T$f(i){return i instanceof Xu&&i.code===-32000&&/connection closed/i.test(i.message)}async function H7(i,u,t,f,l,c=0){if(!f)try{return await t()}catch(d){if(_Ei(d))return[];return BV.add(1,{type:i,outcome:"error",stage:"no_cache"}),null}let E=`${i}:${u}`,$=await f.get(i,u);if($===null)try{let d=await t();return f.set(i,u,d).catch(()=>{}),smi.set(E,Date.now()),BV.add(1,{type:i,outcome:"miss",stage:"miss"}),d}catch(d){if(_Ei(d))return f.set(i,u,[]).catch(()=>{}),[];return BV.add(1,{type:i,outcome:"error",stage:"miss"}),null}if(BV.add(1,{type:i,outcome:"hit",stage:"hit"}),y$f(smi.get(E),Date.now(),c)&&!vEi.has(E)){vEi.add(E),smi.set(E,Date.now());let d=t().then((_)=>f.set(i,u,_)).catch((_)=>{if(_Ei(_)||T$f(_)){if(_Ei(_))f.set(i,u,[]).catch(()=>{});return}BV.add(1,{type:i,outcome:"error",stage:"revalidation"})}).finally(()=>vEi.delete(E));l?.(d)}return $}function iei(i){yE0=i}function Il(){return yE0}var BE0,FE0,BV,F$f="DECOCMS_MCP_LISTS",vEi,smi,Q7=30000,yE0=null;var Mw=N(()=>{El();Q1();BE0=k(o2(),1),FE0=k(omi(),1),BV=Mt.createCounter("mcp_list_cache.fetches",{description:"MCP list cache fetch outcomes (hit, miss, error)",unit:"{fetches}"});vEi=new Set;Mt.createObservableGauge("mcp_list_cache.pending_revalidations",{description:"In-flight background MCP list revalidations on this pod",unit:"{revalidations}"}).addCallback((i)=>i.observe(vEi.size));smi=new Map});var FV=(i,u)=>{if(u===null||u===void 0)return;let t=i.replace(/\[(\w+)\]/g,".$1").split(".").filter(Boolean),f=u;for(let l of t){if(f===null||f===void 0||typeof f!=="object")return;f=f[l]}return f};function hEi(i){let u=i.split("::");if(u.length!==2||!u[0]||!u[1])throw Error(`Invalid scope format: ${i}. Expected format: "KEY::SCOPE"`);return u}function U$f(i){try{return hEi(i)}catch{return null}}function P$f(i){if(typeof i==="object"&&i!==null&&"value"in i){let u=i.value;if(typeof u==="string")return u}return null}function uei(i,u){let t={};if(!i||!u)return t;for(let f of u){if(f==="*"){t["*"]=["*"];continue}let l=U$f(f);if(!l)continue;let[c,E]=l,$=FV(c,i),w=P$f($);if(w){if(!t[w])t[w]=[];t[w].push(E)}}return t}function TE0(i,u){let t=uei(i,u);return new Set(Object.keys(t).filter((f)=>f!=="*"))}var tei=()=>{};async function UE0(i){if(!i.refreshToken)return{success:!1,permanent:!1,error:"No refresh token available"};if(!i.tokenEndpoint)return{success:!1,permanent:!1,error:"No token endpoint available"};if(!i.clientId)return{success:!1,permanent:!1,error:"No client ID available"};try{let u=new URLSearchParams({grant_type:"refresh_token",refresh_token:i.refreshToken,client_id:i.clientId});if(i.clientSecret)u.set("client_secret",i.clientSecret);if(i.scope)u.set("scope",i.scope);let t=await fetch(i.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:u.toString()});if(!t.ok){let l=await t.text(),c,E;try{let w=JSON.parse(l);c=w.error,E=w.error_description}catch{}let $=t.status===400&&!!c&&x$f.has(c);return($?console.error:console.warn)("[TokenRefresh] refresh failed",{connectionId:i.connectionId,tokenEndpoint:i.tokenEndpoint,status:t.status,errorCode:c,errorDescription:E,permanent:$}),{success:!1,permanent:$,status:t.status,errorCode:c,error:E||c||`Token refresh failed: ${t.status}`}}let f=await t.json();return{success:!0,accessToken:f.access_token,refreshToken:f.refresh_token||i.refreshToken,expiresIn:f.expires_in,scope:f.scope}}catch(u){return console.warn("[TokenRefresh] network/parse error",{connectionId:i.connectionId,tokenEndpoint:i.tokenEndpoint,message:u instanceof Error?u.message:String(u)}),{success:!1,permanent:!1,error:u instanceof Error?u.message:"Token refresh failed"}}}var x$f;var PE0=N(()=>{x$f=new Set(["invalid_grant","bad_refresh_token"])});import{createHash as I$f,randomBytes as A$f,timingSafeEqual as WZ1}from"crypto";function n$f(i){return i.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function lei(i){return I$f("sha256").update(i).digest("hex")}function AE0(i){let u=fei.length+1,t=u+IE0;if(!i.startsWith(`${fei}_`)||i.length<=t+1||i[t]!=="_")return null;let f=i.slice(u,t),l=i.slice(t+1);if(!xE0.test(f)||!xE0.test(l))return null;return f}function GE0(){let i=n$f(A$f(G$f)),u=i.slice(0,IE0),t=`${fei}_${u}_${i}`;return{plaintext:t,prefix:u,hash:lei(t)}}var fei="stv",G$f=32,IE0=12,xE0;var nE0=N(()=>{xE0=/^[A-Za-z0-9_-]+$/});function kE0(i){return{id:i.id,organizationId:i.organization_id,subjectConnectionId:i.subject_connection_id,tokenHash:i.token_hash,tokenPrefix:i.token_prefix,name:i.name,revokedAt:i.revoked_at,lastUsedAt:i.last_used_at,createdAt:i.created_at,updatedAt:i.updated_at}}class cei{db;constructor(i){this.db=i}async createOrRotateWorkloadToken(i){let u=i.name??"default";return await this.db.transaction().execute(async(f)=>{if(!await f.selectFrom("connections").select("id").where("id","=",i.subjectConnectionId).where("organization_id","=",i.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let c=GE0(),E=new Date().toISOString();await f.updateTable("connection_workload_tokens").set({revoked_at:E,updated_at:E}).where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("name","=",u).where("revoked_at","is",null).execute();let $=await f.insertInto("connection_workload_tokens").values({id:mf("cwt"),organization_id:i.organizationId,subject_connection_id:i.subjectConnectionId,token_hash:c.hash,token_prefix:c.prefix,name:u,revoked_at:null,last_used_at:null,created_at:E,updated_at:E}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:c.plaintext,record:kE0($)}})}async findActiveWorkloadToken(i){let u=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("name","=",i.name??"default").where("revoked_at","is",null).executeTakeFirst();return u?kE0(u):null}async revokeWorkloadToken(i){let u=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:u,updated_at:u}).where("id","=",i.tokenId).where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken(i){let u=AE0(i);if(!u)return null;let t=lei(i),f=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",u).where("token_hash","=",t).where("revoked_at","is",null).executeTakeFirst();if(!f)return null;let l=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:l,updated_at:l}).where("id","=",f.id).execute(),{tokenId:f.id,tokenPrefix:f.token_prefix,organizationId:f.organization_id,subjectConnectionId:f.subject_connection_id}}async replaceGrantsForSubject(i){await this.db.transaction().execute(async(u)=>{if(!await u.selectFrom("connections").select("id").where("id","=",i.subjectConnectionId).where("organization_id","=",i.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let f=[...new Set(i.grants.map((E)=>E.targetConnectionId))];if(f.length>0){if((await u.selectFrom("connections").select("id").where("organization_id","=",i.organizationId).where("id","in",f).execute()).length!==f.length)throw Error("Referenced connection not found in organization")}if(await u.deleteFrom("connection_credential_grants").where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).execute(),i.grants.length===0)return;let l=new Date().toISOString(),c=i.grants.map((E)=>({id:mf("ccg"),organization_id:i.organizationId,subject_connection_id:i.subjectConnectionId,target_connection_id:E.targetConnectionId,scope:E.scope,created_by:i.createdBy,created_at:l,updated_at:l}));await u.insertInto("connection_credential_grants").values(c).execute()})}async hasGrant(i){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",i.organizationId).where("subject_connection_id","=",i.subjectConnectionId).where("target_connection_id","=",i.targetConnectionId).where("scope","=",i.scope).executeTakeFirst()}}var DEi="credential:access-token:read",gEi="credential:configuration:read";var NEi=N(()=>{H$();nE0()});function wZ(i){let u=String(i??"");if(u&&!u.includes("T"))return u.replace(" ","T")+"Z";return u}function n0(i){return i.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function Vt(i){let u=Number(i??0);return Number.isFinite(u)?u:0}function j$f(i){if(!k$f.has(i))throw Error(`Invalid groupByColumn: ${i}`);return i}function Eei(i){if(!X$f.test(i))throw Error(`Invalid JSONPath: ${i}`);if(i.startsWith("$."))return i;if(i.startsWith("."))return`$${i}`;return`$.${i}`}function _ei(i){return i.replace(/^\$\./,"").split(".").map((t)=>`'${n0(t)}'`).join(", ")}function S$f(i){let u=J$f.exec(i);if(!u||!u[1]||!u[2])throw Error(`Invalid interval: ${i}`);let t=parseInt(u[1],10),f=u[2],l=K$f[f];if(t<1||t>l)throw Error(`Invalid interval amount: ${t}${f} (max ${l}${f})`);return{amount:t,unit:f}}function b7(i,u,t="timestamp"){let{amount:f,unit:l}=S$f(i),E={m:"MINUTE",h:"HOUR",d:"DAY"}[l];if(u==="duckdb")return`time_bucket(INTERVAL '${f} ${E}', CAST(${t} AS TIMESTAMP))`;return`toStartOfInterval(${t}, INTERVAL ${f} ${E})`}function yV(i,u,t){if(t==="duckdb")return`json_extract_string(${i}, '${u}')`;let f=_ei(u);return`JSONExtractString(${i}, ${f})`}function Y$f(i,u,t){if(t==="duckdb")return`CAST(json_extract_string(${i}, '${u}') AS DOUBLE)`;let f=_ei(u);return`JSONExtractFloat(${i}, ${f})`}function jE0(i,u,t){if(t==="duckdb")return`TRY_CAST(json_extract_string(${i}, '${u}') AS DOUBLE)`;let f=_ei(u);return`toFloat64OrZero(JSONExtractString(${i}, ${f}))`}function $ei(i){if(i===null||i===void 0)return{};if(typeof i==="object")return i;let u=String(i);try{return JSON.parse(u)}catch{return{_decocms_truncated:u}}}function wei(i){return{id:String(i.id??""),organizationId:String(i.organization_id??""),connectionId:String(i.connection_id??""),toolName:String(i.tool_name??""),input:$ei(i.input),output:$ei(i.output),isError:i.is_error===1||i.is_error===!0||i.is_error==="1"||typeof i.is_error==="bigint"&&i.is_error===1n,errorMessage:i.error_message!=null?String(i.error_message):null,durationMs:Number(i.duration_ms??0),timestamp:(()=>{if(i.timestamp instanceof Date)return i.timestamp.toISOString();let u=String(i.timestamp??""),t=new Date(u.includes("T")?u:u.replace(" ","T")+"Z");return Number.isNaN(t.getTime())?u:t.toISOString()})(),userId:i.user_id!=null?String(i.user_id):null,requestId:String(i.request_id??""),userAgent:i.user_agent!=null?String(i.user_agent):null,virtualMcpId:i.virtual_mcp_id!=null?String(i.virtual_mcp_id):null,properties:i.properties?$ei(i.properties):null}}function SE0(i,u){let t=[];if(i.properties)for(let[f,l]of Object.entries(i.properties)){let c=n0(f),E=n0(l);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${c}') = '${E}'`);else t.push(`JSONExtractString(properties, '${c}') = '${E}'`)}if(i.propertyKeys)for(let f of i.propertyKeys){let l=n0(f);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${l}') IS NOT NULL AND json_extract_string(properties, '$.${l}') != ''`);else t.push(`JSONExtractString(properties, '${l}') IS NOT NULL AND JSONExtractString(properties, '${l}') != ''`)}if(i.propertyPatterns)for(let[f,l]of Object.entries(i.propertyPatterns)){let c=n0(f),E=n0(l);if(u==="duckdb")t.push(`json_extract_string(properties, '$.${c}') ILIKE '${E}'`);else t.push(`JSONExtractString(properties, '${c}') ILIKE '${E}'`)}if(i.propertyInValues)for(let[f,l]of Object.entries(i.propertyInValues)){let c=n0(f),E=n0(l);if(u==="duckdb")t.push(`list_contains(string_split(json_extract_string(properties, '$.${c}'), ','), '${E}')`);else t.push(`has(splitByChar(',', JSONExtractString(properties, '${c}')), '${E}')`)}return t}function JE0(i,u){let t=[];if(S5(t,u?.startDate,i),!u)return t;if(u.connectionIds?.length){let f=u.connectionIds.map((l)=>`'${n0(l)}'`).join(",");t.push(`connection_id IN (${f})`)}if(u.toolNames?.length){let f=u.toolNames.map((l)=>`'${n0(l)}'`).join(",");t.push(`tool_name IN (${f})`)}if(u.virtualMcpIds?.length){let f=u.virtualMcpIds.map((l)=>`'${n0(l)}'`).join(",");t.push(`virtual_mcp_id IN (${f})`)}if(u.endDate)t.push(K5(u.endDate,i));if(u.propertyFilters)t.push(...SE0(u.propertyFilters,i));return t}function KE0(i,u,t="timestamp"){if(u==="duckdb")return`CAST(${t} AS TIMESTAMP) >= TIMESTAMP '${i.toISOString()}'`;if(t==="bucket")return`${t} >= parseDateTimeBestEffort('${i.toISOString()}')`;return`${t} >= parseDateTime64BestEffort('${i.toISOString()}', 9)`}function K5(i,u,t="timestamp"){if(u==="duckdb")return`CAST(${t} AS TIMESTAMP) <= TIMESTAMP '${i.toISOString()}'`;if(t==="bucket")return`${t} <= parseDateTimeBestEffort('${i.toISOString()}')`;return`${t} <= parseDateTime64BestEffort('${i.toISOString()}', 9)`}function S5(i,u,t,f="timestamp"){if(u)i.push(KE0(u,t,f));else if(t==="clickhouse")i.push(KE0(new Date(Date.now()-W$f),t,f))}class vei{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor(i,u,t,f,l="clickhouse",c=!1){this.engine=i;this.sourceFactory=u;this.metricEngine=t;this.metricSourceFactory=f;this.dialect=l;this.metricsFromLogs=c}async query(i){if(!i.organizationId)throw Error("organizationId is required");let u=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),t=[`organization_id = '${n0(i.organizationId)}'`];if(i.connectionId)t.push(`connection_id = '${n0(i.connectionId)}'`);if(i.excludeConnectionIds?.length){let h=i.excludeConnectionIds.map((D)=>`'${n0(D)}'`).join(",");t.push(`connection_id NOT IN (${h})`)}if(i.virtualMcpId)t.push(`virtual_mcp_id = '${n0(i.virtualMcpId)}'`);if(i.toolName)t.push(`tool_name = '${n0(i.toolName)}'`);if(i.isError!==void 0)t.push(`is_error = ${i.isError?1:0}`);if(S5(t,i.startDate,this.dialect),i.endDate)t.push(K5(i.endDate,this.dialect));if(i.propertyFilters)t.push(...SE0(i.propertyFilters,this.dialect));let f=1000,l=Math.min(Math.max(1,Math.floor(i.limit??50)),f),c=Math.max(0,Math.floor(i.offset??0)),E=t.join(" AND ");if(this.dialect==="duckdb"){let h=`SELECT ${XE0}, count(*) OVER () AS _total FROM ${u} WHERE ${E} ORDER BY timestamp DESC LIMIT ${l} OFFSET ${c}`,D=await this.engine.query(h);if(D.length===0)return{logs:[],total:0};let g=Number(D[0]._total??0);return{logs:D.map(wei),total:g}}let $=`SELECT count(*) AS total FROM ${u} WHERE ${E}`,w=`SELECT ${XE0} FROM ${u} WHERE ${E} ORDER BY timestamp DESC LIMIT ${l} OFFSET ${c}`,[d,_]=await Promise.all([this.engine.query($),this.engine.query(w)]),v=Number(d[0]?.total??0);return{logs:_.map(wei),total:v}}async getById(i,u){if(!i||!u)return null;let f=`SELECT * FROM ${this.sourceFactory(i)} WHERE organization_id = '${n0(i)}' AND id = '${n0(u)}' LIMIT 1`,l=await this.engine.query(f);if(l.length===0)return null;return wei(l[0])}async getStats(i){if(!i.organizationId)throw Error("organizationId is required");let u=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),t=[`organization_id = '${n0(i.organizationId)}'`];if(S5(t,i.startDate,this.dialect),i.endDate)t.push(K5(i.endDate,this.dialect));let f=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${u} WHERE ${t.join(" AND ")}`,c=(await this.engine.query(f))[0]??{};return{totalCalls:Number(c.total_calls??0),errorRate:Number(c.error_rate??0),avgDurationMs:Number(c.avg_duration_ms??0)}}async queryLlmUsageStats(i){let u={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!i.organizationId||!i.connectionId)return u;let t=this.dialect,f=t==="clickhouse",l=this.sourceFactory(i.organizationId,{startDate:i.startDate,endDate:i.endDate}),c=b7(i.interval,t,"timestamp"),E=(B)=>`coalesce(${jE0("properties",`$.${B}`,t)}, 0)`,$=f?"count()":"count(*)",w=f?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",d=(B)=>f?`quantile(${B})(duration_ms)`:`quantile_cont(duration_ms, ${B})`,_=[`organization_id = '${n0(i.organizationId)}'`,`connection_id = '${n0(i.connectionId)}'`];if(S5(_,i.startDate,t),i.endDate)_.push(K5(i.endDate,t));if(i.userIds?.length){let B=i.userIds.slice(0,100).map((F)=>`'${n0(F)}'`).join(",");_.push(`user_id IN (${B})`)}let v=_.join(" AND "),h=Math.min(Math.max(1,Math.floor(i.topN??5)),20),D=`${$} AS calls,
|
|
82330
82330
|
${w} AS errors,
|
|
82331
82331
|
avg(duration_ms) AS avg,
|
|
82332
82332
|
sum(${E("input_tokens")}) AS in_tok,
|
|
@@ -84299,7 +84299,7 @@ ${l}`:f}}catch{let t=u.split(`
|
|
|
84299
84299
|
Return ONLY valid JSON with this shape:
|
|
84300
84300
|
{"title":"Short imperative commit title (max 72 chars)","body":"1-3 sentence PR description explaining what changed and why"}
|
|
84301
84301
|
|
|
84302
|
-
Use sentence case for the title. No markdown fences.`;var os0=N(()=>{Cf();ca()});function UI4(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:null}function PI4(i){if(!i||i.includes(".."))return!1;return TI4.test(i)}function ss0(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!PI4(u))return null;let t=UI4(i.props);if(t)return{resolveType:u,payload:{props:t}};let{__resolveType:f,...l}=i;return{resolveType:u,payload:l}}function ps0(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${encodeURIComponent(u)}`}var TI4;var ip0=N(()=>{TI4=/^[\w./@-]+$/});function up0(i,u){let t=i?.githubRepo;if(!t?.owner||!t?.name)return null;if(!t.connectionId)return t;if(!u.includes(t.connectionId))return null;return t}async function tp0(i,u,t,f){if(!f.connectionId)throw new pH("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let l=i.organization?.id;if(!l)throw new pH(ZE);await UQ({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(_)=>{let v=_ instanceof Error?_.message:ZE;throw new pH(v)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await PQ(f.connectionId,f.owner,f.name,i.db,i.vault),w=_xi(i),d=await u.proxyDaemonRequest(t,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:c},identity:{userName:E,userEmail:$}},...w?{operator:w}:{}})});if(!d.ok){let _=await d.text().catch(()=>d.statusText);throw Error(`Failed to refresh sandbox git credentials (${d.status}): ${_}`)}}var pH;var fp0=N(()=>{L9();_5u();_Fi();pH=class pH extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function II4(i){if(!i||i.length>255||i.includes("..")||i.startsWith("/")||i.endsWith("/")||i.endsWith(".lock")||!xI4.test(i))throw Error(`Invalid branch name: ${i}`)}function ib(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(nI4)])}function ub(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}async function Rc(i,u,t){let f=ub(i);if(f instanceof Response)return f;let{claimName:l,userId:c,projectRef:E}=i.get("vmClaim"),$=t?.method??"POST",w=null,d=new Headers;if(t?.jsonBody!==void 0)w=t.jsonBody,d.set("content-type","application/json");else if(t?.forwardJsonBody)w=await i.req.text(),d.set("content-type","application/json");let _=t?.signal,v={method:$,headers:d,body:w,..._?{signal:_}:{}},h=async()=>{let D=await f.proxyDaemonRequest(l,u,v);if(t?.map404to410&&D.status===404){try{await D.body?.cancel()}catch{}if(await f.adoptLiveClaim?.({userId:c,projectRef:E},l))D=await f.proxyDaemonRequest(l,u,v);if(D.status===404){try{await D.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...V8}})}}let g=await D.text(),O=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?jI4(g):g,Z=D.headers.get("content-type")??"application/json";return new Response(O,{status:D.status,headers:{"content-type":Z,...V8}})};try{if(_){let D=h();return D.catch(()=>{}),await Promise.race([D,new Promise((O,Z)=>{if(_.aborted)return Z(_.reason);_.addEventListener("abort",()=>Z(_.reason),{once:!0})})])}return await h()}catch(D){let g=D instanceof Error?D.message:String(D);return i.json({error:`Daemon unreachable: ${g}`},502)}}function jI4(i){try{let u=JSON.parse(i);if(u&&typeof u==="object"&&!Array.isArray(u)&&"repoDir"in u)return JSON.stringify({...u,repoDir:null})}catch{}return i}async function cp0(i,u,t,f="GET",l){let c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null});if(c.status===404&&l){try{await c.body?.cancel()}catch{}if(await i.adoptLiveClaim?.(l,u))c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null})}if(c.status===404){try{await c.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let E=await c.text();if(!c.ok)try{let $=JSON.parse(E);throw Error($.error??`Daemon error (${c.status})`)}catch($){if($ instanceof Error&&$.message!==E)throw $;throw Error(`Daemon error (${c.status})`)}return JSON.parse(E)}function XI4(i){return Ep0.includes(i)}var xI4,AI4=524288,GI4=65536,nI4=1e4,lp0=2000,kI4,V8,Ep0,$p0=()=>{let i=new Hu;return i.use("/:virtualMcpId/:branch/*",kI4),i.post("/:virtualMcpId/:branch/write",(u)=>Rc(u,"/_sandbox/write",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>Rc(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>Rc(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>Rc(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>Rc(u,"/_sandbox/read",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>Rc(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/exec/:script",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}`)}),i.post("/:virtualMcpId/:branch/exec/:script/kill",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/setup/:step",async(u)=>{let t=u.req.param("step");if(!t||!XI4(t))return u.json({error:`step must be one of: ${Ep0.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Bi(u.var.meshContext),c=EFi(f.virtualMcpMetadata);try{await wFi({ctx:u.var.meshContext,runner:f.runner,handle:f.claimName,orgId:l.id,userId:f.userId,entries:c})}catch(E){let $=E instanceof Error?E.message:String(E);return u.json({error:`Failed to push env to daemon: ${$}`},502)}}}return Rc(u,`/_sandbox/setup/${t}`,{signal:u.req.raw.signal,map404to410:!0})}),i.get("/:virtualMcpId/:branch/events",(u)=>{let t=u.get("vmClaim");if(!t.runner)return Wd(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this mesh."})})});return Ms0(u,{ctx:u.var.meshContext,claimName:t.claimName,runner:t.runner,virtualMcpId:t.virtualMcpId,branch:t.branch,userId:t.userId,projectRef:t.projectRef,virtualMcpMetadata:t.virtualMcpMetadata})}),i.get("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(lp0)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(lp0)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>Rc(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.meshContext;try{await v5u(E,t,f);let $=up0(l,c);if($)await tp0(E,t,f,$)}catch($){if($ instanceof pH)return u.json({error:$.message},403,V8);let w=$ instanceof Error?$.message:String($);return u.json({error:w},502,V8)}return Rc(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>Rc(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.meshContext;try{await v5u(l,t,f)}catch(c){let E=c instanceof Error?c.message:String(c);return u.json({error:E},502,V8)}return Rc(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",Bw({maxSize:AI4,onError:(u)=>u.json({error:"Payload too large"},413,V8)}),async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.meshContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,_=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[v,h]=ms0(w)&&_?[w,d]:await Promise.all([cp0(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),cp0(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await as0(E,v,h);return u.json(D,200,V8)}catch($){let w=$ instanceof Error?$.message:String($);if(w==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,V8);return u.json({error:w},502,V8)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(l!=="/.decofile")return u.json({error:"Path not allowed"},403);let c;try{c=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!c)return u.json({error:"Preview not available"},502);let E=c.replace(/\/+$/,""),$;try{$=await fetch(`${E}${l}`)}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",Bw({maxSize:GI4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l;try{l=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!l)return u.json({error:"Preview not available"},502);let c;try{c=await u.req.json()}catch{return u.json({error:"Invalid JSON body"},400)}if(!c||typeof c!=="object"||Array.isArray(c))return u.json({error:"Invalid JSON body"},400);let E=ss0(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $;try{$=await fetch(ps0(l,E.resolveType),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(E.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i};var wp0=N(()=>{sf();WH();$K();Rs0();$3();fPi();yQ();Cs0();qs0();D1u();TQ();os0();ip0();fp0();xI4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;kI4=bs0(async(i,u)=>{let t=i.var.meshContext;try{Si(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return i.json({error:"Organization scope required"},403)}let c=i.req.param("virtualMcpId"),E=i.req.param("branch");if(!c||!E)return i.json({error:"virtualMcpId and branch are required"},400);try{II4(E)}catch(h){let D=h instanceof Error?h.message:String(h);return i.json({error:D},400)}let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return i.json({error:"Virtual MCP not found"},404);let w=D8({orgId:l.id,virtualMcpId:c,branch:E}),d=IH({userId:f,projectRef:w},E),_=$.metadata??null,v;try{v=(await v_(t,{userId:f,branch:E,virtualMcpMetadata:_})).provider}catch{v=null}if(!v)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:d,runner:v,virtualMcpId:c,branch:E,userId:f,projectRef:w,virtualMcpMetadata:_,connectionIds:$.connections?.map((h)=>h.connection_id)??[]}),u()});V8={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Ep0=["clone","install","start"]});var dp0=(i)=>{let u=new Hu;if(u.use("*",sJ),u.route("/",GPi()),u.route("/",ze0()),u.route("/",$xi()),u.route("/tools",Ys0()),u.route("/",Js0()),u.route("/",Bs0({kvStorage:i.kvStorage})),u.route("/",Os0()),u.route("/fs",As0({getConnection:i.getNatsConnection})),u.route("/sandbox",$p0()),u.route("/",ns0()),u.route("/deco-sites",kPi()),u.route("/sso",pUi()),u.route("/",wxi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",ne0()),i.mountDevAssets)u.route("/dev-assets",jPi({orgFromPath:!0}));return u.use("/mcp/:connectionId?",i.mcpAuth),u.use("/mcp/:connectionId/ui-resource",i.mcpAuth),u.use("/mcp/gateway/:virtualMcpId?",i.mcpAuth),u.use("/mcp/virtual-mcp/:virtualMcpId?",i.mcpAuth),u.use("/mcp/self",i.mcpAuth),u.route("/",d70()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.route("/mcp",bFi()),u.route("/mcp/self",Exi()),u.route("/mcp",MFi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var _p0=N(()=>{sf();K3u();ke0();z3u();XPi();Qe0();X3u();Zs0();Fs0();Gs0();Be();Wwu();qFi();l5u();ks0();Ks0();c5u();Ws0();E5u();RFi();wp0()});async function vp0(i,u){let t=new Headers({authorization:`Bearer ${i}`,"X-MCP-Session-Auth":"true"}),f=await u.getMcpSession({headers:t}).catch(()=>null);if(f?.userId)return f.userId;let l=await u.verifyApiKey({body:{key:i}}).catch(()=>null);if(l?.valid&&l.key?.userId)return l.key.userId;return null}function N5u(i){try{i?.clear?.()}catch{}}async function hp0({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=Whu(i),$=OAi(E.sub),w=Yb(new TextEncoder().encode(u)),d=qp();try{let _=await Vp(l,d,$,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:c},{algorithm:Vc.v2,exp:Math.floor(t.getTime()/1000),signer:w});return new TextDecoder().decode(rp(_,d))}finally{N5u(d),N5u(w),N5u($)}}var Dp0=N(()=>{UAi()});function JI4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function gp0(){let i=new Hu;return i.post("/links/session",async(u)=>{let f=u.get("meshContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=yu();if(!l.natsTunnelPublicEnabled)return u.json(O5u(),503);if(!l.natsPublicUrl)return u.json(O5u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(O5u(),503)}let c=f5(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await hp0({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:gMu(c),userId:f,allowedConnectionTypes:JI4(l.natsPublicUrl)})}return u.json(NMu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var O5u=()=>({error:"link session unavailable"});var Np0=N(()=>{sf();xt();FQi();Dp0()});async function YI4(i,u){try{return!await i.alive(u)}catch(t){return console.warn(`[vm-events] alive probe failed for ${u}; assuming alive: ${t instanceof Error?t.message:String(t)}`),!1}}async function WI4(i){let{ctx:u,runner:t,claimName:f,userId:l,projectRef:c,sandboxProviderKind:E}=i;try{await t.delete(f)}catch($){console.warn(`[vm-events] runner.delete failed for ${f}: ${$ instanceof Error?$.message:String($)}`)}try{await new tg(u.db).delete({userId:l,projectRef:c},E)}catch($){console.warn(`[vm-events] sandbox_runner_state delete failed for ${l}/${c}/${E}: ${$ instanceof Error?$.message:String($)}`)}}async function LI4(i){let{stream:u,claimName:t,runner:f,signal:l}=i;return new Promise((c)=>{let E=!1,$=!1,w=null,d=(h)=>{if(E)return;E=!0,clearTimeout(_),l.removeEventListener("abort",v),w?.unsubscribe(),c(h)},_=setTimeout(()=>{if($||E)return;u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"claim-never-created",message:"Sandbox claim was never created. The SANDBOX_START call may have failed earlier \u2014 check the start error."})}).catch(()=>{}),d(!1)},KI4),v=()=>d(!1);l.addEventListener("abort",v,{once:!0}),w=ja(f,t,(h)=>{if(E)return;if(h.kind!=="claiming")$=!0;if(u.writeSSE({event:"phase",data:JSON.stringify(h)}).catch(()=>{}),h.kind==="ready")d(!0);else if(h.kind==="failed")d(!1)})})}async function zI4(i){let{stream:u,runner:t,claimName:f,signal:l}=i,c=Date.now(),E=null;while(!l.aborted){let w=null;try{w=await t.proxyDaemonRequest(f,"/_sandbox/events",{method:"GET",headers:new Headers({accept:"text/event-stream"}),body:null,signal:l})}catch(d){if(l.aborted)return;if(Date.now()-c<Op0){await Zt(Zp0,{signal:l}).catch(()=>{});continue}let _=d instanceof Error?d.message:String(d);await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE error: ${_}`})}).catch(()=>{});return}if(w.status===404){try{await w.body?.cancel()}catch{}if(Date.now()-c<Op0){await Zt(Zp0,{signal:l}).catch(()=>{});continue}await u.writeSSE({event:"gone",data:""}).catch(()=>{});return}if(!w.ok||!w.body){try{await w.body?.cancel()}catch{}await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE failed (${w.status}).`})}).catch(()=>{});return}E=w;break}if(!E||!E.body)return;let $=E.body.getReader();try{while(!l.aborted){let{value:w,done:d}=await $.read();if(d)break;if(w)await u.write(w)}}catch{}finally{try{$.releaseLock()}catch{}}}var KI4=90000,SI4=15000,Bp0=()=>{let i=new Hu;return i.get("/",async(u)=>{let t=u.var.meshContext;try{Si(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return u.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return u.json({error:"Organization scope required"},403)}let c=u.req.query("virtualMcpId"),E=u.req.query("branch");if(!c||!E)return u.json({error:"virtualMcpId and branch are required"},400);let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return u.json({error:"Virtual MCP not found"},404);let w=D8({orgId:l.id,virtualMcpId:c,branch:E}),d=IH({userId:f,projectRef:w},E),_=$.metadata??null,v,h=null,D=null;try{let Z=await v_(t,{userId:f,branch:E,virtualMcpMetadata:_});v=Z.provider,h=Z.kind}catch(Z){D=Z instanceof Error?Z:Error(String(Z)),v=null}let g=h&&O8(T6(_),f,E,h),O=!!g&&g.sandboxHandle===d;if(!v)return Wd(u,async(Z)=>{await Z.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:D?.message??"No sandbox runner configured on this mesh."})})});return u.header("X-Accel-Buffering","no"),u.header("Content-Encoding","identity"),Wd(u,async(Z)=>{let B=new AbortController,F=setInterval(()=>{Z.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(F)})},SI4);Z.onAbort(()=>{B.abort(),clearInterval(F)});try{if(O&&h){if(await YI4(v,d)){await WI4({ctx:t,runner:v,claimName:d,userId:f,projectRef:w,sandboxProviderKind:h}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await LI4({stream:Z,claimName:d,runner:v,signal:B.signal})||B.signal.aborted)return;await zI4({stream:Z,runner:v,claimName:d,signal:B.signal})}finally{clearInterval(F)}})}),i},Op0=60000,Zp0=500;var Fp0=N(()=>{sf();$K();$3();Bl();fPi();Xa();yQ();Wdi();Td()});function HI4(i){return i.filter((u)=>u.vendors?.alias).map((u)=>({name:u.name,title:u.title,description:u.description,logo:u.logo,category:u.category,vendor:{alias:u.vendors.alias,url:u.vendors.url}}))}async function bI4(i,u){let t=await fetch(`${i}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:u,Authorization:`Bearer ${u}`,Accept:"application/json"},signal:AbortSignal.timeout(QI4)});if(!t.ok){let f=await t.text().catch(()=>t.statusText);throw console.error(`[deco-apps] Supabase error (${t.status}): ${f.slice(0,200)}`),Error(`External service error (${t.status})`)}return await t.json()}var QI4=1e4,RI4=async(i,u)=>{if(!i.get("meshContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},yp0=()=>{let i=new Hu;return i.use("*",RI4),i.get("/",async(u)=>{let t=yu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await bI4(f,l);return u.json({apps:HI4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var Tp0=N(()=>{sf();xt()});import{z as Lu}from"zod";function Ah(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function sI4(i){if(!i)return null;let u=i.indexOf(":");if(u===-1)return{credentialId:null,modelId:i};let t=i.substring(0,u),f=i.substring(u+1);if(!t||!f)return null;return{credentialId:t,modelId:f}}function pI4(i,u,t){try{return JSON.parse(i)}catch{throw new xp0(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function iA4(i){let u={};for(let t of i)if(t.role==="assistant"&&t.tool_calls)for(let f of t.tool_calls)u[f.id]=f.function.name;return i.map((t)=>{switch(t.role){case"system":return{role:"system",content:t.content};case"user":if(typeof t.content==="string")return{role:"user",content:t.content};return{role:"user",content:t.content.map((l)=>{if(l.type==="text")return{type:"text",text:l.text};return{type:"image",image:l.image_url.url}})};case"assistant":if(t.tool_calls&&t.tool_calls.length>0)return{role:"assistant",content:t.tool_calls.map((l)=>({type:"tool-call",toolCallId:l.id,toolName:l.function.name,input:pI4(l.function.arguments,l.id,l.function.name)}))};return{role:"assistant",content:t.content??""};case"tool":let f=u[t.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:t.tool_call_id,toolName:f,output:{type:"text",value:t.content}}]}}})}function uA4(i){let u=i.map((t)=>{let f=t.function.parameters?aw(t.function.parameters):aw({type:"object",properties:{}});return[t.function.name,ft({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function tA4(i){if(!i)return;return{openai:{response_format:i}}}function fA4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Up0(i,u,t,f,l,c){let E={model:i,messages:u,tools:t,temperature:f.temperature,maxTokens:f.max_tokens,topP:f.top_p,frequencyPenalty:f.frequency_penalty,presencePenalty:f.presence_penalty,stopSequences:f.stop?Array.isArray(f.stop)?f.stop:[f.stop]:void 0,abortSignal:c};return l?{...E,providerOptions:l}:E}function Pp0(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var CI4=256,MI4,qI4,VI4,rI4,mI4,eI4,aI4,oI4,xp0,Ip0,Ap0;var Gp0=N(()=>{Cf();sf();$K();MI4=Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string(),description:Lu.string().optional(),parameters:Lu.record(Lu.string(),Lu.unknown()).optional()})}),qI4=Lu.object({id:Lu.string(),type:Lu.literal("function"),function:Lu.object({name:Lu.string(),arguments:Lu.string()})}),VI4=Lu.discriminatedUnion("role",[Lu.object({role:Lu.literal("system"),content:Lu.string(),name:Lu.string().optional()}),Lu.object({role:Lu.literal("user"),content:Lu.union([Lu.string(),Lu.array(Lu.union([Lu.object({type:Lu.literal("text"),text:Lu.string()}),Lu.object({type:Lu.literal("image_url"),image_url:Lu.object({url:Lu.string(),detail:Lu.string().optional()})})]))]),name:Lu.string().optional()}),Lu.object({role:Lu.literal("assistant"),content:Lu.string().nullable().optional(),name:Lu.string().optional(),tool_calls:Lu.array(qI4).optional()}),Lu.object({role:Lu.literal("tool"),content:Lu.string(),tool_call_id:Lu.string()})]),rI4=Lu.object({type:Lu.literal("text")}),mI4=Lu.object({type:Lu.literal("json_object")}),eI4=Lu.object({type:Lu.literal("json_schema"),json_schema:Lu.object({name:Lu.string(),description:Lu.string().optional(),schema:Lu.record(Lu.string(),Lu.unknown()),strict:Lu.boolean().optional()})}),aI4=Lu.union([rI4,mI4,eI4]),oI4=Lu.object({model:Lu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:Lu.array(VI4),stream:Lu.boolean().optional().default(!1),temperature:Lu.number().min(0).max(2).optional(),max_tokens:Lu.number().positive().optional(),top_p:Lu.number().min(0).max(1).optional(),frequency_penalty:Lu.number().min(-2).max(2).optional(),presence_penalty:Lu.number().min(-2).max(2).optional(),stop:Lu.union([Lu.string(),Lu.array(Lu.string())]).optional(),tools:Lu.array(MI4).optional(),tool_choice:Lu.union([Lu.literal("auto"),Lu.literal("none"),Lu.literal("required"),Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string()})})]).optional(),response_format:aI4.optional(),user:Lu.string().optional()});xp0=class xp0 extends Error{constructor(i){super(i);this.name="MessageConversionError"}};Ip0=new Hu;Ip0.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("meshContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(Ah("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(Ah("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((u.organization.slug??u.organization.id)!==t)return i.json(Ah("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let f=await i.req.json(),l=oI4.safeParse(f);if(!l.success){let Z=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(Ah(`Invalid request: ${Z.message}`,"invalid_request_error",Z.path.length>0?Z.path.join("."):null),400)}let c=l.data,E=sI4(c.model);if(!E)return i.json(Ah("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:$}=E,{modelId:w}=E;if(!$){let Z=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(Z.length===0)return i.json(Ah("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);$=Z[0].id}let d;try{d=await u.aiProviders.activate($,u.organization.id)}catch{return i.json(Ah(`AI provider credential not found or inaccessible: ${$}`,"invalid_request_error","model"),404)}let _=d.aiSdk.languageModel(w),v=iA4(c.messages),h=c.tools?uA4(c.tools):void 0,D=tA4(c.response_format),g=fA4(),O=Math.floor(Date.now()/1000);if(c.stream)return Wd(i,async(Z)=>{let B=Up0(_,v,h,c,D,i.req.raw.signal);try{let F=Fd(B),y=!1,T=0,U="",I=async()=>{if(U.length===0)return;let j=U;U="",await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{content:j},finish_reason:null}]})})};for await(let j of F.fullStream){if(!y&&(j.type==="text-delta"||j.type==="tool-call"))await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),y=!0;if(j.type==="text-delta"){if(U+=j.text,U.length>=CI4)await I()}else if(j.type==="tool-call"){await I();let A=T++;await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{tool_calls:[{index:A,id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify(j.input)}}]},finish_reason:null}]})})}else if(j.type==="finish")await I(),await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{},finish_reason:Pp0(j.finishReason)}],usage:j.totalUsage?{prompt_tokens:j.totalUsage.inputTokens??0,completion_tokens:j.totalUsage.outputTokens??0,total_tokens:j.totalUsage.totalTokens??0}:void 0})})}await I(),await Z.writeSSE({data:"[DONE]"})}catch(F){let y=F;console.error("[openai-compat:stream] Error:",y.message),await Z.writeSSE({data:JSON.stringify({error:{message:y.message,type:"server_error"}})})}});else{let Z=Up0(_,v,h,c,D,i.req.raw.signal),B=await a9(Z),F={role:"assistant",content:B.text||null};if(B.toolCalls&&B.toolCalls.length>0)F.tool_calls=B.toolCalls.map((y)=>({id:y.toolCallId,type:"function",function:{name:y.toolName,arguments:JSON.stringify("input"in y?y.input:{})}})),F.content=null;return i.json({id:g,object:"chat.completion",created:O,model:c.model,choices:[{index:0,message:F,finish_reason:Pp0(B.finishReason)}],usage:{prompt_tokens:B.usage?.inputTokens??0,completion_tokens:B.usage?.outputTokens??0,total_tokens:B.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(Ah("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(Ah(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(Ah(l.message,"server_error"),500)}});Ap0=Ip0});function cA4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??lA4}}var np0,lA4="https://us.i.posthog.com",kp0;var jp0=N(()=>{sf();cri();Bg();HE();xt();Jwu();np0=new Hu;np0.get("/",(i)=>{let u={theme:uf0(),...rO().logo&&{logo:rO().logo},...xd()&&{internalUrl:P4i()},...yu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!yu().firecrawlApiKey,auth:kV0(),posthog:cA4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!xd()&&yu().sandboxProviderKind==="agent-sandbox"}};return i.json({success:!0,config:u})});kp0=np0});function Xp0(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals")}var Jp0,EA4,$A4,Kp0;var Sp0=N(()=>{sf();n5();AQ();gW();Jp0=new Hu,EA4=["range","if-none-match","if-modified-since"],$A4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Jp0.get("/:org/files/*",async(i)=>{let u=i.get("meshContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(YH(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new P0(401,{message:"Authentication required"})}if(!t)throw new P0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new P0(400,{message:"Missing file key"});let l=await La(f,u);if(!l)throw new P0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&G5()){let w=l.match(/^data:([^;]+);base64,(.+)$/s);if(!w)throw new P0(500,{message:"Invalid data URL from storage"});let[,d,_]=w,v=Buffer.from(_,"base64"),h=new Headers({"Content-Type":d,"Cache-Control":"private, max-age=86400"});return Xp0(h,d),new Response(v,{status:200,headers:h})}let c=new Headers;for(let w of EA4){let d=i.req.header(w);if(d)c.set(w,d)}let E=await fetch(l,{headers:c});if(E.status===403||E.status===404)throw new P0(404,{message:"File not found"});if(!E.ok&&E.status!==304&&E.status!==416)throw console.error(`[files] upstream storage error ${E.status} for key:`,f),new P0(502,{message:"Upstream storage error"});let $=new Headers;for(let w of $A4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),Xp0($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});Kp0=Jp0});function zp0(i){let u=i?.connectFn??vA4,t=null,f=null,l=!1,c=!1,E=!1,$=[];function w(){return t!==null&&!t.isClosed()&&!t.isDraining()&&!E}function d(){console.log(`[NatsProvider] fireReady: ${$.length} callbacks`);for(let h of $)try{h()}catch{}}function _(h){(async()=>{for await(let D of h.status())if(D.type==="disconnect")console.log("[NatsProvider] Disconnected"),E=!0;else if(D.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),E=!1,f=null,d()})().catch(()=>{})}async function v(h,D){let g=0;while(!c)try{t=await u({servers:h,timeout:_A4,reconnect:!0,maxReconnectAttempts:-1,...D?{authenticator:D}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${g} attempt(s)`),f=null,E=!1,_(t),d();return}catch{g++;let O=uc(dA4,wA4,g-1,2,0.5);await Zt(O)}}return{init(h,D){if(l)return;l=!0,c=!1;let g=D?.creds?Yp0.credsAuthenticator(new TextEncoder().encode(D.creds)):void 0;v(h,g).catch(()=>{})},isConnected(){return w()},getConnection(){return w()?t:null},getJetStream(){if(!w())return null;if(!f)f=Lp0.jetstream(t);return f},onReady(h){if($.push(h),w())try{h()}catch{}},async drain(){if(c=!0,l=!1,f=null,E=!1,t){let h=t;t=null,await h.drain().catch(()=>{})}}}}function vA4(i){return Wp0.connect(i)}var Yp0,Wp0,Lp0,wA4=100,dA4=3000,_A4=3000;var Qp0=N(()=>{Bl();Yp0=k(gO(),1),Wp0=k(BQi(),1),Lp0=k(o2(),1)});function tb(i){let u=i?.ttlMs??60000,t=i?.maxSize??1e4,f=i?.updateRecencyOnGet??!1,l=new Map;function c(){if(l.size<=t)return;let E=Date.now();for(let[$,w]of l)if(w.expiresAt<=E)l.delete($);while(l.size>t){let $=l.keys().next().value;if($===void 0)break;l.delete($)}}return{get(E){let $=l.get(E);if(!$)return;if($.expiresAt<=Date.now()){l.delete(E);return}if(f)l.delete(E),l.set(E,$);return $.value},set(E,$){l.delete(E),l.set(E,{value:$,expiresAt:Date.now()+u}),c()},delete(E){l.delete(E)},clear(){l.clear()},size(){return l.size}}}function Z5u(i,u){return`${i}.${u}`}class B5u{cache;constructor(i){this.cache=tb({ttlMs:i?.ttlMs??hA4,maxSize:i?.maxSize??DA4})}async get(i,u){return this.cache.get(Z5u(i,u))??null}async set(i,u,t){this.cache.set(Z5u(i,u),t)}async invalidate(i,u){this.cache.delete(Z5u(i,u))}teardown(){this.cache.clear()}}var hA4=600000,DA4=5000;var Hp0=()=>{};function vxi(i,u){return`${i}:${u}`}function F5u(i){let u=tb({ttlMs:i?.ttlMs??gA4,maxSize:i?.maxSize??NA4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let _=t?.();if(!_)return;try{_.publish(bp0,l.encode(JSON.stringify({organizationId:w,keyId:d,originId:f})))}catch(v){console.warn("[ProviderKeyCache] Publish failed (non-critical):",v)}}return{get(w,d){return u.get(vxi(w,d))},set(w,d,_){u.set(vxi(w,d),_)},invalidate(w,d){u.delete(vxi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(bp0),(async()=>{for await(let d of E)try{let _=JSON.parse(c.decode(d.data));if(_.originId===f)continue;u.delete(vxi(_.organizationId,_.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var bp0="studio.ai-provider-keys.invalidate",gA4=30000,NA4=5000;var Rp0=()=>{};class y5u{options;sub=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor(i){this.options=i}async start(i){if(i)this.onCancel=i;if(this.sub)return;if(!this.onCancel)return;let u=this.options.getConnection();if(!u)return;this.sub=u.subscribe("mesh.decopilot.cancel");let t=new TextDecoder;(async()=>{for await(let f of this.sub)try{let l=JSON.parse(t.decode(f.data));if(l.originId===this.originId)continue;this.onCancel?.(l.taskId)}catch{}})().catch(console.error)}broadcast(i){if(/[.*>\s]/.test(i)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(i);try{let u=this.options.getConnection();if(!u)return;u.publish("mesh.decopilot.cancel",this.encoder.encode(JSON.stringify({taskId:i,originId:this.originId})))}catch(u){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",u)}}publishControlFrame(i,u){}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onCancel=null}}function UA4(){return{name:_8,subjects:[`${VQi}.>`],storage:x_.StorageType.File,max_age:BA4,max_bytes:yA4,max_msgs_per_subject:TA4,discard:x_.DiscardPolicy.Old,retention:x_.RetentionPolicy.Limits,duplicate_window:FA4,num_replicas:1}}class qp0{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(i,u){if(this.chunks++,this.encodeMs+=i,i>this.maxMs)this.maxMs=i;this.bytes+=u}flush(){let i=performance.now(),u=i-this.windowStart;if(this.chunks>0&&u>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(u),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/u*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=i}}function Cp0(i){let u=Mp0.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function AA4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,ZA4().add(1,{"org.id":u??"unknown"}),t===1||t%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${i} (${t} total):`,$)})},get errorCount(){return t}}}class T5u{options;js=null;jsm=null;constructor(i){this.options=i}async init(){let i=this.options.getConnection();if(!i){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let u=this.options.getJetStreamManager?await this.options.getJetStreamManager():await x_.jetstreamManager(i),t=UA4();try{await u.streams.info(_8),await u.streams.update(_8,t)}catch(f){if(f instanceof Error&&f.message.includes("stream not found"))await u.streams.add(t);else if(f instanceof Error&&/can ?not change.*storage|storage type/i.test(f.message))await u.streams.delete(_8),await u.streams.add(t);else throw f}this.js=this.options.getJetStream(),this.jsm=u,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(i,u,t,f){let l=this.js;if(!l){console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`);return}let c=AA4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=Rqu(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let _=performance.now(),v=ZY(d,{runId:u}),h=performance.now()-_;if(cM().record(h),EM().add(1,{"org.id":f??"unknown"}),IA4?.record(h,v.reduce((D,g)=>D+g.data.length,0)),v.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let D of v)c.publish(l,D.subject,D.data,D.headers?Cp0(D.headers):void 0)};(async()=>{let d=i.getReader(),_=0,v=0;try{while(!0){let{done:h,value:D}=await d.read();if(h)break;if(w(D),v++,++_>=64)_=0,await new Promise((g)=>setImmediate(g))}}catch(h){console.warn(`[Decopilot] stream pump error for thread ${u}:`,h?.message??h)}finally{if(d.releaseLock(),$(),xA4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:v,publishErrors:c.errorCount}))}})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),c=ZY(u,{runId:i,dedup:t});if(cM().record(performance.now()-l),EM().add(1),c.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${i} (> MAX_CHUNKED_BYTES)`),!0;for(let E of c)await f.publish(E.subject,E.data,{...E.headers?{headers:Cp0(E.headers)}:{},...E.msgId?{msgID:E.msgId}:{}});return!0}async publishDone(i,u,t){let f=this.js;if(!f)return!1;let l=I1i({runId:i,fenceToken:u,finalSeq:t});return await f.publish(l.subject,l.data,{msgID:l.msgId}),!0}async createTailStream(i,u,t){let f=this.js;if(!f)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${i}; no live tail`),null;let l=t?.deliverPolicy==="new"?x_.DeliverPolicy.New:x_.DeliverPolicy.All,c=t?.closeOnDone??!1,E=s2(i),$;try{$=await(await f.consumers.get(_8,{filter_subjects:E,deliver_policy:l})).consume()}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let _=_di({messages:async function*(){try{for await(let O of $)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{$.stop()}}(),onCancel:()=>$.stop()}).pipeThrough(A1i()).pipeThrough(G1i()).getReader(),v=!1,h=()=>{if(v)return;v=!0;try{_.releaseLock()}catch{}},D=!1,g=()=>{if(D)return;D=!0,$.stop(),_.cancel().catch(()=>{}),h()};return u?.addEventListener("abort",g,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:Z,value:B}=await _.read();if(Z){g(),O.close();return}let F=B;if(F.kind==="done"){if(c){g(),O.close();return}continue}O.enqueue(F.chunk);return}},cancel(){g()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(_8,{filter:s2(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var x_,Mp0,OA4=(i)=>{let u;return()=>u??=i()},ZA4,BA4=86400000000000,FA4=120000000000,yA4=4294967296,TA4=500000,PA4,xA4,IA4;var Vp0=N(()=>{Dtu();gtu();n1i();Q1();aQi();x_=k(o2(),1),Mp0=k(gO(),1),ZA4=OA4(()=>Mt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));PA4=process.env.STREAM_ENCODE_TRACE==="1",xA4=process.env.DECOPILOT_STREAM_TRACE==="1";IA4=PA4?new qp0:null});function rp0(i){let u=i.createFetch??GA4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return U5u;let c=f5(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return U5u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return U5u}}}var U5u,GA4=(i,u)=>C2({connection:i,firstFrameTimeoutMs:u});var mp0=N(()=>{WC();aC();U5u={online:!1,capabilities:[]}});async function*nA4(i){if(!i.body){yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};return}let u=i.body.getReader(),t=!1;try{yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};while(!0){let{done:f,value:l}=await u.read();if(f){t=!0;return}yield{data:Buffer.from(l).toString("base64")}}}finally{try{if(!t)await u.cancel()}catch{}finally{u.releaseLock()}}}function ep0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:kA4}));return async function*(f,l,c){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let $=f5(f),w=u(E),d={method:l.method,headers:l.headers,signal:c?.signal};if(l.body!=null)d.body=l.body;let _=await w(`tunnel://${$}${l.path}`,d);yield*nA4(_)}}var kA4=45000;var ap0=N(()=>{WC();aC()});function op0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:jA4}));return{async publish(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=f5(t),w=await u(c)(`tunnel://${E}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel work publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}function sp0(i){let u=i.createFetch??C2;return{async publishControlFrame(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=f5(t),w=await u(c)(`tunnel://${E}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:lVu(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel control publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}var jA4=45000;var pp0=N(()=>{WC();tHi();aC()});function iit(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function uit(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function tit(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,A5(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,Iq(i,t))}async function XA4(i,u){let{storage:t,streamBuffer:f,sseHub:l}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null});let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at}));return}case"STEP_COMPLETED":l.emit(i.orgId,e6i(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await tit(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await tit(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null});f.purge(i.taskId);let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"failed",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at})),l.emit(i.orgId,Iq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function fit(i,u){for(let{event:t}of i)await XA4(t,u)}var lit=N(()=>{wf()});function cit(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function Eit(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class P5u{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},JA4)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=iit(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=uit(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),KA4.has(l.type))wit().add(1,{"org.id":l.orgId});else if(SA4.has(l.type)&&c?.status.tag==="running")wit().add(-1,{"org.id":l.orgId})}return f}react(i){return fit(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let $=await this.deps.storage.getProgress(t,f.orgId);c=Eit({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!cit({lastProgressAt:c,now:i,idleTimeoutMs:$it}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let $=this.states.get(t);if($?.status.tag==="running")$.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${$it/60000}m) ...`),YA4().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch(($)=>{console.error("[RunRegistry] Reaper execute failed",$)})}}}var JA4=300000,$it=600000,KA4,SA4,dit=(i)=>{let u;return()=>u??=i()},wit,YA4;var _it=N(()=>{lit();Q1();KA4=new Set(["RUN_STARTED","RUN_RESUMED"]),SA4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),wit=dit(()=>Mt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),YA4=dit(()=>Mt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});function hxi(i,u,t,f){if(!f)return!1;return i.emit(u,A5(t,f.status,{title:f.title??void 0,virtualMcpId:f.virtual_mcp_id??void 0,createdBy:f.created_by??void 0,triggerId:f.trigger_id??null,branch:f.branch??null,createdAt:f.created_at,updatedAt:f.updated_at})),!0}var vit=N(()=>{wf()});class x5u{storage;options;timer=null;constructor(i,u={}){this.storage=i;this.options=u}start(){if(this.timer)return;let i=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},i)}async runOnce(){let i=this.options.staleAfterMs??3600000;try{let u=await this.storage.sweepAbandoned(i);if(u>0)console.log(`[async-research-sweeper] marked ${u} stale jobs as abandoned`);return u}catch(u){return console.error("[async-research-sweeper] sweep failed",u),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as WA4,rm as Dxi}from"fs/promises";import{join as gxi}from"path";async function Nxi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-LA4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await wK(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await hit(i,l,u);else if(!l.startsWith(".")){let c=gxi(i,l),E=await wK(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await hit(c,w,u)}if((await wK(c)).length===0)await Dxi(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function hit(i,u,t){let f=0,l=gxi(i,u),c=await wK(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=gxi(l,$),d=await wK(w);for(let v of d){if(!/^\d{2}$/.test(v))continue;let h=new Date(`${u}-${$}-${v}T00:00:00Z`);if(isNaN(h.getTime()))continue;if(h<t){let D=gxi(w,v);await Dxi(D,{recursive:!0,force:!0}),f++}}if((await wK(w)).length===0)await Dxi(w,{recursive:!0,force:!0})}if((await wK(l)).length===0)await Dxi(l,{recursive:!0,force:!0});return f}async function wK(i){try{return(await WA4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var LA4=30;var I5u=()=>{};import{DBOS as A5u,SchedulerMode as zA4}from"@dbos-inc/dbos-sdk";async function HA4(){let i=[ad(),mS(),wD()],u=0;for(let t of i)try{u+=await Nxi(t)}catch(f){console.error("[monitoring-retention] cleanup failed:",f)}return console.log(`[monitoring-retention] deleted ${u} day-dir(s) across ${i.length} signal dir(s)`),{deleted:u,dirs:i.length}}async function bA4(i,u){await A5u.runStep(()=>HA4(),{name:"monitoringRetention"})}function git(){if(Dit)return;Dit=!0;let i=A5u.registerWorkflow(bA4,{name:"monitoringRetentionWorkflow"});A5u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:QA4,mode:zA4.ExactlyOncePerIntervalWhenActive})}var QA4="23 4 * * *",Dit=!1;var Nit=N(()=>{jw();I5u()});function Oit(i){return async(u,t)=>{let f=await i.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",t).where("member.organizationId","=",u).executeTakeFirst();if(!f)return console.warn(`[automationContextFactory] User ${t} not found in org ${u} \u2014 returning null`),null;let l=await Y9.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let c=await xiu(i.db,u,f.role);return l.boundAuth=Piu({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new JZ(t,void 0,l.boundAuth,f.role,"self"),swi(l,{id:f.orgId,slug:f.orgSlug}),l}}var Zit=N(()=>{KZ();Ne()});import{EventEmitter as RA4}from"events";var G5u;var Bit=N(()=>{UO();G5u=new RA4;G5u.on("request",(i)=>{o_(i)})});function Fit(){return async(i,u)=>{let t=Date.now(),f=i.req.method,l=i.req.path;if(l==="/api/auth/get-session"||l.includes("favicon")){await u();return}let c="",E=!1;if(l.startsWith("/mcp")&&f==="POST"){E=!0;try{if(i.req.header("Content-Type")?.includes("application/json")){let h=await i.req.raw.clone().json();if(h.method==="tools/call"&&h.params?.name){let D=fb(h.params.name),g=h.params.arguments||{},O=Object.keys(g).map((B)=>fb(B)),Z=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";c=`${v1.tool}${D}${v1.dim}(${Z})${v1.reset}`}else if(h.method)c=`${v1.dim}${fb(h.method)}${v1.reset}`}}catch{}}let $=fb(l);if(l.startsWith("/mcp/conn_")){let _=l.split("/")[2]??"";$=`/mcp/${v1.mcp}${fb(_.slice(0,12))}\u2026${v1.reset}`}else if(l==="/mcp")$=`${v1.mcp}/mcp${v1.reset}`;else if(l==="/mcp/registry")$=`${v1.mcp}/mcp/registry${v1.reset}`;let w=MA4(f),d=E?"\u25C0":"\u2190";if(!ili())console.log(`${v1.dim}${d}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""}`);try{await u()}finally{let _=Date.now()-t,v=i.res.status,h=CA4(v),D=_<1000?`${_}ms`:`${(_/1000).toFixed(1)}s`,g=E?"\u25B6":"\u2192";if(!ili())console.log(`${v1.dim}${g}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""} ${h}${v}${v1.reset} ${v1.duration}${D}${v1.reset}`);G5u.emit("request",{method:f,path:fb(l),status:v,duration:_,timestamp:new Date})}}}var v1,CA4=(i)=>{if(i>=500)return v1.serverError;if(i>=400)return v1.clientError;if(i>=300)return v1.redirect;return v1.ok},MA4=(i)=>{return v1[i]||v1.reset},fb=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var yit=N(()=>{UO();Bit();v1={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as xit}from"crypto";import{mkdir as qA4,readdir as VA4,rm as Tit,stat as Iit}from"fs/promises";import{join as k5u,relative as rA4}from"path";import{z as I0}from"zod";function Git(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return k5u(mA4,u)}function nit(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function n5u(i,u){let t=Git(i),f=nit(u);return k5u(t,f)}function eA4(i,u,t,f){let l=yu().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return xit("sha256",l).update(c).digest("hex")}function Pit(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=eA4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${nit(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function kit(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${xit("md5","etag").update(f).digest("hex")}"`}async function jit(i,u,t,f,l){try{let c=await VA4(i,{withFileTypes:!0});for(let E of c){let $=k5u(i,E.name),d=rA4(u,$).replace(/\\/g,"/");if(t&&!d.startsWith(t))continue;if(E.isDirectory())if(f){let _=d+"/";if(!t||_.startsWith(t)){if(!(t?d.slice(t.length):d).includes("/"))l.commonPrefixes.add(_)}}else await jit($,u,t,f,l);else if(E.isFile()){if(f&&t){let _=d.slice(t.length);if(_.includes(f)){let v=_.indexOf(f),h=t+_.slice(0,v+1);l.commonPrefixes.add(h);continue}}try{let _=await Iit($);l.objects.push({key:d,size:_.size,lastModified:_.mtime.toISOString(),etag:kit($,_.mtime,_.size)})}catch{}}}}catch{}}function Xit(i,u){let f=Bi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:I0.object({prefix:I0.string().optional(),maxKeys:I0.number().optional().default(1000),continuationToken:I0.string().optional(),delimiter:I0.string().optional()}),outputSchema:I0.object({objects:I0.array(I0.object({key:I0.string(),size:I0.number(),lastModified:I0.string(),etag:I0.string()})),nextContinuationToken:I0.string().optional(),isTruncated:I0.boolean(),commonPrefixes:I0.array(I0.string()).optional()}),handler:async(l)=>{let c=l,E=c.prefix||"",$=c.maxKeys??1000,w=c.delimiter,d=c.continuationToken,_=Git(f);await qA4(_,{recursive:!0});let v={objects:[],commonPrefixes:new Set};await jit(_,_,E,w,v),v.objects.sort((Z,B)=>Z.key.localeCompare(B.key));let h=0;if(d){if(h=v.objects.findIndex((Z)=>Z.key>d),h===-1)h=v.objects.length}let D=v.objects.slice(h,h+$),g=h+$<v.objects.length,O=g?D[D.length-1]?.key:void 0;return{objects:D,isTruncated:g,nextContinuationToken:O,commonPrefixes:Array.from(v.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({contentType:I0.string().optional(),contentLength:I0.number(),lastModified:I0.string(),etag:I0.string(),metadata:I0.record(I0.string(),I0.string()).optional()}),handler:async(l)=>{let c=l,E=n5u(f,c.key),$=await Iit(E);return{contentType:Q3u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:kit(E,$.mtime,$.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Uit;return{url:Pit(u,f,c.key,E,"GET"),expiresIn:E}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional(),contentType:I0.string().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Uit;return{url:Pit(u,f,c.key,E,"PUT"),expiresIn:E}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({success:I0.boolean(),key:I0.string()}),handler:async(l)=>{let c=l,E=n5u(f,c.key);try{return await Tit(E),{success:!0,key:c.key}}catch{return{success:!1,key:c.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:I0.object({keys:I0.array(I0.string()).max(1000)}),outputSchema:I0.object({deleted:I0.array(I0.string()),errors:I0.array(I0.object({key:I0.string(),message:I0.string()}))}),handler:async(l)=>{let c=l,E=[],$=[];return await Promise.all(c.keys.map(async(w)=>{let d=n5u(f,w);try{await Tit(d),E.push(w)}catch(_){$.push({key:w,message:_ instanceof Error?_.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function j5u(i,u,t){let f=Xit(u,t),l=new nD({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:k1});for(let E of f){let $="shape"in E.inputSchema?E.inputSchema.shape:I0.object({}).shape,w=E.outputSchema&&"shape"in E.outputSchema?E.outputSchema.shape:I0.object({}).shape;l.registerTool(E.name,{description:E.description??"",inputSchema:$,outputSchema:w,annotations:E.annotations,_meta:E._meta},async(d)=>{try{let _=await E.handler(d);return{content:[{type:"text",text:JSON.stringify(_)}],structuredContent:_}}catch(_){return{content:[{type:"text",text:`Error: ${_.message}`}],isError:!0}}})}let c=new g3({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),ch(l,c,i,"mcp:dev-assets")}async function Jit(i,u,t,f){let c=Xit(t,f).find((E)=>E.name===i);if(!c)return{content:[{type:"text",text:`Tool not found: ${i}`}],isError:!0};try{let E=await c.handler(u);return{content:[{type:"text",text:JSON.stringify(E)}]}}catch(E){return{content:[{type:"text",text:E instanceof Error?E.message:String(E)}],isError:!0}}}var mA4="./data/assets",Uit=3600,Ait,Kit;var Sit=N(()=>{xt();ba();sf();Gq();kQ();mE();XPi();Ait=new Hu;Ait.all("/",async(i)=>{let u=i.get("meshContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return j5u(i.req.raw,u,f)});Kit=Ait});var Yit={};Qi(Yit,{mountDevRoutes:()=>aA4});function aA4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`;return j5u(f.req.raw,l,E)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`,$=f.req.param("toolName");if(!$)return f.json({error:"Missing tool name"},400);let w=await f.req.json(),d=await Jit($,w,l,E);if(d.isError)return f.json(d.content,500);return f.json(d.content)}),i.use("/mcp/dev-assets",u),i.route("/mcp/dev-assets",Kit);let t=new Hu;t.use("*",Yd({mountPath:"/api/dev-assets"})),t.route("/",jPi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var Wit=N(()=>{sf();J3u();XPi();Sit()});var Lit=N(()=>{Viu();riu();DB()});var Oxi=N(()=>{Lit()});var Qit={};Qi(Qit,{streamAgent:()=>zit,createDecopilotClient:()=>sA4});async function oA4(i){let{parseJsonEventStream:u,uiMessageChunkSchema:t}=await Promise.resolve().then(() => (Cf(),dtu));return u({stream:i,schema:t}).pipeThrough(new TransformStream({transform(f,l){if(!f.success)throw f.error;l.enqueue(f.value)}}))}async function zit(i,u,t,f,l){let{readUIMessageStream:c}=await Promise.resolve().then(() => (Cf(),dtu)),E=t.value??t.id;if(!E)throw Error("Agent binding has no id or value \u2014 cannot resolve agent");let $=f.credentialId??t.credentialId,w=f.thinking??t.thinking,d=w?.id,_={messages:f.messages,...d?{models:{credentialId:$,thinking:w,...f.fast??t.fast?{fast:f.fast??t.fast}:{}}}:{},agent:{id:E},temperature:f.temperature??t.temperature,toolApprovalLevel:f.toolApprovalLevel??t.toolApprovalLevel,mode:f.mode??t.mode??"default",...f.memory?{memory:f.memory}:{},...f.thread_id?{thread_id:f.thread_id}:{}},v=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","x-mesh-token":u,Authorization:`Bearer ${u}`},body:JSON.stringify(_),signal:l?.signal});if(!v.ok){let D=await v.text().catch(()=>""),g=`HTTP ${v.status}`;try{let O=JSON.parse(D);if(O?.error)g=O.error}catch{if(D)g=D}throw Error(g)}if(!v.body)throw Error("Empty response body from decopilot stream");let h=await oA4(v.body);return c({stream:h})}function sA4(i){let{baseUrl:u,orgSlug:t,token:f}=i,l=`${u}/${t}/decopilot/runtime/stream`;return{stream(c,E){let $={__type:"@deco/agent",id:c.agent.id,credentialId:c.credentialId??"",thinking:c.thinking??{id:"",title:""},fast:c.fast,toolApprovalLevel:c.toolApprovalLevel,mode:c.mode,temperature:c.temperature};return zit(l,f,$,c,E)}}}import{z as yw}from"zod";function Hit(i){let u=i.properties;if(!u)return i;for(let t of Object.values(u)){let f=t.properties;if(!f?.__type?.const)continue;let l=f.__type.const,c=pA4.get(l);if(!c)continue;let E=c.map(($)=>({name:String($.name),...$.inputSchema&&{inputSchema:yw.toJSONSchema($.inputSchema)},...$.outputSchema&&{outputSchema:yw.toJSONSchema($.outputSchema)}}));f.__binding={const:E}}return i}var pA4,$J6,iG4=(i)=>{return typeof i==="object"&&i!==null&&i.__type==="@deco/agent"},J5u=(i)=>{return typeof i==="object"&&i!==null&&typeof i.__type==="string"&&i.__type!=="@deco/agent"&&typeof i.value==="string"},Zxi=(i,u,t)=>{let f=t?{"x-caller-app":t}:void 0;if(u.cookie)f??={},f.cookie=u.cookie;if(u.token)f??={},f["x-mesh-token"]=u.token;return{type:"HTTP",url:new URL(`/mcp/${i}`,u.meshUrl).href,token:u.token,headers:f}},uG4=(i,u,t)=>{let f=Zxi(i,u,t);return new Proxy(Wz.forConnection(f),{get(l,c){if(c==="value")return i;if(c==="__type")return t;return l[c]}})},tG4=(i,u)=>{let t=u.organizationSlug;if(!t)throw Error("organizationSlug is required for agent bindings");let f=`${u.meshUrl}/api/${t}/decopilot/runtime/stream`;return{STREAM:async(l,c)=>{let{streamAgent:E}=await Promise.resolve().then(() => Qit);return E(f,u.token,i,l,c)}}},X5u=(i,u)=>{if(i===null||i===void 0)return i;if(Array.isArray(i))return i.map((t)=>X5u(t,u));if(typeof i==="object"){if(iG4(i))return tG4(i,u);if(J5u(i))return uG4(i.value,u,i.__type);let t={};for(let[f,l]of Object.entries(i))t[f]=X5u(l,u);return t}return i},bit=(i)=>{return X5u(i.state,i)};var lb=N(()=>{Oxi();pA4=new Map;$J6=yw.object({id:yw.string(),title:yw.string(),capabilities:yw.object({vision:yw.boolean().optional(),text:yw.boolean().optional(),tools:yw.boolean().optional(),reasoning:yw.boolean().optional()}).passthrough().optional(),provider:yw.string().optional().nullable(),limits:yw.object({contextWindow:yw.number().optional(),maxOutputTokens:yw.number().optional()}).passthrough().optional()})});var fG4,Rit=(i,u,t)=>{if(!u)return null;if(i===void 0||i==="*")return"*";if(typeof i==="string")return i===u?i:null;if(Array.isArray(i))return i.includes(u)?u:null;if(typeof i==="function")return i(u,t)??null;return null},lG4=(i,u,t)=>{let f=u.headers.get("Origin"),l=Rit(t.origin,f,u);if(l)i.set("Access-Control-Allow-Origin",l);if(t.credentials)i.set("Access-Control-Allow-Credentials","true");if(t.exposeHeaders?.length)i.set("Access-Control-Expose-Headers",t.exposeHeaders.join(", "))},Cit=(i,u)=>{let t=new Headers,f=i.headers.get("Origin"),l=Rit(u.origin,f,i);if(l)t.set("Access-Control-Allow-Origin",l);if(u.credentials)t.set("Access-Control-Allow-Credentials","true");let c=u.allowMethods??fG4;t.set("Access-Control-Allow-Methods",c.join(", "));let E=i.headers.get("Access-Control-Request-Headers");if(u.allowHeaders?.length)t.set("Access-Control-Allow-Headers",u.allowHeaders.join(", "));else if(E)t.set("Access-Control-Allow-Headers",E);if(u.maxAge!==void 0)t.set("Access-Control-Max-Age",u.maxAge.toString());return new Response(null,{status:204,headers:t})},Mit=(i,u,t)=>{let f=new Headers(i.headers);return lG4(f,u,t),new Response(i.body,{status:i.status,statusText:i.statusText,headers:f})};var qit=N(()=>{fG4=["GET","HEAD","PUT","POST","DELETE","PATCH"]});function Vit(i=32){let t=new Uint8Array(i);return crypto.getRandomValues(t),Array.from(t,(f)=>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[f%62]).join("")}function cG4(i){try{let u=new URL(i);return u.protocol==="https:"||u.hostname==="localhost"||u.hostname.endsWith(".localhost")||u.hostname==="127.0.0.1"||!u.protocol.startsWith("http")}catch{return!1}}function rit(i){return btoa(JSON.stringify(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function mit(i){try{let u=i.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(u))}catch{return null}}function eit(i){return{handleProtectedResourceMetadata:(d)=>{let _=Gh(new URL(d.url)),v=`${_.origin}/mcp`;return Response.json({resource:v,authorization_servers:[_.origin],scopes_supported:["*"],bearer_methods_supported:["header"],resource_signing_alg_values_supported:["RS256","none"]})},handleAuthorizationServerMetadata:(d)=>{let v=Gh(new URL(d.url)).origin;return Response.json({issuer:v,authorization_endpoint:`${v}/authorize`,token_endpoint:`${v}/token`,registration_endpoint:`${v}/register`,scopes_supported:["*"],response_types_supported:["code"],response_modes_supported:["query"],grant_types_supported:["authorization_code","refresh_token"],token_endpoint_auth_methods_supported:["none","client_secret_post"],code_challenge_methods_supported:["S256","plain"]})},handleAuthorize:(d)=>{let _=Gh(new URL(d.url)),v=_.searchParams.get("redirect_uri"),h=_.searchParams.get("response_type"),D=_.searchParams.get("state"),g=_.searchParams.get("code_challenge"),O=_.searchParams.get("code_challenge_method");if(!v)return Response.json({error:"invalid_request",error_description:"redirect_uri required"},{status:400});if(h!=="code")return Response.json({error:"unsupported_response_type",error_description:"Only 'code' is supported"},{status:400});let Z=Gh(new URL(`${_.origin}/oauth/callback`)),B=Z.toString(),y=rit({redirectUri:v,clientState:D??void 0,codeChallenge:g??void 0,codeChallengeMethod:O??void 0,oauthCallbackUri:B});Z.searchParams.set("state",y);let T=i.authorizationUrl(Z.toString());return Response.redirect(T,302)},handleOAuthCallback:async(d)=>{let _=Gh(new URL(d.url)),v=_.searchParams.get("code"),h=_.searchParams.get("state"),D=_.searchParams.get("error"),g=h?mit(h):null;if(D){let O=_.searchParams.get("error_description")??"Authorization failed";if(g?.redirectUri){let Z=Gh(new URL(g.redirectUri));if(Z.searchParams.set("error",D),Z.searchParams.set("error_description",O),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}return Response.json({error:D,error_description:O},{status:400})}if(!v||!g)return Response.json({error:"invalid_request",error_description:"Missing code or state"},{status:400});try{let O=g.oauthCallbackUri??Gh(new URL(`${_.origin}/oauth/callback`)).toString(),Z={code:v,redirect_uri:O},B=await i.exchangeCode(Z),F={accessToken:B.access_token,tokenType:B.token_type,refreshToken:B.refresh_token,expiresIn:B.expires_in,scope:B.scope,codeChallenge:g.codeChallenge,codeChallengeMethod:g.codeChallengeMethod},y=rit(F),T=Gh(new URL(g.redirectUri));if(T.searchParams.set("code",y),g.clientState)T.searchParams.set("state",g.clientState);return Response.redirect(T.toString(),302)}catch(O){console.error("OAuth callback error:",O);let Z=Gh(new URL(g.redirectUri));if(Z.searchParams.set("error","server_error"),Z.searchParams.set("error_description","Failed to exchange authorization code"),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}},handleToken:async(d)=>{try{let _=d.headers.get("content-type")??"",v;if(_.includes("application/x-www-form-urlencoded")){let F=await d.formData();v=Object.fromEntries(F.entries())}else{let F=await d.json();if(typeof F!=="object"||F===null||Array.isArray(F))return Response.json({error:"invalid_request",error_description:"Request body must be a JSON object"},{status:400});v=F}let{code:h,code_verifier:D,grant_type:g,refresh_token:O}=v;if(g==="refresh_token"){if(typeof O!=="string"||!O)return Response.json({error:"invalid_request",error_description:"refresh_token is required and must be a string"},{status:400});if(!i.refreshToken)return Response.json({error:"unsupported_grant_type",error_description:"refresh_token grant not supported"},{status:400});let F;try{F=await i.refreshToken(O)}catch(T){if(T instanceof K5u)return Response.json({error:T.error,...T.errorDescription?{error_description:T.errorDescription}:{}},{status:400});throw T}let y={access_token:F.access_token,token_type:F.token_type};if(F.refresh_token)y.refresh_token=F.refresh_token;if(F.expires_in!==void 0)y.expires_in=F.expires_in;if(F.scope)y.scope=F.scope;return Response.json(y,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}if(g!=="authorization_code")return Response.json({error:"unsupported_grant_type",error_description:"Only authorization_code and refresh_token supported"},{status:400});if(typeof h!=="string"||!h)return Response.json({error:"invalid_request",error_description:"code is required and must be a string"},{status:400});let Z=mit(h);if(!Z||!Z.accessToken)return Response.json({error:"invalid_grant",error_description:"Invalid or expired code"},{status:400});if(Z.codeChallenge){if(typeof D!=="string"||!D)return Response.json({error:"invalid_grant",error_description:"code_verifier required and must be a string"},{status:400});let F;if(Z.codeChallengeMethod==="S256"){let T=new TextEncoder().encode(D),U=await crypto.subtle.digest("SHA-256",T);F=btoa(String.fromCharCode(...new Uint8Array(U))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}else F=D;if(F!==Z.codeChallenge)return Response.json({error:"invalid_grant",error_description:"Invalid code_verifier"},{status:400})}let B={access_token:Z.accessToken,token_type:Z.tokenType};if(Z.refreshToken)B.refresh_token=Z.refreshToken;if(Z.expiresIn!==void 0)B.expires_in=Z.expiresIn;if(Z.scope)B.scope=Z.scope;return Response.json(B,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Token exchange error:",_),Response.json({error:"server_error",error_description:"Failed to process token request"},{status:500})}},handleClientRegistration:async(d)=>{try{let _=await d.json();if(!_.redirect_uris||_.redirect_uris.length===0)return Response.json({error:"invalid_redirect_uri",error_description:"At least one redirect_uri is required"},{status:400});for(let O of _.redirect_uris)if(!cG4(O))return Response.json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${O}`},{status:400});let v=Vit(32),h=_.token_endpoint_auth_method!=="none"?Vit(32):void 0,D=Math.floor(Date.now()/1000),g={client_id:v,client_secret:h,client_name:_.client_name,redirect_uris:_.redirect_uris,grant_types:_.grant_types??["authorization_code"],response_types:_.response_types??["code"],token_endpoint_auth_method:_.token_endpoint_auth_method??"client_secret_post",scope:_.scope,client_id_issued_at:D,client_secret_expires_at:0};if(i.persistence)await i.persistence.saveClient(g);return new Response(JSON.stringify(g),{status:201,headers:{"Content-Type":"application/json","Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Client registration error:",_),Response.json({error:"invalid_client_metadata",error_description:"Invalid client registration request"},{status:400})}},createUnauthorizedResponse:(d)=>{let h=`Bearer resource_metadata="${`${Gh(new URL(d.url)).origin}/.well-known/oauth-protected-resource`}", scope="*"`;return Response.json({jsonrpc:"2.0",error:{code:-32000,message:"Unauthorized: Authentication required"},id:null},{status:401,headers:{"WWW-Authenticate":h,"Access-Control-Expose-Headers":"WWW-Authenticate"}})},hasAuth:(d)=>d.headers.has("Authorization")}}var K5u,Gh=(i)=>{if(!(i.hostname==="localhost"||i.hostname.endsWith(".localhost")||i.hostname==="127.0.0.1"))i.protocol="https:";return i};var S5u=N(()=>{K5u=class K5u extends Error{error;errorDescription;constructor(i="invalid_grant",u){super(u??i);this.name="OAuthInvalidGrantError",this.error=i,this.errorDescription=u}}});import{AsyncLocalStorage as EG4}from"async_hooks";var ait,Ls;var Y5u=N(()=>{ait=new EG4,Ls={getStore:()=>{return ait.getStore()},run:(i,u,...t)=>ait.run(i,u,...t)}});var sit="SELF",Fxi=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},pit=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},oit="::",iut=(i)=>{let u=i.indexOf(oit);if(u===-1)return null;let t=i.substring(0,u),f=i.substring(u+oit.length);return[t,f]},$G4=(i)=>{if(!i.startsWith("cron/"))return null;let u=i.substring(5),t=u.indexOf("/");if(t===-1)return null;let f=u.substring(0,t),l=u.substring(t+1);return[f,l]},uut=(i)=>{if(Fxi(i))return[];return Object.keys(i)},wG4=(i,u)=>{if(Fxi(i))return i.events;let t=i[u];if(!t)return[];if(pit(t))return t.events;return Object.keys(t)},Bxi=(i,u,t)=>{if(i===sit){if(!t)return console.warn("[Event] SELF binding used but no connectionId available"),null;return t}let f=u[i];if(!J5u(f))return console.warn(`[Event] Binding "${i}" not found in state`),null;return f.value},dG4=(i,u,t)=>{let f=u;if(Fxi(i)){let c=[];for(let E of i.events){let $=iut(E);if(!$){console.warn(`[Event] Global handler event "${E}" must be prefixed with BINDING:: (e.g., "SELF::${E}" or "DATABASE::${E}")`);continue}let[w,d]=$,_=Bxi(w,f,t);if(!_)continue;c.push({eventType:d,publisher:_})}return c}let l=[];for(let c of uut(i)){let E=Bxi(c,f,t);if(!E)continue;let $=wG4(i,c);for(let w of $)l.push({eventType:w,publisher:E})}return l},_G4=(i)=>{let u=new Map;for(let t of i){let f=t.source,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},vG4=(i)=>{let u=new Map;for(let t of i){let f=t.type,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},hG4=(i)=>{let u={},t={},f=!1,l=0,c=[];for(let E of i){if(E.results)Object.assign(t,E.results);if(E.success===!1){if(f=!0,E.error)c.push(E.error)}if(E.processedCount!==void 0)l+=E.processedCount}if(Object.keys(t).length>0)u.results=t;if(u.success=!f,c.length>0)u.error=c.join("; ");if(l>0)u.processedCount=l;return u},DG4=async(i,u,t,f,l)=>{let c=f;if(Fxi(i)){let _=new Set;for(let h of i.events){let D=iut(h);if(!D)continue;let[g,O]=D,Z=Bxi(g,c,l);if(!Z)continue;_.add(`${Z}:${O}`)}let v=u.filter((h)=>{let D=`${h.source}:${h.type}`;return _.has(D)});if(v.length===0)return{success:!0};try{return await i.handler({events:v},t)}catch(h){return{success:!1,error:h instanceof Error?h.message:String(h)}}}let E=new Map;for(let _ of uut(i)){let v=Bxi(_,c,l);if(v)E.set(v,_)}let $=_G4(u),w=[];for(let[_,v]of $){let h=E.get(_);if(!h)continue;let D=i[h];if(!D)continue;if(pit(D)){w.push((async()=>{try{return await D.handler({events:v},t)}catch(Z){let B={};for(let F of v)B[F.id]={success:!1,error:Z instanceof Error?Z.message:String(Z)};return{results:B}}})());continue}let g=D,O=vG4(v);for(let[Z,B]of O){let F=g[Z];if(!F)continue;w.push((async()=>{try{let y=await F({events:B},t),T={};for(let U of B)T[U.id]=y;return{results:T}}catch(y){let T={};for(let U of B)T[U.id]={success:!1,error:y instanceof Error?y.message:String(y)};return{results:T}}})())}}let d=await Promise.all(w);if(d.length===0)return{success:!0};return hG4(d)},tut;var W5u=N(()=>{lb();tut={subscriptions:dG4,execute:DG4,parseCron:$G4}});function gG4(i,u){let t=Zxi("self",{meshUrl:i,token:u});return Wz.forConnection(t)}function NG4(i,u){switch(u.type){case"cron":return{automation_id:i,type:"cron",cron_expression:u.cron};case"event":return{automation_id:i,type:"event",connection_id:u.connectionId,event_type:u.eventType,params:u.params};case"webhook":return{automation_id:i,type:"webhook"}}}function fut(i,u,t){return async(f)=>{if(!i)throw Error("createAgent: missing meshUrl in MESH_REQUEST_CONTEXT");let l=gG4(i,u),E=(await l.COLLECTION_VIRTUAL_MCP_LIST({where:{operator:"and",conditions:[{field:["title"],operator:"eq",value:f.name}]},limit:1})).items.find((_)=>_.title===f.name);if(E)return{id:E.id,automations:[],automationIds:[],alreadyExisted:!0};let $=f.tools&&f.tools.length>0?f.tools.map((_)=>({connection_id:_.connectionId,selected_tools:_.tools??null,selected_resources:null,selected_prompts:null})):t?[{connection_id:t,selected_tools:null,selected_resources:null,selected_prompts:null}]:[],{item:w}=await l.COLLECTION_VIRTUAL_MCP_CREATE({data:{title:f.name,description:f.description,metadata:f.instructions?{instructions:f.instructions}:void 0,connections:$}}),d=[];for(let _ of f.automations??[]){let v=await l.AUTOMATION_CREATE({name:_.name,virtual_mcp_id:w.id,messages:_.messages,models:_.models,tools:_.tools,active:_.active??!0}),h=[];for(let D of _.triggers??[])try{let g=await l.AUTOMATION_TRIGGER_ADD(NG4(v.id,D));h.push({type:D.type,ok:!0,id:g.id,webhook:g.webhook??void 0})}catch(g){h.push({type:D.type,ok:!1,error:g instanceof Error?g.message:String(g)})}d.push({id:v.id,name:_.name,triggers:h})}return{id:w.id,automations:d,automationIds:d.map((_)=>_.id),alreadyExisted:!1}}}var L5u=N(()=>{lb();Oxi()});import{z as G6}from"zod";function r8(i){return{...i,execute:(u)=>{let t=zs(u.runtimeContext);return i.execute({...u,runtimeContext:t},t)}}}var zs=(i)=>{let u=Ls.getStore();if(!u){if(i)return i;throw Error("Missing context, did you forget to call State.bind?")}return u},lut=(i)=>{let u=i.runtimeContext.env.MESH_REQUEST_CONTEXT;return{connectionId:u?.connectionId,meshUrl:u?.meshUrl,token:u?.token}},OG4=({events:i,configuration:{state:u,scopes:t,onChange:f,onInstall:l}={}}={})=>{let c=u?Hit(G6.toJSONSchema(u)):{type:"object",properties:{}};return[...f||l||i?[r8({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:G6.object({state:u??G6.unknown(),scopes:G6.array(G6.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')"),firstRun:G6.boolean().optional().describe("True on the first configuration save for this connection \u2014 fires onInstall."),vault:G6.object({baseUrl:G6.string(),org:G6.string(),subjectConnectionId:G6.string(),token:G6.string()}).optional()}),outputSchema:G6.object({}),execute:async(E)=>{let $=E.context.state,w=E.context.vault;if(await f?.(E.runtimeContext.env,{state:$,scopes:E.context.scopes,vault:w}),l&&E.context.firstRun){let{meshUrl:d,token:_,connectionId:v}=lut(E);await l(E.runtimeContext.env,{createAgent:fut(d,_,v),vault:w})}return Promise.resolve({})}})]:[],...i?.handlers?[r8({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:y3i,outputSchema:T3i,execute:async(E)=>{let $=E.runtimeContext.env,w=$.MESH_REQUEST_CONTEXT?.state,{connectionId:d}=lut(E);return tut.execute(i.handlers,E.context.events,$,w,d)}})]:[],r8({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:G6.object({}),outputSchema:G6.object({stateSchema:G6.unknown(),scopes:G6.array(G6.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:c,scopes:[...t??[]]})}})]},cut=(i)=>{let u=null,t=null,f=null,l=!1,c=()=>{if(!l)console.warn("[runtime] Passing factory functions to tools/prompts/resources is deprecated. Pass createTool()/createPrompt()/createResource() instances directly."),l=!0},E=(D)=>typeof D==="object"&&D!==null&&(("id"in D)||("name"in D)||("uri"in D));async function $(D,g){if(!D)return[];return(await Promise.all(D.flatMap(async(O)=>{if(E(O))return[O];c();let Z=await O(g);if(Array.isArray(Z))return Z;return[Z]}))).flat()}let w=async(D)=>{if(u)return u;if(t)return t;return t=(async()=>{try{let g;if(typeof i.tools==="function")c(),g=await i.tools(D);else g=await $(i.tools,D);g.push(...OG4({...i}));let O;if(typeof i.prompts==="function")c(),O=await i.prompts(D);else O=await $(i.prompts,D);let Z;if(typeof i.resources==="function")c(),Z=await i.resources(D);else Z=await $(i.resources,D);let B={tools:g,prompts:O,resources:Z};return u=B,B}catch(g){throw t=null,g}})(),t},d=(D,g)=>{for(let O of g.tools)D.registerTool(O.id,{_meta:O._meta,title:O.title,description:O.description,annotations:O.annotations,inputSchema:O.inputSchema&&"shape"in O.inputSchema?O.inputSchema:G6.object({}),outputSchema:O.outputSchema&&typeof O.outputSchema==="object"&&"shape"in O.outputSchema?O.outputSchema:void 0},async(Z)=>{let B=zs(),F=await O.execute({context:Z,runtimeContext:B},B);if(F!=null&&typeof F==="object"&&"content"in F&&Array.isArray(F.content)&&F.content.every((y)=>y!=null&&typeof y==="object"&&("type"in y)&&typeof y.type==="string"))return F;return{structuredContent:F,content:[{type:"text",text:JSON.stringify(F)}]}});for(let O of g.prompts)D.registerPrompt(O.name,{title:O.title,description:O.description,argsSchema:O.argsSchema?O.argsSchema:G6.object({}).shape},async(Z)=>{let B=zs();return await O.execute({args:Z,runtimeContext:B},B)});for(let O of g.resources)D.resource(O.name,O.uri,{description:O.description,mimeType:O.mimeType},async(Z)=>{let B=zs(),F=await O.read({uri:Z,runtimeContext:B},B),y=F._meta??void 0;if(F.text!==void 0)return{contents:[{uri:F.uri,mimeType:F.mimeType,text:F.text,...y!==void 0?{_meta:y}:{}}]};else if(F.blob!==void 0)return{contents:[{uri:F.uri,mimeType:F.mimeType,blob:F.blob,...y!==void 0?{_meta:y}:{}}]};return{contents:[{uri:F.uri,mimeType:F.mimeType,text:""}]}})},_=async(D)=>{await i.before?.(D);let{instructions:g,...O}=i.serverInfo??{},Z=new nD({...O,name:O.name??"@deco/mcp-api",version:O.version??"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:k1,...g&&{instructions:g}}),B=await w(D);d(Z,B);let F="tools/list",y=Z.server._requestHandlers,T=y.get(F);if(T)y.set(F,async(U,I)=>{if(!f)f=await T(U,I);return f});return{server:Z,...B}};return{fetch:async(D,g)=>{let{server:O}=await _(g),Z=new g3;await O.connect(Z);let B=()=>{try{Z.close?.()}catch{}try{O.close?.()}catch{}};try{let F=await Z.handleRequest(D),y=F.headers.get("content-type");if(!(y?.includes("text/event-stream")||y?.includes("application/json-rpc"))||!F.body)return B(),F;let{readable:U,writable:I}=new TransformStream;return F.body.pipeTo(I).catch(()=>{}).finally(B),new Response(U,{status:F.status,statusText:F.statusText,headers:F.headers})}catch(F){throw B(),F}},callTool:async({toolCallId:D,toolCallInput:g})=>{let O=Ls.getStore();if(!O)throw Error("Missing state, did you forget to call State.bind?");let Z=O?.env,{tools:B}=await w(Z),y=B.find((U)=>U.id===D)?.execute;if(!y)throw Error(`Tool ${D} not found or does not have an execute function`);let T=zs();return y({context:g,runtimeContext:T},T)}}};var yxi=N(()=>{oiu();mE();Gq();kQ();lb();W5u();Y5u();L5u();W5u();L5u()});import{decodeJwt as Eut}from"jose";var ZG4=({env:i,server:u,url:t})=>{i.SELF=new Proxy({},{get:(f,l)=>{if(l==="toJSON")return null;return async(c)=>{return await u.callTool({toolCallId:l,toolCallInput:c})}}}),i.IS_LOCAL=(t?.startsWith("http://localhost")||t?.startsWith("http://127.0.0.1"))??!1},$ut=(i)=>()=>{return{...i??{}}},BG4=({env:i,server:u,tokenOrContext:t,url:f,authToken:l})=>{let c=i,E=l?l.split(" ")[1]:void 0,$;if(typeof t==="string"){let w=Eut(t),d=w.metadata??{};$={authorization:E,state:w.state??d.state??{},token:t,meshUrl:w.meshUrl??d.meshUrl,connectionId:w.connectionId??d.connectionId,organizationId:w.organizationId??d.organizationId,organizationName:w.organizationName??d.organizationName,organizationSlug:w.organizationSlug??d.organizationSlug,ensureAuthenticated:$ut(w.user??w.sub)}}else if(typeof t==="object"){$=t;let w=Eut(t.token),d=w.metadata??{},_=w.appName;$.authorization??=E,$.callerApp=_,$.connectionId??=w.connectionId??d.connectionId,$.organizationId??=w.organizationId??d.organizationId,$.organizationName??=w.organizationName??d.organizationName,$.organizationSlug??=w.organizationSlug??d.organizationSlug,$.ensureAuthenticated=$ut(w.user??w.sub)}else $={state:{},authorization:E,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return c.MESH_REQUEST_CONTEXT=$,$.state=bit($),ZG4({env:c,server:u,url:f}),c},FG4,wut=(i)=>{let u=cut(i),t=i.cors??FG4,f=i.oauth,l=f?eit(f):null,c=async(E,$,w)=>{let d=new URL(E.url);if(l){if(d.pathname==="/.well-known/oauth-protected-resource"||d.pathname==="/mcp/.well-known/oauth-protected-resource")return l.handleProtectedResourceMetadata(E);if(d.pathname==="/.well-known/oauth-authorization-server")return l.handleAuthorizationServerMetadata(E);if(d.pathname==="/authorize")return l.handleAuthorize(E);if(d.pathname==="/oauth/callback")return l.handleOAuthCallback(E);if(d.pathname==="/token"&&E.method==="POST")return l.handleToken(E);if((d.pathname==="/register"||d.pathname==="/mcp/register")&&E.method==="POST")return l.handleClientRegistration(E)}if(d.pathname==="/mcp"){if(E.method==="GET")return new Response("Method not allowed",{status:405});if(l&&!l.hasAuth(E)){let _=E.clone();try{if((await _.json())?.method!=="tools/list")return l.createUnauthorizedResponse(E)}catch{return l.createUnauthorizedResponse(E)}}return u.fetch(E,$,w)}if(d.pathname.startsWith("/mcp/call-tool")){let _=d.pathname.split("/").pop();if(!_)return new Response("Not found",{status:404});let v=await E.json(),h=await u.callTool({toolCallId:_,toolCallInput:v});return new Response(JSON.stringify(h),{headers:{"Content-Type":"application/json"}})}return i.fetch?.(E,$,w)||new Response("Not found",{status:404})};return{fetch:async(E,$,w)=>{if(new URL(E.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(t!==!1&&E.method==="OPTIONS")return Cit(E,t??{});let d=BG4({authToken:E.headers.get("authorization")??null,env:{...process.env,...$},server:u,tokenOrContext:E.headers.get("x-mesh-token")??void 0,url:E.url}),_=await Ls.run({req:E,env:d,ctx:w},async()=>await c(E,d,w));if(t!==!1)return Mit(_,E,t??{});return _}}};var dut=N(()=>{lb();qit();S5u();S5u();Y5u();yxi();yxi();lb();Oxi();FG4={origin:(i)=>{if(i.includes("localhost")||i.includes("127.0.0.1"))return i;return i},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});import{z as z5u}from"zod";function UG4(i,u){let t=r8({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:yH,outputSchema:TH,execute:async({context:$})=>{let w={limit:$.limit,offset:$.offset,cursor:$.cursor,tags:$.tags,categories:$.categories,where:$.where},d=`${u}:${JSON.stringify(w)}`,_=_ut.get(d);if(_)return _;let v=await i.listPublic(u,w);return _ut.set(d,v),v}}),f=r8({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Bh,outputSchema:rJ,execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{item:null};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{item:d};return{item:null}}}),l=r8({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Bh,outputSchema:z5u.object({versions:z5u.array(rJ.shape.item)}),execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{versions:[]};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{versions:[d]};return{versions:[]}}}),c=r8({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:QUi,outputSchema:HUi,execute:async({context:$})=>{return await i.search(u,$,{publicOnly:!0})}}),E=r8({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:z5u.object({}),outputSchema:UH,execute:async()=>{return await i.getFilters(u,{publicOnly:!0})}});return[t,c,f,l,E]}function vut(i){let u=i.db,t=new LL(u);return async(f)=>{let l=f.req.param("orgSlug")??f.req.param("org");if(!l)return f.json({error:"Organization not found"},404);let c=await u.selectFrom("organization").select(["id","slug","name"]).where("slug","=",l).executeTakeFirst();if(!c)return f.json({error:"Organization not found"},404);let E=UG4(t,c.id),$=wut({tools:E}),w=new URL(f.req.url),d=f.req.path.indexOf("/registry"),_=d>=0?f.req.path.slice(d+9):"",v=new URL(_||"/",w.origin);w.searchParams.forEach((g,O)=>{v.searchParams.set(O,g)});let h=new Request(v.toString(),{method:f.req.method,headers:f.req.raw.headers,body:f.req.method!=="GET"&&f.req.method!=="HEAD"?f.req.raw.body:void 0}),D={organizationId:c.id,db:u,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await $.fetch(h,D,f)}}var yG4=3600000,TG4=500,_ut;var hut=N(()=>{dut();yxi();ioi();Ol();_ut=tb({ttlMs:yG4,maxSize:TG4,updateRecencyOnGet:!0})});import{sql as PG4}from"kysely";import{randomUUID as Dut}from"crypto";import{z as xG4}from"zod";async function AG4(i){let u=new Date().toISOString(),t=Dut(),f=U4.SELF(i.organizationId),l="registry.publish_request.created",c={requestId:i.request.id,requestedId:i.request.requested_id,title:i.request.title,status:i.request.status,createdAt:i.request.created_at,requester:{name:i.request.requester_name,email:i.request.requester_email}};await i.db.insertInto("events").values({id:t,organization_id:i.organizationId,type:"registry.publish_request.created",source:f,specversion:"1.0",subject:i.request.id,time:u,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(c),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:u,updated_at:u}).execute();let E=await i.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",i.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where(($)=>$.or([$("publisher","is",null),$("publisher","=",f)])).execute();if(E.length>0)await i.db.insertInto("event_deliveries").values(E.map(($)=>({id:Dut(),event_id:t,subscription_id:$.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:u}))).execute();try{await PG4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function GG4(i,u){let f=(await i.selectFrom("organization").select(["id"]).where("id","=",u).execute())[0];if(f?.id)return f.id;return(await i.selectFrom("organization").select(["id"]).where("slug","=",u).execute())[0]?.id??null}async function nG4(i,u){let t=await i.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",mJ).execute();for(let f of t){let l=f.settings,c=typeof l==="string"?(()=>{try{return JSON.parse(l)}catch{return{}}})():l??{};if(c.acceptPublishRequests===!0){let E=c.rateLimitWindow==="minute"?"minute":"hour",$=c.rateLimitMax,w=typeof $==="number"&&Number.isFinite($)&&$>=1?Math.floor($):Nut;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?gut:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:gut,rateLimitWindow:IG4,rateLimitMax:Nut}}async function kG4(i,u,t){let f=t==="minute"?60000:3600000,l=new Date(Date.now()-f).toISOString(),c=await i.selectFrom("private_registry_publish_request").select((E)=>E.fn.countAll().as("count")).where("organization_id","=",u).where("created_at",">=",l).executeTakeFirst();return Number(c?.count??0)}async function jG4(i,u,t,f){let l=await i.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",u).where((c)=>c.or([c("id","=",t),c("title","=",f)])).executeTakeFirst();return l?{id:String(l.id),title:String(l.title)}:null}function Out(i){let{db:u,db:t}=i,f=new zL(t),l=new QL(t);return async(c)=>{let E=c.req.param("orgRef")??c.req.param("org");if(!E)return c.json({error:"Organization not found"},404);let $=await GG4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await nG4(u,$);if(!w.acceptPublishRequests)return c.json({error:"Publish requests are not enabled for this registry."},403);if(w.requireApiToken){let D=c.req.header("Authorization"),g=D?.startsWith("Bearer ")?D.slice(7).trim():null;if(!g)return c.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await l.validate($,g))return c.json({error:"Invalid API key"},401)}if(w.rateLimitEnabled){if(await kG4(t,$,w.rateLimitWindow)>=w.rateLimitMax)return c.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:w.rateLimitWindow==="minute"?60:3600},429)}let d;try{d=await c.req.json()}catch{return c.json({error:"Invalid JSON body"},400)}let _=zC0.safeParse(d);if(!_.success)return c.json({error:"Invalid publish request payload",details:xG4.treeifyError(_.error)},400);let v=await jG4(t,$,_.data.data.id,_.data.data.title);if(v)return c.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:v},409);let h=await f.createOrUpdate({organization_id:$,requested_id:_.data.data.id,title:_.data.data.title,description:_.data.data.description??null,_meta:_.data.data._meta,server:_.data.data.server,requester_name:_.data.requester?.name??null,requester_email:_.data.requester?.email??null});try{await AG4({db:u,organizationId:$,request:h})}catch(D){console.warn("[private-registry] failed to emit publish-request event:",D)}return ou.capture({distinctId:_.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:h.id,requested_id:h.requested_id,title:_.data.data.title,requester_email:_.data.requester?.email??null}}),c.json({id:h.id,requested_id:h.requested_id,status:h.status},201)}}var gut=!0,IG4="hour",Nut=100;var Zut=N(()=>{e4();wf();PH();uoi();toi();Ol()});var But={};Qi(But,{createPublishRequestHandler:()=>Out,createPublicMCPHandler:()=>vut});var Fut=N(()=>{hut();Zut()});var _1u={};Qi(_1u,{watchHandler:()=>xut,getProxyDispatch:()=>SG4,createApp:()=>RG4});import{readFileSync as XG4}from"fs";import{PrometheusSerializer as JG4}from"@opentelemetry/exporter-prometheus";import{DBOS as Qs}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as zG4,oAuthProtectedResourceMetadata as QG4}from"better-auth/plugins";async function KG4(i){let u=i.connect(),t;try{t=await Promise.race([u,Tut(yut)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),Tut(yut)]),t.release(),!0}catch{return t.release(!0),!1}}function Tut(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function SG4(){if(!Q5u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return Q5u}async function YG4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${Et0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function WG4(i){let u=new URLSearchParams;if(i){let[t,f]=i.split("/");if(t)u.set("workspace_hint",t);if(f)u.set("project_hint",f)}else u.set("auto_personal","true");return u.set("force_new","true"),u}async function RG4(i={}){let u=i.database??qt(),t=!1;A6.stop().catch((M)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",M)});let f,l,c=new B5u,E,$,w,d,_,v=null;if(i.disableNats)E=F5u(),f={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},l=new Ra,$={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},_=void 0,w={init:async()=>{},pump:(M)=>{(async()=>{let e=M.getReader();try{while(!0){let{done:Ji}=await e.read();if(Ji)break}}catch{}finally{e.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{v=zp0();let M=yu().natsCredsPath,e;if(M)try{e=XG4(M,"utf8")}catch(zu){console.error(`[app] failed to read NATS_CREDS at ${M}; connecting anonymously`,zu)}v.init(yu().natsUrls,e?{creds:e}:void 0);let Ji=woi()?new pmi({getJetStream:()=>v.getJetStream()}):null;Ji?.init().catch(()=>{}),f=Ji;let Li=new flu({getJetStream:()=>v.getJetStream()});Li.init().catch(()=>{}),l=Li,E=F5u({getConnection:()=>v.getConnection()}),$=new y5u({getConnection:()=>v.getConnection()}),w=new T5u({getConnection:()=>v.getConnection(),getJetStream:()=>v.getJetStream()}),d=rp0({getConnection:()=>v.getConnection()}),_=op0({getConnection:()=>v.getConnection()});let oi=sp0({getConnection:()=>v.getConnection()}),iu=$;$={start:(zu)=>iu.start(zu),broadcast:(zu)=>iu.broadcast(zu),publishControlFrame:(zu,ht)=>{oi.publishControlFrame(zu,ht).catch((X4)=>{console.warn("[TunnelControl] publishControlFrame failed (non-critical):",X4)})},stop:()=>iu.stop()},dV0(v),v.onReady(()=>{Ji?.init().catch((zu)=>{console.error("[McpListCache] Deferred init failed:",zu)}),Li.init().catch((zu)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",zu)}),E.start(),z50(()=>v.getConnection()),w.init().catch((zu)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",zu)})})}if(cb)await cb();iei(f),llu(l);let D={storage:new qL(u.db),streamBuffer:w,sseHub:A6},g=new P5u(D),O=new Rr(u.db),Z=new x5u(O);Z.start(),$.start((M)=>{Udi(M),g.execute({type:"CANCEL",taskId:M}).catch((e)=>{console.error("[Decopilot] CancelBroadcast execute failed:",e)})}).catch((M)=>{console.error("[Decopilot] CancelBroadcast start failed:",M)}),v?.onReady(()=>{$.start().catch((M)=>{console.error("[CancelBroadcast] Deferred start failed:",M)})}),w.init().catch((M)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",M)}),cb=async()=>{await g.stopAll(),g.dispose(),Z.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),Q50(),l.teardown(),iei(null),llu(null)};let B=new Hu;if(B.use("*",pVi({enabled:(M)=>ZW(M,"debug")==="1"})),B.use("*",PLi),B.use("/*",qt0({origin:(M)=>{if(M.includes("localhost")||M.includes("127.0.0.1"))return M;return M},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),B.use("*",async(M,e)=>{if(await e(),M.req.path.includes("/files/"))return;if(M.req.path.includes("/fs/")&&M.req.path.endsWith("/read"))return;M.header("X-Frame-Options","DENY"),M.header("Content-Security-Policy","frame-ancestors 'none'")}),!yu().noTui)B.use("*",Fit());B.use("*",async(M,e)=>{if(await e(),OC(M.req.path))return;if(M.res.status>=500){let Li=await M.res.clone().text();console.error(`[5xx Response] ${M.req.method} ${M.req.path} - ${M.res.status}:`,Li)}}),B.get(Xw.HEALTH,(M)=>{if(t)return M.json({status:"shutting_down"},503);return M.json({status:"ok"})}),B.get(Xw.HEALTH_LIVE,(M)=>{return M.json({status:"ok"})}),B.get(Xw.HEALTH_READY,async(M)=>{if(t)return M.json({status:"shutting_down"},503);let e={};if(e.postgres={status:await KG4(u.pool)?"up":"down"},v)e.nats=v.isConnected()?{status:"up"}:{status:"down"};else e.nats={status:"down"};let Ji=e.postgres.status==="up",Li=Ji?200:503;return M.json({status:Ji?"ready":"not_ready",services:e},Li)}),B.get(Xw.METRICS,async(M)=>{try{let e=await GLi.collect(),Ji=LG4.serialize(e.resourceMetrics);return M.text(Ji,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(e){return console.error("Failed to collect metrics:",e),M.text("# Error collecting metrics",500)}}),B.route("/api/config",kp0),B.route("/api/auth/custom",jV0),B.all("/api/auth/*",async(M)=>{return await w4.handler(M.req.raw)});let F=w70();F.use("/.well-known/oauth-protected-resource/mcp/:connectionId",oJ),F.use("/mcp/:connectionId/.well-known/oauth-protected-resource",oJ),B.route("/",F),B.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Oe),B.route("/",h70()),B.use("/oauth-proxy/:connectionId/*",oJ),B.all("/oauth-proxy/:connectionId/*",Uut);let y=async(M)=>{let Ji=await HG4()(M.req.raw),Li=await Ji.json();return Response.json(Li,Ji)};B.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",oJ),B.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",y);let T=async(M)=>{let Ji=await bG4()(M.req.raw),Li=await Ji.json();return Response.json(Li,Ji)};B.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",T);let U=cV0({ttlMs:120000}),I=await m20({db:u.db,auth:w4,encryption:{key:yu().encryptionKey},observability:{tracer:W2,meter:Mt},modelListCache:c,providerKeyCache:E,memberRoleCache:U,linkStatusProbe:d,publishLinkControlFrame:(M,e)=>$.publishControlFrame(M,e)});Y9.set(I);let j=new fZ(yu().encryptionKey);peu({db:u.db,baseUrl:H_()});let A=h$i(u.db),n=new Sr(u.db),q=Oit({db:u.db});s1u({storage:A,meshContextFactory:q}),jtu({meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6},prepareLinkWorkFn:Ne0,workPublisher:_}),Itu({dispatchRunFn:De0,meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6}});let S=new qL(u.db);YF0({getJetStream:()=>v?.getJetStream()??null,getJetStreamManager:async()=>{let M=v?.getConnection();return M?await Put.jetstreamManager(M):null},messageParts:S.messageParts(),resolveRun:async(M)=>{let e=await u.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",M).executeTakeFirst();return e?{orgId:e.organization_id,createdBy:e.created_by,version:e.message_storage_version??1,status:e.status,runFenceToken:e.run_fence_token,title:e.title??null}:null},completeRunIfNotCompleted:async(M,e)=>{let Ji=await S.completeRunIfNotCompleted(M,e);return hxi(A6,e,M,Ji),Ji},markRunRequiresAction:async(M,e)=>{let Ji=await S.requiresActionIfInProgress(M,e);return hxi(A6,e,M,Ji),Ji},markRunFailed:async(M,e,Ji,Li)=>{let oi=await S.markRunFailed(M,e,Ji,Li);return hxi(A6,e,M,oi),oi},persistTitle:(M,e,Ji)=>S.update(M,e,{title:Ji}),onTitleUpdated:async({runId:M,orgId:e,title:Ji})=>{let Li=await S.get(M,e).catch(()=>null);A6.emit(e,A5(M,Li?.status??"in_progress",{title:Ji,virtualMcpId:Li?.virtual_mcp_id??void 0,createdBy:Li?.created_by,triggerId:Li?.trigger_id,branch:Li?.branch??null,createdAt:Li?.created_at,updatedAt:Li?.updated_at}))},bumpProgress:async({runId:M,orgId:e})=>{await S.bumpProgress(M,e)},recordCompleted:async({runId:M,orgId:e,distinctId:Ji,usage:Li})=>{ou.capture({distinctId:Ji,event:"chat_message_completed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",input_tokens:Li.inputTokens,output_tokens:Li.outputTokens,total_tokens:Li.totalTokens}})},recordFailed:async({runId:M,orgId:e,distinctId:Ji,reason:Li,kind:oi})=>{ou.capture({distinctId:Ji,event:"chat_message_failed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",error_category:oi,error_message:Li}})},purgeRun:async(M)=>{w.purge(M)}}),uk0({meshContextFactory:q,systemDatabaseUrl:SLi(yu().databaseUrl,yu().databasePgSsl),streamBuffer:w}),git(),iau();let Y=async(M,e,Ji)=>{let Li=await A.findById(M,e);if(!Li)throw Error("Automation not found");return ulu({automationId:Li.id,organizationId:Li.organization_id,triggerId:null})},V=new LH(A,({automation:M,trigger:e,contextMessages:Ji,idempotencyKey:Li})=>Ha({automationId:M.id,organizationId:M.organization_id,triggerId:e.id,contextMessages:Ji},{idempotencyKey:Li})),L=[ad(),mS(),wD()];for(let M of L)Nxi(M).then(()=>{}).catch((e)=>console.error("[monitoring] Retention cleanup failed:",e));let Ei=()=>u.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((M)=>console.error("[auth] Expired API key cleanup failed:",M));Ei(),setInterval(Ei,86400000).unref(),B.use("*",async(M,e)=>{if(TLi(M.req.path))return e();let Ji={measure:async(oi,iu)=>{o3(M,oi);try{return await iu()}finally{Rw(M,oi)}}},Li=await Y9.create(M.req.raw,{timings:Ji});Li.automationRunner=Y,M.set("meshContext",Li);try{await e()}finally{let oi=Li.pendingRevalidations;if(oi.length>0)Promise.race([Promise.allSettled(oi),new Promise((zu)=>setTimeout(zu,30000))]).catch((zu)=>console.error("[mesh] revalidation cleanup error:",zu))}}),B.use("/api/:org/decopilot/*",sJ),B.use("/api/:org/v1/*",sJ),B.use("/api/:org/files/*",sJ),B.use("*",async(M,e)=>{let Ji=M.req.path;if(Ji.startsWith("/api/org-sso/")||Ji.startsWith("/api/auth/")||Ji.startsWith("/api/tools/management")||Ji.startsWith("/oauth-proxy/"))return e();let Li=M.get("meshContext");if(!Li?.organization?.id||!Li?.auth?.user?.id)return e();if(!(await Li.storage.orgSsoConfig.getByOrgId(Li.organization.id))?.enforced)return e();if(!await Li.storage.orgSsoSessions.isValid(Li.auth.user.id,Li.organization.id))return M.json({error:"SSO authentication required for this organization"},403);return e()});let $i=new Hu;$i.use("*",Yd({mountPath:"/api/org-sso"})),$i.route("/",pUi()),B.route("/api/org-sso",$i),B.get("/api/tools/management",(M)=>{return M.json({tools:uri,grouped:VO()})}),B.use("/mcp/*",async(M,e)=>{o3(M,"mcp");try{return await e()}finally{Rw(M,"mcp")}});let li=async(M,e)=>{let Ji=M.var.meshContext;if(!Ji.auth.user?.id&&!Ji.auth.apiKey?.id){let Li=new URL(M.req.url);return M.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Li.origin}${Li.pathname}/.well-known/oauth-protected-resource"`}})}return await e()};if(B.use("/mcp/:connectionId?",li),B.use("/mcp/gateway/:virtualMcpId?",li),B.use("/mcp/virtual-mcp/:virtualMcpId?",li),B.use("/mcp/self",li),G5()){let{mountDevRoutes:M}=(Wit(),nxi(Yit));M(B,li)}let ii=new Hu;ii.use("*",Yd({mountPath:"/mcp"})),ii.route("/",bFi()),B.route("/mcp",ii);let m=new Hu;m.use("*",Yd({mountPath:"/mcp/self"})),m.route("/",Exi()),B.route("/mcp/self",m);let Oi=new Hu;Oi.use("*",Yd({mountPath:"/mcp"})),Oi.route("/",MFi()),B.route("/mcp",Oi),B.use("/api/:org/models/*",async(M,e)=>{o3(M,"llm_models");try{return await e()}finally{Rw(M,"llm_models")}});let _i=j3u({cancelBroadcast:$,streamBuffer:w,runRegistry:g,linkStatusProbe:d});if(B.route("/api",_i),v!=null)Q5u=ep0({getConnection:()=>v?.getConnection()??null});B.route("/api",gp0()),B.get("/api/links/me",async(M)=>{try{let e=M.req.header("authorization")??"",Ji=/^Bearer\s+(.+)$/i.exec(e),Li=null;if(Ji){let iu=(Ji[1]??"").trim();Li=await vp0(iu,w4.api)}else Li=M.get("meshContext")?.auth?.user?.id??null;if(!Li)return M.json({error:"unauthorized"},401);let oi=d?await d(Li):{online:!1,capabilities:[]};if(!oi.online)return M.json(null);return M.json({hostname:oi.hostname,cliVersion:oi.cliVersion})}catch(e){return console.error("[links/me] presence probe failed; reporting offline:",e instanceof Error?e.message:String(e)),M.json(null)}}),B.use("/api/:org/files/*",sJ),B.route("/api",Kp0);let Ii=new Hu;Ii.use("*",Yd({mountPath:"/api"})),Ii.route("/",$xi()),B.route("/api",Ii),B.route("/api",Ap0);let Vi=new Hu;Vi.use("*",Yd({mountPath:"/api"})),Vi.route("/",wxi({tokenStorage:n,automationEventDispatcher:V})),B.route("/api",Vi);let Wi=new Wr(u.db),ri=new Hu;ri.use("*",Yd({mountPath:"/api"})),ri.route("/",GPi()),B.route("/api",ri),B.route("/api/deco-sites",Ke0()),B.route("/api/deco-apps",yp0());let gi=new Hu;gi.use("*",Yd({mountPath:"/api/deco-sites"})),gi.route("/",kPi()),B.route("/api/deco-sites",gi);let Xi=new Hu;Xi.use("*",Yd({mountPath:"/api/vm-events"})),Xi.route("/",Bp0()),B.route("/api/vm-events",Xi);let{createPublishRequestHandler:Gi,createPublicMCPHandler:Di}=await Promise.resolve().then(() => (Fut(),But)),wi={db:u.db,vault:{encrypt:(M)=>j.encrypt(M),decrypt:(M)=>j.decrypt(M)}},fi=Gi(wi),ji=Di(wi);B.use("/org/:orgRef/registry/publish-request",oJ),B.post("/org/:orgRef/registry/publish-request",fi),B.use("/org/:orgSlug/registry/*",oJ),B.all("/org/:orgSlug/registry/*",ji),B.post("/api/:org/registry/publish-request",fi),B.all("/api/:org/registry/*",ji);let a=dp0({kvStorage:Wi,runRegistry:g,streamBuffer:w,sseHub:A6,cancelBroadcast:$,tokenStorage:n,automationEventDispatcher:V,mountDevAssets:G5(),mcpAuth:li,oauthProxyHandler:Uut,watchHandler:xut,betterAuthProtectedResourceHandler:y,getNatsConnection:()=>v?.getConnection()??null});return B.route("/api/:org",a),B.notFound((M)=>{return M.json({error:"Not Found",path:M.req.path},404)}),B.onError(ye0),Object.assign(B,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([A6.stop(),cb?Promise.resolve(cb()).finally(()=>{cb=null}):Promise.resolve()]),v)await v.drain().catch((M)=>console.error("[shutdown] NATS drain error:",M));console.log("[shutdown] Flushing telemetry..."),await H3().catch((M)=>console.error("[shutdown] Telemetry flush error:",M)),console.log("[shutdown] Closing database..."),await Q2(u).catch((M)=>console.error("[shutdown] Database close error:",M)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await Qs.registerQueue(h5,{partitionQueue:!0,concurrency:e1u,minPollingIntervalMs:a1u}),await Qs.registerQueue(s_,{partitionQueue:!0,concurrency:ktu}),await Qs.registerQueue(f7,{partitionQueue:!0,concurrency:xtu}),await Qs.registerQueue(IO,{partitionQueue:!0,concurrency:ik0}),await S3u(A),await Promise.allSettled(["automations-gate","automations-global"].map((M)=>Qs.deleteQueue(M))),await o1u(u.pool),kc0().catch((M)=>{console.error("[studio-pack-backfill] failed:",M)}),uau().catch((M)=>{console.error("[org-fs] public-sets boot sync kick failed:",M)})}})}var Put,yut=5000,Q5u=null,cb=null,Uut=async(i)=>{let u=i.req.param("connectionId");if(!u)return i.json({error:"Missing connectionId"},400);let t=i.req.path.split("/").filter(Boolean),f=t[t.length-1],l=i.get("meshContext");if(!l)l=await Y9.create(i.req.raw),i.set("meshContext",l);let c=i.req.param("org")?l.organization?.id:void 0,E=await l.storage.connections.findById(u,c);if(!E?.connection_url)return i.json({error:"Connection not found"},404);let $=await nz(E.connection_url),w,d=new URL(E.connection_url);if($.ok)w=(await $.json()).authorization_servers?.[0];if(!w)w=d.origin;let _=await Ze(w);if(!_.ok)return i.json({error:"Failed to get auth server metadata"},502);let v=await _.json(),h;if(f==="authorize")h=v.authorization_endpoint;else if(f==="token")h=v.token_endpoint;else if(f==="register")h=v.registration_endpoint;if(!h)return i.json({error:`Unknown OAuth endpoint: ${f}`},404);let D=new URL(h),g=new URL(i.req.url);if(D.search=g.search,f==="authorize"){let A=D.searchParams.get("redirect_uri");if(A){let n=yu().baseUrl??g.origin;try{let q=new URL(A),S=new URL(n);if(!(q.origin===S.origin||q.hostname==="localhost"))return i.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return i.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}D.searchParams.set("redirect_uri",A)}if(D.searchParams.has("resource"))D.searchParams.set("resource",E.connection_url);if($t0(E.connection_url))try{let n=await YG4(l,E.organization_id),q=WG4(n);for(let[S,Y]of q)D.searchParams.set(S,Y)}catch(n){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",n)}return i.redirect(D.toString(),302)}let O={Accept:i.req.header("Accept")||"application/json"},Z=i.req.header("Content-Type");if(Z)O["Content-Type"]=Z;let B=i.req.header("Authorization");if(B)O.Authorization=B;let F,y=null,T=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(f==="token"&&Z?.includes("application/x-www-form-urlencoded")){if(B?.toLowerCase().startsWith("basic "))try{let Y=atob(B.slice(6).trim()),V=Y.indexOf(":");if(V!==-1){let L=decodeURIComponent(Y.slice(0,V)),Ei=decodeURIComponent(Y.slice(V+1));y=L||null,T=Ei||null}}catch{}let A=await i.req.formData();if(A.has("resource"))A.set("resource",E.connection_url);let n=A.get("client_id"),q=A.get("client_secret");if(typeof n==="string"&&n)y=n;if(typeof q==="string"&&q)T=q;let S=new URLSearchParams;for(let[Y,V]of A.entries())S.append(Y,V.toString());F=S.toString()}else if(f==="register"&&Z?.toLowerCase().includes("application/json")){let A=await l.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",E.organization_id).executeTakeFirst(),n=await i.req.text(),q={};try{q=n?JSON.parse(n):{}}catch{F=n}let S=typeof q==="object"&&q!==null&&!Array.isArray(q);if(F===void 0&&!S)F=n;if(F===void 0){let Y=q,V=Y.metadata&&typeof Y.metadata==="object"?Y.metadata:{};Y.metadata={...V,organization_id:E.organization_id,...A?.slug?{organization_slug:A.slug}:{},...A?.name?{organization_name:A.name}:{}},F=JSON.stringify(Y),O["Content-Type"]="application/json"}}else F=i.req.raw.body??void 0;let U=await fetch(D.toString(),{method:i.req.method,headers:O,body:F,duplex:"half",redirect:"manual"}),I=new Headers,j=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[A,n]of U.headers.entries())if(!j.includes(A.toLowerCase()))I.set(A,n);if(f==="token"&&U.ok){let A=await U.text();try{let n=JSON.parse(A);if(typeof n.access_token==="string"&&n.access_token){let q=typeof n.expires_in==="number"?new Date(Date.now()+n.expires_in*1000):null,S=null;try{S=await kz(E.connection_url)??h}catch{S=h}let Y={connectionId:u,accessToken:n.access_token,refreshToken:typeof n.refresh_token==="string"?n.refresh_token:null,scope:typeof n.scope==="string"?n.scope:null,expiresAt:q,clientId:y,clientSecret:T,tokenEndpoint:S};await new q1(l.db,l.vault).upsert(Y)}}catch(n){console.error("[oauth-proxy] failed to persist downstream token:",n)}return new Response(A,{status:U.status,statusText:U.statusText,headers:I})}return new Response(U.body,{status:U.status,statusText:U.statusText,headers:I})},xut=async(i)=>{let u=i.var.meshContext;if(!(u.auth.user?.id??u.auth.apiKey?.userId))return i.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return i.json({error:"organization id missing"},400);let l=i.req.query("types"),c=l?l.split(",").map(($)=>$.trim()).filter(Boolean):null,E=crypto.randomUUID();return Wd(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:E,organizationId:f,typePatterns:c,connectedAt:new Date().toISOString()})}),!A6.add({id:E,organizationId:f,typePatterns:c?.length?c:null,push:(_)=>{$.writeSSE({id:_.id,event:_.type,data:JSON.stringify(_)}).catch(()=>{A6.remove(f,E)})}})){await $.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let d=setInterval(()=>{$.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(d)})},30000);await new Promise((_)=>{$.onAbort(()=>{clearInterval(d),A6.remove(f,E),_()})})})},LG4,HG4=()=>QG4(w4),bG4=()=>zG4(w4);var v1u=N(()=>{xt();tau();HE();gW();wf();sf();_ci();Vt0();iri();c8();Ne();Iwu();zE();Q1();e4();Jwu();Wwu();Be0();X3u();o5();pwi();J3u();Te0();K3u();_p0();Np0();Fp0();z3u();Tp0();RFi();Be();Gp0();qFi();E5u();jp0();Sp0();c5u();l5u();h4i();mci();Qp0();Mw();j$i();zr();Elu();Hp0();Rp0();Vp0();mp0();ap0();pp0();_it();vit();Toi();Aoi();Nit();lEi();I5u();jw();Y3u();la();Utu();lEi();G3u();qai();Vai();Zit();BW();yit();$K();Iwu();GQ();Pdi();Put=k(o2(),1);LG4=new JG4});var nut={};Qi(nut,{resolveClientDir:()=>eG4,resolveAssetPathWithTraversalCheck:()=>Gut,isPathWithinDirectory:()=>Aut,createAssetHandler:()=>aG4});import{resolve as Hs,dirname as CG4,join as MG4,extname as qG4,basename as VG4,sep as Iut}from"path";function rG4(i,u){if(i===u||VG4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${Iut}assets${Iut}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Aut(i,u){let t=Hs(u),f=Hs(i);return f===t||f.startsWith(t+"/")}function Gut({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=Hs(u,t);if(!Aut(f,u))return null;return f}function eG4(i,u="../client"){let t=new URL(i),f=CG4(t.pathname);return Hs(f,u)}function aG4(i={}){let{env:u="production",clientDir:t=mG4,isServerPath:f=()=>!1}=i;if(u==="development")return async function(c){return null};return async function(c){if(c.method!=="GET")return null;let E=new URL(c.url),$;try{$=decodeURIComponent(E.pathname)}catch{return null}if(f($))return null;let w=Gut({requestPath:$,clientDir:t});if(!w)return null;let d=MG4(w,"index.html"),_=Hs(t,"index.html"),v=c.headers.get("accept"),D=v?.includes("text/html")||v?.includes("*/*")&&["",".html"].includes(qG4(w))?[d,_]:[];for(let g of[w,...D])try{let O=Bun.file(g);if(await O.exists())return new Response(O,{headers:rG4(g,_)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var mG4="./dist/client";var kut=()=>{};var jut={};Qi(jut,{tryUpgradePreviewWs:()=>fn4,tryHandlePreviewHttp:()=>tn4,previewWebSocketHandler:()=>ln4,parsePreviewBaseDomain:()=>un4,isPreviewWsData:()=>Txi,extractHandleFromHost:()=>H5u});function pG4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function in4(){return new Response(sG4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function un4(i){if(!i||i.trim()==="")return null;let u=i.includes("{handle}")?i.replace("{handle}","__handle__"):i,t;try{t=new URL(u)}catch{return null}let f=t.hostname;if(i.includes("{handle}")){let l=f.indexOf(".");if(l<=0||l===f.length-1)return null;return f.slice(l+1)}return f}function H5u(i,u){if(!i||!u)return null;let t=i.indexOf(":"),f=(t>=0?i.slice(0,t):i).toLowerCase(),c=`.${u.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!f.endsWith(c))return null;let E=f.slice(0,f.length-c.length);if(!E||E.includes("."))return null;return E}async function tn4(i,u){let t=H5u(i.headers.get("host"),u.baseDomain);if(!t)return null;let f=await u.getRunner();if(!f)return Rs(503,"preview proxy not configured");let l=await f.proxyPreviewRequest(t,i);if(l.headers.get(_J)&&pG4(i))return in4();return l.headers.delete(_J),l}function Rs(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Txi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function fn4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=H5u(i.headers.get("host"),t.baseDomain);if(!f)return null;let l=await t.getRunner();if(!l)return Rs(503,"preview proxy not configured");let c=await l.resolvePreviewUpstreamUrl(f);if(!c)return Rs(404,"sandbox not found");let E=new URL(i.url);if(E.pathname.startsWith("/_sandbox")||E.pathname.startsWith("/_decopilot_vm"))return Rs(404,"not found");let $=`${c.replace(/^http/,"ws")}${E.pathname}${E.search}`,w=i.headers.get("sec-websocket-protocol"),d=w?w.split(",").map((h)=>h.trim()).filter(Boolean):[],_={kind:"preview",upstreamUrl:$,upstreamProtocols:d,pending:[],upstream:null,closed:!1};if(!u.upgrade(i,{data:_}))return Rs(426,"upgrade failed");return}function bs(i,u,t,f){if(u.closed)return;u.closed=!0;try{i.close(t,f)}catch{}try{u.upstream?.close()}catch{}}var oG4=256,sG4='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',ln4;var Xut=N(()=>{E1u();ln4={open(i){let u=i.data;if(!Txi(u))return;let t;try{t=u.upstreamProtocols.length>0?new WebSocket(u.upstreamUrl,u.upstreamProtocols):new WebSocket(u.upstreamUrl)}catch(f){console.warn(`[preview-ws] failed to dial upstream ${u.upstreamUrl}: ${f instanceof Error?f.message:String(f)}`),bs(i,u,1011,"upstream connect failed");return}t.binaryType="arraybuffer",u.upstream=t,t.addEventListener("open",()=>{while(u.pending.length>0){let f=u.pending.shift();if(f!==void 0)t.send(f)}}),t.addEventListener("message",(f)=>{if(u.closed)return;i.send(f.data)}),t.addEventListener("close",(f)=>{bs(i,u,f.code||1000,f.reason||"")}),t.addEventListener("error",()=>{bs(i,u,1011,"upstream error")})},message(i,u){let t=i.data;if(!Txi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=oG4){bs(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!Txi(u))return;bs(i,u,1000,"")}}});var Kut={};Qi(Kut,{bootstrapDevLinkSession:()=>Dn4});import{existsSync as cn4}from"fs";import{chmod as En4,mkdir as $n4,rename as wn4,writeFile as dn4}from"fs/promises";import{dirname as _n4,join as Jut}from"path";function vn4(i){return Jut(i,"dev-link")}function hn4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Jut(vn4(i),"session.json")}async function Dn4(i,u){let t=hn4(i),f=qt().db,l=xd()?await Wa():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(cn4(t))try{let d=await Bun.file(t).json(),_=d.user?.sub,v=d.accessToken;if(_===l.id&&typeof v==="string"){if(await w4.api.verifyApiKey({body:{key:v}}).then((D)=>D?.valid===!0).catch(()=>!1))return{path:t,userSub:_}}}catch{}let c=null;try{c=await w4.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:l.id,permissions:{"*":["*"]},expiresIn:2592000,rateLimitEnabled:!1}})}catch(w){return console.warn("[dev-link] failed to mint API key:",w instanceof Error?w.message:String(w)),null}if(!c?.key)return null;let E={target:u,clientId:"dev-link",user:{sub:l.id,...l.email?{email:l.email}:{},...l.name?{name:l.name}:{}},accessToken:c.key,createdAt:new Date().toISOString()};await $n4(_n4(t),{recursive:!0});let $=`${t}.tmp`;return await dn4($,JSON.stringify(E,null,2),{mode:384}),await En4($,384),await wn4($,t),{path:t,userSub:l.id}}var Sut=N(()=>{zE();c8();Bg()});var Kn4={};import{existsSync as Tn4}from"fs";function Qut(i,u){if(!u)return i;let t=new URL(i);if(!t.searchParams.has("sslmode"))t.searchParams.set("sslmode","verify-full");return t.toString()}function In4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(xn4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function Jn4(i){let u;try{u=await gn4.create({systemDatabaseUrl:Qut(T3.databaseUrl,T3.databasePgSsl),systemDatabaseSchemaName:"dbos"});let t=await u.listWorkflows({status:"PENDING",queueName:s_,executorId:i,loadInput:!1,loadOutput:!1});if(t.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${i})`);return}let f=t.map((l)=>l.workflowID);await u.resumeWorkflows(f,{queueName:s_}),console.log(`[shutdown] re-enqueued ${f.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${i}):`,f)}catch(t){console.error("[shutdown] thread-gate handoff failed:",t)}finally{await u?.destroy().catch(()=>{})}}async function Pxi(i){if(zut)return;zut=!0,console.log(`
|
|
84302
|
+
Use sentence case for the title. No markdown fences.`;var os0=N(()=>{Cf();ca()});function UI4(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:null}function PI4(i){if(!i||i.includes(".."))return!1;return TI4.test(i)}function ss0(i){let u=typeof i.__resolveType==="string"?i.__resolveType:null;if(!u||!PI4(u))return null;let t=UI4(i.props);if(t)return{resolveType:u,payload:{props:t}};let{__resolveType:f,...l}=i;return{resolveType:u,payload:l}}function ps0(i,u){return`${i.replace(/\/+$/,"")}/deco/invoke/${encodeURIComponent(u)}`}var TI4;var ip0=N(()=>{TI4=/^[\w./@-]+$/});function up0(i,u){let t=i?.githubRepo;if(!t?.owner||!t?.name)return null;if(!t.connectionId)return t;if(!u.includes(t.connectionId))return null;return t}async function tp0(i,u,t,f){if(!f.connectionId)throw new pH("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let l=i.organization?.id;if(!l)throw new pH(ZE);await UQ({ctx:i,connectionId:f.connectionId,organizationId:l,forceRefresh:!0,onLegacyMintError:(_)=>{let v=_ instanceof Error?_.message:ZE;throw new pH(v)}});let{cloneUrl:c,gitUserName:E,gitUserEmail:$}=await PQ(f.connectionId,f.owner,f.name,i.db,i.vault),w=_xi(i),d=await u.proxyDaemonRequest(t,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:c},identity:{userName:E,userEmail:$}},...w?{operator:w}:{}})});if(!d.ok){let _=await d.text().catch(()=>d.statusText);throw Error(`Failed to refresh sandbox git credentials (${d.status}): ${_}`)}}var pH;var fp0=N(()=>{L9();_5u();_Fi();pH=class pH extends Error{constructor(i){super(i);this.name="GitPushAuthError"}}});function II4(i){if(!i||i.length>255||i.includes("..")||i.startsWith("/")||i.endsWith("/")||i.endsWith(".lock")||!xI4.test(i))throw Error(`Invalid branch name: ${i}`)}function ib(i){return AbortSignal.any([i.req.raw.signal,AbortSignal.timeout(nI4)])}function ub(i){let{runner:u}=i.get("vmClaim");if(!u)return i.json({error:"No sandbox runner configured"},503);return u}async function Rc(i,u,t){let f=ub(i);if(f instanceof Response)return f;let{claimName:l,userId:c,projectRef:E}=i.get("vmClaim"),$=t?.method??"POST",w=null,d=new Headers;if(t?.jsonBody!==void 0)w=t.jsonBody,d.set("content-type","application/json");else if(t?.forwardJsonBody)w=await i.req.text(),d.set("content-type","application/json");let _=t?.signal,v={method:$,headers:d,body:w,..._?{signal:_}:{}},h=async()=>{let D=await f.proxyDaemonRequest(l,u,v);if(t?.map404to410&&D.status===404){try{await D.body?.cancel()}catch{}if(await f.adoptLiveClaim?.({userId:c,projectRef:E},l))D=await f.proxyDaemonRequest(l,u,v);if(D.status===404){try{await D.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...V8}})}}let g=await D.text(),O=t?.redactRepoDirUnlessDesktop&&f.kind!=="user-desktop"?jI4(g):g,Z=D.headers.get("content-type")??"application/json";return new Response(O,{status:D.status,headers:{"content-type":Z,...V8}})};try{if(_){let D=h();return D.catch(()=>{}),await Promise.race([D,new Promise((O,Z)=>{if(_.aborted)return Z(_.reason);_.addEventListener("abort",()=>Z(_.reason),{once:!0})})])}return await h()}catch(D){let g=D instanceof Error?D.message:String(D);return i.json({error:`Daemon unreachable: ${g}`},502)}}function jI4(i){try{let u=JSON.parse(i);if(u&&typeof u==="object"&&!Array.isArray(u)&&"repoDir"in u)return JSON.stringify({...u,repoDir:null})}catch{}return i}async function cp0(i,u,t,f="GET",l){let c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null});if(c.status===404&&l){try{await c.body?.cancel()}catch{}if(await i.adoptLiveClaim?.(l,u))c=await i.proxyDaemonRequest(u,t,{method:f,headers:new Headers,body:null})}if(c.status===404){try{await c.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let E=await c.text();if(!c.ok)try{let $=JSON.parse(E);throw Error($.error??`Daemon error (${c.status})`)}catch($){if($ instanceof Error&&$.message!==E)throw $;throw Error(`Daemon error (${c.status})`)}return JSON.parse(E)}function XI4(i){return Ep0.includes(i)}var xI4,AI4=524288,GI4=65536,nI4=1e4,lp0=2000,kI4,V8,Ep0,$p0=()=>{let i=new Hu;return i.use("/:virtualMcpId/:branch/*",kI4),i.post("/:virtualMcpId/:branch/write",(u)=>Rc(u,"/_sandbox/write",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/unlink",(u)=>Rc(u,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/mkdir",(u)=>Rc(u,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/rename",(u)=>Rc(u,"/_sandbox/rename",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/read",(u)=>Rc(u,"/_sandbox/read",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/glob",(u)=>Rc(u,"/_sandbox/glob",{forwardJsonBody:!0,signal:ib(u)})),i.post("/:virtualMcpId/:branch/exec/:script",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}`)}),i.post("/:virtualMcpId/:branch/exec/:script/kill",(u)=>{let t=u.req.param("script");if(!t)return u.json({error:"missing script name"},400);return Rc(u,`/_sandbox/exec/${encodeURIComponent(t)}/kill`)}),i.get("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),i.put("/:virtualMcpId/:branch/config",(u)=>Rc(u,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/setup/:step",async(u)=>{let t=u.req.param("step");if(!t||!XI4(t))return u.json({error:`step must be one of: ${Ep0.join(", ")}`},400);if(t==="start"){let f=u.get("vmClaim");if(f.runner){let l=Bi(u.var.meshContext),c=EFi(f.virtualMcpMetadata);try{await wFi({ctx:u.var.meshContext,runner:f.runner,handle:f.claimName,orgId:l.id,userId:f.userId,entries:c})}catch(E){let $=E instanceof Error?E.message:String(E);return u.json({error:`Failed to push env to daemon: ${$}`},502)}}}return Rc(u,`/_sandbox/setup/${t}`,{signal:u.req.raw.signal,map404to410:!0})}),i.get("/:virtualMcpId/:branch/events",(u)=>{let t=u.get("vmClaim");if(!t.runner)return Wd(u,async(f)=>{await f.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this mesh."})})});return Ms0(u,{ctx:u.var.meshContext,claimName:t.claimName,runner:t.runner,virtualMcpId:t.virtualMcpId,branch:t.branch,userId:t.userId,projectRef:t.projectRef,virtualMcpMetadata:t.virtualMcpMetadata})}),i.get("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(lp0)])})),i.post("/:virtualMcpId/:branch/git/status",(u)=>Rc(u,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([u.req.raw.signal,AbortSignal.timeout(lp0)])})),i.post("/:virtualMcpId/:branch/git/diff",(u)=>Rc(u,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/publish",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f,virtualMcpMetadata:l,connectionIds:c}=u.get("vmClaim"),E=u.var.meshContext;try{await v5u(E,t,f);let $=up0(l,c);if($)await tp0(E,t,f,$)}catch($){if($ instanceof pH)return u.json({error:$.message},403,V8);let w=$ instanceof Error?$.message:String($);return u.json({error:w},502,V8)}return Rc(u,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/discard",(u)=>Rc(u,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0})),i.post("/:virtualMcpId/:branch/git/rebase",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.var.meshContext;try{await v5u(l,t,f)}catch(c){let E=c instanceof Error?c.message:String(c);return u.json({error:E},502,V8)}return Rc(u,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})}),i.post("/:virtualMcpId/:branch/git/suggest-commit",Bw({maxSize:AI4,onError:(u)=>u.json({error:"Payload too large"},413,V8)}),async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f,userId:l,projectRef:c}=u.get("vmClaim"),E=u.var.meshContext;try{let $=await u.req.json().catch(()=>({})),w=$.status,d=$.diff,_=d!=null&&typeof d.diffs==="object"&&d.diffs!==null,[v,h]=ms0(w)&&_?[w,d]:await Promise.all([cp0(t,f,"/_sandbox/git/status","GET",{userId:l,projectRef:c}),cp0(t,f,"/_sandbox/git/diff","GET",{userId:l,projectRef:c})]),D=await as0(E,v,h);return u.json(D,200,V8)}catch($){let w=$ instanceof Error?$.message:String($);if(w==="SANDBOX_GONE")return u.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,V8);return u.json({error:w},502,V8)}}),i.get("/:virtualMcpId/:branch/preview-fetch",async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l=u.req.query("path");if(l!=="/.decofile")return u.json({error:"Path not allowed"},403);let c;try{c=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!c)return u.json({error:"Preview not available"},502);let E=c.replace(/\/+$/,""),$;try{$=await fetch(`${E}${l}`)}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i.post("/:virtualMcpId/:branch/preview-invoke",Bw({maxSize:GI4,onError:(u)=>u.json({error:"Payload too large"},413)}),async(u)=>{let t=ub(u);if(t instanceof Response)return t;let{claimName:f}=u.get("vmClaim"),l;try{l=await t.getPreviewUrl(f)}catch{return u.json({error:"Preview not available"},502)}if(!l)return u.json({error:"Preview not available"},502);let c;try{c=await u.req.json()}catch{return u.json({error:"Invalid JSON body"},400)}if(!c||typeof c!=="object"||Array.isArray(c))return u.json({error:"Invalid JSON body"},400);let E=ss0(c);if(!E)return u.json({error:"Invalid or missing __resolveType"},400);let $;try{$=await fetch(ps0(l,E.resolveType),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(E.payload),signal:AbortSignal.timeout(30000)})}catch{return u.json({error:"Preview unreachable"},502)}let w;try{w=await $.text()}catch{return u.json({error:"Preview unreachable"},502)}return new Response(w,{status:$.status,headers:{"content-type":$.headers.get("content-type")??"application/json"}})}),i};var wp0=N(()=>{sf();WH();$K();Rs0();$3();fPi();yQ();Cs0();qs0();D1u();TQ();os0();ip0();fp0();xI4=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;kI4=bs0(async(i,u)=>{let t=i.var.meshContext;try{Si(t)}catch{return i.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return i.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return i.json({error:"Organization scope required"},403)}let c=i.req.param("virtualMcpId"),E=i.req.param("branch");if(!c||!E)return i.json({error:"virtualMcpId and branch are required"},400);try{II4(E)}catch(h){let D=h instanceof Error?h.message:String(h);return i.json({error:D},400)}let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return i.json({error:"Virtual MCP not found"},404);let w=D8({orgId:l.id,virtualMcpId:c,branch:E}),d=IH({userId:f,projectRef:w},E),_=$.metadata??null,v;try{v=(await v_(t,{userId:f,branch:E,virtualMcpMetadata:_})).provider}catch{v=null}if(!v)return i.json({error:"No sandbox runner found"},404);return i.set("vmClaim",{claimName:d,runner:v,virtualMcpId:c,branch:E,userId:f,projectRef:w,virtualMcpMetadata:_,connectionIds:$.connections?.map((h)=>h.connection_id)??[]}),u()});V8={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Ep0=["clone","install","start"]});var dp0=(i)=>{let u=new Hu;if(u.use("*",sJ),u.route("/",GPi()),u.route("/",ze0()),u.route("/",$xi()),u.route("/tools",Ys0()),u.route("/",Js0()),u.route("/",Bs0({kvStorage:i.kvStorage})),u.route("/",Os0()),u.route("/fs",As0({getConnection:i.getNatsConnection})),u.route("/sandbox",$p0()),u.route("/",ns0()),u.route("/deco-sites",kPi()),u.route("/sso",pUi()),u.route("/",wxi({tokenStorage:i.tokenStorage,automationEventDispatcher:i.automationEventDispatcher})),u.route("/webhooks",ne0()),i.mountDevAssets)u.route("/dev-assets",jPi({orgFromPath:!0}));return u.use("/mcp/:connectionId?",i.mcpAuth),u.use("/mcp/:connectionId/ui-resource",i.mcpAuth),u.use("/mcp/gateway/:virtualMcpId?",i.mcpAuth),u.use("/mcp/virtual-mcp/:virtualMcpId?",i.mcpAuth),u.use("/mcp/self",i.mcpAuth),u.route("/",d70()),u.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",i.betterAuthProtectedResourceHandler),u.route("/mcp",bFi()),u.route("/mcp/self",Exi()),u.route("/mcp",MFi()),u.all("/oauth-proxy/:connectionId/*",i.oauthProxyHandler),u.get("/watch",i.watchHandler),u};var _p0=N(()=>{sf();K3u();ke0();z3u();XPi();Qe0();X3u();Zs0();Fs0();Gs0();Be();Wwu();qFi();l5u();ks0();Ks0();c5u();Ws0();E5u();RFi();wp0()});async function vp0(i,u){let t=new Headers({authorization:`Bearer ${i}`,"X-MCP-Session-Auth":"true"}),f=await u.getMcpSession({headers:t}).catch(()=>null);if(f?.userId)return f.userId;let l=await u.verifyApiKey({body:{key:i}}).catch(()=>null);if(l?.valid&&l.key?.userId)return l.key.userId;return null}function N5u(i){try{i?.clear?.()}catch{}}async function hp0({accountJwt:i,accountSigningKey:u,expiresAt:t,permissions:f,userId:l,allowedConnectionTypes:c=["WEBSOCKET"]}){let E=Whu(i),$=OAi(E.sub),w=Yb(new TextEncoder().encode(u)),d=qp();try{let _=await Vp(l,d,$,{pub:{allow:f.publish.allow},sub:{allow:f.subscribe.allow},allowed_connection_types:c},{algorithm:Vc.v2,exp:Math.floor(t.getTime()/1000),signer:w});return new TextDecoder().decode(rp(_,d))}finally{N5u(d),N5u(w),N5u($)}}var Dp0=N(()=>{UAi()});function JI4(i){return/^wss?:\/\//i.test(i.trim())?["WEBSOCKET"]:["STANDARD","WEBSOCKET"]}function gp0(){let i=new Hu;return i.post("/links/session",async(u)=>{let f=u.get("meshContext").auth?.user?.id;if(!f)return u.json({error:"Unauthorized"},401);let l=yu();if(!l.natsTunnelPublicEnabled)return u.json(O5u(),503);if(!l.natsPublicUrl)return u.json(O5u(),503);if(!l.natsAccountJwt||!l.natsAccountSigningKey){if(!l.localMode)return u.json(O5u(),503)}let c=f5(f),E;if(l.natsAccountJwt&&l.natsAccountSigningKey){let $=new Date(Date.now()+l.natsTunnelSessionTtlSeconds*1000);E=await hp0({accountJwt:l.natsAccountJwt,accountSigningKey:l.natsAccountSigningKey,expiresAt:$,permissions:gMu(c),userId:f,allowedConnectionTypes:JI4(l.natsPublicUrl)})}return u.json(NMu({publicUrl:l.natsPublicUrl,userId:f,ttlSeconds:l.natsTunnelSessionTtlSeconds,credentials:E}))}),i}var O5u=()=>({error:"link session unavailable"});var Np0=N(()=>{sf();xt();FQi();Dp0()});async function YI4(i,u){try{return!await i.alive(u)}catch(t){return console.warn(`[vm-events] alive probe failed for ${u}; assuming alive: ${t instanceof Error?t.message:String(t)}`),!1}}async function WI4(i){let{ctx:u,runner:t,claimName:f,userId:l,projectRef:c,sandboxProviderKind:E}=i;try{await t.delete(f)}catch($){console.warn(`[vm-events] runner.delete failed for ${f}: ${$ instanceof Error?$.message:String($)}`)}try{await new tg(u.db).delete({userId:l,projectRef:c},E)}catch($){console.warn(`[vm-events] sandbox_runner_state delete failed for ${l}/${c}/${E}: ${$ instanceof Error?$.message:String($)}`)}}async function LI4(i){let{stream:u,claimName:t,runner:f,signal:l}=i;return new Promise((c)=>{let E=!1,$=!1,w=null,d=(h)=>{if(E)return;E=!0,clearTimeout(_),l.removeEventListener("abort",v),w?.unsubscribe(),c(h)},_=setTimeout(()=>{if($||E)return;u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"claim-never-created",message:"Sandbox claim was never created. The SANDBOX_START call may have failed earlier \u2014 check the start error."})}).catch(()=>{}),d(!1)},KI4),v=()=>d(!1);l.addEventListener("abort",v,{once:!0}),w=ja(f,t,(h)=>{if(E)return;if(h.kind!=="claiming")$=!0;if(u.writeSSE({event:"phase",data:JSON.stringify(h)}).catch(()=>{}),h.kind==="ready")d(!0);else if(h.kind==="failed")d(!1)})})}async function zI4(i){let{stream:u,runner:t,claimName:f,signal:l}=i,c=Date.now(),E=null;while(!l.aborted){let w=null;try{w=await t.proxyDaemonRequest(f,"/_sandbox/events",{method:"GET",headers:new Headers({accept:"text/event-stream"}),body:null,signal:l})}catch(d){if(l.aborted)return;if(Date.now()-c<Op0){await Zt(Zp0,{signal:l}).catch(()=>{});continue}let _=d instanceof Error?d.message:String(d);await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE error: ${_}`})}).catch(()=>{});return}if(w.status===404){try{await w.body?.cancel()}catch{}if(Date.now()-c<Op0){await Zt(Zp0,{signal:l}).catch(()=>{});continue}await u.writeSSE({event:"gone",data:""}).catch(()=>{});return}if(!w.ok||!w.body){try{await w.body?.cancel()}catch{}await u.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:`Upstream daemon SSE failed (${w.status}).`})}).catch(()=>{});return}E=w;break}if(!E||!E.body)return;let $=E.body.getReader();try{while(!l.aborted){let{value:w,done:d}=await $.read();if(d)break;if(w)await u.write(w)}}catch{}finally{try{$.releaseLock()}catch{}}}var KI4=90000,SI4=15000,Bp0=()=>{let i=new Hu;return i.get("/",async(u)=>{let t=u.var.meshContext;try{Si(t)}catch{return u.json({error:"Unauthorized"},401)}let f=Vu(t);if(!f)return u.json({error:"Unauthorized"},401);let l;try{l=Bi(t)}catch{return u.json({error:"Organization scope required"},403)}let c=u.req.query("virtualMcpId"),E=u.req.query("branch");if(!c||!E)return u.json({error:"virtualMcpId and branch are required"},400);let $=await t.storage.virtualMcps.findById(c);if(!$||$.organization_id!==l.id)return u.json({error:"Virtual MCP not found"},404);let w=D8({orgId:l.id,virtualMcpId:c,branch:E}),d=IH({userId:f,projectRef:w},E),_=$.metadata??null,v,h=null,D=null;try{let Z=await v_(t,{userId:f,branch:E,virtualMcpMetadata:_});v=Z.provider,h=Z.kind}catch(Z){D=Z instanceof Error?Z:Error(String(Z)),v=null}let g=h&&O8(T6(_),f,E,h),O=!!g&&g.sandboxHandle===d;if(!v)return Wd(u,async(Z)=>{await Z.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:D?.message??"No sandbox runner configured on this mesh."})})});return u.header("X-Accel-Buffering","no"),u.header("Content-Encoding","identity"),Wd(u,async(Z)=>{let B=new AbortController,F=setInterval(()=>{Z.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(F)})},SI4);Z.onAbort(()=>{B.abort(),clearInterval(F)});try{if(O&&h){if(await YI4(v,d)){await WI4({ctx:t,runner:v,claimName:d,userId:f,projectRef:w,sandboxProviderKind:h}),await Z.writeSSE({event:"gone",data:""}).catch(()=>{});return}}if(!await LI4({stream:Z,claimName:d,runner:v,signal:B.signal})||B.signal.aborted)return;await zI4({stream:Z,runner:v,claimName:d,signal:B.signal})}finally{clearInterval(F)}})}),i},Op0=60000,Zp0=500;var Fp0=N(()=>{sf();$K();$3();Bl();fPi();Xa();yQ();Wdi();Td()});function HI4(i){return i.filter((u)=>u.vendors?.alias).map((u)=>({name:u.name,title:u.title,description:u.description,logo:u.logo,category:u.category,vendor:{alias:u.vendors.alias,url:u.vendors.url}}))}async function bI4(i,u){let t=await fetch(`${i}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:u,Authorization:`Bearer ${u}`,Accept:"application/json"},signal:AbortSignal.timeout(QI4)});if(!t.ok){let f=await t.text().catch(()=>t.statusText);throw console.error(`[deco-apps] Supabase error (${t.status}): ${f.slice(0,200)}`),Error(`External service error (${t.status})`)}return await t.json()}var QI4=1e4,RI4=async(i,u)=>{if(!i.get("meshContext").auth.user?.id)return i.json({error:"Unauthorized"},401);return u()},yp0=()=>{let i=new Hu;return i.use("*",RI4),i.get("/",async(u)=>{let t=yu(),f=t.decoSupabaseUrl,l=t.decoSupabaseServiceKey;if(!f||!l)return u.json({apps:[]});try{let c=await bI4(f,l);return u.json({apps:HI4(c)})}catch(c){return console.error("[deco-apps] GET error:",c),u.json({error:"Failed to fetch apps"},502)}}),i};var Tp0=N(()=>{sf();xt()});import{z as Lu}from"zod";function Ah(i,u="invalid_request_error",t=null,f=null){return{error:{message:i,type:u,param:t,code:f}}}function sI4(i){if(!i)return null;let u=i.indexOf(":");if(u===-1)return{credentialId:null,modelId:i};let t=i.substring(0,u),f=i.substring(u+1);if(!t||!f)return null;return{credentialId:t,modelId:f}}function pI4(i,u,t){try{return JSON.parse(i)}catch{throw new xp0(`Invalid JSON in tool call arguments for function '${t}' (tool_call_id: ${u}): ${i}`)}}function iA4(i){let u={};for(let t of i)if(t.role==="assistant"&&t.tool_calls)for(let f of t.tool_calls)u[f.id]=f.function.name;return i.map((t)=>{switch(t.role){case"system":return{role:"system",content:t.content};case"user":if(typeof t.content==="string")return{role:"user",content:t.content};return{role:"user",content:t.content.map((l)=>{if(l.type==="text")return{type:"text",text:l.text};return{type:"image",image:l.image_url.url}})};case"assistant":if(t.tool_calls&&t.tool_calls.length>0)return{role:"assistant",content:t.tool_calls.map((l)=>({type:"tool-call",toolCallId:l.id,toolName:l.function.name,input:pI4(l.function.arguments,l.id,l.function.name)}))};return{role:"assistant",content:t.content??""};case"tool":let f=u[t.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:t.tool_call_id,toolName:f,output:{type:"text",value:t.content}}]}}})}function uA4(i){let u=i.map((t)=>{let f=t.function.parameters?aw(t.function.parameters):aw({type:"object",properties:{}});return[t.function.name,ft({description:t.function.description,inputSchema:f})]});return Object.fromEntries(u)}function tA4(i){if(!i)return;return{openai:{response_format:i}}}function fA4(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Up0(i,u,t,f,l,c){let E={model:i,messages:u,tools:t,temperature:f.temperature,maxTokens:f.max_tokens,topP:f.top_p,frequencyPenalty:f.frequency_penalty,presencePenalty:f.presence_penalty,stopSequences:f.stop?Array.isArray(f.stop)?f.stop:[f.stop]:void 0,abortSignal:c};return l?{...E,providerOptions:l}:E}function Pp0(i){if(i==="tool-calls")return"tool_calls";if(i==="length")return"length";return"stop"}var CI4=256,MI4,qI4,VI4,rI4,mI4,eI4,aI4,oI4,xp0,Ip0,Ap0;var Gp0=N(()=>{Cf();sf();$K();MI4=Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string(),description:Lu.string().optional(),parameters:Lu.record(Lu.string(),Lu.unknown()).optional()})}),qI4=Lu.object({id:Lu.string(),type:Lu.literal("function"),function:Lu.object({name:Lu.string(),arguments:Lu.string()})}),VI4=Lu.discriminatedUnion("role",[Lu.object({role:Lu.literal("system"),content:Lu.string(),name:Lu.string().optional()}),Lu.object({role:Lu.literal("user"),content:Lu.union([Lu.string(),Lu.array(Lu.union([Lu.object({type:Lu.literal("text"),text:Lu.string()}),Lu.object({type:Lu.literal("image_url"),image_url:Lu.object({url:Lu.string(),detail:Lu.string().optional()})})]))]),name:Lu.string().optional()}),Lu.object({role:Lu.literal("assistant"),content:Lu.string().nullable().optional(),name:Lu.string().optional(),tool_calls:Lu.array(qI4).optional()}),Lu.object({role:Lu.literal("tool"),content:Lu.string(),tool_call_id:Lu.string()})]),rI4=Lu.object({type:Lu.literal("text")}),mI4=Lu.object({type:Lu.literal("json_object")}),eI4=Lu.object({type:Lu.literal("json_schema"),json_schema:Lu.object({name:Lu.string(),description:Lu.string().optional(),schema:Lu.record(Lu.string(),Lu.unknown()),strict:Lu.boolean().optional()})}),aI4=Lu.union([rI4,mI4,eI4]),oI4=Lu.object({model:Lu.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:Lu.array(VI4),stream:Lu.boolean().optional().default(!1),temperature:Lu.number().min(0).max(2).optional(),max_tokens:Lu.number().positive().optional(),top_p:Lu.number().min(0).max(1).optional(),frequency_penalty:Lu.number().min(-2).max(2).optional(),presence_penalty:Lu.number().min(-2).max(2).optional(),stop:Lu.union([Lu.string(),Lu.array(Lu.string())]).optional(),tools:Lu.array(MI4).optional(),tool_choice:Lu.union([Lu.literal("auto"),Lu.literal("none"),Lu.literal("required"),Lu.object({type:Lu.literal("function"),function:Lu.object({name:Lu.string()})})]).optional(),response_format:aI4.optional(),user:Lu.string().optional()});xp0=class xp0 extends Error{constructor(i){super(i);this.name="MessageConversionError"}};Ip0=new Hu;Ip0.post("/:org/v1/chat/completions",async(i)=>{let u=i.get("meshContext"),t=i.req.param("org");try{if(!u.auth.apiKey?.id)return i.json(Ah("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!u.organization)return i.json(Ah("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((u.organization.slug??u.organization.id)!==t)return i.json(Ah("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let f=await i.req.json(),l=oI4.safeParse(f);if(!l.success){let Z=l.error.issues[0]??{message:"Invalid request",path:[]};return i.json(Ah(`Invalid request: ${Z.message}`,"invalid_request_error",Z.path.length>0?Z.path.join("."):null),400)}let c=l.data,E=sI4(c.model);if(!E)return i.json(Ah("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:$}=E,{modelId:w}=E;if(!$){let Z=await u.storage.aiProviderKeys.list({organizationId:u.organization.id});if(Z.length===0)return i.json(Ah("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);$=Z[0].id}let d;try{d=await u.aiProviders.activate($,u.organization.id)}catch{return i.json(Ah(`AI provider credential not found or inaccessible: ${$}`,"invalid_request_error","model"),404)}let _=d.aiSdk.languageModel(w),v=iA4(c.messages),h=c.tools?uA4(c.tools):void 0,D=tA4(c.response_format),g=fA4(),O=Math.floor(Date.now()/1000);if(c.stream)return Wd(i,async(Z)=>{let B=Up0(_,v,h,c,D,i.req.raw.signal);try{let F=Fd(B),y=!1,T=0,U="",I=async()=>{if(U.length===0)return;let j=U;U="",await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{content:j},finish_reason:null}]})})};for await(let j of F.fullStream){if(!y&&(j.type==="text-delta"||j.type==="tool-call"))await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),y=!0;if(j.type==="text-delta"){if(U+=j.text,U.length>=CI4)await I()}else if(j.type==="tool-call"){await I();let A=T++;await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{tool_calls:[{index:A,id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify(j.input)}}]},finish_reason:null}]})})}else if(j.type==="finish")await I(),await Z.writeSSE({data:JSON.stringify({id:g,object:"chat.completion.chunk",created:O,model:c.model,choices:[{index:0,delta:{},finish_reason:Pp0(j.finishReason)}],usage:j.totalUsage?{prompt_tokens:j.totalUsage.inputTokens??0,completion_tokens:j.totalUsage.outputTokens??0,total_tokens:j.totalUsage.totalTokens??0}:void 0})})}await I(),await Z.writeSSE({data:"[DONE]"})}catch(F){let y=F;console.error("[openai-compat:stream] Error:",y.message),await Z.writeSSE({data:JSON.stringify({error:{message:y.message,type:"server_error"}})})}});else{let Z=Up0(_,v,h,c,D,i.req.raw.signal),B=await a9(Z),F={role:"assistant",content:B.text||null};if(B.toolCalls&&B.toolCalls.length>0)F.tool_calls=B.toolCalls.map((y)=>({id:y.toolCallId,type:"function",function:{name:y.toolName,arguments:JSON.stringify("input"in y?y.input:{})}})),F.content=null;return i.json({id:g,object:"chat.completion",created:O,model:c.model,choices:[{index:0,message:F,finish_reason:Pp0(B.finishReason)}],usage:{prompt_tokens:B.usage?.inputTokens??0,completion_tokens:B.usage?.outputTokens??0,total_tokens:B.usage?.totalTokens??0}})}}catch(f){let l=f;if(l.name==="AbortError")return i.json(Ah("Request aborted","invalid_request_error"),400);if(l.name==="MessageConversionError")return i.json(Ah(l.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",l.message,l.stack),i.json(Ah(l.message,"server_error"),500)}});Ap0=Ip0});function cA4(){let i=process.env.POSTHOG_KEY;if(!i)return null;return{key:i,host:process.env.POSTHOG_HOST??lA4}}var np0,lA4="https://ph.studio.decocms.com",kp0;var jp0=N(()=>{sf();cri();Bg();HE();xt();Jwu();np0=new Hu;np0.get("/",(i)=>{let u={theme:uf0(),...rO().logo&&{logo:rO().logo},...xd()&&{internalUrl:P4i()},...yu().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!yu().firecrawlApiKey,auth:kV0(),posthog:cA4(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!xd()&&yu().sandboxProviderKind==="agent-sandbox"}};return i.json({success:!0,config:u})});kp0=np0});function Xp0(i,u){if(u.startsWith("text/html")||u.startsWith("image/svg"))i.set("Content-Security-Policy","sandbox allow-scripts allow-modals")}var Jp0,EA4,$A4,Kp0;var Sp0=N(()=>{sf();n5();AQ();gW();Jp0=new Hu,EA4=["range","if-none-match","if-modified-since"],$A4=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Jp0.get("/:org/files/*",async(i)=>{let u=i.get("meshContext"),t=u.organization?.id;if(!u.auth?.user?.id){if(YH(i))return i.redirect(`/login?next=${encodeURIComponent(i.req.path)}`,302);throw new P0(401,{message:"Authentication required"})}if(!t)throw new P0(401,{message:"Organization context required"});let f=i.req.path.replace(/^.*\/files\//,"");if(!f)throw new P0(400,{message:"Missing file key"});let l=await La(f,u);if(!l)throw new P0(503,{message:"Object storage not configured"});if(l.startsWith("data:")&&G5()){let w=l.match(/^data:([^;]+);base64,(.+)$/s);if(!w)throw new P0(500,{message:"Invalid data URL from storage"});let[,d,_]=w,v=Buffer.from(_,"base64"),h=new Headers({"Content-Type":d,"Cache-Control":"private, max-age=86400"});return Xp0(h,d),new Response(v,{status:200,headers:h})}let c=new Headers;for(let w of EA4){let d=i.req.header(w);if(d)c.set(w,d)}let E=await fetch(l,{headers:c});if(E.status===403||E.status===404)throw new P0(404,{message:"File not found"});if(!E.ok&&E.status!==304&&E.status!==416)throw console.error(`[files] upstream storage error ${E.status} for key:`,f),new P0(502,{message:"Upstream storage error"});let $=new Headers;for(let w of $A4){let d=E.headers.get(w);if(d)$.set(w,d)}return $.set("Cache-Control","private, max-age=86400"),Xp0($,$.get("content-type")??""),new Response(E.body,{status:E.status,headers:$})});Kp0=Jp0});function zp0(i){let u=i?.connectFn??vA4,t=null,f=null,l=!1,c=!1,E=!1,$=[];function w(){return t!==null&&!t.isClosed()&&!t.isDraining()&&!E}function d(){console.log(`[NatsProvider] fireReady: ${$.length} callbacks`);for(let h of $)try{h()}catch{}}function _(h){(async()=>{for await(let D of h.status())if(D.type==="disconnect")console.log("[NatsProvider] Disconnected"),E=!0;else if(D.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),E=!1,f=null,d()})().catch(()=>{})}async function v(h,D){let g=0;while(!c)try{t=await u({servers:h,timeout:_A4,reconnect:!0,maxReconnectAttempts:-1,...D?{authenticator:D}:{}}),console.log(`[NatsProvider] Connected to ${t.getServer()} after ${g} attempt(s)`),f=null,E=!1,_(t),d();return}catch{g++;let O=uc(dA4,wA4,g-1,2,0.5);await Zt(O)}}return{init(h,D){if(l)return;l=!0,c=!1;let g=D?.creds?Yp0.credsAuthenticator(new TextEncoder().encode(D.creds)):void 0;v(h,g).catch(()=>{})},isConnected(){return w()},getConnection(){return w()?t:null},getJetStream(){if(!w())return null;if(!f)f=Lp0.jetstream(t);return f},onReady(h){if($.push(h),w())try{h()}catch{}},async drain(){if(c=!0,l=!1,f=null,E=!1,t){let h=t;t=null,await h.drain().catch(()=>{})}}}}function vA4(i){return Wp0.connect(i)}var Yp0,Wp0,Lp0,wA4=100,dA4=3000,_A4=3000;var Qp0=N(()=>{Bl();Yp0=k(gO(),1),Wp0=k(BQi(),1),Lp0=k(o2(),1)});function tb(i){let u=i?.ttlMs??60000,t=i?.maxSize??1e4,f=i?.updateRecencyOnGet??!1,l=new Map;function c(){if(l.size<=t)return;let E=Date.now();for(let[$,w]of l)if(w.expiresAt<=E)l.delete($);while(l.size>t){let $=l.keys().next().value;if($===void 0)break;l.delete($)}}return{get(E){let $=l.get(E);if(!$)return;if($.expiresAt<=Date.now()){l.delete(E);return}if(f)l.delete(E),l.set(E,$);return $.value},set(E,$){l.delete(E),l.set(E,{value:$,expiresAt:Date.now()+u}),c()},delete(E){l.delete(E)},clear(){l.clear()},size(){return l.size}}}function Z5u(i,u){return`${i}.${u}`}class B5u{cache;constructor(i){this.cache=tb({ttlMs:i?.ttlMs??hA4,maxSize:i?.maxSize??DA4})}async get(i,u){return this.cache.get(Z5u(i,u))??null}async set(i,u,t){this.cache.set(Z5u(i,u),t)}async invalidate(i,u){this.cache.delete(Z5u(i,u))}teardown(){this.cache.clear()}}var hA4=600000,DA4=5000;var Hp0=()=>{};function vxi(i,u){return`${i}:${u}`}function F5u(i){let u=tb({ttlMs:i?.ttlMs??gA4,maxSize:i?.maxSize??NA4}),t=i?.getConnection,f=crypto.randomUUID(),l=new TextEncoder,c=new TextDecoder,E=null;function $(w,d){let _=t?.();if(!_)return;try{_.publish(bp0,l.encode(JSON.stringify({organizationId:w,keyId:d,originId:f})))}catch(v){console.warn("[ProviderKeyCache] Publish failed (non-critical):",v)}}return{get(w,d){return u.get(vxi(w,d))},set(w,d,_){u.set(vxi(w,d),_)},invalidate(w,d){u.delete(vxi(w,d)),$(w,d)},start(){if(E)return;let w=t?.();if(!w)return;E=w.subscribe(bp0),(async()=>{for await(let d of E)try{let _=JSON.parse(c.decode(d.data));if(_.originId===f)continue;u.delete(vxi(_.organizationId,_.keyId))}catch{}})().catch(console.error)},teardown(){E?.unsubscribe(),E=null,u.clear()}}}var bp0="studio.ai-provider-keys.invalidate",gA4=30000,NA4=5000;var Rp0=()=>{};class y5u{options;sub=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor(i){this.options=i}async start(i){if(i)this.onCancel=i;if(this.sub)return;if(!this.onCancel)return;let u=this.options.getConnection();if(!u)return;this.sub=u.subscribe("mesh.decopilot.cancel");let t=new TextDecoder;(async()=>{for await(let f of this.sub)try{let l=JSON.parse(t.decode(f.data));if(l.originId===this.originId)continue;this.onCancel?.(l.taskId)}catch{}})().catch(console.error)}broadcast(i){if(/[.*>\s]/.test(i)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.(i);try{let u=this.options.getConnection();if(!u)return;u.publish("mesh.decopilot.cancel",this.encoder.encode(JSON.stringify({taskId:i,originId:this.originId})))}catch(u){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",u)}}publishControlFrame(i,u){}async stop(){this.sub?.unsubscribe(),this.sub=null,this.onCancel=null}}function UA4(){return{name:_8,subjects:[`${VQi}.>`],storage:x_.StorageType.File,max_age:BA4,max_bytes:yA4,max_msgs_per_subject:TA4,discard:x_.DiscardPolicy.Old,retention:x_.RetentionPolicy.Limits,duplicate_window:FA4,num_replicas:1}}class qp0{chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record(i,u){if(this.chunks++,this.encodeMs+=i,i>this.maxMs)this.maxMs=i;this.bytes+=u}flush(){let i=performance.now(),u=i-this.windowStart;if(this.chunks>0&&u>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(u),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/u*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=i}}function Cp0(i){let u=Mp0.headers();for(let[t,f]of Object.entries(i))u.set(t,f);return u}function AA4(i,u){let t=0;return{publish(f,l,c,E){f.publish(l,c,E?{headers:E}:void 0).catch(($)=>{if(t++,ZA4().add(1,{"org.id":u??"unknown"}),t===1||t%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${i} (${t} total):`,$)})},get errorCount(){return t}}}class T5u{options;js=null;jsm=null;constructor(i){this.options=i}async init(){let i=this.options.getConnection();if(!i){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let u=this.options.getJetStreamManager?await this.options.getJetStreamManager():await x_.jetstreamManager(i),t=UA4();try{await u.streams.info(_8),await u.streams.update(_8,t)}catch(f){if(f instanceof Error&&f.message.includes("stream not found"))await u.streams.add(t);else if(f instanceof Error&&/can ?not change.*storage|storage type/i.test(f.message))await u.streams.delete(_8),await u.streams.add(t);else throw f}this.js=this.options.getJetStream(),this.jsm=u,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump(i,u,t,f){let l=this.js;if(!l){console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${u}; chunks NOT published to NATS`);return}let c=AA4(u,f),E=!1,$=()=>{if(E)return;E=!0;let d=Rqu(u);l.publish(d.subject,d.data).catch(()=>{})};t.addEventListener("abort",$,{once:!0});let w=(d)=>{let _=performance.now(),v=ZY(d,{runId:u}),h=performance.now()-_;if(cM().record(h),EM().add(1,{"org.id":f??"unknown"}),IA4?.record(h,v.reduce((D,g)=>D+g.data.length,0)),v.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${u}`);return}for(let D of v)c.publish(l,D.subject,D.data,D.headers?Cp0(D.headers):void 0)};(async()=>{let d=i.getReader(),_=0,v=0;try{while(!0){let{done:h,value:D}=await d.read();if(h)break;if(w(D),v++,++_>=64)_=0,await new Promise((g)=>setImmediate(g))}}catch(h){console.warn(`[Decopilot] stream pump error for thread ${u}:`,h?.message??h)}finally{if(d.releaseLock(),$(),xA4)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:u,publishedChunks:v,publishErrors:c.errorCount}))}})()}async publishRawChunk(i,u,t){let f=this.js;if(!f)return!1;let l=performance.now(),c=ZY(u,{runId:i,dedup:t});if(cM().record(performance.now()-l),EM().add(1),c.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${i} (> MAX_CHUNKED_BYTES)`),!0;for(let E of c)await f.publish(E.subject,E.data,{...E.headers?{headers:Cp0(E.headers)}:{},...E.msgId?{msgID:E.msgId}:{}});return!0}async publishDone(i,u,t){let f=this.js;if(!f)return!1;let l=I1i({runId:i,fenceToken:u,finalSeq:t});return await f.publish(l.subject,l.data,{msgID:l.msgId}),!0}async createTailStream(i,u,t){let f=this.js;if(!f)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${i}; no live tail`),null;let l=t?.deliverPolicy==="new"?x_.DeliverPolicy.New:x_.DeliverPolicy.All,c=t?.closeOnDone??!1,E=s2(i),$;try{$=await(await f.consumers.get(_8,{filter_subjects:E,deliver_policy:l})).consume()}catch(O){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",O?.message??O),null}let _=_di({messages:async function*(){try{for await(let O of $)yield{subject:O.subject,data:O.data,headers:O.headers}}finally{$.stop()}}(),onCancel:()=>$.stop()}).pipeThrough(A1i()).pipeThrough(G1i()).getReader(),v=!1,h=()=>{if(v)return;v=!0;try{_.releaseLock()}catch{}},D=!1,g=()=>{if(D)return;D=!0,$.stop(),_.cancel().catch(()=>{}),h()};return u?.addEventListener("abort",g,{once:!0}),new ReadableStream({async pull(O){for(;;){let{done:Z,value:B}=await _.read();if(Z){g(),O.close();return}let F=B;if(F.kind==="done"){if(c){g(),O.close();return}continue}O.enqueue(F.chunk);return}},cancel(){g()}})}purge(i){if(!this.jsm)return;this.jsm.streams.purge(_8,{filter:s2(i)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var x_,Mp0,OA4=(i)=>{let u;return()=>u??=i()},ZA4,BA4=86400000000000,FA4=120000000000,yA4=4294967296,TA4=500000,PA4,xA4,IA4;var Vp0=N(()=>{Dtu();gtu();n1i();Q1();aQi();x_=k(o2(),1),Mp0=k(gO(),1),ZA4=OA4(()=>Mt.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));PA4=process.env.STREAM_ENCODE_TRACE==="1",xA4=process.env.DECOPILOT_STREAM_TRACE==="1";IA4=PA4?new qp0:null});function rp0(i){let u=i.createFetch??GA4,t=i.timeoutMs??2000;return async(f)=>{try{let l=i.getConnection();if(!l)return U5u;let c=f5(f),$=await u(l,t)(`tunnel://${c}/api/links/status`,{method:"GET"});if(!$.ok)return U5u;let w=await $.json();return{online:!0,hostname:w.hostname,capabilities:w.capabilities??[],cliVersion:w.cliVersion}}catch{return U5u}}}var U5u,GA4=(i,u)=>C2({connection:i,firstFrameTimeoutMs:u});var mp0=N(()=>{WC();aC();U5u={online:!1,capabilities:[]}});async function*nA4(i){if(!i.body){yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};return}let u=i.body.getReader(),t=!1;try{yield{headers:{status:i.status,headers:Object.fromEntries(i.headers.entries())}};while(!0){let{done:f,value:l}=await u.read();if(f){t=!0;return}yield{data:Buffer.from(l).toString("base64")}}}finally{try{if(!t)await u.cancel()}catch{}finally{u.releaseLock()}}}function ep0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:kA4}));return async function*(f,l,c){let E=i.getConnection();if(!E)throw Error("link_unavailable: NATS unavailable");let $=f5(f),w=u(E),d={method:l.method,headers:l.headers,signal:c?.signal};if(l.body!=null)d.body=l.body;let _=await w(`tunnel://${$}${l.path}`,d);yield*nA4(_)}}var kA4=45000;var ap0=N(()=>{WC();aC()});function op0(i){let u=i.createFetch??((t)=>C2({connection:t,idleTimeoutMs:jA4}));return{async publish(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=f5(t),w=await u(c)(`tunnel://${E}/api/links/work`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel work publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}function sp0(i){let u=i.createFetch??C2;return{async publishControlFrame(t,f,l){let c=i.getConnection();if(!c)throw Error("link_unavailable: NATS unavailable");let E=f5(t),w=await u(c)(`tunnel://${E}/api/links/control`,{method:"POST",headers:{"content-type":"application/json"},body:lVu(f),signal:l?.signal});if(!w.ok){let d=await w.text().catch(()=>"");throw Error(`tunnel control publish failed (${w.status})${d?`: ${d}`:""}`)}await w.body?.cancel().catch(()=>{})}}}var jA4=45000;var pp0=N(()=>{WC();tHi();aC()});function iit(i,u){switch(i.type){case"START":{let t={type:"RUN_STARTED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,runConfig:i.runConfig,podId:i.podId};if(u?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:i.taskId,orgId:u.orgId},t];return[t]}case"STEP_DONE":{if(u?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:u.status.stepCount+1}]}case"FINISH":{if(u==null||u.status.tag!=="running")return[];let{stepCount:t}=u.status;if(i.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:i.taskId,orgId:u.orgId,stepCount:t}];if(i.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:i.taskId,orgId:u.orgId,stepCount:t}];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"error"}]}case"CANCEL":{if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:"cancelled"}]}case"RESUME":{if(u?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:i.taskId,orgId:i.orgId,userId:i.userId,abortController:i.abortController,podId:i.podId}]}case"FORCE_FAIL":{if(i.reason==="ghost")return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u?.orgId??i.orgId,reason:i.reason}];if(u?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:i.taskId,orgId:u.orgId,reason:i.reason}]}}}function uit(i,u,t=new Date){switch(u.type){case"RUN_STARTED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"RUN_RESUMED":return{taskId:u.taskId,orgId:u.orgId,userId:u.userId,status:{tag:"running",abortController:u.abortController,stepCount:0,startedAt:t}};case"STEP_COMPLETED":if(i?.status.tag!=="running")return i;return{...i,status:{...i.status,stepCount:u.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}async function tit(i,u,t,f){let{storage:l,sseHub:c}=f,E=await l.get(i,u);c.emit(u,A5(i,t,{virtualMcpId:E?.virtual_mcp_id??void 0,createdBy:E?.created_by,triggerId:E?.trigger_id,title:E?.title,branch:E?.branch??null,createdAt:E?.created_at,updatedAt:E?.updated_at})),c.emit(u,Iq(i,t))}async function XA4(i,u){let{storage:t,streamBuffer:f,sseHub:l}=u;switch(i.type){case"RUN_STARTED":{await t.update(i.taskId,i.orgId,{status:"in_progress",run_config:i.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null});let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at}));return}case"RUN_RESUMED":{await t.update(i.taskId,i.orgId,{run_started_at:new Date().toISOString()});let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"in_progress",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at}));return}case"STEP_COMPLETED":l.emit(i.orgId,e6i(i.taskId,i.stepCount));return;case"RUN_COMPLETED":await tit(i.taskId,i.orgId,"completed",u);return;case"RUN_REQUIRES_ACTION":await tit(i.taskId,i.orgId,"requires_action",u);return;case"RUN_FAILED":{if(i.reason==="ghost"){if(!await t.forceFailIfInProgress(i.taskId,i.orgId))return;await t.update(i.taskId,i.orgId,{run_config:null,run_started_at:null})}else await t.update(i.taskId,i.orgId,{status:"failed",run_config:null,run_started_at:null});f.purge(i.taskId);let c=await t.get(i.taskId,i.orgId);l.emit(i.orgId,A5(i.taskId,"failed",{virtualMcpId:c?.virtual_mcp_id??void 0,createdBy:c?.created_by,triggerId:c?.trigger_id,title:c?.title,branch:c?.branch??null,createdAt:c?.created_at,updatedAt:c?.updated_at})),l.emit(i.orgId,Iq(i.taskId,"failed"));return}case"PREVIOUS_RUN_ABORTED":return}}async function fit(i,u){for(let{event:t}of i)await XA4(t,u)}var lit=N(()=>{wf()});function cit(i){return i.now-i.lastProgressAt>i.idleTimeoutMs}function Eit(i){return Math.max(i.persistedLastProgressAt??Number.NEGATIVE_INFINITY,i.currentRunStartedAt)}class P5u{deps;clock;states=new Map;reaperTimer=null;constructor(i,u=()=>new Date){this.deps=i;this.clock=u;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((t)=>{console.error("[RunRegistry] Reaper sweep failed",t)})},JA4)}async execute(i){let u=this.dispatch(i);return await this.react(u),u}dispatch(i){let u=this.states.get(i.taskId),t=iit(i,u),f=[];for(let l of t){let c=this.states.get(l.taskId);if(l.type==="PREVIOUS_RUN_ABORTED"||l.type==="RUN_FAILED"){if(c?.status.tag==="running")c.status.abortController.abort()}let E=uit(c,l,this.clock());if(E===void 0)this.states.delete(l.taskId);else this.states.set(l.taskId,E);if(f.push({event:l,state:E}),KA4.has(l.type))wit().add(1,{"org.id":l.orgId});else if(SA4.has(l.type)&&c?.status.tag==="running")wit().add(-1,{"org.id":l.orgId})}return f}react(i){return fit(i,this.deps)}getAbortSignal(i){let u=this.states.get(i);if(u?.status.tag==="running")return u.status.abortController.signal;return null}isRunning(i){return this.states.get(i)?.status.tag==="running"}async stopAll(){for(let[,i]of this.states)if(i.status.tag==="running")i.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let i=this.clock().getTime(),u=[...this.states].filter(([,t])=>t.status.tag==="running");for(let[t,f]of u){if(this.states.get(t)?.status.tag!=="running")continue;let c;try{let $=await this.deps.storage.getProgress(t,f.orgId);c=Eit({persistedLastProgressAt:$?.lastProgressAt??null,currentRunStartedAt:f.status.startedAt.getTime()})}catch($){console.warn(`[RunRegistry] Reaper progress read failed for ${t}; skipping`,$);continue}if(!cit({lastProgressAt:c,now:i,idleTimeoutMs:$it}))continue;let E=await this.deps.storage.get(t,f.orgId).catch(()=>null);if(E&&E.status!=="in_progress"){let $=this.states.get(t);if($?.status.tag==="running")$.status.abortController.abort();this.states.delete(t);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${t} (idle > ${$it/60000}m) ...`),YA4().add(1,{"org.id":f.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:t,reason:"reaped"}).catch(($)=>{console.error("[RunRegistry] Reaper execute failed",$)})}}}var JA4=300000,$it=600000,KA4,SA4,dit=(i)=>{let u;return()=>u??=i()},wit,YA4;var _it=N(()=>{lit();Q1();KA4=new Set(["RUN_STARTED","RUN_RESUMED"]),SA4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),wit=dit(()=>Mt.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),YA4=dit(()=>Mt.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});function hxi(i,u,t,f){if(!f)return!1;return i.emit(u,A5(t,f.status,{title:f.title??void 0,virtualMcpId:f.virtual_mcp_id??void 0,createdBy:f.created_by??void 0,triggerId:f.trigger_id??null,branch:f.branch??null,createdAt:f.created_at,updatedAt:f.updated_at})),!0}var vit=N(()=>{wf()});class x5u{storage;options;timer=null;constructor(i,u={}){this.storage=i;this.options=u}start(){if(this.timer)return;let i=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},i)}async runOnce(){let i=this.options.staleAfterMs??3600000;try{let u=await this.storage.sweepAbandoned(i);if(u>0)console.log(`[async-research-sweeper] marked ${u} stale jobs as abandoned`);return u}catch(u){return console.error("[async-research-sweeper] sweep failed",u),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}import{readdir as WA4,rm as Dxi}from"fs/promises";import{join as gxi}from"path";async function Nxi(i){let u=new Date;u.setUTCDate(u.getUTCDate()-LA4),u.setUTCHours(0,0,0,0);let t=0;try{let f=await wK(i);for(let l of f)if(/^\d{4}$/.test(l))t+=await hit(i,l,u);else if(!l.startsWith(".")){let c=gxi(i,l),E=await wK(c);for(let w of E){if(!/^\d{4}$/.test(w))continue;t+=await hit(c,w,u)}if((await wK(c)).length===0)await Dxi(c,{recursive:!0,force:!0})}}catch(f){console.warn("monitoring retention cleanup failed:",f)}return t}async function hit(i,u,t){let f=0,l=gxi(i,u),c=await wK(l);for(let $ of c){if(!/^\d{2}$/.test($))continue;let w=gxi(l,$),d=await wK(w);for(let v of d){if(!/^\d{2}$/.test(v))continue;let h=new Date(`${u}-${$}-${v}T00:00:00Z`);if(isNaN(h.getTime()))continue;if(h<t){let D=gxi(w,v);await Dxi(D,{recursive:!0,force:!0}),f++}}if((await wK(w)).length===0)await Dxi(w,{recursive:!0,force:!0})}if((await wK(l)).length===0)await Dxi(l,{recursive:!0,force:!0});return f}async function wK(i){try{return(await WA4(i)).filter((t)=>!t.startsWith("."))}catch{return[]}}var LA4=30;var I5u=()=>{};import{DBOS as A5u,SchedulerMode as zA4}from"@dbos-inc/dbos-sdk";async function HA4(){let i=[ad(),mS(),wD()],u=0;for(let t of i)try{u+=await Nxi(t)}catch(f){console.error("[monitoring-retention] cleanup failed:",f)}return console.log(`[monitoring-retention] deleted ${u} day-dir(s) across ${i.length} signal dir(s)`),{deleted:u,dirs:i.length}}async function bA4(i,u){await A5u.runStep(()=>HA4(),{name:"monitoringRetention"})}function git(){if(Dit)return;Dit=!0;let i=A5u.registerWorkflow(bA4,{name:"monitoringRetentionWorkflow"});A5u.registerScheduled(i,{name:"monitoringRetentionWorkflow",crontab:QA4,mode:zA4.ExactlyOncePerIntervalWhenActive})}var QA4="23 4 * * *",Dit=!1;var Nit=N(()=>{jw();I5u()});function Oit(i){return async(u,t)=>{let f=await i.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",t).where("member.organizationId","=",u).executeTakeFirst();if(!f)return console.warn(`[automationContextFactory] User ${t} not found in org ${u} \u2014 returning null`),null;let l=await Y9.create();l.auth.user={id:t,role:f.role},l.organization={id:f.orgId,slug:f.orgSlug,name:f.orgName};let c=await xiu(i.db,u,f.role);return l.boundAuth=Piu({auth:l.authInstance,headers:new Headers,role:f.role,permissions:c,userId:t}),l.access=new JZ(t,void 0,l.boundAuth,f.role,"self"),swi(l,{id:f.orgId,slug:f.orgSlug}),l}}var Zit=N(()=>{KZ();Ne()});import{EventEmitter as RA4}from"events";var G5u;var Bit=N(()=>{UO();G5u=new RA4;G5u.on("request",(i)=>{o_(i)})});function Fit(){return async(i,u)=>{let t=Date.now(),f=i.req.method,l=i.req.path;if(l==="/api/auth/get-session"||l.includes("favicon")){await u();return}let c="",E=!1;if(l.startsWith("/mcp")&&f==="POST"){E=!0;try{if(i.req.header("Content-Type")?.includes("application/json")){let h=await i.req.raw.clone().json();if(h.method==="tools/call"&&h.params?.name){let D=fb(h.params.name),g=h.params.arguments||{},O=Object.keys(g).map((B)=>fb(B)),Z=O.length>0?O.slice(0,3).join(",")+(O.length>3?"\u2026":""):"";c=`${v1.tool}${D}${v1.dim}(${Z})${v1.reset}`}else if(h.method)c=`${v1.dim}${fb(h.method)}${v1.reset}`}}catch{}}let $=fb(l);if(l.startsWith("/mcp/conn_")){let _=l.split("/")[2]??"";$=`/mcp/${v1.mcp}${fb(_.slice(0,12))}\u2026${v1.reset}`}else if(l==="/mcp")$=`${v1.mcp}/mcp${v1.reset}`;else if(l==="/mcp/registry")$=`${v1.mcp}/mcp/registry${v1.reset}`;let w=MA4(f),d=E?"\u25C0":"\u2190";if(!ili())console.log(`${v1.dim}${d}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""}`);try{await u()}finally{let _=Date.now()-t,v=i.res.status,h=CA4(v),D=_<1000?`${_}ms`:`${(_/1000).toFixed(1)}s`,g=E?"\u25B6":"\u2192";if(!ili())console.log(`${v1.dim}${g}${v1.reset} ${w}${f}${v1.reset} ${$}${c?` ${c}`:""} ${h}${v}${v1.reset} ${v1.duration}${D}${v1.reset}`);G5u.emit("request",{method:f,path:fb(l),status:v,duration:_,timestamp:new Date})}}}var v1,CA4=(i)=>{if(i>=500)return v1.serverError;if(i>=400)return v1.clientError;if(i>=300)return v1.redirect;return v1.ok},MA4=(i)=>{return v1[i]||v1.reset},fb=(i)=>{return i.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var yit=N(()=>{UO();Bit();v1={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as xit}from"crypto";import{mkdir as qA4,readdir as VA4,rm as Tit,stat as Iit}from"fs/promises";import{join as k5u,relative as rA4}from"path";import{z as I0}from"zod";function Git(i){let u=i.replace(/[^a-zA-Z0-9_-]/g,"_");return k5u(mA4,u)}function nit(i){return i.replace(/^\/+/,"").replace(/\.\./g,"")}function n5u(i,u){let t=Git(i),f=nit(u);return k5u(t,f)}function eA4(i,u,t,f){let l=yu().encryptionKey||"dev-secret",c=`${i}:${u}:${t}:${f}`;return xit("sha256",l).update(c).digest("hex")}function Pit(i,u,t,f,l){let c=Math.floor(Date.now()/1000)+f,E=eA4(u,t,c,l),$=new URL(`/api/dev-assets/${u}/${nit(t)}`,i);return $.searchParams.set("expires",c.toString()),$.searchParams.set("signature",E),$.searchParams.set("method",l),$.toString()}function kit(i,u,t){let f=`${i}:${u.getTime()}:${t}`;return`"${xit("md5","etag").update(f).digest("hex")}"`}async function jit(i,u,t,f,l){try{let c=await VA4(i,{withFileTypes:!0});for(let E of c){let $=k5u(i,E.name),d=rA4(u,$).replace(/\\/g,"/");if(t&&!d.startsWith(t))continue;if(E.isDirectory())if(f){let _=d+"/";if(!t||_.startsWith(t)){if(!(t?d.slice(t.length):d).includes("/"))l.commonPrefixes.add(_)}}else await jit($,u,t,f,l);else if(E.isFile()){if(f&&t){let _=d.slice(t.length);if(_.includes(f)){let v=_.indexOf(f),h=t+_.slice(0,v+1);l.commonPrefixes.add(h);continue}}try{let _=await Iit($);l.objects.push({key:d,size:_.size,lastModified:_.mtime.toISOString(),etag:kit($,_.mtime,_.size)})}catch{}}}}catch{}}function Xit(i,u){let f=Bi(i).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:I0.object({prefix:I0.string().optional(),maxKeys:I0.number().optional().default(1000),continuationToken:I0.string().optional(),delimiter:I0.string().optional()}),outputSchema:I0.object({objects:I0.array(I0.object({key:I0.string(),size:I0.number(),lastModified:I0.string(),etag:I0.string()})),nextContinuationToken:I0.string().optional(),isTruncated:I0.boolean(),commonPrefixes:I0.array(I0.string()).optional()}),handler:async(l)=>{let c=l,E=c.prefix||"",$=c.maxKeys??1000,w=c.delimiter,d=c.continuationToken,_=Git(f);await qA4(_,{recursive:!0});let v={objects:[],commonPrefixes:new Set};await jit(_,_,E,w,v),v.objects.sort((Z,B)=>Z.key.localeCompare(B.key));let h=0;if(d){if(h=v.objects.findIndex((Z)=>Z.key>d),h===-1)h=v.objects.length}let D=v.objects.slice(h,h+$),g=h+$<v.objects.length,O=g?D[D.length-1]?.key:void 0;return{objects:D,isTruncated:g,nextContinuationToken:O,commonPrefixes:Array.from(v.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({contentType:I0.string().optional(),contentLength:I0.number(),lastModified:I0.string(),etag:I0.string(),metadata:I0.record(I0.string(),I0.string()).optional()}),handler:async(l)=>{let c=l,E=n5u(f,c.key),$=await Iit(E);return{contentType:Q3u(c.key),contentLength:$.size,lastModified:$.mtime.toISOString(),etag:kit(E,$.mtime,$.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Uit;return{url:Pit(u,f,c.key,E,"GET"),expiresIn:E}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:I0.object({key:I0.string(),expiresIn:I0.number().optional(),contentType:I0.string().optional()}),outputSchema:I0.object({url:I0.string(),expiresIn:I0.number()}),handler:async(l)=>{let c=l,E=c.expiresIn??Uit;return{url:Pit(u,f,c.key,E,"PUT"),expiresIn:E}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:I0.object({key:I0.string()}),outputSchema:I0.object({success:I0.boolean(),key:I0.string()}),handler:async(l)=>{let c=l,E=n5u(f,c.key);try{return await Tit(E),{success:!0,key:c.key}}catch{return{success:!1,key:c.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:I0.object({keys:I0.array(I0.string()).max(1000)}),outputSchema:I0.object({deleted:I0.array(I0.string()),errors:I0.array(I0.object({key:I0.string(),message:I0.string()}))}),handler:async(l)=>{let c=l,E=[],$=[];return await Promise.all(c.keys.map(async(w)=>{let d=n5u(f,w);try{await Tit(d),E.push(w)}catch(_){$.push({key:w,message:_ instanceof Error?_.message:"Unknown error"})}})),{deleted:E,errors:$}}}]}async function j5u(i,u,t){let f=Xit(u,t),l=new nD({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:k1});for(let E of f){let $="shape"in E.inputSchema?E.inputSchema.shape:I0.object({}).shape,w=E.outputSchema&&"shape"in E.outputSchema?E.outputSchema.shape:I0.object({}).shape;l.registerTool(E.name,{description:E.description??"",inputSchema:$,outputSchema:w,annotations:E.annotations,_meta:E._meta},async(d)=>{try{let _=await E.handler(d);return{content:[{type:"text",text:JSON.stringify(_)}],structuredContent:_}}catch(_){return{content:[{type:"text",text:`Error: ${_.message}`}],isError:!0}}})}let c=new g3({enableJsonResponse:i.headers.get("Accept")?.includes("application/json")??!1});return await l.connect(c),ch(l,c,i,"mcp:dev-assets")}async function Jit(i,u,t,f){let c=Xit(t,f).find((E)=>E.name===i);if(!c)return{content:[{type:"text",text:`Tool not found: ${i}`}],isError:!0};try{let E=await c.handler(u);return{content:[{type:"text",text:JSON.stringify(E)}]}}catch(E){return{content:[{type:"text",text:E instanceof Error?E.message:String(E)}],isError:!0}}}var mA4="./data/assets",Uit=3600,Ait,Kit;var Sit=N(()=>{xt();ba();sf();Gq();kQ();mE();XPi();Ait=new Hu;Ait.all("/",async(i)=>{let u=i.get("meshContext"),t=new URL(i.req.url),f=`${t.protocol}//${t.host}`;return j5u(i.req.raw,u,f)});Kit=Ait});var Yit={};Qi(Yit,{mountDevRoutes:()=>aA4});function aA4(i,u){i.all("/mcp/:connectionId{.*_dev-assets$}",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`;return j5u(f.req.raw,l,E)}),i.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",u,async(f)=>{let l=f.get("meshContext"),c=new URL(f.req.url),E=`${c.protocol}//${c.host}`,$=f.req.param("toolName");if(!$)return f.json({error:"Missing tool name"},400);let w=await f.req.json(),d=await Jit($,w,l,E);if(d.isError)return f.json(d.content,500);return f.json(d.content)}),i.use("/mcp/dev-assets",u),i.route("/mcp/dev-assets",Kit);let t=new Hu;t.use("*",Yd({mountPath:"/api/dev-assets"})),t.route("/",jPi({orgFromPath:!1})),i.route("/api/dev-assets",t)}var Wit=N(()=>{sf();J3u();XPi();Sit()});var Lit=N(()=>{Viu();riu();DB()});var Oxi=N(()=>{Lit()});var Qit={};Qi(Qit,{streamAgent:()=>zit,createDecopilotClient:()=>sA4});async function oA4(i){let{parseJsonEventStream:u,uiMessageChunkSchema:t}=await Promise.resolve().then(() => (Cf(),dtu));return u({stream:i,schema:t}).pipeThrough(new TransformStream({transform(f,l){if(!f.success)throw f.error;l.enqueue(f.value)}}))}async function zit(i,u,t,f,l){let{readUIMessageStream:c}=await Promise.resolve().then(() => (Cf(),dtu)),E=t.value??t.id;if(!E)throw Error("Agent binding has no id or value \u2014 cannot resolve agent");let $=f.credentialId??t.credentialId,w=f.thinking??t.thinking,d=w?.id,_={messages:f.messages,...d?{models:{credentialId:$,thinking:w,...f.fast??t.fast?{fast:f.fast??t.fast}:{}}}:{},agent:{id:E},temperature:f.temperature??t.temperature,toolApprovalLevel:f.toolApprovalLevel??t.toolApprovalLevel,mode:f.mode??t.mode??"default",...f.memory?{memory:f.memory}:{},...f.thread_id?{thread_id:f.thread_id}:{}},v=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json","x-mesh-token":u,Authorization:`Bearer ${u}`},body:JSON.stringify(_),signal:l?.signal});if(!v.ok){let D=await v.text().catch(()=>""),g=`HTTP ${v.status}`;try{let O=JSON.parse(D);if(O?.error)g=O.error}catch{if(D)g=D}throw Error(g)}if(!v.body)throw Error("Empty response body from decopilot stream");let h=await oA4(v.body);return c({stream:h})}function sA4(i){let{baseUrl:u,orgSlug:t,token:f}=i,l=`${u}/${t}/decopilot/runtime/stream`;return{stream(c,E){let $={__type:"@deco/agent",id:c.agent.id,credentialId:c.credentialId??"",thinking:c.thinking??{id:"",title:""},fast:c.fast,toolApprovalLevel:c.toolApprovalLevel,mode:c.mode,temperature:c.temperature};return zit(l,f,$,c,E)}}}import{z as yw}from"zod";function Hit(i){let u=i.properties;if(!u)return i;for(let t of Object.values(u)){let f=t.properties;if(!f?.__type?.const)continue;let l=f.__type.const,c=pA4.get(l);if(!c)continue;let E=c.map(($)=>({name:String($.name),...$.inputSchema&&{inputSchema:yw.toJSONSchema($.inputSchema)},...$.outputSchema&&{outputSchema:yw.toJSONSchema($.outputSchema)}}));f.__binding={const:E}}return i}var pA4,$J6,iG4=(i)=>{return typeof i==="object"&&i!==null&&i.__type==="@deco/agent"},J5u=(i)=>{return typeof i==="object"&&i!==null&&typeof i.__type==="string"&&i.__type!=="@deco/agent"&&typeof i.value==="string"},Zxi=(i,u,t)=>{let f=t?{"x-caller-app":t}:void 0;if(u.cookie)f??={},f.cookie=u.cookie;if(u.token)f??={},f["x-mesh-token"]=u.token;return{type:"HTTP",url:new URL(`/mcp/${i}`,u.meshUrl).href,token:u.token,headers:f}},uG4=(i,u,t)=>{let f=Zxi(i,u,t);return new Proxy(Wz.forConnection(f),{get(l,c){if(c==="value")return i;if(c==="__type")return t;return l[c]}})},tG4=(i,u)=>{let t=u.organizationSlug;if(!t)throw Error("organizationSlug is required for agent bindings");let f=`${u.meshUrl}/api/${t}/decopilot/runtime/stream`;return{STREAM:async(l,c)=>{let{streamAgent:E}=await Promise.resolve().then(() => Qit);return E(f,u.token,i,l,c)}}},X5u=(i,u)=>{if(i===null||i===void 0)return i;if(Array.isArray(i))return i.map((t)=>X5u(t,u));if(typeof i==="object"){if(iG4(i))return tG4(i,u);if(J5u(i))return uG4(i.value,u,i.__type);let t={};for(let[f,l]of Object.entries(i))t[f]=X5u(l,u);return t}return i},bit=(i)=>{return X5u(i.state,i)};var lb=N(()=>{Oxi();pA4=new Map;$J6=yw.object({id:yw.string(),title:yw.string(),capabilities:yw.object({vision:yw.boolean().optional(),text:yw.boolean().optional(),tools:yw.boolean().optional(),reasoning:yw.boolean().optional()}).passthrough().optional(),provider:yw.string().optional().nullable(),limits:yw.object({contextWindow:yw.number().optional(),maxOutputTokens:yw.number().optional()}).passthrough().optional()})});var fG4,Rit=(i,u,t)=>{if(!u)return null;if(i===void 0||i==="*")return"*";if(typeof i==="string")return i===u?i:null;if(Array.isArray(i))return i.includes(u)?u:null;if(typeof i==="function")return i(u,t)??null;return null},lG4=(i,u,t)=>{let f=u.headers.get("Origin"),l=Rit(t.origin,f,u);if(l)i.set("Access-Control-Allow-Origin",l);if(t.credentials)i.set("Access-Control-Allow-Credentials","true");if(t.exposeHeaders?.length)i.set("Access-Control-Expose-Headers",t.exposeHeaders.join(", "))},Cit=(i,u)=>{let t=new Headers,f=i.headers.get("Origin"),l=Rit(u.origin,f,i);if(l)t.set("Access-Control-Allow-Origin",l);if(u.credentials)t.set("Access-Control-Allow-Credentials","true");let c=u.allowMethods??fG4;t.set("Access-Control-Allow-Methods",c.join(", "));let E=i.headers.get("Access-Control-Request-Headers");if(u.allowHeaders?.length)t.set("Access-Control-Allow-Headers",u.allowHeaders.join(", "));else if(E)t.set("Access-Control-Allow-Headers",E);if(u.maxAge!==void 0)t.set("Access-Control-Max-Age",u.maxAge.toString());return new Response(null,{status:204,headers:t})},Mit=(i,u,t)=>{let f=new Headers(i.headers);return lG4(f,u,t),new Response(i.body,{status:i.status,statusText:i.statusText,headers:f})};var qit=N(()=>{fG4=["GET","HEAD","PUT","POST","DELETE","PATCH"]});function Vit(i=32){let t=new Uint8Array(i);return crypto.getRandomValues(t),Array.from(t,(f)=>"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[f%62]).join("")}function cG4(i){try{let u=new URL(i);return u.protocol==="https:"||u.hostname==="localhost"||u.hostname.endsWith(".localhost")||u.hostname==="127.0.0.1"||!u.protocol.startsWith("http")}catch{return!1}}function rit(i){return btoa(JSON.stringify(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function mit(i){try{let u=i.replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(u))}catch{return null}}function eit(i){return{handleProtectedResourceMetadata:(d)=>{let _=Gh(new URL(d.url)),v=`${_.origin}/mcp`;return Response.json({resource:v,authorization_servers:[_.origin],scopes_supported:["*"],bearer_methods_supported:["header"],resource_signing_alg_values_supported:["RS256","none"]})},handleAuthorizationServerMetadata:(d)=>{let v=Gh(new URL(d.url)).origin;return Response.json({issuer:v,authorization_endpoint:`${v}/authorize`,token_endpoint:`${v}/token`,registration_endpoint:`${v}/register`,scopes_supported:["*"],response_types_supported:["code"],response_modes_supported:["query"],grant_types_supported:["authorization_code","refresh_token"],token_endpoint_auth_methods_supported:["none","client_secret_post"],code_challenge_methods_supported:["S256","plain"]})},handleAuthorize:(d)=>{let _=Gh(new URL(d.url)),v=_.searchParams.get("redirect_uri"),h=_.searchParams.get("response_type"),D=_.searchParams.get("state"),g=_.searchParams.get("code_challenge"),O=_.searchParams.get("code_challenge_method");if(!v)return Response.json({error:"invalid_request",error_description:"redirect_uri required"},{status:400});if(h!=="code")return Response.json({error:"unsupported_response_type",error_description:"Only 'code' is supported"},{status:400});let Z=Gh(new URL(`${_.origin}/oauth/callback`)),B=Z.toString(),y=rit({redirectUri:v,clientState:D??void 0,codeChallenge:g??void 0,codeChallengeMethod:O??void 0,oauthCallbackUri:B});Z.searchParams.set("state",y);let T=i.authorizationUrl(Z.toString());return Response.redirect(T,302)},handleOAuthCallback:async(d)=>{let _=Gh(new URL(d.url)),v=_.searchParams.get("code"),h=_.searchParams.get("state"),D=_.searchParams.get("error"),g=h?mit(h):null;if(D){let O=_.searchParams.get("error_description")??"Authorization failed";if(g?.redirectUri){let Z=Gh(new URL(g.redirectUri));if(Z.searchParams.set("error",D),Z.searchParams.set("error_description",O),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}return Response.json({error:D,error_description:O},{status:400})}if(!v||!g)return Response.json({error:"invalid_request",error_description:"Missing code or state"},{status:400});try{let O=g.oauthCallbackUri??Gh(new URL(`${_.origin}/oauth/callback`)).toString(),Z={code:v,redirect_uri:O},B=await i.exchangeCode(Z),F={accessToken:B.access_token,tokenType:B.token_type,refreshToken:B.refresh_token,expiresIn:B.expires_in,scope:B.scope,codeChallenge:g.codeChallenge,codeChallengeMethod:g.codeChallengeMethod},y=rit(F),T=Gh(new URL(g.redirectUri));if(T.searchParams.set("code",y),g.clientState)T.searchParams.set("state",g.clientState);return Response.redirect(T.toString(),302)}catch(O){console.error("OAuth callback error:",O);let Z=Gh(new URL(g.redirectUri));if(Z.searchParams.set("error","server_error"),Z.searchParams.set("error_description","Failed to exchange authorization code"),g.clientState)Z.searchParams.set("state",g.clientState);return Response.redirect(Z.toString(),302)}},handleToken:async(d)=>{try{let _=d.headers.get("content-type")??"",v;if(_.includes("application/x-www-form-urlencoded")){let F=await d.formData();v=Object.fromEntries(F.entries())}else{let F=await d.json();if(typeof F!=="object"||F===null||Array.isArray(F))return Response.json({error:"invalid_request",error_description:"Request body must be a JSON object"},{status:400});v=F}let{code:h,code_verifier:D,grant_type:g,refresh_token:O}=v;if(g==="refresh_token"){if(typeof O!=="string"||!O)return Response.json({error:"invalid_request",error_description:"refresh_token is required and must be a string"},{status:400});if(!i.refreshToken)return Response.json({error:"unsupported_grant_type",error_description:"refresh_token grant not supported"},{status:400});let F;try{F=await i.refreshToken(O)}catch(T){if(T instanceof K5u)return Response.json({error:T.error,...T.errorDescription?{error_description:T.errorDescription}:{}},{status:400});throw T}let y={access_token:F.access_token,token_type:F.token_type};if(F.refresh_token)y.refresh_token=F.refresh_token;if(F.expires_in!==void 0)y.expires_in=F.expires_in;if(F.scope)y.scope=F.scope;return Response.json(y,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}if(g!=="authorization_code")return Response.json({error:"unsupported_grant_type",error_description:"Only authorization_code and refresh_token supported"},{status:400});if(typeof h!=="string"||!h)return Response.json({error:"invalid_request",error_description:"code is required and must be a string"},{status:400});let Z=mit(h);if(!Z||!Z.accessToken)return Response.json({error:"invalid_grant",error_description:"Invalid or expired code"},{status:400});if(Z.codeChallenge){if(typeof D!=="string"||!D)return Response.json({error:"invalid_grant",error_description:"code_verifier required and must be a string"},{status:400});let F;if(Z.codeChallengeMethod==="S256"){let T=new TextEncoder().encode(D),U=await crypto.subtle.digest("SHA-256",T);F=btoa(String.fromCharCode(...new Uint8Array(U))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}else F=D;if(F!==Z.codeChallenge)return Response.json({error:"invalid_grant",error_description:"Invalid code_verifier"},{status:400})}let B={access_token:Z.accessToken,token_type:Z.tokenType};if(Z.refreshToken)B.refresh_token=Z.refreshToken;if(Z.expiresIn!==void 0)B.expires_in=Z.expiresIn;if(Z.scope)B.scope=Z.scope;return Response.json(B,{headers:{"Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Token exchange error:",_),Response.json({error:"server_error",error_description:"Failed to process token request"},{status:500})}},handleClientRegistration:async(d)=>{try{let _=await d.json();if(!_.redirect_uris||_.redirect_uris.length===0)return Response.json({error:"invalid_redirect_uri",error_description:"At least one redirect_uri is required"},{status:400});for(let O of _.redirect_uris)if(!cG4(O))return Response.json({error:"invalid_redirect_uri",error_description:`Invalid redirect URI: ${O}`},{status:400});let v=Vit(32),h=_.token_endpoint_auth_method!=="none"?Vit(32):void 0,D=Math.floor(Date.now()/1000),g={client_id:v,client_secret:h,client_name:_.client_name,redirect_uris:_.redirect_uris,grant_types:_.grant_types??["authorization_code"],response_types:_.response_types??["code"],token_endpoint_auth_method:_.token_endpoint_auth_method??"client_secret_post",scope:_.scope,client_id_issued_at:D,client_secret_expires_at:0};if(i.persistence)await i.persistence.saveClient(g);return new Response(JSON.stringify(g),{status:201,headers:{"Content-Type":"application/json","Cache-Control":"no-store",Pragma:"no-cache"}})}catch(_){return console.error("Client registration error:",_),Response.json({error:"invalid_client_metadata",error_description:"Invalid client registration request"},{status:400})}},createUnauthorizedResponse:(d)=>{let h=`Bearer resource_metadata="${`${Gh(new URL(d.url)).origin}/.well-known/oauth-protected-resource`}", scope="*"`;return Response.json({jsonrpc:"2.0",error:{code:-32000,message:"Unauthorized: Authentication required"},id:null},{status:401,headers:{"WWW-Authenticate":h,"Access-Control-Expose-Headers":"WWW-Authenticate"}})},hasAuth:(d)=>d.headers.has("Authorization")}}var K5u,Gh=(i)=>{if(!(i.hostname==="localhost"||i.hostname.endsWith(".localhost")||i.hostname==="127.0.0.1"))i.protocol="https:";return i};var S5u=N(()=>{K5u=class K5u extends Error{error;errorDescription;constructor(i="invalid_grant",u){super(u??i);this.name="OAuthInvalidGrantError",this.error=i,this.errorDescription=u}}});import{AsyncLocalStorage as EG4}from"async_hooks";var ait,Ls;var Y5u=N(()=>{ait=new EG4,Ls={getStore:()=>{return ait.getStore()},run:(i,u,...t)=>ait.run(i,u,...t)}});var sit="SELF",Fxi=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},pit=(i)=>{return typeof i==="object"&&i!==null&&"handler"in i&&"events"in i&&typeof i.handler==="function"&&Array.isArray(i.events)},oit="::",iut=(i)=>{let u=i.indexOf(oit);if(u===-1)return null;let t=i.substring(0,u),f=i.substring(u+oit.length);return[t,f]},$G4=(i)=>{if(!i.startsWith("cron/"))return null;let u=i.substring(5),t=u.indexOf("/");if(t===-1)return null;let f=u.substring(0,t),l=u.substring(t+1);return[f,l]},uut=(i)=>{if(Fxi(i))return[];return Object.keys(i)},wG4=(i,u)=>{if(Fxi(i))return i.events;let t=i[u];if(!t)return[];if(pit(t))return t.events;return Object.keys(t)},Bxi=(i,u,t)=>{if(i===sit){if(!t)return console.warn("[Event] SELF binding used but no connectionId available"),null;return t}let f=u[i];if(!J5u(f))return console.warn(`[Event] Binding "${i}" not found in state`),null;return f.value},dG4=(i,u,t)=>{let f=u;if(Fxi(i)){let c=[];for(let E of i.events){let $=iut(E);if(!$){console.warn(`[Event] Global handler event "${E}" must be prefixed with BINDING:: (e.g., "SELF::${E}" or "DATABASE::${E}")`);continue}let[w,d]=$,_=Bxi(w,f,t);if(!_)continue;c.push({eventType:d,publisher:_})}return c}let l=[];for(let c of uut(i)){let E=Bxi(c,f,t);if(!E)continue;let $=wG4(i,c);for(let w of $)l.push({eventType:w,publisher:E})}return l},_G4=(i)=>{let u=new Map;for(let t of i){let f=t.source,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},vG4=(i)=>{let u=new Map;for(let t of i){let f=t.type,l=u.get(f)||[];l.push(t),u.set(f,l)}return u},hG4=(i)=>{let u={},t={},f=!1,l=0,c=[];for(let E of i){if(E.results)Object.assign(t,E.results);if(E.success===!1){if(f=!0,E.error)c.push(E.error)}if(E.processedCount!==void 0)l+=E.processedCount}if(Object.keys(t).length>0)u.results=t;if(u.success=!f,c.length>0)u.error=c.join("; ");if(l>0)u.processedCount=l;return u},DG4=async(i,u,t,f,l)=>{let c=f;if(Fxi(i)){let _=new Set;for(let h of i.events){let D=iut(h);if(!D)continue;let[g,O]=D,Z=Bxi(g,c,l);if(!Z)continue;_.add(`${Z}:${O}`)}let v=u.filter((h)=>{let D=`${h.source}:${h.type}`;return _.has(D)});if(v.length===0)return{success:!0};try{return await i.handler({events:v},t)}catch(h){return{success:!1,error:h instanceof Error?h.message:String(h)}}}let E=new Map;for(let _ of uut(i)){let v=Bxi(_,c,l);if(v)E.set(v,_)}let $=_G4(u),w=[];for(let[_,v]of $){let h=E.get(_);if(!h)continue;let D=i[h];if(!D)continue;if(pit(D)){w.push((async()=>{try{return await D.handler({events:v},t)}catch(Z){let B={};for(let F of v)B[F.id]={success:!1,error:Z instanceof Error?Z.message:String(Z)};return{results:B}}})());continue}let g=D,O=vG4(v);for(let[Z,B]of O){let F=g[Z];if(!F)continue;w.push((async()=>{try{let y=await F({events:B},t),T={};for(let U of B)T[U.id]=y;return{results:T}}catch(y){let T={};for(let U of B)T[U.id]={success:!1,error:y instanceof Error?y.message:String(y)};return{results:T}}})())}}let d=await Promise.all(w);if(d.length===0)return{success:!0};return hG4(d)},tut;var W5u=N(()=>{lb();tut={subscriptions:dG4,execute:DG4,parseCron:$G4}});function gG4(i,u){let t=Zxi("self",{meshUrl:i,token:u});return Wz.forConnection(t)}function NG4(i,u){switch(u.type){case"cron":return{automation_id:i,type:"cron",cron_expression:u.cron};case"event":return{automation_id:i,type:"event",connection_id:u.connectionId,event_type:u.eventType,params:u.params};case"webhook":return{automation_id:i,type:"webhook"}}}function fut(i,u,t){return async(f)=>{if(!i)throw Error("createAgent: missing meshUrl in MESH_REQUEST_CONTEXT");let l=gG4(i,u),E=(await l.COLLECTION_VIRTUAL_MCP_LIST({where:{operator:"and",conditions:[{field:["title"],operator:"eq",value:f.name}]},limit:1})).items.find((_)=>_.title===f.name);if(E)return{id:E.id,automations:[],automationIds:[],alreadyExisted:!0};let $=f.tools&&f.tools.length>0?f.tools.map((_)=>({connection_id:_.connectionId,selected_tools:_.tools??null,selected_resources:null,selected_prompts:null})):t?[{connection_id:t,selected_tools:null,selected_resources:null,selected_prompts:null}]:[],{item:w}=await l.COLLECTION_VIRTUAL_MCP_CREATE({data:{title:f.name,description:f.description,metadata:f.instructions?{instructions:f.instructions}:void 0,connections:$}}),d=[];for(let _ of f.automations??[]){let v=await l.AUTOMATION_CREATE({name:_.name,virtual_mcp_id:w.id,messages:_.messages,models:_.models,tools:_.tools,active:_.active??!0}),h=[];for(let D of _.triggers??[])try{let g=await l.AUTOMATION_TRIGGER_ADD(NG4(v.id,D));h.push({type:D.type,ok:!0,id:g.id,webhook:g.webhook??void 0})}catch(g){h.push({type:D.type,ok:!1,error:g instanceof Error?g.message:String(g)})}d.push({id:v.id,name:_.name,triggers:h})}return{id:w.id,automations:d,automationIds:d.map((_)=>_.id),alreadyExisted:!1}}}var L5u=N(()=>{lb();Oxi()});import{z as G6}from"zod";function r8(i){return{...i,execute:(u)=>{let t=zs(u.runtimeContext);return i.execute({...u,runtimeContext:t},t)}}}var zs=(i)=>{let u=Ls.getStore();if(!u){if(i)return i;throw Error("Missing context, did you forget to call State.bind?")}return u},lut=(i)=>{let u=i.runtimeContext.env.MESH_REQUEST_CONTEXT;return{connectionId:u?.connectionId,meshUrl:u?.meshUrl,token:u?.token}},OG4=({events:i,configuration:{state:u,scopes:t,onChange:f,onInstall:l}={}}={})=>{let c=u?Hit(G6.toJSONSchema(u)):{type:"object",properties:{}};return[...f||l||i?[r8({id:"ON_MCP_CONFIGURATION",description:"MCP Configuration On Change",inputSchema:G6.object({state:u??G6.unknown(),scopes:G6.array(G6.string()).describe("Array of scopes in format 'KEY::SCOPE' (e.g., 'GMAIL::GetCurrentUser')"),firstRun:G6.boolean().optional().describe("True on the first configuration save for this connection \u2014 fires onInstall."),vault:G6.object({baseUrl:G6.string(),org:G6.string(),subjectConnectionId:G6.string(),token:G6.string()}).optional()}),outputSchema:G6.object({}),execute:async(E)=>{let $=E.context.state,w=E.context.vault;if(await f?.(E.runtimeContext.env,{state:$,scopes:E.context.scopes,vault:w}),l&&E.context.firstRun){let{meshUrl:d,token:_,connectionId:v}=lut(E);await l(E.runtimeContext.env,{createAgent:fut(d,_,v),vault:w})}return Promise.resolve({})}})]:[],...i?.handlers?[r8({id:"ON_EVENTS",description:"Receive and process CloudEvents from the event bus. Returns per-event or batch results.",inputSchema:y3i,outputSchema:T3i,execute:async(E)=>{let $=E.runtimeContext.env,w=$.MESH_REQUEST_CONTEXT?.state,{connectionId:d}=lut(E);return tut.execute(i.handlers,E.context.events,$,w,d)}})]:[],r8({id:"MCP_CONFIGURATION",description:"MCP Configuration",inputSchema:G6.object({}),outputSchema:G6.object({stateSchema:G6.unknown(),scopes:G6.array(G6.string()).optional()}),execute:()=>{return Promise.resolve({stateSchema:c,scopes:[...t??[]]})}})]},cut=(i)=>{let u=null,t=null,f=null,l=!1,c=()=>{if(!l)console.warn("[runtime] Passing factory functions to tools/prompts/resources is deprecated. Pass createTool()/createPrompt()/createResource() instances directly."),l=!0},E=(D)=>typeof D==="object"&&D!==null&&(("id"in D)||("name"in D)||("uri"in D));async function $(D,g){if(!D)return[];return(await Promise.all(D.flatMap(async(O)=>{if(E(O))return[O];c();let Z=await O(g);if(Array.isArray(Z))return Z;return[Z]}))).flat()}let w=async(D)=>{if(u)return u;if(t)return t;return t=(async()=>{try{let g;if(typeof i.tools==="function")c(),g=await i.tools(D);else g=await $(i.tools,D);g.push(...OG4({...i}));let O;if(typeof i.prompts==="function")c(),O=await i.prompts(D);else O=await $(i.prompts,D);let Z;if(typeof i.resources==="function")c(),Z=await i.resources(D);else Z=await $(i.resources,D);let B={tools:g,prompts:O,resources:Z};return u=B,B}catch(g){throw t=null,g}})(),t},d=(D,g)=>{for(let O of g.tools)D.registerTool(O.id,{_meta:O._meta,title:O.title,description:O.description,annotations:O.annotations,inputSchema:O.inputSchema&&"shape"in O.inputSchema?O.inputSchema:G6.object({}),outputSchema:O.outputSchema&&typeof O.outputSchema==="object"&&"shape"in O.outputSchema?O.outputSchema:void 0},async(Z)=>{let B=zs(),F=await O.execute({context:Z,runtimeContext:B},B);if(F!=null&&typeof F==="object"&&"content"in F&&Array.isArray(F.content)&&F.content.every((y)=>y!=null&&typeof y==="object"&&("type"in y)&&typeof y.type==="string"))return F;return{structuredContent:F,content:[{type:"text",text:JSON.stringify(F)}]}});for(let O of g.prompts)D.registerPrompt(O.name,{title:O.title,description:O.description,argsSchema:O.argsSchema?O.argsSchema:G6.object({}).shape},async(Z)=>{let B=zs();return await O.execute({args:Z,runtimeContext:B},B)});for(let O of g.resources)D.resource(O.name,O.uri,{description:O.description,mimeType:O.mimeType},async(Z)=>{let B=zs(),F=await O.read({uri:Z,runtimeContext:B},B),y=F._meta??void 0;if(F.text!==void 0)return{contents:[{uri:F.uri,mimeType:F.mimeType,text:F.text,...y!==void 0?{_meta:y}:{}}]};else if(F.blob!==void 0)return{contents:[{uri:F.uri,mimeType:F.mimeType,blob:F.blob,...y!==void 0?{_meta:y}:{}}]};return{contents:[{uri:F.uri,mimeType:F.mimeType,text:""}]}})},_=async(D)=>{await i.before?.(D);let{instructions:g,...O}=i.serverInfo??{},Z=new nD({...O,name:O.name??"@deco/mcp-api",version:O.version??"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:k1,...g&&{instructions:g}}),B=await w(D);d(Z,B);let F="tools/list",y=Z.server._requestHandlers,T=y.get(F);if(T)y.set(F,async(U,I)=>{if(!f)f=await T(U,I);return f});return{server:Z,...B}};return{fetch:async(D,g)=>{let{server:O}=await _(g),Z=new g3;await O.connect(Z);let B=()=>{try{Z.close?.()}catch{}try{O.close?.()}catch{}};try{let F=await Z.handleRequest(D),y=F.headers.get("content-type");if(!(y?.includes("text/event-stream")||y?.includes("application/json-rpc"))||!F.body)return B(),F;let{readable:U,writable:I}=new TransformStream;return F.body.pipeTo(I).catch(()=>{}).finally(B),new Response(U,{status:F.status,statusText:F.statusText,headers:F.headers})}catch(F){throw B(),F}},callTool:async({toolCallId:D,toolCallInput:g})=>{let O=Ls.getStore();if(!O)throw Error("Missing state, did you forget to call State.bind?");let Z=O?.env,{tools:B}=await w(Z),y=B.find((U)=>U.id===D)?.execute;if(!y)throw Error(`Tool ${D} not found or does not have an execute function`);let T=zs();return y({context:g,runtimeContext:T},T)}}};var yxi=N(()=>{oiu();mE();Gq();kQ();lb();W5u();Y5u();L5u();W5u();L5u()});import{decodeJwt as Eut}from"jose";var ZG4=({env:i,server:u,url:t})=>{i.SELF=new Proxy({},{get:(f,l)=>{if(l==="toJSON")return null;return async(c)=>{return await u.callTool({toolCallId:l,toolCallInput:c})}}}),i.IS_LOCAL=(t?.startsWith("http://localhost")||t?.startsWith("http://127.0.0.1"))??!1},$ut=(i)=>()=>{return{...i??{}}},BG4=({env:i,server:u,tokenOrContext:t,url:f,authToken:l})=>{let c=i,E=l?l.split(" ")[1]:void 0,$;if(typeof t==="string"){let w=Eut(t),d=w.metadata??{};$={authorization:E,state:w.state??d.state??{},token:t,meshUrl:w.meshUrl??d.meshUrl,connectionId:w.connectionId??d.connectionId,organizationId:w.organizationId??d.organizationId,organizationName:w.organizationName??d.organizationName,organizationSlug:w.organizationSlug??d.organizationSlug,ensureAuthenticated:$ut(w.user??w.sub)}}else if(typeof t==="object"){$=t;let w=Eut(t.token),d=w.metadata??{},_=w.appName;$.authorization??=E,$.callerApp=_,$.connectionId??=w.connectionId??d.connectionId,$.organizationId??=w.organizationId??d.organizationId,$.organizationName??=w.organizationName??d.organizationName,$.organizationSlug??=w.organizationSlug??d.organizationSlug,$.ensureAuthenticated=$ut(w.user??w.sub)}else $={state:{},authorization:E,token:void 0,meshUrl:void 0,connectionId:void 0,ensureAuthenticated:()=>{throw Error("Unauthorized")}};return c.MESH_REQUEST_CONTEXT=$,$.state=bit($),ZG4({env:c,server:u,url:f}),c},FG4,wut=(i)=>{let u=cut(i),t=i.cors??FG4,f=i.oauth,l=f?eit(f):null,c=async(E,$,w)=>{let d=new URL(E.url);if(l){if(d.pathname==="/.well-known/oauth-protected-resource"||d.pathname==="/mcp/.well-known/oauth-protected-resource")return l.handleProtectedResourceMetadata(E);if(d.pathname==="/.well-known/oauth-authorization-server")return l.handleAuthorizationServerMetadata(E);if(d.pathname==="/authorize")return l.handleAuthorize(E);if(d.pathname==="/oauth/callback")return l.handleOAuthCallback(E);if(d.pathname==="/token"&&E.method==="POST")return l.handleToken(E);if((d.pathname==="/register"||d.pathname==="/mcp/register")&&E.method==="POST")return l.handleClientRegistration(E)}if(d.pathname==="/mcp"){if(E.method==="GET")return new Response("Method not allowed",{status:405});if(l&&!l.hasAuth(E)){let _=E.clone();try{if((await _.json())?.method!=="tools/list")return l.createUnauthorizedResponse(E)}catch{return l.createUnauthorizedResponse(E)}}return u.fetch(E,$,w)}if(d.pathname.startsWith("/mcp/call-tool")){let _=d.pathname.split("/").pop();if(!_)return new Response("Not found",{status:404});let v=await E.json(),h=await u.callTool({toolCallId:_,toolCallInput:v});return new Response(JSON.stringify(h),{headers:{"Content-Type":"application/json"}})}return i.fetch?.(E,$,w)||new Response("Not found",{status:404})};return{fetch:async(E,$,w)=>{if(new URL(E.url).pathname==="/_healthcheck")return new Response("OK",{status:200});if(t!==!1&&E.method==="OPTIONS")return Cit(E,t??{});let d=BG4({authToken:E.headers.get("authorization")??null,env:{...process.env,...$},server:u,tokenOrContext:E.headers.get("x-mesh-token")??void 0,url:E.url}),_=await Ls.run({req:E,env:d,ctx:w},async()=>await c(E,d,w));if(t!==!1)return Mit(_,E,t??{});return _}}};var dut=N(()=>{lb();qit();S5u();S5u();Y5u();yxi();yxi();lb();Oxi();FG4={origin:(i)=>{if(i.includes("localhost")||i.includes("127.0.0.1"))return i;return i},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"]}});import{z as z5u}from"zod";function UG4(i,u){let t=r8({id:"COLLECTION_REGISTRY_APP_LIST",description:"List public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:yH,outputSchema:TH,execute:async({context:$})=>{let w={limit:$.limit,offset:$.offset,cursor:$.cursor,tags:$.tags,categories:$.categories,where:$.where},d=`${u}:${JSON.stringify(w)}`,_=_ut.get(d);if(_)return _;let v=await i.listPublic(u,w);return _ut.set(d,v),v}}),f=r8({id:"COLLECTION_REGISTRY_APP_GET",description:"Get a public registry item by ID or name",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Bh,outputSchema:rJ,execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{item:null};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{item:d};return{item:null}}}),l=r8({id:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get available versions of a public registry item",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:Bh,outputSchema:z5u.object({versions:z5u.array(rJ.shape.item)}),execute:async({context:$})=>{let w=$.id??$.name;if(!w)return{versions:[]};let d=await i.findByIdOrName(u,w);if(d&&d.is_public)return{versions:[d]};return{versions:[]}}}),c=r8({id:"COLLECTION_REGISTRY_APP_SEARCH",description:"Search public registry items returning minimal data (id, title, tags, categories, is_public). Use this instead of LIST when you need to find items efficiently without loading full details.",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:QUi,outputSchema:HUi,execute:async({context:$})=>{return await i.search(u,$,{publicOnly:!0})}}),E=r8({id:"COLLECTION_REGISTRY_APP_FILTERS",description:"Get available tags and categories for public registry items",annotations:{readOnlyHint:!0,idempotentHint:!0},inputSchema:z5u.object({}),outputSchema:UH,execute:async()=>{return await i.getFilters(u,{publicOnly:!0})}});return[t,c,f,l,E]}function vut(i){let u=i.db,t=new LL(u);return async(f)=>{let l=f.req.param("orgSlug")??f.req.param("org");if(!l)return f.json({error:"Organization not found"},404);let c=await u.selectFrom("organization").select(["id","slug","name"]).where("slug","=",l).executeTakeFirst();if(!c)return f.json({error:"Organization not found"},404);let E=UG4(t,c.id),$=wut({tools:E}),w=new URL(f.req.url),d=f.req.path.indexOf("/registry"),_=d>=0?f.req.path.slice(d+9):"",v=new URL(_||"/",w.origin);w.searchParams.forEach((g,O)=>{v.searchParams.set(O,g)});let h=new Request(v.toString(),{method:f.req.method,headers:f.req.raw.headers,body:f.req.method!=="GET"&&f.req.method!=="HEAD"?f.req.raw.body:void 0}),D={organizationId:c.id,db:u,MESH_REQUEST_CONTEXT:{},MESH_APP_DEPLOYMENT_ID:"public-registry",IS_LOCAL:!1};return await $.fetch(h,D,f)}}var yG4=3600000,TG4=500,_ut;var hut=N(()=>{dut();yxi();ioi();Ol();_ut=tb({ttlMs:yG4,maxSize:TG4,updateRecencyOnGet:!0})});import{sql as PG4}from"kysely";import{randomUUID as Dut}from"crypto";import{z as xG4}from"zod";async function AG4(i){let u=new Date().toISOString(),t=Dut(),f=U4.SELF(i.organizationId),l="registry.publish_request.created",c={requestId:i.request.id,requestedId:i.request.requested_id,title:i.request.title,status:i.request.status,createdAt:i.request.created_at,requester:{name:i.request.requester_name,email:i.request.requester_email}};await i.db.insertInto("events").values({id:t,organization_id:i.organizationId,type:"registry.publish_request.created",source:f,specversion:"1.0",subject:i.request.id,time:u,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(c),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:u,updated_at:u}).execute();let E=await i.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",i.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where(($)=>$.or([$("publisher","is",null),$("publisher","=",f)])).execute();if(E.length>0)await i.db.insertInto("event_deliveries").values(E.map(($)=>({id:Dut(),event_id:t,subscription_id:$.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:u}))).execute();try{await PG4`SELECT pg_notify('mesh_events', ${t})`.execute(i.db)}catch{}}async function GG4(i,u){let f=(await i.selectFrom("organization").select(["id"]).where("id","=",u).execute())[0];if(f?.id)return f.id;return(await i.selectFrom("organization").select(["id"]).where("slug","=",u).execute())[0]?.id??null}async function nG4(i,u){let t=await i.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",u).where("virtual_mcp_plugin_configs.plugin_id","=",mJ).execute();for(let f of t){let l=f.settings,c=typeof l==="string"?(()=>{try{return JSON.parse(l)}catch{return{}}})():l??{};if(c.acceptPublishRequests===!0){let E=c.rateLimitWindow==="minute"?"minute":"hour",$=c.rateLimitMax,w=typeof $==="number"&&Number.isFinite($)&&$>=1?Math.floor($):Nut;return{acceptPublishRequests:!0,requireApiToken:c.requireApiToken===!0,rateLimitEnabled:c.rateLimitEnabled===void 0?gut:c.rateLimitEnabled===!0,rateLimitWindow:E,rateLimitMax:w}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:gut,rateLimitWindow:IG4,rateLimitMax:Nut}}async function kG4(i,u,t){let f=t==="minute"?60000:3600000,l=new Date(Date.now()-f).toISOString(),c=await i.selectFrom("private_registry_publish_request").select((E)=>E.fn.countAll().as("count")).where("organization_id","=",u).where("created_at",">=",l).executeTakeFirst();return Number(c?.count??0)}async function jG4(i,u,t,f){let l=await i.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",u).where((c)=>c.or([c("id","=",t),c("title","=",f)])).executeTakeFirst();return l?{id:String(l.id),title:String(l.title)}:null}function Out(i){let{db:u,db:t}=i,f=new zL(t),l=new QL(t);return async(c)=>{let E=c.req.param("orgRef")??c.req.param("org");if(!E)return c.json({error:"Organization not found"},404);let $=await GG4(u,E);if(!$)return c.json({error:"Organization not found"},404);let w=await nG4(u,$);if(!w.acceptPublishRequests)return c.json({error:"Publish requests are not enabled for this registry."},403);if(w.requireApiToken){let D=c.req.header("Authorization"),g=D?.startsWith("Bearer ")?D.slice(7).trim():null;if(!g)return c.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await l.validate($,g))return c.json({error:"Invalid API key"},401)}if(w.rateLimitEnabled){if(await kG4(t,$,w.rateLimitWindow)>=w.rateLimitMax)return c.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:w.rateLimitWindow==="minute"?60:3600},429)}let d;try{d=await c.req.json()}catch{return c.json({error:"Invalid JSON body"},400)}let _=zC0.safeParse(d);if(!_.success)return c.json({error:"Invalid publish request payload",details:xG4.treeifyError(_.error)},400);let v=await jG4(t,$,_.data.data.id,_.data.data.title);if(v)return c.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:v},409);let h=await f.createOrUpdate({organization_id:$,requested_id:_.data.data.id,title:_.data.data.title,description:_.data.data.description??null,_meta:_.data.data._meta,server:_.data.data.server,requester_name:_.data.requester?.name??null,requester_email:_.data.requester?.email??null});try{await AG4({db:u,organizationId:$,request:h})}catch(D){console.warn("[private-registry] failed to emit publish-request event:",D)}return ou.capture({distinctId:_.data.requester?.email??`org:${$}`,event:"registry_publish_request_submitted",groups:{organization:$},properties:{organization_id:$,request_id:h.id,requested_id:h.requested_id,title:_.data.data.title,requester_email:_.data.requester?.email??null}}),c.json({id:h.id,requested_id:h.requested_id,status:h.status},201)}}var gut=!0,IG4="hour",Nut=100;var Zut=N(()=>{e4();wf();PH();uoi();toi();Ol()});var But={};Qi(But,{createPublishRequestHandler:()=>Out,createPublicMCPHandler:()=>vut});var Fut=N(()=>{hut();Zut()});var _1u={};Qi(_1u,{watchHandler:()=>xut,getProxyDispatch:()=>SG4,createApp:()=>RG4});import{readFileSync as XG4}from"fs";import{PrometheusSerializer as JG4}from"@opentelemetry/exporter-prometheus";import{DBOS as Qs}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as zG4,oAuthProtectedResourceMetadata as QG4}from"better-auth/plugins";async function KG4(i){let u=i.connect(),t;try{t=await Promise.race([u,Tut(yut)])}catch{return u.then((f)=>f.release(!0)).catch(()=>{}),!1}try{return await Promise.race([t.query("SELECT 1"),Tut(yut)]),t.release(),!0}catch{return t.release(!0),!1}}function Tut(i){return new Promise((u,t)=>setTimeout(()=>t(Error("pg health-check timeout")),i))}function SG4(){if(!Q5u)throw Error("getProxyDispatch() called before createApp() or without NATS \u2014 proxy dispatch unavailable");return Q5u}async function YG4(i,u){let{items:t}=await i.storage.connections.list(u,{where:{field:["connection_url"],operator:"like",value:`${Et0}%`},limit:1}),f=t[0];if(!f?.configuration_state)return null;return f.configuration_state.project_locator}function WG4(i){let u=new URLSearchParams;if(i){let[t,f]=i.split("/");if(t)u.set("workspace_hint",t);if(f)u.set("project_hint",f)}else u.set("auto_personal","true");return u.set("force_new","true"),u}async function RG4(i={}){let u=i.database??qt(),t=!1;A6.stop().catch((M)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",M)});let f,l,c=new B5u,E,$,w,d,_,v=null;if(i.disableNats)E=F5u(),f={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},l=new Ra,$={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},_=void 0,w={init:async()=>{},pump:(M)=>{(async()=>{let e=M.getReader();try{while(!0){let{done:Ji}=await e.read();if(Ji)break}}catch{}finally{e.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{v=zp0();let M=yu().natsCredsPath,e;if(M)try{e=XG4(M,"utf8")}catch(zu){console.error(`[app] failed to read NATS_CREDS at ${M}; connecting anonymously`,zu)}v.init(yu().natsUrls,e?{creds:e}:void 0);let Ji=woi()?new pmi({getJetStream:()=>v.getJetStream()}):null;Ji?.init().catch(()=>{}),f=Ji;let Li=new flu({getJetStream:()=>v.getJetStream()});Li.init().catch(()=>{}),l=Li,E=F5u({getConnection:()=>v.getConnection()}),$=new y5u({getConnection:()=>v.getConnection()}),w=new T5u({getConnection:()=>v.getConnection(),getJetStream:()=>v.getJetStream()}),d=rp0({getConnection:()=>v.getConnection()}),_=op0({getConnection:()=>v.getConnection()});let oi=sp0({getConnection:()=>v.getConnection()}),iu=$;$={start:(zu)=>iu.start(zu),broadcast:(zu)=>iu.broadcast(zu),publishControlFrame:(zu,ht)=>{oi.publishControlFrame(zu,ht).catch((X4)=>{console.warn("[TunnelControl] publishControlFrame failed (non-critical):",X4)})},stop:()=>iu.stop()},dV0(v),v.onReady(()=>{Ji?.init().catch((zu)=>{console.error("[McpListCache] Deferred init failed:",zu)}),Li.init().catch((zu)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",zu)}),E.start(),z50(()=>v.getConnection()),w.init().catch((zu)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",zu)})})}if(cb)await cb();iei(f),llu(l);let D={storage:new qL(u.db),streamBuffer:w,sseHub:A6},g=new P5u(D),O=new Rr(u.db),Z=new x5u(O);Z.start(),$.start((M)=>{Udi(M),g.execute({type:"CANCEL",taskId:M}).catch((e)=>{console.error("[Decopilot] CancelBroadcast execute failed:",e)})}).catch((M)=>{console.error("[Decopilot] CancelBroadcast start failed:",M)}),v?.onReady(()=>{$.start().catch((M)=>{console.error("[CancelBroadcast] Deferred start failed:",M)})}),w.init().catch((M)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",M)}),cb=async()=>{await g.stopAll(),g.dispose(),Z.dispose(),$.stop().catch(()=>{}),w.teardown(),f?.teardown(),c.teardown(),E.teardown(),Q50(),l.teardown(),iei(null),llu(null)};let B=new Hu;if(B.use("*",pVi({enabled:(M)=>ZW(M,"debug")==="1"})),B.use("*",PLi),B.use("/*",qt0({origin:(M)=>{if(M.includes("localhost")||M.includes("127.0.0.1"))return M;return M},credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),B.use("*",async(M,e)=>{if(await e(),M.req.path.includes("/files/"))return;if(M.req.path.includes("/fs/")&&M.req.path.endsWith("/read"))return;M.header("X-Frame-Options","DENY"),M.header("Content-Security-Policy","frame-ancestors 'none'")}),!yu().noTui)B.use("*",Fit());B.use("*",async(M,e)=>{if(await e(),OC(M.req.path))return;if(M.res.status>=500){let Li=await M.res.clone().text();console.error(`[5xx Response] ${M.req.method} ${M.req.path} - ${M.res.status}:`,Li)}}),B.get(Xw.HEALTH,(M)=>{if(t)return M.json({status:"shutting_down"},503);return M.json({status:"ok"})}),B.get(Xw.HEALTH_LIVE,(M)=>{return M.json({status:"ok"})}),B.get(Xw.HEALTH_READY,async(M)=>{if(t)return M.json({status:"shutting_down"},503);let e={};if(e.postgres={status:await KG4(u.pool)?"up":"down"},v)e.nats=v.isConnected()?{status:"up"}:{status:"down"};else e.nats={status:"down"};let Ji=e.postgres.status==="up",Li=Ji?200:503;return M.json({status:Ji?"ready":"not_ready",services:e},Li)}),B.get(Xw.METRICS,async(M)=>{try{let e=await GLi.collect(),Ji=LG4.serialize(e.resourceMetrics);return M.text(Ji,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(e){return console.error("Failed to collect metrics:",e),M.text("# Error collecting metrics",500)}}),B.route("/api/config",kp0),B.route("/api/auth/custom",jV0),B.all("/api/auth/*",async(M)=>{return await w4.handler(M.req.raw)});let F=w70();F.use("/.well-known/oauth-protected-resource/mcp/:connectionId",oJ),F.use("/mcp/:connectionId/.well-known/oauth-protected-resource",oJ),B.route("/",F),B.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",Oe),B.route("/",h70()),B.use("/oauth-proxy/:connectionId/*",oJ),B.all("/oauth-proxy/:connectionId/*",Uut);let y=async(M)=>{let Ji=await HG4()(M.req.raw),Li=await Ji.json();return Response.json(Li,Ji)};B.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",oJ),B.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",y);let T=async(M)=>{let Ji=await bG4()(M.req.raw),Li=await Ji.json();return Response.json(Li,Ji)};B.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",T);let U=cV0({ttlMs:120000}),I=await m20({db:u.db,auth:w4,encryption:{key:yu().encryptionKey},observability:{tracer:W2,meter:Mt},modelListCache:c,providerKeyCache:E,memberRoleCache:U,linkStatusProbe:d,publishLinkControlFrame:(M,e)=>$.publishControlFrame(M,e)});Y9.set(I);let j=new fZ(yu().encryptionKey);peu({db:u.db,baseUrl:H_()});let A=h$i(u.db),n=new Sr(u.db),q=Oit({db:u.db});s1u({storage:A,meshContextFactory:q}),jtu({meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6},prepareLinkWorkFn:Ne0,workPublisher:_}),Itu({dispatchRunFn:De0,meshContextFactory:q,deps:{runRegistry:g,cancelBroadcast:$,streamBuffer:w,sseHub:A6}});let S=new qL(u.db);YF0({getJetStream:()=>v?.getJetStream()??null,getJetStreamManager:async()=>{let M=v?.getConnection();return M?await Put.jetstreamManager(M):null},messageParts:S.messageParts(),resolveRun:async(M)=>{let e=await u.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",M).executeTakeFirst();return e?{orgId:e.organization_id,createdBy:e.created_by,version:e.message_storage_version??1,status:e.status,runFenceToken:e.run_fence_token,title:e.title??null}:null},completeRunIfNotCompleted:async(M,e)=>{let Ji=await S.completeRunIfNotCompleted(M,e);return hxi(A6,e,M,Ji),Ji},markRunRequiresAction:async(M,e)=>{let Ji=await S.requiresActionIfInProgress(M,e);return hxi(A6,e,M,Ji),Ji},markRunFailed:async(M,e,Ji,Li)=>{let oi=await S.markRunFailed(M,e,Ji,Li);return hxi(A6,e,M,oi),oi},persistTitle:(M,e,Ji)=>S.update(M,e,{title:Ji}),onTitleUpdated:async({runId:M,orgId:e,title:Ji})=>{let Li=await S.get(M,e).catch(()=>null);A6.emit(e,A5(M,Li?.status??"in_progress",{title:Ji,virtualMcpId:Li?.virtual_mcp_id??void 0,createdBy:Li?.created_by,triggerId:Li?.trigger_id,branch:Li?.branch??null,createdAt:Li?.created_at,updatedAt:Li?.updated_at}))},bumpProgress:async({runId:M,orgId:e})=>{await S.bumpProgress(M,e)},recordCompleted:async({runId:M,orgId:e,distinctId:Ji,usage:Li})=>{ou.capture({distinctId:Ji,event:"chat_message_completed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",input_tokens:Li.inputTokens,output_tokens:Li.outputTokens,total_tokens:Li.totalTokens}})},recordFailed:async({runId:M,orgId:e,distinctId:Ji,reason:Li,kind:oi})=>{ou.capture({distinctId:Ji,event:"chat_message_failed",groups:{organization:e},properties:{organization_id:e,thread_id:M,transport:"projector",error_category:oi,error_message:Li}})},purgeRun:async(M)=>{w.purge(M)}}),uk0({meshContextFactory:q,systemDatabaseUrl:SLi(yu().databaseUrl,yu().databasePgSsl),streamBuffer:w}),git(),iau();let Y=async(M,e,Ji)=>{let Li=await A.findById(M,e);if(!Li)throw Error("Automation not found");return ulu({automationId:Li.id,organizationId:Li.organization_id,triggerId:null})},V=new LH(A,({automation:M,trigger:e,contextMessages:Ji,idempotencyKey:Li})=>Ha({automationId:M.id,organizationId:M.organization_id,triggerId:e.id,contextMessages:Ji},{idempotencyKey:Li})),L=[ad(),mS(),wD()];for(let M of L)Nxi(M).then(()=>{}).catch((e)=>console.error("[monitoring] Retention cleanup failed:",e));let Ei=()=>u.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((M)=>console.error("[auth] Expired API key cleanup failed:",M));Ei(),setInterval(Ei,86400000).unref(),B.use("*",async(M,e)=>{if(TLi(M.req.path))return e();let Ji={measure:async(oi,iu)=>{o3(M,oi);try{return await iu()}finally{Rw(M,oi)}}},Li=await Y9.create(M.req.raw,{timings:Ji});Li.automationRunner=Y,M.set("meshContext",Li);try{await e()}finally{let oi=Li.pendingRevalidations;if(oi.length>0)Promise.race([Promise.allSettled(oi),new Promise((zu)=>setTimeout(zu,30000))]).catch((zu)=>console.error("[mesh] revalidation cleanup error:",zu))}}),B.use("/api/:org/decopilot/*",sJ),B.use("/api/:org/v1/*",sJ),B.use("/api/:org/files/*",sJ),B.use("*",async(M,e)=>{let Ji=M.req.path;if(Ji.startsWith("/api/org-sso/")||Ji.startsWith("/api/auth/")||Ji.startsWith("/api/tools/management")||Ji.startsWith("/oauth-proxy/"))return e();let Li=M.get("meshContext");if(!Li?.organization?.id||!Li?.auth?.user?.id)return e();if(!(await Li.storage.orgSsoConfig.getByOrgId(Li.organization.id))?.enforced)return e();if(!await Li.storage.orgSsoSessions.isValid(Li.auth.user.id,Li.organization.id))return M.json({error:"SSO authentication required for this organization"},403);return e()});let $i=new Hu;$i.use("*",Yd({mountPath:"/api/org-sso"})),$i.route("/",pUi()),B.route("/api/org-sso",$i),B.get("/api/tools/management",(M)=>{return M.json({tools:uri,grouped:VO()})}),B.use("/mcp/*",async(M,e)=>{o3(M,"mcp");try{return await e()}finally{Rw(M,"mcp")}});let li=async(M,e)=>{let Ji=M.var.meshContext;if(!Ji.auth.user?.id&&!Ji.auth.apiKey?.id){let Li=new URL(M.req.url);return M.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${Li.origin}${Li.pathname}/.well-known/oauth-protected-resource"`}})}return await e()};if(B.use("/mcp/:connectionId?",li),B.use("/mcp/gateway/:virtualMcpId?",li),B.use("/mcp/virtual-mcp/:virtualMcpId?",li),B.use("/mcp/self",li),G5()){let{mountDevRoutes:M}=(Wit(),nxi(Yit));M(B,li)}let ii=new Hu;ii.use("*",Yd({mountPath:"/mcp"})),ii.route("/",bFi()),B.route("/mcp",ii);let m=new Hu;m.use("*",Yd({mountPath:"/mcp/self"})),m.route("/",Exi()),B.route("/mcp/self",m);let Oi=new Hu;Oi.use("*",Yd({mountPath:"/mcp"})),Oi.route("/",MFi()),B.route("/mcp",Oi),B.use("/api/:org/models/*",async(M,e)=>{o3(M,"llm_models");try{return await e()}finally{Rw(M,"llm_models")}});let _i=j3u({cancelBroadcast:$,streamBuffer:w,runRegistry:g,linkStatusProbe:d});if(B.route("/api",_i),v!=null)Q5u=ep0({getConnection:()=>v?.getConnection()??null});B.route("/api",gp0()),B.get("/api/links/me",async(M)=>{try{let e=M.req.header("authorization")??"",Ji=/^Bearer\s+(.+)$/i.exec(e),Li=null;if(Ji){let iu=(Ji[1]??"").trim();Li=await vp0(iu,w4.api)}else Li=M.get("meshContext")?.auth?.user?.id??null;if(!Li)return M.json({error:"unauthorized"},401);let oi=d?await d(Li):{online:!1,capabilities:[]};if(!oi.online)return M.json(null);return M.json({hostname:oi.hostname,cliVersion:oi.cliVersion})}catch(e){return console.error("[links/me] presence probe failed; reporting offline:",e instanceof Error?e.message:String(e)),M.json(null)}}),B.use("/api/:org/files/*",sJ),B.route("/api",Kp0);let Ii=new Hu;Ii.use("*",Yd({mountPath:"/api"})),Ii.route("/",$xi()),B.route("/api",Ii),B.route("/api",Ap0);let Vi=new Hu;Vi.use("*",Yd({mountPath:"/api"})),Vi.route("/",wxi({tokenStorage:n,automationEventDispatcher:V})),B.route("/api",Vi);let Wi=new Wr(u.db),ri=new Hu;ri.use("*",Yd({mountPath:"/api"})),ri.route("/",GPi()),B.route("/api",ri),B.route("/api/deco-sites",Ke0()),B.route("/api/deco-apps",yp0());let gi=new Hu;gi.use("*",Yd({mountPath:"/api/deco-sites"})),gi.route("/",kPi()),B.route("/api/deco-sites",gi);let Xi=new Hu;Xi.use("*",Yd({mountPath:"/api/vm-events"})),Xi.route("/",Bp0()),B.route("/api/vm-events",Xi);let{createPublishRequestHandler:Gi,createPublicMCPHandler:Di}=await Promise.resolve().then(() => (Fut(),But)),wi={db:u.db,vault:{encrypt:(M)=>j.encrypt(M),decrypt:(M)=>j.decrypt(M)}},fi=Gi(wi),ji=Di(wi);B.use("/org/:orgRef/registry/publish-request",oJ),B.post("/org/:orgRef/registry/publish-request",fi),B.use("/org/:orgSlug/registry/*",oJ),B.all("/org/:orgSlug/registry/*",ji),B.post("/api/:org/registry/publish-request",fi),B.all("/api/:org/registry/*",ji);let a=dp0({kvStorage:Wi,runRegistry:g,streamBuffer:w,sseHub:A6,cancelBroadcast:$,tokenStorage:n,automationEventDispatcher:V,mountDevAssets:G5(),mcpAuth:li,oauthProxyHandler:Uut,watchHandler:xut,betterAuthProtectedResourceHandler:y,getNatsConnection:()=>v?.getConnection()??null});return B.route("/api/:org",a),B.notFound((M)=>{return M.json({error:"Not Found",path:M.req.path},404)}),B.onError(ye0),Object.assign(B,{markShuttingDown:()=>{t=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([A6.stop(),cb?Promise.resolve(cb()).finally(()=>{cb=null}):Promise.resolve()]),v)await v.drain().catch((M)=>console.error("[shutdown] NATS drain error:",M));console.log("[shutdown] Flushing telemetry..."),await H3().catch((M)=>console.error("[shutdown] Telemetry flush error:",M)),console.log("[shutdown] Closing database..."),await Q2(u).catch((M)=>console.error("[shutdown] Database close error:",M)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await Qs.registerQueue(h5,{partitionQueue:!0,concurrency:e1u,minPollingIntervalMs:a1u}),await Qs.registerQueue(s_,{partitionQueue:!0,concurrency:ktu}),await Qs.registerQueue(f7,{partitionQueue:!0,concurrency:xtu}),await Qs.registerQueue(IO,{partitionQueue:!0,concurrency:ik0}),await S3u(A),await Promise.allSettled(["automations-gate","automations-global"].map((M)=>Qs.deleteQueue(M))),await o1u(u.pool),kc0().catch((M)=>{console.error("[studio-pack-backfill] failed:",M)}),uau().catch((M)=>{console.error("[org-fs] public-sets boot sync kick failed:",M)})}})}var Put,yut=5000,Q5u=null,cb=null,Uut=async(i)=>{let u=i.req.param("connectionId");if(!u)return i.json({error:"Missing connectionId"},400);let t=i.req.path.split("/").filter(Boolean),f=t[t.length-1],l=i.get("meshContext");if(!l)l=await Y9.create(i.req.raw),i.set("meshContext",l);let c=i.req.param("org")?l.organization?.id:void 0,E=await l.storage.connections.findById(u,c);if(!E?.connection_url)return i.json({error:"Connection not found"},404);let $=await nz(E.connection_url),w,d=new URL(E.connection_url);if($.ok)w=(await $.json()).authorization_servers?.[0];if(!w)w=d.origin;let _=await Ze(w);if(!_.ok)return i.json({error:"Failed to get auth server metadata"},502);let v=await _.json(),h;if(f==="authorize")h=v.authorization_endpoint;else if(f==="token")h=v.token_endpoint;else if(f==="register")h=v.registration_endpoint;if(!h)return i.json({error:`Unknown OAuth endpoint: ${f}`},404);let D=new URL(h),g=new URL(i.req.url);if(D.search=g.search,f==="authorize"){let A=D.searchParams.get("redirect_uri");if(A){let n=yu().baseUrl??g.origin;try{let q=new URL(A),S=new URL(n);if(!(q.origin===S.origin||q.hostname==="localhost"))return i.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return i.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}D.searchParams.set("redirect_uri",A)}if(D.searchParams.has("resource"))D.searchParams.set("resource",E.connection_url);if($t0(E.connection_url))try{let n=await YG4(l,E.organization_id),q=WG4(n);for(let[S,Y]of q)D.searchParams.set(S,Y)}catch(n){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",n)}return i.redirect(D.toString(),302)}let O={Accept:i.req.header("Accept")||"application/json"},Z=i.req.header("Content-Type");if(Z)O["Content-Type"]=Z;let B=i.req.header("Authorization");if(B)O.Authorization=B;let F,y=null,T=null;if(i.req.method!=="GET"&&i.req.method!=="HEAD")if(f==="token"&&Z?.includes("application/x-www-form-urlencoded")){if(B?.toLowerCase().startsWith("basic "))try{let Y=atob(B.slice(6).trim()),V=Y.indexOf(":");if(V!==-1){let L=decodeURIComponent(Y.slice(0,V)),Ei=decodeURIComponent(Y.slice(V+1));y=L||null,T=Ei||null}}catch{}let A=await i.req.formData();if(A.has("resource"))A.set("resource",E.connection_url);let n=A.get("client_id"),q=A.get("client_secret");if(typeof n==="string"&&n)y=n;if(typeof q==="string"&&q)T=q;let S=new URLSearchParams;for(let[Y,V]of A.entries())S.append(Y,V.toString());F=S.toString()}else if(f==="register"&&Z?.toLowerCase().includes("application/json")){let A=await l.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",E.organization_id).executeTakeFirst(),n=await i.req.text(),q={};try{q=n?JSON.parse(n):{}}catch{F=n}let S=typeof q==="object"&&q!==null&&!Array.isArray(q);if(F===void 0&&!S)F=n;if(F===void 0){let Y=q,V=Y.metadata&&typeof Y.metadata==="object"?Y.metadata:{};Y.metadata={...V,organization_id:E.organization_id,...A?.slug?{organization_slug:A.slug}:{},...A?.name?{organization_name:A.name}:{}},F=JSON.stringify(Y),O["Content-Type"]="application/json"}}else F=i.req.raw.body??void 0;let U=await fetch(D.toString(),{method:i.req.method,headers:O,body:F,duplex:"half",redirect:"manual"}),I=new Headers,j=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[A,n]of U.headers.entries())if(!j.includes(A.toLowerCase()))I.set(A,n);if(f==="token"&&U.ok){let A=await U.text();try{let n=JSON.parse(A);if(typeof n.access_token==="string"&&n.access_token){let q=typeof n.expires_in==="number"?new Date(Date.now()+n.expires_in*1000):null,S=null;try{S=await kz(E.connection_url)??h}catch{S=h}let Y={connectionId:u,accessToken:n.access_token,refreshToken:typeof n.refresh_token==="string"?n.refresh_token:null,scope:typeof n.scope==="string"?n.scope:null,expiresAt:q,clientId:y,clientSecret:T,tokenEndpoint:S};await new q1(l.db,l.vault).upsert(Y)}}catch(n){console.error("[oauth-proxy] failed to persist downstream token:",n)}return new Response(A,{status:U.status,statusText:U.statusText,headers:I})}return new Response(U.body,{status:U.status,statusText:U.statusText,headers:I})},xut=async(i)=>{let u=i.var.meshContext;if(!(u.auth.user?.id??u.auth.apiKey?.userId))return i.json({error:"Unauthorized"},401);let f=u.organization?.id;if(!f)return i.json({error:"organization id missing"},400);let l=i.req.query("types"),c=l?l.split(",").map(($)=>$.trim()).filter(Boolean):null,E=crypto.randomUUID();return Wd(i,async($)=>{if(await $.writeSSE({event:"connected",data:JSON.stringify({listenerId:E,organizationId:f,typePatterns:c,connectedAt:new Date().toISOString()})}),!A6.add({id:E,organizationId:f,typePatterns:c?.length?c:null,push:(_)=>{$.writeSSE({id:_.id,event:_.type,data:JSON.stringify(_)}).catch(()=>{A6.remove(f,E)})}})){await $.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let d=setInterval(()=>{$.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(d)})},30000);await new Promise((_)=>{$.onAbort(()=>{clearInterval(d),A6.remove(f,E),_()})})})},LG4,HG4=()=>QG4(w4),bG4=()=>zG4(w4);var v1u=N(()=>{xt();tau();HE();gW();wf();sf();_ci();Vt0();iri();c8();Ne();Iwu();zE();Q1();e4();Jwu();Wwu();Be0();X3u();o5();pwi();J3u();Te0();K3u();_p0();Np0();Fp0();z3u();Tp0();RFi();Be();Gp0();qFi();E5u();jp0();Sp0();c5u();l5u();h4i();mci();Qp0();Mw();j$i();zr();Elu();Hp0();Rp0();Vp0();mp0();ap0();pp0();_it();vit();Toi();Aoi();Nit();lEi();I5u();jw();Y3u();la();Utu();lEi();G3u();qai();Vai();Zit();BW();yit();$K();Iwu();GQ();Pdi();Put=k(o2(),1);LG4=new JG4});var nut={};Qi(nut,{resolveClientDir:()=>eG4,resolveAssetPathWithTraversalCheck:()=>Gut,isPathWithinDirectory:()=>Aut,createAssetHandler:()=>aG4});import{resolve as Hs,dirname as CG4,join as MG4,extname as qG4,basename as VG4,sep as Iut}from"path";function rG4(i,u){if(i===u||VG4(i)==="index.html")return{"Cache-Control":"no-cache"};if(i.includes(`${Iut}assets${Iut}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function Aut(i,u){let t=Hs(u),f=Hs(i);return f===t||f.startsWith(t+"/")}function Gut({requestPath:i,clientDir:u}){let t=i.startsWith("/")?i.slice(1):i,f=Hs(u,t);if(!Aut(f,u))return null;return f}function eG4(i,u="../client"){let t=new URL(i),f=CG4(t.pathname);return Hs(f,u)}function aG4(i={}){let{env:u="production",clientDir:t=mG4,isServerPath:f=()=>!1}=i;if(u==="development")return async function(c){return null};return async function(c){if(c.method!=="GET")return null;let E=new URL(c.url),$;try{$=decodeURIComponent(E.pathname)}catch{return null}if(f($))return null;let w=Gut({requestPath:$,clientDir:t});if(!w)return null;let d=MG4(w,"index.html"),_=Hs(t,"index.html"),v=c.headers.get("accept"),D=v?.includes("text/html")||v?.includes("*/*")&&["",".html"].includes(qG4(w))?[d,_]:[];for(let g of[w,...D])try{let O=Bun.file(g);if(await O.exists())return new Response(O,{headers:rG4(g,_)})}catch{}if($.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var mG4="./dist/client";var kut=()=>{};var jut={};Qi(jut,{tryUpgradePreviewWs:()=>fn4,tryHandlePreviewHttp:()=>tn4,previewWebSocketHandler:()=>ln4,parsePreviewBaseDomain:()=>un4,isPreviewWsData:()=>Txi,extractHandleFromHost:()=>H5u});function pG4(i){if(i.method!=="GET")return!1;return(i.headers.get("accept")??"").includes("text/html")}function in4(){return new Response(sG4,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function un4(i){if(!i||i.trim()==="")return null;let u=i.includes("{handle}")?i.replace("{handle}","__handle__"):i,t;try{t=new URL(u)}catch{return null}let f=t.hostname;if(i.includes("{handle}")){let l=f.indexOf(".");if(l<=0||l===f.length-1)return null;return f.slice(l+1)}return f}function H5u(i,u){if(!i||!u)return null;let t=i.indexOf(":"),f=(t>=0?i.slice(0,t):i).toLowerCase(),c=`.${u.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!f.endsWith(c))return null;let E=f.slice(0,f.length-c.length);if(!E||E.includes("."))return null;return E}async function tn4(i,u){let t=H5u(i.headers.get("host"),u.baseDomain);if(!t)return null;let f=await u.getRunner();if(!f)return Rs(503,"preview proxy not configured");let l=await f.proxyPreviewRequest(t,i);if(l.headers.get(_J)&&pG4(i))return in4();return l.headers.delete(_J),l}function Rs(i,u){return new Response(JSON.stringify({error:u}),{status:i,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Txi(i){return typeof i==="object"&&i!==null&&i.kind==="preview"}async function fn4(i,u,t){if((i.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let f=H5u(i.headers.get("host"),t.baseDomain);if(!f)return null;let l=await t.getRunner();if(!l)return Rs(503,"preview proxy not configured");let c=await l.resolvePreviewUpstreamUrl(f);if(!c)return Rs(404,"sandbox not found");let E=new URL(i.url);if(E.pathname.startsWith("/_sandbox")||E.pathname.startsWith("/_decopilot_vm"))return Rs(404,"not found");let $=`${c.replace(/^http/,"ws")}${E.pathname}${E.search}`,w=i.headers.get("sec-websocket-protocol"),d=w?w.split(",").map((h)=>h.trim()).filter(Boolean):[],_={kind:"preview",upstreamUrl:$,upstreamProtocols:d,pending:[],upstream:null,closed:!1};if(!u.upgrade(i,{data:_}))return Rs(426,"upgrade failed");return}function bs(i,u,t,f){if(u.closed)return;u.closed=!0;try{i.close(t,f)}catch{}try{u.upstream?.close()}catch{}}var oG4=256,sG4='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',ln4;var Xut=N(()=>{E1u();ln4={open(i){let u=i.data;if(!Txi(u))return;let t;try{t=u.upstreamProtocols.length>0?new WebSocket(u.upstreamUrl,u.upstreamProtocols):new WebSocket(u.upstreamUrl)}catch(f){console.warn(`[preview-ws] failed to dial upstream ${u.upstreamUrl}: ${f instanceof Error?f.message:String(f)}`),bs(i,u,1011,"upstream connect failed");return}t.binaryType="arraybuffer",u.upstream=t,t.addEventListener("open",()=>{while(u.pending.length>0){let f=u.pending.shift();if(f!==void 0)t.send(f)}}),t.addEventListener("message",(f)=>{if(u.closed)return;i.send(f.data)}),t.addEventListener("close",(f)=>{bs(i,u,f.code||1000,f.reason||"")}),t.addEventListener("error",()=>{bs(i,u,1011,"upstream error")})},message(i,u){let t=i.data;if(!Txi(t))return;let f=t.upstream;if(f&&f.readyState===WebSocket.OPEN){f.send(u);return}if(t.pending.length>=oG4){bs(i,t,1011,"preview ws backlog overflow");return}t.pending.push(u)},close(i){let u=i.data;if(!Txi(u))return;bs(i,u,1000,"")}}});var Kut={};Qi(Kut,{bootstrapDevLinkSession:()=>Dn4});import{existsSync as cn4}from"fs";import{chmod as En4,mkdir as $n4,rename as wn4,writeFile as dn4}from"fs/promises";import{dirname as _n4,join as Jut}from"path";function vn4(i){return Jut(i,"dev-link")}function hn4(i){let u=process.env.DEV_LINK_SESSION_PATH;if(u&&u.trim()!=="")return u;return Jut(vn4(i),"session.json")}async function Dn4(i,u){let t=hn4(i),f=qt().db,l=xd()?await Wa():await f.selectFrom("user").select(["id","email","name"]).orderBy("createdAt","desc").executeTakeFirst();if(!l?.id)return null;if(cn4(t))try{let d=await Bun.file(t).json(),_=d.user?.sub,v=d.accessToken;if(_===l.id&&typeof v==="string"){if(await w4.api.verifyApiKey({body:{key:v}}).then((D)=>D?.valid===!0).catch(()=>!1))return{path:t,userSub:_}}}catch{}let c=null;try{c=await w4.api.createApiKey({body:{name:"dev-link (auto-minted by bun run dev)",userId:l.id,permissions:{"*":["*"]},expiresIn:2592000,rateLimitEnabled:!1}})}catch(w){return console.warn("[dev-link] failed to mint API key:",w instanceof Error?w.message:String(w)),null}if(!c?.key)return null;let E={target:u,clientId:"dev-link",user:{sub:l.id,...l.email?{email:l.email}:{},...l.name?{name:l.name}:{}},accessToken:c.key,createdAt:new Date().toISOString()};await $n4(_n4(t),{recursive:!0});let $=`${t}.tmp`;return await dn4($,JSON.stringify(E,null,2),{mode:384}),await En4($,384),await wn4($,t),{path:t,userSub:l.id}}var Sut=N(()=>{zE();c8();Bg()});var Kn4={};import{existsSync as Tn4}from"fs";function Qut(i,u){if(!u)return i;let t=new URL(i);if(!t.searchParams.has("sslmode"))t.searchParams.set("sslmode","verify-full");return t.toString()}function In4(i){let u=new Headers(i.headers);for(let[t,f]of Object.entries(xn4))u.set(t,f);return new Response(i.body,{status:i.status,statusText:i.statusText,headers:u})}async function Jn4(i){let u;try{u=await gn4.create({systemDatabaseUrl:Qut(T3.databaseUrl,T3.databasePgSsl),systemDatabaseSchemaName:"dbos"});let t=await u.listWorkflows({status:"PENDING",queueName:s_,executorId:i,loadInput:!1,loadOutput:!1});if(t.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${i})`);return}let f=t.map((l)=>l.workflowID);await u.resumeWorkflows(f,{queueName:s_}),console.log(`[shutdown] re-enqueued ${f.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${i}):`,f)}catch(t){console.error("[shutdown] thread-gate handoff failed:",t)}finally{await u?.destroy().catch(()=>{})}}async function Pxi(i){if(zut)return;zut=!0,console.log(`
|
|
84303
84303
|
[shutdown] Received ${i}, shutting down gracefully...`);let u=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,t=Math.max(u-5000,1e4),f=setTimeout(()=>{console.error(`[shutdown] Timed out after ${t}ms, forcing exit.`),process.exit(1)},t);f.unref?.();let l=0;try{Xn4(),Uxi.markShuttingDown();let c=Number(process.env.SHUTDOWN_DRAIN_MS??Math.floor(t*0.6));await Zt(c),await jn4.stop(!0);let E=Cs.executorID;await Cs.shutdown(),await Jn4(E),await Uxi.shutdown()}catch(c){console.error("[shutdown] Error during shutdown:",c),l=1}clearTimeout(f),process.exit(l)}var T3,Cs,gn4,Nn4,On4,Zn4,Bn4,Fn4,Hut,yn4,Yut,Un4,Pn4,xn4,An4,Gn4,nn4,b5u,R5u,kn4,but,Wut,Uxi,C5u,Lut,jn4,Xn4,zut=!1;var Rut=N(async()=>{Bl();Jeu();xt();Q1();Qeu();T3=yu();AQu();({DBOS:Cs,DBOSClient:gn4}=await import("@dbos-inc/dbos-sdk"));Nn4=[h5,s_,f7,IO],On4=T3.dispatchRole==="worker"?Nn4:T3.dispatchRole==="api"?[]:void 0;Cs.setConfig(Xeu({systemDatabaseUrl:Qut(T3.databaseUrl,T3.databasePgSsl),poolSize:Number(process.env.DBOS_POOL_SIZE??5),executorID:T3.podName,listenQueues:On4}));({createApp:Zn4}=await Promise.resolve().then(() => (v1u(),_1u))),{isServerPath:Bn4}=await Promise.resolve().then(() => (h4i(),dQu)),{createAssetHandler:Fn4,resolveClientDir:Hut}=await Promise.resolve().then(() => (kut(),nut)),yn4=T3.port,Yut=Hut(import.meta.url,"../client"),Un4=Tn4(Yut)?Yut:Hut(import.meta.url,"../dist/client"),Pn4=Fn4({clientDir:Un4,isServerPath:Bn4}),xn4={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};({parsePreviewBaseDomain:An4,tryHandlePreviewHttp:Gn4,tryUpgradePreviewWs:nn4,previewWebSocketHandler:b5u,isPreviewWsData:R5u}=await Promise.resolve().then(() => (Xut(),jut))),{getOrInitSharedRunner:kn4}=await Promise.resolve().then(() => (Xa(),in0)),but=An4(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),Wut={baseDomain:but??"",getRunner:kn4},Uxi=await Zn4(),C5u=process.env.DBOS_CONDUCTOR_KEY?.trim(),Lut=process.env.DBOS_CONDUCTOR_URL?.trim();await Cs.launch({...C5u?{conductorKey:C5u}:{},...C5u&&Lut?{conductorURL:Lut}:{}});console.log(`[dbos] application version: ${Cs.applicationVersion}`);await Uxi.initDbos();if(!T3.isCli){let{bannerLines:i}=await Promise.resolve().then(() => (FY(),wM));console.log("");for(let u of i())console.log(u)}jn4=Bun.serve({idleTimeout:0,port:yn4,hostname:"0.0.0.0",fetch:async(i,u)=>{if(but){let f=await nn4(i,u,Wut);if(f===void 0)return;if(f)return f;let l=await Gn4(i,Wut);if(l)return l}let t=await Pn4(i);if(t)return In4(t);return Uxi.fetch(i,{server:u})},websocket:{open(i){if(R5u(i.data))b5u.open(i)},message(i,u){if(R5u(i.data))b5u.message(i,u)},close(i){if(R5u(i.data))b5u.close(i)}},development:!1}),Xn4=zeu();if(T3.localMode)Promise.resolve().then(() => (Bg(),TFi)).then(async({seedLocalMode:i,markSeedComplete:u})=>{try{let t=await i();if(process.env.DEV_LINK_SESSION_PATH)try{let{bootstrapDevLinkSession:f}=await Promise.resolve().then(() => (Sut(),Kut)),l=T3.baseUrl??`http://localhost:${T3.port}`,c=await f(T3.dataDir,l);if(c)console.log(`[dev-link] session ready at ${c.path} (userSub=${c.userSub})`);else console.warn("[dev-link] no admin user yet \u2014 skipping session bootstrap. The auto-spawned link will refuse to start until an admin exists.")}catch(f){console.error("[dev-link] bootstrap failed:",f)}}catch(t){console.error("Failed to seed local mode:",t)}finally{u()}}).catch(async(i)=>{console.error("Failed to load local-mode module:",i);try{let{markSeedComplete:u}=await Promise.resolve().then(() => (Bg(),TFi));u()}catch{}});process.on("SIGTERM",()=>Pxi("SIGTERM"));process.on("SIGINT",()=>Pxi("SIGINT"));process.on("SIGHUP",()=>Pxi("SIGHUP"));process.on("unhandledRejection",(i)=>{console.error("[process] Unhandled rejection:",i)});process.on("uncaughtException",(i)=>{console.error("[process] Uncaught exception:",i),Pxi("uncaughtException")})});var M5u={};Qi(M5u,{startServer:()=>Wn4,interceptConsoleForTui:()=>Yn4});function Sn4(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}function Yn4(){let{log:i,warn:u,error:t}=console;function f(...l){let c=l.map((E)=>typeof E==="string"?E:Bun.inspect(E)).join(" ");for(let E of c.split(`
|
|
84304
84304
|
`)){let $=Sn4(E).trim();if(!$)continue;o_({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:$})}}return console.log=f,console.warn=f,console.error=f,p1i(!0),()=>{console.log=i,console.warn=u,console.error=t,p1i(!1)}}async function Wn4(i){let u=await PO(Number(i.port)),{settings:t,services:f}=await s1i({port:String(u),home:i.home,localMode:i.localMode,skipMigrations:i.skipMigrations,noTui:i.noTui});for(let l of f)a_({name:l.name,status:"ready",port:l.port});TM(),await Rut().then(() => Kn4),UM(`http://localhost:${t.port}`)}var q5u=N(()=>{uCi();UO();cCi()});import{parseArgs as Ln4}from"util";import{homedir as Ms}from"os";import{join as xxi}from"path";function qs(i){if(i.noTui)return!1;return i.isTty===!0}var{values:v4,positionals:Eb}=Ln4({args:process.argv.slice(2),options:{port:{type:"string",short:"p",default:process.env.PORT||"3000"},"vite-port":{type:"string",default:process.env.VITE_PORT||"4000"},home:{type:"string"},"base-url":{type:"string"},help:{type:"boolean",short:"h",default:!1},version:{type:"boolean",short:"v",default:!1},"skip-migrations":{type:"boolean",default:!1},"no-tui":{type:"boolean",default:!1},"no-local-mode":{type:"boolean",default:!1},"local-sandbox-provider":{type:"boolean",default:!1},hot:{type:"boolean",default:!1},prune:{type:"boolean",default:!1},target:{type:"string"},env:{type:"string",short:"e"},"dry-run":{type:"boolean",default:!1},batch:{type:"string"},limit:{type:"string"},org:{type:"string"}},allowPositionals:!0});if(v4.help)console.log(`
|
|
84305
84305
|
Deco CMS \u2014 Open-source control plane for your AI agents
|